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 @@
ISC License
Copyright (c) 2012-2021 Contributers to xrpl.js
Permission to use, copy, modify, and distribute this software for any
purpose with or without fee is hereby granted, provided that the above
copyright notice and this permission notice appear in all copies.
THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+149
View File
@@ -0,0 +1,149 @@
## Deprecated
This library (ripple-lib 1.x) has been deprecated in favor of [xrpl.js version 2+](https://github.com/XRPLF/xrpl.js).
# ripple-lib (RippleAPI)
A JavaScript/TypeScript API for interacting with the XRP Ledger
[![NPM](https://nodei.co/npm/ripple-lib.png)](https://www.npmjs.org/package/ripple-lib)
This library is for integrating a JavaScript/TypeScript app with the XRP Ledger and supports functionality such as IOUs, payment paths, the decentralized exchange, account settings, payment channels, escrows, multi-signing, and more.
## [➡️ Reference Documentation](https://github.com/XRPLF/xrpl.js/blob/1.x/docs/index.md)
Use the above link to view the full reference documentation.
### Features
+ Connect to a `rippled` server from Node.js or a web browser
+ Helpers for creating requests and parsing responses for the [rippled API](https://developers.ripple.com/rippled-api.html)
+ Listen to events on the XRP Ledger (transactions, ledger, validations, etc.)
+ Sign and submit transactions to the XRP Ledger
+ Type definitions for TypeScript
### Requirements
+ **[Node.js v14](https://nodejs.org/)** is recommended. Other versions may work but are not frequently tested.
+ **[Yarn](https://yarnpkg.com/)** is recommended. `npm` may work but we use `yarn.lock`.
## Getting Started
See also: [RippleAPI Beginners Guide](https://xrpl.org/get-started-with-rippleapi-for-javascript.html)
In an existing project (with `package.json`), install `ripple-lib`:
```
$ yarn add ripple-lib
```
Then see the [documentation](#documentation).
### Using ripple-lib with React Native
If you want to use `ripple-lib` with React Native you will need to have some of the NodeJS modules available. To help with this you can use a module like [rn-nodeify](https://github.com/tradle/rn-nodeify).
1. Install dependencies (you can use `npm` as well):
```shell
yarn add react-native-crypto
yarn add ripple-lib
# install peer deps
yarn add react-native-randombytes
# install latest rn-nodeify
yarn add rn-nodeify@latest --dev
```
2. After that, run the following command:
```shell
# install node core shims and recursively hack package.json files
# in ./node_modules to add/update the "browser"/"react-native" field with relevant mappings
./node_modules/.bin/rn-nodeify --hack --install
```
3. Enable `crypto`:
`rn-nodeify` will create a `shim.js` file in the project root directory.
Open it and uncomment the line that requires the crypto module:
```javascript
// If using the crypto shim, uncomment the following line to ensure
// crypto is loaded first, so it can populate global.crypto
require('crypto')
```
4. Import `shim` in your project (it must be the first line):
```javascript
import './shim'
...
```
### Using ripple-lib with Deno
Until official support for [Deno](https://deno.land) is added, you can use the following work-around to use `ripple-lib` with Deno:
```javascript
import ripple from 'https://dev.jspm.io/npm:ripple-lib';
(async () => {
const api = new (ripple as any).RippleAPI({ server: 'wss://s.altnet.rippletest.net:51233' });
const address = 'rH8NxV12EuV...khfJ5uw9kT';
api.connect().then(() => {
api.getBalances(address).then((balances: any) => {
console.log(JSON.stringify(balances, null, 2));
});
});
})();
```
## Documentation
+ [RippleAPI Beginners Guide](https://xrpl.org/get-started-with-rippleapi-for-javascript.html)
+ [RippleAPI Full Reference Documentation](https://xrpl.org/rippleapi-reference.html) ([in this repo](https://github.com/ripple/ripple-lib/blob/develop/docs/index.md))
+ [Code Samples](https://github.com/ripple/ripple-lib/tree/develop/docs/samples)
+ [XRP Ledger Dev Portal](https://xrpl.org/)
### Mailing Lists
We have a low-traffic mailing list for announcements of new ripple-lib releases. (About 1 email per week)
+ [Subscribe to xrpl-announce](https://groups.google.com/g/xrpl-announce)
If you're using the XRP Ledger in production, you should run a [rippled server](https://github.com/ripple/rippled) and subscribe to the ripple-server mailing list as well.
+ [Subscribe to ripple-server](https://groups.google.com/forum/#!forum/ripple-server)
## Development
To build the library for Node.js and the browser:
```
$ yarn build
```
The TypeScript compiler will [output](./tsconfig.json#L7) the resulting JS files in `./dist/npm/`.
webpack will output the resulting JS files in `./build/`.
For details, see the `scripts` in `package.json`.
## Running Tests
### Unit Tests
1. Clone the repository
2. `cd` into the repository and install dependencies with `yarn install`
3. `yarn test`
### Linting
Run `yarn lint` to lint the code with `eslint`.
## Generating Documentation
Do not edit `./docs/index.md` directly because it is a generated file.
Instead, edit the appropriate `.md.ejs` files in `./docs/src/`.
If you make changes to the JSON schemas, fixtures, or documentation sources, update the documentation by running `yarn run docgen`.
File diff suppressed because one or more lines are too long
+5181
View File
File diff suppressed because one or more lines are too long
+272
View File
@@ -0,0 +1,272 @@
/// <reference types="node" />
import { EventEmitter } from 'events';
import { Connection, errors, validate, xrpToDrops, dropsToXrp, rippleTimeToISO8601, iso8601ToRippleTime } from './common';
import { connect, disconnect, isConnected, getLedgerVersion } from './server/server';
import getTransaction from './ledger/transaction';
import getTransactions from './ledger/transactions';
import getTrustlines from './ledger/trustlines';
import getBalances from './ledger/balances';
import getBalanceSheet from './ledger/balance-sheet';
import getPaths from './ledger/pathfind';
import getOrders from './ledger/orders';
import { getOrderbook, formatBidsAndAsks } from './ledger/orderbook';
import { getSettings, parseAccountFlags } from './ledger/settings';
import getAccountInfo from './ledger/accountinfo';
import getAccountObjects from './ledger/accountobjects';
import getPaymentChannel from './ledger/payment-channel';
import preparePayment from './transaction/payment';
import prepareTrustline from './transaction/trustline';
import prepareOrder from './transaction/order';
import prepareOrderCancellation from './transaction/ordercancellation';
import prepareEscrowCreation from './transaction/escrow-creation';
import prepareEscrowExecution from './transaction/escrow-execution';
import prepareEscrowCancellation from './transaction/escrow-cancellation';
import preparePaymentChannelCreate from './transaction/payment-channel-create';
import preparePaymentChannelFund from './transaction/payment-channel-fund';
import preparePaymentChannelClaim from './transaction/payment-channel-claim';
import prepareCheckCreate from './transaction/check-create';
import prepareCheckCancel from './transaction/check-cancel';
import prepareCheckCash from './transaction/check-cash';
import prepareSettings from './transaction/settings';
import prepareTicketCreate from './transaction/ticket';
import sign from './transaction/sign';
import combine from './transaction/combine';
import submit from './transaction/submit';
import { generateXAddress } from './offline/utils';
import { deriveXAddress } from './offline/derive';
import computeLedgerHash from './offline/ledgerhash';
import signPaymentChannelClaim from './offline/sign-payment-channel-claim';
import verifyPaymentChannelClaim from './offline/verify-payment-channel-claim';
import getLedger from './ledger/ledger';
import { AccountObjectsRequest, AccountObjectsResponse, AccountOffersRequest, AccountOffersResponse, AccountInfoRequest, AccountInfoResponse, AccountLinesRequest, AccountLinesResponse, BookOffersRequest, BookOffersResponse, GatewayBalancesRequest, GatewayBalancesResponse, LedgerRequest, LedgerResponse, LedgerDataRequest, LedgerDataResponse, LedgerEntryRequest, LedgerEntryResponse, ServerInfoRequest, ServerInfoResponse } from './common/types/commands';
import RangeSet from './common/rangeset';
import * as ledgerUtils from './ledger/utils';
import * as schemaValidator from './common/schema-validator';
import { TransactionJSON, Instructions, Prepare } from './transaction/types';
import { ConnectionUserOptions } from './common/connection';
import { classicAddressToXAddress, xAddressToClassicAddress, isValidXAddress, isValidClassicAddress, encodeSeed, decodeSeed, encodeAccountID, decodeAccountID, encodeNodePublic, decodeNodePublic, encodeAccountPublic, decodeAccountPublic, encodeXAddress, decodeXAddress } from 'ripple-address-codec';
import generateFaucetWallet from './wallet/wallet-generation';
export interface APIOptions extends ConnectionUserOptions {
server?: string;
feeCushion?: number;
maxFeeXRP?: string;
proxy?: string;
timeout?: number;
}
declare class RippleAPI extends EventEmitter {
_feeCushion: number;
_maxFeeXRP: string;
connection: Connection;
static _PRIVATE: {
validate: typeof validate;
RangeSet: typeof RangeSet;
ledgerUtils: typeof ledgerUtils;
schemaValidator: typeof schemaValidator;
};
static renameCounterpartyToIssuer: typeof ledgerUtils.renameCounterpartyToIssuer;
static formatBidsAndAsks: typeof formatBidsAndAsks;
constructor(options?: APIOptions);
request(command: 'account_info', params: AccountInfoRequest): Promise<AccountInfoResponse>;
request(command: 'account_lines', params: AccountLinesRequest): Promise<AccountLinesResponse>;
request(command: 'account_objects', params: AccountObjectsRequest): Promise<AccountObjectsResponse>;
request(command: 'account_offers', params: AccountOffersRequest): Promise<AccountOffersResponse>;
request(command: 'book_offers', params: BookOffersRequest): Promise<BookOffersResponse>;
request(command: 'gateway_balances', params: GatewayBalancesRequest): Promise<GatewayBalancesResponse>;
request(command: 'ledger', params: LedgerRequest): Promise<LedgerResponse>;
request(command: 'ledger_data', params?: LedgerDataRequest): Promise<LedgerDataResponse>;
request(command: 'ledger_entry', params: LedgerEntryRequest): Promise<LedgerEntryResponse>;
request(command: 'server_info', params?: ServerInfoRequest): Promise<ServerInfoResponse>;
request(command: string, params: any): Promise<any>;
hasNextPage<T extends {
marker?: string;
}>(currentResponse: T): boolean;
requestNextPage<T extends {
marker?: string;
}>(command: string, params: object, currentResponse: T): Promise<T>;
prepareTransaction(txJSON: TransactionJSON, instructions?: Instructions): Promise<Prepare>;
convertStringToHex(string: string): string;
_requestAll(command: 'account_offers', params: AccountOffersRequest): Promise<AccountOffersResponse[]>;
_requestAll(command: 'book_offers', params: BookOffersRequest): Promise<BookOffersResponse[]>;
_requestAll(command: 'account_lines', params: AccountLinesRequest): Promise<AccountLinesResponse[]>;
generateAddress: (options?: import("./offline/generate-address").GenerateAddressOptions) => import("./offline/generate-address").GeneratedAddress;
generateXAddress: typeof generateXAddress;
connect: typeof connect;
disconnect: typeof disconnect;
isConnected: typeof isConnected;
getServerInfo: typeof ledgerUtils.common.serverInfo.getServerInfo;
getFee: typeof ledgerUtils.common.serverInfo.getFee;
getLedgerVersion: typeof getLedgerVersion;
getTransaction: typeof getTransaction;
getTransactions: typeof getTransactions;
getTrustlines: typeof getTrustlines;
getBalances: typeof getBalances;
getBalanceSheet: typeof getBalanceSheet;
getPaths: typeof getPaths;
getOrderbook: typeof getOrderbook;
getOrders: typeof getOrders;
getSettings: typeof getSettings;
getAccountInfo: typeof getAccountInfo;
getAccountObjects: typeof getAccountObjects;
getPaymentChannel: typeof getPaymentChannel;
getLedger: typeof getLedger;
parseAccountFlags: typeof parseAccountFlags;
preparePayment: typeof preparePayment;
prepareTrustline: typeof prepareTrustline;
prepareOrder: typeof prepareOrder;
prepareOrderCancellation: typeof prepareOrderCancellation;
prepareEscrowCreation: typeof prepareEscrowCreation;
prepareEscrowExecution: typeof prepareEscrowExecution;
prepareEscrowCancellation: typeof prepareEscrowCancellation;
preparePaymentChannelCreate: typeof preparePaymentChannelCreate;
preparePaymentChannelFund: typeof preparePaymentChannelFund;
preparePaymentChannelClaim: typeof preparePaymentChannelClaim;
prepareCheckCreate: typeof prepareCheckCreate;
prepareCheckCash: typeof prepareCheckCash;
prepareCheckCancel: typeof prepareCheckCancel;
prepareTicketCreate: typeof prepareTicketCreate;
prepareSettings: typeof prepareSettings;
sign: typeof sign;
combine: typeof combine;
submit: typeof submit;
deriveKeypair: (seed: string, options?: object) => {
publicKey: string;
privateKey: string;
};
deriveAddress: (publicKey: any) => string;
computeLedgerHash: typeof computeLedgerHash;
signPaymentChannelClaim: typeof signPaymentChannelClaim;
verifyPaymentChannelClaim: typeof verifyPaymentChannelClaim;
generateFaucetWallet: typeof generateFaucetWallet;
errors: typeof errors;
static deriveXAddress: typeof deriveXAddress;
static deriveClassicAddress: (publicKey: any) => string;
static classicAddressToXAddress: typeof classicAddressToXAddress;
static xAddressToClassicAddress: typeof xAddressToClassicAddress;
static isValidXAddress: typeof isValidXAddress;
static isValidClassicAddress: typeof isValidClassicAddress;
static encodeSeed: typeof encodeSeed;
static decodeSeed: typeof decodeSeed;
static encodeAccountID: typeof encodeAccountID;
static decodeAccountID: typeof decodeAccountID;
static encodeNodePublic: typeof encodeNodePublic;
static decodeNodePublic: typeof decodeNodePublic;
static encodeAccountPublic: typeof encodeAccountPublic;
static decodeAccountPublic: typeof decodeAccountPublic;
static encodeXAddress: typeof encodeXAddress;
static decodeXAddress: typeof decodeXAddress;
static computeBinaryTransactionHash: (txBlobHex: string) => string;
static computeTransactionHash: (txJSON: any) => string;
static computeBinaryTransactionSigningHash: (txBlobHex: string) => string;
static computeAccountLedgerObjectID: (address: string) => string;
static computeSignerListLedgerObjectID: (address: string) => string;
static computeOrderID: (address: string, sequence: number) => string;
static computeTrustlineHash: (address1: string, address2: string, currency: string) => string;
static computeTransactionTreeHash: (transactions: any[]) => string;
static computeStateTreeHash: (entries: any[]) => string;
static computeLedgerHash: typeof computeLedgerHash;
static computeEscrowHash: (address: any, sequence: any) => string;
static computePaymentChannelHash: (address: any, dstAddress: any, sequence: any) => string;
xrpToDrops: typeof xrpToDrops;
dropsToXrp: typeof dropsToXrp;
rippleTimeToISO8601: typeof rippleTimeToISO8601;
iso8601ToRippleTime: typeof iso8601ToRippleTime;
txFlags: {
Universal: {
FullyCanonicalSig: number;
};
AccountSet: {
RequireDestTag: number;
OptionalDestTag: number;
RequireAuth: number;
OptionalAuth: number;
DisallowXRP: number;
AllowXRP: number;
};
TrustSet: {
SetAuth: number;
NoRipple: number;
SetNoRipple: number;
ClearNoRipple: number;
SetFreeze: number;
ClearFreeze: number;
};
OfferCreate: {
Passive: number;
ImmediateOrCancel: number;
FillOrKill: number;
Sell: number;
};
Payment: {
NoRippleDirect: number;
PartialPayment: number;
LimitQuality: number;
};
PaymentChannelClaim: {
Renew: number;
Close: number;
};
};
static txFlags: {
Universal: {
FullyCanonicalSig: number;
};
AccountSet: {
RequireDestTag: number;
OptionalDestTag: number;
RequireAuth: number;
OptionalAuth: number;
DisallowXRP: number;
AllowXRP: number;
};
TrustSet: {
SetAuth: number;
NoRipple: number;
SetNoRipple: number;
ClearNoRipple: number;
SetFreeze: number;
ClearFreeze: number;
};
OfferCreate: {
Passive: number;
ImmediateOrCancel: number;
FillOrKill: number;
Sell: number;
};
Payment: {
NoRippleDirect: number;
PartialPayment: number;
LimitQuality: number;
};
PaymentChannelClaim: {
Renew: number;
Close: number;
};
};
accountSetFlags: {
requireDestinationTag: number;
requireAuthorization: number;
depositAuth: number;
disallowIncomingXRP: number;
disableMasterKey: number;
enableTransactionIDTracking: number;
noFreeze: number;
globalFreeze: number;
defaultRipple: number;
};
static accountSetFlags: {
requireDestinationTag: number;
requireAuthorization: number;
depositAuth: number;
disallowIncomingXRP: number;
disableMasterKey: number;
enableTransactionIDTracking: number;
noFreeze: number;
globalFreeze: number;
defaultRipple: number;
};
isValidAddress: typeof schemaValidator.isValidAddress;
isValidSecret: typeof schemaValidator.isValidSecret;
}
export { RippleAPI };
export type { AccountObjectsRequest, AccountObjectsResponse, AccountOffersRequest, AccountOffersResponse, AccountInfoRequest, AccountInfoResponse, AccountLinesRequest, AccountLinesResponse, BookOffersRequest, BookOffersResponse, GatewayBalancesRequest, GatewayBalancesResponse, LedgerRequest, LedgerResponse, LedgerDataRequest, LedgerDataResponse, LedgerEntryRequest, LedgerEntryResponse, ServerInfoRequest, ServerInfoResponse };
//# sourceMappingURL=api.d.ts.map
File diff suppressed because one or more lines are too long
+276
View File
@@ -0,0 +1,276 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.RippleAPI = void 0;
const events_1 = require("events");
const common_1 = require("./common");
const server_1 = require("./server/server");
const transaction_1 = __importDefault(require("./ledger/transaction"));
const transactions_1 = __importDefault(require("./ledger/transactions"));
const trustlines_1 = __importDefault(require("./ledger/trustlines"));
const balances_1 = __importDefault(require("./ledger/balances"));
const balance_sheet_1 = __importDefault(require("./ledger/balance-sheet"));
const pathfind_1 = __importDefault(require("./ledger/pathfind"));
const orders_1 = __importDefault(require("./ledger/orders"));
const orderbook_1 = require("./ledger/orderbook");
const settings_1 = require("./ledger/settings");
const accountinfo_1 = __importDefault(require("./ledger/accountinfo"));
const accountobjects_1 = __importDefault(require("./ledger/accountobjects"));
const payment_channel_1 = __importDefault(require("./ledger/payment-channel"));
const payment_1 = __importDefault(require("./transaction/payment"));
const trustline_1 = __importDefault(require("./transaction/trustline"));
const order_1 = __importDefault(require("./transaction/order"));
const ordercancellation_1 = __importDefault(require("./transaction/ordercancellation"));
const escrow_creation_1 = __importDefault(require("./transaction/escrow-creation"));
const escrow_execution_1 = __importDefault(require("./transaction/escrow-execution"));
const escrow_cancellation_1 = __importDefault(require("./transaction/escrow-cancellation"));
const payment_channel_create_1 = __importDefault(require("./transaction/payment-channel-create"));
const payment_channel_fund_1 = __importDefault(require("./transaction/payment-channel-fund"));
const payment_channel_claim_1 = __importDefault(require("./transaction/payment-channel-claim"));
const check_create_1 = __importDefault(require("./transaction/check-create"));
const check_cancel_1 = __importDefault(require("./transaction/check-cancel"));
const check_cash_1 = __importDefault(require("./transaction/check-cash"));
const settings_2 = __importDefault(require("./transaction/settings"));
const ticket_1 = __importDefault(require("./transaction/ticket"));
const sign_1 = __importDefault(require("./transaction/sign"));
const combine_1 = __importDefault(require("./transaction/combine"));
const submit_1 = __importDefault(require("./transaction/submit"));
const utils_1 = require("./offline/utils");
const derive_1 = require("./offline/derive");
const ledgerhash_1 = __importDefault(require("./offline/ledgerhash"));
const sign_payment_channel_claim_1 = __importDefault(require("./offline/sign-payment-channel-claim"));
const verify_payment_channel_claim_1 = __importDefault(require("./offline/verify-payment-channel-claim"));
const ledger_1 = __importDefault(require("./ledger/ledger"));
const rangeset_1 = __importDefault(require("./common/rangeset"));
const ledgerUtils = __importStar(require("./ledger/utils"));
const transactionUtils = __importStar(require("./transaction/utils"));
const schemaValidator = __importStar(require("./common/schema-validator"));
const serverinfo_1 = require("./common/serverinfo");
const utils_2 = require("./ledger/utils");
const ripple_address_codec_1 = require("ripple-address-codec");
const hashes_1 = require("./common/hashes");
const wallet_generation_1 = __importDefault(require("./wallet/wallet-generation"));
function getCollectKeyFromCommand(command) {
switch (command) {
case 'account_offers':
case 'book_offers':
return 'offers';
case 'account_lines':
return 'lines';
default:
return undefined;
}
}
class RippleAPI extends events_1.EventEmitter {
constructor(options = {}) {
super();
this.generateAddress = utils_1.generateAddress;
this.generateXAddress = utils_1.generateXAddress;
this.connect = server_1.connect;
this.disconnect = server_1.disconnect;
this.isConnected = server_1.isConnected;
this.getServerInfo = serverinfo_1.getServerInfo;
this.getFee = serverinfo_1.getFee;
this.getLedgerVersion = server_1.getLedgerVersion;
this.getTransaction = transaction_1.default;
this.getTransactions = transactions_1.default;
this.getTrustlines = trustlines_1.default;
this.getBalances = balances_1.default;
this.getBalanceSheet = balance_sheet_1.default;
this.getPaths = pathfind_1.default;
this.getOrderbook = orderbook_1.getOrderbook;
this.getOrders = orders_1.default;
this.getSettings = settings_1.getSettings;
this.getAccountInfo = accountinfo_1.default;
this.getAccountObjects = accountobjects_1.default;
this.getPaymentChannel = payment_channel_1.default;
this.getLedger = ledger_1.default;
this.parseAccountFlags = settings_1.parseAccountFlags;
this.preparePayment = payment_1.default;
this.prepareTrustline = trustline_1.default;
this.prepareOrder = order_1.default;
this.prepareOrderCancellation = ordercancellation_1.default;
this.prepareEscrowCreation = escrow_creation_1.default;
this.prepareEscrowExecution = escrow_execution_1.default;
this.prepareEscrowCancellation = escrow_cancellation_1.default;
this.preparePaymentChannelCreate = payment_channel_create_1.default;
this.preparePaymentChannelFund = payment_channel_fund_1.default;
this.preparePaymentChannelClaim = payment_channel_claim_1.default;
this.prepareCheckCreate = check_create_1.default;
this.prepareCheckCash = check_cash_1.default;
this.prepareCheckCancel = check_cancel_1.default;
this.prepareTicketCreate = ticket_1.default;
this.prepareSettings = settings_2.default;
this.sign = sign_1.default;
this.combine = combine_1.default;
this.submit = submit_1.default;
this.deriveKeypair = derive_1.deriveKeypair;
this.deriveAddress = derive_1.deriveAddress;
this.computeLedgerHash = ledgerhash_1.default;
this.signPaymentChannelClaim = sign_payment_channel_claim_1.default;
this.verifyPaymentChannelClaim = verify_payment_channel_claim_1.default;
this.generateFaucetWallet = wallet_generation_1.default;
this.errors = common_1.errors;
this.xrpToDrops = common_1.xrpToDrops;
this.dropsToXrp = common_1.dropsToXrp;
this.rippleTimeToISO8601 = common_1.rippleTimeToISO8601;
this.iso8601ToRippleTime = common_1.iso8601ToRippleTime;
this.txFlags = common_1.txFlags;
this.accountSetFlags = common_1.constants.AccountSetFlags;
this.isValidAddress = schemaValidator.isValidAddress;
this.isValidSecret = schemaValidator.isValidSecret;
common_1.validate.apiOptions(options);
this._feeCushion = options.feeCushion || 1.2;
this._maxFeeXRP = options.maxFeeXRP || '2';
const serverURL = options.server;
if (serverURL != null) {
this.connection = new common_1.Connection(serverURL, options);
this.connection.on('ledgerClosed', (message) => {
this.emit('ledger', server_1.formatLedgerClose(message));
});
this.connection.on('error', (errorCode, errorMessage, data) => {
this.emit('error', errorCode, errorMessage, data);
});
this.connection.on('connected', () => {
this.emit('connected');
});
this.connection.on('disconnected', (code) => {
let finalCode = code;
if (finalCode === 1005 || finalCode === 4000) {
finalCode = 1000;
}
this.emit('disconnected', finalCode);
});
}
else {
this.connection = new common_1.Connection(null, options);
}
}
request(command, params = {}) {
return __awaiter(this, void 0, void 0, function* () {
return this.connection.request(Object.assign(Object.assign({}, params), { command, account: params.account ? common_1.ensureClassicAddress(params.account) : undefined }));
});
}
hasNextPage(currentResponse) {
return !!currentResponse.marker;
}
requestNextPage(command, params = {}, currentResponse) {
return __awaiter(this, void 0, void 0, function* () {
if (!currentResponse.marker) {
return Promise.reject(new common_1.errors.NotFoundError('response does not have a next page'));
}
const nextPageParams = Object.assign({}, params, {
marker: currentResponse.marker
});
return this.request(command, nextPageParams);
});
}
prepareTransaction(txJSON, instructions = {}) {
return __awaiter(this, void 0, void 0, function* () {
return transactionUtils.prepareTransaction(txJSON, this, instructions);
});
}
convertStringToHex(string) {
return transactionUtils.convertStringToHex(string);
}
_requestAll(command, params = {}, options = {}) {
return __awaiter(this, void 0, void 0, function* () {
const collectKey = options.collect || getCollectKeyFromCommand(command);
if (!collectKey) {
throw new common_1.errors.ValidationError(`no collect key for command ${command}`);
}
const countTo = params.limit != null ? params.limit : Infinity;
let count = 0;
let marker = params.marker;
let lastBatchLength;
const results = [];
do {
const countRemaining = utils_2.clamp(countTo - count, 10, 400);
const repeatProps = Object.assign(Object.assign({}, params), { limit: countRemaining, marker });
const singleResult = yield this.request(command, repeatProps);
const collectedData = singleResult[collectKey];
marker = singleResult['marker'];
results.push(singleResult);
const isExpectedFormat = Array.isArray(collectedData);
if (isExpectedFormat) {
count += collectedData.length;
lastBatchLength = collectedData.length;
}
else {
lastBatchLength = 0;
}
} while (!!marker && count < countTo && lastBatchLength !== 0);
return results;
});
}
}
exports.RippleAPI = RippleAPI;
RippleAPI._PRIVATE = {
validate: common_1.validate,
RangeSet: rangeset_1.default,
ledgerUtils,
schemaValidator
};
RippleAPI.renameCounterpartyToIssuer = utils_2.renameCounterpartyToIssuer;
RippleAPI.formatBidsAndAsks = orderbook_1.formatBidsAndAsks;
RippleAPI.deriveXAddress = derive_1.deriveXAddress;
RippleAPI.deriveClassicAddress = derive_1.deriveAddress;
RippleAPI.classicAddressToXAddress = ripple_address_codec_1.classicAddressToXAddress;
RippleAPI.xAddressToClassicAddress = ripple_address_codec_1.xAddressToClassicAddress;
RippleAPI.isValidXAddress = ripple_address_codec_1.isValidXAddress;
RippleAPI.isValidClassicAddress = ripple_address_codec_1.isValidClassicAddress;
RippleAPI.encodeSeed = ripple_address_codec_1.encodeSeed;
RippleAPI.decodeSeed = ripple_address_codec_1.decodeSeed;
RippleAPI.encodeAccountID = ripple_address_codec_1.encodeAccountID;
RippleAPI.decodeAccountID = ripple_address_codec_1.decodeAccountID;
RippleAPI.encodeNodePublic = ripple_address_codec_1.encodeNodePublic;
RippleAPI.decodeNodePublic = ripple_address_codec_1.decodeNodePublic;
RippleAPI.encodeAccountPublic = ripple_address_codec_1.encodeAccountPublic;
RippleAPI.decodeAccountPublic = ripple_address_codec_1.decodeAccountPublic;
RippleAPI.encodeXAddress = ripple_address_codec_1.encodeXAddress;
RippleAPI.decodeXAddress = ripple_address_codec_1.decodeXAddress;
RippleAPI.computeBinaryTransactionHash = hashes_1.computeBinaryTransactionHash;
RippleAPI.computeTransactionHash = hashes_1.computeTransactionHash;
RippleAPI.computeBinaryTransactionSigningHash = hashes_1.computeBinaryTransactionSigningHash;
RippleAPI.computeAccountLedgerObjectID = hashes_1.computeAccountLedgerObjectID;
RippleAPI.computeSignerListLedgerObjectID = hashes_1.computeSignerListLedgerObjectID;
RippleAPI.computeOrderID = hashes_1.computeOrderID;
RippleAPI.computeTrustlineHash = hashes_1.computeTrustlineHash;
RippleAPI.computeTransactionTreeHash = hashes_1.computeTransactionTreeHash;
RippleAPI.computeStateTreeHash = hashes_1.computeStateTreeHash;
RippleAPI.computeLedgerHash = ledgerhash_1.default;
RippleAPI.computeEscrowHash = hashes_1.computeEscrowHash;
RippleAPI.computePaymentChannelHash = hashes_1.computePaymentChannelHash;
RippleAPI.txFlags = common_1.txFlags;
RippleAPI.accountSetFlags = common_1.constants.AccountSetFlags;
//# sourceMappingURL=api.js.map
+1
View File
File diff suppressed because one or more lines are too long
+10
View File
@@ -0,0 +1,10 @@
import { RippleAPI, APIOptions } from './api';
declare class RippleAPIBroadcast extends RippleAPI {
ledgerVersion: number | undefined;
private _apis;
constructor(servers: any, options?: APIOptions);
onLedgerEvent(ledger: any): void;
getMethodNames(): string[];
}
export { RippleAPIBroadcast };
//# sourceMappingURL=broadcast.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"broadcast.d.ts","sourceRoot":"","sources":["../../src/broadcast.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAE,UAAU,EAAC,MAAM,OAAO,CAAA;AAE3C,cAAM,kBAAmB,SAAQ,SAAS;IACxC,aAAa,EAAE,MAAM,GAAG,SAAS,CAAY;IAC7C,OAAO,CAAC,KAAK,CAAa;gBAEd,OAAO,KAAA,EAAE,OAAO,GAAE,UAAe;IA2C7C,aAAa,CAAC,MAAM,KAAA;IAUpB,cAAc;CAUf;AAED,OAAO,EAAC,kBAAkB,EAAC,CAAA"}
+67
View File
@@ -0,0 +1,67 @@
"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.RippleAPIBroadcast = void 0;
const api_1 = require("./api");
class RippleAPIBroadcast extends api_1.RippleAPI {
constructor(servers, options = {}) {
super(options);
this.ledgerVersion = undefined;
const apis = servers.map((server) => new api_1.RippleAPI(Object.assign({}, options, { server })));
this._apis = apis;
this.getMethodNames().forEach((name) => {
this[name] = function () {
return Promise.race(apis.map((api) => api[name](...arguments)));
};
});
this.connect = function () {
return __awaiter(this, void 0, void 0, function* () {
yield Promise.all(apis.map((api) => api.connect()));
});
};
this.disconnect = function () {
return __awaiter(this, void 0, void 0, function* () {
yield Promise.all(apis.map((api) => api.disconnect()));
});
};
this.isConnected = function () {
return apis.map((api) => api.isConnected()).every(Boolean);
};
const defaultAPI = apis[0];
const syncMethods = ['sign', 'generateAddress', 'computeLedgerHash'];
syncMethods.forEach((name) => {
this[name] = defaultAPI[name].bind(defaultAPI);
});
apis.forEach((api) => {
api.on('ledger', this.onLedgerEvent.bind(this));
api.on('error', (errorCode, errorMessage, data) => this.emit('error', errorCode, errorMessage, data));
});
}
onLedgerEvent(ledger) {
if (ledger.ledgerVersion > this.ledgerVersion ||
this.ledgerVersion == null) {
this.ledgerVersion = ledger.ledgerVersion;
this.emit('ledger', ledger);
}
}
getMethodNames() {
const methodNames = [];
const rippleAPI = this._apis[0];
for (const name of Object.getOwnPropertyNames(rippleAPI)) {
if (typeof rippleAPI[name] === 'function') {
methodNames.push(name);
}
}
return methodNames;
}
}
exports.RippleAPIBroadcast = RippleAPIBroadcast;
//# sourceMappingURL=broadcast.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"broadcast.js","sourceRoot":"","sources":["../../src/broadcast.ts"],"names":[],"mappings":"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"}
+14
View File
@@ -0,0 +1,14 @@
export declare class ExponentialBackoff {
private readonly ms;
private readonly max;
private readonly factor;
private readonly jitter;
attempts: number;
constructor(opts?: {
min?: number;
max?: number;
});
duration(): number;
reset(): void;
}
//# sourceMappingURL=backoff.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"backoff.d.ts","sourceRoot":"","sources":["../../../src/common/backoff.ts"],"names":[],"mappings":"AAYA,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAQ;IAC3B,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAQ;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAY;IACnC,QAAQ,EAAE,MAAM,CAAI;gBAER,IAAI,GAAE;QAAC,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,GAAG,CAAC,EAAE,MAAM,CAAA;KAAM;IAQnD,QAAQ;IAaR,KAAK;CAGN"}
+26
View File
@@ -0,0 +1,26 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExponentialBackoff = void 0;
class ExponentialBackoff {
constructor(opts = {}) {
this.factor = 2;
this.jitter = 0;
this.attempts = 0;
this.ms = opts.min || 100;
this.max = opts.max || 10000;
}
duration() {
var ms = this.ms * Math.pow(this.factor, this.attempts++);
if (this.jitter) {
var rand = Math.random();
var deviation = Math.floor(rand * this.jitter * ms);
ms = (Math.floor(rand * 10) & 1) == 0 ? ms - deviation : ms + deviation;
}
return Math.min(ms, this.max) | 0;
}
reset() {
this.attempts = 0;
}
}
exports.ExponentialBackoff = ExponentialBackoff;
//# sourceMappingURL=backoff.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"backoff.js","sourceRoot":"","sources":["../../../src/common/backoff.ts"],"names":[],"mappings":";;;AAYA,MAAa,kBAAkB;IAO7B,YAAY,OAAqC,EAAE;QAJlC,WAAM,GAAW,CAAC,CAAA;QAClB,WAAM,GAAW,CAAC,CAAA;QACnC,aAAQ,GAAW,CAAC,CAAA;QAGlB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,IAAI,GAAG,CAAA;QACzB,IAAI,CAAC,GAAG,GAAG,IAAI,CAAC,GAAG,IAAI,KAAK,CAAA;IAC9B,CAAC;IAKD,QAAQ;QACN,IAAI,EAAE,GAAG,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAA;QACzD,IAAI,IAAI,CAAC,MAAM,EAAE;YACf,IAAI,IAAI,GAAG,IAAI,CAAC,MAAM,EAAE,CAAA;YACxB,IAAI,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC,CAAA;YACnD,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,CAAA;SACxE;QACD,OAAO,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;IACnC,CAAC;IAKD,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAA;IACnB,CAAC;CACF;AA/BD,gDA+BC"}
+4
View File
@@ -0,0 +1,4 @@
declare function setPrototypeOf(object: any, prototype: any): void;
declare function getConstructorName(object: object): string;
export { getConstructorName, setPrototypeOf };
//# sourceMappingURL=browser-hacks.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"browser-hacks.d.ts","sourceRoot":"","sources":["../../../src/common/browser-hacks.ts"],"names":[],"mappings":"AAAA,iBAAS,cAAc,CAAC,MAAM,KAAA,EAAE,SAAS,KAAA,QAMxC;AAED,iBAAS,kBAAkB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CASlD;AAED,OAAO,EAAC,kBAAkB,EAAE,cAAc,EAAC,CAAA"}
+21
View File
@@ -0,0 +1,21 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.setPrototypeOf = exports.getConstructorName = void 0;
function setPrototypeOf(object, prototype) {
Object.setPrototypeOf
? Object.setPrototypeOf(object, prototype)
:
(object.__proto__ = prototype);
}
exports.setPrototypeOf = setPrototypeOf;
function getConstructorName(object) {
if (object.constructor.name) {
return object.constructor.name;
}
const constructorString = object.constructor.toString();
const functionConstructor = constructorString.match(/^function\s+([^(]*)/);
const classConstructor = constructorString.match(/^class\s([^\s]*)/);
return functionConstructor ? functionConstructor[1] : classConstructor[1];
}
exports.getConstructorName = getConstructorName;
//# sourceMappingURL=browser-hacks.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"browser-hacks.js","sourceRoot":"","sources":["../../../src/common/browser-hacks.ts"],"names":[],"mappings":";;;AAAA,SAAS,cAAc,CAAC,MAAM,EAAE,SAAS;IAEvC,MAAM,CAAC,cAAc;QACnB,CAAC,CAAC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC;QAC1C,CAAC;YACC,CAAC,MAAM,CAAC,SAAS,GAAG,SAAS,CAAC,CAAA;AACpC,CAAC;AAa2B,wCAAc;AAX1C,SAAS,kBAAkB,CAAC,MAAc;IACxC,IAAI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE;QAC3B,OAAO,MAAM,CAAC,WAAW,CAAC,IAAI,CAAA;KAC/B;IAED,MAAM,iBAAiB,GAAG,MAAM,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAA;IACvD,MAAM,mBAAmB,GAAG,iBAAiB,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAA;IAC1E,MAAM,gBAAgB,GAAG,iBAAiB,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;IACpE,OAAO,mBAAmB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAA;AAC3E,CAAC;AAEO,gDAAkB"}
+50
View File
@@ -0,0 +1,50 @@
/// <reference types="node" />
import { EventEmitter } from 'events';
export interface ConnectionOptions {
trace?: boolean | ((id: string, message: string) => void);
proxy?: string;
proxyAuthorization?: string;
authorization?: string;
trustedCertificates?: string[];
key?: string;
passphrase?: string;
certificate?: string;
timeout: number;
connectionTimeout: number;
}
export declare type ConnectionUserOptions = Partial<ConnectionOptions>;
export declare class Connection extends EventEmitter {
private _url;
private _ws;
private _reconnectTimeoutID;
private _heartbeatIntervalID;
private _retryConnectionBackoff;
private _trace;
private _config;
private _ledger;
private _requestManager;
private _connectionManager;
constructor(url?: string, options?: ConnectionUserOptions);
private _onMessage;
private get _state();
private get _shouldBeConnected();
private _clearHeartbeatInterval;
private _startHeartbeatInterval;
private _heartbeat;
private _waitForReady;
private _subscribeToLedger;
private _onConnectionFailed;
isConnected(): boolean;
connect(): Promise<void>;
disconnect(): Promise<number | undefined>;
reconnect(): Promise<void>;
getFeeBase(): Promise<number>;
getFeeRef(): Promise<number>;
getLedgerVersion(): Promise<number>;
getReserveBase(): Promise<number>;
hasLedgerVersions(lowLedgerVersion: number, highLedgerVersion: number | undefined): Promise<boolean>;
hasLedgerVersion(ledgerVersion: number): Promise<boolean>;
request(request: any, timeout?: number): Promise<any>;
getUrl(): string;
}
//# sourceMappingURL=connection.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"connection.d.ts","sourceRoot":"","sources":["../../../src/common/connection.ts"],"names":[],"mappings":";AACA,OAAO,EAAC,YAAY,EAAC,MAAM,QAAQ,CAAA;AAmBnC,MAAM,WAAW,iBAAiB;IAChC,KAAK,CAAC,EAAE,OAAO,GAAG,CAAC,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC,CAAA;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,kBAAkB,CAAC,EAAE,MAAM,CAAA;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC9B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAOD,oBAAY,qBAAqB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAA;AA4Q9D,qBAAa,UAAW,SAAQ,YAAY;IAC1C,OAAO,CAAC,IAAI,CAAQ;IACpB,OAAO,CAAC,GAAG,CAAyB;IACpC,OAAO,CAAC,mBAAmB,CAA8B;IACzD,OAAO,CAAC,oBAAoB,CAA8B;IAC1D,OAAO,CAAC,uBAAuB,CAG7B;IAEF,OAAO,CAAC,MAAM,CAAkD;IAChE,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,OAAO,CAAqC;IACpD,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,kBAAkB,CAA0B;gBAExC,GAAG,CAAC,EAAE,MAAM,EAAE,OAAO,GAAE,qBAA0B;IAgB7D,OAAO,CAAC,UAAU;IA4BlB,OAAO,KAAK,MAAM,GAEjB;IAED,OAAO,KAAK,kBAAkB,GAE7B;IAED,OAAO,CAAC,uBAAuB,CAE9B;IAED,OAAO,CAAC,uBAAuB,CAM9B;IAMD,OAAO,CAAC,UAAU,CAMjB;IAMD,OAAO,CAAC,aAAa;YAYP,kBAAkB;IAoBhC,OAAO,CAAC,mBAAmB,CAyB1B;IAED,WAAW;IAIX,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IA0FxB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAoBnC,SAAS;IAST,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAK7B,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC;IAK5B,gBAAgB,IAAI,OAAO,CAAC,MAAM,CAAC;IAKnC,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC;IASjC,iBAAiB,CACrB,gBAAgB,EAAE,MAAM,EACxB,iBAAiB,EAAE,MAAM,GAAG,SAAS,GACpC,OAAO,CAAC,OAAO,CAAC;IAab,gBAAgB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;IAKzD,OAAO,CAAC,OAAO,KAAA,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC;IAqBtD,MAAM,IAAI,MAAM;CAGjB"}
+467
View File
@@ -0,0 +1,467 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
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());
});
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Connection = void 0;
const _ = __importStar(require("lodash"));
const events_1 = require("events");
const url_1 = require("url");
const ws_1 = __importDefault(require("ws"));
const rangeset_1 = __importDefault(require("./rangeset"));
const errors_1 = require("./errors");
const backoff_1 = require("./backoff");
const INTENTIONAL_DISCONNECT_CODE = 4000;
function createWebSocket(url, config) {
const options = {};
if (config.proxy != null) {
const parsedURL = url_1.parse(url);
const parsedProxyURL = url_1.parse(config.proxy);
const proxyOverrides = _.omitBy({
secureEndpoint: parsedURL.protocol === 'wss:',
secureProxy: parsedProxyURL.protocol === 'https:',
auth: config.proxyAuthorization,
ca: config.trustedCertificates,
key: config.key,
passphrase: config.passphrase,
cert: config.certificate
}, (value) => value == null);
const proxyOptions = Object.assign({}, parsedProxyURL, proxyOverrides);
let HttpsProxyAgent;
try {
HttpsProxyAgent = require('https-proxy-agent');
}
catch (error) {
throw new Error('"proxy" option is not supported in the browser');
}
options.agent = new HttpsProxyAgent(proxyOptions);
}
if (config.authorization != null) {
const base64 = Buffer.from(config.authorization).toString('base64');
options.headers = { Authorization: `Basic ${base64}` };
}
const optionsOverrides = _.omitBy({
ca: config.trustedCertificates,
key: config.key,
passphrase: config.passphrase,
cert: config.certificate
}, (value) => value == null);
const websocketOptions = Object.assign({}, options, optionsOverrides);
const websocket = new ws_1.default(url, null, websocketOptions);
if (typeof websocket.setMaxListeners === 'function') {
websocket.setMaxListeners(Infinity);
}
return websocket;
}
function websocketSendAsync(ws, message) {
return new Promise((resolve, reject) => {
ws.send(message, undefined, (error) => {
if (error) {
reject(new errors_1.DisconnectedError(error.message, error));
}
else {
resolve();
}
});
});
}
class LedgerHistory {
constructor() {
this.feeBase = null;
this.feeRef = null;
this.latestVersion = null;
this.reserveBase = null;
this.availableVersions = new rangeset_1.default();
}
hasVersion(version) {
return this.availableVersions.containsValue(version);
}
hasVersions(lowVersion, highVersion) {
return this.availableVersions.containsRange(lowVersion, highVersion);
}
update(ledgerMessage) {
this.feeBase = ledgerMessage.fee_base;
this.feeRef = ledgerMessage.fee_ref;
this.latestVersion = ledgerMessage.ledger_index;
this.reserveBase = ledgerMessage.reserve_base;
if (ledgerMessage.validated_ledgers) {
this.availableVersions.reset();
this.availableVersions.parseAndAddRanges(ledgerMessage.validated_ledgers);
}
else {
this.availableVersions.addValue(this.latestVersion);
}
}
}
class ConnectionManager {
constructor() {
this.promisesAwaitingConnection = [];
}
resolveAllAwaiting() {
this.promisesAwaitingConnection.map(({ resolve }) => resolve());
this.promisesAwaitingConnection = [];
}
rejectAllAwaiting(error) {
this.promisesAwaitingConnection.map(({ reject }) => reject(error));
this.promisesAwaitingConnection = [];
}
awaitConnection() {
return new Promise((resolve, reject) => {
this.promisesAwaitingConnection.push({ resolve, reject });
});
}
}
class RequestManager {
constructor() {
this.nextId = 0;
this.promisesAwaitingResponse = [];
}
cancel(id) {
const { timer } = this.promisesAwaitingResponse[id];
clearTimeout(timer);
delete this.promisesAwaitingResponse[id];
}
resolve(id, data) {
const { timer, resolve } = this.promisesAwaitingResponse[id];
clearTimeout(timer);
resolve(data);
delete this.promisesAwaitingResponse[id];
}
reject(id, error) {
const { timer, reject } = this.promisesAwaitingResponse[id];
clearTimeout(timer);
reject(error);
delete this.promisesAwaitingResponse[id];
}
rejectAll(error) {
this.promisesAwaitingResponse.forEach((_, id) => {
this.reject(id, error);
});
}
createRequest(data, timeout) {
const newId = this.nextId++;
const newData = JSON.stringify(Object.assign(Object.assign({}, data), { id: newId }));
const timer = setTimeout(() => this.reject(newId, new errors_1.TimeoutError()), timeout);
if (timer.unref) {
timer.unref();
}
const newPromise = new Promise((resolve, reject) => {
this.promisesAwaitingResponse[newId] = { resolve, reject, timer };
});
return [newId, newData, newPromise];
}
handleResponse(data) {
if (!Number.isInteger(data.id) || data.id < 0) {
throw new errors_1.ResponseFormatError('valid id not found in response', data);
}
if (!this.promisesAwaitingResponse[data.id]) {
return;
}
if (data.status === 'error') {
const error = new errors_1.RippledError(data.error_message || data.error, data);
this.reject(data.id, error);
return;
}
if (data.status !== 'success') {
const error = new errors_1.ResponseFormatError(`unrecognized status: ${data.status}`, data);
this.reject(data.id, error);
return;
}
this.resolve(data.id, data.result);
}
}
class Connection extends events_1.EventEmitter {
constructor(url, options = {}) {
super();
this._ws = null;
this._reconnectTimeoutID = null;
this._heartbeatIntervalID = null;
this._retryConnectionBackoff = new backoff_1.ExponentialBackoff({
min: 100,
max: 60 * 1000
});
this._trace = () => { };
this._ledger = new LedgerHistory();
this._requestManager = new RequestManager();
this._connectionManager = new ConnectionManager();
this._clearHeartbeatInterval = () => {
clearInterval(this._heartbeatIntervalID);
};
this._startHeartbeatInterval = () => {
this._clearHeartbeatInterval();
this._heartbeatIntervalID = setInterval(() => this._heartbeat(), this._config.timeout);
};
this._heartbeat = () => {
return this.request({ command: 'ping' }).catch(() => {
return this.reconnect().catch((error) => {
this.emit('error', 'reconnect', error.message, error);
});
});
};
this._onConnectionFailed = (errorOrCode) => {
if (this._ws) {
this._ws.removeAllListeners();
this._ws.on('error', () => {
});
this._ws.close();
this._ws = null;
}
if (typeof errorOrCode === 'number') {
this._connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError(`Connection failed with code ${errorOrCode}.`, {
code: errorOrCode
}));
}
else if (errorOrCode && errorOrCode.message) {
this._connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError(errorOrCode.message, errorOrCode));
}
else {
this._connectionManager.rejectAllAwaiting(new errors_1.NotConnectedError('Connection failed.'));
}
};
this.setMaxListeners(Infinity);
this._url = url;
this._config = Object.assign({ timeout: 20 * 1000, connectionTimeout: 5 * 1000 }, options);
if (typeof options.trace === 'function') {
this._trace = options.trace;
}
else if (options.trace === true) {
this._trace = console.log;
}
}
_onMessage(message) {
this._trace('receive', message);
let data;
try {
data = JSON.parse(message);
}
catch (error) {
this.emit('error', 'badMessage', error.message, message);
return;
}
if (data.type == null && data.error) {
this.emit('error', data.error, data.error_message, data);
return;
}
if (data.type) {
this.emit(data.type, data);
}
if (data.type === 'ledgerClosed') {
this._ledger.update(data);
}
if (data.type === 'response') {
try {
this._requestManager.handleResponse(data);
}
catch (error) {
this.emit('error', 'badMessage', error.message, message);
}
}
}
get _state() {
return this._ws ? this._ws.readyState : ws_1.default.CLOSED;
}
get _shouldBeConnected() {
return this._ws !== null;
}
_waitForReady() {
return new Promise((resolve, reject) => {
if (!this._shouldBeConnected) {
reject(new errors_1.NotConnectedError());
}
else if (this._state === ws_1.default.OPEN) {
resolve();
}
else {
this.once('connected', () => resolve());
}
});
}
_subscribeToLedger() {
return __awaiter(this, void 0, void 0, function* () {
const data = yield this.request({
command: 'subscribe',
streams: ['ledger']
});
if (_.isEmpty(data) || !data.ledger_index) {
try {
yield this.disconnect();
}
catch (error) {
}
finally {
throw new errors_1.RippledNotInitializedError('Rippled not initialized');
}
}
this._ledger.update(data);
});
}
isConnected() {
return this._state === ws_1.default.OPEN;
}
connect() {
if (this.isConnected()) {
return Promise.resolve();
}
if (this._state === ws_1.default.CONNECTING) {
return this._connectionManager.awaitConnection();
}
if (!this._url) {
return Promise.reject(new errors_1.ConnectionError('Cannot connect because no server was specified'));
}
if (this._ws) {
return Promise.reject(new errors_1.RippleError('Websocket connection never cleaned up.', {
state: this._state
}));
}
const connectionTimeoutID = setTimeout(() => {
this._onConnectionFailed(new errors_1.ConnectionError(`Error: connect() timed out after ${this._config.connectionTimeout} ms. ` +
`If your internet connection is working, the rippled server may be blocked or inaccessible. ` +
`You can also try setting the 'connectionTimeout' option in the RippleAPI constructor.`));
}, this._config.connectionTimeout);
this._ws = createWebSocket(this._url, this._config);
this._ws.on('error', this._onConnectionFailed);
this._ws.on('error', () => clearTimeout(connectionTimeoutID));
this._ws.on('close', this._onConnectionFailed);
this._ws.on('close', () => clearTimeout(connectionTimeoutID));
this._ws.once('open', () => __awaiter(this, void 0, void 0, function* () {
this._ws.removeAllListeners();
clearTimeout(connectionTimeoutID);
this._ws.on('message', (message) => this._onMessage(message));
this._ws.on('error', (error) => this.emit('error', 'websocket', error.message, error));
this._ws.once('close', (code) => {
this._clearHeartbeatInterval();
this._requestManager.rejectAll(new errors_1.DisconnectedError('websocket was closed'));
this._ws.removeAllListeners();
this._ws = null;
this.emit('disconnected', code);
if (code !== INTENTIONAL_DISCONNECT_CODE) {
const retryTimeout = this._retryConnectionBackoff.duration();
this._trace('reconnect', `Retrying connection in ${retryTimeout}ms.`);
this.emit('reconnecting', this._retryConnectionBackoff.attempts);
this._reconnectTimeoutID = setTimeout(() => {
this.reconnect().catch((error) => {
this.emit('error', 'reconnect', error.message, error);
});
}, retryTimeout);
}
});
try {
this._retryConnectionBackoff.reset();
yield this._subscribeToLedger();
this._startHeartbeatInterval();
this._connectionManager.resolveAllAwaiting();
this.emit('connected');
}
catch (error) {
this._connectionManager.rejectAllAwaiting(error);
yield this.disconnect().catch(() => { });
}
}));
return this._connectionManager.awaitConnection();
}
disconnect() {
clearTimeout(this._reconnectTimeoutID);
this._reconnectTimeoutID = null;
if (this._state === ws_1.default.CLOSED || !this._ws) {
return Promise.resolve(undefined);
}
return new Promise((resolve) => {
this._ws.once('close', (code) => resolve(code));
if (this._state !== ws_1.default.CLOSING) {
this._ws.close(INTENTIONAL_DISCONNECT_CODE);
}
});
}
reconnect() {
return __awaiter(this, void 0, void 0, function* () {
this.emit('reconnect');
yield this.disconnect();
yield this.connect();
});
}
getFeeBase() {
return __awaiter(this, void 0, void 0, function* () {
yield this._waitForReady();
return this._ledger.feeBase;
});
}
getFeeRef() {
return __awaiter(this, void 0, void 0, function* () {
yield this._waitForReady();
return this._ledger.feeRef;
});
}
getLedgerVersion() {
return __awaiter(this, void 0, void 0, function* () {
yield this._waitForReady();
return this._ledger.latestVersion;
});
}
getReserveBase() {
return __awaiter(this, void 0, void 0, function* () {
yield this._waitForReady();
return this._ledger.reserveBase;
});
}
hasLedgerVersions(lowLedgerVersion, highLedgerVersion) {
return __awaiter(this, void 0, void 0, function* () {
if (!highLedgerVersion) {
return this.hasLedgerVersion(lowLedgerVersion);
}
yield this._waitForReady();
return this._ledger.hasVersions(lowLedgerVersion, highLedgerVersion);
});
}
hasLedgerVersion(ledgerVersion) {
return __awaiter(this, void 0, void 0, function* () {
yield this._waitForReady();
return this._ledger.hasVersion(ledgerVersion);
});
}
request(request, timeout) {
return __awaiter(this, void 0, void 0, function* () {
if (!this._shouldBeConnected) {
throw new errors_1.NotConnectedError();
}
const [id, message, responsePromise] = this._requestManager.createRequest(request, timeout || this._config.timeout);
this._trace('send', message);
websocketSendAsync(this._ws, message).catch((error) => {
this._requestManager.reject(id, error);
});
return responsePromise;
});
}
getUrl() {
return this._url;
}
}
exports.Connection = Connection;
//# sourceMappingURL=connection.js.map
File diff suppressed because one or more lines are too long
+62
View File
@@ -0,0 +1,62 @@
declare const AccountFlags: {
passwordSpent: number;
requireDestinationTag: number;
requireAuthorization: number;
depositAuth: number;
disallowIncomingXRP: number;
disableMasterKey: number;
noFreeze: number;
globalFreeze: number;
defaultRipple: number;
};
export interface Settings {
passwordSpent?: boolean;
requireDestinationTag?: boolean;
requireAuthorization?: boolean;
depositAuth?: boolean;
disallowIncomingXRP?: boolean;
disableMasterKey?: boolean;
noFreeze?: boolean;
globalFreeze?: boolean;
defaultRipple?: boolean;
}
declare const AccountSetFlags: {
requireDestinationTag: number;
requireAuthorization: number;
depositAuth: number;
disallowIncomingXRP: number;
disableMasterKey: number;
enableTransactionIDTracking: number;
noFreeze: number;
globalFreeze: number;
defaultRipple: number;
};
declare const AccountFields: {
EmailHash: {
name: string;
encoding: string;
length: number;
defaults: string;
};
WalletLocator: {
name: string;
};
MessageKey: {
name: string;
};
Domain: {
name: string;
encoding: string;
};
TransferRate: {
name: string;
defaults: number;
shift: number;
};
TickSize: {
name: string;
defaults: number;
};
};
export { AccountFields, AccountSetFlags, AccountFlags };
//# sourceMappingURL=constants.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":"AAgDA,QAAA,MAAM,YAAY;;;;;;;;;;CAUjB,CAAA;AAED,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,EAAE,OAAO,CAAA;IACvB,qBAAqB,CAAC,EAAE,OAAO,CAAA;IAC/B,oBAAoB,CAAC,EAAE,OAAO,CAAA;IAC9B,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,mBAAmB,CAAC,EAAE,OAAO,CAAA;IAC7B,gBAAgB,CAAC,EAAE,OAAO,CAAA;IAC1B,QAAQ,CAAC,EAAE,OAAO,CAAA;IAClB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAED,QAAA,MAAM,eAAe;;;;;;;;;;CAUpB,CAAA;AAED,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;CAYlB,CAAA;AAED,OAAO,EAAC,aAAa,EAAE,eAAe,EAAE,YAAY,EAAC,CAAA"}
+54
View File
@@ -0,0 +1,54 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AccountFlags = exports.AccountSetFlags = exports.AccountFields = void 0;
const txflags_1 = require("./txflags");
const accountRootFlags = {
DefaultRipple: 0x00800000,
DepositAuth: 0x01000000,
DisableMaster: 0x00100000,
DisallowXRP: 0x00080000,
GlobalFreeze: 0x00400000,
NoFreeze: 0x00200000,
PasswordSpent: 0x00010000,
RequireAuth: 0x00040000,
RequireDestTag: 0x00020000
};
const AccountFlags = {
passwordSpent: accountRootFlags.PasswordSpent,
requireDestinationTag: accountRootFlags.RequireDestTag,
requireAuthorization: accountRootFlags.RequireAuth,
depositAuth: accountRootFlags.DepositAuth,
disallowIncomingXRP: accountRootFlags.DisallowXRP,
disableMasterKey: accountRootFlags.DisableMaster,
noFreeze: accountRootFlags.NoFreeze,
globalFreeze: accountRootFlags.GlobalFreeze,
defaultRipple: accountRootFlags.DefaultRipple
};
exports.AccountFlags = AccountFlags;
const AccountSetFlags = {
requireDestinationTag: txflags_1.txFlagIndices.AccountSet.asfRequireDest,
requireAuthorization: txflags_1.txFlagIndices.AccountSet.asfRequireAuth,
depositAuth: txflags_1.txFlagIndices.AccountSet.asfDepositAuth,
disallowIncomingXRP: txflags_1.txFlagIndices.AccountSet.asfDisallowXRP,
disableMasterKey: txflags_1.txFlagIndices.AccountSet.asfDisableMaster,
enableTransactionIDTracking: txflags_1.txFlagIndices.AccountSet.asfAccountTxnID,
noFreeze: txflags_1.txFlagIndices.AccountSet.asfNoFreeze,
globalFreeze: txflags_1.txFlagIndices.AccountSet.asfGlobalFreeze,
defaultRipple: txflags_1.txFlagIndices.AccountSet.asfDefaultRipple
};
exports.AccountSetFlags = AccountSetFlags;
const AccountFields = {
EmailHash: {
name: 'emailHash',
encoding: 'hex',
length: 32,
defaults: '00000000000000000000000000000000'
},
WalletLocator: { name: 'walletLocator' },
MessageKey: { name: 'messageKey' },
Domain: { name: 'domain', encoding: 'hex' },
TransferRate: { name: 'transferRate', defaults: 0, shift: 9 },
TickSize: { name: 'tickSize', defaults: 0 }
};
exports.AccountFields = AccountFields;
//# sourceMappingURL=constants.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../../src/common/constants.ts"],"names":[],"mappings":";;;AAAA,uCAAuC;AAGvC,MAAM,gBAAgB,GAAG;IAIvB,aAAa,EAAE,UAAU;IAMzB,WAAW,EAAE,UAAU;IAKvB,aAAa,EAAE,UAAU;IAKzB,WAAW,EAAE,UAAU;IAIvB,YAAY,EAAE,UAAU;IAKxB,QAAQ,EAAE,UAAU;IAKpB,aAAa,EAAE,UAAU;IAIzB,WAAW,EAAE,UAAU;IAIvB,cAAc,EAAE,UAAU;CAC3B,CAAA;AAED,MAAM,YAAY,GAAG;IACnB,aAAa,EAAE,gBAAgB,CAAC,aAAa;IAC7C,qBAAqB,EAAE,gBAAgB,CAAC,cAAc;IACtD,oBAAoB,EAAE,gBAAgB,CAAC,WAAW;IAClD,WAAW,EAAE,gBAAgB,CAAC,WAAW;IACzC,mBAAmB,EAAE,gBAAgB,CAAC,WAAW;IACjD,gBAAgB,EAAE,gBAAgB,CAAC,aAAa;IAChD,QAAQ,EAAE,gBAAgB,CAAC,QAAQ;IACnC,YAAY,EAAE,gBAAgB,CAAC,YAAY;IAC3C,aAAa,EAAE,gBAAgB,CAAC,aAAa;CAC9C,CAAA;AAwCuC,oCAAY;AA1BpD,MAAM,eAAe,GAAG;IACtB,qBAAqB,EAAE,uBAAa,CAAC,UAAU,CAAC,cAAc;IAC9D,oBAAoB,EAAE,uBAAa,CAAC,UAAU,CAAC,cAAc;IAC7D,WAAW,EAAE,uBAAa,CAAC,UAAU,CAAC,cAAc;IACpD,mBAAmB,EAAE,uBAAa,CAAC,UAAU,CAAC,cAAc;IAC5D,gBAAgB,EAAE,uBAAa,CAAC,UAAU,CAAC,gBAAgB;IAC3D,2BAA2B,EAAE,uBAAa,CAAC,UAAU,CAAC,eAAe;IACrE,QAAQ,EAAE,uBAAa,CAAC,UAAU,CAAC,WAAW;IAC9C,YAAY,EAAE,uBAAa,CAAC,UAAU,CAAC,eAAe;IACtD,aAAa,EAAE,uBAAa,CAAC,UAAU,CAAC,gBAAgB;CACzD,CAAA;AAgBsB,0CAAe;AAdtC,MAAM,aAAa,GAAG;IACpB,SAAS,EAAE;QACT,IAAI,EAAE,WAAW;QACjB,QAAQ,EAAE,KAAK;QACf,MAAM,EAAE,EAAE;QACV,QAAQ,EAAE,kCAAkC;KAC7C;IACD,aAAa,EAAE,EAAC,IAAI,EAAE,eAAe,EAAC;IACtC,UAAU,EAAE,EAAC,IAAI,EAAE,YAAY,EAAC;IAChC,MAAM,EAAE,EAAC,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAC;IACzC,YAAY,EAAE,EAAC,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAC;IAC3D,QAAQ,EAAE,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,EAAC;CAC1C,CAAA;AAEO,sCAAa"}
+41
View File
@@ -0,0 +1,41 @@
declare class RippleError extends Error {
name: string;
message: string;
data?: any;
constructor(message?: string, data?: any);
toString(): string;
inspect(): string;
}
declare class RippledError extends RippleError {
}
declare class UnexpectedError extends RippleError {
}
declare class LedgerVersionError extends RippleError {
}
declare class ConnectionError extends RippleError {
}
declare class NotConnectedError extends ConnectionError {
}
declare class DisconnectedError extends ConnectionError {
}
declare class RippledNotInitializedError extends ConnectionError {
}
declare class TimeoutError extends ConnectionError {
}
declare class ResponseFormatError extends ConnectionError {
}
declare class ValidationError extends RippleError {
}
declare class XRPLFaucetError extends RippleError {
}
declare class NotFoundError extends RippleError {
constructor(message?: string);
}
declare class MissingLedgerHistoryError extends RippleError {
constructor(message?: string);
}
declare class PendingLedgerVersionError extends RippleError {
constructor(message?: string);
}
export { RippleError, UnexpectedError, ConnectionError, RippledError, NotConnectedError, DisconnectedError, RippledNotInitializedError, TimeoutError, ResponseFormatError, ValidationError, NotFoundError, PendingLedgerVersionError, MissingLedgerHistoryError, LedgerVersionError, XRPLFaucetError };
//# sourceMappingURL=errors.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../../src/common/errors.ts"],"names":[],"mappings":"AAGA,cAAM,WAAY,SAAQ,KAAK;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,GAAG,CAAA;gBAEE,OAAO,SAAK,EAAE,IAAI,CAAC,EAAE,GAAG;IAWpC,QAAQ;IAYR,OAAO;CAGR;AAED,cAAM,YAAa,SAAQ,WAAW;CAAG;AAEzC,cAAM,eAAgB,SAAQ,WAAW;CAAG;AAE5C,cAAM,kBAAmB,SAAQ,WAAW;CAAG;AAE/C,cAAM,eAAgB,SAAQ,WAAW;CAAG;AAE5C,cAAM,iBAAkB,SAAQ,eAAe;CAAG;AAElD,cAAM,iBAAkB,SAAQ,eAAe;CAAG;AAElD,cAAM,0BAA2B,SAAQ,eAAe;CAAG;AAE3D,cAAM,YAAa,SAAQ,eAAe;CAAG;AAE7C,cAAM,mBAAoB,SAAQ,eAAe;CAAG;AAEpD,cAAM,eAAgB,SAAQ,WAAW;CAAG;AAE5C,cAAM,eAAgB,SAAQ,WAAW;CAAG;AAE5C,cAAM,aAAc,SAAQ,WAAW;gBACzB,OAAO,SAAc;CAGlC;AAED,cAAM,yBAA0B,SAAQ,WAAW;gBACrC,OAAO,CAAC,EAAE,MAAM;CAG7B;AAED,cAAM,yBAA0B,SAAQ,WAAW;gBACrC,OAAO,CAAC,EAAE,MAAM;CAO7B;AAED,OAAO,EACL,WAAW,EACX,eAAe,EACf,eAAe,EACf,YAAY,EACZ,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,YAAY,EACZ,mBAAmB,EACnB,eAAe,EACf,aAAa,EACb,yBAAyB,EACzB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EAChB,CAAA"}
+101
View File
@@ -0,0 +1,101 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.XRPLFaucetError = exports.LedgerVersionError = exports.MissingLedgerHistoryError = exports.PendingLedgerVersionError = exports.NotFoundError = exports.ValidationError = exports.ResponseFormatError = exports.TimeoutError = exports.RippledNotInitializedError = exports.DisconnectedError = exports.NotConnectedError = exports.RippledError = exports.ConnectionError = exports.UnexpectedError = exports.RippleError = void 0;
const util_1 = require("util");
const browserHacks = __importStar(require("./browser-hacks"));
class RippleError extends Error {
constructor(message = '', data) {
super(message);
this.name = browserHacks.getConstructorName(this);
this.message = message;
this.data = data;
if (Error.captureStackTrace) {
Error.captureStackTrace(this, this.constructor);
}
}
toString() {
let result = '[' + this.name + '(' + this.message;
if (this.data) {
result += ', ' + util_1.inspect(this.data);
}
result += ')]';
return result;
}
inspect() {
return this.toString();
}
}
exports.RippleError = RippleError;
class RippledError extends RippleError {
}
exports.RippledError = RippledError;
class UnexpectedError extends RippleError {
}
exports.UnexpectedError = UnexpectedError;
class LedgerVersionError extends RippleError {
}
exports.LedgerVersionError = LedgerVersionError;
class ConnectionError extends RippleError {
}
exports.ConnectionError = ConnectionError;
class NotConnectedError extends ConnectionError {
}
exports.NotConnectedError = NotConnectedError;
class DisconnectedError extends ConnectionError {
}
exports.DisconnectedError = DisconnectedError;
class RippledNotInitializedError extends ConnectionError {
}
exports.RippledNotInitializedError = RippledNotInitializedError;
class TimeoutError extends ConnectionError {
}
exports.TimeoutError = TimeoutError;
class ResponseFormatError extends ConnectionError {
}
exports.ResponseFormatError = ResponseFormatError;
class ValidationError extends RippleError {
}
exports.ValidationError = ValidationError;
class XRPLFaucetError extends RippleError {
}
exports.XRPLFaucetError = XRPLFaucetError;
class NotFoundError extends RippleError {
constructor(message = 'Not found') {
super(message);
}
}
exports.NotFoundError = NotFoundError;
class MissingLedgerHistoryError extends RippleError {
constructor(message) {
super(message || 'Server is missing ledger history in the specified range');
}
}
exports.MissingLedgerHistoryError = MissingLedgerHistoryError;
class PendingLedgerVersionError extends RippleError {
constructor(message) {
super(message ||
"maxLedgerVersion is greater than server's most recent" +
' validated ledger');
}
}
exports.PendingLedgerVersionError = PendingLedgerVersionError;
//# sourceMappingURL=errors.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/common/errors.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,+BAA4B;AAC5B,8DAA+C;AAE/C,MAAM,WAAY,SAAQ,KAAK;IAK7B,YAAY,OAAO,GAAG,EAAE,EAAE,IAAU;QAClC,KAAK,CAAC,OAAO,CAAC,CAAA;QAEd,IAAI,CAAC,IAAI,GAAG,YAAY,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAA;QACjD,IAAI,CAAC,OAAO,GAAG,OAAO,CAAA;QACtB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAA;QAChB,IAAI,KAAK,CAAC,iBAAiB,EAAE;YAC3B,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;SAChD;IACH,CAAC;IAED,QAAQ;QACN,IAAI,MAAM,GAAG,GAAG,GAAG,IAAI,CAAC,IAAI,GAAG,GAAG,GAAG,IAAI,CAAC,OAAO,CAAA;QACjD,IAAI,IAAI,CAAC,IAAI,EAAE;YACb,MAAM,IAAI,IAAI,GAAG,cAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;SACpC;QACD,MAAM,IAAI,IAAI,CAAA;QACd,OAAO,MAAM,CAAA;IACf,CAAC;IAKD,OAAO;QACL,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAA;IACxB,CAAC;CACF;AA+CC,kCAAW;AA7Cb,MAAM,YAAa,SAAQ,WAAW;CAAG;AAgDvC,oCAAY;AA9Cd,MAAM,eAAgB,SAAQ,WAAW;CAAG;AA4C1C,0CAAe;AA1CjB,MAAM,kBAAmB,SAAQ,WAAW;CAAG;AAsD7C,gDAAkB;AApDpB,MAAM,eAAgB,SAAQ,WAAW;CAAG;AAyC1C,0CAAe;AAvCjB,MAAM,iBAAkB,SAAQ,eAAe;CAAG;AAyChD,8CAAiB;AAvCnB,MAAM,iBAAkB,SAAQ,eAAe;CAAG;AAwChD,8CAAiB;AAtCnB,MAAM,0BAA2B,SAAQ,eAAe;CAAG;AAuCzD,gEAA0B;AArC5B,MAAM,YAAa,SAAQ,eAAe;CAAG;AAsC3C,oCAAY;AApCd,MAAM,mBAAoB,SAAQ,eAAe;CAAG;AAqClD,kDAAmB;AAnCrB,MAAM,eAAgB,SAAQ,WAAW;CAAG;AAoC1C,0CAAe;AAlCjB,MAAM,eAAgB,SAAQ,WAAW;CAAG;AAuC1C,0CAAe;AArCjB,MAAM,aAAc,SAAQ,WAAW;IACrC,YAAY,OAAO,GAAG,WAAW;QAC/B,KAAK,CAAC,OAAO,CAAC,CAAA;IAChB,CAAC;CACF;AA6BC,sCAAa;AA3Bf,MAAM,yBAA0B,SAAQ,WAAW;IACjD,YAAY,OAAgB;QAC1B,KAAK,CAAC,OAAO,IAAI,yDAAyD,CAAC,CAAA;IAC7E,CAAC;CACF;AAyBC,8DAAyB;AAvB3B,MAAM,yBAA0B,SAAQ,WAAW;IACjD,YAAY,OAAgB;QAC1B,KAAK,CACH,OAAO;YACL,uDAAuD;gBACrD,mBAAmB,CACxB,CAAA;IACH,CAAC;CACF;AAcC,8DAAyB"}
+12
View File
@@ -0,0 +1,12 @@
declare enum HashPrefix {
TRANSACTION_ID = 1415073280,
TRANSACTION_NODE = 1397638144,
INNER_NODE = 1296649728,
LEAF_NODE = 1296846336,
TRANSACTION_SIGN = 1398036480,
TRANSACTION_SIGN_TESTNET = 1937012736,
TRANSACTION_MULTISIGN = 1397576704,
LEDGER = 1280791040
}
export default HashPrefix;
//# sourceMappingURL=hash-prefix.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"hash-prefix.d.ts","sourceRoot":"","sources":["../../../../src/common/hashes/hash-prefix.ts"],"names":[],"mappings":"AAaA,aAAK,UAAU;IAEb,cAAc,aAAa;IAG3B,gBAAgB,aAAa;IAG7B,UAAU,aAAa;IAGvB,SAAS,aAAa;IAGtB,gBAAgB,aAAa;IAG7B,wBAAwB,aAAa;IAGrC,qBAAqB,aAAa;IAGlC,MAAM,aAAa;CACpB;AAED,eAAe,UAAU,CAAA"}
+15
View File
@@ -0,0 +1,15 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var HashPrefix;
(function (HashPrefix) {
HashPrefix[HashPrefix["TRANSACTION_ID"] = 1415073280] = "TRANSACTION_ID";
HashPrefix[HashPrefix["TRANSACTION_NODE"] = 1397638144] = "TRANSACTION_NODE";
HashPrefix[HashPrefix["INNER_NODE"] = 1296649728] = "INNER_NODE";
HashPrefix[HashPrefix["LEAF_NODE"] = 1296846336] = "LEAF_NODE";
HashPrefix[HashPrefix["TRANSACTION_SIGN"] = 1398036480] = "TRANSACTION_SIGN";
HashPrefix[HashPrefix["TRANSACTION_SIGN_TESTNET"] = 1937012736] = "TRANSACTION_SIGN_TESTNET";
HashPrefix[HashPrefix["TRANSACTION_MULTISIGN"] = 1397576704] = "TRANSACTION_MULTISIGN";
HashPrefix[HashPrefix["LEDGER"] = 1280791040] = "LEDGER";
})(HashPrefix || (HashPrefix = {}));
exports.default = HashPrefix;
//# sourceMappingURL=hash-prefix.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"hash-prefix.js","sourceRoot":"","sources":["../../../../src/common/hashes/hash-prefix.ts"],"names":[],"mappings":";;AAaA,IAAK,UAwBJ;AAxBD,WAAK,UAAU;IAEb,wEAA2B,CAAA;IAG3B,4EAA6B,CAAA;IAG7B,gEAAuB,CAAA;IAGvB,8DAAsB,CAAA;IAGtB,4EAA6B,CAAA;IAG7B,4FAAqC,CAAA;IAGrC,sFAAkC,CAAA;IAGlC,wDAAmB,CAAA;AACrB,CAAC,EAxBI,UAAU,KAAV,UAAU,QAwBd;AAED,kBAAe,UAAU,CAAA"}
+13
View File
@@ -0,0 +1,13 @@
export declare const computeBinaryTransactionHash: (txBlobHex: string) => string;
export declare const computeTransactionHash: (txJSON: any) => string;
export declare const computeBinaryTransactionSigningHash: (txBlobHex: string) => string;
export declare const computeAccountLedgerObjectID: (address: string) => string;
export declare const computeSignerListLedgerObjectID: (address: string) => string;
export declare const computeOrderID: (address: string, sequence: number) => string;
export declare const computeTrustlineHash: (address1: string, address2: string, currency: string) => string;
export declare const computeTransactionTreeHash: (transactions: any[]) => string;
export declare const computeStateTreeHash: (entries: any[]) => string;
export declare const computeLedgerHash: (ledgerHeader: any) => string;
export declare const computeEscrowHash: (address: any, sequence: any) => string;
export declare const computePaymentChannelHash: (address: any, dstAddress: any, sequence: any) => string;
//# sourceMappingURL=index.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/common/hashes/index.ts"],"names":[],"mappings":"AA6DA,eAAO,MAAM,4BAA4B,cAAe,MAAM,KAAG,MAGhE,CAAA;AAED,eAAO,MAAM,sBAAsB,WAAY,GAAG,KAAG,MAEpD,CAAA;AAUD,eAAO,MAAM,mCAAmC,cACnC,MAAM,KAChB,MAGF,CAAA;AAeD,eAAO,MAAM,4BAA4B,YAAa,MAAM,KAAG,MAE9D,CAAA;AAeD,eAAO,MAAM,+BAA+B,YAAa,MAAM,KAAG,MAIjE,CAAA;AAeD,eAAO,MAAM,cAAc,YAAa,MAAM,YAAY,MAAM,KAAG,MAGlE,CAAA;AAED,eAAO,MAAM,oBAAoB,aACrB,MAAM,YACN,MAAM,YACN,MAAM,KACf,MAcF,CAAA;AAED,eAAO,MAAM,0BAA0B,iBAAkB,GAAG,EAAE,KAAG,MAYhE,CAAA;AAED,eAAO,MAAM,oBAAoB,YAAa,GAAG,EAAE,KAAG,MASrD,CAAA;AAGD,eAAO,MAAM,iBAAiB,yBAAmB,MAchD,CAAA;AAED,eAAO,MAAM,iBAAiB,mCAAwB,MAIrD,CAAA;AAED,eAAO,MAAM,yBAAyB,oDAInC,MAOF,CAAA"}
+129
View File
@@ -0,0 +1,129 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.computePaymentChannelHash = exports.computeEscrowHash = exports.computeLedgerHash = exports.computeStateTreeHash = exports.computeTransactionTreeHash = exports.computeTrustlineHash = exports.computeOrderID = exports.computeSignerListLedgerObjectID = exports.computeAccountLedgerObjectID = exports.computeBinaryTransactionSigningHash = exports.computeTransactionHash = exports.computeBinaryTransactionHash = void 0;
const bignumber_js_1 = __importDefault(require("bignumber.js"));
const ripple_address_codec_1 = require("ripple-address-codec");
const sha512Half_1 = __importDefault(require("./sha512Half"));
const hash_prefix_1 = __importDefault(require("./hash-prefix"));
const shamap_1 = require("./shamap");
const ripple_binary_codec_1 = require("ripple-binary-codec");
const ledgerspaces_1 = __importDefault(require("./ledgerspaces"));
const padLeftZero = (string, length) => {
return Array(length - string.length + 1).join('0') + string;
};
const intToHex = (integer, byteLength) => {
return padLeftZero(Number(integer).toString(16), byteLength * 2);
};
const bytesToHex = (bytes) => {
return Buffer.from(bytes).toString('hex');
};
const bigintToHex = (integerString, byteLength) => {
const hex = new bignumber_js_1.default(integerString).toString(16);
return padLeftZero(hex, byteLength * 2);
};
const ledgerSpaceHex = (name) => {
return intToHex(ledgerspaces_1.default[name].charCodeAt(0), 2);
};
const addressToHex = (address) => {
return Buffer.from(ripple_address_codec_1.decodeAccountID(address)).toString('hex');
};
const currencyToHex = (currency) => {
if (currency.length === 3) {
const bytes = new Array(20 + 1).join('0').split('').map(parseFloat);
bytes[12] = currency.charCodeAt(0) & 0xff;
bytes[13] = currency.charCodeAt(1) & 0xff;
bytes[14] = currency.charCodeAt(2) & 0xff;
return bytesToHex(bytes);
}
return currency;
};
const addLengthPrefix = (hex) => {
const length = hex.length / 2;
if (length <= 192) {
return bytesToHex([length]) + hex;
}
else if (length <= 12480) {
const x = length - 193;
return bytesToHex([193 + (x >>> 8), x & 0xff]) + hex;
}
else if (length <= 918744) {
const x = length - 12481;
return bytesToHex([241 + (x >>> 16), (x >>> 8) & 0xff, x & 0xff]) + hex;
}
throw new Error('Variable integer overflow.');
};
exports.computeBinaryTransactionHash = (txBlobHex) => {
const prefix = hash_prefix_1.default.TRANSACTION_ID.toString(16).toUpperCase();
return sha512Half_1.default(prefix + txBlobHex);
};
exports.computeTransactionHash = (txJSON) => {
return exports.computeBinaryTransactionHash(ripple_binary_codec_1.encode(txJSON));
};
exports.computeBinaryTransactionSigningHash = (txBlobHex) => {
const prefix = hash_prefix_1.default.TRANSACTION_SIGN.toString(16).toUpperCase();
return sha512Half_1.default(prefix + txBlobHex);
};
exports.computeAccountLedgerObjectID = (address) => {
return sha512Half_1.default(ledgerSpaceHex('account') + addressToHex(address));
};
exports.computeSignerListLedgerObjectID = (address) => {
return sha512Half_1.default(ledgerSpaceHex('signerList') + addressToHex(address) + '00000000');
};
exports.computeOrderID = (address, sequence) => {
const prefix = '00' + intToHex(ledgerspaces_1.default.offer.charCodeAt(0), 1);
return sha512Half_1.default(prefix + addressToHex(address) + intToHex(sequence, 4));
};
exports.computeTrustlineHash = (address1, address2, currency) => {
const address1Hex = addressToHex(address1);
const address2Hex = addressToHex(address2);
const swap = new bignumber_js_1.default(address1Hex, 16).isGreaterThan(new bignumber_js_1.default(address2Hex, 16));
const lowAddressHex = swap ? address2Hex : address1Hex;
const highAddressHex = swap ? address1Hex : address2Hex;
const prefix = ledgerSpaceHex('rippleState');
return sha512Half_1.default(prefix + lowAddressHex + highAddressHex + currencyToHex(currency));
};
exports.computeTransactionTreeHash = (transactions) => {
const shamap = new shamap_1.SHAMap();
transactions.forEach((txJSON) => {
const txBlobHex = ripple_binary_codec_1.encode(txJSON);
const metaHex = ripple_binary_codec_1.encode(txJSON.metaData);
const txHash = exports.computeBinaryTransactionHash(txBlobHex);
const data = addLengthPrefix(txBlobHex) + addLengthPrefix(metaHex);
shamap.addItem(txHash, data, shamap_1.NodeType.TRANSACTION_METADATA);
});
return shamap.hash;
};
exports.computeStateTreeHash = (entries) => {
const shamap = new shamap_1.SHAMap();
entries.forEach((ledgerEntry) => {
const data = ripple_binary_codec_1.encode(ledgerEntry);
shamap.addItem(ledgerEntry.index, data, shamap_1.NodeType.ACCOUNT_STATE);
});
return shamap.hash;
};
exports.computeLedgerHash = (ledgerHeader) => {
const prefix = hash_prefix_1.default.LEDGER.toString(16).toUpperCase();
return sha512Half_1.default(prefix +
intToHex(ledgerHeader.ledger_index, 4) +
bigintToHex(ledgerHeader.total_coins, 8) +
ledgerHeader.parent_hash +
ledgerHeader.transaction_hash +
ledgerHeader.account_hash +
intToHex(ledgerHeader.parent_close_time, 4) +
intToHex(ledgerHeader.close_time, 4) +
intToHex(ledgerHeader.close_time_resolution, 1) +
intToHex(ledgerHeader.close_flags, 1));
};
exports.computeEscrowHash = (address, sequence) => {
return sha512Half_1.default(ledgerSpaceHex('escrow') + addressToHex(address) + intToHex(sequence, 4));
};
exports.computePaymentChannelHash = (address, dstAddress, sequence) => {
return sha512Half_1.default(ledgerSpaceHex('paychan') +
addressToHex(address) +
addressToHex(dstAddress) +
intToHex(sequence, 4));
};
//# sourceMappingURL=index.js.map
File diff suppressed because one or more lines are too long
+21
View File
@@ -0,0 +1,21 @@
declare const _default: {
account: string;
dirNode: string;
generatorMap: string;
rippleState: string;
offer: string;
ownerDir: string;
bookDir: string;
contract: string;
skipList: string;
escrow: string;
amendment: string;
feeSettings: string;
ticket: string;
signerList: string;
paychan: string;
check: string;
depositPreauth: string;
};
export default _default;
//# sourceMappingURL=ledgerspaces.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ledgerspaces.d.ts","sourceRoot":"","sources":["../../../../src/common/hashes/ledgerspaces.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;AAUA,wBAkBC"}
+22
View File
@@ -0,0 +1,22 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.default = {
account: 'a',
dirNode: 'd',
generatorMap: 'g',
rippleState: 'r',
offer: 'o',
ownerDir: 'O',
bookDir: 'B',
contract: 'c',
skipList: 's',
escrow: 'u',
amendment: 'f',
feeSettings: 'e',
ticket: 'T',
signerList: 'S',
paychan: 'x',
check: 'C',
depositPreauth: 'p'
};
//# sourceMappingURL=ledgerspaces.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"ledgerspaces.js","sourceRoot":"","sources":["../../../../src/common/hashes/ledgerspaces.ts"],"names":[],"mappings":";;AAUA,kBAAe;IACb,OAAO,EAAE,GAAG;IACZ,OAAO,EAAE,GAAG;IACZ,YAAY,EAAE,GAAG;IACjB,WAAW,EAAE,GAAG;IAChB,KAAK,EAAE,GAAG;IACV,QAAQ,EAAE,GAAG;IACb,OAAO,EAAE,GAAG;IACZ,QAAQ,EAAE,GAAG;IACb,QAAQ,EAAE,GAAG;IACb,MAAM,EAAE,GAAG;IACX,SAAS,EAAE,GAAG;IACd,WAAW,EAAE,GAAG;IAChB,MAAM,EAAE,GAAG;IACX,UAAU,EAAE,GAAG;IACf,OAAO,EAAE,GAAG;IACZ,KAAK,EAAE,GAAG;IACV,cAAc,EAAE,GAAG;CACpB,CAAA"}
+3
View File
@@ -0,0 +1,3 @@
declare const sha512Half: (hex: string) => string;
export default sha512Half;
//# sourceMappingURL=sha512Half.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sha512Half.d.ts","sourceRoot":"","sources":["../../../../src/common/hashes/sha512Half.ts"],"names":[],"mappings":"AAEA,QAAA,MAAM,UAAU,QAAS,MAAM,KAAG,MAMjC,CAAA;AAED,eAAe,UAAU,CAAA"}
+12
View File
@@ -0,0 +1,12 @@
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const crypto_1 = require("crypto");
const sha512Half = (hex) => {
return crypto_1.createHash('sha512')
.update(Buffer.from(hex, 'hex'))
.digest('hex')
.toUpperCase()
.slice(0, 64);
};
exports.default = sha512Half;
//# sourceMappingURL=sha512Half.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"sha512Half.js","sourceRoot":"","sources":["../../../../src/common/hashes/sha512Half.ts"],"names":[],"mappings":";;AAAA,mCAAiC;AAEjC,MAAM,UAAU,GAAG,CAAC,GAAW,EAAU,EAAE;IACzC,OAAO,mBAAU,CAAC,QAAQ,CAAC;SACxB,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;SAC/B,MAAM,CAAC,KAAK,CAAC;SACb,WAAW,EAAE;SACb,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAA;AACjB,CAAC,CAAA;AAED,kBAAe,UAAU,CAAA"}
+38
View File
@@ -0,0 +1,38 @@
export declare enum NodeType {
INNER = 1,
TRANSACTION_NO_METADATA = 2,
TRANSACTION_METADATA = 3,
ACCOUNT_STATE = 4
}
export declare abstract class Node {
constructor();
addItem(_tag: string, _node: Node): void;
get hash(): string | void;
}
export declare class InnerNode extends Node {
leaves: {
[slot: number]: Node;
};
type: NodeType;
depth: number;
empty: boolean;
constructor(depth?: number);
addItem(tag: string, node: Node): void;
setNode(slot: number, node: Node): void;
getNode(slot: number): Node;
get hash(): string;
}
export declare class Leaf extends Node {
tag: string;
type: NodeType;
data: string;
constructor(tag: string, data: string, type: NodeType);
get hash(): string | void;
}
export declare class SHAMap {
root: InnerNode;
constructor();
addItem(tag: string, data: string, type: NodeType): void;
get hash(): string;
}
//# sourceMappingURL=shamap.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"shamap.d.ts","sourceRoot":"","sources":["../../../../src/common/hashes/shamap.ts"],"names":[],"mappings":"AAKA,oBAAY,QAAQ;IAClB,KAAK,IAAI;IACT,uBAAuB,IAAI;IAC3B,oBAAoB,IAAI;IACxB,aAAa,IAAI;CAClB;AAED,8BAAsB,IAAI;;IAQjB,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI;IAK/C,IAAW,IAAI,IAAI,MAAM,GAAG,IAAI,CAE/B;CACF;AAED,qBAAa,SAAU,SAAQ,IAAI;IAC1B,MAAM,EAAE;QAAC,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAC,CAAA;IAC9B,IAAI,EAAE,QAAQ,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,OAAO,CAAA;gBAOF,KAAK,GAAE,MAAU;IAc7B,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAqCtC,OAAO,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI;IAavC,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI;IAOlC,IAAW,IAAI,IAAI,MAAM,CAQxB;CACF;AAED,qBAAa,IAAK,SAAQ,IAAI;IACrB,GAAG,EAAE,MAAM,CAAA;IACX,IAAI,EAAE,QAAQ,CAAA;IACd,IAAI,EAAE,MAAM,CAAA;gBASA,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ;IAO5D,IAAW,IAAI,IAAI,MAAM,GAAG,IAAI,CAiB/B;CACF;AAED,qBAAa,MAAM;IACV,IAAI,EAAE,SAAS,CAAA;;IAUf,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,IAAI;IAI/D,IAAW,IAAI,IAAI,MAAM,CAExB;CACF"}
+121
View File
@@ -0,0 +1,121 @@
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.SHAMap = exports.Leaf = exports.InnerNode = exports.Node = exports.NodeType = void 0;
const hash_prefix_1 = __importDefault(require("./hash-prefix"));
const sha512Half_1 = __importDefault(require("./sha512Half"));
const HEX_ZERO = '0000000000000000000000000000000000000000000000000000000000000000';
var NodeType;
(function (NodeType) {
NodeType[NodeType["INNER"] = 1] = "INNER";
NodeType[NodeType["TRANSACTION_NO_METADATA"] = 2] = "TRANSACTION_NO_METADATA";
NodeType[NodeType["TRANSACTION_METADATA"] = 3] = "TRANSACTION_METADATA";
NodeType[NodeType["ACCOUNT_STATE"] = 4] = "ACCOUNT_STATE";
})(NodeType = exports.NodeType || (exports.NodeType = {}));
class Node {
constructor() { }
addItem(_tag, _node) {
throw new Error('Called unimplemented virtual method SHAMapTreeNode#addItem.');
}
get hash() {
throw new Error('Called unimplemented virtual method SHAMapTreeNode#hash.');
}
}
exports.Node = Node;
class InnerNode extends Node {
constructor(depth = 0) {
super();
this.leaves = {};
this.type = NodeType.INNER;
this.depth = depth;
this.empty = true;
}
addItem(tag, node) {
const existingNode = this.getNode(parseInt(tag[this.depth], 16));
if (existingNode) {
if (existingNode instanceof InnerNode) {
existingNode.addItem(tag, node);
}
else if (existingNode instanceof Leaf) {
if (existingNode.tag === tag) {
throw new Error('Tried to add a node to a SHAMap that was already in there.');
}
else {
const newInnerNode = new InnerNode(this.depth + 1);
newInnerNode.addItem(existingNode.tag, existingNode);
newInnerNode.addItem(tag, node);
this.setNode(parseInt(tag[this.depth], 16), newInnerNode);
}
}
}
else {
this.setNode(parseInt(tag[this.depth], 16), node);
}
}
setNode(slot, node) {
if (slot < 0 || slot > 15) {
throw new Error('Invalid slot: slot must be between 0-15.');
}
this.leaves[slot] = node;
this.empty = false;
}
getNode(slot) {
if (slot < 0 || slot > 15) {
throw new Error('Invalid slot: slot must be between 0-15.');
}
return this.leaves[slot];
}
get hash() {
if (this.empty)
return HEX_ZERO;
let hex = '';
for (let i = 0; i < 16; i++) {
hex += this.leaves[i] ? this.leaves[i].hash : HEX_ZERO;
}
const prefix = hash_prefix_1.default.INNER_NODE.toString(16);
return sha512Half_1.default(prefix + hex);
}
}
exports.InnerNode = InnerNode;
class Leaf extends Node {
constructor(tag, data, type) {
super();
this.tag = tag;
this.type = type;
this.data = data;
}
get hash() {
switch (this.type) {
case NodeType.ACCOUNT_STATE: {
const leafPrefix = hash_prefix_1.default.LEAF_NODE.toString(16);
return sha512Half_1.default(leafPrefix + this.data + this.tag);
}
case NodeType.TRANSACTION_NO_METADATA: {
const txIDPrefix = hash_prefix_1.default.TRANSACTION_ID.toString(16);
return sha512Half_1.default(txIDPrefix + this.data);
}
case NodeType.TRANSACTION_METADATA: {
const txNodePrefix = hash_prefix_1.default.TRANSACTION_NODE.toString(16);
return sha512Half_1.default(txNodePrefix + this.data + this.tag);
}
default:
throw new Error('Tried to hash a SHAMap node of unknown type.');
}
}
}
exports.Leaf = Leaf;
class SHAMap {
constructor() {
this.root = new InnerNode(0);
}
addItem(tag, data, type) {
this.root.addItem(tag, new Leaf(tag, data, type));
}
get hash() {
return this.root.hash;
}
}
exports.SHAMap = SHAMap;
//# sourceMappingURL=shamap.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"shamap.js","sourceRoot":"","sources":["../../../../src/common/hashes/shamap.ts"],"names":[],"mappings":"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"}
+10
View File
@@ -0,0 +1,10 @@
import * as constants from './constants';
import * as errors from './errors';
import * as validate from './validate';
import * as serverInfo from './serverinfo';
export declare function ensureClassicAddress(account: string): string;
export { constants, errors, validate, serverInfo };
export { dropsToXrp, xrpToDrops, toRippledAmount, removeUndefined, convertKeysFromSnakeCaseToCamelCase, iso8601ToRippleTime, rippleTimeToISO8601 } from './utils';
export { Connection } from './connection';
export { txFlags } from './txflags';
//# sourceMappingURL=index.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,SAAS,MAAM,aAAa,CAAA;AACxC,OAAO,KAAK,MAAM,MAAM,UAAU,CAAA;AAClC,OAAO,KAAK,QAAQ,MAAM,YAAY,CAAA;AACtC,OAAO,KAAK,UAAU,MAAM,cAAc,CAAA;AAG1C,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAkB5D;AAED,OAAO,EAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAC,CAAA;AAChD,OAAO,EACL,UAAU,EACV,UAAU,EACV,eAAe,EACf,eAAe,EACf,mCAAmC,EACnC,mBAAmB,EACnB,mBAAmB,EACpB,MAAM,SAAS,CAAA;AAChB,OAAO,EAAC,UAAU,EAAC,MAAM,cAAc,CAAA;AACvC,OAAO,EAAC,OAAO,EAAC,MAAM,WAAW,CAAA"}
+57
View File
@@ -0,0 +1,57 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.serverInfo = exports.validate = exports.errors = exports.constants = exports.ensureClassicAddress = void 0;
const constants = __importStar(require("./constants"));
exports.constants = constants;
const errors = __importStar(require("./errors"));
exports.errors = errors;
const validate = __importStar(require("./validate"));
exports.validate = validate;
const serverInfo = __importStar(require("./serverinfo"));
exports.serverInfo = serverInfo;
const ripple_address_codec_1 = require("ripple-address-codec");
function ensureClassicAddress(account) {
if (ripple_address_codec_1.isValidXAddress(account)) {
const { classicAddress, tag } = ripple_address_codec_1.xAddressToClassicAddress(account);
if (tag !== false) {
throw new Error('This command does not support the use of a tag. Use an address without a tag.');
}
return classicAddress;
}
else {
return account;
}
}
exports.ensureClassicAddress = ensureClassicAddress;
var utils_1 = require("./utils");
Object.defineProperty(exports, "dropsToXrp", { enumerable: true, get: function () { return utils_1.dropsToXrp; } });
Object.defineProperty(exports, "xrpToDrops", { enumerable: true, get: function () { return utils_1.xrpToDrops; } });
Object.defineProperty(exports, "toRippledAmount", { enumerable: true, get: function () { return utils_1.toRippledAmount; } });
Object.defineProperty(exports, "removeUndefined", { enumerable: true, get: function () { return utils_1.removeUndefined; } });
Object.defineProperty(exports, "convertKeysFromSnakeCaseToCamelCase", { enumerable: true, get: function () { return utils_1.convertKeysFromSnakeCaseToCamelCase; } });
Object.defineProperty(exports, "iso8601ToRippleTime", { enumerable: true, get: function () { return utils_1.iso8601ToRippleTime; } });
Object.defineProperty(exports, "rippleTimeToISO8601", { enumerable: true, get: function () { return utils_1.rippleTimeToISO8601; } });
var connection_1 = require("./connection");
Object.defineProperty(exports, "Connection", { enumerable: true, get: function () { return connection_1.Connection; } });
var txflags_1 = require("./txflags");
Object.defineProperty(exports, "txFlags", { enumerable: true, get: function () { return txflags_1.txFlags; } });
//# sourceMappingURL=index.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/common/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA,uDAAwC;AA0BhC,8BAAS;AAzBjB,iDAAkC;AAyBf,wBAAM;AAxBzB,qDAAsC;AAwBX,4BAAQ;AAvBnC,yDAA0C;AAuBL,gCAAU;AAtB/C,+DAA8E;AAE9E,SAAgB,oBAAoB,CAAC,OAAe;IAClD,IAAI,sCAAe,CAAC,OAAO,CAAC,EAAE;QAC5B,MAAM,EAAC,cAAc,EAAE,GAAG,EAAC,GAAG,+CAAwB,CAAC,OAAO,CAAC,CAAA;QAK/D,IAAI,GAAG,KAAK,KAAK,EAAE;YACjB,MAAM,IAAI,KAAK,CACb,+EAA+E,CAChF,CAAA;SACF;QAGD,OAAO,cAAc,CAAA;KACtB;SAAM;QACL,OAAO,OAAO,CAAA;KACf;AACH,CAAC;AAlBD,oDAkBC;AAGD,iCAQgB;AAPd,mGAAA,UAAU,OAAA;AACV,mGAAA,UAAU,OAAA;AACV,wGAAA,eAAe,OAAA;AACf,wGAAA,eAAe,OAAA;AACf,4HAAA,mCAAmC,OAAA;AACnC,4GAAA,mBAAmB,OAAA;AACnB,4GAAA,mBAAmB,OAAA;AAErB,2CAAuC;AAA/B,wGAAA,UAAU,OAAA;AAClB,qCAAiC;AAAzB,kGAAA,OAAO,OAAA"}
+13
View File
@@ -0,0 +1,13 @@
declare class RangeSet {
ranges: Array<[number, number]>;
constructor();
reset(): void;
serialize(): string;
addRange(start: number, end: number): void;
addValue(value: number): void;
parseAndAddRanges(rangesString: string): void;
containsRange(start: number, end: number): boolean;
containsValue(value: number): boolean;
}
export default RangeSet;
//# sourceMappingURL=rangeset.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rangeset.d.ts","sourceRoot":"","sources":["../../../src/common/rangeset.ts"],"names":[],"mappings":"AAmBA,cAAM,QAAQ;IACZ,MAAM,EAAE,KAAK,CAAC,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;;IAM/B,KAAK;IAIL,SAAS;IAMT,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAKnC,QAAQ,CAAC,KAAK,EAAE,MAAM;IAItB,iBAAiB,CAAC,YAAY,EAAE,MAAM;IAQtC,aAAa,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM;IAIxC,aAAa,CAAC,KAAK,EAAE,MAAM;CAG5B;AAED,eAAe,QAAQ,CAAA"}
+72
View File
@@ -0,0 +1,72 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
const _ = __importStar(require("lodash"));
const assert = __importStar(require("assert"));
function mergeIntervals(intervals) {
const stack = [[-Infinity, -Infinity]];
_.sortBy(intervals, (x) => x[0]).forEach((interval) => {
const lastInterval = stack.pop();
if (interval[0] <= lastInterval[1] + 1) {
stack.push([lastInterval[0], Math.max(interval[1], lastInterval[1])]);
}
else {
stack.push(lastInterval);
stack.push(interval);
}
});
return stack.slice(1);
}
class RangeSet {
constructor() {
this.reset();
}
reset() {
this.ranges = [];
}
serialize() {
return this.ranges
.map((range) => range[0].toString() + '-' + range[1].toString())
.join(',');
}
addRange(start, end) {
assert.ok(start <= end, `invalid range ${start} <= ${end}`);
this.ranges = mergeIntervals(this.ranges.concat([[start, end]]));
}
addValue(value) {
this.addRange(value, value);
}
parseAndAddRanges(rangesString) {
const rangeStrings = rangesString.split(',');
rangeStrings.forEach((rangeString) => {
const range = rangeString.split('-').map(Number);
this.addRange(range[0], range.length === 1 ? range[0] : range[1]);
});
}
containsRange(start, end) {
return this.ranges.some((range) => range[0] <= start && range[1] >= end);
}
containsValue(value) {
return this.containsRange(value, value);
}
}
exports.default = RangeSet;
//# sourceMappingURL=rangeset.js.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"rangeset.js","sourceRoot":"","sources":["../../../src/common/rangeset.ts"],"names":[],"mappings":"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"}
+5
View File
@@ -0,0 +1,5 @@
import { isValidSecret } from './utils';
declare function schemaValidate(schemaName: string, object: any): void;
declare function isValidAddress(address: string): boolean;
export { schemaValidate, isValidSecret, isValidAddress };
//# sourceMappingURL=schema-validator.d.ts.map
+1
View File
@@ -0,0 +1 @@
{"version":3,"file":"schema-validator.d.ts","sourceRoot":"","sources":["../../../src/common/schema-validator.ts"],"names":[],"mappings":"AAKA,OAAO,EAAC,aAAa,EAAC,MAAM,SAAS,CAAA;AAkKrC,iBAAS,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,GAAG,IAAI,CAU7D;AAED,iBAAS,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAEhD;AAED,OAAO,EAAC,cAAc,EAAE,aAAa,EAAE,cAAc,EAAC,CAAA"}
+190
View File
@@ -0,0 +1,190 @@
"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
Object.defineProperty(o, k2, { enumerable: true, get: function() { return m[k]; } });
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.isValidAddress = exports.isValidSecret = exports.schemaValidate = void 0;
const _ = __importStar(require("lodash"));
const assert = __importStar(require("assert"));
const { Validator } = require('jsonschema');
const errors_1 = require("./errors");
const ripple_address_codec_1 = require("ripple-address-codec");
const utils_1 = require("./utils");
Object.defineProperty(exports, "isValidSecret", { enumerable: true, get: function () { return utils_1.isValidSecret; } });
function loadSchemas() {
const schemas = [
require('./schemas/objects/tx-json.json'),
require('./schemas/objects/transaction-type.json'),
require('./schemas/objects/hash128.json'),
require('./schemas/objects/hash256.json'),
require('./schemas/objects/sequence.json'),
require('./schemas/objects/ticket-sequence.json'),
require('./schemas/objects/signature.json'),
require('./schemas/objects/issue.json'),
require('./schemas/objects/ledger-version.json'),
require('./schemas/objects/max-adjustment.json'),
require('./schemas/objects/memo.json'),
require('./schemas/objects/memos.json'),
require('./schemas/objects/public-key.json'),
require('./schemas/objects/private-key.json'),
require('./schemas/objects/uint32.json'),
require('./schemas/objects/value.json'),
require('./schemas/objects/source-adjustment.json'),
require('./schemas/objects/destination-adjustment.json'),
require('./schemas/objects/tag.json'),
require('./schemas/objects/lax-amount.json'),
require('./schemas/objects/lax-lax-amount.json'),
require('./schemas/objects/min-adjustment.json'),
require('./schemas/objects/source-exact-adjustment.json'),
require('./schemas/objects/destination-exact-adjustment.json'),
require('./schemas/objects/destination-address-tag.json'),
require('./schemas/objects/transaction-hash.json'),
require('./schemas/objects/address.json'),
require('./schemas/objects/x-address.json'),
require('./schemas/objects/classic-address.json'),
require('./schemas/objects/adjustment.json'),
require('./schemas/objects/quality.json'),
require('./schemas/objects/amount.json'),
require('./schemas/objects/amountbase.json'),
require('./schemas/objects/balance.json'),
require('./schemas/objects/blob.json'),
require('./schemas/objects/currency.json'),
require('./schemas/objects/signed-value.json'),
require('./schemas/objects/orderbook.json'),
require('./schemas/objects/instructions.json'),
require('./schemas/objects/settings-plus-memos.json'),
require('./schemas/specifications/settings.json'),
require('./schemas/specifications/payment.json'),
require('./schemas/specifications/get-payment.json'),
require('./schemas/specifications/escrow-cancellation.json'),
require('./schemas/specifications/order-cancellation.json'),
require('./schemas/specifications/order.json'),
require('./schemas/specifications/escrow-execution.json'),
require('./schemas/specifications/escrow-creation.json'),
require('./schemas/specifications/payment-channel-create.json'),
require('./schemas/specifications/payment-channel-fund.json'),
require('./schemas/specifications/payment-channel-claim.json'),
require('./schemas/specifications/check-create.json'),
require('./schemas/specifications/check-cash.json'),
require('./schemas/specifications/check-cancel.json'),
require('./schemas/specifications/trustline.json'),
require('./schemas/specifications/deposit-preauth.json'),
require('./schemas/specifications/account-delete.json'),
require('./schemas/output/sign.json'),
require('./schemas/output/submit.json'),
require('./schemas/output/get-account-info.json'),
require('./schemas/output/get-account-objects.json'),
require('./schemas/output/get-balances.json'),
require('./schemas/output/get-balance-sheet.json'),
require('./schemas/output/get-ledger.json'),
require('./schemas/output/get-orderbook.json'),
require('./schemas/output/get-orders.json'),
require('./schemas/output/order-change.json'),
require('./schemas/output/get-payment-channel.json'),
require('./schemas/output/prepare.json'),
require('./schemas/output/ledger-event.json'),
require('./schemas/output/get-paths.json'),
require('./schemas/output/get-server-info.json'),
require('./schemas/output/get-settings.json'),
require('./schemas/output/orderbook-orders.json'),
require('./schemas/output/outcome.json'),
require('./schemas/output/get-transaction.json'),
require('./schemas/output/get-transactions.json'),
require('./schemas/output/get-trustlines.json'),
require('./schemas/output/sign-payment-channel-claim.json'),
require('./schemas/output/verify-payment-channel-claim.json'),
require('./schemas/input/get-balances.json'),
require('./schemas/input/get-balance-sheet.json'),
require('./schemas/input/get-ledger.json'),
require('./schemas/input/get-orders.json'),
require('./schemas/input/get-orderbook.json'),
require('./schemas/input/get-paths.json'),
require('./schemas/input/get-payment-channel.json'),
require('./schemas/input/api-options.json'),
require('./schemas/input/get-settings.json'),
require('./schemas/input/get-account-info.json'),
require('./schemas/input/get-account-objects.json'),
require('./schemas/input/get-transaction.json'),
require('./schemas/input/get-transactions.json'),
require('./schemas/input/get-trustlines.json'),
require('./schemas/input/prepare-payment.json'),
require('./schemas/input/prepare-order.json'),
require('./schemas/input/prepare-trustline.json'),
require('./schemas/input/prepare-order-cancellation.json'),
require('./schemas/input/prepare-settings.json'),
require('./schemas/input/prepare-escrow-creation.json'),
require('./schemas/input/prepare-escrow-cancellation.json'),
require('./schemas/input/prepare-escrow-execution.json'),
require('./schemas/input/prepare-payment-channel-create.json'),
require('./schemas/input/prepare-payment-channel-fund.json'),
require('./schemas/input/prepare-payment-channel-claim.json'),
require('./schemas/input/prepare-check-create.json'),
require('./schemas/input/prepare-check-cash.json'),
require('./schemas/input/prepare-check-cancel.json'),
require('./schemas/input/prepare-ticket-create.json'),
require('./schemas/input/compute-ledger-hash.json'),
require('./schemas/input/sign.json'),
require('./schemas/input/submit.json'),
require('./schemas/input/generate-address.json'),
require('./schemas/input/sign-payment-channel-claim.json'),
require('./schemas/input/verify-payment-channel-claim.json'),
require('./schemas/input/combine.json')
];
const titles = schemas.map((schema) => schema.title);
const duplicates = Object.keys(_.pickBy(_.countBy(titles), (count) => count > 1));
assert.ok(duplicates.length === 0, 'Duplicate schemas for: ' + duplicates);
const validator = new Validator();
validator.customFormats.xAddress = function (instance) {
if (instance == null) {
return true;
}
return ripple_address_codec_1.isValidXAddress(instance);
};
validator.customFormats.classicAddress = function (instance) {
if (instance == null) {
return true;
}
return isValidAddress(instance);
};
validator.customFormats.secret = function (instance) {
if (instance == null) {
return true;
}
return utils_1.isValidSecret(instance);
};
schemas.forEach((schema) => validator.addSchema(schema, '/' + schema.title));
return validator;
}
const schemaValidator = loadSchemas();
function schemaValidate(schemaName, object) {
const schema = schemaValidator.getSchema('/' + schemaName);
if (schema == null) {
throw new errors_1.ValidationError('no schema for ' + schemaName);
}
const result = schemaValidator.validate(object, schema);
if (!result.valid) {
throw new errors_1.ValidationError(result.errors.join());
}
}
exports.schemaValidate = schemaValidate;
function isValidAddress(address) {
return ripple_address_codec_1.isValidXAddress(address) || ripple_address_codec_1.isValidClassicAddress(address);
}
exports.isValidAddress = isValidAddress;
//# sourceMappingURL=schema-validator.js.map
File diff suppressed because one or more lines are too long
+69
View File
@@ -0,0 +1,69 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "api-options",
"type": "object",
"properties": {
"trace": {
"type": "boolean",
"description": "If true, log rippled requests and responses to stdout."
},
"feeCushion": {
"type": "number",
"minimum": 1,
"description": "Factor to multiply estimated fee by to provide a cushion in case the required fee rises during submission of a transaction. Defaults to `1.2`."
},
"maxFeeXRP": {
"type": "string",
"description": "Maximum fee to use with transactions, in XRP. Must be a string-encoded number. Defaults to `'2'`."
},
"server": {
"type": "string",
"description": "URI for rippled websocket port to connect to. Must start with `wss://`, `ws://`, `wss+unix://`, or `ws+unix://`.",
"format": "uri",
"pattern": "^(wss?|wss?\\+unix)://"
},
"proxy": {
"format": "uri",
"description": "URI for HTTP/HTTPS proxy to use to connect to the rippled server."
},
"timeout": {
"type": "integer",
"description": "Request timeout in milliseconds before considering a request to have failed. See also: connectionTimeout.",
"minimum": 1
},
"connectionTimeout": {
"type": "integer",
"description": "Connection timeout, in milliseconds, before considering connect() to have failed.",
"minimum": 1
},
"proxyAuthorization": {
"type": "string",
"description": "Username and password for HTTP basic authentication to the proxy in the format **username:password**."
},
"authorization": {
"type": "string",
"description": "Username and password for HTTP basic authentication to the rippled server in the format **username:password**."
},
"trustedCertificates": {
"type": "array",
"description": "Array of PEM-formatted SSL certificates to trust when connecting to a proxy. This is useful if you want to use a self-signed certificate on the proxy server. Note: Each element must contain a single certificate; concatenated certificates are not valid.",
"items": {
"type": "string",
"description": "A PEM-formatted SSL certificate to trust when connecting to a proxy."
}
},
"key": {
"type": "string",
"description": "A string containing the private key of the client in PEM format. (Can be an array of keys)."
},
"passphrase": {
"type": "string",
"description": "The passphrase for the private key of the client."
},
"certificate": {
"type": "string",
"description": "A string containing the certificate key of the client in PEM format. (Can be an array of certificates)."
}
},
"additionalProperties": false
}
+19
View File
@@ -0,0 +1,19 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "combineParameters",
"type": "object",
"properties": {
"signedTransactions": {
"type": "array",
"description": "An array of signed transactions (from the output of [sign](#sign)) to combine.",
"items": {
"type": "string",
"pattern": "^[A-F0-9]+$",
"description": "A single-signed transaction represented as an uppercase hexadecimal string (from the output of [sign](#sign))"
},
"minLength": 1
}
},
"additionalProperties": false,
"required": ["signedTransactions"]
}
@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "computeLedgerHashParameters",
"type": "object",
"properties": {
"ledger": {
"$ref": "getLedger",
"description": "The ledger header to hash."
}
},
"additionalProperties": false,
"required": ["ledger"]
}
@@ -0,0 +1,37 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "generateAddressParameters",
"type": "object",
"properties": {
"options": {
"type": "object",
"description": "Options to control how the address and secret are generated.",
"properties": {
"entropy": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"description": "The entropy to use to generate the seed. Must be an array of length 16 with values from 0-255 (16 bytes of entropy)"
},
"algorithm": {
"type": "string",
"enum": ["ecdsa-secp256k1", "ed25519"],
"description": "The digital signature algorithm to generate an address for. Can be `ecdsa-secp256k1` (default) or `ed25519`."
},
"test": {
"type": "boolean",
"description": "Specifies whether the address is intended for use on a test network such as Testnet or Devnet. If `true`, the address should only be used for testing, and starts with `T`. If `false`, the address should only be used on Mainnet, and starts with `X`."
},
"includeClassicAddress": {
"type": "boolean",
"description": "If `true`, also return the classic address."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
@@ -0,0 +1,37 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "generateXAddressParameters",
"type": "object",
"properties": {
"options": {
"type": "object",
"description": "Options to control how the address and secret are generated.",
"properties": {
"entropy": {
"type": "array",
"items": {
"type": "integer",
"minimum": 0,
"maximum": 255
},
"description": "The entropy to use to generate the seed. Must be an array of length 16 with values from 0-255 (16 bytes of entropy)"
},
"algorithm": {
"type": "string",
"enum": ["ecdsa-secp256k1", "ed25519"],
"description": "The digital signature algorithm to generate an address for. Can be `ecdsa-secp256k1` (default) or `ed25519`."
},
"test": {
"type": "boolean",
"description": "Specifies whether the address is intended for use on a test network such as Testnet or Devnet. If `true`, the address should only be used for testing, and starts with `T`. If `false`, the address should only be used on Mainnet, and starts with `X`."
},
"includeClassicAddress": {
"type": "boolean",
"description": "Specifies whether the classic address should also be included in the returned payload."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
@@ -0,0 +1,24 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getAccountInfoParameters",
"description": "Parameters for getAccountInfo",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get the account info of."
},
"options": {
"description": "Options that affect what to return.",
"properties": {
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Get the account info as of this historical ledger version."
}
},
"additionalProperties": false
}
},
"required": ["address"],
"additionalProperties": false
}
@@ -0,0 +1,56 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getAccountObjectsOptions",
"description": "Request options for getAccountObjects",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get the account objects of."
},
"options": {
"description": "Options that affect what to return.",
"properties": {
"type": {
"type": "string",
"enum": [
"check",
"escrow",
"offer",
"payment_channel",
"signer_list",
"state"
],
"description":
"(Optional) Filter results to include only this type of ledger object. The valid types are: `check`, `escrow`, `offer`, `payment_channel`, `signer_list`, and `state` (trust line)."
},
"ledgerHash": {
"type": "string",
"description":
"(Optional) A 20-byte hex string for the ledger version to use."
},
"ledgerIndex": {
"oneOf": [
{
"$ref": "ledgerVersion"
},
{
"type": "string"
}
],
"description":
"(Optional) The sequence number of the ledger to use, or a shortcut string to choose a ledger automatically."
},
"limit": {
"type": "integer",
"minimum": 1,
"description":
"(Optional) The maximum number of objects to include in the results."
}
},
"additionalProperties": false
}
},
"required": ["address"],
"additionalProperties": false
}
@@ -0,0 +1,30 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getBalanceSheetParameters",
"description": "Parameters for getBalanceSheet",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The XRP Ledger address of the account to get the balance sheet of."
},
"options": {
"properties": {
"excludeAddresses": {
"type": "array",
"items": {"$ref": "address"},
"uniqueItems": true,
"description": "Addresses to exclude from the balance totals."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Get the balance sheet as of this historical ledger version."
}
},
"description": "Options to determine how the balances are calculated.",
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["address"]
}
@@ -0,0 +1,37 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getBalancesParameters",
"description": "Parameters for getBalances",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get balances for."
},
"options": {
"description": "Options to filter and determine which balances to return.",
"properties": {
"counterparty": {
"$ref": "address",
"description": "Only return balances with this counterparty."
},
"currency": {
"$ref": "currency",
"description": "Only return balances for this currency."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Return at most this many balances."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Return balances as they were in this historical ledger version."
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["address"]
}
+13
View File
@@ -0,0 +1,13 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getFeeParameters",
"description": "Parameters for getFee",
"type": "object",
"properties": {
"cushion": {
"type": "number",
"description": "The fee is the product of the base fee, the `load_factor`, and this cushion. Default is provided by the `RippleAPI` constructor's `feeCushion`."
}
},
"additionalProperties": false
}
+35
View File
@@ -0,0 +1,35 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getLedgerParameters",
"description": "Parameters for getLedger",
"type": "object",
"properties": {
"options": {
"description": "Options affecting what ledger and how much data to return.",
"properties": {
"ledgerHash": {
"type": "string",
"description": "Get ledger data for this historical ledger hash."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Get ledger data for this historical ledger version."
},
"includeAllData": {
"type": "boolean",
"description": "Include the details of the transactions or state information if `includeTransactions` or `includeState` is set."
},
"includeTransactions": {
"type": "boolean",
"description": "Return an array of transactions in this ledger. By default, provides the identifying hashes for each transaction. If `includeAllData` is true, include the entire transaction JSON for each transaction instead."
},
"includeState": {
"type": "boolean",
"description": "Return an array of state data in this ledger. By default, provides the identifying hashes of state data. If `includeAllData` is true, return the state data in JSON form instead. **Admin required:** This is a very large amount of data."
}
},
"additionalProperties": false
}
},
"additionalProperties": false
}
@@ -0,0 +1,33 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getOrderbookParameters",
"description": "Parameters for getOrderbook",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "Address of an account to use as point-of-view. (This affects which unfunded offers are returned.)"
},
"orderbook": {
"$ref": "orderbook",
"description": "The order book to get."
},
"options": {
"description": "Options to determine what to return.",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"description": "Return at most this many orders from the order book."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Return the order book as of this historical ledger version."
}
},
"additionalProperties": false
}
},
"required": ["address", "orderbook"],
"additionalProperties": false
}
+29
View File
@@ -0,0 +1,29 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getOrdersParameters",
"description": "Parameters for getOrders",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The XRP Ledger address of the account to get open orders for."
},
"options": {
"description": "Options that determine what orders to return.",
"properties": {
"limit": {
"type": "integer",
"minimum": 1,
"description": "Return at most this many orders."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Return orders as of this historical ledger version."
}
},
"additionalProperties": false
}
},
"required": ["address"],
"additionalProperties": false
}
+69
View File
@@ -0,0 +1,69 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getPathsParameters",
"type": "object",
"properties": {
"pathfind": {
"description": "Specification of a pathfind request.",
"properties": {
"source": {
"description": "Properties of the source of funds.",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The XRP Ledger address of the planned sender."
},
"amount": {
"$ref": "laxAmount",
"description": "The amount of funds to send."
},
"currencies": {
"description": "An array of currencies (with optional counterparty) that may be used in the payment paths.",
"type": "array",
"items": {
"description": "A currency with optional counterparty.",
"type": "object",
"properties": {
"currency": {"$ref": "currency"},
"counterparty": {
"$ref": "address",
"description": "The counterparty for the currency; if omitted any counterparty may be used."
}
},
"required": ["currency"],
"additionalProperties": false
},
"uniqueItems": true
}
},
"not": {
"required": ["amount", "currencies"]
},
"additionalProperties": false,
"required": ["address"]
},
"destination": {
"description": "Properties of the destination of funds.",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "An address representing the destination of the transaction."
},
"amount": {
"$ref": "laxLaxAmount",
"description": "The amount to be received by the receiver (`value` may be ommitted if a source amount is specified)."
}
},
"required": ["address", "amount"],
"additionalProperties": false
}
},
"required": ["source", "destination"],
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["pathfind"]
}
@@ -0,0 +1,14 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getPaymentChannelParameters",
"description": "Parameters for getPaymentChannel",
"type": "object",
"properties": {
"id": {
"$ref": "hash256",
"description": "256-bit hexadecimal channel identifier."
}
},
"additionalProperties": false,
"required": ["id"]
}
@@ -0,0 +1,24 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getSettingsParameters",
"description": "Parameters for getSettings",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get the settings of."
},
"options": {
"description": "Options that affect what to return.",
"properties": {
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Get the settings as of this historical ledger version."
}
},
"additionalProperties": false
}
},
"required": ["address"],
"additionalProperties": false
}
@@ -0,0 +1,28 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getTransactionParameters",
"description": "Parameters for getTransaction",
"type": "object",
"properties": {
"id": {"$ref": "transactionHash"},
"options": {
"description": "Options to limit the ledger versions to search or include raw transaction data.",
"properties": {
"minLedgerVersion": {
"$ref": "ledgerVersion",
"description": "The lowest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'."
},
"maxLedgerVersion": {
"$ref": "ledgerVersion",
"description": "The highest ledger version to search. This must be an integer greater than 0, or one of the following strings: 'validated', 'closed', 'current'."
},
"includeRawTransaction": {
"description": "Include raw transaction data. For advanced users; exercise caution when interpreting this data."
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["id"]
}
@@ -0,0 +1,71 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getTransactionsParameters",
"description": "Parameters for getTransactions",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get transactions for."
},
"options": {
"description": "Options to filter the resulting transactions.",
"properties": {
"start": {
"$ref": "hash256",
"description": "If specified, start the results from this transaction. You cannot use `start` with `minLedgerVersion` or `maxLedgerVersion`. When `start` is specified, these ledger versions are determined internally."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "If specified, return at most this many transactions."
},
"minLedgerVersion": {
"$ref": "ledgerVersion",
"description": "Return only transactions in this ledger version or higher."
},
"maxLedgerVersion": {
"$ref": "ledgerVersion",
"description": "Return only transactions in this ledger version or lower."
},
"earliestFirst": {
"type": "boolean",
"description": "If true, sort transactions so that the earliest ones come first. By default, the newest transactions come first."
},
"excludeFailures": {
"type": "boolean",
"description": "If true, the result omits transactions that did not succeed."
},
"initiated": {
"type": "boolean",
"description": "If true, return only transactions initiated by the account specified by `address`. If false, return only transactions not initiated by the account specified by `address`."
},
"counterparty": {
"$ref": "address",
"description": "If provided, only return transactions with this account as a counterparty to the transaction."
},
"types": {
"type": "array",
"items": {"$ref": "transactionType"},
"description": "Only return transactions of the specified [Transaction Types](#transaction-types)."
},
"includeRawTransactions": {
"description": "Include raw transaction data. For advanced users; exercise caution when interpreting this data. "
},
"binary": {
"type": "boolean",
"description": "If true, return transactions in binary format rather than JSON."
}
},
"additionalProperties": false,
"not": {
"anyOf": [
{"required": ["start", "minLedgerVersion"]},
{"required": ["start", "maxLedgerVersion"]}
]
}
}
},
"additionalProperties": false,
"required": ["address"]
}
@@ -0,0 +1,37 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "getTrustlinesParameters",
"description": "Parameters for getTrustlines",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account to get trustlines for."
},
"options": {
"description": "Options to filter and determine which trustlines to return.",
"properties": {
"counterparty": {
"$ref": "address",
"description": "Only return trustlines with this counterparty."
},
"currency": {
"$ref": "currency",
"description": "Only return trustlines for this currency."
},
"limit": {
"type": "integer",
"minimum": 1,
"description": "Return at most this many trustlines."
},
"ledgerVersion": {
"$ref": "ledgerVersion",
"description": "Return trustlines as they were in this historical ledger version."
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["address"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareCheckCancelParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"checkCancel": {
"$ref": "checkCancel",
"description": "The specification of the Check cancellation to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "checkCancel"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareCheckCashParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"checkCash": {
"$ref": "checkCash",
"description": "The specification of the Check cash to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "checkCash"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareCheckCreateParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"checkCreate": {
"$ref": "checkCreate",
"description": "The specification of the Check create creation to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "checkCreate"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareEscrowCancellationParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"escrowCancellation": {
"$ref": "escrowCancellation",
"description": "The specification of the escrow cancellation to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "escrowCancellation"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareEscrowCreationParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"escrowCreation": {
"$ref": "escrowCreation",
"description": "The specification of the escrow creation to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "escrowCreation"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareEscrowExecutionParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"escrowExecution": {
"$ref": "escrowExecution",
"description": "The specification of the escrow execution to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "escrowExecution"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareOrderCancellationParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"orderCancellation": {
"$ref": "orderCancellation",
"description": "The specification of the order cancellation to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "orderCancellation"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareOrderParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"order": {
"$ref": "order",
"description": "The specification of the order to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "order"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "preparePaymentChannelClaimParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"paymentChannelClaim": {
"$ref": "paymentChannelClaim",
"description": "Details of the channel and claim."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "paymentChannelClaim"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "preparePaymentChannelCreateParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"paymentChannelCreate": {
"$ref": "paymentChannelCreate",
"description": "The specification of the payment channel to create."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "paymentChannelCreate"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "preparePaymentChannelFundParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"paymentChannelFund": {
"$ref": "paymentChannelFund",
"description": "The channel to fund, and the details of how to fund it."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "paymentChannelFund"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "preparePaymentParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"payment": {
"$ref": "payment",
"description": "The specification of the payment to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "payment"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareSettingsParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"settings": {
"$ref": "settings",
"description": "The specification of the settings to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "settings"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareTicketParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"ticketCount": {
"type": "number",
"description": "The number of tickets to be created."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "ticketCount"]
}
@@ -0,0 +1,18 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "prepareTrustlineParameters",
"type": "object",
"properties": {
"address": {
"$ref": "address",
"description": "The address of the account that is creating the transaction."
},
"trustline": {
"$ref": "trustline",
"description": "The specification of the trustline to prepare."
},
"instructions": {"$ref": "instructions"}
},
"additionalProperties": false,
"required": ["address", "trustline"]
}
@@ -0,0 +1,21 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "signPaymentChannelClaimParameters",
"type": "object",
"properties": {
"channel": {
"$ref": "hash256",
"description": "256-bit hexadecimal channel identifier."
},
"amount": {
"$ref": "value",
"description": "Amount of XRP authorized by the claim."
},
"privateKey": {
"$ref": "publicKey",
"description": "The private key to sign the payment channel claim."
}
},
"additionalProperties": false,
"required": ["channel", "amount", "privateKey"]
}
+55
View File
@@ -0,0 +1,55 @@
{
"$schema": "http://json-schema.org/draft-04/schema#",
"title": "signParameters",
"type": "object",
"properties": {
"txJSON": {
"type": "string",
"description": "Transaction represented as a JSON string in rippled format."
},
"secret": {
"type": "string",
"format": "secret",
"description": "The secret of the account that is initiating the transaction. (This field cannot be used with keypair)."
},
"keypair": {
"type": "object",
"properties": {
"privateKey": {
"type": "privateKey",
"description": "The uppercase hexadecimal representation of the secp256k1 or Ed25519 private key. Ed25519 keys are prefixed with 0xED. You can read about how keys are derived [here](https://xrpl.org/cryptographic-keys.html)."
},
"publicKey": {
"type": "publicKey",
"description": "The uppercase hexadecimal representation of the secp256k1 or Ed25519 public key. Ed25519 keys are prefixed with 0xED. You can read about how keys are derived [here](https://xrpl.org/cryptographic-keys.html)."
}
},
"description": "The private and public key of the account that is initiating the transaction. (This field cannot be used with secret).",
"required": ["privateKey", "publicKey"],
"additionalProperties": false
},
"options": {
"type": "object",
"description": "Options that control the type of signature to create.",
"properties": {
"signAs": {
"$ref": "address",
"description": "The account that the signature should count for in multisigning."
}
},
"additionalProperties": false
}
},
"additionalProperties": false,
"required": ["txJSON"],
"oneOf": [
{
"required": ["secret"],
"not": {"required": ["keypair"]}
},
{
"required": ["keypair"],
"not": {"required": ["secret"]}
}
]
}

Some files were not shown because too many files have changed in this diff Show More