diff --git a/.ci-config/rippled.cfg b/.ci-config/rippled.cfg index 291f87b730..ce092a1520 100644 --- a/.ci-config/rippled.cfg +++ b/.ci-config/rippled.cfg @@ -63,17 +63,9 @@ online_delete=256 [debug_logfile] /var/log/rippled/debug.log -[sntp_servers] -time.windows.com -time.apple.com -time.nist.gov -pool.ntp.org +[network_id] +0 -[ips] -r.ripple.com 51235 - -[validators_file] -validators.txt [rpc_startup] { "command": "log_level", "severity": "info" } @@ -109,7 +101,6 @@ validators.txt # Devnet amendments as of June 28th, 2023 NegativeUNL fixRemoveNFTokenAutoTrustLine -NonFungibleTokensV1 CheckCashMakesTrustLine fixRmSmallIncreasedQOffers fixSTAmountCanonicalize @@ -152,10 +143,8 @@ fix1512 fix1373 MultiSign Checks -NonFungibleTokensV1_1 # 1.10.0 Amendments DisallowIncoming -fixNonFungibleTokensV1_2 fixTrustLinesToSelf fixUniversalNumber ImmediateOfferKilled @@ -166,7 +155,6 @@ ExpandedSignerList AMM Clawback fixReducedOffersV1 -fixNFTokenRemint # 2.0.0 Amendments XChainBridge DID @@ -178,3 +166,33 @@ PriceOracle fixEmptyDID fixXChainRewardRounding fixPreviousTxnID +fixAMMv1_1 +# 2.3.0 Amendments +AMMClawback +Credentials +NFTokenMintOffer +MPTokensV1 +fixAMMv1_2 +fixNFTokenPageLinks +fixInnerObjTemplate2 +fixEnforceNFTokenTrustline +fixReducedOffersV2 +# 2.4.0 Amendments +DeepFreeze +DynamicNFT +PermissionedDomains +fixFrozenLPTokenTransfer +fixInvalidTxFlags +# 2.5.0 Amendments +Batch +PermissionedDEX +TokenEscrow +SingleAssetVault +LendingProtocol +PermissionDelegationV1_1 + +# This section can be used to simulate various FeeSettings scenarios for rippled node in standalone mode +[voting] +reference_fee = 200 # 200 drops +account_reserve = 20000000 # 20 XRP +owner_reserve = 5000000 # 5 XRP diff --git a/.coderabbit.yaml b/.coderabbit.yaml index f4532da994..c7eaae931f 100644 --- a/.coderabbit.yaml +++ b/.coderabbit.yaml @@ -13,6 +13,8 @@ reviews: review_status: true # Generate walkthrough in a markdown collapsible section. collapse_walkthrough: false + # Generate sequence diagrams in the walkthrough. + sequence_diagrams: false # Abort the in-progress review if the pull request is closed or merged. abort_on_close: true auto_review: diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 0c33596aec..216a653043 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -3,6 +3,6 @@ updates: - package-ecosystem: npm directory: "/" schedule: - interval: weekly + interval: quarterly time: "15:00" - open-pull-requests-limit: 10 + open-pull-requests-limit: 30 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index 9bf9fc6b16..3670396249 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -33,11 +33,11 @@ jobs: steps: - name: Checkout repository - uses: actions/checkout@v3 + uses: actions/checkout@v4 # Initializes the CodeQL tools for scanning. - name: Initialize CodeQL - uses: github/codeql-action/init@v2 + uses: github/codeql-action/init@v3 with: languages: ${{ matrix.language }} # If you wish to specify custom queries, you can do so here or in a config file. @@ -48,7 +48,7 @@ jobs: # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). # If this step fails, then you should remove it and run the build manually (see below) - name: Autobuild - uses: github/codeql-action/autobuild@v2 + uses: github/codeql-action/autobuild@v3 # ℹ️ Command-line programs to run using the OS shell. # πŸ“š https://git.io/JvXDl @@ -62,4 +62,4 @@ jobs: # make release - name: Perform CodeQL Analysis - uses: github/codeql-action/analyze@v2 + uses: github/codeql-action/analyze@v3 diff --git a/.github/workflows/faucet_test.yml b/.github/workflows/faucet_test.yml new file mode 100644 index 0000000000..df2938c5b9 --- /dev/null +++ b/.github/workflows/faucet_test.yml @@ -0,0 +1,66 @@ +name: Faucet Tests + +on: + push: + branches: [main] + workflow_dispatch: + workflow_call: + inputs: + git_ref: + description: 'Git ref to checkout (branch, tag, or commit SHA)' + required: true + type: string + run_faucet_tests: + description: 'Run faucet tests job' + required: false + type: boolean + default: true + + +jobs: + faucet-test: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_faucet_tests != false }} + runs-on: ubuntu-latest + timeout-minutes: 15 + + strategy: + max-parallel: 1 + matrix: + node-version: [18.x] + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ inputs.git_ref || github.ref }} + fetch-depth: 0 + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Setup npm version 10 + run: | + npm i -g npm@10 --registry=https://registry.npmjs.org + + - name: Cache node modules + id: cache-nodemodules + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-deps-${{ matrix.node-version }}- + + - name: Install Dependencies + if: steps.cache-nodemodules.outputs.cache-hit != 'true' + run: npm ci + + - name: Build + run: npm run build + + - name: Run Faucet Tests + run: npm run test:faucet diff --git a/.github/workflows/generate-documentation.yml b/.github/workflows/generate-documentation.yml new file mode 100644 index 0000000000..edf760884d --- /dev/null +++ b/.github/workflows/generate-documentation.yml @@ -0,0 +1,77 @@ +name: Generate Documentation + +on: + workflow_call: + inputs: + git_ref: + description: 'Git ref to checkout (branch, tag, or commit SHA)' + required: true + type: string + +env: + GIT_REF: ${{ inputs.git_ref }} + +jobs: + generate-documentation: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [22.x] + + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ env.GIT_REF }} + fetch-depth: 0 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v4 + with: + node-version: ${{ matrix.node-version }} + + - name: Setup npm version 10 + run: | + npm i -g npm@10 --registry=https://registry.npmjs.org + - name: Cache node modules + id: cache-nodemodules + uses: actions/cache@v4 + env: + cache-name: cache-node-modules + with: + # caching node_modules + path: | + node_modules + */*/node_modules + key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} + restore-keys: | + ${{ runner.os }}-deps-${{ matrix.node-version }}- + - name: Install Dependencies + if: steps.cache-nodemodules.outputs.cache-hit != 'true' + run: npm ci + + - run: npm run build + + - name: Generate Documentation + run: npm run docgen + + - name: Upload documentation files as artifact + id: docs-artifact + uses: actions/upload-pages-artifact@v3 + with: + path: docs/ + retention-days: 10 + + deploy-docs-pages: + permissions: + id-token: write # Needed for OIDC authentication + pages: write # this permission is needed for deploying into Github Pages + environment: + name: github-pages + url: ${{ steps.docs-artifact.outputs.page_url }} + runs-on: ubuntu-latest + needs: generate-documentation + steps: + - name: Deploy to Documentation to GitHub Pages + id: docs-artifact + uses: actions/deploy-pages@v4 diff --git a/.github/workflows/nodejs.yml b/.github/workflows/nodejs.yml index 176acc8cb8..5624ee8014 100644 --- a/.github/workflows/nodejs.yml +++ b/.github/workflows/nodejs.yml @@ -4,37 +4,64 @@ name: Node.js CI env: - RIPPLED_DOCKER_IMAGE: rippleci/rippled:2.2.0-b3 + RIPPLED_DOCKER_IMAGE: rippleci/rippled:develop + GIT_REF: ${{ inputs.git_ref || github.ref }} on: push: - branches: [main, 1.x] + branches: [main] + tags: + - "**" pull_request: + types: [opened, synchronize, reopened, ready_for_review] workflow_dispatch: + workflow_call: + inputs: + git_ref: + description: "Git ref to checkout (branch, tag, or commit SHA)" + required: true + type: string + run_unit_tests: + description: "Run unit tests job" + required: false + type: boolean + default: true + run_integration_tests: + description: "Run integration tests job" + required: false + type: boolean + default: true + run_browser_tests: + description: "Run browser tests job" + required: false + type: boolean + default: true jobs: build-and-lint: runs-on: ubuntu-latest timeout-minutes: 10 - strategy: matrix: - node-version: [18.x] + node-version: [24.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + ref: ${{ env.GIT_REF }} + fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - name: Setup npm version 9 + - name: Setup npm version 10 run: | - npm i -g npm@9 --registry=https://registry.npmjs.org + npm i -g npm@10 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -45,7 +72,6 @@ jobs: key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- - ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' @@ -55,27 +81,31 @@ jobs: - run: npm run lint unit: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_unit_tests != false }} runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x, 24.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + ref: ${{ env.GIT_REF }} + fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - name: Setup npm version 9 + - name: Setup npm version 10 run: | - npm i -g npm@9 --registry=https://registry.npmjs.org + npm i -g npm@10 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -86,7 +116,6 @@ jobs: key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- - ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' @@ -96,32 +125,36 @@ jobs: - run: npm test integration: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_integration_tests != false }} runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: - node-version: [18.x, 20.x] + node-version: [20.x, 22.x, 24.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + ref: ${{ env.GIT_REF }} + fetch-depth: 0 - name: Run docker in background run: | - docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/ripple/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.RIPPLED_DOCKER_IMAGE }} /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg + docker run --detach --rm -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/etc/opt/ripple/" --name rippled-service --health-cmd="rippled server_info || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true --entrypoint bash ${{ env.RIPPLED_DOCKER_IMAGE }} -c "mkdir -p /var/lib/rippled/db/ && rippled -a" - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - - name: Setup npm version 9 + - name: Setup npm version 10 run: | - npm i -g npm@9 --registry=https://registry.npmjs.org + npm i -g npm@10 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -132,7 +165,6 @@ jobs: key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- - ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' @@ -148,32 +180,36 @@ jobs: run: docker stop rippled-service browser: + if: ${{ github.event_name != 'workflow_dispatch' || inputs.run_browser_tests != false }} runs-on: ubuntu-latest timeout-minutes: 10 strategy: matrix: - node-version: [18.x] + node-version: [24.x] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 + with: + ref: ${{ env.GIT_REF }} + fetch-depth: 0 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: ${{ matrix.node-version }} - name: Run docker in background run: | - docker run --detach --rm --name rippled-service -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/opt/ripple/etc/" --health-cmd="wget localhost:6006 || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true ${{ env.RIPPLED_DOCKER_IMAGE }} /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg + docker run --detach --rm -p 6006:6006 --volume "${{ github.workspace }}/.ci-config/":"/etc/opt/ripple/" --name rippled-service --health-cmd="rippled server_info || exit 1" --health-interval=5s --health-retries=10 --health-timeout=2s --env GITHUB_ACTIONS=true --env CI=true --entrypoint bash ${{ env.RIPPLED_DOCKER_IMAGE }} -c "mkdir -p /var/lib/rippled/db/ && rippled -a" - - name: Setup npm version 9 + - name: Setup npm version 10 run: | - npm i -g npm@9 --registry=https://registry.npmjs.org + npm i -g npm@10 --registry=https://registry.npmjs.org - name: Cache node modules id: cache-nodemodules - uses: actions/cache@v3 + uses: actions/cache@v4 env: cache-name: cache-node-modules with: @@ -184,7 +220,6 @@ jobs: key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} restore-keys: | ${{ runner.os }}-deps-${{ matrix.node-version }}- - ${{ runner.os }}-deps- - name: Install Dependencies if: steps.cache-nodemodules.outputs.cache-hit != 'true' @@ -198,45 +233,3 @@ jobs: - name: Stop docker container if: always() run: docker stop rippled-service - - snippets: - runs-on: ubuntu-latest - timeout-minutes: 10 - - strategy: - matrix: - node-version: [18.x, 20.x] - - steps: - - uses: actions/checkout@v3 - - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v3 - with: - node-version: ${{ matrix.node-version }} - - - name: Setup npm version 9 - run: | - npm i -g npm@9 --registry=https://registry.npmjs.org - - - name: Cache node modules - id: cache-nodemodules - uses: actions/cache@v3 - env: - cache-name: cache-node-modules - with: - # caching node_modules - path: | - node_modules - */*/node_modules - key: ${{ runner.os }}-deps-${{ matrix.node-version }}-${{ hashFiles('**/package-lock.json') }} - restore-keys: | - ${{ runner.os }}-deps-${{ matrix.node-version }}- - ${{ runner.os }}-deps- - - - name: Install Dependencies - if: steps.cache-nodemodules.outputs.cache-hit != 'true' - run: npm ci - - - run: npm run build - - name: Run Snippets - run: (for i in packages/xrpl/snippets/src/*.ts; do echo "Running $i" && npx ts-node $i || exit 1; done) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 0000000000..ccacc432c2 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,775 @@ +name: Release Pipeline + +permissions: + contents: read + +on: + workflow_dispatch: + inputs: + package_name: + description: "Package folder (Name of the package directory under packages/ folder. e.g., xrpl, ripple-address-codec)" + required: true + release_branch_name: + description: 'Name of the release branch to be used' + required: true + npmjs_dist_tag: + description: "npm distribution tag(Read more https://docs.npmjs.com/adding-dist-tags-to-packages)" + default: "latest" + +concurrency: + group: release + cancel-in-progress: true + +defaults: + run: + shell: bash + +jobs: + get_version: + runs-on: ubuntu-latest + permissions: + contents: read + name: Get release version from package.json + outputs: + package_version: ${{ steps.get_version.outputs.package_version }} + dist_tag: ${{ steps.validate_inputs.outputs.dist_tag }} + release_branch: ${{ steps.validate_inputs.outputs.release_branch }} + is_beta: ${{ steps.validate_inputs.outputs.is_beta }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ github.event.inputs.release_branch_name }} + + - name: Validate inputs + id: validate_inputs + env: + GH_TOKEN: ${{ github.token }} + PKG_NAME: ${{ github.event.inputs.package_name }} + REPO: ${{ github.repository }} + RELEASE_BRANCH: ${{ github.event.inputs.release_branch_name }} + TRIGGER_BRANCH: ${{ github.ref_name }} + NPM_DIST_TAG: ${{ github.event.inputs.npmjs_dist_tag }} + run: | + set -euo pipefail + + if [[ -z "$RELEASE_BRANCH" ]]; then + echo "❌ Unable to determine branch name." >&2 + exit 1 + fi + + # Validate package_name + if ! [[ "${PKG_NAME}" =~ ^[a-z0-9][a-z0-9-]*$ ]]; then + echo "❌ Invalid package_name '${PKG_NAME}' (allowed: [a-z0-9-], must start with alnum)." >&2 + exit 1 + fi + # Guard against path traversal + if [[ "${PKG_NAME}" == *".."* || "${PKG_NAME}" == *"/"* ]]; then + echo "❌ package_name must be a single directory under packages/." >&2 + exit 1 + fi + + if grep -R --exclude-dir=.git --exclude-dir=.github "artifactory.ops.ripple.com" .; then + echo "❌ Internal Artifactory URL found" + exit 1 + else + echo "βœ… No Internal Artifactory URL found" + fi + + if [ -z "$NPM_DIST_TAG" ]; then + NPM_DIST_TAG="latest" + echo "ℹ️ npmjs_dist_tag empty β†’ defaulting to 'latest'." + else + NPM_DIST_TAG="$(printf '%s' "$NPM_DIST_TAG" | tr -d '[:space:]')" + fi + + if ! [[ "$NPM_DIST_TAG" =~ ^[a-z][a-z0-9._-]{0,127}$ ]]; then + echo "❌ Invalid npm dist-tag '$NPM_DIST_TAG'. Must start with a lowercase letter and contain only [a-z0-9._-], max 128 chars." >&2 + exit 1 + fi + if [[ "$NPM_DIST_TAG" =~ ^v[0-9] || "$NPM_DIST_TAG" =~ ^[0-9] ]]; then + echo "❌ Invalid npm dist-tag '$NPM_DIST_TAG'. Must not start with 'v' + digit or a digit (e.g., 'v1', '1.2.3')." >&2 + exit 1 + fi + + if [ "$NPM_DIST_TAG" = "latest" ]; then + IS_BETA="false" + else + IS_BETA="true" + NPM_DIST_TAG="${NPM_DIST_TAG}-experimental" + fi + + if [ "$IS_BETA" != "true" ] && [[ ! "${RELEASE_BRANCH}" =~ ^[Rr][Ee][Ll][Ee][Aa][Ss][Ee][-/] ]]; then + echo "❌ Release branch '$RELEASE_BRANCH' must start with 'release-' or 'release/' for stable releases." >&2 + exit 1 + fi + + if [[ "$TRIGGER_BRANCH" != "main" ]]; then + echo "❌ Release pipeline can only be triggered from the 'main' branch. Current branch: '$TRIGGER_BRANCH'." >&2 + exit 1 + fi + + { + echo "NPM_DIST_TAG=$NPM_DIST_TAG" + echo "RELEASE_BRANCH=$RELEASE_BRANCH" + } >> "$GITHUB_ENV" + + PR_NUMBER="" + PR_URL="" + + { + echo "release_branch=$RELEASE_BRANCH" + echo "is_beta=$IS_BETA" + echo "dist_tag=$NPM_DIST_TAG" + } >> "$GITHUB_OUTPUT" + + + - name: Get package version from package.json + id: get_version + env: + IS_BETA: ${{ steps.validate_inputs.outputs.is_beta }} + PKG_NAME: ${{ github.event.inputs.package_name }} + run: | + set -euo pipefail + PKG_JSON="packages/${PKG_NAME}/package.json" + if [[ ! -f "${PKG_JSON}" ]]; then + echo "package.json not found at ${PKG_JSON}. Check 'package_name' input." >&2 + exit 1 + fi + VERSION=$(jq -er .version "${PKG_JSON}") + if [[ -z "${VERSION}" || "${VERSION}" == "null" ]]; then + echo "Version is empty or missing in ${PKG_JSON}" >&2 + exit 1 + fi + + if [[ "${IS_BETA:-false}" != "true" ]] && ! [[ "$VERSION" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "With npmjs_dist_tag 'latest', version must be of the form x.y.z. Found '$VERSION'." >&2 + exit 1 + fi + echo "package_version=$VERSION" >> "$GITHUB_OUTPUT" + + run_faucet_test: + name: Run faucet tests ${{ needs.get_version.outputs.package_version }} + needs: [get_version] + uses: ./.github/workflows/faucet_test.yml + with: + git_ref: ${{ needs.get_version.outputs.release_branch }} + run_faucet_tests: ${{ needs.get_version.outputs.is_beta != 'true' }} + secrets: inherit + + run_tests: + name: Run unit/integration tests ${{ needs.get_version.outputs.package_version }} + needs: [get_version] + uses: ./.github/workflows/nodejs.yml + with: + git_ref: ${{ needs.get_version.outputs.release_branch }} + run_unit_tests: true + run_integration_tests: ${{ needs.get_version.outputs.is_beta != 'true' }} + run_browser_tests: ${{ needs.get_version.outputs.is_beta != 'true' }} + secrets: inherit + + pre_release: + runs-on: ubuntu-latest + if: ${{ always() && needs.get_version.result == 'success' && (needs.run_faucet_test.result == 'success' || needs.run_faucet_test.result == 'skipped') && needs.run_tests.result == 'success' }} + needs: [get_version, run_faucet_test, run_tests] + name: Pre Release Pipeline for ${{ needs.get_version.outputs.package_version }} + permissions: + issues: write + pull-requests: write + env: + PKG_VERSION: "${{ needs.get_version.outputs.package_version }}" + PKG_NAME: "${{ github.event.inputs.package_name }}" + outputs: + release_pr_number: ${{ steps.ensure_pr.outputs.pr_number }} + release_pr_url: ${{ steps.ensure_pr.outputs.pr_url }} + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ needs.get_version.outputs.release_branch }} + + - name: Create PR from release branch to main (skips for rc/beta) + id: ensure_pr + if: ${{ github.event.inputs.npmjs_dist_tag == '' || github.event.inputs.npmjs_dist_tag == 'latest' }} + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + RELEASE_BRANCH: ${{ needs.get_version.outputs.release_branch }} + VERSION: ${{ needs.get_version.outputs.package_version }} + RUN_ID: ${{ github.run_id }} + run: | + set -euo pipefail + + echo "πŸ”Ž Checking if a PR already exists for $RELEASE_BRANCH β†’ main…" + OWNER="${REPO%%/*}" + # Find existing OPEN PR: base=main, head=OWNER:RELEASE_BRANCH + PRS_JSON="$(gh api -H 'Accept: application/vnd.github+json' \ + "/repos/$REPO/pulls?state=open&base=main&head=${OWNER}:${RELEASE_BRANCH}")" + PR_NUMBER="$(printf '%s' "$PRS_JSON" | jq -r '.[0].number // empty')" + PR_URL="$(printf '%s' "$PRS_JSON" | jq -r '.[0].html_url // empty')" + if [ -n "${PR_NUMBER:-}" ]; then + echo "ℹ️ Found existing PR: #$PR_NUMBER ($PR_URL)" + echo "πŸ›‘ Closing existing PR #$PR_NUMBER before opening a draft…" + CLOSE_JSON="$(jq -n --arg state "closed" '{state:$state}')" + if ! gh api -H 'Accept: application/vnd.github+json' \ + --method PATCH \ + "/repos/$REPO/pulls/$PR_NUMBER" \ + --input <(printf '%s' "$CLOSE_JSON"); then + echo "⚠️ Unable to close PR #$PR_NUMBER automatically. You may need to close it manually." >&2 + fi + fi + + echo "πŸ“ Creating PR for release $VERSION from $RELEASE_BRANCH β†’ main (as draft)" + CREATE_JSON="$(jq -n \ + --arg title "Release $VERSION: $RELEASE_BRANCH β†’ main" \ + --arg head "$RELEASE_BRANCH" \ + --arg base "main" \ + --arg body "Automated PR for release **$VERSION** from **$RELEASE_BRANCH** β†’ **main**. Workflow Run: https://github.com/$REPO/actions/runs/$RUN_ID" \ + '{title:$title, head:$head, base:$base, body:$body, draft:true}')" + RESP="$(gh api -H 'Accept: application/vnd.github+json' \ + --method POST /repos/$REPO/pulls --input <(printf '%s' "$CREATE_JSON"))" + PR_NUMBER="$(printf '%s' "$RESP" | jq -r '.number')" + PR_URL="$(printf '%s' "$RESP" | jq -r '.html_url')" + # Expose as step outputs (use these in later steps) + echo "pr_url=$PR_URL" >> "$GITHUB_OUTPUT" + echo "pr_number=$PR_NUMBER" >> "$GITHUB_OUTPUT" + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: "https://registry.npmjs.org" + + - name: Build package + run: | + # debugging info + npm i -g npm@11.6.0 + npm --version + node --version + ls -l + pwd + + # build + npm ci + npm run build + + - name: Notify Slack if tests fail + if: failure() + env: + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + run: | + MESSAGE="❌ Build failed for xrpl.js ${PKG_VERSION}. Check the logs: https://github.com/${REPO}/actions/runs/${RUN_ID}" + curl -X POST https://slack.com/api/chat.postMessage \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg channel "#xrpl-js" \ + --arg text "${MESSAGE}" \ + '{channel: $channel, text: $text}')" + + - name: Install cyclonedx-npm + run: npm install -g @cyclonedx/cyclonedx-npm@4.0.2 + + - name: Generate CycloneDX SBOM + run: cyclonedx-npm --output-format json --output-file sbom.json + + - name: Scan SBOM for vulnerabilities using Trivy + uses: aquasecurity/trivy-action@0.28.0 + with: + scan-type: sbom + scan-ref: sbom.json + format: table + exit-code: 0 + output: vuln-report.txt + severity: CRITICAL,HIGH + + - name: Upload sbom to OWASP + env: + OWASP_TOKEN: ${{ secrets.OWASP_TOKEN }} + run: | + curl -X POST \ + -H "X-Api-Key: ${OWASP_TOKEN}" \ + -F "autoCreate=true" \ + -F "projectName=xrpl-js" \ + -F "projectVersion=${PKG_VERSION}" \ + -F "bom=@sbom.json" \ + https://owasp-dt-api.prod.ripplex.io/api/v1/bom + + - name: Upload SBOM artifact + uses: actions/upload-artifact@v4 + with: + name: sbom + path: sbom.json + + - name: Print scan report + run: cat vuln-report.txt + + - name: Upload vulnerability report artifact + id: upload_vuln + uses: actions/upload-artifact@v4 + with: + name: vulnerability-report + path: vuln-report.txt + + - name: Build vuln artifact URL + id: vuln_art + env: + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + ARTIFACT_ID: ${{ steps.upload_vuln.outputs.artifact-id }} + run: | + echo "art_url=https://github.com/${REPO}/actions/runs/${RUN_ID}/artifacts/${ARTIFACT_ID}" >> "$GITHUB_OUTPUT" + + - name: Check vulnerabilities in report + id: check_vulns + shell: bash + env: + REPORT_PATH: vuln-report.txt # change if different + run: | + set -euo pipefail + if grep -qE "CRITICAL|HIGH" "$REPORT_PATH"; then + echo "found=true" >> "$GITHUB_OUTPUT" + else + echo "found=false" >> "$GITHUB_OUTPUT" + fi + + - name: Create GitHub Issue (links to report artifact) + if: steps.check_vulns.outputs.found == 'true' + shell: bash + env: + GH_TOKEN: ${{ github.token }} + REPO: ${{ github.repository }} + REL_BRANCH: ${{ github.ref_name }} + VULN_ART_URL: ${{ steps.vuln_art.outputs.art_url }} + LABELS: security + run: | + set -euo pipefail + TITLE="πŸ”’ Security vulnerabilities in ${PKG_NAME}@${PKG_VERSION}" + : > issue_body.md + + echo "The vulnerability scan has detected **CRITICAL/HIGH** vulnerabilities for \`${PKG_NAME}@${PKG_VERSION}\` on branch \`${REL_BRANCH}\`." >> issue_body.md + echo "" >> issue_body.md + echo "**Release Branch:** \`${REL_BRANCH}\`" >> issue_body.md + echo "**Package Version:** \`${PKG_VERSION}\`" >> issue_body.md + echo "" >> issue_body.md + echo "**Full vulnerability report:** ${VULN_ART_URL}" >> issue_body.md + echo "" >> issue_body.md + echo "Please review the report and take necessary action." >> issue_body.md + echo "" >> issue_body.md + echo "---" >> issue_body.md + echo "_This issue was automatically generated by the Release Pipeline._" >> issue_body.md + gh issue create --title "${TITLE}" --body-file issue_body.md --label "${LABELS}" + + - name: Generate lerna.json for choosen the package + run: | + echo "πŸ”§ Updating lerna.json to include only packages/${PKG_NAME}" + # Use jq to update the packages field safely + jq --arg pkg "packages/${PKG_NAME}" '.packages = [$pkg]' lerna.json > lerna.tmp.json && mv lerna.tmp.json lerna.json + echo "βœ… lerna.json updated:" + cat lerna.json + + - name: Pack tarball + run: | + set -euo pipefail + echo "Packaging ${PKG_NAME}" + find "packages/${PKG_NAME}" -maxdepth 1 -name '*.tgz' -delete || true + FULL_PKG_NAME="$(jq -er '.name' packages/${PKG_NAME}/package.json)" + TARBALL=$(npx lerna exec --scope "${FULL_PKG_NAME}" -- npm pack --json | jq -r '.[0].filename') + echo "TARBALL=packages/${PKG_NAME}/${TARBALL}" >> "$GITHUB_ENV" + + - name: Upload tarball as artifact + uses: actions/upload-artifact@v4 + with: + name: npm-package-tarball + path: ${{ env.TARBALL }} + + ask_for_dev_team_review: + runs-on: ubuntu-latest + if: ${{ always() && needs.pre_release.result == 'success' && needs.run_tests.result == 'success' && (needs.run_faucet_test.result == 'success' || needs.run_faucet_test.result == 'skipped') }} + needs: [get_version, run_faucet_test, run_tests, pre_release] + permissions: + pull-requests: write + name: Print Test/Security scan result and invite Dev team to review + env: + PKG_VERSION: "${{ needs.get_version.outputs.package_version }}" + PKG_NAME: "${{ github.event.inputs.package_name }}" + RELEASE_BRANCH: "${{ github.event.inputs.release_branch_name }}" + outputs: + reviewers_dev: ${{ steps.get_reviewers.outputs.reviewers_dev }} + reviewers_sec: ${{ steps.get_reviewers.outputs.reviewers_sec }} + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + + - name: Get reviewers + id: get_reviewers + shell: bash + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + ENV_DEV_NAME: first-review + ENV_SEC_NAME: official-release + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} + run: | + set -euo pipefail + + fetch_reviewers() { + local env_name="$1" + local env_json reviewers + env_json="$(curl -sSf \ + -H "Authorization: Bearer $GH_TOKEN" \ + -H "Accept: application/vnd.github+json" \ + "https://api.github.com/repos/$REPO/environments/$env_name")" || true + + reviewers="$(printf '%s' "$env_json" | jq -r ' + (.protection_rules // []) + | map(select(.type=="required_reviewers") | .reviewers // []) + | add // [] + | map( + if .type=="User" then (.reviewer.login) + elif .type=="Team" then (.reviewer.slug) + else (.reviewer.login // .reviewer.slug // "unknown") + end + ) + | unique + | join(", ") + ')" + if [ -z "$reviewers" ] || [ "$reviewers" = "null" ]; then + reviewers="(no required reviewers configured)" + fi + printf '%s' "$reviewers" + } + + # Get reviewer lists + REVIEWERS_DEV="$(fetch_reviewers "$ENV_DEV_NAME")" + REVIEWERS_SEC="$(fetch_reviewers "$ENV_SEC_NAME")" + + # Output messages + echo "reviewers_dev=$REVIEWERS_DEV" >> "$GITHUB_OUTPUT" + echo "reviewers_sec=$REVIEWERS_SEC" >> "$GITHUB_OUTPUT" + + - name: Release summary for review + env: + GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + ENV_NAME: official-release + GITHUB_ACTOR: ${{ github.actor }} + GITHUB_TRIGGERING_ACTOR: ${{ github.triggering_actor }} + RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + PR_URL: ${{ needs.pre_release.outputs.release_pr_url }} + + run: | + set -euo pipefail + ARTIFACT_NAME="vulnerability-report" + COMMIT_SHA="$(git rev-parse --short HEAD)" + + echo "Fetching artifact ID for ${ARTIFACT_NAME}..." + ARTIFACTS=$(curl -s -H "Authorization: Bearer ${GH_TOKEN}" \ + -H "Accept: application/vnd.github+json" \ + "https://api.github.com/repos/${REPO}/actions/runs/${RUN_ID}/artifacts") + + ARTIFACT_ID=$(echo "${ARTIFACTS}" | jq -r ".artifacts[] | select(.name == \"${ARTIFACT_NAME}\") | .id") + + if [ -z "${ARTIFACT_ID:-}" ]; then + echo "❌ Artifact not found." + exit 1 + fi + + echo "πŸ” Please review the following details before proceeding:" + echo "πŸ“¦ Package Name: ${PKG_NAME}" + echo "πŸ”– Package Version: ${PKG_VERSION}" + echo "🌿 Release Branch: ${RELEASE_BRANCH}" + echo "πŸ”’ Commit SHA: ${COMMIT_SHA}" + echo "πŸ”— Vulnerabilities: https://github.com/${REPO}/actions/runs/${RUN_ID}/artifacts/${ARTIFACT_ID}" + + - name: Send Dev review message to Slack + if: always() + shell: bash + env: + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + CHANNEL: "#xrpl-js" + EXECUTOR: ${{ github.triggering_actor || github.actor }} + RUN_URL: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + DEV_REVIEWERS: ${{ steps.get_reviewers.outputs.reviewers_dev }} + PR_URL: ${{ needs.pre_release.outputs.release_pr_url }} + run: | + set -euo pipefail + RUN_URL="https://github.com/${REPO}/actions/runs/${RUN_ID}" + + MSG="${EXECUTOR} is releasing ${PKG_NAME}@${PKG_VERSION}. A member from the dev team (${DEV_REVIEWERS}) needs to take the following actions: \n1) Review the release artifacts and approve/reject the release. (${RUN_URL})" + + if [ -n "${PR_URL}" ]; then + MSG="${MSG} \n2) Review the package update PR and provide two approvals. DO NOT MERGE β€” ${EXECUTOR} will verify the package on npm and merge the approved PR. (${PR_URL})" + fi + MSG=$(printf '%b' "${MSG}") + # Post once + curl -sS -X POST https://slack.com/api/chat.postMessage \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json; charset=utf-8" \ + -d "$(jq -n --arg channel "${CHANNEL}" --arg text "${MSG}" '{channel:$channel, text:$text}')" \ + | jq -er '.ok' >/dev/null + + first_review: + runs-on: ubuntu-latest + if: ${{ always() && needs.ask_for_dev_team_review.result == 'success' && needs.run_tests.result == 'success' && (needs.run_faucet_test.result == 'success' || needs.run_faucet_test.result == 'skipped') }} + needs: + [ + get_version, + run_faucet_test, + run_tests, + pre_release, + ask_for_dev_team_review + ] + name: First approval (dev team) + environment: + name: first-review + url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + steps: + - name: Awaiting approval + run: echo "Awaiting Dev team approval" + + ask_for_sec_team_review: + runs-on: ubuntu-latest + if: ${{ always() && needs.first_review.result == 'success' && needs.run_tests.result == 'success' && (needs.run_faucet_test.result == 'success' || needs.run_faucet_test.result == 'skipped') }} + needs: + [ + get_version, + run_faucet_test, + run_tests, + pre_release, + ask_for_dev_team_review, + first_review + ] + name: Invite sec team to review + steps: + - name: Send Sec team review request to Slack + shell: bash + env: + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + CHANNEL: "#ripplex-security" + EXECUTOR: ${{ github.triggering_actor || github.actor }} + PKG_NAME: ${{ github.event.inputs.package_name }} + PKG_VERSION: ${{ needs.get_version.outputs.package_version }} + REPO: ${{ github.repository }} + RUN_ID: ${{ github.run_id }} + SEC_REVIEWERS: ${{ needs.ask_for_dev_team_review.outputs.reviewers_sec }} + run: | + set -euo pipefail + RUN_URL="https://github.com/${REPO}/actions/runs/${RUN_ID}" + + MSG="${EXECUTOR} is releasing ${PKG_NAME}@${PKG_VERSION}. A sec reviewer from (${SEC_REVIEWERS}) needs to take the following action:\nReview the release artifacts and approve/reject the release. (${RUN_URL})" + MSG=$(printf '%b' "$MSG") + curl -sS -X POST https://slack.com/api/chat.postMessage \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json; charset=utf-8" \ + -d "$(jq -n --arg channel "${CHANNEL}" --arg text "${MSG}" '{channel:$channel, text:$text}')" \ + | jq -er '.ok' >/dev/null + + release: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: write + if: ${{ always() && needs.ask_for_sec_team_review.result == 'success' && needs.run_tests.result == 'success' && (needs.run_faucet_test.result == 'success' || needs.run_faucet_test.result == 'skipped') }} + needs: + [ + get_version, + run_faucet_test, + run_tests, + pre_release, + ask_for_dev_team_review, + first_review, + ask_for_sec_team_review + ] + + name: Release for ${{ needs.get_version.outputs.package_version }} + env: + PKG_VERSION: "${{ needs.get_version.outputs.package_version }}" + PKG_NAME: "${{ github.event.inputs.package_name }}" + environment: + name: official-release + url: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }} + steps: + - name: Prevent second attempt + run: | + if (( ${GITHUB_RUN_ATTEMPT:-1} > 1 )); then + echo "❌ Workflow rerun (attempt ${GITHUB_RUN_ATTEMPT}). Second attempts are not allowed." + exit 1 + fi + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: 20 + registry-url: 'https://registry.npmjs.org/' + - name: Checkout release branch + uses: actions/checkout@v4 + with: + fetch-depth: 0 + ref: ${{ needs.get_version.outputs.release_branch }} + + - name: Download artifact + uses: actions/download-artifact@v4 + with: + name: npm-package-tarball + path: dist + + - name: Publish to npm + env: + NPM_DIST_TAG: ${{ needs.get_version.outputs.dist_tag }} + IS_BETA: ${{ needs.get_version.outputs.is_beta }} + run: | + set -euo pipefail + REPO_ROOT="$PWD" + PACKAGE_JSON_PATH="$REPO_ROOT/packages/${PKG_NAME}/package.json" + if [ ! -f "$PACKAGE_JSON_PATH" ]; then + echo "❌ package.json not found at $PACKAGE_JSON_PATH" >&2 + exit 1 + fi + FULL_PACKAGE_NAME=$(jq -er '.name' "$PACKAGE_JSON_PATH") + + cd dist + PKG=$(ls *.tgz) + echo "$PKG" + + if [ -z "${NPM_DIST_TAG:-}" ]; then + echo "❌ Primary npm dist-tag is not set." >&2 + exit 1 + fi + + if [[ "${IS_BETA}" != "true" ]] && ! [[ "${PKG_VERSION}" =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then + echo "Stable releases (tagged with 'latest') must use x.y.z SemVer. Found '${PKG_VERSION}'." >&2 + exit 1 + fi + + npm i -g npm@11.6.0 + npm publish "${PKG}" --provenance --access public --registry=https://registry.npmjs.org/ --tag "$NPM_DIST_TAG" + + - name: Ensure Git tag exists + id: create_tag + run: | + set -euo pipefail + TAG="${PKG_NAME}@${PKG_VERSION}" + + git fetch --tags origin + + if git rev-parse "${TAG}" >/dev/null 2>&1 ; then + echo "❌ Tag ${TAG} already exists (not a draft). Failing." + exit 1 + fi + + echo "πŸ”– Tagging ${TAG}" + git tag -f "${TAG}" + git push origin -f "${TAG}" + + echo "tag_name=${TAG}" >> "$GITHUB_OUTPUT" + + - name: Create GitHub release + uses: softprops/action-gh-release@v2 + with: + tag_name: "${{ steps.create_tag.outputs.tag_name }}" + name: "${{ steps.create_tag.outputs.tag_name }}" + draft: false + generate_release_notes: true + prerelease: ${{ needs.get_version.outputs.is_beta == 'true' }} + make_latest: ${{ needs.get_version.outputs.is_beta != 'true' }} + + - name: Notify Slack success (single-line) + if: success() + env: + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + REPO: ${{ github.repository }} + TAG: ${{ steps.create_tag.outputs.tag_name }} + run: | + set -euo pipefail + + # Build release URL from tag (URL-encoded to handle '@' etc.) + enc_tag="$(printf '%s' "${TAG}" | jq -sRr @uri)" + RELEASE_URL="https://github.com/${REPO}/releases/tag/${enc_tag}" + + text="${PKG_NAME} ${PKG_VERSION} has been succesfully released and published to npm.js. Release URL: ${RELEASE_URL}" + text="${text//\\n/ }" + + curl -sS -X POST https://slack.com/api/chat.postMessage \ + -H "Authorization: Bearer ${SLACK_TOKEN}" \ + -H "Content-Type: application/json; charset=utf-8" \ + -d "$(jq -n --arg channel '#xrpl-js' --arg text "${text}" '{channel:$channel, text:$text}')" + + generate-documentation: + name: Generate and Publish documentation for ${{ needs.get_version.outputs.package_version }} + if: ${{ needs.get_version.outputs.is_beta != 'true' }} + uses: ./.github/workflows/generate-documentation.yml + needs: [get_version, release] + permissions: + contents: read + pages: write + id-token: write + with: + git_ref: ${{ needs.get_version.outputs.release_branch }} + + notify_failures: + runs-on: ubuntu-latest + needs: + [ + get_version, + run_faucet_test, + run_tests, + pre_release, + ask_for_dev_team_review, + first_review, + ask_for_sec_team_review, + release, + generate-documentation + ] + if: >- + ${{ always() && ( + needs.get_version.result == 'failure' || + (needs.run_faucet_test.result == 'failure' && needs.get_version.outputs.is_beta != 'true') || + (needs.run_tests.result == 'failure' && needs.get_version.outputs.is_beta != 'true') || + needs.pre_release.result == 'failure' || + needs.ask_for_dev_team_review.result == 'failure' || + needs.first_review.result == 'failure' || + needs.ask_for_sec_team_review.result == 'failure' || + needs.release.result == 'failure' || + needs.generate-documentation.result == 'failure' + ) }} + steps: + - name: Notify Slack about workflow failure + env: + SLACK_TOKEN: ${{ secrets.SLACK_TOKEN }} + PKG_NAME: ${{ github.event.inputs.package_name }} + PKG_VERSION: ${{ needs.get_version.outputs.package_version }} + NEEDS_JSON: ${{ toJson(needs) }} + run: | + set -euo pipefail + FAILED_JOBS=$(printf '%s' "$NEEDS_JSON" | jq -r ' + to_entries + | map(select(.value.result=="failure") | .key) + | join(", ") + ') + if [ -z "$FAILED_JOBS" ]; then + echo "No failed jobs detected; skipping notification." + exit 0 + fi + + MESSAGE="❌ Workflow failure for ${PKG_NAME}@${PKG_VERSION}. Release failed at ${FAILED_JOBS}. For details: https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }}" + curl -sS -X POST https://slack.com/api/chat.postMessage \ + -H "Authorization: Bearer $SLACK_TOKEN" \ + -H "Content-Type: application/json" \ + -d "$(jq -n \ + --arg channel '#xrpl-js' \ + --arg text "${MESSAGE}" \ + '{channel: $channel, text: $text}')" diff --git a/.gitignore b/.gitignore index 6c49c1088b..05860a0c4c 100644 --- a/.gitignore +++ b/.gitignore @@ -64,8 +64,6 @@ dist/ # Ignore perf test cache scripts/cache -.eslintrc - # nyc (istanbul) .nyc_output diff --git a/.nvmrc b/.nvmrc index 3f430af82b..53d1c14db3 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v18 +v22 diff --git a/.prettierignore b/.prettierignore index dd449725e1..dd767b8e97 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1 +1,3 @@ *.md + +/.nx/workspace-data \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index ef2c734c23..2db3c7df59 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,20 +2,24 @@ "editor.tabSize": 2, "cSpell.words": [ "altnet", - "Autofills", + "autofills", + "bignumber", "Clawback", "hostid", "keypair", "keypairs", + "MPToken", "multisign", "multisigned", "multisigning", + "Permissioned", "preauthorization", "rippletest", "secp256k1", "Setf", "Sidechains", - "xchain" + "xchain", + "xrplf" ], "[javascript]": { "editor.defaultFormatter": "esbenp.prettier-vscode", diff --git a/APPLICATIONS.md b/APPLICATIONS.md index 8d7f17375a..af59da4e1e 100644 --- a/APPLICATIONS.md +++ b/APPLICATIONS.md @@ -78,6 +78,14 @@ Warning: Use at your own risk. ## Wallets and wallet tools +- **[Joey Wallet](https://joeywallet.xyz)** + + Joey Wallet is a secure, self-custody cryptocurrency wallet and gateway to Web3 decentralized applications (dApps) on the XRP Ledger (XRPL). Documentation and integration details are located at [https://docs.joeywallet.xyz/](https://docs.joeywallet.xyz). + +- **[Crossmark Wallet](https://crossmark.io/)** + + Crossmark is a browser-first, self-custodial wallet built for interacting with the XRP Ledger. Send, receive, create value with ease. Documentation can be found at [https://docs.crossmark.io/](https://docs.crossmark.io/). + - **[GemWallet](https://gemwallet.app/)** Users can use the GemWallet (non-custodial) web extension to interact with the XRPL from their browser. The documentation is available at [https://gemwallet.app/](https://gemwallet.app/docs/user-guide/introduction). diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 38b08ab0fc..6d4917ce73 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -12,7 +12,7 @@ ### Requirements -We use Node v18 for development - that is the version that our linters require. +We use Node v22 for development - that is the version that our linters require. You must also use `npm` v7. You can check your `npm` version with: ```bash @@ -64,18 +64,34 @@ From the top-level xrpl.js folder (one level above `packages`), run the followin ```bash npm install # sets up the rippled standalone Docker container - you can skip this step if you already have it set up -docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/ripple/etc/ --platform linux/amd64 rippleci/rippled:2.0.0-b4 /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg +docker run -p 6006:6006 --rm -it --name rippled_standalone --volume $PWD/.ci-config:/etc/opt/ripple/ --entrypoint bash rippleci/rippled:develop -c 'mkdir -p /var/lib/rippled/db/ && rippled -a' npm run build npm run test:integration ``` Breaking down the command: * `docker run -p 6006:6006` starts a Docker container with an open port for admin WebSocket requests. -* `--interactive` allows you to interact with the container. -* `-t` starts a terminal in the container for you to send commands to. -* `--volume $PWD/.ci-config:/config/` identifies the `rippled.cfg` and `validators.txt` to import. It must be an absolute path, so we use `$PWD` instead of `./`. + `--rm` tells docker to close the container after processes are done running. +* `-it` allows you to interact with the container. + `--name rippled_standalone` is an instance name for clarity +* `--volume $PWD/.ci-config:/etc/opt/ripple/` identifies the `rippled.cfg` and `validators.txt` to import. It must be an absolute path, so we use `$PWD` instead of `./`. * `rippleci/rippled` is an image that is regularly updated with the latest `rippled` releases -* `/opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg` starts `rippled` in standalone mode +* `--entrypoint bash rippleci/rippled:develop` manually overrides the entrypoint (for the latest version of rippled on the `develop` branch) +* `-c 'rippled -a'` provides the bash command to start `rippled` in standalone mode from the manual entrypoint + +### Faucet Tests + +Faucet tests are designed to ensure the functionality of account funding and other interactions that require a funded wallet, typically by interacting with a Faucet service. These tests are crucial for verifying real-world scenarios where new accounts need to be activated on the XRP Ledger. + +To run Faucet tests locally, you'll first need to ensure your development environment is set up and the project is built. Faucet tests do not require a locally running `rippled` instance to execute. + +From the root directory of xrpl.js, run the following commands: + +```bash +npm install +npm run build +npm run test:faucet +``` ### Browser Tests @@ -90,7 +106,7 @@ This should be run from the `xrpl.js` top level folder (one above the `packages` ```bash npm run build # sets up the rippled standalone Docker container - you can skip this step if you already have it set up -docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/ripple/etc/ --platform linux/amd64 rippleci/rippled:2.2.0-b3 /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg +docker run -p 6006:6006 --rm -it --name rippled_standalone --volume $PWD/.ci-config:/etc/opt/ripple/ --entrypoint bash rippleci/rippled:develop -c 'rippled -a' npm run test:browser ``` @@ -130,13 +146,13 @@ For every file in `src`, we try to have a corresponding file in `test` with unit The goal is to maintain above 80% code coverage, and generally any new feature or bug fix should be accompanied by unit tests, and integration tests if applicable. -For an example of a unit test, check out the [autofill tests here](./packages/xrpl/test/client/autofill.ts). +For an example of a unit test, check out the [autofill tests here](./packages/xrpl/test/client/autofill.test.ts). If your code connects to the ledger (ex. Adding a new transaction type) it's handy to write integration tests to ensure that you can successfully interact with the ledger. Integration tests are generally run against a docker instance of rippled which contains the latest updates. Since standalone mode allows us to manually close ledgers, this allows us to run integration tests at a much faster rate than if we had to wait 4-5 seconds per transaction for the ledger to validate the transaction. [See above](#running-tests) for how to start up the docker container to run integration tests. All integration tests should be written in the `test/integration` folder, with new `Requests` and `Transactions` tests being in their respective folders. -For an example of how to write an integration test for `xrpl.js`, you can look at the [Payment integration test](./packages/xrpl/test/integration/transactions/payment.ts). +For an example of how to write an integration test for `xrpl.js`, you can look at the [Payment integration test](./packages/xrpl/test/integration/transactions/payment.test.ts). ## Generate reference docs @@ -148,9 +164,13 @@ npm run docgen This updates `docs/` at the top level, where GitHub Pages looks for the docs. -## Update `definitions.json` +## Updating `definitions.json` + +This should almost always be done using [this script](./packages/ripple-binary-codec/tools/generateDefinitions.js) - if the output needs manual intervention afterwards, consider updating the script instead. -Use [this repo](https://github.com/RichardAH/xrpl-codec-gen) to generate a new `definitions.json` file from the rippled source code. Instructions are available in that README. +1. Clone / pull the latest changes from [rippled](https://github.com/XRPLF/rippled) - Specifically the `develop` branch is usually the right one. +2. Run `node packages/ripple-binary-codec/tools/generateDefinitions.js path/to/rippled` (assuming you're calling this file from the root directory of xrpl.js). +3. Verify that the changes make sense by inspection before submitting, as there may be updates required for the tool depending on the latest amendments we're updating to match. ## Adding and removing packages @@ -199,16 +219,6 @@ In order to update the list, follow these steps from the top level of the librar Note: The same updated config can be used to update xrpl-py's CI as well. -## Updating `definitions.json` - -This should almost always be done using the [`xrpl-codec-gen`](https://github.com/RichardAH/xrpl-codec-gen) script - if the output needs manual intervention afterwards, consider updating the script instead. - -1. Clone / pull the latest changes from [rippled](https://github.com/XRPLF/rippled) - Specifically the `develop` branch is usually the right one. -2. Clone / pull the latest changes from [`xrpl-codec-gen`](https://github.com/RichardAH/xrpl-codec-gen) -3. From the `xrpl-codec-gen` tool, follow the steps in the `README.md` to generate a new `definitions.json` file. -4. Replace the `definitions.json` file in the `ripple-binary-codec` with the newly generated file. -5. Verify that the changes make sense by inspection before submitting, as there may be updates required for the `xrpl-codec-gen` tool depending on the latest amendments we're updating to match. - ## Release process + checklist @@ -226,47 +236,48 @@ This should almost always be done using the [`xrpl-codec-gen`](https://github.co ## Release 1. Checkout `main` (or your beta branch) and `git pull`. -1. Create a new branch (`git checkout -b `) to capture updates that take place during this process. -1. Update `HISTORY.md` to reflect release changes. +2. Create a new branch (`git checkout -b `) to capture updates that take place during this process. +3. Update `HISTORY.md` to reflect release changes. - [ ] Update the version number and release date, and ensure it lists the changes since the previous release. -1. Run `npm run docgen` if the docs were modified in this release to update them (skip this step for a beta). -1. Run `npm run build` to triple check the build still works -1. Run `npx lerna version --no-git-tag-version` - This bumps the package versions. +5. Run `npm run clean` to delete previously generated artifacts. +6. Run `npm run build` to triple check the build still works +7. Run `npx lerna version --no-git-tag-version` - This bumps the package versions. - For each changed package, pick what the new version should be. Lerna will bump the versions, commit version bumps to `main`, and create a new git tag for each published package. - If you do NOT want to update the package number, choose "Custom Version" and set the version to be the same as the existing version. Lerna will not publish any changes in this case. - If publishing a beta, make sure that the versions are all of the form `a.b.c-beta.d`, where `a`, `b`, and `c` are identical to the last normal release except for one, which has been incremented by 1. -1. Run `npm i` to update the package-lock with the updated versions. -1. Create a new PR from this branch into `main` and merge it (you can directly merge into the beta branch for a beta). -1. Checkout `main` and `git pull` (you can skip this step for a beta since you already have the latest version of the beta branch). -1. Actually publish the packages with one of the following: +8. Run `npm i` to update the package-lock with the updated versions. +9. Create a new PR from this branch into `main` and merge it (you can directly merge into the beta branch for a beta). +10. Checkout `main` and `git pull` (you can skip this step for a beta since you already have the latest version of the beta branch). +11. Actually publish the packages with one of the following: + + - Stable release: Run `npx lerna publish from-package --yes` + - Beta release: Run `npx lerna publish from-package --dist-tag beta --yes` + Notice this allows developers to install the package with `npm add xrpl@beta` - - Stable release: Run `npx lerna publish from-package --yes` - - Beta release: Run `npx lerna publish from-package --dist-tag beta --yes` - Notice this allows developers to install the package with `npm add xrpl@beta` +12. If requested, enter your [npmjs.com](https://npmjs.com) OTP (one-time password) to complete publication. -1. If requested, enter your [npmjs.com](https://npmjs.com) OTP (one-time password) to complete publication. + NOW YOU HAVE PUBLISHED! But you're not done; we have to notify people! - NOW YOU HAVE PUBLISHED! But you're not done; we have to notify people! +13. Run `git tag -m `, where `` is the new package and version (e.g. `xrpl@2.1.1`), for each version released. +14. Run `git push --follow-tags`, to push the tags to Github. -1. Run `git tag -m `, where `` is the new package and version (e.g. `xrpl@2.1.1`), for each version released. -1. Run `git push --follow-tags`, to push the tags to Github. -1. On GitHub, click the "Releases" link on the right-hand side of the page. +15. On GitHub, click the "Releases" link on the right-hand side of the page. -1. Repeat for each release: +16. Repeat for each release: - 1. Click "Draft a new release" - 1. Click "Choose a tag", and choose a tag that you just created. - 1. Edit the name of the release to match the tag (IE \@\) and edit the description as you see fit. + 1. Click "Draft a new release" + 2. Click "Choose a tag", and choose a tag that you just created. + 3. Edit the name of the release to match the tag (IE \@\) and edit the description as you see fit. -1. Send an email to [xrpl-announce](https://groups.google.com/g/xrpl-announce). -1. Lastly, send a similar message to the XRPL Discord in the [`javascript` channel](https://discord.com/channels/886050993802985492/886053111179915295). The message should include: - 1. The version changes for xrpl libraries - 1. A link to the more detailed changes - 1. Highlights of important changes +17. Send an email to [xrpl-announce](https://groups.google.com/g/xrpl-announce). +18. Lastly, send a similar message to the XRPL Discord in the [`javascript` channel](https://discord.com/channels/886050993802985492/886053111179915295). The message should include: + 1. The version changes for xrpl libraries + 2. A link to the more detailed changes + 3. Highlights of important changes ## Mailing Lists diff --git a/README.md b/README.md index b9c031482b..9148cab4fc 100644 --- a/README.md +++ b/README.md @@ -19,13 +19,13 @@ See the full reference documentation for all classes, methods, and utilities. 4. Subscribing to changes in the ledger ([Ex. ledger, transactions, & more...](https://xrpl.org/subscribe.html)) 5. Parsing ledger data into more convenient formats ([`xrpToDrops`](https://js.xrpl.org/functions/xrpToDrops.html) and [`rippleTimeToISOTime`](https://js.xrpl.org/functions/rippleTimeToISOTime.html)) -All of which works in Node.js (tested for v18+) & web browsers (tested for Chrome). +All of which works in Node.js (tested for v20+) & web browsers (tested for Chrome). # Quickstart ### Requirements -+ **[Node.js v18](https://nodejs.org/)** is recommended. We also support v20. Other versions may work but are not frequently tested. ++ **[Node.js v22](https://nodejs.org/)** is recommended. We also support v20. Other versions may work but are not frequently tested. ### Installing xrpl.js @@ -111,7 +111,7 @@ You are also welcome to create an [issue](https://github.com/XRPLF/xrpl.js/issue - [xrpl.js Reference Docs](https://js.xrpl.org/) - [xrpl.org (Detailed docs on how the XRPL works)](https://xrpl.org/references.html) -- [XRPL Code Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples) +- [XRPL Code Samples](https://github.com/XRPLF/xrpl-dev-portal/tree/master/_code-samples) - [#javascript in the XRPL Developer Discord for questions & support](https://xrpldevs.org) - [xrpl-announce (The mailing list for new xrpl.js versions)](https://groups.google.com/g/xrpl-announce) - [Applications that use xrpl.js](https://github.com/XRPLF/xrpl.js/blob/main/APPLICATIONS.md) (You can open a PR to add your project!) diff --git a/RELEASE.md b/RELEASE.md new file mode 100644 index 0000000000..7c1c09e878 --- /dev/null +++ b/RELEASE.md @@ -0,0 +1,128 @@ +# πŸš€ Release Pipeline Guide + +A GitHub Actions workflow has been set up to automate building, scanning, packaging, and releasing npm packages in the `packages/` directory. + +--- + +## πŸ”‘ **Usage** + +You can manually trigger the release workflow from the [GitHub Actions UI](https://github.com/xrplf/xrpl.js/actions/workflows/release.yml). + +### **Before triggering a release** + +**Stable release ** +1. Create a release branch. A qualified branch name should start with "release-" or "release/", **case-insensitive**. e.g: `release/xrpl@4.3.8`, `release-xrpl-4.3.8`, `Release/xrpl@4.3.8`. +2. Update the **`version`** field in `packages//package.json` to the intended release version. + ```json + { + "name": "", + "version": "x.y.z" + } + ``` +3. Run npm i to refresh package-lock.json and commit it. + +**Beta release ** +1. Create a release branch. There is no restriction for branch name. +2. Update the **`version`** field in `packages//package.json` to the intended beta release version. + ```json + { + "name": "", + "version": "x.y.z-.a" + } + ``` +3. Run `npm i` to refresh `package-lock.json` and commit it. + +### **Triggering a Release** + +1. Go to **GitHub β†’ Actions β†’ Release Pipeline β†’ Run workflow** (must be triggered from `main`). + +2. Triggering the workflow with following requied inputs: + + - **Stable release** + - `release_branch_name`: e.g., `release/xrpl@4.3.8` or `release-xrpl-4.3.8` (must start with `release-`/`release/`, **case-insensitive**). + - `package_name`: e.g., `xrpl`. + - `npmjs_dist_tag`: `latest`. + + Example: `release_branch_name=release/xrpl@4.3.8`, `package_name=xrpl`, `npmjs_dist_tag=latest`. + + - **Beta release** (publishes as `-experimental`) + - `release_branch_name`: e.g., `feature/xrpl-beta` (no naming restriction). + - `package_name`: e.g., `xrpl`. + - `npmjs_dist_tag`: a non-`latest` tag like `beta` or `rc` (must match `[a-z][a-z0-9._-]{0,127}` and not start with `v` + digit or a digit). + + Example: `release_branch_name=feature/xrpl-beta`, `package_name=xrpl`, `npmjs_dist_tag=feature-a` (will be published as `feature-a-experimental`, `-experimental` will be automatically appended by the workflow). + +3. For stable release, after `Pre Release Pipeline` has been executed, update the PR automatically created by the release pipeline (release branch β†’ main branch) from Draft to Ready for Review, and ensure all CI tests have passed. + +### **Reviewing the release details and scan result** + +The pipeline will pause at the "Print Test/Security scan result and invite Dev team to review" step and also before the final release step, relevant team should review the release details and scan result. Stable release will be reviewed by infosec team as Sec reviewer. Beta release will be reviewed by security champions from Dev team. + + +--- + +## πŸ”¨ **How the Pipeline Works** + +### 1. **Get Package Version** +- Extracts the version from `packages//package.json`. +- Validate inputs. + +--- + +### 2. **Run Tests** +- Triggers the `faucet_test.yml` and `nodejs.yml` workflows to run unit, integration, and faucet tests against the specified Git ref. Integration and taucet tests are skipped for beta release. +- Ensures the code at the given Git ref passes required tests. + +--- + +### 3. **Pre-Release Steps** +- Builds the npm package. +- Generates a CycloneDX SBOM (Software Bill of Materials). +- Runs a vulnerability scan with Trivy. +- Uploads the SBOM to OWASP Dependency-Track for tracking vulnerabilities. +- Packages the module with Lerna and uploads the tarball as an artifact. +- Posts failure notifications to Slack.. +- Create a Github issue for detected vulnerabilities. +- Automatically raise a PR from relase branch to main branch for stable release + +--- + +### 4. **Review Stage** +- Generate a summary of: + - Package name + - Version + - Vulnerability scan artifacts +- Requires the approvers to manually review security reports on the Actions page. + +--- + +### 5. **Release Stage** +- Requires manual approval (Set up through **GitHub Environment**). +- Creates a GitHub Release with a tag like `@`. +- Downloads the built package tarball. +- Publishes the package to the public npm registry. +- Posts success or failure notifications to Slack. + +--- + +## πŸ“ **Tag Format** + +The GitHub release and git tag are named like this: + +```text +@ +``` + +Example: +``` +xrpl@2.3.1 +``` + + +## ⚠️ **Important Notes** + +- The release workflow does not overwrite existing tags. If the same version tag already exists, the workflow will fail. + +- Vulnerability scanning does not block the release, but it is the approvers' responsibility to review the scan results in the Review stage. + +- For stable release, after `Pre Release Pipeline` has been executed, update the PR automatically created by the release pipeline (release branch β†’ main branch) from Draft to Ready for Review, and ensure all CI tests have passed. diff --git a/UNIQUE_SETUPS.md b/UNIQUE_SETUPS.md index c64ecd8250..5333e92386 100644 --- a/UNIQUE_SETUPS.md +++ b/UNIQUE_SETUPS.md @@ -56,26 +56,3 @@ import './polyfills' ### Using xrpl.js with Vite React Starting in 3.0 xrpl and all the packages in this repo no longer require custom configurations (ex. polyfills) to run. - -### Using xrpl.js with Deno - -Until official support for [Deno](https://deno.land) is added, you can use the following work-around to use `xrpl.js` with Deno: - -> [!NOTE] -> The following is currently broken due to https://github.com/denoland/deno/issues/20516. -> Once that is fixed there could be other issues as well. - -```javascript -import xrpl from 'https://dev.jspm.io/npm:xrpl'; - -(async () => { - const api = new (xrpl as any).Client('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)); - }); - }); -})(); -``` diff --git a/docs/assets/hierarchy.js b/docs/assets/hierarchy.js new file mode 100644 index 0000000000..026b9050ee --- /dev/null +++ b/docs/assets/hierarchy.js @@ -0,0 +1 @@ +window.hierarchyData = "eJydnFtz2zgShf+LnntmiTvgN1+i2dRGjit2slM1lQdagm1uJNJLUpt4pvLftyDJNiCS5uG8OI51Dr7uJggSIKi/ZnVVtc3s5A9jLBkriQutSWjHSGeWZMbVV5rV/m7tl21Rlc3s5K+Zzmz4p8w3fnYy+3h35+sZzb4V5Wp2wpWm2bZez05mRdn6+i5f+uYfH/zq3tfvyrZ++nWn//Wh3axnNFuu86aZnczaZvVLaOCXF1P48KFYr2pfzk7+YMq5rz9pZkyMPssb/8n/d+ubdiSASDkVbZkmKxVZq8hJS84ZYhnXxDItiWWOE2OcEWPKEmNOE+Phv9xaYiLTxAQXxET4VGpBTIYGFHfElOLElDXEtFDEDNPEjGLEjOHErHHEXMaJufCp0xkx5zTxzDDiTIUf2hFnThHnTBPnwhDnKvzXCeKCZ7uaWdmpWfNYlY2HiraXTq4at2SVol3UWWaJZcIRy4wmxkQoWUiRhw9C1IzLUDcniQnGiQmZEZMhbWkYMZUpYiqURwlLTIUyqtCU5hkxHbzahQqGqhodKmgVMWt3FbTEnAxl1IZ4lvFQQRMqGH6YUK1MEuc8/CZDGU1GXGQqVHDX6yzTUQVPl8tqW7bnD3lZ+nWDdcB+E1DVgOf2LTx0LAdcYABS9QSwrWtfLgs/sQLHNjAENRLCpCp0fGAQtieI9+VdNakCkQHDOtlz/D8U5cTKxw4QrLNB8JR6JxYQ7UwXfTm/mZZyZMCwYaga4k7JOHagZN4zyHy8/Y9fttOSTj0oXbg36FNSPzKhfC17+OFWYWLysQVlm77KHxqalHriQemOd+k3PyZl/SIHmYyziPlb3vrv+dNZvs7LJTqo9JtQvuBv8aGaD7jQCFR8nv/m29P7+9rf562/qosleFc5ZENjMPztGLA6DPnQKFzc+y+rT8Xj49qfP/jlN6wKfRaQzZPR9qghKPteD0pPzoL9HAVLOdGiNGF6aFCSqRjlSd3hfWGTiK9ylGlth3m+rhq/mlLXxIGSnRwkT8g4tYBskXUrvb/FbCelnVhQNuPD7CmJpx6UzkWHfpG3+ZS0Iz1KldkAdULCsQHlqm7v3q1pTEk3NoBcKdQQd0LCiQMl6/j4Xm9vNwXYpRMtSjOshwalmIpRXjLH2Dex2K7boinuS3TIGrKBMahMvR3DhPR7fGgUyQJHpzX4svGGE42Ex/OQmzovm3y38jjhRBtwoREI+2YEUCGGbGgMKh7V0cnA1FmASs7u4MZy+zE1m2R+dfMD7k6xFGXZ+Jw+q6pvUyaRHT1Kda6PitJAiubZQG7Ycm7HgHKT68+Ff6yaoj3dtg9VXfyJjpNDNjSG5G62pzGoBIM+NAoXV+Iqbx/mRYnCj+Ug0yRj836289oUUvpeD0pPxuPjlqC8+00oX8X3BIfl6y++Lu7Ai0GfBWXrN9hQ6r0elJ6sDlxvb5tlXdyCKxPHcpRpVT8TvfqnepBqTdzHPpfNtFy7BpRrB7lQvj0OkOyy+NjOPZjpqxDm2GMOlFmkREnJNWKRl8Wdb8C5wpEaJUreS4QSPJajzOSByLWv/+frC39XlMXu4Th4bg7Y4BjM2zFg5+qQD40iWTXct4Y/CevoMWp4eDtAnZB0bEC56cx018x1m7foaNwxwNzusT40MyHhxAGSWXLdvSrKeyzVSAmTTIeE3U9FUpSlk7uZvFxVG/AeKtaiNKN6aNg9UyJGecnd6eX85mz7NGX20+MAyTyTg2RsGb/HgrKT++PL+c21X68npt2xoGyuhtlo4l0PSk+eKFzOb/ABOBWjPKn7eGief2Pc5eqovv8smrZC14E6epRqsgEqmuqRAeU6kXKbs6f3TbNFn0r1OECyyNQgGc25Y0HZyarG6WIxYUNNIoZ5ro+HPedP1ShRx+dN2FUXLQ8Ce/Ai9dRteFxySVxKQ1xqRVxaR1xllrjimrgKW+CUscQ148S1EMS1dMR12CqnrSFuwt44wxlxIzPiRlnixgjixjHilmXELTfErbTErQ4/rCXuMkc87LrjLjicZcSdcyQypklkgpPIVPjNGhIssySYkCSYEiTCrkbBnCXBuSHBZfgt/I27jITIHAkRPhBSkBA6/M1xEpJlJCS3JKSSJKRxJGRAKmZJKKFJqPCBMoKEcoqEZjxs7wtF6m7BuPbg5otrj3Y9KXs2NV34tW/BDSZ7LUrTKu3oZ8VqvH+fFSu0fXt0Ip2v8++3+fLbOORZCZJUuilrsTivfT5es2cdSkk3YC0W2JF51qGU5HZ3596tSSKYnRDlmKOafamQXIIKJOjk0fPpYvHvon1Y1fn3ccqzEiWJ+MK42+pxHjb9rEeX316UKEm6Lql5wDjNA0pJpvB7N9KjIyVKSh6HgCfoxLPTJDf/57Vf+bIt8vXpcukfR5dnj+QoM9m689oIVsYjOcpMth28NgINE8dylJlsObh4fwHBXnQoxYiUMn7t24vQ9l18tA7j2FXt8207dmqlYpBnWXyk3jXLuvoODRixFGVx02UhvTCWoqxkI/i+gXlRFqMDVCxFWTphlfnt2p9ufLna+HKscxypUWKyeWxxdVN98+XLo7qxBd0jOch0mesywzQmdAHoMPZ6UHq6hJ22dOGbtq6epuEPJpSveir+3NT4GNA1oFzL0unm7tDtxn/kuXnXgHKTx/SHZs629dgkLFJipDDL6ZL248qEDCMDyk02Vj83s+uTU7ivBpSrevJdFKMjRaRESdb0kKpVcTd2qiRakMa6rzpCF5JIiZKE7JCQ8SdSoiQVX+0/1vly7aHbiliKspIF930D4wPLiw6luPgoXeVPwDXqoAIJPLnKH7yHp/vn67zYYLTYgZJlT27P7SAdpM+CspOjlzY035ZjqwldA8p16WPWdu79VQ3ffnQNIFckdwOHZqqmnQiOHSiZpw/62k/+frvO63/5sVEt0aI0mWzrDTs16w9FAyx5JVqUljw0vymW33wL9dxYirKSl6lu6i2S1LMMZMhkdvH58gN09XnRoZTkpd/fzx/yojxdrZ7fYN0V5bRtfdPmwDLyqB+NSsm+qHYD2t+I5tiHRpFsGNq3hozCkRIluR5StdmMrtfFUpClWPeI74/TWV2s7sfOlq4B5Qo9wN1V6v3FBPDBgZL7elPcQSeUuseHRpGsfuxb25+qE+oeG1BuupnU15uiaYqq9KuLapMX5fjA1esB6enqbbcl6I5wyIbGkKwL7Z4erg7v5o8Np6l46mMxoZ36uo9ADUZwugkdalIcewuWffhulbjf1Y/rd3VdvU7RGLfPwF1Loa89iwYR+z8kycpMhm9yMYxk5iRJLjjJ8C0hkhvzdRdJco/5ufQ/Hv2y9avReI6kI1HtUMlOqvOqLPdfLDOKOpJOKgBjhiSTGUmmBUlmNUmeuX3uyYuD+73K44nHOiBrxpJJa9UesgFIHTGCS1aqL4pmCeM6YgSXvEdyKM1l1b4PWwvzddhnjxa0x4UEYJMXTIqNr7btKDLWARCeTA6etwDMq3qTj7N65AgyWc35kq+LVQ6dLEdSBJXutKnaebUtod75KkQwyYbG3z9dfZjn26UfL+CRdAz18+f/Af1tvbk=" \ No newline at end of file diff --git a/docs/assets/highlight.css b/docs/assets/highlight.css index 7a0264a1cf..089bdcefa2 100644 --- a/docs/assets/highlight.css +++ b/docs/assets/highlight.css @@ -21,8 +21,10 @@ --dark-hl-9: #6A9955; --light-hl-10: #267F99; --dark-hl-10: #4EC9B0; - --light-hl-11: #CD3131; - --dark-hl-11: #F44747; + --light-hl-11: #000000; + --dark-hl-11: #C8C8C8; + --light-hl-12: #CD3131; + --dark-hl-12: #F44747; --light-code-background: #FFFFFF; --dark-code-background: #1E1E1E; } @@ -40,6 +42,7 @@ --hl-9: var(--light-hl-9); --hl-10: var(--light-hl-10); --hl-11: var(--light-hl-11); + --hl-12: var(--light-hl-12); --code-background: var(--light-code-background); } } @@ -56,6 +59,7 @@ --hl-9: var(--dark-hl-9); --hl-10: var(--dark-hl-10); --hl-11: var(--dark-hl-11); + --hl-12: var(--dark-hl-12); --code-background: var(--dark-code-background); } } @@ -72,6 +76,7 @@ --hl-9: var(--light-hl-9); --hl-10: var(--light-hl-10); --hl-11: var(--light-hl-11); + --hl-12: var(--light-hl-12); --code-background: var(--light-code-background); } @@ -88,6 +93,7 @@ --hl-9: var(--dark-hl-9); --hl-10: var(--dark-hl-10); --hl-11: var(--dark-hl-11); + --hl-12: var(--dark-hl-12); --code-background: var(--dark-code-background); } @@ -103,4 +109,5 @@ .hl-9 { color: var(--hl-9); } .hl-10 { color: var(--hl-10); } .hl-11 { color: var(--hl-11); } +.hl-12 { color: var(--hl-12); } pre, code { background: var(--code-background); } diff --git a/docs/assets/icons.js b/docs/assets/icons.js new file mode 100644 index 0000000000..58882d76dd --- /dev/null +++ b/docs/assets/icons.js @@ -0,0 +1,18 @@ +(function() { + addIcons(); + function addIcons() { + if (document.readyState === "loading") return document.addEventListener("DOMContentLoaded", addIcons); + const svg = document.body.appendChild(document.createElementNS("http://www.w3.org/2000/svg", "svg")); + svg.innerHTML = `MMNEPVFCICPMFPCPTTAAATR`; + svg.style.display = "none"; + if (location.protocol === "file:") updateUseElements(); + } + + function updateUseElements() { + document.querySelectorAll("use").forEach(el => { + if (el.getAttribute("href").includes("#icon-")) { + el.setAttribute("href", el.getAttribute("href").replace(/.*#/, "#")); + } + }); + } +})() \ No newline at end of file diff --git a/docs/assets/icons.svg b/docs/assets/icons.svg new file mode 100644 index 0000000000..50ad5799da --- /dev/null +++ b/docs/assets/icons.svg @@ -0,0 +1 @@ +MMNEPVFCICPMFPCPTTAAATR \ No newline at end of file diff --git a/docs/assets/main.js b/docs/assets/main.js index 3cee05e61b..2363f64c27 100644 --- a/docs/assets/main.js +++ b/docs/assets/main.js @@ -1,7 +1,9 @@ "use strict"; -"use strict";(()=>{var Se=Object.create;var re=Object.defineProperty;var we=Object.getOwnPropertyDescriptor;var Te=Object.getOwnPropertyNames;var ke=Object.getPrototypeOf,Qe=Object.prototype.hasOwnProperty;var Pe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var Ie=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Te(e))!Qe.call(t,i)&&i!==r&&re(t,i,{get:()=>e[i],enumerable:!(n=we(e,i))||n.enumerable});return t};var Ce=(t,e,r)=>(r=t!=null?Se(ke(t)):{},Ie(e||!t||!t.__esModule?re(r,"default",{value:t,enumerable:!0}):r,t));var ae=Pe((se,oe)=>{(function(){var t=function(e){var r=new t.Builder;return r.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),r.searchPipeline.add(t.stemmer),e.call(r,r),r.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(r){e.console&&console.warn&&console.warn(r)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var r=Object.create(null),n=Object.keys(e),i=0;i0){var d=t.utils.clone(r)||{};d.position=[a,u],d.index=s.length,s.push(new t.Token(n.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,r){r in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+r),e.label=r,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var r=e.label&&e.label in this.registeredFunctions;r||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. -`,e)},t.Pipeline.load=function(e){var r=new t.Pipeline;return e.forEach(function(n){var i=t.Pipeline.registeredFunctions[n];if(i)r.add(i);else throw new Error("Cannot load unregistered function: "+n)}),r},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(r){t.Pipeline.warnIfFunctionNotRegistered(r),this._stack.push(r)},this)},t.Pipeline.prototype.after=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");n=n+1,this._stack.splice(n,0,r)},t.Pipeline.prototype.before=function(e,r){t.Pipeline.warnIfFunctionNotRegistered(r);var n=this._stack.indexOf(e);if(n==-1)throw new Error("Cannot find existingFn");this._stack.splice(n,0,r)},t.Pipeline.prototype.remove=function(e){var r=this._stack.indexOf(e);r!=-1&&this._stack.splice(r,1)},t.Pipeline.prototype.run=function(e){for(var r=this._stack.length,n=0;n1&&(oe&&(n=s),o!=e);)i=n-r,s=r+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(r+=n[u+1]*i[d+1],u+=2,d+=2);return r},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),r=1,n=0;r0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var u=s.node.edges["*"];else{var u=new t.TokenSet;s.node.edges["*"]=u}s.str.length==1&&(u.final=!0),i.push({node:u,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),y;m in s.node.edges?y=s.node.edges[m]:(y=new t.TokenSet,s.node.edges[m]=y),s.str.length==1&&(y.final=!0),i.push({node:y,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return n},t.TokenSet.fromString=function(e){for(var r=new t.TokenSet,n=r,i=0,s=e.length;i=e;r--){var n=this.uncheckedNodes[r],i=n.child.toString();i in this.minimizedNodes?n.parent.edges[n.char]=this.minimizedNodes[i]:(n.child._str=i,this.minimizedNodes[i]=n.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(r){var n=new t.QueryParser(e,r);n.parse()})},t.Index.prototype.query=function(e){for(var r=new t.Query(this.fields),n=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,r){var n=e[this._ref],i=Object.keys(this._fields);this._documents[n]=r||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,r;do e=this.next(),r=e.charCodeAt(0);while(r>47&&r<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var r=e.next();if(r==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(r.charCodeAt(0)==92){e.escapeCharacter();continue}if(r==":")return t.QueryLexer.lexField;if(r=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(r=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(r=="+"&&e.width()===1||r=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(r.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,r){this.lexer=new t.QueryLexer(e),this.query=r,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var r=e.peekLexeme();if(r!=null)switch(r.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expected either a field or a term, found "+r.type;throw r.str.length>=1&&(n+=" with value '"+r.str+"'"),new t.QueryParseError(n,r.start,r.end)}},t.QueryParser.parsePresence=function(e){var r=e.consumeLexeme();if(r!=null){switch(r.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var n="unrecognised presence operator'"+r.str+"'";throw new t.QueryParseError(n,r.start,r.end)}var i=e.peekLexeme();if(i==null){var n="expecting term or field, found nothing";throw new t.QueryParseError(n,r.start,r.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var n="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(n,i.start,i.end)}}},t.QueryParser.parseField=function(e){var r=e.consumeLexeme();if(r!=null){if(e.query.allFields.indexOf(r.str)==-1){var n=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+r.str+"', possible fields: "+n;throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.fields=[r.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,r.start,r.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var r=e.consumeLexeme();if(r!=null){e.currentClause.term=r.str.toLowerCase(),r.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var n=e.peekLexeme();if(n==null){e.nextClause();return}switch(n.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+n.type+"'";throw new t.QueryParseError(i,n.start,n.end)}}},t.QueryParser.parseEditDistance=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="edit distance must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.editDistance=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var r=e.consumeLexeme();if(r!=null){var n=parseInt(r.str,10);if(isNaN(n)){var i="boost must be numeric";throw new t.QueryParseError(i,r.start,r.end)}e.currentClause.boost=n;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,r){typeof define=="function"&&define.amd?define(r):typeof se=="object"?oe.exports=r():e.lunr=r()}(this,function(){return t})})()});var ne=[];function G(t,e){ne.push({selector:e,constructor:t})}var U=class{constructor(){this.alwaysVisibleMember=null;this.createComponents(document.body),this.ensureActivePageVisible(),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible())}createComponents(e){ne.forEach(r=>{e.querySelectorAll(r.selector).forEach(n=>{n.dataset.hasInstance||(new r.constructor({el:n,app:this}),n.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),r=e?.parentElement;for(;r&&!r.classList.contains(".tsd-navigation");)r instanceof HTMLDetailsElement&&(r.open=!0),r=r.parentElement;if(e){let n=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=n}}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let r=e.parentElement;for(;r&&r.tagName!=="SECTION";)r=r.parentElement;if(r&&r.offsetParent==null){this.alwaysVisibleMember=r,r.classList.add("always-visible");let n=document.createElement("p");n.classList.add("warning"),n.textContent="This member is normally hidden due to your filter settings.",r.prepend(n)}}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let r;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent="Copied!",e.classList.add("visible"),clearTimeout(r),r=setTimeout(()=>{e.classList.remove("visible"),r=setTimeout(()=>{e.textContent="Copy"},100)},1e3)})})}};var ie=(t,e=100)=>{let r;return()=>{clearTimeout(r),r=setTimeout(()=>t(),e)}};var ce=Ce(ae());function de(){let t=document.getElementById("tsd-search");if(!t)return;let e=document.getElementById("tsd-search-script");t.classList.add("loading"),e&&(e.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),e.addEventListener("load",()=>{t.classList.remove("loading"),t.classList.add("ready")}),window.searchData&&t.classList.remove("loading"));let r=document.querySelector("#tsd-search input"),n=document.querySelector("#tsd-search .results");if(!r||!n)throw new Error("The input field or the result list wrapper was not found");let i=!1;n.addEventListener("mousedown",()=>i=!0),n.addEventListener("mouseup",()=>{i=!1,t.classList.remove("has-focus")}),r.addEventListener("focus",()=>t.classList.add("has-focus")),r.addEventListener("blur",()=>{i||(i=!1,t.classList.remove("has-focus"))});let s={base:t.dataset.base+"/"};Oe(t,n,r,s)}function Oe(t,e,r,n){r.addEventListener("input",ie(()=>{Re(t,e,r,n)},200));let i=!1;r.addEventListener("keydown",s=>{i=!0,s.key=="Enter"?Fe(e,r):s.key=="Escape"?r.blur():s.key=="ArrowUp"?ue(e,-1):s.key==="ArrowDown"?ue(e,1):i=!1}),r.addEventListener("keypress",s=>{i&&s.preventDefault()}),document.body.addEventListener("keydown",s=>{s.altKey||s.ctrlKey||s.metaKey||!r.matches(":focus")&&s.key==="/"&&(r.focus(),s.preventDefault())})}function _e(t,e){t.index||window.searchData&&(e.classList.remove("loading"),e.classList.add("ready"),t.data=window.searchData,t.index=ce.Index.load(window.searchData.index))}function Re(t,e,r,n){if(_e(n,t),!n.index||!n.data)return;e.textContent="";let i=r.value.trim(),s=i?n.index.search(`*${i}*`):[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o${le(l.parent,i)}.${u}`);let d=document.createElement("li");d.classList.value=l.classes??"";let m=document.createElement("a");m.href=n.base+l.url,m.innerHTML=u,d.append(m),e.appendChild(d)}}function ue(t,e){let r=t.querySelector(".current");if(!r)r=t.querySelector(e==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let n=r;if(e===1)do n=n.nextElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);else do n=n.previousElementSibling??void 0;while(n instanceof HTMLElement&&n.offsetParent==null);n&&(r.classList.remove("current"),n.classList.add("current"))}}function Fe(t,e){let r=t.querySelector(".current");if(r||(r=t.querySelector("li:first-child")),r){let n=r.querySelector("a");n&&(window.location.href=n.href),e.blur()}}function le(t,e){if(e==="")return t;let r=t.toLocaleLowerCase(),n=e.toLocaleLowerCase(),i=[],s=0,o=r.indexOf(n);for(;o!=-1;)i.push(K(t.substring(s,o)),`${K(t.substring(o,o+n.length))}`),s=o+n.length,o=r.indexOf(n,s);return i.push(K(t.substring(s))),i.join("")}var Me={"&":"&","<":"<",">":">","'":"'",'"':"""};function K(t){return t.replace(/[&<>"'"]/g,e=>Me[e])}var P=class{constructor(e){this.el=e.el,this.app=e.app}};var M="mousedown",fe="mousemove",N="mouseup",J={x:0,y:0},he=!1,ee=!1,De=!1,D=!1,pe=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(pe?"is-mobile":"not-mobile");pe&&"ontouchstart"in document.documentElement&&(De=!0,M="touchstart",fe="touchmove",N="touchend");document.addEventListener(M,t=>{ee=!0,D=!1;let e=M=="touchstart"?t.targetTouches[0]:t;J.y=e.pageY||0,J.x=e.pageX||0});document.addEventListener(fe,t=>{if(ee&&!D){let e=M=="touchstart"?t.targetTouches[0]:t,r=J.x-(e.pageX||0),n=J.y-(e.pageY||0);D=Math.sqrt(r*r+n*n)>10}});document.addEventListener(N,()=>{ee=!1});document.addEventListener("click",t=>{he&&(t.preventDefault(),t.stopImmediatePropagation(),he=!1)});var X=class extends P{constructor(r){super(r);this.className=this.el.dataset.toggle||"",this.el.addEventListener(N,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(M,n=>this.onDocumentPointerDown(n)),document.addEventListener(N,n=>this.onDocumentPointerUp(n))}setActive(r){if(this.active==r)return;this.active=r,document.documentElement.classList.toggle("has-"+this.className,r),this.el.classList.toggle("active",r);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(r){D||(this.setActive(!0),r.preventDefault())}onDocumentPointerDown(r){if(this.active){if(r.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(r){if(!D&&this.active&&r.target.closest(".col-sidebar")){let n=r.target.closest("a");if(n){let i=window.location.href;i.indexOf("#")!=-1&&(i=i.substring(0,i.indexOf("#"))),n.href.substring(0,i.length)==i&&setTimeout(()=>this.setActive(!1),250)}}}};var te;try{te=localStorage}catch{te={getItem(){return null},setItem(){}}}var Q=te;var me=document.head.appendChild(document.createElement("style"));me.dataset.for="filters";var Y=class extends P{constructor(r){super(r);this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),me.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } -`}fromLocalStorage(){let r=Q.getItem(this.key);return r?r==="true":this.el.checked}setLocalStorage(r){Q.setItem(this.key,r.toString()),this.value=r,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let n=Array.from(r.querySelectorAll(".tsd-index-link")).every(i=>i.offsetParent==null);r.style.display=n?"none":"block"})}};var Z=class extends P{constructor(r){super(r);this.summary=this.el.querySelector(".tsd-accordion-summary"),this.icon=this.summary.querySelector("svg"),this.key=`tsd-accordion-${this.summary.dataset.key??this.summary.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`;let n=Q.getItem(this.key);this.el.open=n?n==="true":this.el.open,this.el.addEventListener("toggle",()=>this.update()),this.update()}update(){this.icon.style.transform=`rotate(${this.el.open?0:-90}deg)`,Q.setItem(this.key,this.el.open.toString())}};function ve(t){let e=Q.getItem("tsd-theme")||"os";t.value=e,ye(e),t.addEventListener("change",()=>{Q.setItem("tsd-theme",t.value),ye(t.value)})}function ye(t){document.documentElement.dataset.theme=t}de();G(X,"a[data-toggle]");G(Z,".tsd-index-accordion");G(Y,".tsd-filter-item input[type=checkbox]");var ge=document.getElementById("tsd-theme");ge&&ve(ge);var Ae=new U;Object.defineProperty(window,"app",{value:Ae});document.querySelectorAll("summary a").forEach(t=>{t.addEventListener("click",()=>{location.assign(t.href)})});})(); +window.translations={"copy":"Copy","copied":"Copied!","normally_hidden":"This member is normally hidden due to your filter settings.","hierarchy_expand":"Expand","hierarchy_collapse":"Collapse","folder":"Folder","kind_1":"Project","kind_2":"Module","kind_4":"Namespace","kind_8":"Enumeration","kind_16":"Enumeration Member","kind_32":"Variable","kind_64":"Function","kind_128":"Class","kind_256":"Interface","kind_512":"Constructor","kind_1024":"Property","kind_2048":"Method","kind_4096":"Call Signature","kind_8192":"Index Signature","kind_16384":"Constructor Signature","kind_32768":"Parameter","kind_65536":"Type Literal","kind_131072":"Type Parameter","kind_262144":"Accessor","kind_524288":"Get Signature","kind_1048576":"Set Signature","kind_2097152":"Type Alias","kind_4194304":"Reference","kind_8388608":"Document"}; +"use strict";(()=>{var De=Object.create;var le=Object.defineProperty;var Fe=Object.getOwnPropertyDescriptor;var Ne=Object.getOwnPropertyNames;var Ve=Object.getPrototypeOf,Be=Object.prototype.hasOwnProperty;var qe=(t,e)=>()=>(e||t((e={exports:{}}).exports,e),e.exports);var je=(t,e,n,r)=>{if(e&&typeof e=="object"||typeof e=="function")for(let i of Ne(e))!Be.call(t,i)&&i!==n&&le(t,i,{get:()=>e[i],enumerable:!(r=Fe(e,i))||r.enumerable});return t};var $e=(t,e,n)=>(n=t!=null?De(Ve(t)):{},je(e||!t||!t.__esModule?le(n,"default",{value:t,enumerable:!0}):n,t));var pe=qe((de,he)=>{(function(){var t=function(e){var n=new t.Builder;return n.pipeline.add(t.trimmer,t.stopWordFilter,t.stemmer),n.searchPipeline.add(t.stemmer),e.call(n,n),n.build()};t.version="2.3.9";t.utils={},t.utils.warn=function(e){return function(n){e.console&&console.warn&&console.warn(n)}}(this),t.utils.asString=function(e){return e==null?"":e.toString()},t.utils.clone=function(e){if(e==null)return e;for(var n=Object.create(null),r=Object.keys(e),i=0;i0){var d=t.utils.clone(n)||{};d.position=[a,c],d.index=s.length,s.push(new t.Token(r.slice(a,o),d))}a=o+1}}return s},t.tokenizer.separator=/[\s\-]+/;t.Pipeline=function(){this._stack=[]},t.Pipeline.registeredFunctions=Object.create(null),t.Pipeline.registerFunction=function(e,n){n in this.registeredFunctions&&t.utils.warn("Overwriting existing registered function: "+n),e.label=n,t.Pipeline.registeredFunctions[e.label]=e},t.Pipeline.warnIfFunctionNotRegistered=function(e){var n=e.label&&e.label in this.registeredFunctions;n||t.utils.warn(`Function is not registered with pipeline. This may cause problems when serialising the index. +`,e)},t.Pipeline.load=function(e){var n=new t.Pipeline;return e.forEach(function(r){var i=t.Pipeline.registeredFunctions[r];if(i)n.add(i);else throw new Error("Cannot load unregistered function: "+r)}),n},t.Pipeline.prototype.add=function(){var e=Array.prototype.slice.call(arguments);e.forEach(function(n){t.Pipeline.warnIfFunctionNotRegistered(n),this._stack.push(n)},this)},t.Pipeline.prototype.after=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");r=r+1,this._stack.splice(r,0,n)},t.Pipeline.prototype.before=function(e,n){t.Pipeline.warnIfFunctionNotRegistered(n);var r=this._stack.indexOf(e);if(r==-1)throw new Error("Cannot find existingFn");this._stack.splice(r,0,n)},t.Pipeline.prototype.remove=function(e){var n=this._stack.indexOf(e);n!=-1&&this._stack.splice(n,1)},t.Pipeline.prototype.run=function(e){for(var n=this._stack.length,r=0;r1&&(oe&&(r=s),o!=e);)i=r-n,s=n+Math.floor(i/2),o=this.elements[s*2];if(o==e||o>e)return s*2;if(ol?d+=2:a==l&&(n+=r[c+1]*i[d+1],c+=2,d+=2);return n},t.Vector.prototype.similarity=function(e){return this.dot(e)/this.magnitude()||0},t.Vector.prototype.toArray=function(){for(var e=new Array(this.elements.length/2),n=1,r=0;n0){var o=s.str.charAt(0),a;o in s.node.edges?a=s.node.edges[o]:(a=new t.TokenSet,s.node.edges[o]=a),s.str.length==1&&(a.final=!0),i.push({node:a,editsRemaining:s.editsRemaining,str:s.str.slice(1)})}if(s.editsRemaining!=0){if("*"in s.node.edges)var l=s.node.edges["*"];else{var l=new t.TokenSet;s.node.edges["*"]=l}if(s.str.length==0&&(l.final=!0),i.push({node:l,editsRemaining:s.editsRemaining-1,str:s.str}),s.str.length>1&&i.push({node:s.node,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)}),s.str.length==1&&(s.node.final=!0),s.str.length>=1){if("*"in s.node.edges)var c=s.node.edges["*"];else{var c=new t.TokenSet;s.node.edges["*"]=c}s.str.length==1&&(c.final=!0),i.push({node:c,editsRemaining:s.editsRemaining-1,str:s.str.slice(1)})}if(s.str.length>1){var d=s.str.charAt(0),m=s.str.charAt(1),p;m in s.node.edges?p=s.node.edges[m]:(p=new t.TokenSet,s.node.edges[m]=p),s.str.length==1&&(p.final=!0),i.push({node:p,editsRemaining:s.editsRemaining-1,str:d+s.str.slice(2)})}}}return r},t.TokenSet.fromString=function(e){for(var n=new t.TokenSet,r=n,i=0,s=e.length;i=e;n--){var r=this.uncheckedNodes[n],i=r.child.toString();i in this.minimizedNodes?r.parent.edges[r.char]=this.minimizedNodes[i]:(r.child._str=i,this.minimizedNodes[i]=r.child),this.uncheckedNodes.pop()}};t.Index=function(e){this.invertedIndex=e.invertedIndex,this.fieldVectors=e.fieldVectors,this.tokenSet=e.tokenSet,this.fields=e.fields,this.pipeline=e.pipeline},t.Index.prototype.search=function(e){return this.query(function(n){var r=new t.QueryParser(e,n);r.parse()})},t.Index.prototype.query=function(e){for(var n=new t.Query(this.fields),r=Object.create(null),i=Object.create(null),s=Object.create(null),o=Object.create(null),a=Object.create(null),l=0;l1?this._b=1:this._b=e},t.Builder.prototype.k1=function(e){this._k1=e},t.Builder.prototype.add=function(e,n){var r=e[this._ref],i=Object.keys(this._fields);this._documents[r]=n||{},this.documentCount+=1;for(var s=0;s=this.length)return t.QueryLexer.EOS;var e=this.str.charAt(this.pos);return this.pos+=1,e},t.QueryLexer.prototype.width=function(){return this.pos-this.start},t.QueryLexer.prototype.ignore=function(){this.start==this.pos&&(this.pos+=1),this.start=this.pos},t.QueryLexer.prototype.backup=function(){this.pos-=1},t.QueryLexer.prototype.acceptDigitRun=function(){var e,n;do e=this.next(),n=e.charCodeAt(0);while(n>47&&n<58);e!=t.QueryLexer.EOS&&this.backup()},t.QueryLexer.prototype.more=function(){return this.pos1&&(e.backup(),e.emit(t.QueryLexer.TERM)),e.ignore(),e.more())return t.QueryLexer.lexText},t.QueryLexer.lexEditDistance=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.EDIT_DISTANCE),t.QueryLexer.lexText},t.QueryLexer.lexBoost=function(e){return e.ignore(),e.acceptDigitRun(),e.emit(t.QueryLexer.BOOST),t.QueryLexer.lexText},t.QueryLexer.lexEOS=function(e){e.width()>0&&e.emit(t.QueryLexer.TERM)},t.QueryLexer.termSeparator=t.tokenizer.separator,t.QueryLexer.lexText=function(e){for(;;){var n=e.next();if(n==t.QueryLexer.EOS)return t.QueryLexer.lexEOS;if(n.charCodeAt(0)==92){e.escapeCharacter();continue}if(n==":")return t.QueryLexer.lexField;if(n=="~")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexEditDistance;if(n=="^")return e.backup(),e.width()>0&&e.emit(t.QueryLexer.TERM),t.QueryLexer.lexBoost;if(n=="+"&&e.width()===1||n=="-"&&e.width()===1)return e.emit(t.QueryLexer.PRESENCE),t.QueryLexer.lexText;if(n.match(t.QueryLexer.termSeparator))return t.QueryLexer.lexTerm}},t.QueryParser=function(e,n){this.lexer=new t.QueryLexer(e),this.query=n,this.currentClause={},this.lexemeIdx=0},t.QueryParser.prototype.parse=function(){this.lexer.run(),this.lexemes=this.lexer.lexemes;for(var e=t.QueryParser.parseClause;e;)e=e(this);return this.query},t.QueryParser.prototype.peekLexeme=function(){return this.lexemes[this.lexemeIdx]},t.QueryParser.prototype.consumeLexeme=function(){var e=this.peekLexeme();return this.lexemeIdx+=1,e},t.QueryParser.prototype.nextClause=function(){var e=this.currentClause;this.query.clause(e),this.currentClause={}},t.QueryParser.parseClause=function(e){var n=e.peekLexeme();if(n!=null)switch(n.type){case t.QueryLexer.PRESENCE:return t.QueryParser.parsePresence;case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expected either a field or a term, found "+n.type;throw n.str.length>=1&&(r+=" with value '"+n.str+"'"),new t.QueryParseError(r,n.start,n.end)}},t.QueryParser.parsePresence=function(e){var n=e.consumeLexeme();if(n!=null){switch(n.str){case"-":e.currentClause.presence=t.Query.presence.PROHIBITED;break;case"+":e.currentClause.presence=t.Query.presence.REQUIRED;break;default:var r="unrecognised presence operator'"+n.str+"'";throw new t.QueryParseError(r,n.start,n.end)}var i=e.peekLexeme();if(i==null){var r="expecting term or field, found nothing";throw new t.QueryParseError(r,n.start,n.end)}switch(i.type){case t.QueryLexer.FIELD:return t.QueryParser.parseField;case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var r="expecting term or field, found '"+i.type+"'";throw new t.QueryParseError(r,i.start,i.end)}}},t.QueryParser.parseField=function(e){var n=e.consumeLexeme();if(n!=null){if(e.query.allFields.indexOf(n.str)==-1){var r=e.query.allFields.map(function(o){return"'"+o+"'"}).join(", "),i="unrecognised field '"+n.str+"', possible fields: "+r;throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.fields=[n.str];var s=e.peekLexeme();if(s==null){var i="expecting term, found nothing";throw new t.QueryParseError(i,n.start,n.end)}switch(s.type){case t.QueryLexer.TERM:return t.QueryParser.parseTerm;default:var i="expecting term, found '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseTerm=function(e){var n=e.consumeLexeme();if(n!=null){e.currentClause.term=n.str.toLowerCase(),n.str.indexOf("*")!=-1&&(e.currentClause.usePipeline=!1);var r=e.peekLexeme();if(r==null){e.nextClause();return}switch(r.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+r.type+"'";throw new t.QueryParseError(i,r.start,r.end)}}},t.QueryParser.parseEditDistance=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="edit distance must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.editDistance=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},t.QueryParser.parseBoost=function(e){var n=e.consumeLexeme();if(n!=null){var r=parseInt(n.str,10);if(isNaN(r)){var i="boost must be numeric";throw new t.QueryParseError(i,n.start,n.end)}e.currentClause.boost=r;var s=e.peekLexeme();if(s==null){e.nextClause();return}switch(s.type){case t.QueryLexer.TERM:return e.nextClause(),t.QueryParser.parseTerm;case t.QueryLexer.FIELD:return e.nextClause(),t.QueryParser.parseField;case t.QueryLexer.EDIT_DISTANCE:return t.QueryParser.parseEditDistance;case t.QueryLexer.BOOST:return t.QueryParser.parseBoost;case t.QueryLexer.PRESENCE:return e.nextClause(),t.QueryParser.parsePresence;default:var i="Unexpected lexeme type '"+s.type+"'";throw new t.QueryParseError(i,s.start,s.end)}}},function(e,n){typeof define=="function"&&define.amd?define(n):typeof de=="object"?he.exports=n():e.lunr=n()}(this,function(){return t})})()});window.translations||={copy:"Copy",copied:"Copied!",normally_hidden:"This member is normally hidden due to your filter settings.",hierarchy_expand:"Expand",hierarchy_collapse:"Collapse",folder:"Folder",kind_1:"Project",kind_2:"Module",kind_4:"Namespace",kind_8:"Enumeration",kind_16:"Enumeration Member",kind_32:"Variable",kind_64:"Function",kind_128:"Class",kind_256:"Interface",kind_512:"Constructor",kind_1024:"Property",kind_2048:"Method",kind_4096:"Call Signature",kind_8192:"Index Signature",kind_16384:"Constructor Signature",kind_32768:"Parameter",kind_65536:"Type Literal",kind_131072:"Type Parameter",kind_262144:"Accessor",kind_524288:"Get Signature",kind_1048576:"Set Signature",kind_2097152:"Type Alias",kind_4194304:"Reference",kind_8388608:"Document"};var ce=[];function G(t,e){ce.push({selector:e,constructor:t})}var J=class{alwaysVisibleMember=null;constructor(){this.createComponents(document.body),this.ensureFocusedElementVisible(),this.listenForCodeCopies(),window.addEventListener("hashchange",()=>this.ensureFocusedElementVisible()),document.body.style.display||(this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}createComponents(e){ce.forEach(n=>{e.querySelectorAll(n.selector).forEach(r=>{r.dataset.hasInstance||(new n.constructor({el:r,app:this}),r.dataset.hasInstance=String(!0))})})}filterChanged(){this.ensureFocusedElementVisible()}showPage(){document.body.style.display&&(document.body.style.removeProperty("display"),this.ensureFocusedElementVisible(),this.updateIndexVisibility(),this.scrollToHash())}scrollToHash(){if(location.hash){let e=document.getElementById(location.hash.substring(1));if(!e)return;e.scrollIntoView({behavior:"instant",block:"start"})}}ensureActivePageVisible(){let e=document.querySelector(".tsd-navigation .current"),n=e?.parentElement;for(;n&&!n.classList.contains(".tsd-navigation");)n instanceof HTMLDetailsElement&&(n.open=!0),n=n.parentElement;if(e&&!ze(e)){let r=e.getBoundingClientRect().top-document.documentElement.clientHeight/4;document.querySelector(".site-menu").scrollTop=r,document.querySelector(".col-sidebar").scrollTop=r}}updateIndexVisibility(){let e=document.querySelector(".tsd-index-content"),n=e?.open;e&&(e.open=!0),document.querySelectorAll(".tsd-index-section").forEach(r=>{r.style.display="block";let i=Array.from(r.querySelectorAll(".tsd-index-link")).every(s=>s.offsetParent==null);r.style.display=i?"none":"block"}),e&&(e.open=n)}ensureFocusedElementVisible(){if(this.alwaysVisibleMember&&(this.alwaysVisibleMember.classList.remove("always-visible"),this.alwaysVisibleMember.firstElementChild.remove(),this.alwaysVisibleMember=null),!location.hash)return;let e=document.getElementById(location.hash.substring(1));if(!e)return;let n=e.parentElement;for(;n&&n.tagName!=="SECTION";)n=n.parentElement;if(!n)return;let r=n.offsetParent==null,i=n;for(;i!==document.body;)i instanceof HTMLDetailsElement&&(i.open=!0),i=i.parentElement;if(n.offsetParent==null){this.alwaysVisibleMember=n,n.classList.add("always-visible");let s=document.createElement("p");s.classList.add("warning"),s.textContent=window.translations.normally_hidden,n.prepend(s)}r&&e.scrollIntoView()}listenForCodeCopies(){document.querySelectorAll("pre > button").forEach(e=>{let n;e.addEventListener("click",()=>{e.previousElementSibling instanceof HTMLElement&&navigator.clipboard.writeText(e.previousElementSibling.innerText.trim()),e.textContent=window.translations.copied,e.classList.add("visible"),clearTimeout(n),n=setTimeout(()=>{e.classList.remove("visible"),n=setTimeout(()=>{e.textContent=window.translations.copy},100)},1e3)})})}};function ze(t){let e=t.getBoundingClientRect(),n=Math.max(document.documentElement.clientHeight,window.innerHeight);return!(e.bottom<0||e.top-n>=0)}var ue=(t,e=100)=>{let n;return()=>{clearTimeout(n),n=setTimeout(()=>t(),e)}};var ge=$e(pe(),1);async function A(t){let e=Uint8Array.from(atob(t),s=>s.charCodeAt(0)),r=new Blob([e]).stream().pipeThrough(new DecompressionStream("deflate")),i=await new Response(r).text();return JSON.parse(i)}async function fe(t,e){if(!window.searchData)return;let n=await A(window.searchData);t.data=n,t.index=ge.Index.load(n.index),e.classList.remove("loading"),e.classList.add("ready")}function ve(){let t=document.getElementById("tsd-search");if(!t)return;let e={base:document.documentElement.dataset.base+"/"},n=document.getElementById("tsd-search-script");t.classList.add("loading"),n&&(n.addEventListener("error",()=>{t.classList.remove("loading"),t.classList.add("failure")}),n.addEventListener("load",()=>{fe(e,t)}),fe(e,t));let r=document.querySelector("#tsd-search input"),i=document.querySelector("#tsd-search .results");if(!r||!i)throw new Error("The input field or the result list wrapper was not found");i.addEventListener("mouseup",()=>{re(t)}),r.addEventListener("focus",()=>t.classList.add("has-focus")),We(t,i,r,e)}function We(t,e,n,r){n.addEventListener("input",ue(()=>{Ue(t,e,n,r)},200)),n.addEventListener("keydown",i=>{i.key=="Enter"?Je(e,t):i.key=="ArrowUp"?(me(e,n,-1),i.preventDefault()):i.key==="ArrowDown"&&(me(e,n,1),i.preventDefault())}),document.body.addEventListener("keypress",i=>{i.altKey||i.ctrlKey||i.metaKey||!n.matches(":focus")&&i.key==="/"&&(i.preventDefault(),n.focus())}),document.body.addEventListener("keyup",i=>{t.classList.contains("has-focus")&&(i.key==="Escape"||!e.matches(":focus-within")&&!n.matches(":focus"))&&(n.blur(),re(t))})}function re(t){t.classList.remove("has-focus")}function Ue(t,e,n,r){if(!r.index||!r.data)return;e.textContent="";let i=n.value.trim(),s;if(i){let o=i.split(" ").map(a=>a.length?`*${a}*`:"").join(" ");s=r.index.search(o)}else s=[];for(let o=0;oa.score-o.score);for(let o=0,a=Math.min(10,s.length);o`,d=ye(l.name,i);globalThis.DEBUG_SEARCH_WEIGHTS&&(d+=` (score: ${s[o].score.toFixed(2)})`),l.parent&&(d=` + ${ye(l.parent,i)}.${d}`);let m=document.createElement("li");m.classList.value=l.classes??"";let p=document.createElement("a");p.href=r.base+l.url,p.innerHTML=c+d,m.append(p),p.addEventListener("focus",()=>{e.querySelector(".current")?.classList.remove("current"),m.classList.add("current")}),e.appendChild(m)}}function me(t,e,n){let r=t.querySelector(".current");if(!r)r=t.querySelector(n==1?"li:first-child":"li:last-child"),r&&r.classList.add("current");else{let i=r;if(n===1)do i=i.nextElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);else do i=i.previousElementSibling??void 0;while(i instanceof HTMLElement&&i.offsetParent==null);i?(r.classList.remove("current"),i.classList.add("current")):n===-1&&(r.classList.remove("current"),e.focus())}}function Je(t,e){let n=t.querySelector(".current");if(n||(n=t.querySelector("li:first-child")),n){let r=n.querySelector("a");r&&(window.location.href=r.href),re(e)}}function ye(t,e){if(e==="")return t;let n=t.toLocaleLowerCase(),r=e.toLocaleLowerCase(),i=[],s=0,o=n.indexOf(r);for(;o!=-1;)i.push(ne(t.substring(s,o)),`${ne(t.substring(o,o+r.length))}`),s=o+r.length,o=n.indexOf(r,s);return i.push(ne(t.substring(s))),i.join("")}var Ge={"&":"&","<":"<",">":">","'":"'",'"':"""};function ne(t){return t.replace(/[&<>"'"]/g,e=>Ge[e])}var I=class{el;app;constructor(e){this.el=e.el,this.app=e.app}};var H="mousedown",Ee="mousemove",B="mouseup",X={x:0,y:0},xe=!1,ie=!1,Xe=!1,D=!1,be=/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);document.documentElement.classList.add(be?"is-mobile":"not-mobile");be&&"ontouchstart"in document.documentElement&&(Xe=!0,H="touchstart",Ee="touchmove",B="touchend");document.addEventListener(H,t=>{ie=!0,D=!1;let e=H=="touchstart"?t.targetTouches[0]:t;X.y=e.pageY||0,X.x=e.pageX||0});document.addEventListener(Ee,t=>{if(ie&&!D){let e=H=="touchstart"?t.targetTouches[0]:t,n=X.x-(e.pageX||0),r=X.y-(e.pageY||0);D=Math.sqrt(n*n+r*r)>10}});document.addEventListener(B,()=>{ie=!1});document.addEventListener("click",t=>{xe&&(t.preventDefault(),t.stopImmediatePropagation(),xe=!1)});var Y=class extends I{active;className;constructor(e){super(e),this.className=this.el.dataset.toggle||"",this.el.addEventListener(B,n=>this.onPointerUp(n)),this.el.addEventListener("click",n=>n.preventDefault()),document.addEventListener(H,n=>this.onDocumentPointerDown(n)),document.addEventListener(B,n=>this.onDocumentPointerUp(n))}setActive(e){if(this.active==e)return;this.active=e,document.documentElement.classList.toggle("has-"+this.className,e),this.el.classList.toggle("active",e);let n=(this.active?"to-has-":"from-has-")+this.className;document.documentElement.classList.add(n),setTimeout(()=>document.documentElement.classList.remove(n),500)}onPointerUp(e){D||(this.setActive(!0),e.preventDefault())}onDocumentPointerDown(e){if(this.active){if(e.target.closest(".col-sidebar, .tsd-filter-group"))return;this.setActive(!1)}}onDocumentPointerUp(e){if(!D&&this.active&&e.target.closest(".col-sidebar")){let n=e.target.closest("a");if(n){let r=window.location.href;r.indexOf("#")!=-1&&(r=r.substring(0,r.indexOf("#"))),n.href.substring(0,r.length)==r&&setTimeout(()=>this.setActive(!1),250)}}}};var se;try{se=localStorage}catch{se={getItem(){return null},setItem(){}}}var C=se;var Le=document.head.appendChild(document.createElement("style"));Le.dataset.for="filters";var Z=class extends I{key;value;constructor(e){super(e),this.key=`filter-${this.el.name}`,this.value=this.el.checked,this.el.addEventListener("change",()=>{this.setLocalStorage(this.el.checked)}),this.setLocalStorage(this.fromLocalStorage()),Le.innerHTML+=`html:not(.${this.key}) .tsd-is-${this.el.name} { display: none; } +`,this.app.updateIndexVisibility()}fromLocalStorage(){let e=C.getItem(this.key);return e?e==="true":this.el.checked}setLocalStorage(e){C.setItem(this.key,e.toString()),this.value=e,this.handleValueChange()}handleValueChange(){this.el.checked=this.value,document.documentElement.classList.toggle(this.key,this.value),this.app.filterChanged(),this.app.updateIndexVisibility()}};var oe=new Map,ae=class{open;accordions=[];key;constructor(e,n){this.key=e,this.open=n}add(e){this.accordions.push(e),e.open=this.open,e.addEventListener("toggle",()=>{this.toggle(e.open)})}toggle(e){for(let n of this.accordions)n.open=e;C.setItem(this.key,e.toString())}},K=class extends I{constructor(e){super(e);let n=this.el.querySelector("summary"),r=n.querySelector("a");r&&r.addEventListener("click",()=>{location.assign(r.href)});let i=`tsd-accordion-${n.dataset.key??n.textContent.trim().replace(/\s+/g,"-").toLowerCase()}`,s;if(oe.has(i))s=oe.get(i);else{let o=C.getItem(i),a=o?o==="true":this.el.open;s=new ae(i,a),oe.set(i,s)}s.add(this.el)}};function Se(t){let e=C.getItem("tsd-theme")||"os";t.value=e,we(e),t.addEventListener("change",()=>{C.setItem("tsd-theme",t.value),we(t.value)})}function we(t){document.documentElement.dataset.theme=t}var ee;function Ce(){let t=document.getElementById("tsd-nav-script");t&&(t.addEventListener("load",Te),Te())}async function Te(){let t=document.getElementById("tsd-nav-container");if(!t||!window.navigationData)return;let e=await A(window.navigationData);ee=document.documentElement.dataset.base,ee.endsWith("/")||(ee+="/"),t.innerHTML="";for(let n of e)Ie(n,t,[]);window.app.createComponents(t),window.app.showPage(),window.app.ensureActivePageVisible()}function Ie(t,e,n){let r=e.appendChild(document.createElement("li"));if(t.children){let i=[...n,t.text],s=r.appendChild(document.createElement("details"));s.className=t.class?`${t.class} tsd-accordion`:"tsd-accordion";let o=s.appendChild(document.createElement("summary"));o.className="tsd-accordion-summary",o.dataset.key=i.join("$"),o.innerHTML='',ke(t,o);let a=s.appendChild(document.createElement("div"));a.className="tsd-accordion-details";let l=a.appendChild(document.createElement("ul"));l.className="tsd-nested-navigation";for(let c of t.children)Ie(c,l,i)}else ke(t,r,t.class)}function ke(t,e,n){if(t.path){let r=e.appendChild(document.createElement("a"));if(r.href=ee+t.path,n&&(r.className=n),location.pathname===r.pathname&&!r.href.includes("#")&&r.classList.add("current"),t.kind){let i=window.translations[`kind_${t.kind}`].replaceAll('"',""");r.innerHTML=``}r.appendChild(document.createElement("span")).textContent=t.text}else{let r=e.appendChild(document.createElement("span")),i=window.translations.folder.replaceAll('"',""");r.innerHTML=``,r.appendChild(document.createElement("span")).textContent=t.text}}var te=document.documentElement.dataset.base;te.endsWith("/")||(te+="/");function Pe(){document.querySelector(".tsd-full-hierarchy")?Ye():document.querySelector(".tsd-hierarchy")&&Ze()}function Ye(){document.addEventListener("click",r=>{let i=r.target;for(;i.parentElement&&i.parentElement.tagName!="LI";)i=i.parentElement;i.dataset.dropdown&&(i.dataset.dropdown=String(i.dataset.dropdown!=="true"))});let t=new Map,e=new Set;for(let r of document.querySelectorAll(".tsd-full-hierarchy [data-refl]")){let i=r.querySelector("ul");t.has(r.dataset.refl)?e.add(r.dataset.refl):i&&t.set(r.dataset.refl,i)}for(let r of e)n(r);function n(r){let i=t.get(r).cloneNode(!0);i.querySelectorAll("[id]").forEach(s=>{s.removeAttribute("id")}),i.querySelectorAll("[data-dropdown]").forEach(s=>{s.dataset.dropdown="false"});for(let s of document.querySelectorAll(`[data-refl="${r}"]`)){let o=tt(),a=s.querySelector("ul");s.insertBefore(o,a),o.dataset.dropdown=String(!!a),a||s.appendChild(i.cloneNode(!0))}}}function Ze(){let t=document.getElementById("tsd-hierarchy-script");t&&(t.addEventListener("load",Qe),Qe())}async function Qe(){let t=document.querySelector(".tsd-panel.tsd-hierarchy:has(h4 a)");if(!t||!window.hierarchyData)return;let e=+t.dataset.refl,n=await A(window.hierarchyData),r=t.querySelector("ul"),i=document.createElement("ul");if(i.classList.add("tsd-hierarchy"),Ke(i,n,e),r.querySelectorAll("li").length==i.querySelectorAll("li").length)return;let s=document.createElement("span");s.classList.add("tsd-hierarchy-toggle"),s.textContent=window.translations.hierarchy_expand,t.querySelector("h4 a")?.insertAdjacentElement("afterend",s),s.insertAdjacentText("beforebegin",", "),s.addEventListener("click",()=>{s.textContent===window.translations.hierarchy_expand?(r.insertAdjacentElement("afterend",i),r.remove(),s.textContent=window.translations.hierarchy_collapse):(i.insertAdjacentElement("afterend",r),i.remove(),s.textContent=window.translations.hierarchy_expand)})}function Ke(t,e,n){let r=e.roots.filter(i=>et(e,i,n));for(let i of r)t.appendChild(_e(e,i,n))}function _e(t,e,n,r=new Set){if(r.has(e))return;r.add(e);let i=t.reflections[e],s=document.createElement("li");if(s.classList.add("tsd-hierarchy-item"),e===n){let o=s.appendChild(document.createElement("span"));o.textContent=i.name,o.classList.add("tsd-hierarchy-target")}else{for(let a of i.uniqueNameParents||[]){let l=t.reflections[a],c=s.appendChild(document.createElement("a"));c.textContent=l.name,c.href=te+l.url,c.className=l.class+" tsd-signature-type",s.append(document.createTextNode("."))}let o=s.appendChild(document.createElement("a"));o.textContent=t.reflections[e].name,o.href=te+i.url,o.className=i.class+" tsd-signature-type"}if(i.children){let o=s.appendChild(document.createElement("ul"));o.classList.add("tsd-hierarchy");for(let a of i.children){let l=_e(t,a,n,r);l&&o.appendChild(l)}}return r.delete(e),s}function et(t,e,n){if(e===n)return!0;let r=new Set,i=[t.reflections[e]];for(;i.length;){let s=i.pop();if(!r.has(s)){r.add(s);for(let o of s.children||[]){if(o===n)return!0;i.push(t.reflections[o])}}}return!1}function tt(){let t=document.createElementNS("http://www.w3.org/2000/svg","svg");return t.setAttribute("width","20"),t.setAttribute("height","20"),t.setAttribute("viewBox","0 0 24 24"),t.setAttribute("fill","none"),t.innerHTML='',t}G(Y,"a[data-toggle]");G(K,".tsd-accordion");G(Z,".tsd-filter-item input[type=checkbox]");var Oe=document.getElementById("tsd-theme");Oe&&Se(Oe);var nt=new J;Object.defineProperty(window,"app",{value:nt});ve();Ce();Pe();})(); /*! Bundled license information: lunr/lunr.js: diff --git a/docs/assets/navigation.js b/docs/assets/navigation.js new file mode 100644 index 0000000000..9ac1c08592 --- /dev/null +++ b/docs/assets/navigation.js @@ -0,0 +1 @@ +window.navigationData = "eJylnVtz2zYWgP+Ln9PtOrttd/OmWFbjraWoFuN2ptPJ0OKxhJoiVRBMrO7sf98hKYkAeG60n5Lx+fAdELwBIEj99t8LB8/u4t3FLWQbsNeFs4eLNxf71G0v3l3syqzOofrWC/5t63b5xZuLJ1NkF+/++eZivTV5ZqG4ePfbWTZZr8u6cHdl6WZ5uql6IxT1LvTFbJjgX/97c7Z+fHwEK/p6ijbdmf0+h5VLHYi+mKWtK7MpwN6aSt7oCKWdXuv0PlM4sI/pGsiWDIVvv/seV7bJb062MQnCkmy6HRTZDgpXyf4zygrnc9k0n3OK99ZkG3l7O4wTXW1h/SR6WorVWMigcCbNZdcZ5YRT2JeVcUsLae22ojTEWfHNVLbdTFmFsbB2pT0sykzeBwHNaa+rtS2/ir4O40QzgBU4Z4qNfMR6rFK5LCt3Ps5nBvJsVBakuDaxhdfkHZTm0nYS0d/9XxZ9SKstyNX1YVl6f6kU3l9ysnn6R2mNO4iyE8jKlkn5BIXs6jiF6qaq6rRQXNsjnlMvYJM68wU+LW5Frceyypluw4+cQtV2A7S+FlZIl6niruGxnFJXQbFmH226zuVKdRgnWqaHq21aFCDfg3qUE3odJ9HosZyy7zaJxh7lhIlZP4Es6zBOdF86WOWKTtoJ5GS/Xm1TU3z8WkB2ladmp7jnDotoE1hIHRx7di/JhpSXL77ROMMd9uilFxlxvP37v3+4/O4tbpyZ3PknFevtYMk+mV8vpvPrRbL67DfMl9Sa9CEeGwVwaP6HL51dX39eXSfJzeJHjTbCGfHi+sdJcnN//fnT4lYhjvCB+PfhsGEFblI9ogOcISGOa1bgEkmWiK75/CpPvz6k6ydcFcVZ07ErTIn8MOv5xbhtZtOvlCiI06brq+lqEhdv/8iUKZo93XfXsBpgDG08dg4mtduW1vyFD5pRSHSeOhzddYQTI6TavgK8GQiM9h5v7l0d6AkJAhO9c0PsrzguzJIwrRnHadMyPTTHxvFW317bUSPFiWbOJhgSW1eO2qtBkHZ0d7F5mZnHQzfUR20ERnuvcgOF1xNY52lVQfVt9/ew3OXboGRZFLB2piyurS0toggBzjU11bqjISNsA4TzLUp3JfgGiOCblXXBuPow57mDal8WFcxKu0sdYUMg1tl2R6mq+VGFZVG6m8I0MzbmL8mJsFyGxOygrKmN9qOc5VMBz3tuv0YA57pPc5OlzBEcAZzrlzTPATmPur9zJX+1+5zIfw6x5e+Wt7O0XgPVtBHAuU5d4+7qWN3BnzUQ4xccVczl9iW6w1xn71iNvrYWirUBVe1jeGQCxRYMaEWKKeRADEQDQqG6KR7L43+jG8ZQGrNKvaKdPUwtldvW55Ta+0utuCcV6ltTqI43n9Nr5QoHoFbc9jxyU8jmM6lQc7NjIaKTaZrVw9RSuVF9TqH9+PAHrJ2muiE5Ri1XOkI1cnJuzwe0ItX2++AIsWLrA1Kh/rmGGqapSznrGdIKE5sWVdp2fUWvxyr0K2ICsA/rJIqHqRSsSJA8K46CM6QSKps0AIUHs+9NhqvakFD4NElDGU5xpUazPyhaStEOn0llGxUUXH/kFBUV7VwU7WjDOomusVBYSCB2ZwJEJeMuWiEj6JrJeErTxITipzk8SnGKKzW6fYDTbIrabY/nMi7t45KmndgTVisgHLsWI83JB5THGF+8Au7w8uKyhjmwfEASSRfWiGF1ZflE9ybOUZXiOG7CH1UPKJWS7ZoMKK2S2w0DjF+eQz/QVDzBPCL3YM3jgdtSDBwhZrYXJcUVSVfNWUNt9jmu0FT42qFzVFbQd0ovzmq4XoGmS9BNu37cN6caPlYPCFbVtH5R1dXKWUh3uCxkhGVfqWsm/Yh1UF5ct3pssl7DnjhEI0gn5HZfBOmETLcnhvj1bQ1Bt5wXVyyTO9+xMu4kp+CRCZiTnaRfudRv1PI+Zg+do4KCGlF1IXYRX/hYErVEDKtrJmfZJg8IeXkhc2H1AYWIPrF8QBbNTGGIq7QPCIsEueO+D4sSpqG9OKupi8wUG+5qHSKc7MfUwdf0wPUwQ0QvYzs+ODpKzrQkwbJ6cJPNxjZr8WBpzZrd3xQ8MgG3BRTNpWie0UPG9mFDRC+b7MixEQZy4v+UD8lhj2/2MSavjnpvitRyK0o7QBZd5WXF39QQTq9ldjEGKsRtOztFhQNwhFiuckjK6mYSs9sf6NK2QQKU16WR28WjtEqxRXxMubJPrqiPqaViVQNO1rZrOgxk3pIYaeiuKSgn5qfII0bWyc2tbmlFI+vblxkl+YBWpKhbCMpi4dllDHHCeVqYR6jYi1fE6HRM/WKIFcKuxCWwK9mCx4OdHGz5ACtaJsyd9hwVFMEaQ8oUQGOEijlYvogiWbiQkcsRkqPV+o3hyo1IO4XK2RK/++HoCDk1qhxi46TjW2nU87vFLHlfH+TZUoTTa5lrBAYK4g+mat64E2obUlolX9MI00mlezZKCmrpqVWIqGT8lmufWi1mCf084BQUBORiEv3rVd0kIluTCFNI39eWrVcTV2i6ORixbh6mkfZLuVlpj42TKq5CUiFFwmb9OOdu4kqNvsJDWpOiXW/NaltCUFXvD+0Qnu0jI5xey5/WA1AQryDPVfeKAThCzFd5SLLqslu63D7NYeuMgCPEXJ0xklN3wzZ6KteLyxq6E+fFlRrFOUXSbIr27U9mZt8HZBHVEztHeUUGtnmMy4wOI4bTLVO3nZkia6eauOMPA1Xitq1VZp/UqJt/u2ls1ttjGil7qsSQRti8lVuzlyOU1KnJQyBEJNnKwZ7UNEFecCAfNh1jiuL+60+cyudGahWXB7HUiJT0lQ0D9eLmAY5C22AKqb5RRjQENFNJzcHMHaERxAvtzlSVKQvIpuUuNQVzMabgcQmoizRKsmpTbNizv4/LGu7a5AGsqHliRE6enqOc4i4tsnLHbVRAaFTMhoUIKzsyH4v8kDw3Q0JcOMA00l9SW5hiwxqPDKtr+1rKWxgF6xOwOwkjx6i5nYainHwF9gvYKTya5g2+smBvmRQ8MgGzASQtp5AmPwaUVilWVzsL0tHt90LkivqYWipWNeB4rZsBBB9uIrQDTqG1wmqZISZI72BT56n9CfDBd0CwqvYDLLijDcmF6UepXlzWNB+Boe6GAcGqytquQbFiAANZseu/n0JdniOG1dUPO+Pmde5M1WwbewGl4JEJuHOFokelEB7TMbycRm4fdaMoKqmsV7W25gGaETDl6gmVStjKAFIK+W0NKU7ZfVyJGW34ACvqZ/cnRTYHl2ZULxFHlXJxiQPBjtMzzUvBygSnzW1eQ5D8Psvra/oiewpqBIrhHI6ycvblOdVbcw3E7ZJn1U54Fq5kPsCJPi1umQnyc5RVFJV4nYkYpY5r6yGmljLNhnCctv8GBTO8jyFO2H0i5vR5gvZCdVXudsS7eSStSJFlQbmJc1C5lBx/iaVUKdtpJHWqmJZTMJ/j9QFZRE++eXGFRtp32t3VNbe4eT6mlXKf6kM4Wet/4Iix+tg4qeLKLhViE94tcefdkisWvOPfC7ovBwbByDL8UqAPh4uAERuyEpgyYreewEjefGgjdh+KnOSdaGiNRkNHETb0GZZd3tyDrYKryrH8OSI5mntTtSrSfbUtB9UIgpJpuLy8kxBrygflZ5C62g7vgJ0ljKpd+H6KwpKtX8t7mz5ADpn4IU6cHZHnuCIz6NYPEvSQznxTZPCM+9qQZJmn9glZDdB5gqDWhO+eMCq5wrWVnQFZTjko18xPxuWav2nKobOrvYKeUh3aKqizEl2GdfTFgGQk6qWszxGb5Pmp/efpnnCFkNIsa0c58SNIe+x405GxwgvJlmaecCho/iqWNbs6x6Zij5IwrLfh7RLHRV84eTYzhf/hgqMTYWRvOHY4mZDBAlEW6yT0EdHRTii55mVI5tTDKcnNCF9mGc7GDGzELAxnxXfBABhhvL8UnSdEsk6vZ5NPt8nnyfLm8/313erm46K39t9jRrDQHHzgeRv9FELv2SK/exAUvbtZLm+vp12iS0wRElrVW1H1llG1X1Q060mWWaiqpPz1+L9e+lgXbbtX31JsqP+++VGihmx2XpV9Y6pv4NmBbU57P3FZfAHrPsBzUq6cDabevZQDik6Wwd7CunljH8nTFU7KD37vZZDHo16YJ3luh0xJuah3D/7zl0GuiIzzeeoM1maX5kn5c53mwW9d9NKY0ejak+oR7F1w60KcPsiLg35UYBr0ppCip28VTmnHGXnRQRc4lvVDbtZiqg57RbqmIynl6plXJFoBZHSKJvoKOXdhCIkXJrHmC7A5POAVKX6Cwz416IkZAK9IwTeVT3BnhC33zTXW7lHNOcoooKDOxy4iFmXPxwh5UXsFDvocQbBXpJuVtn1W2Tx7Jm47KCg216y0Gud4XTSvSjuRCVZEzF+QYuYVLU1dkProK+TcWRYSL0qyAXf8xEOzHnIDaJ4BxLT9Bk5ficXPJz/Oa7zJdFIVMIxum1YLeHbhLyv1Ji/MSEyFfkqp1wQAK0K/LOSLyE8LRSL8tVnfRL83G6uGL84GHvzN2UhSNp+DT46vSjT/x2UDjJW2D8mY8yAkZNVV0MNnjCH4ohPsaFrB2gLRsh4g1527HkTIi+r7BIekvJtdXf7w3eW8gF1Z4NdPjGNqvzstm8Fc5yAj2Ke2Ot0bkV987WUoKInZS1ZISCpvDM/XMQY5Mdg1FI4dGsWMRicNjVCQEf/ZpU7KaTemwpwxw+js49o/vJIyWC7YKzGO056vOkl5s/pIXaUQTCn9VJhnjfXEMdoKXHyccINuBh870m/OR/alEy8rjjKb5bzjiT1aUJAR18cmlW5BGMdov3TLNFDVKaYoTrx1OnQxL5+G4vaLncexXNM7bp/WoWaUfNEtolMpjw0SFrdKsTnkdniyr+3vuMxsuetusd3ZgF6WCZSRP59nCeU+BcW+aB88231STpvhMZrqHB3U/ff/Aw3LdYE=" \ No newline at end of file diff --git a/docs/assets/search.js b/docs/assets/search.js index c7bc0a735c..24b70a3c7b 100644 --- a/docs/assets/search.js +++ b/docs/assets/search.js @@ -1 +1 @@ -window.searchData = JSON.parse("{\"rows\":[{\"kind\":128,\"name\":\"Client\",\"url\":\"classes/Client.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Client.html#constructor\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":1024,\"name\":\"connection\",\"url\":\"classes/Client.html#connection\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":1024,\"name\":\"feeCushion\",\"url\":\"classes/Client.html#feeCushion\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":1024,\"name\":\"maxFeeXRP\",\"url\":\"classes/Client.html#maxFeeXRP\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":1024,\"name\":\"networkID\",\"url\":\"classes/Client.html#networkID\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":1024,\"name\":\"buildVersion\",\"url\":\"classes/Client.html#buildVersion\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":262144,\"name\":\"url\",\"url\":\"classes/Client.html#url\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"request\",\"url\":\"classes/Client.html#request\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"requestNextPage\",\"url\":\"classes/Client.html#requestNextPage\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"on\",\"url\":\"classes/Client.html#on\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"requestAll\",\"url\":\"classes/Client.html#requestAll\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"getServerInfo\",\"url\":\"classes/Client.html#getServerInfo\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"connect\",\"url\":\"classes/Client.html#connect\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"disconnect\",\"url\":\"classes/Client.html#disconnect\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"isConnected\",\"url\":\"classes/Client.html#isConnected\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"autofill\",\"url\":\"classes/Client.html#autofill\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"submit\",\"url\":\"classes/Client.html#submit\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"submitAndWait\",\"url\":\"classes/Client.html#submitAndWait\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"prepareTransaction\",\"url\":\"classes/Client.html#prepareTransaction\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"getXrpBalance\",\"url\":\"classes/Client.html#getXrpBalance\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"getBalances\",\"url\":\"classes/Client.html#getBalances\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"getOrderbook\",\"url\":\"classes/Client.html#getOrderbook\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"getLedgerIndex\",\"url\":\"classes/Client.html#getLedgerIndex\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":2048,\"name\":\"fundWallet\",\"url\":\"classes/Client.html#fundWallet\",\"classes\":\"\",\"parent\":\"Client\"},{\"kind\":256,\"name\":\"ClientOptions\",\"url\":\"interfaces/ClientOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"feeCushion\",\"url\":\"interfaces/ClientOptions.html#feeCushion\",\"classes\":\"\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"maxFeeXRP\",\"url\":\"interfaces/ClientOptions.html#maxFeeXRP\",\"classes\":\"\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"timeout\",\"url\":\"interfaces/ClientOptions.html#timeout\",\"classes\":\"\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"trace\",\"url\":\"interfaces/ClientOptions.html#trace\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"headers\",\"url\":\"interfaces/ClientOptions.html#headers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClientOptions\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ClientOptions.html#headers.__type\",\"classes\":\"\",\"parent\":\"ClientOptions.headers\"},{\"kind\":1024,\"name\":\"agent\",\"url\":\"interfaces/ClientOptions.html#agent\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"authorization\",\"url\":\"interfaces/ClientOptions.html#authorization\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClientOptions\"},{\"kind\":1024,\"name\":\"connectionTimeout\",\"url\":\"interfaces/ClientOptions.html#connectionTimeout\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ClientOptions\"},{\"kind\":8,\"name\":\"ECDSA\",\"url\":\"enums/ECDSA.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"ed25519\",\"url\":\"enums/ECDSA.html#ed25519\",\"classes\":\"\",\"parent\":\"ECDSA\"},{\"kind\":16,\"name\":\"secp256k1\",\"url\":\"enums/ECDSA.html#secp256k1\",\"classes\":\"\",\"parent\":\"ECDSA\"},{\"kind\":256,\"name\":\"FundingOptions\",\"url\":\"interfaces/FundingOptions.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"amount\",\"url\":\"interfaces/FundingOptions.html#amount\",\"classes\":\"\",\"parent\":\"FundingOptions\"},{\"kind\":1024,\"name\":\"faucetHost\",\"url\":\"interfaces/FundingOptions.html#faucetHost\",\"classes\":\"\",\"parent\":\"FundingOptions\"},{\"kind\":1024,\"name\":\"faucetPath\",\"url\":\"interfaces/FundingOptions.html#faucetPath\",\"classes\":\"\",\"parent\":\"FundingOptions\"},{\"kind\":1024,\"name\":\"usageContext\",\"url\":\"interfaces/FundingOptions.html#usageContext\",\"classes\":\"\",\"parent\":\"FundingOptions\"},{\"kind\":128,\"name\":\"Wallet\",\"url\":\"classes/Wallet.html\",\"classes\":\"\"},{\"kind\":2048,\"name\":\"generate\",\"url\":\"classes/Wallet.html#generate\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"fromSeed\",\"url\":\"classes/Wallet.html#fromSeed\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":1024,\"name\":\"fromSecret\",\"url\":\"classes/Wallet.html#fromSecret\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Wallet.html#fromSecret.__type\",\"classes\":\"\",\"parent\":\"Wallet.fromSecret\"},{\"kind\":2048,\"name\":\"fromEntropy\",\"url\":\"classes/Wallet.html#fromEntropy\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"fromMnemonic\",\"url\":\"classes/Wallet.html#fromMnemonic\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"fromRFC1751Mnemonic\",\"url\":\"classes/Wallet.html#fromRFC1751Mnemonic\",\"classes\":\"tsd-is-private\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"deriveWallet\",\"url\":\"classes/Wallet.html#deriveWallet\",\"classes\":\"tsd-is-private\",\"parent\":\"Wallet\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/Wallet.html#constructor\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":1024,\"name\":\"publicKey\",\"url\":\"classes/Wallet.html#publicKey\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":1024,\"name\":\"privateKey\",\"url\":\"classes/Wallet.html#privateKey\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":1024,\"name\":\"classicAddress\",\"url\":\"classes/Wallet.html#classicAddress\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":1024,\"name\":\"seed\",\"url\":\"classes/Wallet.html#seed\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":262144,\"name\":\"address\",\"url\":\"classes/Wallet.html#address\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"sign\",\"url\":\"classes/Wallet.html#sign\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"classes/Wallet.html#sign.sign-1.__type-2\",\"classes\":\"\",\"parent\":\"Wallet.sign.sign\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"classes/Wallet.html#sign.sign-1.__type-2.tx_blob\",\"classes\":\"\",\"parent\":\"Wallet.sign.sign.__type\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"classes/Wallet.html#sign.sign-1.__type-2.hash\",\"classes\":\"\",\"parent\":\"Wallet.sign.sign.__type\"},{\"kind\":2048,\"name\":\"verifyTransaction\",\"url\":\"classes/Wallet.html#verifyTransaction\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":2048,\"name\":\"getXAddress\",\"url\":\"classes/Wallet.html#getXAddress\",\"classes\":\"\",\"parent\":\"Wallet\"},{\"kind\":64,\"name\":\"walletFromSecretNumbers\",\"url\":\"functions/walletFromSecretNumbers.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"keyToRFC1751Mnemonic\",\"url\":\"functions/keyToRFC1751Mnemonic.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"rfc1751MnemonicToKey\",\"url\":\"functions/rfc1751MnemonicToKey.html\",\"classes\":\"\"},{\"kind\":4,\"name\":\"LedgerEntry\",\"url\":\"modules/LedgerEntry.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"AccountRoot\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"Balance\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#Balance\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"OwnerCount\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#OwnerCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#Sequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#AccountTxnID\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"AMMID\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#AMMID\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"Domain\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#Domain\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"EmailHash\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#EmailHash\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"MessageKey\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#MessageKey\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"RegularKey\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#RegularKey\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"TicketCount\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#TicketCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"TickSize\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#TickSize\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"TransferRate\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#TransferRate\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"WalletLocator\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#WalletLocator\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"BurnedNFTokens\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#BurnedNFTokens\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"FirstNFTSequence\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#FirstNFTSequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"MintedNFTokens\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#MintedNFTokens\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"NFTokenMinter\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#NFTokenMinter\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.AccountRoot.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AccountRoot\"},{\"kind\":8,\"name\":\"AccountRootFlags\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":16,\"name\":\"lsfPasswordSpent\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfPasswordSpent\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfRequireDestTag\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfRequireDestTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfRequireAuth\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfRequireAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisallowXRP\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisallowXRP\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisableMaster\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisableMaster\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfNoFreeze\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfNoFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfGlobalFreeze\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfGlobalFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDefaultRipple\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDefaultRipple\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDepositAuth\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDepositAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfAMM\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfAMM\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisallowIncomingNFTokenOffer\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisallowIncomingNFTokenOffer\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisallowIncomingCheck\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisallowIncomingCheck\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisallowIncomingPayChan\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisallowIncomingPayChan\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfDisallowIncomingTrustline\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfDisallowIncomingTrustline\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":16,\"name\":\"lsfAllowTrustLineClawback\",\"url\":\"enums/LedgerEntry.AccountRootFlags.html#lsfAllowTrustLineClawback\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlags\"},{\"kind\":256,\"name\":\"AccountRootFlagsInterface\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"lsfPasswordSpent\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfPasswordSpent\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfRequireDestTag\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfRequireDestTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfRequireAuth\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfRequireAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisallowXRP\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisallowXRP\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisableMaster\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisableMaster\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfNoFreeze\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfNoFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfGlobalFreeze\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfGlobalFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDefaultRipple\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDefaultRipple\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDepositAuth\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDepositAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfAMM\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfAMM\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisallowIncomingNFTokenOffer\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisallowIncomingNFTokenOffer\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisallowIncomingCheck\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisallowIncomingCheck\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisallowIncomingPayChan\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisallowIncomingPayChan\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfDisallowIncomingTrustline\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfDisallowIncomingTrustline\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":1024,\"name\":\"lsfAllowTrustLineClawback\",\"url\":\"interfaces/LedgerEntry.AccountRootFlagsInterface.html#lsfAllowTrustLineClawback\",\"classes\":\"\",\"parent\":\"LedgerEntry.AccountRootFlagsInterface\"},{\"kind\":32,\"name\":\"AMENDMENTS_ID\",\"url\":\"variables/LedgerEntry.AMENDMENTS_ID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":256,\"name\":\"Amendments\",\"url\":\"interfaces/LedgerEntry.Amendments.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Amendments.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"Amendments\",\"url\":\"interfaces/LedgerEntry.Amendments.html#Amendments\",\"classes\":\"\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"Majorities\",\"url\":\"interfaces/LedgerEntry.Amendments.html#Majorities\",\"classes\":\"\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Amendments.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Amendments.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Amendments.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Amendments.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Amendments\"},{\"kind\":256,\"name\":\"AMM\",\"url\":\"interfaces/LedgerEntry.AMM.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.AMM.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.AMM.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/LedgerEntry.AMM.html#Asset\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/LedgerEntry.AMM.html#Asset2\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"AuctionSlot\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type.Account-1\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot.__type\"},{\"kind\":1024,\"name\":\"AuthAccounts\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type.AuthAccounts\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot.__type\"},{\"kind\":1024,\"name\":\"DiscountedFee\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type.DiscountedFee\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot.__type\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type.Expiration\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot.__type\"},{\"kind\":1024,\"name\":\"Price\",\"url\":\"interfaces/LedgerEntry.AMM.html#AuctionSlot.__type.Price\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM.AuctionSlot.__type\"},{\"kind\":1024,\"name\":\"LPTokenBalance\",\"url\":\"interfaces/LedgerEntry.AMM.html#LPTokenBalance\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"TradingFee\",\"url\":\"interfaces/LedgerEntry.AMM.html#TradingFee\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"VoteSlots\",\"url\":\"interfaces/LedgerEntry.AMM.html#VoteSlots\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.AMM.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.AMM.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.AMM.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.AMM.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.AMM\"},{\"kind\":256,\"name\":\"Bridge\",\"url\":\"interfaces/LedgerEntry.Bridge.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Bridge.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.Bridge.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/LedgerEntry.Bridge.html#SignatureReward\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/LedgerEntry.Bridge.html#XChainBridge\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"XChainClaimID\",\"url\":\"interfaces/LedgerEntry.Bridge.html#XChainClaimID\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"XChainAccountCreateCount\",\"url\":\"interfaces/LedgerEntry.Bridge.html#XChainAccountCreateCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"XChainAccountClaimCount\",\"url\":\"interfaces/LedgerEntry.Bridge.html#XChainAccountClaimCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"MinAccountCreateAmount\",\"url\":\"interfaces/LedgerEntry.Bridge.html#MinAccountCreateAmount\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Bridge.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.Bridge.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Bridge.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Bridge.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Bridge.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Bridge\"},{\"kind\":256,\"name\":\"Check\",\"url\":\"interfaces/LedgerEntry.Check.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Check.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.Check.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/LedgerEntry.Check.html#Destination\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Check.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.Check.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Check.html#PreviousTxnID\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Check.html#PreviousTxnLgrSeq\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"SendMax\",\"url\":\"interfaces/LedgerEntry.Check.html#SendMax\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/LedgerEntry.Check.html#Sequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"DestinationNode\",\"url\":\"interfaces/LedgerEntry.Check.html#DestinationNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/LedgerEntry.Check.html#DestinationTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/LedgerEntry.Check.html#Expiration\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"InvoiceID\",\"url\":\"interfaces/LedgerEntry.Check.html#InvoiceID\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/LedgerEntry.Check.html#SourceTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Check.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Check\"},{\"kind\":256,\"name\":\"DepositPreauth\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"Authorize\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#Authorize\",\"classes\":\"\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.DepositPreauth.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DepositPreauth\"},{\"kind\":256,\"name\":\"DirectoryNode\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"RootIndex\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#RootIndex\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"Indexes\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#Indexes\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"IndexNext\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#IndexNext\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"IndexPrevious\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#IndexPrevious\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#Owner\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"TakerPaysCurrency\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#TakerPaysCurrency\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"TakerPaysIssuer\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#TakerPaysIssuer\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"TakerGetsCurrency\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#TakerGetsCurrency\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"TakerGetsIssuer\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#TakerGetsIssuer\",\"classes\":\"\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.DirectoryNode.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DirectoryNode\"},{\"kind\":256,\"name\":\"DID\",\"url\":\"interfaces/LedgerEntry.DID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.DID.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.DID.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"Data\",\"url\":\"interfaces/LedgerEntry.DID.html#Data\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"DIDDocument\",\"url\":\"interfaces/LedgerEntry.DID.html#DIDDocument\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"URI\",\"url\":\"interfaces/LedgerEntry.DID.html#URI\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.DID.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.DID.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.DID.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.DID.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.DID.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.DID\"},{\"kind\":256,\"name\":\"Escrow\",\"url\":\"interfaces/LedgerEntry.Escrow.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Escrow.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.Escrow.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/LedgerEntry.Escrow.html#Destination\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/LedgerEntry.Escrow.html#Amount\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"Condition\",\"url\":\"interfaces/LedgerEntry.Escrow.html#Condition\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"CancelAfter\",\"url\":\"interfaces/LedgerEntry.Escrow.html#CancelAfter\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"FinishAfter\",\"url\":\"interfaces/LedgerEntry.Escrow.html#FinishAfter\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Escrow.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/LedgerEntry.Escrow.html#SourceTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/LedgerEntry.Escrow.html#DestinationTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.Escrow.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"DestinationNode\",\"url\":\"interfaces/LedgerEntry.Escrow.html#DestinationNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Escrow.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Escrow.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Escrow.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Escrow\"},{\"kind\":32,\"name\":\"FEE_SETTINGS_ID\",\"url\":\"variables/LedgerEntry.FEE_SETTINGS_ID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":256,\"name\":\"FeeSettings\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettings\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettings\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html#index\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettings\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html#PreviousTxnID\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettings\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.FeeSettings.html#PreviousTxnLgrSeq\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettings\"},{\"kind\":256,\"name\":\"FeeSettingsPreAmendmentFields\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"BaseFee\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html#BaseFee\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPreAmendmentFields\"},{\"kind\":1024,\"name\":\"ReferenceFeeUnits\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html#ReferenceFeeUnits\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPreAmendmentFields\"},{\"kind\":1024,\"name\":\"ReserveBase\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html#ReserveBase\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPreAmendmentFields\"},{\"kind\":1024,\"name\":\"ReserveIncrement\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html#ReserveIncrement\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPreAmendmentFields\"},{\"kind\":256,\"name\":\"FeeSettingsPostAmendmentFields\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"BaseFeeDrops\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html#BaseFeeDrops\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPostAmendmentFields\"},{\"kind\":1024,\"name\":\"ReserveBaseDrops\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html#ReserveBaseDrops\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPostAmendmentFields\"},{\"kind\":1024,\"name\":\"ReserveIncrementDrops\",\"url\":\"interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html#ReserveIncrementDrops\",\"classes\":\"\",\"parent\":\"LedgerEntry.FeeSettingsPostAmendmentFields\"},{\"kind\":256,\"name\":\"Ledger\",\"url\":\"interfaces/LedgerEntry.Ledger.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"account_hash\",\"url\":\"interfaces/LedgerEntry.Ledger.html#account_hash\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"accountState\",\"url\":\"interfaces/LedgerEntry.Ledger.html#accountState\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"close_flags\",\"url\":\"interfaces/LedgerEntry.Ledger.html#close_flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"close_time\",\"url\":\"interfaces/LedgerEntry.Ledger.html#close_time\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"close_time_human\",\"url\":\"interfaces/LedgerEntry.Ledger.html#close_time_human\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"close_time_resolution\",\"url\":\"interfaces/LedgerEntry.Ledger.html#close_time_resolution\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"closed\",\"url\":\"interfaces/LedgerEntry.Ledger.html#closed\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerEntry.Ledger.html#ledger_hash\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerEntry.Ledger.html#ledger_index\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"parent_close_time\",\"url\":\"interfaces/LedgerEntry.Ledger.html#parent_close_time\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"parent_hash\",\"url\":\"interfaces/LedgerEntry.Ledger.html#parent_hash\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"total_coins\",\"url\":\"interfaces/LedgerEntry.Ledger.html#total_coins\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"transaction_hash\",\"url\":\"interfaces/LedgerEntry.Ledger.html#transaction_hash\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/LedgerEntry.Ledger.html#transactions\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ledger\"},{\"kind\":2097152,\"name\":\"LedgerEntryFilter\",\"url\":\"types/LedgerEntry.LedgerEntryFilter.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":2097152,\"name\":\"LedgerEntry\",\"url\":\"types/LedgerEntry.LedgerEntry.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":256,\"name\":\"LedgerHashes\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#LastLedgerSequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"Hashes\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#Hashes\",\"classes\":\"\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.LedgerHashes.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.LedgerHashes\"},{\"kind\":256,\"name\":\"Majority\",\"url\":\"interfaces/LedgerEntry.Majority.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"Majority\",\"url\":\"interfaces/LedgerEntry.Majority.html#Majority\",\"classes\":\"\",\"parent\":\"LedgerEntry.Majority\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntry.Majority.html#Majority.__type\",\"classes\":\"\",\"parent\":\"LedgerEntry.Majority.Majority\"},{\"kind\":1024,\"name\":\"Amendment\",\"url\":\"interfaces/LedgerEntry.Majority.html#Majority.__type.Amendment\",\"classes\":\"\",\"parent\":\"LedgerEntry.Majority.Majority.__type\"},{\"kind\":1024,\"name\":\"CloseTime\",\"url\":\"interfaces/LedgerEntry.Majority.html#Majority.__type.CloseTime\",\"classes\":\"\",\"parent\":\"LedgerEntry.Majority.Majority.__type\"},{\"kind\":32,\"name\":\"NEGATIVE_UNL_ID\",\"url\":\"variables/LedgerEntry.NEGATIVE_UNL_ID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":256,\"name\":\"NegativeUNL\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"DisabledValidators\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#DisabledValidators\",\"classes\":\"\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"ValidatorToDisable\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#ValidatorToDisable\",\"classes\":\"\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"ValidatorToReEnable\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#ValidatorToReEnable\",\"classes\":\"\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.NegativeUNL.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NegativeUNL\"},{\"kind\":256,\"name\":\"NFTokenOffer\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#Amount\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#Destination\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#Expiration\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"NFTokenOfferNode\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#NFTokenOfferNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#Owner\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.NFTokenOffer.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenOffer\"},{\"kind\":256,\"name\":\"NFTokenPage\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"NextPageMin\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#NextPageMin\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"NFTokens\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#NFTokens\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"PreviousPageMin\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#PreviousPageMin\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.NFTokenPage.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.NFTokenPage\"},{\"kind\":256,\"name\":\"NFToken\",\"url\":\"interfaces/LedgerEntry.NFToken.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"NFToken\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type.Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken.__type\"},{\"kind\":1024,\"name\":\"Issuer\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type.Issuer\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken.__type\"},{\"kind\":1024,\"name\":\"NFTokenID\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type.NFTokenID\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken.__type\"},{\"kind\":1024,\"name\":\"NFTokenTaxon\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type.NFTokenTaxon\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken.__type\"},{\"kind\":1024,\"name\":\"URI\",\"url\":\"interfaces/LedgerEntry.NFToken.html#NFToken.__type.URI\",\"classes\":\"\",\"parent\":\"LedgerEntry.NFToken.NFToken.__type\"},{\"kind\":256,\"name\":\"Offer\",\"url\":\"interfaces/LedgerEntry.Offer.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Offer.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Offer.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.Offer.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/LedgerEntry.Offer.html#Sequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"TakerPays\",\"url\":\"interfaces/LedgerEntry.Offer.html#TakerPays\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"TakerGets\",\"url\":\"interfaces/LedgerEntry.Offer.html#TakerGets\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"BookDirectory\",\"url\":\"interfaces/LedgerEntry.Offer.html#BookDirectory\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"BookNode\",\"url\":\"interfaces/LedgerEntry.Offer.html#BookNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.Offer.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/LedgerEntry.Offer.html#Expiration\",\"classes\":\"\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Offer.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Offer.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Offer.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Offer\"},{\"kind\":8,\"name\":\"OfferFlags\",\"url\":\"enums/LedgerEntry.OfferFlags.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":16,\"name\":\"lsfPassive\",\"url\":\"enums/LedgerEntry.OfferFlags.html#lsfPassive\",\"classes\":\"\",\"parent\":\"LedgerEntry.OfferFlags\"},{\"kind\":16,\"name\":\"lsfSell\",\"url\":\"enums/LedgerEntry.OfferFlags.html#lsfSell\",\"classes\":\"\",\"parent\":\"LedgerEntry.OfferFlags\"},{\"kind\":256,\"name\":\"PayChannel\",\"url\":\"interfaces/LedgerEntry.PayChannel.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Destination\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Amount\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Balance\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Balance\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"PublicKey\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#PublicKey\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"SettleDelay\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#SettleDelay\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#Expiration\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"CancelAfter\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#CancelAfter\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#SourceTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#DestinationTag\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"DestinationNode\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#DestinationNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.PayChannel.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.PayChannel\"},{\"kind\":256,\"name\":\"RippleState\",\"url\":\"interfaces/LedgerEntry.RippleState.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.RippleState.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.RippleState.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"Balance\",\"url\":\"interfaces/LedgerEntry.RippleState.html#Balance\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"LowLimit\",\"url\":\"interfaces/LedgerEntry.RippleState.html#LowLimit\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"HighLimit\",\"url\":\"interfaces/LedgerEntry.RippleState.html#HighLimit\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"LowNode\",\"url\":\"interfaces/LedgerEntry.RippleState.html#LowNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"HighNode\",\"url\":\"interfaces/LedgerEntry.RippleState.html#HighNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"LowQualityIn\",\"url\":\"interfaces/LedgerEntry.RippleState.html#LowQualityIn\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"LowQualityOut\",\"url\":\"interfaces/LedgerEntry.RippleState.html#LowQualityOut\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"HighQualityIn\",\"url\":\"interfaces/LedgerEntry.RippleState.html#HighQualityIn\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"HighQualityOut\",\"url\":\"interfaces/LedgerEntry.RippleState.html#HighQualityOut\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.RippleState.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.RippleState.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.RippleState.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.RippleState\"},{\"kind\":8,\"name\":\"RippleStateFlags\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":16,\"name\":\"lsfLowReserve\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfLowReserve\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfHighReserve\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfHighReserve\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfLowAuth\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfLowAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfHighAuth\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfHighAuth\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfLowNoRipple\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfLowNoRipple\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfHighNoRipple\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfHighNoRipple\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfLowFreeze\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfLowFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":16,\"name\":\"lsfHighFreeze\",\"url\":\"enums/LedgerEntry.RippleStateFlags.html#lsfHighFreeze\",\"classes\":\"\",\"parent\":\"LedgerEntry.RippleStateFlags\"},{\"kind\":256,\"name\":\"SignerList\",\"url\":\"interfaces/LedgerEntry.SignerList.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.SignerList.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.SignerList.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.SignerList.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"SignerEntries\",\"url\":\"interfaces/LedgerEntry.SignerList.html#SignerEntries\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"SignerListID\",\"url\":\"interfaces/LedgerEntry.SignerList.html#SignerListID\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"SignerQuorum\",\"url\":\"interfaces/LedgerEntry.SignerList.html#SignerQuorum\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.SignerList.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.SignerList.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.SignerList.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.SignerList\"},{\"kind\":8,\"name\":\"SignerListFlags\",\"url\":\"enums/LedgerEntry.SignerListFlags.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":16,\"name\":\"lsfOneOwnerCount\",\"url\":\"enums/LedgerEntry.SignerListFlags.html#lsfOneOwnerCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.SignerListFlags\"},{\"kind\":256,\"name\":\"Ticket\",\"url\":\"interfaces/LedgerEntry.Ticket.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.Ticket.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.Ticket.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.Ticket.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.Ticket.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/LedgerEntry.Ticket.html#TicketSequence\",\"classes\":\"\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.Ticket.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.Ticket.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.Ticket.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.Ticket\"},{\"kind\":256,\"name\":\"XChainOwnedClaimID\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#XChainBridge\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"XChainClaimID\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#XChainClaimID\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"OtherChainSource\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#OtherChainSource\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"XChainClaimAttestations\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#XChainClaimAttestations\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#SignatureReward\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.XChainOwnedClaimID.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedClaimID\"},{\"kind\":256,\"name\":\"XChainOwnedCreateAccountClaimID\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#LedgerEntryType\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#XChainBridge\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"XChainAccountCreateCount\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#XChainAccountCreateCount\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"XChainCreateAccountAttestations\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#XChainCreateAccountAttestations\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#Flags\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#OwnerNode\",\"classes\":\"\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntry.XChainOwnedCreateAccountClaimID\"},{\"kind\":256,\"name\":\"VoteSlot\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html\",\"classes\":\"\",\"parent\":\"LedgerEntry\"},{\"kind\":1024,\"name\":\"VoteEntry\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html#VoteEntry\",\"classes\":\"\",\"parent\":\"LedgerEntry.VoteSlot\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html#VoteEntry.__type\",\"classes\":\"\",\"parent\":\"LedgerEntry.VoteSlot.VoteEntry\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html#VoteEntry.__type.Account\",\"classes\":\"\",\"parent\":\"LedgerEntry.VoteSlot.VoteEntry.__type\"},{\"kind\":1024,\"name\":\"TradingFee\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html#VoteEntry.__type.TradingFee\",\"classes\":\"\",\"parent\":\"LedgerEntry.VoteSlot.VoteEntry.__type\"},{\"kind\":1024,\"name\":\"VoteWeight\",\"url\":\"interfaces/LedgerEntry.VoteSlot.html#VoteEntry.__type.VoteWeight\",\"classes\":\"\",\"parent\":\"LedgerEntry.VoteSlot.VoteEntry.__type\"},{\"kind\":64,\"name\":\"setTransactionFlagsToNumber\",\"url\":\"functions/setTransactionFlagsToNumber.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"parseAccountRootFlags\",\"url\":\"functions/parseAccountRootFlags.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"RequestResponseMap\",\"url\":\"types/RequestResponseMap.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"MarkerRequest\",\"url\":\"types/MarkerRequest.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"MarkerResponse\",\"url\":\"types/MarkerResponse.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"RequestAllResponseMap\",\"url\":\"types/RequestAllResponseMap.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"BaseRequest\",\"url\":\"interfaces/BaseRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BaseRequest.html#id\",\"classes\":\"\",\"parent\":\"BaseRequest\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/BaseRequest.html#command\",\"classes\":\"\",\"parent\":\"BaseRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/BaseRequest.html#api_version\",\"classes\":\"\",\"parent\":\"BaseRequest\"},{\"kind\":256,\"name\":\"BaseResponse\",\"url\":\"interfaces/BaseResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BaseResponse.html#id\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/BaseResponse.html#status\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/BaseResponse.html#type\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/BaseResponse.html#result\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/BaseResponse.html#warning\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/BaseResponse.html#warnings\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/BaseResponse.html#forwarded\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/BaseResponse.html#api_version\",\"classes\":\"\",\"parent\":\"BaseResponse\"},{\"kind\":2097152,\"name\":\"Request\",\"url\":\"types/Request.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"Response\",\"url\":\"types/Response.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"ResponseWarning\",\"url\":\"interfaces/ResponseWarning.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ResponseWarning.html#id\",\"classes\":\"\",\"parent\":\"ResponseWarning\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"interfaces/ResponseWarning.html#message\",\"classes\":\"\",\"parent\":\"ResponseWarning\"},{\"kind\":1024,\"name\":\"details\",\"url\":\"interfaces/ResponseWarning.html#details\",\"classes\":\"\",\"parent\":\"ResponseWarning\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ResponseWarning.html#details.__type\",\"classes\":\"\",\"parent\":\"ResponseWarning.details\"},{\"kind\":256,\"name\":\"Channel\",\"url\":\"interfaces/Channel.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/Channel.html#account\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"amount\",\"url\":\"interfaces/Channel.html#amount\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"balance\",\"url\":\"interfaces/Channel.html#balance\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"channel_id\",\"url\":\"interfaces/Channel.html#channel_id\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/Channel.html#destination_account\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"settle_delay\",\"url\":\"interfaces/Channel.html#settle_delay\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"public_key\",\"url\":\"interfaces/Channel.html#public_key\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"public_key_hex\",\"url\":\"interfaces/Channel.html#public_key_hex\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"expiration\",\"url\":\"interfaces/Channel.html#expiration\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"cancel_after\",\"url\":\"interfaces/Channel.html#cancel_after\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"source_tab\",\"url\":\"interfaces/Channel.html#source_tab\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":1024,\"name\":\"destination_tag\",\"url\":\"interfaces/Channel.html#destination_tag\",\"classes\":\"\",\"parent\":\"Channel\"},{\"kind\":256,\"name\":\"AccountChannelsRequest\",\"url\":\"interfaces/AccountChannelsRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountChannelsRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountChannelsRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/AccountChannelsRequest.html#destination_account\",\"classes\":\"\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountChannelsRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountChannelsRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountChannelsRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountChannelsRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountChannelsRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountChannelsRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsRequest\"},{\"kind\":256,\"name\":\"AccountChannelsResponse\",\"url\":\"interfaces/AccountChannelsResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountChannelsResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"channels\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.channels\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.limit\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountChannelsResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountChannelsResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountChannelsResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountChannelsResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountChannelsResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountChannelsResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountChannelsResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountChannelsResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountChannelsResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountChannelsResponse\"},{\"kind\":256,\"name\":\"AccountCurrenciesRequest\",\"url\":\"interfaces/AccountCurrenciesRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountCurrenciesRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountCurrenciesRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"strict\",\"url\":\"interfaces/AccountCurrenciesRequest.html#strict\",\"classes\":\"\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountCurrenciesRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountCurrenciesRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountCurrenciesRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountCurrenciesRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesRequest\"},{\"kind\":256,\"name\":\"AccountCurrenciesResponse\",\"url\":\"interfaces/AccountCurrenciesResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result.__type\"},{\"kind\":1024,\"name\":\"receive_currencies\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type.receive_currencies\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result.__type\"},{\"kind\":1024,\"name\":\"send_currencies\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type.send_currencies\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountCurrenciesResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountCurrenciesResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountCurrenciesResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountCurrenciesResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountCurrenciesResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountCurrenciesResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountCurrenciesResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountCurrenciesResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountCurrenciesResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountCurrenciesResponse\"},{\"kind\":256,\"name\":\"AccountInfoAccountFlags\",\"url\":\"interfaces/AccountInfoAccountFlags.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"defaultRipple\",\"url\":\"interfaces/AccountInfoAccountFlags.html#defaultRipple\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"depositAuth\",\"url\":\"interfaces/AccountInfoAccountFlags.html#depositAuth\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disableMasterKey\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disableMasterKey\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disallowIncomingCheck\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disallowIncomingCheck\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disallowIncomingNFTokenOffer\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disallowIncomingNFTokenOffer\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disallowIncomingPayChan\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disallowIncomingPayChan\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disallowIncomingTrustline\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disallowIncomingTrustline\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"disallowIncomingXRP\",\"url\":\"interfaces/AccountInfoAccountFlags.html#disallowIncomingXRP\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"globalFreeze\",\"url\":\"interfaces/AccountInfoAccountFlags.html#globalFreeze\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"noFreeze\",\"url\":\"interfaces/AccountInfoAccountFlags.html#noFreeze\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"passwordSpent\",\"url\":\"interfaces/AccountInfoAccountFlags.html#passwordSpent\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"requireAuthorization\",\"url\":\"interfaces/AccountInfoAccountFlags.html#requireAuthorization\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"requireDestinationTag\",\"url\":\"interfaces/AccountInfoAccountFlags.html#requireDestinationTag\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":1024,\"name\":\"allowTrustLineClawback\",\"url\":\"interfaces/AccountInfoAccountFlags.html#allowTrustLineClawback\",\"classes\":\"\",\"parent\":\"AccountInfoAccountFlags\"},{\"kind\":256,\"name\":\"AccountInfoRequest\",\"url\":\"interfaces/AccountInfoRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountInfoRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountInfoRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"queue\",\"url\":\"interfaces/AccountInfoRequest.html#queue\",\"classes\":\"\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"signer_lists\",\"url\":\"interfaces/AccountInfoRequest.html#signer_lists\",\"classes\":\"\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"strict\",\"url\":\"interfaces/AccountInfoRequest.html#strict\",\"classes\":\"\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountInfoRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountInfoRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountInfoRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountInfoRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoRequest\"},{\"kind\":256,\"name\":\"AccountInfoResponse\",\"url\":\"interfaces/AccountInfoResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountInfoResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountInfoResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result\"},{\"kind\":1024,\"name\":\"account_data\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.account_data\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"account_flags\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.account_flags\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"queue_data\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.queue_data\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountInfoResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountInfoResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountInfoResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountInfoResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountInfoResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountInfoResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountInfoResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountInfoResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountInfoResponse\"},{\"kind\":256,\"name\":\"AccountQueueData\",\"url\":\"interfaces/AccountQueueData.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"txn_count\",\"url\":\"interfaces/AccountQueueData.html#txn_count\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":1024,\"name\":\"auth_change_queued\",\"url\":\"interfaces/AccountQueueData.html#auth_change_queued\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":1024,\"name\":\"lowest_sequence\",\"url\":\"interfaces/AccountQueueData.html#lowest_sequence\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":1024,\"name\":\"highest_sequence\",\"url\":\"interfaces/AccountQueueData.html#highest_sequence\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":1024,\"name\":\"max_spend_drops_total\",\"url\":\"interfaces/AccountQueueData.html#max_spend_drops_total\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/AccountQueueData.html#transactions\",\"classes\":\"\",\"parent\":\"AccountQueueData\"},{\"kind\":256,\"name\":\"AccountQueueTransaction\",\"url\":\"interfaces/AccountQueueTransaction.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"auth_change\",\"url\":\"interfaces/AccountQueueTransaction.html#auth_change\",\"classes\":\"\",\"parent\":\"AccountQueueTransaction\"},{\"kind\":1024,\"name\":\"fee\",\"url\":\"interfaces/AccountQueueTransaction.html#fee\",\"classes\":\"\",\"parent\":\"AccountQueueTransaction\"},{\"kind\":1024,\"name\":\"fee_level\",\"url\":\"interfaces/AccountQueueTransaction.html#fee_level\",\"classes\":\"\",\"parent\":\"AccountQueueTransaction\"},{\"kind\":1024,\"name\":\"max_spend_drops\",\"url\":\"interfaces/AccountQueueTransaction.html#max_spend_drops\",\"classes\":\"\",\"parent\":\"AccountQueueTransaction\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/AccountQueueTransaction.html#seq\",\"classes\":\"\",\"parent\":\"AccountQueueTransaction\"},{\"kind\":256,\"name\":\"AccountLinesRequest\",\"url\":\"interfaces/AccountLinesRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountLinesRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountLinesRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"peer\",\"url\":\"interfaces/AccountLinesRequest.html#peer\",\"classes\":\"\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountLinesRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountLinesRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountLinesRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountLinesRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountLinesRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountLinesRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesRequest\"},{\"kind\":256,\"name\":\"AccountLinesResponse\",\"url\":\"interfaces/AccountLinesResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountLinesResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountLinesResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"lines\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.lines\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountLinesResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountLinesResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountLinesResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountLinesResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountLinesResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountLinesResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountLinesResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountLinesResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountLinesResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountLinesResponse\"},{\"kind\":256,\"name\":\"AccountLinesTrustline\",\"url\":\"interfaces/AccountLinesTrustline.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountLinesTrustline.html#account\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"balance\",\"url\":\"interfaces/AccountLinesTrustline.html#balance\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/AccountLinesTrustline.html#currency\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountLinesTrustline.html#limit\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"limit_peer\",\"url\":\"interfaces/AccountLinesTrustline.html#limit_peer\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"quality_in\",\"url\":\"interfaces/AccountLinesTrustline.html#quality_in\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"quality_out\",\"url\":\"interfaces/AccountLinesTrustline.html#quality_out\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"no_ripple\",\"url\":\"interfaces/AccountLinesTrustline.html#no_ripple\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"no_ripple_peer\",\"url\":\"interfaces/AccountLinesTrustline.html#no_ripple_peer\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"authorized\",\"url\":\"interfaces/AccountLinesTrustline.html#authorized\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"peer_authorized\",\"url\":\"interfaces/AccountLinesTrustline.html#peer_authorized\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"freeze\",\"url\":\"interfaces/AccountLinesTrustline.html#freeze\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":1024,\"name\":\"freeze_peer\",\"url\":\"interfaces/AccountLinesTrustline.html#freeze_peer\",\"classes\":\"\",\"parent\":\"AccountLinesTrustline\"},{\"kind\":256,\"name\":\"AccountNFToken\",\"url\":\"interfaces/AccountNFToken.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AccountNFToken.html#Flags\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":1024,\"name\":\"Issuer\",\"url\":\"interfaces/AccountNFToken.html#Issuer\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":1024,\"name\":\"NFTokenID\",\"url\":\"interfaces/AccountNFToken.html#NFTokenID\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":1024,\"name\":\"NFTokenTaxon\",\"url\":\"interfaces/AccountNFToken.html#NFTokenTaxon\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":1024,\"name\":\"URI\",\"url\":\"interfaces/AccountNFToken.html#URI\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":1024,\"name\":\"nft_serial\",\"url\":\"interfaces/AccountNFToken.html#nft_serial\",\"classes\":\"\",\"parent\":\"AccountNFToken\"},{\"kind\":256,\"name\":\"AccountNFTsRequest\",\"url\":\"interfaces/AccountNFTsRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountNFTsRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountNFTsRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountNFTsRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountNFTsRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountNFTsRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountNFTsRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountNFTsRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountNFTsRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsRequest\"},{\"kind\":256,\"name\":\"AccountNFTsResponse\",\"url\":\"interfaces/AccountNFTsResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountNFTsResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"account_nfts\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.account_nfts\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountNFTsResponse.html#result.__type.limit\",\"classes\":\"\",\"parent\":\"AccountNFTsResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountNFTsResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountNFTsResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountNFTsResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountNFTsResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountNFTsResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountNFTsResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountNFTsResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountNFTsResponse\"},{\"kind\":2097152,\"name\":\"AccountObject\",\"url\":\"types/AccountObject.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"AccountObjectType\",\"url\":\"types/AccountObjectType.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"AccountObjectsRequest\",\"url\":\"interfaces/AccountObjectsRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountObjectsRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountObjectsRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountObjectsRequest.html#type\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"deletion_blockers_only\",\"url\":\"interfaces/AccountObjectsRequest.html#deletion_blockers_only\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountObjectsRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountObjectsRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountObjectsRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountObjectsRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountObjectsRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountObjectsRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsRequest\"},{\"kind\":256,\"name\":\"AccountObjectsResponse\",\"url\":\"interfaces/AccountObjectsResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountObjectsResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"account_objects\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.account_objects\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.limit\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountObjectsResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountObjectsResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountObjectsResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountObjectsResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountObjectsResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountObjectsResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountObjectsResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountObjectsResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountObjectsResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountObjectsResponse\"},{\"kind\":256,\"name\":\"AccountOffer\",\"url\":\"interfaces/AccountOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/AccountOffer.html#flags\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/AccountOffer.html#seq\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":1024,\"name\":\"taker_gets\",\"url\":\"interfaces/AccountOffer.html#taker_gets\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":1024,\"name\":\"taker_pays\",\"url\":\"interfaces/AccountOffer.html#taker_pays\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":1024,\"name\":\"quality\",\"url\":\"interfaces/AccountOffer.html#quality\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":1024,\"name\":\"expiration\",\"url\":\"interfaces/AccountOffer.html#expiration\",\"classes\":\"\",\"parent\":\"AccountOffer\"},{\"kind\":256,\"name\":\"AccountOffersRequest\",\"url\":\"interfaces/AccountOffersRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountOffersRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountOffersRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountOffersRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountOffersRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"strict\",\"url\":\"interfaces/AccountOffersRequest.html#strict\",\"classes\":\"\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountOffersRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountOffersRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountOffersRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountOffersRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersRequest\"},{\"kind\":256,\"name\":\"AccountOffersResponse\",\"url\":\"interfaces/AccountOffersResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountOffersResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountOffersResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"offers\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.offers\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountOffersResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountOffersResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountOffersResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountOffersResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountOffersResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountOffersResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountOffersResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountOffersResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountOffersResponse\"},{\"kind\":256,\"name\":\"AccountTxRequest\",\"url\":\"interfaces/AccountTxRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AccountTxRequest.html#command\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountTxRequest.html#account\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"ledger_index_min\",\"url\":\"interfaces/AccountTxRequest.html#ledger_index_min\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"ledger_index_max\",\"url\":\"interfaces/AccountTxRequest.html#ledger_index_max\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/AccountTxRequest.html#binary\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"interfaces/AccountTxRequest.html#forward\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountTxRequest.html#limit\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountTxRequest.html#marker\",\"classes\":\"\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountTxRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountTxRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AccountTxRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountTxRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxRequest\"},{\"kind\":256,\"name\":\"AccountTxResponse\",\"url\":\"interfaces/AccountTxResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AccountTxResponse.html#result\",\"classes\":\"\",\"parent\":\"AccountTxResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AccountTxResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index_min\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.ledger_index_min\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index_max\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.ledger_index_max\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.limit\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.transactions\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountTxResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AccountTxResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AccountTxResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AccountTxResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AccountTxResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AccountTxResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AccountTxResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AccountTxResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AccountTxResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountTxResponse\"},{\"kind\":256,\"name\":\"AccountTxTransaction\",\"url\":\"interfaces/AccountTxTransaction.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AccountTxTransaction.html#ledger_index\",\"classes\":\"\",\"parent\":\"AccountTxTransaction\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/AccountTxTransaction.html#meta\",\"classes\":\"\",\"parent\":\"AccountTxTransaction\"},{\"kind\":1024,\"name\":\"tx\",\"url\":\"interfaces/AccountTxTransaction.html#tx\",\"classes\":\"\",\"parent\":\"AccountTxTransaction\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"interfaces/AccountTxTransaction.html#tx_blob\",\"classes\":\"\",\"parent\":\"AccountTxTransaction\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AccountTxTransaction.html#validated\",\"classes\":\"\",\"parent\":\"AccountTxTransaction\"},{\"kind\":256,\"name\":\"GatewayBalance\",\"url\":\"interfaces/GatewayBalance.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/GatewayBalance.html#currency\",\"classes\":\"\",\"parent\":\"GatewayBalance\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"interfaces/GatewayBalance.html#value\",\"classes\":\"\",\"parent\":\"GatewayBalance\"},{\"kind\":256,\"name\":\"GatewayBalancesRequest\",\"url\":\"interfaces/GatewayBalancesRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/GatewayBalancesRequest.html#command\",\"classes\":\"\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/GatewayBalancesRequest.html#account\",\"classes\":\"\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"strict\",\"url\":\"interfaces/GatewayBalancesRequest.html#strict\",\"classes\":\"\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"hotwallet\",\"url\":\"interfaces/GatewayBalancesRequest.html#hotwallet\",\"classes\":\"\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/GatewayBalancesRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/GatewayBalancesRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/GatewayBalancesRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/GatewayBalancesRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesRequest\"},{\"kind\":256,\"name\":\"GatewayBalancesResponse\",\"url\":\"interfaces/GatewayBalancesResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/GatewayBalancesResponse.html#result\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.account\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":1024,\"name\":\"obligations\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.obligations\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.obligations.__type-3\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type.obligations\"},{\"kind\":1024,\"name\":\"balances\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.balances\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.balances.__type-2\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type.balances\"},{\"kind\":1024,\"name\":\"assets\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.assets\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.assets.__type-1\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type.assets\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/GatewayBalancesResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"GatewayBalancesResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/GatewayBalancesResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/GatewayBalancesResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/GatewayBalancesResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/GatewayBalancesResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/GatewayBalancesResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/GatewayBalancesResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/GatewayBalancesResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"GatewayBalancesResponse\"},{\"kind\":256,\"name\":\"NoRippleCheckRequest\",\"url\":\"interfaces/NoRippleCheckRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/NoRippleCheckRequest.html#command\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/NoRippleCheckRequest.html#account\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"role\",\"url\":\"interfaces/NoRippleCheckRequest.html#role\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/NoRippleCheckRequest.html#transactions\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/NoRippleCheckRequest.html#limit\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/NoRippleCheckRequest.html#ledger_hash\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NoRippleCheckRequest.html#ledger_index\",\"classes\":\"\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NoRippleCheckRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NoRippleCheckRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckRequest\"},{\"kind\":256,\"name\":\"NoRippleCheckResponse\",\"url\":\"interfaces/NoRippleCheckResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/NoRippleCheckResponse.html#result\",\"classes\":\"\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/NoRippleCheckResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"NoRippleCheckResponse.result\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/NoRippleCheckResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"NoRippleCheckResponse.result.__type\"},{\"kind\":1024,\"name\":\"problems\",\"url\":\"interfaces/NoRippleCheckResponse.html#result.__type.problems\",\"classes\":\"\",\"parent\":\"NoRippleCheckResponse.result.__type\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/NoRippleCheckResponse.html#result.__type.transactions\",\"classes\":\"\",\"parent\":\"NoRippleCheckResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NoRippleCheckResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/NoRippleCheckResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NoRippleCheckResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/NoRippleCheckResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/NoRippleCheckResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/NoRippleCheckResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NoRippleCheckResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NoRippleCheckResponse\"},{\"kind\":256,\"name\":\"LedgerRequest\",\"url\":\"interfaces/LedgerRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/LedgerRequest.html#command\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"full\",\"url\":\"interfaces/LedgerRequest.html#full\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"accounts\",\"url\":\"interfaces/LedgerRequest.html#accounts\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/LedgerRequest.html#transactions\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"expand\",\"url\":\"interfaces/LedgerRequest.html#expand\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"owner_funds\",\"url\":\"interfaces/LedgerRequest.html#owner_funds\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/LedgerRequest.html#binary\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"queue\",\"url\":\"interfaces/LedgerRequest.html#queue\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerRequest.html#type\",\"classes\":\"\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerRequest\"},{\"kind\":256,\"name\":\"LedgerResponse\",\"url\":\"interfaces/LedgerResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/LedgerResponse.html#result\",\"classes\":\"\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/LedgerResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/LedgerResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/LedgerResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/LedgerResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerResponse\"},{\"kind\":256,\"name\":\"LedgerQueueData\",\"url\":\"interfaces/LedgerQueueData.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/LedgerQueueData.html#account\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"tx\",\"url\":\"interfaces/LedgerQueueData.html#tx\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"retries_remaining\",\"url\":\"interfaces/LedgerQueueData.html#retries_remaining\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"preflight_result\",\"url\":\"interfaces/LedgerQueueData.html#preflight_result\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"last_result\",\"url\":\"interfaces/LedgerQueueData.html#last_result\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"auth_change\",\"url\":\"interfaces/LedgerQueueData.html#auth_change\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"fee\",\"url\":\"interfaces/LedgerQueueData.html#fee\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"fee_level\",\"url\":\"interfaces/LedgerQueueData.html#fee_level\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":1024,\"name\":\"max_spend_drops\",\"url\":\"interfaces/LedgerQueueData.html#max_spend_drops\",\"classes\":\"\",\"parent\":\"LedgerQueueData\"},{\"kind\":256,\"name\":\"LedgerBinary\",\"url\":\"interfaces/LedgerBinary.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"accountState\",\"url\":\"interfaces/LedgerBinary.html#accountState\",\"classes\":\"\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/LedgerBinary.html#transactions\",\"classes\":\"\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"closed\",\"url\":\"interfaces/LedgerBinary.html#closed\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerBinary.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerBinary.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"account_hash\",\"url\":\"interfaces/LedgerBinary.html#account_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"close_flags\",\"url\":\"interfaces/LedgerBinary.html#close_flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"close_time\",\"url\":\"interfaces/LedgerBinary.html#close_time\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"close_time_human\",\"url\":\"interfaces/LedgerBinary.html#close_time_human\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"close_time_resolution\",\"url\":\"interfaces/LedgerBinary.html#close_time_resolution\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"parent_close_time\",\"url\":\"interfaces/LedgerBinary.html#parent_close_time\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"parent_hash\",\"url\":\"interfaces/LedgerBinary.html#parent_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"total_coins\",\"url\":\"interfaces/LedgerBinary.html#total_coins\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":1024,\"name\":\"transaction_hash\",\"url\":\"interfaces/LedgerBinary.html#transaction_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerBinary\"},{\"kind\":256,\"name\":\"LedgerModifiedOfferCreateTransaction\",\"url\":\"interfaces/LedgerModifiedOfferCreateTransaction.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"transaction\",\"url\":\"interfaces/LedgerModifiedOfferCreateTransaction.html#transaction\",\"classes\":\"\",\"parent\":\"LedgerModifiedOfferCreateTransaction\"},{\"kind\":1024,\"name\":\"metadata\",\"url\":\"interfaces/LedgerModifiedOfferCreateTransaction.html#metadata\",\"classes\":\"\",\"parent\":\"LedgerModifiedOfferCreateTransaction\"},{\"kind\":256,\"name\":\"LedgerClosedRequest\",\"url\":\"interfaces/LedgerClosedRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/LedgerClosedRequest.html#command\",\"classes\":\"\",\"parent\":\"LedgerClosedRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerClosedRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerClosedRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedRequest\"},{\"kind\":256,\"name\":\"LedgerClosedResponse\",\"url\":\"interfaces/LedgerClosedResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/LedgerClosedResponse.html#result\",\"classes\":\"\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerClosedResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"LedgerClosedResponse.result\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerClosedResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"LedgerClosedResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerClosedResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"LedgerClosedResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerClosedResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/LedgerClosedResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerClosedResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/LedgerClosedResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/LedgerClosedResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/LedgerClosedResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerClosedResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerClosedResponse\"},{\"kind\":256,\"name\":\"LedgerCurrentRequest\",\"url\":\"interfaces/LedgerCurrentRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/LedgerCurrentRequest.html#command\",\"classes\":\"\",\"parent\":\"LedgerCurrentRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerCurrentRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerCurrentRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentRequest\"},{\"kind\":256,\"name\":\"LedgerCurrentResponse\",\"url\":\"interfaces/LedgerCurrentResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/LedgerCurrentResponse.html#result\",\"classes\":\"\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerCurrentResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"LedgerCurrentResponse.result\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/LedgerCurrentResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"LedgerCurrentResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerCurrentResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/LedgerCurrentResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerCurrentResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/LedgerCurrentResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/LedgerCurrentResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/LedgerCurrentResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerCurrentResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerCurrentResponse\"},{\"kind\":256,\"name\":\"LedgerDataRequest\",\"url\":\"interfaces/LedgerDataRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/LedgerDataRequest.html#command\",\"classes\":\"\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/LedgerDataRequest.html#binary\",\"classes\":\"\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/LedgerDataRequest.html#limit\",\"classes\":\"\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/LedgerDataRequest.html#marker\",\"classes\":\"\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerDataRequest.html#type\",\"classes\":\"\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerDataRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerDataRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerDataRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerDataRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataRequest\"},{\"kind\":2097152,\"name\":\"LedgerDataLabeledLedgerEntry\",\"url\":\"types/LedgerDataLabeledLedgerEntry.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"LedgerDataBinaryLedgerEntry\",\"url\":\"interfaces/LedgerDataBinaryLedgerEntry.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"interfaces/LedgerDataBinaryLedgerEntry.html#data\",\"classes\":\"\",\"parent\":\"LedgerDataBinaryLedgerEntry\"},{\"kind\":256,\"name\":\"LedgerDataResponse\",\"url\":\"interfaces/LedgerDataResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/LedgerDataResponse.html#result\",\"classes\":\"\",\"parent\":\"LedgerDataResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result.__type\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type.state\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/LedgerDataResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"LedgerDataResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerDataResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/LedgerDataResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerDataResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/LedgerDataResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/LedgerDataResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/LedgerDataResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerDataResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerDataResponse\"},{\"kind\":2097152,\"name\":\"LedgerDataLedgerState\",\"url\":\"types/LedgerDataLedgerState.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"LedgerEntryRequest\",\"url\":\"interfaces/LedgerEntryRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/LedgerEntryRequest.html#command\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"amm\",\"url\":\"interfaces/LedgerEntryRequest.html#amm\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm\"},{\"kind\":1024,\"name\":\"asset\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset.__type-1\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset.__type-1.currency\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset.__type\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset.__type-1.issuer\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset.__type\"},{\"kind\":1024,\"name\":\"asset2\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset2\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset2.__type-2\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset2\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset2.__type-2.currency-1\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset2.__type\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/LedgerEntryRequest.html#amm.__type.asset2.__type-2.issuer-1\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.amm.__type.asset2.__type\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/LedgerEntryRequest.html#binary\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntryRequest.html#index\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"account_root\",\"url\":\"interfaces/LedgerEntryRequest.html#account_root\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"check\",\"url\":\"interfaces/LedgerEntryRequest.html#check\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"deposit_preauth\",\"url\":\"interfaces/LedgerEntryRequest.html#deposit_preauth\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"did\",\"url\":\"interfaces/LedgerEntryRequest.html#did\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"directory\",\"url\":\"interfaces/LedgerEntryRequest.html#directory\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"escrow\",\"url\":\"interfaces/LedgerEntryRequest.html#escrow\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"offer\",\"url\":\"interfaces/LedgerEntryRequest.html#offer\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"payment_channel\",\"url\":\"interfaces/LedgerEntryRequest.html#payment_channel\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"ripple_state\",\"url\":\"interfaces/LedgerEntryRequest.html#ripple_state\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntryRequest.html#ripple_state.__type-3\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.ripple_state\"},{\"kind\":1024,\"name\":\"accounts\",\"url\":\"interfaces/LedgerEntryRequest.html#ripple_state.__type-3.accounts\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.ripple_state.__type\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/LedgerEntryRequest.html#ripple_state.__type-3.currency-2\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest.ripple_state.__type\"},{\"kind\":1024,\"name\":\"ticket\",\"url\":\"interfaces/LedgerEntryRequest.html#ticket\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"nft_page\",\"url\":\"interfaces/LedgerEntryRequest.html#nft_page\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"bridge_account\",\"url\":\"interfaces/LedgerEntryRequest.html#bridge_account\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"bridge\",\"url\":\"interfaces/LedgerEntryRequest.html#bridge\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"xchain_owned_claim_id\",\"url\":\"interfaces/LedgerEntryRequest.html#xchain_owned_claim_id\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"xchain_owned_create_account_claim_id\",\"url\":\"interfaces/LedgerEntryRequest.html#xchain_owned_create_account_claim_id\",\"classes\":\"\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerEntryRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerEntryRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerEntryRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerEntryRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryRequest\"},{\"kind\":256,\"name\":\"LedgerEntryResponse\",\"url\":\"interfaces/LedgerEntryResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/LedgerEntryResponse.html#result\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type.index\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"node\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type.node\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"node_binary\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type.node_binary\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/LedgerEntryResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"LedgerEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/LedgerEntryResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/LedgerEntryResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerEntryResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/LedgerEntryResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/LedgerEntryResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/LedgerEntryResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/LedgerEntryResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"LedgerEntryResponse\"},{\"kind\":256,\"name\":\"SubmitRequest\",\"url\":\"interfaces/SubmitRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/SubmitRequest.html#command\",\"classes\":\"\",\"parent\":\"SubmitRequest\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"interfaces/SubmitRequest.html#tx_blob\",\"classes\":\"\",\"parent\":\"SubmitRequest\"},{\"kind\":1024,\"name\":\"fail_hard\",\"url\":\"interfaces/SubmitRequest.html#fail_hard\",\"classes\":\"\",\"parent\":\"SubmitRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubmitRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubmitRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitRequest\"},{\"kind\":256,\"name\":\"SubmitResponse\",\"url\":\"interfaces/SubmitResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/SubmitResponse.html#result\",\"classes\":\"\",\"parent\":\"SubmitResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/SubmitResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"SubmitResponse.result\"},{\"kind\":1024,\"name\":\"engine_result\",\"url\":\"interfaces/SubmitResponse.html#result.__type.engine_result\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"engine_result_code\",\"url\":\"interfaces/SubmitResponse.html#result.__type.engine_result_code\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"engine_result_message\",\"url\":\"interfaces/SubmitResponse.html#result.__type.engine_result_message\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"interfaces/SubmitResponse.html#result.__type.tx_blob\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"tx_json\",\"url\":\"interfaces/SubmitResponse.html#result.__type.tx_json\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"accepted\",\"url\":\"interfaces/SubmitResponse.html#result.__type.accepted\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"account_sequence_available\",\"url\":\"interfaces/SubmitResponse.html#result.__type.account_sequence_available\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"account_sequence_next\",\"url\":\"interfaces/SubmitResponse.html#result.__type.account_sequence_next\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"applied\",\"url\":\"interfaces/SubmitResponse.html#result.__type.applied\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"broadcast\",\"url\":\"interfaces/SubmitResponse.html#result.__type.broadcast\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"kept\",\"url\":\"interfaces/SubmitResponse.html#result.__type.kept\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"queued\",\"url\":\"interfaces/SubmitResponse.html#result.__type.queued\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"open_ledger_cost\",\"url\":\"interfaces/SubmitResponse.html#result.__type.open_ledger_cost\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated_ledger_index\",\"url\":\"interfaces/SubmitResponse.html#result.__type.validated_ledger_index\",\"classes\":\"\",\"parent\":\"SubmitResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubmitResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/SubmitResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/SubmitResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/SubmitResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/SubmitResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/SubmitResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubmitResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitResponse\"},{\"kind\":256,\"name\":\"SubmitMultisignedRequest\",\"url\":\"interfaces/SubmitMultisignedRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/SubmitMultisignedRequest.html#command\",\"classes\":\"\",\"parent\":\"SubmitMultisignedRequest\"},{\"kind\":1024,\"name\":\"tx_json\",\"url\":\"interfaces/SubmitMultisignedRequest.html#tx_json\",\"classes\":\"\",\"parent\":\"SubmitMultisignedRequest\"},{\"kind\":1024,\"name\":\"fail_hard\",\"url\":\"interfaces/SubmitMultisignedRequest.html#fail_hard\",\"classes\":\"\",\"parent\":\"SubmitMultisignedRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubmitMultisignedRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubmitMultisignedRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedRequest\"},{\"kind\":256,\"name\":\"SubmitMultisignedResponse\",\"url\":\"interfaces/SubmitMultisignedResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result\"},{\"kind\":1024,\"name\":\"engine_result\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type.engine_result\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result.__type\"},{\"kind\":1024,\"name\":\"engine_result_code\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type.engine_result_code\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result.__type\"},{\"kind\":1024,\"name\":\"engine_result_message\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type.engine_result_message\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result.__type\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type.tx_blob\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result.__type\"},{\"kind\":1024,\"name\":\"tx_json\",\"url\":\"interfaces/SubmitMultisignedResponse.html#result.__type.tx_json\",\"classes\":\"\",\"parent\":\"SubmitMultisignedResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubmitMultisignedResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/SubmitMultisignedResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/SubmitMultisignedResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/SubmitMultisignedResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/SubmitMultisignedResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/SubmitMultisignedResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubmitMultisignedResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubmitMultisignedResponse\"},{\"kind\":256,\"name\":\"TransactionEntryRequest\",\"url\":\"interfaces/TransactionEntryRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/TransactionEntryRequest.html#command\",\"classes\":\"\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":1024,\"name\":\"tx_hash\",\"url\":\"interfaces/TransactionEntryRequest.html#tx_hash\",\"classes\":\"\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/TransactionEntryRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/TransactionEntryRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/TransactionEntryRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/TransactionEntryRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryRequest\"},{\"kind\":256,\"name\":\"TransactionEntryResponse\",\"url\":\"interfaces/TransactionEntryResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/TransactionEntryResponse.html#result\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/TransactionEntryResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse.result\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/TransactionEntryResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/TransactionEntryResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"metadata\",\"url\":\"interfaces/TransactionEntryResponse.html#result.__type.metadata\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"tx_json\",\"url\":\"interfaces/TransactionEntryResponse.html#result.__type.tx_json\",\"classes\":\"\",\"parent\":\"TransactionEntryResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/TransactionEntryResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/TransactionEntryResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TransactionEntryResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/TransactionEntryResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/TransactionEntryResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/TransactionEntryResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/TransactionEntryResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TransactionEntryResponse\"},{\"kind\":256,\"name\":\"TxRequest\",\"url\":\"interfaces/TxRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/TxRequest.html#command\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"transaction\",\"url\":\"interfaces/TxRequest.html#transaction\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"ctid\",\"url\":\"interfaces/TxRequest.html#ctid\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/TxRequest.html#binary\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"min_ledger\",\"url\":\"interfaces/TxRequest.html#min_ledger\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"max_ledger\",\"url\":\"interfaces/TxRequest.html#max_ledger\",\"classes\":\"\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/TxRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/TxRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxRequest\"},{\"kind\":256,\"name\":\"TxResponse\",\"url\":\"interfaces/TxResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/TxResponse.html#result\",\"classes\":\"\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"searched_all\",\"url\":\"interfaces/TxResponse.html#searched_all\",\"classes\":\"\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/TxResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/TxResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TxResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/TxResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/TxResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/TxResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/TxResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TxResponse\"},{\"kind\":256,\"name\":\"BookOffersRequest\",\"url\":\"interfaces/BookOffersRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/BookOffersRequest.html#command\",\"classes\":\"\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/BookOffersRequest.html#limit\",\"classes\":\"\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"taker\",\"url\":\"interfaces/BookOffersRequest.html#taker\",\"classes\":\"\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"taker_gets\",\"url\":\"interfaces/BookOffersRequest.html#taker_gets\",\"classes\":\"\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"taker_pays\",\"url\":\"interfaces/BookOffersRequest.html#taker_pays\",\"classes\":\"\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BookOffersRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/BookOffersRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/BookOffersRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/BookOffersRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersRequest\"},{\"kind\":256,\"name\":\"BookOffer\",\"url\":\"interfaces/BookOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"owner_funds\",\"url\":\"interfaces/BookOffer.html#owner_funds\",\"classes\":\"\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"taker_gets_funded\",\"url\":\"interfaces/BookOffer.html#taker_gets_funded\",\"classes\":\"\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"taker_pays_funded\",\"url\":\"interfaces/BookOffer.html#taker_pays_funded\",\"classes\":\"\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"quality\",\"url\":\"interfaces/BookOffer.html#quality\",\"classes\":\"\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/BookOffer.html#LedgerEntryType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/BookOffer.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/BookOffer.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/BookOffer.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"TakerPays\",\"url\":\"interfaces/BookOffer.html#TakerPays\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"TakerGets\",\"url\":\"interfaces/BookOffer.html#TakerGets\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"BookDirectory\",\"url\":\"interfaces/BookOffer.html#BookDirectory\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"BookNode\",\"url\":\"interfaces/BookOffer.html#BookNode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"OwnerNode\",\"url\":\"interfaces/BookOffer.html#OwnerNode\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/BookOffer.html#Expiration\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"index\",\"url\":\"interfaces/BookOffer.html#index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/BookOffer.html#PreviousTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/BookOffer.html#PreviousTxnLgrSeq\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffer\"},{\"kind\":256,\"name\":\"BookOfferCurrency\",\"url\":\"interfaces/BookOfferCurrency.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/BookOfferCurrency.html#currency\",\"classes\":\"\",\"parent\":\"BookOfferCurrency\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/BookOfferCurrency.html#issuer\",\"classes\":\"\",\"parent\":\"BookOfferCurrency\"},{\"kind\":256,\"name\":\"BookOffersResponse\",\"url\":\"interfaces/BookOffersResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/BookOffersResponse.html#result\",\"classes\":\"\",\"parent\":\"BookOffersResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/BookOffersResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/BookOffersResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/BookOffersResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/BookOffersResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"offers\",\"url\":\"interfaces/BookOffersResponse.html#result.__type.offers\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/BookOffersResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"BookOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/BookOffersResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/BookOffersResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/BookOffersResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/BookOffersResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/BookOffersResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/BookOffersResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/BookOffersResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"BookOffersResponse\"},{\"kind\":256,\"name\":\"DepositAuthorizedRequest\",\"url\":\"interfaces/DepositAuthorizedRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/DepositAuthorizedRequest.html#command\",\"classes\":\"\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/DepositAuthorizedRequest.html#source_account\",\"classes\":\"\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/DepositAuthorizedRequest.html#destination_account\",\"classes\":\"\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/DepositAuthorizedRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/DepositAuthorizedRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/DepositAuthorizedRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/DepositAuthorizedRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedRequest\"},{\"kind\":256,\"name\":\"DepositAuthorizedResponse\",\"url\":\"interfaces/DepositAuthorizedResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result\"},{\"kind\":1024,\"name\":\"deposit_authorized\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.deposit_authorized\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.destination_account\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.source_account\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/DepositAuthorizedResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"DepositAuthorizedResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/DepositAuthorizedResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/DepositAuthorizedResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/DepositAuthorizedResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/DepositAuthorizedResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/DepositAuthorizedResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/DepositAuthorizedResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/DepositAuthorizedResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositAuthorizedResponse\"},{\"kind\":2097152,\"name\":\"PathFindRequest\",\"url\":\"types/PathFindRequest.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"PathFindCreateRequest\",\"url\":\"interfaces/PathFindCreateRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"subcommand\",\"url\":\"interfaces/PathFindCreateRequest.html#subcommand\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/PathFindCreateRequest.html#source_account\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/PathFindCreateRequest.html#destination_account\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/PathFindCreateRequest.html#destination_amount\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"send_max\",\"url\":\"interfaces/PathFindCreateRequest.html#send_max\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"paths\",\"url\":\"interfaces/PathFindCreateRequest.html#paths\",\"classes\":\"\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/PathFindCreateRequest.html#command\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindCreateRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PathFindCreateRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCreateRequest\"},{\"kind\":256,\"name\":\"PathFindCloseRequest\",\"url\":\"interfaces/PathFindCloseRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"subcommand\",\"url\":\"interfaces/PathFindCloseRequest.html#subcommand\",\"classes\":\"\",\"parent\":\"PathFindCloseRequest\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/PathFindCloseRequest.html#command\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCloseRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindCloseRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCloseRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PathFindCloseRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindCloseRequest\"},{\"kind\":256,\"name\":\"PathFindPathOption\",\"url\":\"interfaces/PathFindPathOption.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"paths_computed\",\"url\":\"interfaces/PathFindPathOption.html#paths_computed\",\"classes\":\"\",\"parent\":\"PathFindPathOption\"},{\"kind\":1024,\"name\":\"source_amount\",\"url\":\"interfaces/PathFindPathOption.html#source_amount\",\"classes\":\"\",\"parent\":\"PathFindPathOption\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/PathFindPathOption.html#destination_amount\",\"classes\":\"\",\"parent\":\"PathFindPathOption\"},{\"kind\":256,\"name\":\"PathFindStatusRequest\",\"url\":\"interfaces/PathFindStatusRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"subcommand\",\"url\":\"interfaces/PathFindStatusRequest.html#subcommand\",\"classes\":\"\",\"parent\":\"PathFindStatusRequest\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/PathFindStatusRequest.html#command\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindStatusRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindStatusRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindStatusRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PathFindStatusRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindStatusRequest\"},{\"kind\":256,\"name\":\"PathFindResponse\",\"url\":\"interfaces/PathFindResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/PathFindResponse.html#result\",\"classes\":\"\",\"parent\":\"PathFindResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PathFindResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"PathFindResponse.result\"},{\"kind\":1024,\"name\":\"alternatives\",\"url\":\"interfaces/PathFindResponse.html#result.__type.alternatives\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/PathFindResponse.html#result.__type.destination_account\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/PathFindResponse.html#result.__type.destination_amount\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/PathFindResponse.html#result.__type.source_account\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"full_reply\",\"url\":\"interfaces/PathFindResponse.html#result.__type.full_reply\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindResponse.html#result.__type.id-1\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"closed\",\"url\":\"interfaces/PathFindResponse.html#result.__type.closed\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/PathFindResponse.html#result.__type.status\",\"classes\":\"\",\"parent\":\"PathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/PathFindResponse.html#status-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/PathFindResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/PathFindResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/PathFindResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/PathFindResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PathFindResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PathFindResponse\"},{\"kind\":256,\"name\":\"RipplePathFindPathOption\",\"url\":\"interfaces/RipplePathFindPathOption.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"paths_computed\",\"url\":\"interfaces/RipplePathFindPathOption.html#paths_computed\",\"classes\":\"\",\"parent\":\"RipplePathFindPathOption\"},{\"kind\":1024,\"name\":\"source_amount\",\"url\":\"interfaces/RipplePathFindPathOption.html#source_amount\",\"classes\":\"\",\"parent\":\"RipplePathFindPathOption\"},{\"kind\":256,\"name\":\"RipplePathFindRequest\",\"url\":\"interfaces/RipplePathFindRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/RipplePathFindRequest.html#command\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/RipplePathFindRequest.html#source_account\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/RipplePathFindRequest.html#destination_account\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/RipplePathFindRequest.html#destination_amount\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"send_max\",\"url\":\"interfaces/RipplePathFindRequest.html#send_max\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"source_currencies\",\"url\":\"interfaces/RipplePathFindRequest.html#source_currencies\",\"classes\":\"\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RipplePathFindRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/RipplePathFindRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/RipplePathFindRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/RipplePathFindRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindRequest\"},{\"kind\":256,\"name\":\"RipplePathFindResponse\",\"url\":\"interfaces/RipplePathFindResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/RipplePathFindResponse.html#result\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result\"},{\"kind\":1024,\"name\":\"alternatives\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.alternatives\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.destination_account\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_currencies\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.destination_currencies\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.destination_amount\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"full_reply\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.full_reply\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.id-1\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.source_account\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/RipplePathFindResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"RipplePathFindResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RipplePathFindResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/RipplePathFindResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/RipplePathFindResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/RipplePathFindResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/RipplePathFindResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/RipplePathFindResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/RipplePathFindResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RipplePathFindResponse\"},{\"kind\":256,\"name\":\"SourceCurrencyAmount\",\"url\":\"interfaces/SourceCurrencyAmount.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/SourceCurrencyAmount.html#currency\",\"classes\":\"\",\"parent\":\"SourceCurrencyAmount\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/SourceCurrencyAmount.html#issuer\",\"classes\":\"\",\"parent\":\"SourceCurrencyAmount\"},{\"kind\":256,\"name\":\"ChannelVerifyRequest\",\"url\":\"interfaces/ChannelVerifyRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/ChannelVerifyRequest.html#command\",\"classes\":\"\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"amount\",\"url\":\"interfaces/ChannelVerifyRequest.html#amount\",\"classes\":\"\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"channel_id\",\"url\":\"interfaces/ChannelVerifyRequest.html#channel_id\",\"classes\":\"\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"public_key\",\"url\":\"interfaces/ChannelVerifyRequest.html#public_key\",\"classes\":\"\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"signature\",\"url\":\"interfaces/ChannelVerifyRequest.html#signature\",\"classes\":\"\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ChannelVerifyRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ChannelVerifyRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyRequest\"},{\"kind\":256,\"name\":\"ChannelVerifyResponse\",\"url\":\"interfaces/ChannelVerifyResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/ChannelVerifyResponse.html#result\",\"classes\":\"\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ChannelVerifyResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"ChannelVerifyResponse.result\"},{\"kind\":1024,\"name\":\"signature_verified\",\"url\":\"interfaces/ChannelVerifyResponse.html#result.__type.signature_verified\",\"classes\":\"\",\"parent\":\"ChannelVerifyResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ChannelVerifyResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ChannelVerifyResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ChannelVerifyResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/ChannelVerifyResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/ChannelVerifyResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/ChannelVerifyResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ChannelVerifyResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ChannelVerifyResponse\"},{\"kind\":256,\"name\":\"SubscribeRequest\",\"url\":\"interfaces/SubscribeRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/SubscribeRequest.html#command\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"streams\",\"url\":\"interfaces/SubscribeRequest.html#streams\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"accounts\",\"url\":\"interfaces/SubscribeRequest.html#accounts\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"accounts_proposed\",\"url\":\"interfaces/SubscribeRequest.html#accounts_proposed\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"books\",\"url\":\"interfaces/SubscribeRequest.html#books\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"url\",\"url\":\"interfaces/SubscribeRequest.html#url\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"url_username\",\"url\":\"interfaces/SubscribeRequest.html#url_username\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"url_password\",\"url\":\"interfaces/SubscribeRequest.html#url_password\",\"classes\":\"\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubscribeRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubscribeRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeRequest\"},{\"kind\":256,\"name\":\"SubscribeResponse\",\"url\":\"interfaces/SubscribeResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/SubscribeResponse.html#result\",\"classes\":\"\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/SubscribeResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/SubscribeResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/SubscribeResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/SubscribeResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/SubscribeResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/SubscribeResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/SubscribeResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SubscribeResponse\"},{\"kind\":256,\"name\":\"SubscribeBook\",\"url\":\"interfaces/SubscribeBook.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"taker_gets\",\"url\":\"interfaces/SubscribeBook.html#taker_gets\",\"classes\":\"\",\"parent\":\"SubscribeBook\"},{\"kind\":1024,\"name\":\"taker_pays\",\"url\":\"interfaces/SubscribeBook.html#taker_pays\",\"classes\":\"\",\"parent\":\"SubscribeBook\"},{\"kind\":1024,\"name\":\"taker\",\"url\":\"interfaces/SubscribeBook.html#taker\",\"classes\":\"\",\"parent\":\"SubscribeBook\"},{\"kind\":1024,\"name\":\"snapshot\",\"url\":\"interfaces/SubscribeBook.html#snapshot\",\"classes\":\"\",\"parent\":\"SubscribeBook\"},{\"kind\":1024,\"name\":\"both\",\"url\":\"interfaces/SubscribeBook.html#both\",\"classes\":\"\",\"parent\":\"SubscribeBook\"},{\"kind\":2097152,\"name\":\"Stream\",\"url\":\"types/Stream.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"BooksSnapshot\",\"url\":\"types/BooksSnapshot.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"LedgerStream\",\"url\":\"interfaces/LedgerStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/LedgerStream.html#type\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"fee_base\",\"url\":\"interfaces/LedgerStream.html#fee_base\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"fee_ref\",\"url\":\"interfaces/LedgerStream.html#fee_ref\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerStream.html#ledger_hash\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerStream.html#ledger_index\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"ledger_time\",\"url\":\"interfaces/LedgerStream.html#ledger_time\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"reserve_base\",\"url\":\"interfaces/LedgerStream.html#reserve_base\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"reserve_inc\",\"url\":\"interfaces/LedgerStream.html#reserve_inc\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"txn_count\",\"url\":\"interfaces/LedgerStream.html#txn_count\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":1024,\"name\":\"validated_ledgers\",\"url\":\"interfaces/LedgerStream.html#validated_ledgers\",\"classes\":\"\",\"parent\":\"LedgerStream\"},{\"kind\":256,\"name\":\"LedgerStreamResponse\",\"url\":\"interfaces/LedgerStreamResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"fee_base\",\"url\":\"interfaces/LedgerStreamResponse.html#fee_base\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"fee_ref\",\"url\":\"interfaces/LedgerStreamResponse.html#fee_ref\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/LedgerStreamResponse.html#ledger_hash\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/LedgerStreamResponse.html#ledger_index\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"ledger_time\",\"url\":\"interfaces/LedgerStreamResponse.html#ledger_time\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"reserve_base\",\"url\":\"interfaces/LedgerStreamResponse.html#reserve_base\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"reserve_inc\",\"url\":\"interfaces/LedgerStreamResponse.html#reserve_inc\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":1024,\"name\":\"validated_ledgers\",\"url\":\"interfaces/LedgerStreamResponse.html#validated_ledgers\",\"classes\":\"\",\"parent\":\"LedgerStreamResponse\"},{\"kind\":256,\"name\":\"ValidationStream\",\"url\":\"interfaces/ValidationStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ValidationStream.html#type\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"amendments\",\"url\":\"interfaces/ValidationStream.html#amendments\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"base_fee\",\"url\":\"interfaces/ValidationStream.html#base_fee\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"cookie\",\"url\":\"interfaces/ValidationStream.html#cookie\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"interfaces/ValidationStream.html#data\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/ValidationStream.html#flags\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"full\",\"url\":\"interfaces/ValidationStream.html#full\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/ValidationStream.html#ledger_hash\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/ValidationStream.html#ledger_index\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"load_fee\",\"url\":\"interfaces/ValidationStream.html#load_fee\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"master_key\",\"url\":\"interfaces/ValidationStream.html#master_key\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"reserve_base\",\"url\":\"interfaces/ValidationStream.html#reserve_base\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"reserve_inc\",\"url\":\"interfaces/ValidationStream.html#reserve_inc\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"signature\",\"url\":\"interfaces/ValidationStream.html#signature\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"signing_time\",\"url\":\"interfaces/ValidationStream.html#signing_time\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":1024,\"name\":\"validation_public_key\",\"url\":\"interfaces/ValidationStream.html#validation_public_key\",\"classes\":\"\",\"parent\":\"ValidationStream\"},{\"kind\":256,\"name\":\"TransactionStream\",\"url\":\"interfaces/TransactionStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/TransactionStream.html#status\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/TransactionStream.html#type\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"engine_result\",\"url\":\"interfaces/TransactionStream.html#engine_result\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"engine_result_code\",\"url\":\"interfaces/TransactionStream.html#engine_result_code\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"engine_result_message\",\"url\":\"interfaces/TransactionStream.html#engine_result_message\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/TransactionStream.html#ledger_current_index\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/TransactionStream.html#ledger_hash\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/TransactionStream.html#ledger_index\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/TransactionStream.html#meta\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"transaction\",\"url\":\"interfaces/TransactionStream.html#transaction\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/TransactionStream.html#validated\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/TransactionStream.html#warnings\",\"classes\":\"\",\"parent\":\"TransactionStream\"},{\"kind\":256,\"name\":\"PathFindStream\",\"url\":\"interfaces/PathFindStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/PathFindStream.html#type\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"source_account\",\"url\":\"interfaces/PathFindStream.html#source_account\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"destination_account\",\"url\":\"interfaces/PathFindStream.html#destination_account\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"destination_amount\",\"url\":\"interfaces/PathFindStream.html#destination_amount\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"full_reply\",\"url\":\"interfaces/PathFindStream.html#full_reply\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PathFindStream.html#id\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"send_max\",\"url\":\"interfaces/PathFindStream.html#send_max\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":1024,\"name\":\"alternatives\",\"url\":\"interfaces/PathFindStream.html#alternatives\",\"classes\":\"\",\"parent\":\"PathFindStream\"},{\"kind\":256,\"name\":\"PeerStatusStream\",\"url\":\"interfaces/PeerStatusStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/PeerStatusStream.html#type\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"action\",\"url\":\"interfaces/PeerStatusStream.html#action\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"date\",\"url\":\"interfaces/PeerStatusStream.html#date\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/PeerStatusStream.html#ledger_hash\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/PeerStatusStream.html#ledger_index\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"ledger_index_max\",\"url\":\"interfaces/PeerStatusStream.html#ledger_index_max\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":1024,\"name\":\"ledger_index_min\",\"url\":\"interfaces/PeerStatusStream.html#ledger_index_min\",\"classes\":\"\",\"parent\":\"PeerStatusStream\"},{\"kind\":256,\"name\":\"OrderBookStream\",\"url\":\"interfaces/OrderBookStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/OrderBookStream.html#status\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/OrderBookStream.html#type\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"engine_result\",\"url\":\"interfaces/OrderBookStream.html#engine_result\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"engine_result_code\",\"url\":\"interfaces/OrderBookStream.html#engine_result_code\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"engine_result_message\",\"url\":\"interfaces/OrderBookStream.html#engine_result_message\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/OrderBookStream.html#ledger_current_index\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/OrderBookStream.html#ledger_hash\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/OrderBookStream.html#ledger_index\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/OrderBookStream.html#meta\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"transaction\",\"url\":\"interfaces/OrderBookStream.html#transaction\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/OrderBookStream.html#validated\",\"classes\":\"\",\"parent\":\"OrderBookStream\"},{\"kind\":256,\"name\":\"ConsensusStream\",\"url\":\"interfaces/ConsensusStream.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ConsensusStream.html#type\",\"classes\":\"\",\"parent\":\"ConsensusStream\"},{\"kind\":1024,\"name\":\"consensus\",\"url\":\"interfaces/ConsensusStream.html#consensus\",\"classes\":\"\",\"parent\":\"ConsensusStream\"},{\"kind\":256,\"name\":\"UnsubscribeRequest\",\"url\":\"interfaces/UnsubscribeRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/UnsubscribeRequest.html#command\",\"classes\":\"\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"streams\",\"url\":\"interfaces/UnsubscribeRequest.html#streams\",\"classes\":\"\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"accounts\",\"url\":\"interfaces/UnsubscribeRequest.html#accounts\",\"classes\":\"\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"accounts_proposed\",\"url\":\"interfaces/UnsubscribeRequest.html#accounts_proposed\",\"classes\":\"\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"books\",\"url\":\"interfaces/UnsubscribeRequest.html#books\",\"classes\":\"\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/UnsubscribeRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/UnsubscribeRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeRequest\"},{\"kind\":256,\"name\":\"UnsubscribeResponse\",\"url\":\"interfaces/UnsubscribeResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/UnsubscribeResponse.html#result\",\"classes\":\"\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/UnsubscribeResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/UnsubscribeResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/UnsubscribeResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/UnsubscribeResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/UnsubscribeResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/UnsubscribeResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/UnsubscribeResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnsubscribeResponse\"},{\"kind\":256,\"name\":\"UnsubscribeBook\",\"url\":\"interfaces/UnsubscribeBook.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"taker_gets\",\"url\":\"interfaces/UnsubscribeBook.html#taker_gets\",\"classes\":\"\",\"parent\":\"UnsubscribeBook\"},{\"kind\":1024,\"name\":\"taker_pays\",\"url\":\"interfaces/UnsubscribeBook.html#taker_pays\",\"classes\":\"\",\"parent\":\"UnsubscribeBook\"},{\"kind\":1024,\"name\":\"both\",\"url\":\"interfaces/UnsubscribeBook.html#both\",\"classes\":\"\",\"parent\":\"UnsubscribeBook\"},{\"kind\":256,\"name\":\"FeeRequest\",\"url\":\"interfaces/FeeRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/FeeRequest.html#command\",\"classes\":\"\",\"parent\":\"FeeRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/FeeRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/FeeRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeRequest\"},{\"kind\":256,\"name\":\"FeeResponse\",\"url\":\"interfaces/FeeResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/FeeResponse.html#result\",\"classes\":\"\",\"parent\":\"FeeResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FeeResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"FeeResponse.result\"},{\"kind\":1024,\"name\":\"current_ledger_size\",\"url\":\"interfaces/FeeResponse.html#result.__type.current_ledger_size\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":1024,\"name\":\"current_queue_size\",\"url\":\"interfaces/FeeResponse.html#result.__type.current_queue_size\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":1024,\"name\":\"drops\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops.__type-1\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.drops\"},{\"kind\":1024,\"name\":\"base_fee\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops.__type-1.base_fee\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.drops.__type\"},{\"kind\":1024,\"name\":\"median_fee\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops.__type-1.median_fee\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.drops.__type\"},{\"kind\":1024,\"name\":\"minimum_fee\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops.__type-1.minimum_fee\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.drops.__type\"},{\"kind\":1024,\"name\":\"open_ledger_fee\",\"url\":\"interfaces/FeeResponse.html#result.__type.drops.__type-1.open_ledger_fee\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.drops.__type\"},{\"kind\":1024,\"name\":\"expected_ledger_size\",\"url\":\"interfaces/FeeResponse.html#result.__type.expected_ledger_size\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_current_index\",\"url\":\"interfaces/FeeResponse.html#result.__type.ledger_current_index\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":1024,\"name\":\"levels\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels.__type-2\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.levels\"},{\"kind\":1024,\"name\":\"median_level\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels.__type-2.median_level\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.levels.__type\"},{\"kind\":1024,\"name\":\"minimum_level\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels.__type-2.minimum_level\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.levels.__type\"},{\"kind\":1024,\"name\":\"open_ledger_level\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels.__type-2.open_ledger_level\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.levels.__type\"},{\"kind\":1024,\"name\":\"reference_level\",\"url\":\"interfaces/FeeResponse.html#result.__type.levels.__type-2.reference_level\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type.levels.__type\"},{\"kind\":1024,\"name\":\"max_queue_size\",\"url\":\"interfaces/FeeResponse.html#result.__type.max_queue_size\",\"classes\":\"\",\"parent\":\"FeeResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/FeeResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/FeeResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/FeeResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/FeeResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/FeeResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/FeeResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/FeeResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"FeeResponse\"},{\"kind\":256,\"name\":\"ManifestRequest\",\"url\":\"interfaces/ManifestRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/ManifestRequest.html#command\",\"classes\":\"\",\"parent\":\"ManifestRequest\"},{\"kind\":1024,\"name\":\"public_key\",\"url\":\"interfaces/ManifestRequest.html#public_key\",\"classes\":\"\",\"parent\":\"ManifestRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ManifestRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ManifestRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestRequest\"},{\"kind\":256,\"name\":\"ManifestResponse\",\"url\":\"interfaces/ManifestResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/ManifestResponse.html#result\",\"classes\":\"\",\"parent\":\"ManifestResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ManifestResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"ManifestResponse.result\"},{\"kind\":1024,\"name\":\"details\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details.__type-1\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type.details\"},{\"kind\":1024,\"name\":\"domain\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details.__type-1.domain\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type.details.__type\"},{\"kind\":1024,\"name\":\"ephemeral_key\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details.__type-1.ephemeral_key\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type.details.__type\"},{\"kind\":1024,\"name\":\"master_key\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details.__type-1.master_key\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type.details.__type\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/ManifestResponse.html#result.__type.details.__type-1.seq\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type.details.__type\"},{\"kind\":1024,\"name\":\"manifest\",\"url\":\"interfaces/ManifestResponse.html#result.__type.manifest\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type\"},{\"kind\":1024,\"name\":\"requested\",\"url\":\"interfaces/ManifestResponse.html#result.__type.requested\",\"classes\":\"\",\"parent\":\"ManifestResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ManifestResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ManifestResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ManifestResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/ManifestResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/ManifestResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/ManifestResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ManifestResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ManifestResponse\"},{\"kind\":256,\"name\":\"ServerDefinitionsRequest\",\"url\":\"interfaces/ServerDefinitionsRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/ServerDefinitionsRequest.html#command\",\"classes\":\"\",\"parent\":\"ServerDefinitionsRequest\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ServerDefinitionsRequest.html#hash\",\"classes\":\"\",\"parent\":\"ServerDefinitionsRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerDefinitionsRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerDefinitionsRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsRequest\"},{\"kind\":256,\"name\":\"ServerDefinitionsResponse\",\"url\":\"interfaces/ServerDefinitionsResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/ServerDefinitionsResponse.html#result\",\"classes\":\"\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerDefinitionsResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ServerDefinitionsResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ServerDefinitionsResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/ServerDefinitionsResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/ServerDefinitionsResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/ServerDefinitionsResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerDefinitionsResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerDefinitionsResponse\"},{\"kind\":256,\"name\":\"ServerInfoRequest\",\"url\":\"interfaces/ServerInfoRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/ServerInfoRequest.html#command\",\"classes\":\"\",\"parent\":\"ServerInfoRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerInfoRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerInfoRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoRequest\"},{\"kind\":256,\"name\":\"ServerInfoResponse\",\"url\":\"interfaces/ServerInfoResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/ServerInfoResponse.html#result\",\"classes\":\"\",\"parent\":\"ServerInfoResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result\"},{\"kind\":1024,\"name\":\"info\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info\"},{\"kind\":1024,\"name\":\"amendment_blocked\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.amendment_blocked\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"build_version\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.build_version\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"closed_ledger\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.age\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"base_fee_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.base_fee_xrp\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.hash\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_base_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.reserve_base_xrp\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_inc_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.reserve_inc_xrp\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.closed_ledger.__type-2.seq\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"complete_ledgers\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.complete_ledgers\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"hostid\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.hostid\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"io_latency_ms\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.io_latency_ms\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"jq_trans_overflow\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.jq_trans_overflow\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"last_close\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.last_close\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.last_close.__type-3\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.last_close\"},{\"kind\":1024,\"name\":\"converge_time_s\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.last_close.__type-3.converge_time_s\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.last_close.__type\"},{\"kind\":1024,\"name\":\"proposers\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.last_close.__type-3.proposers\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.last_close.__type\"},{\"kind\":1024,\"name\":\"load\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load.__type-4\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.load\"},{\"kind\":1024,\"name\":\"job_types\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load.__type-4.job_types\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.load.__type\"},{\"kind\":1024,\"name\":\"threads\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load.__type-4.threads\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.load.__type\"},{\"kind\":1024,\"name\":\"load_factor\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"network_id\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.network_id\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_local\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_local\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_net\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_net\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_cluster\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_cluster\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_fee_escalation\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_fee_escalation\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_fee_queue\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_fee_queue\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"load_factor_server\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.load_factor_server\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"peer_disconnects\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.peer_disconnects\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"peer_disconnects_resources\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.peer_disconnects_resources\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"network_ledger\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.network_ledger\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"peers\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.peers\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"ports\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.ports\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"pubkey_node\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.pubkey_node\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"pubkey_validator\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.pubkey_validator\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"server_state\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.server_state\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"server_state_duration_us\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.server_state_duration_us\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"state_accounting\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.state_accounting\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"time\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.time\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"uptime\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.uptime\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"validated_ledger\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.age-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"base_fee_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.base_fee_xrp-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.hash-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_base_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.reserve_base_xrp-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_inc_xrp\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.reserve_inc_xrp-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validated_ledger.__type-5.seq-1\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"validation_quorum\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validation_quorum\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"validator_list_expires\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list_expires\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":1024,\"name\":\"validator_list\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list.__type-6\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validator_list\"},{\"kind\":1024,\"name\":\"count\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list.__type-6.count\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validator_list.__type\"},{\"kind\":1024,\"name\":\"expiration\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list.__type-6.expiration\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validator_list.__type\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ServerInfoResponse.html#result.__type.info.__type-1.validator_list.__type-6.status\",\"classes\":\"\",\"parent\":\"ServerInfoResponse.result.__type.info.__type.validator_list.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerInfoResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ServerInfoResponse.html#status-1\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ServerInfoResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/ServerInfoResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/ServerInfoResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/ServerInfoResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerInfoResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerInfoResponse\"},{\"kind\":256,\"name\":\"ServerStateRequest\",\"url\":\"interfaces/ServerStateRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/ServerStateRequest.html#command\",\"classes\":\"\",\"parent\":\"ServerStateRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerStateRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerStateRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateRequest\"},{\"kind\":256,\"name\":\"ServerStateResponse\",\"url\":\"interfaces/ServerStateResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/ServerStateResponse.html#result\",\"classes\":\"\",\"parent\":\"ServerStateResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result\"},{\"kind\":1024,\"name\":\"state\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state\"},{\"kind\":1024,\"name\":\"amendment_blocked\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.amendment_blocked\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"build_version\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.build_version\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"complete_ledgers\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.complete_ledgers\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"closed_ledger\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.age\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"base_fee\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.base_fee\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.hash\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_base\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.reserve_base\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_inc\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.reserve_inc\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.closed_ledger.__type-2.seq\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.closed_ledger.__type\"},{\"kind\":1024,\"name\":\"io_latency_ms\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.io_latency_ms\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"jq_trans_overflow\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.jq_trans_overflow\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"last_close\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.last_close\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.last_close.__type-3\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.last_close\"},{\"kind\":1024,\"name\":\"converge_time\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.last_close.__type-3.converge_time\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.last_close.__type\"},{\"kind\":1024,\"name\":\"proposers\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.last_close.__type-3.proposers\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.last_close.__type\"},{\"kind\":1024,\"name\":\"load\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load.__type-4\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.load\"},{\"kind\":1024,\"name\":\"job_types\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load.__type-4.job_types\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.load.__type\"},{\"kind\":1024,\"name\":\"threads\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load.__type-4.threads\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.load.__type\"},{\"kind\":1024,\"name\":\"load_base\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_base\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"load_factor\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_factor\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"load_factor_fee_escalation\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_factor_fee_escalation\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"load_factor_fee_queue\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_factor_fee_queue\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"load_factor_fee_reference\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_factor_fee_reference\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"load_factor_server\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.load_factor_server\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"peer_disconnects\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.peer_disconnects\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"peer_disconnects_resources\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.peer_disconnects_resources\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"peers\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.peers\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"pubkey_node\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.pubkey_node\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"pubkey_validator\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.pubkey_validator\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"server_state\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.server_state\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"server_state_duration_us\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.server_state_duration_us\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"state_accounting\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.state_accounting\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"time\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.time\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"uptime\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.uptime\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"validated_ledger\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger\"},{\"kind\":1024,\"name\":\"age\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.age-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"base_fee\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.base_fee-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"close_time\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.close_time\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.hash-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_base\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.reserve_base-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"reserve_inc\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.reserve_inc-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"seq\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validated_ledger.__type-5.seq-1\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type.validated_ledger.__type\"},{\"kind\":1024,\"name\":\"validation_quorum\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validation_quorum\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"validator_list_expires\",\"url\":\"interfaces/ServerStateResponse.html#result.__type.state.__type-1.validator_list_expires\",\"classes\":\"\",\"parent\":\"ServerStateResponse.result.__type.state.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ServerStateResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ServerStateResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ServerStateResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/ServerStateResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/ServerStateResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/ServerStateResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ServerStateResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ServerStateResponse\"},{\"kind\":256,\"name\":\"JobType\",\"url\":\"interfaces/JobType.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"job_type\",\"url\":\"interfaces/JobType.html#job_type\",\"classes\":\"\",\"parent\":\"JobType\"},{\"kind\":1024,\"name\":\"per_second\",\"url\":\"interfaces/JobType.html#per_second\",\"classes\":\"\",\"parent\":\"JobType\"},{\"kind\":1024,\"name\":\"peak_time\",\"url\":\"interfaces/JobType.html#peak_time\",\"classes\":\"\",\"parent\":\"JobType\"},{\"kind\":1024,\"name\":\"avg_time\",\"url\":\"interfaces/JobType.html#avg_time\",\"classes\":\"\",\"parent\":\"JobType\"},{\"kind\":1024,\"name\":\"in_progress\",\"url\":\"interfaces/JobType.html#in_progress\",\"classes\":\"\",\"parent\":\"JobType\"},{\"kind\":2097152,\"name\":\"ServerState\",\"url\":\"types/ServerState.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"StateAccountingFinal\",\"url\":\"types/StateAccountingFinal.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"StateAccounting\",\"url\":\"interfaces/StateAccounting.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"duration_us\",\"url\":\"interfaces/StateAccounting.html#duration_us\",\"classes\":\"\",\"parent\":\"StateAccounting\"},{\"kind\":1024,\"name\":\"transitions\",\"url\":\"interfaces/StateAccounting.html#transitions\",\"classes\":\"\",\"parent\":\"StateAccounting\"},{\"kind\":256,\"name\":\"PingRequest\",\"url\":\"interfaces/PingRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/PingRequest.html#command\",\"classes\":\"\",\"parent\":\"PingRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PingRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PingRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingRequest\"},{\"kind\":256,\"name\":\"PingResponse\",\"url\":\"interfaces/PingResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/PingResponse.html#result\",\"classes\":\"\",\"parent\":\"PingResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/PingResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"PingResponse.result\"},{\"kind\":1024,\"name\":\"role\",\"url\":\"interfaces/PingResponse.html#result.__type.role\",\"classes\":\"\",\"parent\":\"PingResponse.result.__type\"},{\"kind\":1024,\"name\":\"unlimited\",\"url\":\"interfaces/PingResponse.html#result.__type.unlimited\",\"classes\":\"\",\"parent\":\"PingResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/PingResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/PingResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/PingResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/PingResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/PingResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/PingResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/PingResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PingResponse\"},{\"kind\":256,\"name\":\"RandomRequest\",\"url\":\"interfaces/RandomRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/RandomRequest.html#command\",\"classes\":\"\",\"parent\":\"RandomRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RandomRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/RandomRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomRequest\"},{\"kind\":256,\"name\":\"RandomResponse\",\"url\":\"interfaces/RandomResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/RandomResponse.html#result\",\"classes\":\"\",\"parent\":\"RandomResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/RandomResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"RandomResponse.result\"},{\"kind\":1024,\"name\":\"random\",\"url\":\"interfaces/RandomResponse.html#result.__type.random\",\"classes\":\"\",\"parent\":\"RandomResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/RandomResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/RandomResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/RandomResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/RandomResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/RandomResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/RandomResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/RandomResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RandomResponse\"},{\"kind\":256,\"name\":\"ErrorResponse\",\"url\":\"interfaces/ErrorResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/ErrorResponse.html#id\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/ErrorResponse.html#status\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/ErrorResponse.html#type\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"error\",\"url\":\"interfaces/ErrorResponse.html#error\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"error_code\",\"url\":\"interfaces/ErrorResponse.html#error_code\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"error_message\",\"url\":\"interfaces/ErrorResponse.html#error_message\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"request\",\"url\":\"interfaces/ErrorResponse.html#request\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/ErrorResponse.html#api_version\",\"classes\":\"\",\"parent\":\"ErrorResponse\"},{\"kind\":256,\"name\":\"NFTBuyOffersRequest\",\"url\":\"interfaces/NFTBuyOffersRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/NFTBuyOffersRequest.html#command\",\"classes\":\"\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTBuyOffersRequest.html#nft_id\",\"classes\":\"\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTBuyOffersRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTBuyOffersRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/NFTBuyOffersRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFTBuyOffersRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersRequest\"},{\"kind\":256,\"name\":\"NFTBuyOffersResponse\",\"url\":\"interfaces/NFTBuyOffersResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/NFTBuyOffersResponse.html#result\",\"classes\":\"\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/NFTBuyOffersResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"NFTBuyOffersResponse.result\"},{\"kind\":1024,\"name\":\"offers\",\"url\":\"interfaces/NFTBuyOffersResponse.html#result.__type.offers\",\"classes\":\"\",\"parent\":\"NFTBuyOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTBuyOffersResponse.html#result.__type.nft_id\",\"classes\":\"\",\"parent\":\"NFTBuyOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTBuyOffersResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/NFTBuyOffersResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NFTBuyOffersResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/NFTBuyOffersResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/NFTBuyOffersResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/NFTBuyOffersResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTBuyOffersResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTBuyOffersResponse\"},{\"kind\":256,\"name\":\"NFTSellOffersRequest\",\"url\":\"interfaces/NFTSellOffersRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/NFTSellOffersRequest.html#command\",\"classes\":\"\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTSellOffersRequest.html#nft_id\",\"classes\":\"\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTSellOffersRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTSellOffersRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/NFTSellOffersRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFTSellOffersRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersRequest\"},{\"kind\":256,\"name\":\"NFTSellOffersResponse\",\"url\":\"interfaces/NFTSellOffersResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/NFTSellOffersResponse.html#result\",\"classes\":\"\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/NFTSellOffersResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"NFTSellOffersResponse.result\"},{\"kind\":1024,\"name\":\"offers\",\"url\":\"interfaces/NFTSellOffersResponse.html#result.__type.offers\",\"classes\":\"\",\"parent\":\"NFTSellOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTSellOffersResponse.html#result.__type.nft_id\",\"classes\":\"\",\"parent\":\"NFTSellOffersResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTSellOffersResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/NFTSellOffersResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NFTSellOffersResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/NFTSellOffersResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/NFTSellOffersResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/NFTSellOffersResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTSellOffersResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTSellOffersResponse\"},{\"kind\":256,\"name\":\"NFTInfoRequest\",\"url\":\"interfaces/NFTInfoRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/NFTInfoRequest.html#command\",\"classes\":\"\",\"parent\":\"NFTInfoRequest\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTInfoRequest.html#nft_id\",\"classes\":\"\",\"parent\":\"NFTInfoRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTInfoRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTInfoRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/NFTInfoRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFTInfoRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoRequest\"},{\"kind\":256,\"name\":\"NFTInfoResponse\",\"url\":\"interfaces/NFTInfoResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/NFTInfoResponse.html#result\",\"classes\":\"\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTInfoResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/NFTInfoResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NFTInfoResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/NFTInfoResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/NFTInfoResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/NFTInfoResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTInfoResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTInfoResponse\"},{\"kind\":256,\"name\":\"NFTHistoryRequest\",\"url\":\"interfaces/NFTHistoryRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/NFTHistoryRequest.html#command\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTHistoryRequest.html#nft_id\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"ledger_index_min\",\"url\":\"interfaces/NFTHistoryRequest.html#ledger_index_min\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"ledger_index_max\",\"url\":\"interfaces/NFTHistoryRequest.html#ledger_index_max\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"binary\",\"url\":\"interfaces/NFTHistoryRequest.html#binary\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"forward\",\"url\":\"interfaces/NFTHistoryRequest.html#forward\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/NFTHistoryRequest.html#limit\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/NFTHistoryRequest.html#marker\",\"classes\":\"\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTHistoryRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTHistoryRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/NFTHistoryRequest.html#ledger_hash\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFTHistoryRequest.html#ledger_index\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryRequest\"},{\"kind\":256,\"name\":\"NFTHistoryResponse\",\"url\":\"interfaces/NFTHistoryResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/NFTHistoryResponse.html#result\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.nft_id\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index_min\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.ledger_index_min\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index_max\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.ledger_index_max\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"limit\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.limit\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"marker\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.marker\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"transactions\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.transactions\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/NFTHistoryResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"NFTHistoryResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/NFTHistoryResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/NFTHistoryResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/NFTHistoryResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/NFTHistoryResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/NFTHistoryResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/NFTHistoryResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/NFTHistoryResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTHistoryResponse\"},{\"kind\":256,\"name\":\"NFTHistoryTransaction\",\"url\":\"interfaces/NFTHistoryTransaction.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFTHistoryTransaction.html#ledger_index\",\"classes\":\"\",\"parent\":\"NFTHistoryTransaction\"},{\"kind\":1024,\"name\":\"meta\",\"url\":\"interfaces/NFTHistoryTransaction.html#meta\",\"classes\":\"\",\"parent\":\"NFTHistoryTransaction\"},{\"kind\":1024,\"name\":\"tx\",\"url\":\"interfaces/NFTHistoryTransaction.html#tx\",\"classes\":\"\",\"parent\":\"NFTHistoryTransaction\"},{\"kind\":1024,\"name\":\"tx_blob\",\"url\":\"interfaces/NFTHistoryTransaction.html#tx_blob\",\"classes\":\"\",\"parent\":\"NFTHistoryTransaction\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/NFTHistoryTransaction.html#validated\",\"classes\":\"\",\"parent\":\"NFTHistoryTransaction\"},{\"kind\":256,\"name\":\"AMMInfoRequest\",\"url\":\"interfaces/AMMInfoRequest.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"command\",\"url\":\"interfaces/AMMInfoRequest.html#command\",\"classes\":\"\",\"parent\":\"AMMInfoRequest\"},{\"kind\":1024,\"name\":\"amm_account\",\"url\":\"interfaces/AMMInfoRequest.html#amm_account\",\"classes\":\"\",\"parent\":\"AMMInfoRequest\"},{\"kind\":1024,\"name\":\"asset\",\"url\":\"interfaces/AMMInfoRequest.html#asset\",\"classes\":\"\",\"parent\":\"AMMInfoRequest\"},{\"kind\":1024,\"name\":\"asset2\",\"url\":\"interfaces/AMMInfoRequest.html#asset2\",\"classes\":\"\",\"parent\":\"AMMInfoRequest\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AMMInfoRequest.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoRequest\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AMMInfoRequest.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoRequest\"},{\"kind\":256,\"name\":\"AMMInfoResponse\",\"url\":\"interfaces/AMMInfoResponse.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"result\",\"url\":\"interfaces/AMMInfoResponse.html#result\",\"classes\":\"\",\"parent\":\"AMMInfoResponse\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result\"},{\"kind\":1024,\"name\":\"amm\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.account\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"amount\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.amount\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"amount2\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.amount2\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"asset_frozen\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.asset_frozen\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"asset2_frozen\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.asset2_frozen\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"auction_slot\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.account-1\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"auth_accounts\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.auth_accounts\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"discounted_fee\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.discounted_fee\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"expiration\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.expiration\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"price\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.price\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"time_interval\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.auction_slot.__type-2.time_interval\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type.auction_slot.__type\"},{\"kind\":1024,\"name\":\"lp_token\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.lp_token\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"trading_fee\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.trading_fee\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"vote_slots\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.amm.__type-1.vote_slots\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type.amm.__type\"},{\"kind\":1024,\"name\":\"ledger_hash\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.ledger_hash\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.ledger_index\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"validated\",\"url\":\"interfaces/AMMInfoResponse.html#result.__type.validated\",\"classes\":\"\",\"parent\":\"AMMInfoResponse.result.__type\"},{\"kind\":1024,\"name\":\"id\",\"url\":\"interfaces/AMMInfoResponse.html#id\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"status\",\"url\":\"interfaces/AMMInfoResponse.html#status\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"type\",\"url\":\"interfaces/AMMInfoResponse.html#type\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"warning\",\"url\":\"interfaces/AMMInfoResponse.html#warning\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"warnings\",\"url\":\"interfaces/AMMInfoResponse.html#warnings\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"forwarded\",\"url\":\"interfaces/AMMInfoResponse.html#forwarded\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":1024,\"name\":\"api_version\",\"url\":\"interfaces/AMMInfoResponse.html#api_version\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMInfoResponse\"},{\"kind\":256,\"name\":\"BaseTransaction\",\"url\":\"interfaces/BaseTransaction.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/BaseTransaction.html#Account\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/BaseTransaction.html#TransactionType\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/BaseTransaction.html#Fee\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/BaseTransaction.html#Sequence\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/BaseTransaction.html#AccountTxnID\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/BaseTransaction.html#Flags\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/BaseTransaction.html#LastLedgerSequence\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/BaseTransaction.html#Memos\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/BaseTransaction.html#Signers\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/BaseTransaction.html#SourceTag\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/BaseTransaction.html#SigningPubKey\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/BaseTransaction.html#TicketSequence\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/BaseTransaction.html#TxnSignature\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/BaseTransaction.html#NetworkID\",\"classes\":\"\",\"parent\":\"BaseTransaction\"},{\"kind\":64,\"name\":\"validate\",\"url\":\"functions/validate.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"PseudoTransaction\",\"url\":\"types/PseudoTransaction.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"SubmittableTransaction\",\"url\":\"types/SubmittableTransaction.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"TransactionAndMetadata\",\"url\":\"interfaces/TransactionAndMetadata.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"transaction\",\"url\":\"interfaces/TransactionAndMetadata.html#transaction\",\"classes\":\"\",\"parent\":\"TransactionAndMetadata\"},{\"kind\":1024,\"name\":\"metadata\",\"url\":\"interfaces/TransactionAndMetadata.html#metadata\",\"classes\":\"\",\"parent\":\"TransactionAndMetadata\"},{\"kind\":2097152,\"name\":\"Transaction\",\"url\":\"types/Transaction.html\",\"classes\":\"\"},{\"kind\":8,\"name\":\"AccountSetAsfFlags\",\"url\":\"enums/AccountSetAsfFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"asfRequireDest\",\"url\":\"enums/AccountSetAsfFlags.html#asfRequireDest\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfRequireAuth\",\"url\":\"enums/AccountSetAsfFlags.html#asfRequireAuth\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisallowXRP\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisallowXRP\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisableMaster\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisableMaster\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfAccountTxnID\",\"url\":\"enums/AccountSetAsfFlags.html#asfAccountTxnID\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfNoFreeze\",\"url\":\"enums/AccountSetAsfFlags.html#asfNoFreeze\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfGlobalFreeze\",\"url\":\"enums/AccountSetAsfFlags.html#asfGlobalFreeze\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDefaultRipple\",\"url\":\"enums/AccountSetAsfFlags.html#asfDefaultRipple\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDepositAuth\",\"url\":\"enums/AccountSetAsfFlags.html#asfDepositAuth\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfAuthorizedNFTokenMinter\",\"url\":\"enums/AccountSetAsfFlags.html#asfAuthorizedNFTokenMinter\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisallowIncomingNFTokenOffer\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisallowIncomingNFTokenOffer\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisallowIncomingCheck\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisallowIncomingCheck\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisallowIncomingPayChan\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisallowIncomingPayChan\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfDisallowIncomingTrustline\",\"url\":\"enums/AccountSetAsfFlags.html#asfDisallowIncomingTrustline\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":16,\"name\":\"asfAllowTrustLineClawback\",\"url\":\"enums/AccountSetAsfFlags.html#asfAllowTrustLineClawback\",\"classes\":\"\",\"parent\":\"AccountSetAsfFlags\"},{\"kind\":8,\"name\":\"AccountSetTfFlags\",\"url\":\"enums/AccountSetTfFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfRequireDestTag\",\"url\":\"enums/AccountSetTfFlags.html#tfRequireDestTag\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":16,\"name\":\"tfOptionalDestTag\",\"url\":\"enums/AccountSetTfFlags.html#tfOptionalDestTag\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":16,\"name\":\"tfRequireAuth\",\"url\":\"enums/AccountSetTfFlags.html#tfRequireAuth\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":16,\"name\":\"tfOptionalAuth\",\"url\":\"enums/AccountSetTfFlags.html#tfOptionalAuth\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":16,\"name\":\"tfDisallowXRP\",\"url\":\"enums/AccountSetTfFlags.html#tfDisallowXRP\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":16,\"name\":\"tfAllowXRP\",\"url\":\"enums/AccountSetTfFlags.html#tfAllowXRP\",\"classes\":\"\",\"parent\":\"AccountSetTfFlags\"},{\"kind\":256,\"name\":\"AccountSetFlagsInterface\",\"url\":\"interfaces/AccountSetFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfRequireDestTag\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfRequireDestTag\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOptionalDestTag\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfOptionalDestTag\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfRequireAuth\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfRequireAuth\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOptionalAuth\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfOptionalAuth\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfDisallowXRP\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfDisallowXRP\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfAllowXRP\",\"url\":\"interfaces/AccountSetFlagsInterface.html#tfAllowXRP\",\"classes\":\"\",\"parent\":\"AccountSetFlagsInterface\"},{\"kind\":256,\"name\":\"AccountSet\",\"url\":\"interfaces/AccountSet.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AccountSet.html#TransactionType\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AccountSet.html#Flags\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"ClearFlag\",\"url\":\"interfaces/AccountSet.html#ClearFlag\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Domain\",\"url\":\"interfaces/AccountSet.html#Domain\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"EmailHash\",\"url\":\"interfaces/AccountSet.html#EmailHash\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"MessageKey\",\"url\":\"interfaces/AccountSet.html#MessageKey\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"SetFlag\",\"url\":\"interfaces/AccountSet.html#SetFlag\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"TransferRate\",\"url\":\"interfaces/AccountSet.html#TransferRate\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"TickSize\",\"url\":\"interfaces/AccountSet.html#TickSize\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"NFTokenMinter\",\"url\":\"interfaces/AccountSet.html#NFTokenMinter\",\"classes\":\"\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AccountSet.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AccountSet.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AccountSet.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AccountSet.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AccountSet.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AccountSet.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AccountSet.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AccountSet.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AccountSet.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AccountSet.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AccountSet.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AccountSet.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountSet\"},{\"kind\":256,\"name\":\"AccountDelete\",\"url\":\"interfaces/AccountDelete.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AccountDelete.html#TransactionType\",\"classes\":\"\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/AccountDelete.html#Destination\",\"classes\":\"\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/AccountDelete.html#DestinationTag\",\"classes\":\"\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AccountDelete.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AccountDelete.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AccountDelete.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AccountDelete.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AccountDelete.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AccountDelete.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AccountDelete.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AccountDelete.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AccountDelete.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AccountDelete.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AccountDelete.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AccountDelete.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AccountDelete.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AccountDelete\"},{\"kind\":256,\"name\":\"AMMBid\",\"url\":\"interfaces/AMMBid.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMBid.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/AMMBid.html#Asset\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/AMMBid.html#Asset2\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"BidMin\",\"url\":\"interfaces/AMMBid.html#BidMin\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"BidMax\",\"url\":\"interfaces/AMMBid.html#BidMax\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"AuthAccounts\",\"url\":\"interfaces/AMMBid.html#AuthAccounts\",\"classes\":\"\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMBid.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMBid.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMBid.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMBid.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMBid.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMBid.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMBid.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMBid.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMBid.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMBid.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMBid.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMBid.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMBid.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMBid\"},{\"kind\":256,\"name\":\"AMMDelete\",\"url\":\"interfaces/AMMDelete.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMDelete.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/AMMDelete.html#Asset\",\"classes\":\"\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/AMMDelete.html#Asset2\",\"classes\":\"\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMDelete.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMDelete.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMDelete.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMDelete.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMDelete.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMDelete.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMDelete.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMDelete.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMDelete.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMDelete.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMDelete.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMDelete.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMDelete.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDelete\"},{\"kind\":8,\"name\":\"AMMDepositFlags\",\"url\":\"enums/AMMDepositFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfLPToken\",\"url\":\"enums/AMMDepositFlags.html#tfLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlags\"},{\"kind\":16,\"name\":\"tfSingleAsset\",\"url\":\"enums/AMMDepositFlags.html#tfSingleAsset\",\"classes\":\"\",\"parent\":\"AMMDepositFlags\"},{\"kind\":16,\"name\":\"tfTwoAsset\",\"url\":\"enums/AMMDepositFlags.html#tfTwoAsset\",\"classes\":\"\",\"parent\":\"AMMDepositFlags\"},{\"kind\":16,\"name\":\"tfOneAssetLPToken\",\"url\":\"enums/AMMDepositFlags.html#tfOneAssetLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlags\"},{\"kind\":16,\"name\":\"tfLimitLPToken\",\"url\":\"enums/AMMDepositFlags.html#tfLimitLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlags\"},{\"kind\":256,\"name\":\"AMMDepositFlagsInterface\",\"url\":\"interfaces/AMMDepositFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfLPToken\",\"url\":\"interfaces/AMMDepositFlagsInterface.html#tfLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlagsInterface\"},{\"kind\":1024,\"name\":\"tfSingleAsset\",\"url\":\"interfaces/AMMDepositFlagsInterface.html#tfSingleAsset\",\"classes\":\"\",\"parent\":\"AMMDepositFlagsInterface\"},{\"kind\":1024,\"name\":\"tfTwoAsset\",\"url\":\"interfaces/AMMDepositFlagsInterface.html#tfTwoAsset\",\"classes\":\"\",\"parent\":\"AMMDepositFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOneAssetLPToken\",\"url\":\"interfaces/AMMDepositFlagsInterface.html#tfOneAssetLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlagsInterface\"},{\"kind\":1024,\"name\":\"tfLimitLPToken\",\"url\":\"interfaces/AMMDepositFlagsInterface.html#tfLimitLPToken\",\"classes\":\"\",\"parent\":\"AMMDepositFlagsInterface\"},{\"kind\":256,\"name\":\"AMMDeposit\",\"url\":\"interfaces/AMMDeposit.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMDeposit.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/AMMDeposit.html#Asset\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/AMMDeposit.html#Asset2\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/AMMDeposit.html#Amount\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Amount2\",\"url\":\"interfaces/AMMDeposit.html#Amount2\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"EPrice\",\"url\":\"interfaces/AMMDeposit.html#EPrice\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"LPTokenOut\",\"url\":\"interfaces/AMMDeposit.html#LPTokenOut\",\"classes\":\"\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMDeposit.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMDeposit.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMDeposit.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMDeposit.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMDeposit.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMDeposit.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMDeposit.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMDeposit.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMDeposit.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMDeposit.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMDeposit.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMDeposit.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMDeposit.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMDeposit\"},{\"kind\":256,\"name\":\"AMMCreate\",\"url\":\"interfaces/AMMCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/AMMCreate.html#Amount\",\"classes\":\"\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Amount2\",\"url\":\"interfaces/AMMCreate.html#Amount2\",\"classes\":\"\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"TradingFee\",\"url\":\"interfaces/AMMCreate.html#TradingFee\",\"classes\":\"\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMCreate.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMCreate\"},{\"kind\":256,\"name\":\"AMMVote\",\"url\":\"interfaces/AMMVote.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMVote.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/AMMVote.html#Asset\",\"classes\":\"\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/AMMVote.html#Asset2\",\"classes\":\"\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"TradingFee\",\"url\":\"interfaces/AMMVote.html#TradingFee\",\"classes\":\"\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMVote.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMVote.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMVote.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMVote.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMVote.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMVote.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMVote.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMVote.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMVote.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMVote.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMVote.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMVote.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMVote.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMVote\"},{\"kind\":8,\"name\":\"AMMWithdrawFlags\",\"url\":\"enums/AMMWithdrawFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfLPToken\",\"url\":\"enums/AMMWithdrawFlags.html#tfLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfWithdrawAll\",\"url\":\"enums/AMMWithdrawFlags.html#tfWithdrawAll\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfOneAssetWithdrawAll\",\"url\":\"enums/AMMWithdrawFlags.html#tfOneAssetWithdrawAll\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfSingleAsset\",\"url\":\"enums/AMMWithdrawFlags.html#tfSingleAsset\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfTwoAsset\",\"url\":\"enums/AMMWithdrawFlags.html#tfTwoAsset\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfOneAssetLPToken\",\"url\":\"enums/AMMWithdrawFlags.html#tfOneAssetLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":16,\"name\":\"tfLimitLPToken\",\"url\":\"enums/AMMWithdrawFlags.html#tfLimitLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlags\"},{\"kind\":256,\"name\":\"AMMWithdrawFlagsInterface\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfLPToken\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfWithdrawAll\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfWithdrawAll\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOneAssetWithdrawAll\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfOneAssetWithdrawAll\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfSingleAsset\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfSingleAsset\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfTwoAsset\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfTwoAsset\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOneAssetLPToken\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfOneAssetLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":1024,\"name\":\"tfLimitLPToken\",\"url\":\"interfaces/AMMWithdrawFlagsInterface.html#tfLimitLPToken\",\"classes\":\"\",\"parent\":\"AMMWithdrawFlagsInterface\"},{\"kind\":256,\"name\":\"AMMWithdraw\",\"url\":\"interfaces/AMMWithdraw.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/AMMWithdraw.html#TransactionType\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Asset\",\"url\":\"interfaces/AMMWithdraw.html#Asset\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Asset2\",\"url\":\"interfaces/AMMWithdraw.html#Asset2\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/AMMWithdraw.html#Amount\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Amount2\",\"url\":\"interfaces/AMMWithdraw.html#Amount2\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"EPrice\",\"url\":\"interfaces/AMMWithdraw.html#EPrice\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"LPTokenIn\",\"url\":\"interfaces/AMMWithdraw.html#LPTokenIn\",\"classes\":\"\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AMMWithdraw.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/AMMWithdraw.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/AMMWithdraw.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/AMMWithdraw.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/AMMWithdraw.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/AMMWithdraw.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/AMMWithdraw.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/AMMWithdraw.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/AMMWithdraw.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/AMMWithdraw.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/AMMWithdraw.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/AMMWithdraw.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/AMMWithdraw.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"AMMWithdraw\"},{\"kind\":256,\"name\":\"CheckCancel\",\"url\":\"interfaces/CheckCancel.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/CheckCancel.html#TransactionType\",\"classes\":\"\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"CheckID\",\"url\":\"interfaces/CheckCancel.html#CheckID\",\"classes\":\"\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/CheckCancel.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/CheckCancel.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/CheckCancel.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/CheckCancel.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/CheckCancel.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/CheckCancel.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/CheckCancel.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/CheckCancel.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/CheckCancel.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/CheckCancel.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/CheckCancel.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/CheckCancel.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/CheckCancel.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCancel\"},{\"kind\":256,\"name\":\"CheckCash\",\"url\":\"interfaces/CheckCash.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/CheckCash.html#TransactionType\",\"classes\":\"\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"CheckID\",\"url\":\"interfaces/CheckCash.html#CheckID\",\"classes\":\"\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/CheckCash.html#Amount\",\"classes\":\"\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"DeliverMin\",\"url\":\"interfaces/CheckCash.html#DeliverMin\",\"classes\":\"\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/CheckCash.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/CheckCash.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/CheckCash.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/CheckCash.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/CheckCash.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/CheckCash.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/CheckCash.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/CheckCash.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/CheckCash.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/CheckCash.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/CheckCash.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/CheckCash.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/CheckCash.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCash\"},{\"kind\":256,\"name\":\"CheckCreate\",\"url\":\"interfaces/CheckCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/CheckCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/CheckCreate.html#Destination\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"SendMax\",\"url\":\"interfaces/CheckCreate.html#SendMax\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/CheckCreate.html#DestinationTag\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/CheckCreate.html#Expiration\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"InvoiceID\",\"url\":\"interfaces/CheckCreate.html#InvoiceID\",\"classes\":\"\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/CheckCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/CheckCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/CheckCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/CheckCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/CheckCreate.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/CheckCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/CheckCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/CheckCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/CheckCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/CheckCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/CheckCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/CheckCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/CheckCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"CheckCreate\"},{\"kind\":256,\"name\":\"Clawback\",\"url\":\"interfaces/Clawback.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/Clawback.html#TransactionType\",\"classes\":\"\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/Clawback.html#Account\",\"classes\":\"\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/Clawback.html#Amount\",\"classes\":\"\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/Clawback.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/Clawback.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/Clawback.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/Clawback.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/Clawback.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/Clawback.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/Clawback.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/Clawback.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/Clawback.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/Clawback.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/Clawback.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/Clawback.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Clawback\"},{\"kind\":256,\"name\":\"DIDDelete\",\"url\":\"interfaces/DIDDelete.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/DIDDelete.html#TransactionType\",\"classes\":\"\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/DIDDelete.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/DIDDelete.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/DIDDelete.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/DIDDelete.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/DIDDelete.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/DIDDelete.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/DIDDelete.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/DIDDelete.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/DIDDelete.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/DIDDelete.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/DIDDelete.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/DIDDelete.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/DIDDelete.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDDelete\"},{\"kind\":256,\"name\":\"DIDSet\",\"url\":\"interfaces/DIDSet.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/DIDSet.html#TransactionType\",\"classes\":\"\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Data\",\"url\":\"interfaces/DIDSet.html#Data\",\"classes\":\"\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"DIDDocument\",\"url\":\"interfaces/DIDSet.html#DIDDocument\",\"classes\":\"\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"URI\",\"url\":\"interfaces/DIDSet.html#URI\",\"classes\":\"\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/DIDSet.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/DIDSet.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/DIDSet.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/DIDSet.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/DIDSet.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/DIDSet.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/DIDSet.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/DIDSet.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/DIDSet.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/DIDSet.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/DIDSet.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/DIDSet.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/DIDSet.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DIDSet\"},{\"kind\":256,\"name\":\"DepositPreauth\",\"url\":\"interfaces/DepositPreauth.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/DepositPreauth.html#TransactionType\",\"classes\":\"\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Authorize\",\"url\":\"interfaces/DepositPreauth.html#Authorize\",\"classes\":\"\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Unauthorize\",\"url\":\"interfaces/DepositPreauth.html#Unauthorize\",\"classes\":\"\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/DepositPreauth.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/DepositPreauth.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/DepositPreauth.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/DepositPreauth.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/DepositPreauth.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/DepositPreauth.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/DepositPreauth.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/DepositPreauth.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/DepositPreauth.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/DepositPreauth.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/DepositPreauth.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/DepositPreauth.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/DepositPreauth.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DepositPreauth\"},{\"kind\":256,\"name\":\"EscrowCancel\",\"url\":\"interfaces/EscrowCancel.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/EscrowCancel.html#TransactionType\",\"classes\":\"\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/EscrowCancel.html#Owner\",\"classes\":\"\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"OfferSequence\",\"url\":\"interfaces/EscrowCancel.html#OfferSequence\",\"classes\":\"\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/EscrowCancel.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/EscrowCancel.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/EscrowCancel.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/EscrowCancel.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/EscrowCancel.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/EscrowCancel.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/EscrowCancel.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/EscrowCancel.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/EscrowCancel.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/EscrowCancel.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/EscrowCancel.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/EscrowCancel.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/EscrowCancel.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCancel\"},{\"kind\":256,\"name\":\"EscrowCreate\",\"url\":\"interfaces/EscrowCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/EscrowCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/EscrowCreate.html#Amount\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/EscrowCreate.html#Destination\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"CancelAfter\",\"url\":\"interfaces/EscrowCreate.html#CancelAfter\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"FinishAfter\",\"url\":\"interfaces/EscrowCreate.html#FinishAfter\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Condition\",\"url\":\"interfaces/EscrowCreate.html#Condition\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/EscrowCreate.html#DestinationTag\",\"classes\":\"\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/EscrowCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/EscrowCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/EscrowCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/EscrowCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/EscrowCreate.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/EscrowCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/EscrowCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/EscrowCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/EscrowCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/EscrowCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/EscrowCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/EscrowCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/EscrowCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowCreate\"},{\"kind\":256,\"name\":\"EscrowFinish\",\"url\":\"interfaces/EscrowFinish.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/EscrowFinish.html#TransactionType\",\"classes\":\"\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/EscrowFinish.html#Owner\",\"classes\":\"\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"OfferSequence\",\"url\":\"interfaces/EscrowFinish.html#OfferSequence\",\"classes\":\"\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Condition\",\"url\":\"interfaces/EscrowFinish.html#Condition\",\"classes\":\"\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Fulfillment\",\"url\":\"interfaces/EscrowFinish.html#Fulfillment\",\"classes\":\"\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/EscrowFinish.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/EscrowFinish.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/EscrowFinish.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/EscrowFinish.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/EscrowFinish.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/EscrowFinish.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/EscrowFinish.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/EscrowFinish.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/EscrowFinish.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/EscrowFinish.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/EscrowFinish.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/EscrowFinish.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/EscrowFinish.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EscrowFinish\"},{\"kind\":256,\"name\":\"EnableAmendment\",\"url\":\"interfaces/EnableAmendment.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/EnableAmendment.html#TransactionType\",\"classes\":\"\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Amendment\",\"url\":\"interfaces/EnableAmendment.html#Amendment\",\"classes\":\"\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"LedgerSequence\",\"url\":\"interfaces/EnableAmendment.html#LedgerSequence\",\"classes\":\"\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/EnableAmendment.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/EnableAmendment.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/EnableAmendment.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/EnableAmendment.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/EnableAmendment.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/EnableAmendment.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/EnableAmendment.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/EnableAmendment.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/EnableAmendment.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/EnableAmendment.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/EnableAmendment.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/EnableAmendment.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/EnableAmendment.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"EnableAmendment\"},{\"kind\":8,\"name\":\"EnableAmendmentFlags\",\"url\":\"enums/EnableAmendmentFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfGotMajority\",\"url\":\"enums/EnableAmendmentFlags.html#tfGotMajority\",\"classes\":\"\",\"parent\":\"EnableAmendmentFlags\"},{\"kind\":16,\"name\":\"tfLostMajority\",\"url\":\"enums/EnableAmendmentFlags.html#tfLostMajority\",\"classes\":\"\",\"parent\":\"EnableAmendmentFlags\"},{\"kind\":256,\"name\":\"NFTokenAcceptOffer\",\"url\":\"interfaces/NFTokenAcceptOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/NFTokenAcceptOffer.html#TransactionType\",\"classes\":\"\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"NFTokenSellOffer\",\"url\":\"interfaces/NFTokenAcceptOffer.html#NFTokenSellOffer\",\"classes\":\"\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"NFTokenBuyOffer\",\"url\":\"interfaces/NFTokenAcceptOffer.html#NFTokenBuyOffer\",\"classes\":\"\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"NFTokenBrokerFee\",\"url\":\"interfaces/NFTokenAcceptOffer.html#NFTokenBrokerFee\",\"classes\":\"\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/NFTokenAcceptOffer.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/NFTokenAcceptOffer.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/NFTokenAcceptOffer.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/NFTokenAcceptOffer.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/NFTokenAcceptOffer.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/NFTokenAcceptOffer.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/NFTokenAcceptOffer.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/NFTokenAcceptOffer.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenAcceptOffer\"},{\"kind\":256,\"name\":\"NFTokenBurn\",\"url\":\"interfaces/NFTokenBurn.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/NFTokenBurn.html#TransactionType\",\"classes\":\"\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/NFTokenBurn.html#Account\",\"classes\":\"\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"NFTokenID\",\"url\":\"interfaces/NFTokenBurn.html#NFTokenID\",\"classes\":\"\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/NFTokenBurn.html#Owner\",\"classes\":\"\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/NFTokenBurn.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/NFTokenBurn.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/NFTokenBurn.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/NFTokenBurn.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/NFTokenBurn.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/NFTokenBurn.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/NFTokenBurn.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/NFTokenBurn.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/NFTokenBurn.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/NFTokenBurn.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/NFTokenBurn.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/NFTokenBurn.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenBurn\"},{\"kind\":256,\"name\":\"NFTokenCancelOffer\",\"url\":\"interfaces/NFTokenCancelOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/NFTokenCancelOffer.html#TransactionType\",\"classes\":\"\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"NFTokenOffers\",\"url\":\"interfaces/NFTokenCancelOffer.html#NFTokenOffers\",\"classes\":\"\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/NFTokenCancelOffer.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/NFTokenCancelOffer.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/NFTokenCancelOffer.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/NFTokenCancelOffer.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/NFTokenCancelOffer.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/NFTokenCancelOffer.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/NFTokenCancelOffer.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/NFTokenCancelOffer.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/NFTokenCancelOffer.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/NFTokenCancelOffer.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/NFTokenCancelOffer.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/NFTokenCancelOffer.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/NFTokenCancelOffer.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCancelOffer\"},{\"kind\":256,\"name\":\"NFTokenCreateOffer\",\"url\":\"interfaces/NFTokenCreateOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/NFTokenCreateOffer.html#TransactionType\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"NFTokenID\",\"url\":\"interfaces/NFTokenCreateOffer.html#NFTokenID\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/NFTokenCreateOffer.html#Amount\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Owner\",\"url\":\"interfaces/NFTokenCreateOffer.html#Owner\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/NFTokenCreateOffer.html#Expiration\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/NFTokenCreateOffer.html#Destination\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/NFTokenCreateOffer.html#Flags\",\"classes\":\"\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/NFTokenCreateOffer.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/NFTokenCreateOffer.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/NFTokenCreateOffer.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/NFTokenCreateOffer.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/NFTokenCreateOffer.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/NFTokenCreateOffer.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/NFTokenCreateOffer.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/NFTokenCreateOffer.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/NFTokenCreateOffer.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/NFTokenCreateOffer.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/NFTokenCreateOffer.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/NFTokenCreateOffer.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenCreateOffer\"},{\"kind\":8,\"name\":\"NFTokenCreateOfferFlags\",\"url\":\"enums/NFTokenCreateOfferFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfSellNFToken\",\"url\":\"enums/NFTokenCreateOfferFlags.html#tfSellNFToken\",\"classes\":\"\",\"parent\":\"NFTokenCreateOfferFlags\"},{\"kind\":256,\"name\":\"NFTokenCreateOfferFlagsInterface\",\"url\":\"interfaces/NFTokenCreateOfferFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfSellNFToken\",\"url\":\"interfaces/NFTokenCreateOfferFlagsInterface.html#tfSellNFToken\",\"classes\":\"\",\"parent\":\"NFTokenCreateOfferFlagsInterface\"},{\"kind\":256,\"name\":\"NFTokenMint\",\"url\":\"interfaces/NFTokenMint.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/NFTokenMint.html#TransactionType\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"NFTokenTaxon\",\"url\":\"interfaces/NFTokenMint.html#NFTokenTaxon\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Issuer\",\"url\":\"interfaces/NFTokenMint.html#Issuer\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"TransferFee\",\"url\":\"interfaces/NFTokenMint.html#TransferFee\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"URI\",\"url\":\"interfaces/NFTokenMint.html#URI\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/NFTokenMint.html#Flags\",\"classes\":\"\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/NFTokenMint.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/NFTokenMint.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/NFTokenMint.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/NFTokenMint.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/NFTokenMint.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/NFTokenMint.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/NFTokenMint.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/NFTokenMint.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/NFTokenMint.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/NFTokenMint.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/NFTokenMint.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/NFTokenMint.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NFTokenMint\"},{\"kind\":8,\"name\":\"NFTokenMintFlags\",\"url\":\"enums/NFTokenMintFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfBurnable\",\"url\":\"enums/NFTokenMintFlags.html#tfBurnable\",\"classes\":\"\",\"parent\":\"NFTokenMintFlags\"},{\"kind\":16,\"name\":\"tfOnlyXRP\",\"url\":\"enums/NFTokenMintFlags.html#tfOnlyXRP\",\"classes\":\"\",\"parent\":\"NFTokenMintFlags\"},{\"kind\":16,\"name\":\"tfTrustLine\",\"url\":\"enums/NFTokenMintFlags.html#tfTrustLine\",\"classes\":\"\",\"parent\":\"NFTokenMintFlags\"},{\"kind\":16,\"name\":\"tfTransferable\",\"url\":\"enums/NFTokenMintFlags.html#tfTransferable\",\"classes\":\"\",\"parent\":\"NFTokenMintFlags\"},{\"kind\":256,\"name\":\"NFTokenMintFlagsInterface\",\"url\":\"interfaces/NFTokenMintFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfBurnable\",\"url\":\"interfaces/NFTokenMintFlagsInterface.html#tfBurnable\",\"classes\":\"\",\"parent\":\"NFTokenMintFlagsInterface\"},{\"kind\":1024,\"name\":\"tfOnlyXRP\",\"url\":\"interfaces/NFTokenMintFlagsInterface.html#tfOnlyXRP\",\"classes\":\"\",\"parent\":\"NFTokenMintFlagsInterface\"},{\"kind\":1024,\"name\":\"tfTrustLine\",\"url\":\"interfaces/NFTokenMintFlagsInterface.html#tfTrustLine\",\"classes\":\"\",\"parent\":\"NFTokenMintFlagsInterface\"},{\"kind\":1024,\"name\":\"tfTransferable\",\"url\":\"interfaces/NFTokenMintFlagsInterface.html#tfTransferable\",\"classes\":\"\",\"parent\":\"NFTokenMintFlagsInterface\"},{\"kind\":256,\"name\":\"OfferCancel\",\"url\":\"interfaces/OfferCancel.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/OfferCancel.html#TransactionType\",\"classes\":\"\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"OfferSequence\",\"url\":\"interfaces/OfferCancel.html#OfferSequence\",\"classes\":\"\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/OfferCancel.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/OfferCancel.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/OfferCancel.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/OfferCancel.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/OfferCancel.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/OfferCancel.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/OfferCancel.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/OfferCancel.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/OfferCancel.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/OfferCancel.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/OfferCancel.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/OfferCancel.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/OfferCancel.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCancel\"},{\"kind\":8,\"name\":\"OfferCreateFlags\",\"url\":\"enums/OfferCreateFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfPassive\",\"url\":\"enums/OfferCreateFlags.html#tfPassive\",\"classes\":\"\",\"parent\":\"OfferCreateFlags\"},{\"kind\":16,\"name\":\"tfImmediateOrCancel\",\"url\":\"enums/OfferCreateFlags.html#tfImmediateOrCancel\",\"classes\":\"\",\"parent\":\"OfferCreateFlags\"},{\"kind\":16,\"name\":\"tfFillOrKill\",\"url\":\"enums/OfferCreateFlags.html#tfFillOrKill\",\"classes\":\"\",\"parent\":\"OfferCreateFlags\"},{\"kind\":16,\"name\":\"tfSell\",\"url\":\"enums/OfferCreateFlags.html#tfSell\",\"classes\":\"\",\"parent\":\"OfferCreateFlags\"},{\"kind\":256,\"name\":\"OfferCreateFlagsInterface\",\"url\":\"interfaces/OfferCreateFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfPassive\",\"url\":\"interfaces/OfferCreateFlagsInterface.html#tfPassive\",\"classes\":\"\",\"parent\":\"OfferCreateFlagsInterface\"},{\"kind\":1024,\"name\":\"tfImmediateOrCancel\",\"url\":\"interfaces/OfferCreateFlagsInterface.html#tfImmediateOrCancel\",\"classes\":\"\",\"parent\":\"OfferCreateFlagsInterface\"},{\"kind\":1024,\"name\":\"tfFillOrKill\",\"url\":\"interfaces/OfferCreateFlagsInterface.html#tfFillOrKill\",\"classes\":\"\",\"parent\":\"OfferCreateFlagsInterface\"},{\"kind\":1024,\"name\":\"tfSell\",\"url\":\"interfaces/OfferCreateFlagsInterface.html#tfSell\",\"classes\":\"\",\"parent\":\"OfferCreateFlagsInterface\"},{\"kind\":256,\"name\":\"OfferCreate\",\"url\":\"interfaces/OfferCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/OfferCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/OfferCreate.html#Flags\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/OfferCreate.html#Expiration\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"OfferSequence\",\"url\":\"interfaces/OfferCreate.html#OfferSequence\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"TakerGets\",\"url\":\"interfaces/OfferCreate.html#TakerGets\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"TakerPays\",\"url\":\"interfaces/OfferCreate.html#TakerPays\",\"classes\":\"\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/OfferCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/OfferCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/OfferCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/OfferCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/OfferCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/OfferCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/OfferCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/OfferCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/OfferCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/OfferCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/OfferCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/OfferCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"OfferCreate\"},{\"kind\":8,\"name\":\"PaymentFlags\",\"url\":\"enums/PaymentFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfNoDirectRipple\",\"url\":\"enums/PaymentFlags.html#tfNoDirectRipple\",\"classes\":\"\",\"parent\":\"PaymentFlags\"},{\"kind\":16,\"name\":\"tfPartialPayment\",\"url\":\"enums/PaymentFlags.html#tfPartialPayment\",\"classes\":\"\",\"parent\":\"PaymentFlags\"},{\"kind\":16,\"name\":\"tfLimitQuality\",\"url\":\"enums/PaymentFlags.html#tfLimitQuality\",\"classes\":\"\",\"parent\":\"PaymentFlags\"},{\"kind\":256,\"name\":\"PaymentFlagsInterface\",\"url\":\"interfaces/PaymentFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfNoDirectRipple\",\"url\":\"interfaces/PaymentFlagsInterface.html#tfNoDirectRipple\",\"classes\":\"\",\"parent\":\"PaymentFlagsInterface\"},{\"kind\":1024,\"name\":\"tfPartialPayment\",\"url\":\"interfaces/PaymentFlagsInterface.html#tfPartialPayment\",\"classes\":\"\",\"parent\":\"PaymentFlagsInterface\"},{\"kind\":1024,\"name\":\"tfLimitQuality\",\"url\":\"interfaces/PaymentFlagsInterface.html#tfLimitQuality\",\"classes\":\"\",\"parent\":\"PaymentFlagsInterface\"},{\"kind\":256,\"name\":\"Payment\",\"url\":\"interfaces/Payment.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/Payment.html#TransactionType\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/Payment.html#Amount\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/Payment.html#Destination\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/Payment.html#DestinationTag\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"InvoiceID\",\"url\":\"interfaces/Payment.html#InvoiceID\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Paths\",\"url\":\"interfaces/Payment.html#Paths\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"SendMax\",\"url\":\"interfaces/Payment.html#SendMax\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"DeliverMin\",\"url\":\"interfaces/Payment.html#DeliverMin\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/Payment.html#Flags\",\"classes\":\"\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/Payment.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/Payment.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/Payment.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/Payment.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/Payment.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/Payment.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/Payment.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/Payment.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/Payment.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/Payment.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/Payment.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/Payment.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"Payment\"},{\"kind\":8,\"name\":\"PaymentChannelClaimFlags\",\"url\":\"enums/PaymentChannelClaimFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfRenew\",\"url\":\"enums/PaymentChannelClaimFlags.html#tfRenew\",\"classes\":\"\",\"parent\":\"PaymentChannelClaimFlags\"},{\"kind\":16,\"name\":\"tfClose\",\"url\":\"enums/PaymentChannelClaimFlags.html#tfClose\",\"classes\":\"\",\"parent\":\"PaymentChannelClaimFlags\"},{\"kind\":256,\"name\":\"PaymentChannelClaimFlagsInterface\",\"url\":\"interfaces/PaymentChannelClaimFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfRenew\",\"url\":\"interfaces/PaymentChannelClaimFlagsInterface.html#tfRenew\",\"classes\":\"\",\"parent\":\"PaymentChannelClaimFlagsInterface\"},{\"kind\":1024,\"name\":\"tfClose\",\"url\":\"interfaces/PaymentChannelClaimFlagsInterface.html#tfClose\",\"classes\":\"\",\"parent\":\"PaymentChannelClaimFlagsInterface\"},{\"kind\":256,\"name\":\"PaymentChannelClaim\",\"url\":\"interfaces/PaymentChannelClaim.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/PaymentChannelClaim.html#TransactionType\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/PaymentChannelClaim.html#Flags\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Channel\",\"url\":\"interfaces/PaymentChannelClaim.html#Channel\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Balance\",\"url\":\"interfaces/PaymentChannelClaim.html#Balance\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/PaymentChannelClaim.html#Amount\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Signature\",\"url\":\"interfaces/PaymentChannelClaim.html#Signature\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"PublicKey\",\"url\":\"interfaces/PaymentChannelClaim.html#PublicKey\",\"classes\":\"\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/PaymentChannelClaim.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/PaymentChannelClaim.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/PaymentChannelClaim.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/PaymentChannelClaim.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/PaymentChannelClaim.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/PaymentChannelClaim.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/PaymentChannelClaim.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/PaymentChannelClaim.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/PaymentChannelClaim.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/PaymentChannelClaim.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/PaymentChannelClaim.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/PaymentChannelClaim.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelClaim\"},{\"kind\":256,\"name\":\"PaymentChannelCreate\",\"url\":\"interfaces/PaymentChannelCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/PaymentChannelCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/PaymentChannelCreate.html#Amount\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/PaymentChannelCreate.html#Destination\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"SettleDelay\",\"url\":\"interfaces/PaymentChannelCreate.html#SettleDelay\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"PublicKey\",\"url\":\"interfaces/PaymentChannelCreate.html#PublicKey\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"CancelAfter\",\"url\":\"interfaces/PaymentChannelCreate.html#CancelAfter\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/PaymentChannelCreate.html#DestinationTag\",\"classes\":\"\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/PaymentChannelCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/PaymentChannelCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/PaymentChannelCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/PaymentChannelCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/PaymentChannelCreate.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/PaymentChannelCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/PaymentChannelCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/PaymentChannelCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/PaymentChannelCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/PaymentChannelCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/PaymentChannelCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/PaymentChannelCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/PaymentChannelCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelCreate\"},{\"kind\":256,\"name\":\"PaymentChannelFund\",\"url\":\"interfaces/PaymentChannelFund.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/PaymentChannelFund.html#TransactionType\",\"classes\":\"\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Channel\",\"url\":\"interfaces/PaymentChannelFund.html#Channel\",\"classes\":\"\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/PaymentChannelFund.html#Amount\",\"classes\":\"\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Expiration\",\"url\":\"interfaces/PaymentChannelFund.html#Expiration\",\"classes\":\"\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/PaymentChannelFund.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/PaymentChannelFund.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/PaymentChannelFund.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/PaymentChannelFund.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/PaymentChannelFund.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/PaymentChannelFund.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/PaymentChannelFund.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/PaymentChannelFund.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/PaymentChannelFund.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/PaymentChannelFund.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/PaymentChannelFund.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/PaymentChannelFund.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/PaymentChannelFund.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"PaymentChannelFund\"},{\"kind\":2097152,\"name\":\"SetFee\",\"url\":\"types/SetFee.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"SetFeePreAmendment\",\"url\":\"interfaces/SetFeePreAmendment.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"BaseFee\",\"url\":\"interfaces/SetFeePreAmendment.html#BaseFee\",\"classes\":\"\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"ReferenceFeeUnits\",\"url\":\"interfaces/SetFeePreAmendment.html#ReferenceFeeUnits\",\"classes\":\"\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"ReserveBase\",\"url\":\"interfaces/SetFeePreAmendment.html#ReserveBase\",\"classes\":\"\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"ReserveIncrement\",\"url\":\"interfaces/SetFeePreAmendment.html#ReserveIncrement\",\"classes\":\"\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/SetFeePreAmendment.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/SetFeePreAmendment.html#TransactionType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/SetFeePreAmendment.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/SetFeePreAmendment.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/SetFeePreAmendment.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/SetFeePreAmendment.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/SetFeePreAmendment.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/SetFeePreAmendment.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/SetFeePreAmendment.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/SetFeePreAmendment.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/SetFeePreAmendment.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/SetFeePreAmendment.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/SetFeePreAmendment.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/SetFeePreAmendment.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePreAmendment\"},{\"kind\":256,\"name\":\"SetFeePostAmendment\",\"url\":\"interfaces/SetFeePostAmendment.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"BaseFeeDrops\",\"url\":\"interfaces/SetFeePostAmendment.html#BaseFeeDrops\",\"classes\":\"\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"ReserveBaseDrops\",\"url\":\"interfaces/SetFeePostAmendment.html#ReserveBaseDrops\",\"classes\":\"\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"ReserveIncrementDrops\",\"url\":\"interfaces/SetFeePostAmendment.html#ReserveIncrementDrops\",\"classes\":\"\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/SetFeePostAmendment.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/SetFeePostAmendment.html#TransactionType\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/SetFeePostAmendment.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/SetFeePostAmendment.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/SetFeePostAmendment.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/SetFeePostAmendment.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/SetFeePostAmendment.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/SetFeePostAmendment.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/SetFeePostAmendment.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/SetFeePostAmendment.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/SetFeePostAmendment.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/SetFeePostAmendment.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/SetFeePostAmendment.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/SetFeePostAmendment.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetFeePostAmendment\"},{\"kind\":256,\"name\":\"SetRegularKey\",\"url\":\"interfaces/SetRegularKey.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/SetRegularKey.html#TransactionType\",\"classes\":\"\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"RegularKey\",\"url\":\"interfaces/SetRegularKey.html#RegularKey\",\"classes\":\"\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/SetRegularKey.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/SetRegularKey.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/SetRegularKey.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/SetRegularKey.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/SetRegularKey.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/SetRegularKey.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/SetRegularKey.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/SetRegularKey.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/SetRegularKey.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/SetRegularKey.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/SetRegularKey.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/SetRegularKey.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/SetRegularKey.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SetRegularKey\"},{\"kind\":256,\"name\":\"SignerListSet\",\"url\":\"interfaces/SignerListSet.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/SignerListSet.html#TransactionType\",\"classes\":\"\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"SignerQuorum\",\"url\":\"interfaces/SignerListSet.html#SignerQuorum\",\"classes\":\"\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"SignerEntries\",\"url\":\"interfaces/SignerListSet.html#SignerEntries\",\"classes\":\"\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/SignerListSet.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/SignerListSet.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/SignerListSet.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/SignerListSet.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/SignerListSet.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/SignerListSet.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/SignerListSet.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/SignerListSet.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/SignerListSet.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/SignerListSet.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/SignerListSet.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/SignerListSet.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/SignerListSet.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"SignerListSet\"},{\"kind\":256,\"name\":\"TicketCreate\",\"url\":\"interfaces/TicketCreate.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/TicketCreate.html#TransactionType\",\"classes\":\"\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"TicketCount\",\"url\":\"interfaces/TicketCreate.html#TicketCount\",\"classes\":\"\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/TicketCreate.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/TicketCreate.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/TicketCreate.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/TicketCreate.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/TicketCreate.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/TicketCreate.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/TicketCreate.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/TicketCreate.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/TicketCreate.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/TicketCreate.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/TicketCreate.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/TicketCreate.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/TicketCreate.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TicketCreate\"},{\"kind\":256,\"name\":\"TrustSetFlagsInterface\",\"url\":\"interfaces/TrustSetFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfSetfAuth\",\"url\":\"interfaces/TrustSetFlagsInterface.html#tfSetfAuth\",\"classes\":\"\",\"parent\":\"TrustSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfSetNoRipple\",\"url\":\"interfaces/TrustSetFlagsInterface.html#tfSetNoRipple\",\"classes\":\"\",\"parent\":\"TrustSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfClearNoRipple\",\"url\":\"interfaces/TrustSetFlagsInterface.html#tfClearNoRipple\",\"classes\":\"\",\"parent\":\"TrustSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfSetFreeze\",\"url\":\"interfaces/TrustSetFlagsInterface.html#tfSetFreeze\",\"classes\":\"\",\"parent\":\"TrustSetFlagsInterface\"},{\"kind\":1024,\"name\":\"tfClearFreeze\",\"url\":\"interfaces/TrustSetFlagsInterface.html#tfClearFreeze\",\"classes\":\"\",\"parent\":\"TrustSetFlagsInterface\"},{\"kind\":8,\"name\":\"TrustSetFlags\",\"url\":\"enums/TrustSetFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfSetfAuth\",\"url\":\"enums/TrustSetFlags.html#tfSetfAuth\",\"classes\":\"\",\"parent\":\"TrustSetFlags\"},{\"kind\":16,\"name\":\"tfSetNoRipple\",\"url\":\"enums/TrustSetFlags.html#tfSetNoRipple\",\"classes\":\"\",\"parent\":\"TrustSetFlags\"},{\"kind\":16,\"name\":\"tfClearNoRipple\",\"url\":\"enums/TrustSetFlags.html#tfClearNoRipple\",\"classes\":\"\",\"parent\":\"TrustSetFlags\"},{\"kind\":16,\"name\":\"tfSetFreeze\",\"url\":\"enums/TrustSetFlags.html#tfSetFreeze\",\"classes\":\"\",\"parent\":\"TrustSetFlags\"},{\"kind\":16,\"name\":\"tfClearFreeze\",\"url\":\"enums/TrustSetFlags.html#tfClearFreeze\",\"classes\":\"\",\"parent\":\"TrustSetFlags\"},{\"kind\":256,\"name\":\"TrustSet\",\"url\":\"interfaces/TrustSet.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/TrustSet.html#TransactionType\",\"classes\":\"\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"LimitAmount\",\"url\":\"interfaces/TrustSet.html#LimitAmount\",\"classes\":\"\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"QualityIn\",\"url\":\"interfaces/TrustSet.html#QualityIn\",\"classes\":\"\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"QualityOut\",\"url\":\"interfaces/TrustSet.html#QualityOut\",\"classes\":\"\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/TrustSet.html#Flags\",\"classes\":\"\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/TrustSet.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/TrustSet.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/TrustSet.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/TrustSet.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/TrustSet.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/TrustSet.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/TrustSet.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/TrustSet.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/TrustSet.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/TrustSet.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/TrustSet.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/TrustSet.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TrustSet\"},{\"kind\":256,\"name\":\"UNLModify\",\"url\":\"interfaces/UNLModify.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/UNLModify.html#TransactionType\",\"classes\":\"\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"LedgerSequence\",\"url\":\"interfaces/UNLModify.html#LedgerSequence\",\"classes\":\"\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"UNLModifyDisabling\",\"url\":\"interfaces/UNLModify.html#UNLModifyDisabling\",\"classes\":\"\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"UNLModifyValidator\",\"url\":\"interfaces/UNLModify.html#UNLModifyValidator\",\"classes\":\"\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/UNLModify.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/UNLModify.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/UNLModify.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/UNLModify.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/UNLModify.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/UNLModify.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/UNLModify.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/UNLModify.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/UNLModify.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/UNLModify.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/UNLModify.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/UNLModify.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/UNLModify.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UNLModify\"},{\"kind\":256,\"name\":\"XChainAddAccountCreateAttestation\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Amount\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"AttestationRewardAccount\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#AttestationRewardAccount\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"AttestationSignerAccount\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#AttestationSignerAccount\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Destination\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"OtherChainSource\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#OtherChainSource\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"PublicKey\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#PublicKey\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Signature\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Signature\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#SignatureReward\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"WasLockingChainSend\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#WasLockingChainSend\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"XChainAccountCreateCount\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#XChainAccountCreateCount\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainAddAccountCreateAttestation.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddAccountCreateAttestation\"},{\"kind\":256,\"name\":\"XChainAddClaimAttestation\",\"url\":\"interfaces/XChainAddClaimAttestation.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainAddClaimAttestation.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Amount\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"AttestationRewardAccount\",\"url\":\"interfaces/XChainAddClaimAttestation.html#AttestationRewardAccount\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"AttestationSignerAccount\",\"url\":\"interfaces/XChainAddClaimAttestation.html#AttestationSignerAccount\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Destination\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"OtherChainSource\",\"url\":\"interfaces/XChainAddClaimAttestation.html#OtherChainSource\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"PublicKey\",\"url\":\"interfaces/XChainAddClaimAttestation.html#PublicKey\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Signature\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Signature\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"WasLockingChainSend\",\"url\":\"interfaces/XChainAddClaimAttestation.html#WasLockingChainSend\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainAddClaimAttestation.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"XChainClaimID\",\"url\":\"interfaces/XChainAddClaimAttestation.html#XChainClaimID\",\"classes\":\"\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainAddClaimAttestation.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainAddClaimAttestation.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainAddClaimAttestation.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainAddClaimAttestation.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainAddClaimAttestation.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainAddClaimAttestation.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainAddClaimAttestation.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainAddClaimAttestation.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAddClaimAttestation\"},{\"kind\":256,\"name\":\"XChainClaim\",\"url\":\"interfaces/XChainClaim.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainClaim.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainClaim.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"XChainClaimID\",\"url\":\"interfaces/XChainClaim.html#XChainClaimID\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/XChainClaim.html#Destination\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"DestinationTag\",\"url\":\"interfaces/XChainClaim.html#DestinationTag\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/XChainClaim.html#Amount\",\"classes\":\"\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainClaim.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainClaim.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainClaim.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainClaim.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainClaim.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainClaim.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainClaim.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainClaim.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainClaim.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainClaim.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainClaim.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainClaim.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainClaim.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainClaim\"},{\"kind\":256,\"name\":\"XChainCommit\",\"url\":\"interfaces/XChainCommit.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainCommit.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainCommit.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"XChainClaimID\",\"url\":\"interfaces/XChainCommit.html#XChainClaimID\",\"classes\":\"\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"OtherChainDestination\",\"url\":\"interfaces/XChainCommit.html#OtherChainDestination\",\"classes\":\"\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/XChainCommit.html#Amount\",\"classes\":\"\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainCommit.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainCommit.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainCommit.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainCommit.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainCommit.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainCommit.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainCommit.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainCommit.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainCommit.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainCommit.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainCommit.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainCommit.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainCommit.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCommit\"},{\"kind\":256,\"name\":\"XChainCreateBridge\",\"url\":\"interfaces/XChainCreateBridge.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainCreateBridge.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainCreateBridge.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/XChainCreateBridge.html#SignatureReward\",\"classes\":\"\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"MinAccountCreateAmount\",\"url\":\"interfaces/XChainCreateBridge.html#MinAccountCreateAmount\",\"classes\":\"\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainCreateBridge.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainCreateBridge.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainCreateBridge.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainCreateBridge.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainCreateBridge.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainCreateBridge.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainCreateBridge.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainCreateBridge.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainCreateBridge.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainCreateBridge.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainCreateBridge.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainCreateBridge.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainCreateBridge.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateBridge\"},{\"kind\":256,\"name\":\"XChainCreateClaimID\",\"url\":\"interfaces/XChainCreateClaimID.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainCreateClaimID.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainCreateClaimID.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/XChainCreateClaimID.html#SignatureReward\",\"classes\":\"\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"OtherChainSource\",\"url\":\"interfaces/XChainCreateClaimID.html#OtherChainSource\",\"classes\":\"\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainCreateClaimID.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainCreateClaimID.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainCreateClaimID.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainCreateClaimID.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainCreateClaimID.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainCreateClaimID.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainCreateClaimID.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainCreateClaimID.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainCreateClaimID.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainCreateClaimID.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainCreateClaimID.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainCreateClaimID.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainCreateClaimID.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainCreateClaimID\"},{\"kind\":256,\"name\":\"XChainAccountCreateCommit\",\"url\":\"interfaces/XChainAccountCreateCommit.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainAccountCreateCommit.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainAccountCreateCommit.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/XChainAccountCreateCommit.html#SignatureReward\",\"classes\":\"\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Destination\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Destination\",\"classes\":\"\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Amount\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Amount\",\"classes\":\"\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainAccountCreateCommit.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Flags\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainAccountCreateCommit.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainAccountCreateCommit.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainAccountCreateCommit.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainAccountCreateCommit.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainAccountCreateCommit.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainAccountCreateCommit.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainAccountCreateCommit.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainAccountCreateCommit\"},{\"kind\":256,\"name\":\"XChainModifyBridge\",\"url\":\"interfaces/XChainModifyBridge.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"TransactionType\",\"url\":\"interfaces/XChainModifyBridge.html#TransactionType\",\"classes\":\"\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainModifyBridge.html#XChainBridge\",\"classes\":\"\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"SignatureReward\",\"url\":\"interfaces/XChainModifyBridge.html#SignatureReward\",\"classes\":\"\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"MinAccountCreateAmount\",\"url\":\"interfaces/XChainModifyBridge.html#MinAccountCreateAmount\",\"classes\":\"\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"interfaces/XChainModifyBridge.html#Flags\",\"classes\":\"\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/XChainModifyBridge.html#Account\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Fee\",\"url\":\"interfaces/XChainModifyBridge.html#Fee\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"interfaces/XChainModifyBridge.html#Sequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"AccountTxnID\",\"url\":\"interfaces/XChainModifyBridge.html#AccountTxnID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"LastLedgerSequence\",\"url\":\"interfaces/XChainModifyBridge.html#LastLedgerSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Memos\",\"url\":\"interfaces/XChainModifyBridge.html#Memos\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"Signers\",\"url\":\"interfaces/XChainModifyBridge.html#Signers\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"SourceTag\",\"url\":\"interfaces/XChainModifyBridge.html#SourceTag\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/XChainModifyBridge.html#SigningPubKey\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"TicketSequence\",\"url\":\"interfaces/XChainModifyBridge.html#TicketSequence\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/XChainModifyBridge.html#TxnSignature\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":1024,\"name\":\"NetworkID\",\"url\":\"interfaces/XChainModifyBridge.html#NetworkID\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XChainModifyBridge\"},{\"kind\":8,\"name\":\"XChainModifyBridgeFlags\",\"url\":\"enums/XChainModifyBridgeFlags.html\",\"classes\":\"\"},{\"kind\":16,\"name\":\"tfClearAccountCreateAmount\",\"url\":\"enums/XChainModifyBridgeFlags.html#tfClearAccountCreateAmount\",\"classes\":\"\",\"parent\":\"XChainModifyBridgeFlags\"},{\"kind\":256,\"name\":\"XChainModifyBridgeFlagsInterface\",\"url\":\"interfaces/XChainModifyBridgeFlagsInterface.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"tfClearAccountCreateAmount\",\"url\":\"interfaces/XChainModifyBridgeFlagsInterface.html#tfClearAccountCreateAmount\",\"classes\":\"\",\"parent\":\"XChainModifyBridgeFlagsInterface\"},{\"kind\":64,\"name\":\"isCreatedNode\",\"url\":\"functions/isCreatedNode.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isModifiedNode\",\"url\":\"functions/isModifiedNode.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isDeletedNode\",\"url\":\"functions/isDeletedNode.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"CreatedNode\",\"url\":\"interfaces/CreatedNode.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"CreatedNode\",\"url\":\"interfaces/CreatedNode.html#CreatedNode\",\"classes\":\"\",\"parent\":\"CreatedNode\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/CreatedNode.html#CreatedNode.__type\",\"classes\":\"\",\"parent\":\"CreatedNode.CreatedNode\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/CreatedNode.html#CreatedNode.__type.LedgerEntryType\",\"classes\":\"\",\"parent\":\"CreatedNode.CreatedNode.__type\"},{\"kind\":1024,\"name\":\"LedgerIndex\",\"url\":\"interfaces/CreatedNode.html#CreatedNode.__type.LedgerIndex\",\"classes\":\"\",\"parent\":\"CreatedNode.CreatedNode.__type\"},{\"kind\":1024,\"name\":\"NewFields\",\"url\":\"interfaces/CreatedNode.html#CreatedNode.__type.NewFields\",\"classes\":\"\",\"parent\":\"CreatedNode.CreatedNode.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/CreatedNode.html#CreatedNode.__type.NewFields.__type-1\",\"classes\":\"\",\"parent\":\"CreatedNode.CreatedNode.__type.NewFields\"},{\"kind\":256,\"name\":\"ModifiedNode\",\"url\":\"interfaces/ModifiedNode.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"ModifiedNode\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode\",\"classes\":\"\",\"parent\":\"ModifiedNode\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.LedgerEntryType\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":1024,\"name\":\"LedgerIndex\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.LedgerIndex\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":1024,\"name\":\"FinalFields\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.FinalFields\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.FinalFields.__type-1\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type.FinalFields\"},{\"kind\":1024,\"name\":\"PreviousFields\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.PreviousFields\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.PreviousFields.__type-2\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type.PreviousFields\"},{\"kind\":1024,\"name\":\"PreviousTxnID\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.PreviousTxnID\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":1024,\"name\":\"PreviousTxnLgrSeq\",\"url\":\"interfaces/ModifiedNode.html#ModifiedNode.__type.PreviousTxnLgrSeq\",\"classes\":\"\",\"parent\":\"ModifiedNode.ModifiedNode.__type\"},{\"kind\":256,\"name\":\"DeletedNode\",\"url\":\"interfaces/DeletedNode.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"DeletedNode\",\"url\":\"interfaces/DeletedNode.html#DeletedNode\",\"classes\":\"\",\"parent\":\"DeletedNode\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/DeletedNode.html#DeletedNode.__type\",\"classes\":\"\",\"parent\":\"DeletedNode.DeletedNode\"},{\"kind\":1024,\"name\":\"LedgerEntryType\",\"url\":\"interfaces/DeletedNode.html#DeletedNode.__type.LedgerEntryType\",\"classes\":\"\",\"parent\":\"DeletedNode.DeletedNode.__type\"},{\"kind\":1024,\"name\":\"LedgerIndex\",\"url\":\"interfaces/DeletedNode.html#DeletedNode.__type.LedgerIndex\",\"classes\":\"\",\"parent\":\"DeletedNode.DeletedNode.__type\"},{\"kind\":1024,\"name\":\"FinalFields\",\"url\":\"interfaces/DeletedNode.html#DeletedNode.__type.FinalFields\",\"classes\":\"\",\"parent\":\"DeletedNode.DeletedNode.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/DeletedNode.html#DeletedNode.__type.FinalFields.__type-1\",\"classes\":\"\",\"parent\":\"DeletedNode.DeletedNode.__type.FinalFields\"},{\"kind\":2097152,\"name\":\"Node\",\"url\":\"types/Node.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"TransactionMetadataBase\",\"url\":\"interfaces/TransactionMetadataBase.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"AffectedNodes\",\"url\":\"interfaces/TransactionMetadataBase.html#AffectedNodes\",\"classes\":\"\",\"parent\":\"TransactionMetadataBase\"},{\"kind\":1024,\"name\":\"DeliveredAmount\",\"url\":\"interfaces/TransactionMetadataBase.html#DeliveredAmount\",\"classes\":\"\",\"parent\":\"TransactionMetadataBase\"},{\"kind\":1024,\"name\":\"delivered_amount\",\"url\":\"interfaces/TransactionMetadataBase.html#delivered_amount\",\"classes\":\"\",\"parent\":\"TransactionMetadataBase\"},{\"kind\":1024,\"name\":\"TransactionIndex\",\"url\":\"interfaces/TransactionMetadataBase.html#TransactionIndex\",\"classes\":\"\",\"parent\":\"TransactionMetadataBase\"},{\"kind\":1024,\"name\":\"TransactionResult\",\"url\":\"interfaces/TransactionMetadataBase.html#TransactionResult\",\"classes\":\"\",\"parent\":\"TransactionMetadataBase\"},{\"kind\":2097152,\"name\":\"TransactionMetadata\",\"url\":\"types/TransactionMetadata.html\",\"classes\":\"\"},{\"kind\":2097152,\"name\":\"LedgerIndex\",\"url\":\"types/LedgerIndex.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"XRP\",\"url\":\"interfaces/XRP.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/XRP.html#currency\",\"classes\":\"\",\"parent\":\"XRP\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/XRP.html#issuer\",\"classes\":\"\",\"parent\":\"XRP\"},{\"kind\":256,\"name\":\"IssuedCurrency\",\"url\":\"interfaces/IssuedCurrency.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/IssuedCurrency.html#currency\",\"classes\":\"\",\"parent\":\"IssuedCurrency\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/IssuedCurrency.html#issuer\",\"classes\":\"\",\"parent\":\"IssuedCurrency\"},{\"kind\":2097152,\"name\":\"Currency\",\"url\":\"types/Currency.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"IssuedCurrencyAmount\",\"url\":\"interfaces/IssuedCurrencyAmount.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"interfaces/IssuedCurrencyAmount.html#value\",\"classes\":\"\",\"parent\":\"IssuedCurrencyAmount\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/IssuedCurrencyAmount.html#currency\",\"classes\":\"tsd-is-inherited\",\"parent\":\"IssuedCurrencyAmount\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/IssuedCurrencyAmount.html#issuer\",\"classes\":\"tsd-is-inherited\",\"parent\":\"IssuedCurrencyAmount\"},{\"kind\":2097152,\"name\":\"Amount\",\"url\":\"types/Amount.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"Balance\",\"url\":\"interfaces/Balance.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/Balance.html#currency\",\"classes\":\"\",\"parent\":\"Balance\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/Balance.html#issuer\",\"classes\":\"\",\"parent\":\"Balance\"},{\"kind\":1024,\"name\":\"value\",\"url\":\"interfaces/Balance.html#value\",\"classes\":\"\",\"parent\":\"Balance\"},{\"kind\":256,\"name\":\"Signer\",\"url\":\"interfaces/Signer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Signer\",\"url\":\"interfaces/Signer.html#Signer\",\"classes\":\"\",\"parent\":\"Signer\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/Signer.html#Signer.__type\",\"classes\":\"\",\"parent\":\"Signer.Signer\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/Signer.html#Signer.__type.Account\",\"classes\":\"\",\"parent\":\"Signer.Signer.__type\"},{\"kind\":1024,\"name\":\"TxnSignature\",\"url\":\"interfaces/Signer.html#Signer.__type.TxnSignature\",\"classes\":\"\",\"parent\":\"Signer.Signer.__type\"},{\"kind\":1024,\"name\":\"SigningPubKey\",\"url\":\"interfaces/Signer.html#Signer.__type.SigningPubKey\",\"classes\":\"\",\"parent\":\"Signer.Signer.__type\"},{\"kind\":256,\"name\":\"Memo\",\"url\":\"interfaces/Memo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"Memo\",\"url\":\"interfaces/Memo.html#Memo\",\"classes\":\"\",\"parent\":\"Memo\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/Memo.html#Memo.__type\",\"classes\":\"\",\"parent\":\"Memo.Memo\"},{\"kind\":1024,\"name\":\"MemoData\",\"url\":\"interfaces/Memo.html#Memo.__type.MemoData\",\"classes\":\"\",\"parent\":\"Memo.Memo.__type\"},{\"kind\":1024,\"name\":\"MemoType\",\"url\":\"interfaces/Memo.html#Memo.__type.MemoType\",\"classes\":\"\",\"parent\":\"Memo.Memo.__type\"},{\"kind\":1024,\"name\":\"MemoFormat\",\"url\":\"interfaces/Memo.html#Memo.__type.MemoFormat\",\"classes\":\"\",\"parent\":\"Memo.Memo.__type\"},{\"kind\":2097152,\"name\":\"StreamType\",\"url\":\"types/StreamType.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"PathStep\",\"url\":\"interfaces/PathStep.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"account\",\"url\":\"interfaces/PathStep.html#account\",\"classes\":\"\",\"parent\":\"PathStep\"},{\"kind\":1024,\"name\":\"currency\",\"url\":\"interfaces/PathStep.html#currency\",\"classes\":\"\",\"parent\":\"PathStep\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/PathStep.html#issuer\",\"classes\":\"\",\"parent\":\"PathStep\"},{\"kind\":2097152,\"name\":\"Path\",\"url\":\"types/Path.html\",\"classes\":\"\"},{\"kind\":256,\"name\":\"SignerEntry\",\"url\":\"interfaces/SignerEntry.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"SignerEntry\",\"url\":\"interfaces/SignerEntry.html#SignerEntry\",\"classes\":\"\",\"parent\":\"SignerEntry\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/SignerEntry.html#SignerEntry.__type\",\"classes\":\"\",\"parent\":\"SignerEntry.SignerEntry\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/SignerEntry.html#SignerEntry.__type.Account\",\"classes\":\"\",\"parent\":\"SignerEntry.SignerEntry.__type\"},{\"kind\":1024,\"name\":\"SignerWeight\",\"url\":\"interfaces/SignerEntry.html#SignerEntry.__type.SignerWeight\",\"classes\":\"\",\"parent\":\"SignerEntry.SignerEntry.__type\"},{\"kind\":1024,\"name\":\"WalletLocator\",\"url\":\"interfaces/SignerEntry.html#SignerEntry.__type.WalletLocator\",\"classes\":\"\",\"parent\":\"SignerEntry.SignerEntry.__type\"},{\"kind\":256,\"name\":\"ResponseOnlyTxInfo\",\"url\":\"interfaces/ResponseOnlyTxInfo.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"date\",\"url\":\"interfaces/ResponseOnlyTxInfo.html#date\",\"classes\":\"\",\"parent\":\"ResponseOnlyTxInfo\"},{\"kind\":1024,\"name\":\"hash\",\"url\":\"interfaces/ResponseOnlyTxInfo.html#hash\",\"classes\":\"\",\"parent\":\"ResponseOnlyTxInfo\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/ResponseOnlyTxInfo.html#ledger_index\",\"classes\":\"\",\"parent\":\"ResponseOnlyTxInfo\"},{\"kind\":1024,\"name\":\"inLedger\",\"url\":\"interfaces/ResponseOnlyTxInfo.html#inLedger\",\"classes\":\"\",\"parent\":\"ResponseOnlyTxInfo\"},{\"kind\":256,\"name\":\"NFTOffer\",\"url\":\"interfaces/NFTOffer.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"amount\",\"url\":\"interfaces/NFTOffer.html#amount\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/NFTOffer.html#flags\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":1024,\"name\":\"nft_offer_index\",\"url\":\"interfaces/NFTOffer.html#nft_offer_index\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":1024,\"name\":\"owner\",\"url\":\"interfaces/NFTOffer.html#owner\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":1024,\"name\":\"destination\",\"url\":\"interfaces/NFTOffer.html#destination\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":1024,\"name\":\"expiration\",\"url\":\"interfaces/NFTOffer.html#expiration\",\"classes\":\"\",\"parent\":\"NFTOffer\"},{\"kind\":256,\"name\":\"NFToken\",\"url\":\"interfaces/NFToken.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"nft_id\",\"url\":\"interfaces/NFToken.html#nft_id\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"ledger_index\",\"url\":\"interfaces/NFToken.html#ledger_index\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"owner\",\"url\":\"interfaces/NFToken.html#owner\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"is_burned\",\"url\":\"interfaces/NFToken.html#is_burned\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"flags\",\"url\":\"interfaces/NFToken.html#flags\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"transfer_fee\",\"url\":\"interfaces/NFToken.html#transfer_fee\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"issuer\",\"url\":\"interfaces/NFToken.html#issuer\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"nft_taxon\",\"url\":\"interfaces/NFToken.html#nft_taxon\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"nft_serial\",\"url\":\"interfaces/NFToken.html#nft_serial\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":1024,\"name\":\"uri\",\"url\":\"interfaces/NFToken.html#uri\",\"classes\":\"\",\"parent\":\"NFToken\"},{\"kind\":256,\"name\":\"AuthAccount\",\"url\":\"interfaces/AuthAccount.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"AuthAccount\",\"url\":\"interfaces/AuthAccount.html#AuthAccount\",\"classes\":\"\",\"parent\":\"AuthAccount\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"interfaces/AuthAccount.html#AuthAccount.__type\",\"classes\":\"\",\"parent\":\"AuthAccount.AuthAccount\"},{\"kind\":1024,\"name\":\"Account\",\"url\":\"interfaces/AuthAccount.html#AuthAccount.__type.Account\",\"classes\":\"\",\"parent\":\"AuthAccount.AuthAccount.__type\"},{\"kind\":256,\"name\":\"XChainBridge\",\"url\":\"interfaces/XChainBridge.html\",\"classes\":\"\"},{\"kind\":1024,\"name\":\"LockingChainDoor\",\"url\":\"interfaces/XChainBridge.html#LockingChainDoor\",\"classes\":\"\",\"parent\":\"XChainBridge\"},{\"kind\":1024,\"name\":\"LockingChainIssue\",\"url\":\"interfaces/XChainBridge.html#LockingChainIssue\",\"classes\":\"\",\"parent\":\"XChainBridge\"},{\"kind\":1024,\"name\":\"IssuingChainDoor\",\"url\":\"interfaces/XChainBridge.html#IssuingChainDoor\",\"classes\":\"\",\"parent\":\"XChainBridge\"},{\"kind\":1024,\"name\":\"IssuingChainIssue\",\"url\":\"interfaces/XChainBridge.html#IssuingChainIssue\",\"classes\":\"\",\"parent\":\"XChainBridge\"},{\"kind\":64,\"name\":\"getBalanceChanges\",\"url\":\"functions/getBalanceChanges.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"dropsToXrp\",\"url\":\"functions/dropsToXrp.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"xrpToDrops\",\"url\":\"functions/xrpToDrops.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"hasNextPage\",\"url\":\"functions/hasNextPage.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"rippleTimeToISOTime\",\"url\":\"functions/rippleTimeToISOTime.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isoTimeToRippleTime\",\"url\":\"functions/isoTimeToRippleTime.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"rippleTimeToUnixTime\",\"url\":\"functions/rippleTimeToUnixTime.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"unixTimeToRippleTime\",\"url\":\"functions/unixTimeToRippleTime.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"percentToQuality\",\"url\":\"functions/percentToQuality.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"decimalToQuality\",\"url\":\"functions/decimalToQuality.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"percentToTransferRate\",\"url\":\"functions/percentToTransferRate.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"decimalToTransferRate\",\"url\":\"functions/decimalToTransferRate.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"transferRateToDecimal\",\"url\":\"functions/transferRateToDecimal.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"qualityToDecimal\",\"url\":\"functions/qualityToDecimal.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isValidSecret\",\"url\":\"functions/isValidSecret.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"isValidAddress\",\"url\":\"functions/isValidAddress.html\",\"classes\":\"\"},{\"kind\":32,\"name\":\"hashes\",\"url\":\"variables/hashes.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type\",\"classes\":\"\",\"parent\":\"hashes\"},{\"kind\":1024,\"name\":\"hashSignedTx\",\"url\":\"variables/hashes.html#__type.hashSignedTx\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashSignedTx.__type-13\",\"classes\":\"\",\"parent\":\"hashes.__type.hashSignedTx\"},{\"kind\":1024,\"name\":\"hashTx\",\"url\":\"variables/hashes.html#__type.hashTx\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashTx.__type-21\",\"classes\":\"\",\"parent\":\"hashes.__type.hashTx\"},{\"kind\":1024,\"name\":\"hashAccountRoot\",\"url\":\"variables/hashes.html#__type.hashAccountRoot\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashAccountRoot.__type-1\",\"classes\":\"\",\"parent\":\"hashes.__type.hashAccountRoot\"},{\"kind\":1024,\"name\":\"hashSignerListId\",\"url\":\"variables/hashes.html#__type.hashSignerListId\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashSignerListId.__type-15\",\"classes\":\"\",\"parent\":\"hashes.__type.hashSignerListId\"},{\"kind\":1024,\"name\":\"hashOfferId\",\"url\":\"variables/hashes.html#__type.hashOfferId\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashOfferId.__type-9\",\"classes\":\"\",\"parent\":\"hashes.__type.hashOfferId\"},{\"kind\":1024,\"name\":\"hashTrustline\",\"url\":\"variables/hashes.html#__type.hashTrustline\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashTrustline.__type-19\",\"classes\":\"\",\"parent\":\"hashes.__type.hashTrustline\"},{\"kind\":1024,\"name\":\"hashTxTree\",\"url\":\"variables/hashes.html#__type.hashTxTree\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashTxTree.__type-23\",\"classes\":\"\",\"parent\":\"hashes.__type.hashTxTree\"},{\"kind\":1024,\"name\":\"hashStateTree\",\"url\":\"variables/hashes.html#__type.hashStateTree\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashStateTree.__type-17\",\"classes\":\"\",\"parent\":\"hashes.__type.hashStateTree\"},{\"kind\":1024,\"name\":\"hashLedger\",\"url\":\"variables/hashes.html#__type.hashLedger\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashLedger.__type-5\",\"classes\":\"\",\"parent\":\"hashes.__type.hashLedger\"},{\"kind\":1024,\"name\":\"hashLedgerHeader\",\"url\":\"variables/hashes.html#__type.hashLedgerHeader\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashLedgerHeader.__type-7\",\"classes\":\"\",\"parent\":\"hashes.__type.hashLedgerHeader\"},{\"kind\":1024,\"name\":\"hashEscrow\",\"url\":\"variables/hashes.html#__type.hashEscrow\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashEscrow.__type-3\",\"classes\":\"\",\"parent\":\"hashes.__type.hashEscrow\"},{\"kind\":1024,\"name\":\"hashPaymentChannel\",\"url\":\"variables/hashes.html#__type.hashPaymentChannel\",\"classes\":\"\",\"parent\":\"hashes.__type\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"variables/hashes.html#__type.hashPaymentChannel.__type-11\",\"classes\":\"\",\"parent\":\"hashes.__type.hashPaymentChannel\"},{\"kind\":64,\"name\":\"deriveXAddress\",\"url\":\"functions/deriveXAddress.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"signPaymentChannelClaim\",\"url\":\"functions/signPaymentChannelClaim.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"verifyPaymentChannelClaim\",\"url\":\"functions/verifyPaymentChannelClaim.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"convertStringToHex\",\"url\":\"functions/convertStringToHex.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"convertHexToString\",\"url\":\"functions/convertHexToString.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"encode\",\"url\":\"functions/encode.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"decode\",\"url\":\"functions/decode.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"encodeForMultiSigning\",\"url\":\"functions/encodeForMultiSigning.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"encodeForSigning\",\"url\":\"functions/encodeForSigning.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"encodeForSigningClaim\",\"url\":\"functions/encodeForSigningClaim.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"getNFTokenID\",\"url\":\"functions/getNFTokenID.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"parseNFTokenID\",\"url\":\"functions/parseNFTokenID.html\",\"classes\":\"\"},{\"kind\":65536,\"name\":\"__type\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID\"},{\"kind\":1024,\"name\":\"NFTokenID\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.NFTokenID\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":1024,\"name\":\"Flags\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.Flags\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":1024,\"name\":\"TransferFee\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.TransferFee\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":1024,\"name\":\"Issuer\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.Issuer\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":1024,\"name\":\"Taxon\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.Taxon\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":1024,\"name\":\"Sequence\",\"url\":\"functions/parseNFTokenID.html#parseNFTokenID.__type.Sequence\",\"classes\":\"\",\"parent\":\"parseNFTokenID.parseNFTokenID.__type\"},{\"kind\":64,\"name\":\"getXChainClaimID\",\"url\":\"functions/getXChainClaimID.html\",\"classes\":\"\"},{\"kind\":128,\"name\":\"XrplError\",\"url\":\"classes/XrplError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/XrplError.html#constructor\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/XrplError.html#name\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/XrplError.html#message\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/XrplError.html#data\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/XrplError.html#toString\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/XrplError.html#inspect\",\"classes\":\"\",\"parent\":\"XrplError\"},{\"kind\":128,\"name\":\"UnexpectedError\",\"url\":\"classes/UnexpectedError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/UnexpectedError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/UnexpectedError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/UnexpectedError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/UnexpectedError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/UnexpectedError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/UnexpectedError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"UnexpectedError\"},{\"kind\":128,\"name\":\"ConnectionError\",\"url\":\"classes/ConnectionError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ConnectionError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ConnectionError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/ConnectionError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/ConnectionError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/ConnectionError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/ConnectionError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ConnectionError\"},{\"kind\":128,\"name\":\"RippledError\",\"url\":\"classes/RippledError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RippledError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/RippledError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/RippledError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/RippledError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/RippledError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/RippledError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledError\"},{\"kind\":128,\"name\":\"NotConnectedError\",\"url\":\"classes/NotConnectedError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NotConnectedError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/NotConnectedError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/NotConnectedError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/NotConnectedError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/NotConnectedError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/NotConnectedError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotConnectedError\"},{\"kind\":128,\"name\":\"DisconnectedError\",\"url\":\"classes/DisconnectedError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/DisconnectedError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/DisconnectedError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/DisconnectedError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/DisconnectedError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/DisconnectedError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/DisconnectedError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"DisconnectedError\"},{\"kind\":128,\"name\":\"RippledNotInitializedError\",\"url\":\"classes/RippledNotInitializedError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/RippledNotInitializedError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/RippledNotInitializedError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/RippledNotInitializedError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/RippledNotInitializedError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/RippledNotInitializedError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/RippledNotInitializedError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"RippledNotInitializedError\"},{\"kind\":128,\"name\":\"TimeoutError\",\"url\":\"classes/TimeoutError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/TimeoutError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/TimeoutError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/TimeoutError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/TimeoutError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/TimeoutError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/TimeoutError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"TimeoutError\"},{\"kind\":128,\"name\":\"ResponseFormatError\",\"url\":\"classes/ResponseFormatError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ResponseFormatError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ResponseFormatError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/ResponseFormatError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/ResponseFormatError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/ResponseFormatError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/ResponseFormatError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ResponseFormatError\"},{\"kind\":128,\"name\":\"ValidationError\",\"url\":\"classes/ValidationError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/ValidationError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/ValidationError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/ValidationError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/ValidationError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/ValidationError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/ValidationError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"ValidationError\"},{\"kind\":128,\"name\":\"NotFoundError\",\"url\":\"classes/NotFoundError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/NotFoundError.html#constructor\",\"classes\":\"\",\"parent\":\"NotFoundError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/NotFoundError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotFoundError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/NotFoundError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotFoundError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/NotFoundError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotFoundError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/NotFoundError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotFoundError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/NotFoundError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"NotFoundError\"},{\"kind\":128,\"name\":\"XRPLFaucetError\",\"url\":\"classes/XRPLFaucetError.html\",\"classes\":\"\"},{\"kind\":512,\"name\":\"constructor\",\"url\":\"classes/XRPLFaucetError.html#constructor\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":1024,\"name\":\"name\",\"url\":\"classes/XRPLFaucetError.html#name\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":1024,\"name\":\"message\",\"url\":\"classes/XRPLFaucetError.html#message\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":1024,\"name\":\"data\",\"url\":\"classes/XRPLFaucetError.html#data\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":2048,\"name\":\"toString\",\"url\":\"classes/XRPLFaucetError.html#toString\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":2048,\"name\":\"inspect\",\"url\":\"classes/XRPLFaucetError.html#inspect\",\"classes\":\"tsd-is-inherited\",\"parent\":\"XRPLFaucetError\"},{\"kind\":64,\"name\":\"verifySignature\",\"url\":\"functions/verifySignature.html\",\"classes\":\"\"},{\"kind\":64,\"name\":\"multisign\",\"url\":\"functions/multisign.html\",\"classes\":\"\"}],\"index\":{\"version\":\"2.3.9\",\"fields\":[\"name\",\"comment\"],\"fieldVectors\":[[\"name/0\",[0,75.905]],[\"comment/0\",[]],[\"name/1\",[1,53.218]],[\"comment/1\",[]],[\"name/2\",[2,75.905]],[\"comment/2\",[]],[\"name/3\",[3,70.797]],[\"comment/3\",[]],[\"name/4\",[4,70.797]],[\"comment/4\",[]],[\"name/5\",[5,41.353]],[\"comment/5\",[]],[\"name/6\",[6,75.905]],[\"comment/6\",[]],[\"name/7\",[7,70.797]],[\"comment/7\",[]],[\"name/8\",[8,67.432]],[\"comment/8\",[]],[\"name/9\",[9,75.905]],[\"comment/9\",[]],[\"name/10\",[10,75.905]],[\"comment/10\",[]],[\"name/11\",[11,75.905]],[\"comment/11\",[]],[\"name/12\",[12,75.905]],[\"comment/12\",[]],[\"name/13\",[13,75.905]],[\"comment/13\",[]],[\"name/14\",[14,75.905]],[\"comment/14\",[]],[\"name/15\",[15,75.905]],[\"comment/15\",[]],[\"name/16\",[16,75.905]],[\"comment/16\",[]],[\"name/17\",[17,75.905]],[\"comment/17\",[]],[\"name/18\",[18,75.905]],[\"comment/18\",[]],[\"name/19\",[19,75.905]],[\"comment/19\",[]],[\"name/20\",[20,75.905]],[\"comment/20\",[]],[\"name/21\",[21,75.905]],[\"comment/21\",[]],[\"name/22\",[22,75.905]],[\"comment/22\",[]],[\"name/23\",[23,75.905]],[\"comment/23\",[]],[\"name/24\",[24,75.905]],[\"comment/24\",[]],[\"name/25\",[25,75.905]],[\"comment/25\",[]],[\"name/26\",[3,70.797]],[\"comment/26\",[]],[\"name/27\",[4,70.797]],[\"comment/27\",[]],[\"name/28\",[26,75.905]],[\"comment/28\",[]],[\"name/29\",[27,75.905]],[\"comment/29\",[]],[\"name/30\",[28,75.905]],[\"comment/30\",[]],[\"name/31\",[29,35.13]],[\"comment/31\",[]],[\"name/32\",[30,75.905]],[\"comment/32\",[]],[\"name/33\",[31,75.905]],[\"comment/33\",[]],[\"name/34\",[32,75.905]],[\"comment/34\",[]],[\"name/35\",[33,75.905]],[\"comment/35\",[]],[\"name/36\",[34,75.905]],[\"comment/36\",[]],[\"name/37\",[35,75.905]],[\"comment/37\",[]],[\"name/38\",[36,75.905]],[\"comment/38\",[]],[\"name/39\",[37,47.573]],[\"comment/39\",[]],[\"name/40\",[38,75.905]],[\"comment/40\",[]],[\"name/41\",[39,75.905]],[\"comment/41\",[]],[\"name/42\",[40,75.905]],[\"comment/42\",[]],[\"name/43\",[41,75.905]],[\"comment/43\",[]],[\"name/44\",[42,75.905]],[\"comment/44\",[]],[\"name/45\",[43,75.905]],[\"comment/45\",[]],[\"name/46\",[44,75.905]],[\"comment/46\",[]],[\"name/47\",[29,35.13]],[\"comment/47\",[]],[\"name/48\",[45,75.905]],[\"comment/48\",[]],[\"name/49\",[46,75.905]],[\"comment/49\",[]],[\"name/50\",[47,75.905]],[\"comment/50\",[]],[\"name/51\",[48,75.905]],[\"comment/51\",[]],[\"name/52\",[1,53.218]],[\"comment/52\",[]],[\"name/53\",[49,61.242]],[\"comment/53\",[]],[\"name/54\",[50,75.905]],[\"comment/54\",[]],[\"name/55\",[51,75.905]],[\"comment/55\",[]],[\"name/56\",[52,75.905]],[\"comment/56\",[]],[\"name/57\",[53,75.905]],[\"comment/57\",[]],[\"name/58\",[54,75.905]],[\"comment/58\",[]],[\"name/59\",[29,35.13]],[\"comment/59\",[]],[\"name/60\",[55,61.242]],[\"comment/60\",[]],[\"name/61\",[56,59.811]],[\"comment/61\",[]],[\"name/62\",[57,75.905]],[\"comment/62\",[]],[\"name/63\",[58,75.905]],[\"comment/63\",[]],[\"name/64\",[59,75.905]],[\"comment/64\",[]],[\"name/65\",[60,75.905]],[\"comment/65\",[]],[\"name/66\",[61,75.905]],[\"comment/66\",[]],[\"name/67\",[62,70.797]],[\"comment/67\",[]],[\"name/68\",[63,75.905]],[\"comment/68\",[]],[\"name/69\",[64,47.573]],[\"comment/69\",[]],[\"name/70\",[65,35.243]],[\"comment/70\",[]],[\"name/71\",[66,59.811]],[\"comment/71\",[]],[\"name/72\",[67,36.987]],[\"comment/72\",[]],[\"name/73\",[68,75.905]],[\"comment/73\",[]],[\"name/74\",[69,40.544]],[\"comment/74\",[]],[\"name/75\",[70,41.353]],[\"comment/75\",[]],[\"name/76\",[71,75.905]],[\"comment/76\",[]],[\"name/77\",[72,67.432]],[\"comment/77\",[]],[\"name/78\",[73,70.797]],[\"comment/78\",[]],[\"name/79\",[74,70.797]],[\"comment/79\",[]],[\"name/80\",[75,70.797]],[\"comment/80\",[]],[\"name/81\",[76,70.797]],[\"comment/81\",[]],[\"name/82\",[77,70.797]],[\"comment/82\",[]],[\"name/83\",[78,70.797]],[\"comment/83\",[]],[\"name/84\",[79,70.797]],[\"comment/84\",[]],[\"name/85\",[80,75.905]],[\"comment/85\",[]],[\"name/86\",[81,75.905]],[\"comment/86\",[]],[\"name/87\",[82,75.905]],[\"comment/87\",[]],[\"name/88\",[83,70.797]],[\"comment/88\",[]],[\"name/89\",[84,47.973]],[\"comment/89\",[]],[\"name/90\",[85,48.39]],[\"comment/90\",[]],[\"name/91\",[86,48.39]],[\"comment/91\",[]],[\"name/92\",[87,75.905]],[\"comment/92\",[]],[\"name/93\",[88,70.797]],[\"comment/93\",[]],[\"name/94\",[89,70.797]],[\"comment/94\",[]],[\"name/95\",[90,70.797]],[\"comment/95\",[]],[\"name/96\",[91,70.797]],[\"comment/96\",[]],[\"name/97\",[92,70.797]],[\"comment/97\",[]],[\"name/98\",[93,70.797]],[\"comment/98\",[]],[\"name/99\",[94,70.797]],[\"comment/99\",[]],[\"name/100\",[95,70.797]],[\"comment/100\",[]],[\"name/101\",[96,70.797]],[\"comment/101\",[]],[\"name/102\",[97,70.797]],[\"comment/102\",[]],[\"name/103\",[98,70.797]],[\"comment/103\",[]],[\"name/104\",[99,70.797]],[\"comment/104\",[]],[\"name/105\",[100,70.797]],[\"comment/105\",[]],[\"name/106\",[101,70.797]],[\"comment/106\",[]],[\"name/107\",[102,70.797]],[\"comment/107\",[]],[\"name/108\",[103,75.905]],[\"comment/108\",[]],[\"name/109\",[88,70.797]],[\"comment/109\",[]],[\"name/110\",[89,70.797]],[\"comment/110\",[]],[\"name/111\",[90,70.797]],[\"comment/111\",[]],[\"name/112\",[91,70.797]],[\"comment/112\",[]],[\"name/113\",[92,70.797]],[\"comment/113\",[]],[\"name/114\",[93,70.797]],[\"comment/114\",[]],[\"name/115\",[94,70.797]],[\"comment/115\",[]],[\"name/116\",[95,70.797]],[\"comment/116\",[]],[\"name/117\",[96,70.797]],[\"comment/117\",[]],[\"name/118\",[97,70.797]],[\"comment/118\",[]],[\"name/119\",[98,70.797]],[\"comment/119\",[]],[\"name/120\",[99,70.797]],[\"comment/120\",[]],[\"name/121\",[100,70.797]],[\"comment/121\",[]],[\"name/122\",[101,70.797]],[\"comment/122\",[]],[\"name/123\",[102,70.797]],[\"comment/123\",[]],[\"name/124\",[104,75.905]],[\"comment/124\",[]],[\"name/125\",[105,67.432]],[\"comment/125\",[]],[\"name/126\",[64,47.573]],[\"comment/126\",[]],[\"name/127\",[105,67.432]],[\"comment/127\",[]],[\"name/128\",[106,75.905]],[\"comment/128\",[]],[\"name/129\",[67,36.987]],[\"comment/129\",[]],[\"name/130\",[84,47.973]],[\"comment/130\",[]],[\"name/131\",[85,48.39]],[\"comment/131\",[]],[\"name/132\",[86,48.39]],[\"comment/132\",[]],[\"name/133\",[107,67.432]],[\"comment/133\",[]],[\"name/134\",[64,47.573]],[\"comment/134\",[]],[\"name/135\",[65,35.243]],[\"comment/135\",[]],[\"name/136\",[108,58.559]],[\"comment/136\",[]],[\"name/137\",[109,58.559]],[\"comment/137\",[]],[\"name/138\",[110,75.905]],[\"comment/138\",[]],[\"name/139\",[29,35.13]],[\"comment/139\",[]],[\"name/140\",[65,35.243]],[\"comment/140\",[]],[\"name/141\",[111,70.797]],[\"comment/141\",[]],[\"name/142\",[112,75.905]],[\"comment/142\",[]],[\"name/143\",[113,52.551]],[\"comment/143\",[]],[\"name/144\",[114,70.797]],[\"comment/144\",[]],[\"name/145\",[115,75.905]],[\"comment/145\",[]],[\"name/146\",[116,64.919]],[\"comment/146\",[]],[\"name/147\",[117,75.905]],[\"comment/147\",[]],[\"name/148\",[67,36.987]],[\"comment/148\",[]],[\"name/149\",[84,47.973]],[\"comment/149\",[]],[\"name/150\",[85,48.39]],[\"comment/150\",[]],[\"name/151\",[86,48.39]],[\"comment/151\",[]],[\"name/152\",[118,70.797]],[\"comment/152\",[]],[\"name/153\",[64,47.573]],[\"comment/153\",[]],[\"name/154\",[65,35.243]],[\"comment/154\",[]],[\"name/155\",[119,59.811]],[\"comment/155\",[]],[\"name/156\",[120,54.703]],[\"comment/156\",[]],[\"name/157\",[121,62.912]],[\"comment/157\",[]],[\"name/158\",[122,67.432]],[\"comment/158\",[]],[\"name/159\",[123,75.905]],[\"comment/159\",[]],[\"name/160\",[124,67.432]],[\"comment/160\",[]],[\"name/161\",[67,36.987]],[\"comment/161\",[]],[\"name/162\",[125,53.933]],[\"comment/162\",[]],[\"name/163\",[84,47.973]],[\"comment/163\",[]],[\"name/164\",[85,48.39]],[\"comment/164\",[]],[\"name/165\",[86,48.39]],[\"comment/165\",[]],[\"name/166\",[126,70.797]],[\"comment/166\",[]],[\"name/167\",[64,47.573]],[\"comment/167\",[]],[\"name/168\",[65,35.243]],[\"comment/168\",[]],[\"name/169\",[127,52.551]],[\"comment/169\",[]],[\"name/170\",[67,36.987]],[\"comment/170\",[]],[\"name/171\",[125,53.933]],[\"comment/171\",[]],[\"name/172\",[85,48.39]],[\"comment/172\",[]],[\"name/173\",[86,48.39]],[\"comment/173\",[]],[\"name/174\",[128,67.432]],[\"comment/174\",[]],[\"name/175\",[69,40.544]],[\"comment/175\",[]],[\"name/176\",[129,67.432]],[\"comment/176\",[]],[\"name/177\",[130,57.447]],[\"comment/177\",[]],[\"name/178\",[113,52.551]],[\"comment/178\",[]],[\"name/179\",[131,67.432]],[\"comment/179\",[]],[\"name/180\",[132,40.94]],[\"comment/180\",[]],[\"name/181\",[84,47.973]],[\"comment/181\",[]],[\"name/182\",[133,70.797]],[\"comment/182\",[]],[\"name/183\",[64,47.573]],[\"comment/183\",[]],[\"name/184\",[65,35.243]],[\"comment/184\",[]],[\"name/185\",[134,70.797]],[\"comment/185\",[]],[\"name/186\",[67,36.987]],[\"comment/186\",[]],[\"name/187\",[125,53.933]],[\"comment/187\",[]],[\"name/188\",[84,47.973]],[\"comment/188\",[]],[\"name/189\",[85,48.39]],[\"comment/189\",[]],[\"name/190\",[86,48.39]],[\"comment/190\",[]],[\"name/191\",[135,75.905]],[\"comment/191\",[]],[\"name/192\",[64,47.573]],[\"comment/192\",[]],[\"name/193\",[67,36.987]],[\"comment/193\",[]],[\"name/194\",[136,75.905]],[\"comment/194\",[]],[\"name/195\",[137,75.905]],[\"comment/195\",[]],[\"name/196\",[138,75.905]],[\"comment/196\",[]],[\"name/197\",[139,75.905]],[\"comment/197\",[]],[\"name/198\",[140,58.559]],[\"comment/198\",[]],[\"name/199\",[141,75.905]],[\"comment/199\",[]],[\"name/200\",[142,75.905]],[\"comment/200\",[]],[\"name/201\",[143,75.905]],[\"comment/201\",[]],[\"name/202\",[144,75.905]],[\"comment/202\",[]],[\"name/203\",[84,47.973]],[\"comment/203\",[]],[\"name/204\",[85,48.39]],[\"comment/204\",[]],[\"name/205\",[86,48.39]],[\"comment/205\",[]],[\"name/206\",[145,70.797]],[\"comment/206\",[]],[\"name/207\",[64,47.573]],[\"comment/207\",[]],[\"name/208\",[65,35.243]],[\"comment/208\",[]],[\"name/209\",[146,51.926]],[\"comment/209\",[]],[\"name/210\",[147,70.797]],[\"comment/210\",[]],[\"name/211\",[148,61.242]],[\"comment/211\",[]],[\"name/212\",[67,36.987]],[\"comment/212\",[]],[\"name/213\",[125,53.933]],[\"comment/213\",[]],[\"name/214\",[84,47.973]],[\"comment/214\",[]],[\"name/215\",[85,48.39]],[\"comment/215\",[]],[\"name/216\",[86,48.39]],[\"comment/216\",[]],[\"name/217\",[149,70.797]],[\"comment/217\",[]],[\"name/218\",[64,47.573]],[\"comment/218\",[]],[\"name/219\",[65,35.243]],[\"comment/219\",[]],[\"name/220\",[127,52.551]],[\"comment/220\",[]],[\"name/221\",[37,47.573]],[\"comment/221\",[]],[\"name/222\",[150,67.432]],[\"comment/222\",[]],[\"name/223\",[151,64.919]],[\"comment/223\",[]],[\"name/224\",[152,70.797]],[\"comment/224\",[]],[\"name/225\",[67,36.987]],[\"comment/225\",[]],[\"name/226\",[132,40.94]],[\"comment/226\",[]],[\"name/227\",[130,57.447]],[\"comment/227\",[]],[\"name/228\",[125,53.933]],[\"comment/228\",[]],[\"name/229\",[129,67.432]],[\"comment/229\",[]],[\"name/230\",[84,47.973]],[\"comment/230\",[]],[\"name/231\",[85,48.39]],[\"comment/231\",[]],[\"name/232\",[86,48.39]],[\"comment/232\",[]],[\"name/233\",[153,75.905]],[\"comment/233\",[]],[\"name/234\",[154,75.905]],[\"comment/234\",[]],[\"name/235\",[64,47.573]],[\"comment/235\",[]],[\"name/236\",[67,36.987]],[\"comment/236\",[]],[\"name/237\",[84,47.973]],[\"comment/237\",[]],[\"name/238\",[85,48.39]],[\"comment/238\",[]],[\"name/239\",[86,48.39]],[\"comment/239\",[]],[\"name/240\",[155,75.905]],[\"comment/240\",[]],[\"name/241\",[156,70.797]],[\"comment/241\",[]],[\"name/242\",[157,70.797]],[\"comment/242\",[]],[\"name/243\",[158,70.797]],[\"comment/243\",[]],[\"name/244\",[159,70.797]],[\"comment/244\",[]],[\"name/245\",[160,75.905]],[\"comment/245\",[]],[\"name/246\",[161,70.797]],[\"comment/246\",[]],[\"name/247\",[162,70.797]],[\"comment/247\",[]],[\"name/248\",[163,70.797]],[\"comment/248\",[]],[\"name/249\",[164,75.905]],[\"comment/249\",[]],[\"name/250\",[165,70.797]],[\"comment/250\",[]],[\"name/251\",[166,70.797]],[\"comment/251\",[]],[\"name/252\",[167,70.797]],[\"comment/252\",[]],[\"name/253\",[168,67.432]],[\"comment/253\",[]],[\"name/254\",[169,70.797]],[\"comment/254\",[]],[\"name/255\",[170,70.797]],[\"comment/255\",[]],[\"name/256\",[171,67.432]],[\"comment/256\",[]],[\"name/257\",[172,42.703]],[\"comment/257\",[]],[\"name/258\",[173,41.565]],[\"comment/258\",[]],[\"name/259\",[174,70.797]],[\"comment/259\",[]],[\"name/260\",[175,70.797]],[\"comment/260\",[]],[\"name/261\",[176,70.797]],[\"comment/261\",[]],[\"name/262\",[177,70.797]],[\"comment/262\",[]],[\"name/263\",[178,58.559]],[\"comment/263\",[]],[\"name/264\",[179,75.905]],[\"comment/264\",[]],[\"name/265\",[62,70.797]],[\"comment/265\",[]],[\"name/266\",[180,75.905]],[\"comment/266\",[]],[\"name/267\",[64,47.573]],[\"comment/267\",[]],[\"name/268\",[181,41.353]],[\"comment/268\",[]],[\"name/269\",[182,70.797]],[\"comment/269\",[]],[\"name/270\",[67,36.987]],[\"comment/270\",[]],[\"name/271\",[84,47.973]],[\"comment/271\",[]],[\"name/272\",[85,48.39]],[\"comment/272\",[]],[\"name/273\",[86,48.39]],[\"comment/273\",[]],[\"name/274\",[183,70.797]],[\"comment/274\",[]],[\"name/275\",[183,70.797]],[\"comment/275\",[]],[\"name/276\",[29,35.13]],[\"comment/276\",[]],[\"name/277\",[184,70.797]],[\"comment/277\",[]],[\"name/278\",[185,75.905]],[\"comment/278\",[]],[\"name/279\",[186,75.905]],[\"comment/279\",[]],[\"name/280\",[187,75.905]],[\"comment/280\",[]],[\"name/281\",[64,47.573]],[\"comment/281\",[]],[\"name/282\",[188,75.905]],[\"comment/282\",[]],[\"name/283\",[189,75.905]],[\"comment/283\",[]],[\"name/284\",[190,75.905]],[\"comment/284\",[]],[\"name/285\",[84,47.973]],[\"comment/285\",[]],[\"name/286\",[85,48.39]],[\"comment/286\",[]],[\"name/287\",[86,48.39]],[\"comment/287\",[]],[\"name/288\",[191,75.905]],[\"comment/288\",[]],[\"name/289\",[64,47.573]],[\"comment/289\",[]],[\"name/290\",[37,47.573]],[\"comment/290\",[]],[\"name/291\",[127,52.551]],[\"comment/291\",[]],[\"name/292\",[113,52.551]],[\"comment/292\",[]],[\"name/293\",[67,36.987]],[\"comment/293\",[]],[\"name/294\",[192,75.905]],[\"comment/294\",[]],[\"name/295\",[140,58.559]],[\"comment/295\",[]],[\"name/296\",[125,53.933]],[\"comment/296\",[]],[\"name/297\",[84,47.973]],[\"comment/297\",[]],[\"name/298\",[85,48.39]],[\"comment/298\",[]],[\"name/299\",[86,48.39]],[\"comment/299\",[]],[\"name/300\",[193,75.905]],[\"comment/300\",[]],[\"name/301\",[64,47.573]],[\"comment/301\",[]],[\"name/302\",[194,75.905]],[\"comment/302\",[]],[\"name/303\",[195,75.905]],[\"comment/303\",[]],[\"name/304\",[196,75.905]],[\"comment/304\",[]],[\"name/305\",[84,47.973]],[\"comment/305\",[]],[\"name/306\",[85,48.39]],[\"comment/306\",[]],[\"name/307\",[86,48.39]],[\"comment/307\",[]],[\"name/308\",[197,67.432]],[\"comment/308\",[]],[\"name/309\",[197,67.432]],[\"comment/309\",[]],[\"name/310\",[29,35.13]],[\"comment/310\",[]],[\"name/311\",[67,36.987]],[\"comment/311\",[]],[\"name/312\",[198,53.218]],[\"comment/312\",[]],[\"name/313\",[199,62.912]],[\"comment/313\",[]],[\"name/314\",[200,67.432]],[\"comment/314\",[]],[\"name/315\",[148,61.242]],[\"comment/315\",[]],[\"name/316\",[201,70.797]],[\"comment/316\",[]],[\"name/317\",[64,47.573]],[\"comment/317\",[]],[\"name/318\",[67,36.987]],[\"comment/318\",[]],[\"name/319\",[65,35.243]],[\"comment/319\",[]],[\"name/320\",[69,40.544]],[\"comment/320\",[]],[\"name/321\",[202,67.432]],[\"comment/321\",[]],[\"name/322\",[203,67.432]],[\"comment/322\",[]],[\"name/323\",[204,70.797]],[\"comment/323\",[]],[\"name/324\",[205,70.797]],[\"comment/324\",[]],[\"name/325\",[125,53.933]],[\"comment/325\",[]],[\"name/326\",[113,52.551]],[\"comment/326\",[]],[\"name/327\",[84,47.973]],[\"comment/327\",[]],[\"name/328\",[85,48.39]],[\"comment/328\",[]],[\"name/329\",[86,48.39]],[\"comment/329\",[]],[\"name/330\",[206,75.905]],[\"comment/330\",[]],[\"name/331\",[207,75.905]],[\"comment/331\",[]],[\"name/332\",[208,75.905]],[\"comment/332\",[]],[\"name/333\",[209,75.905]],[\"comment/333\",[]],[\"name/334\",[64,47.573]],[\"comment/334\",[]],[\"name/335\",[65,35.243]],[\"comment/335\",[]],[\"name/336\",[127,52.551]],[\"comment/336\",[]],[\"name/337\",[37,47.573]],[\"comment/337\",[]],[\"name/338\",[66,59.811]],[\"comment/338\",[]],[\"name/339\",[49,61.242]],[\"comment/339\",[]],[\"name/340\",[210,70.797]],[\"comment/340\",[]],[\"name/341\",[125,53.933]],[\"comment/341\",[]],[\"name/342\",[67,36.987]],[\"comment/342\",[]],[\"name/343\",[113,52.551]],[\"comment/343\",[]],[\"name/344\",[151,64.919]],[\"comment/344\",[]],[\"name/345\",[132,40.94]],[\"comment/345\",[]],[\"name/346\",[130,57.447]],[\"comment/346\",[]],[\"name/347\",[129,67.432]],[\"comment/347\",[]],[\"name/348\",[84,47.973]],[\"comment/348\",[]],[\"name/349\",[85,48.39]],[\"comment/349\",[]],[\"name/350\",[86,48.39]],[\"comment/350\",[]],[\"name/351\",[211,75.905]],[\"comment/351\",[]],[\"name/352\",[64,47.573]],[\"comment/352\",[]],[\"name/353\",[67,36.987]],[\"comment/353\",[]],[\"name/354\",[66,59.811]],[\"comment/354\",[]],[\"name/355\",[212,75.905]],[\"comment/355\",[]],[\"name/356\",[213,75.905]],[\"comment/356\",[]],[\"name/357\",[214,75.905]],[\"comment/357\",[]],[\"name/358\",[215,75.905]],[\"comment/358\",[]],[\"name/359\",[216,75.905]],[\"comment/359\",[]],[\"name/360\",[217,75.905]],[\"comment/360\",[]],[\"name/361\",[218,75.905]],[\"comment/361\",[]],[\"name/362\",[219,75.905]],[\"comment/362\",[]],[\"name/363\",[84,47.973]],[\"comment/363\",[]],[\"name/364\",[85,48.39]],[\"comment/364\",[]],[\"name/365\",[86,48.39]],[\"comment/365\",[]],[\"name/366\",[220,75.905]],[\"comment/366\",[]],[\"name/367\",[221,75.905]],[\"comment/367\",[]],[\"name/368\",[222,75.905]],[\"comment/368\",[]],[\"name/369\",[223,75.905]],[\"comment/369\",[]],[\"name/370\",[224,75.905]],[\"comment/370\",[]],[\"name/371\",[225,75.905]],[\"comment/371\",[]],[\"name/372\",[226,75.905]],[\"comment/372\",[]],[\"name/373\",[227,75.905]],[\"comment/373\",[]],[\"name/374\",[228,75.905]],[\"comment/374\",[]],[\"name/375\",[229,75.905]],[\"comment/375\",[]],[\"name/376\",[64,47.573]],[\"comment/376\",[]],[\"name/377\",[67,36.987]],[\"comment/377\",[]],[\"name/378\",[125,53.933]],[\"comment/378\",[]],[\"name/379\",[230,70.797]],[\"comment/379\",[]],[\"name/380\",[231,75.905]],[\"comment/380\",[]],[\"name/381\",[232,70.797]],[\"comment/381\",[]],[\"name/382\",[84,47.973]],[\"comment/382\",[]],[\"name/383\",[85,48.39]],[\"comment/383\",[]],[\"name/384\",[86,48.39]],[\"comment/384\",[]],[\"name/385\",[233,75.905]],[\"comment/385\",[]],[\"name/386\",[234,75.905]],[\"comment/386\",[]],[\"name/387\",[235,70.797]],[\"comment/387\",[]],[\"name/388\",[64,47.573]],[\"comment/388\",[]],[\"name/389\",[65,35.243]],[\"comment/389\",[]],[\"name/390\",[67,36.987]],[\"comment/390\",[]],[\"name/391\",[125,53.933]],[\"comment/391\",[]],[\"name/392\",[236,41.353]],[\"comment/392\",[]],[\"name/393\",[84,47.973]],[\"comment/393\",[]],[\"name/394\",[85,48.39]],[\"comment/394\",[]],[\"name/395\",[86,48.39]],[\"comment/395\",[]],[\"name/396\",[237,75.905]],[\"comment/396\",[]],[\"name/397\",[64,47.573]],[\"comment/397\",[]],[\"name/398\",[65,35.243]],[\"comment/398\",[]],[\"name/399\",[120,54.703]],[\"comment/399\",[]],[\"name/400\",[121,62.912]],[\"comment/400\",[]],[\"name/401\",[238,64.919]],[\"comment/401\",[]],[\"name/402\",[239,75.905]],[\"comment/402\",[]],[\"name/403\",[119,59.811]],[\"comment/403\",[]],[\"name/404\",[67,36.987]],[\"comment/404\",[]],[\"name/405\",[125,53.933]],[\"comment/405\",[]],[\"name/406\",[84,47.973]],[\"comment/406\",[]],[\"name/407\",[85,48.39]],[\"comment/407\",[]],[\"name/408\",[86,48.39]],[\"comment/408\",[]],[\"name/409\",[240,75.905]],[\"comment/409\",[]],[\"name/410\",[64,47.573]],[\"comment/410\",[]],[\"name/411\",[65,35.243]],[\"comment/411\",[]],[\"name/412\",[120,54.703]],[\"comment/412\",[]],[\"name/413\",[122,67.432]],[\"comment/413\",[]],[\"name/414\",[241,75.905]],[\"comment/414\",[]],[\"name/415\",[67,36.987]],[\"comment/415\",[]],[\"name/416\",[125,53.933]],[\"comment/416\",[]],[\"name/417\",[84,47.973]],[\"comment/417\",[]],[\"name/418\",[85,48.39]],[\"comment/418\",[]],[\"name/419\",[86,48.39]],[\"comment/419\",[]],[\"name/420\",[242,75.905]],[\"comment/420\",[]],[\"name/421\",[243,75.905]],[\"comment/421\",[]],[\"name/422\",[29,35.13]],[\"comment/422\",[]],[\"name/423\",[65,35.243]],[\"comment/423\",[]],[\"name/424\",[116,64.919]],[\"comment/424\",[]],[\"name/425\",[244,75.905]],[\"comment/425\",[]],[\"name/426\",[245,75.905]],[\"comment/426\",[]],[\"name/427\",[246,75.905]],[\"comment/427\",[]],[\"name/428\",[247,75.905]],[\"comment/428\",[]],[\"name/429\",[248,75.905]],[\"comment/429\",[]],[\"name/430\",[249,75.905]],[\"comment/430\",[]],[\"name/431\",[250,75.905]],[\"comment/431\",[]],[\"name/432\",[251,75.905]],[\"comment/432\",[]],[\"name/433\",[252,35.475]],[\"comment/433\",[]],[\"name/434\",[253,42.703]],[\"comment/434\",[]],[\"name/435\",[254,35.954]],[\"comment/435\",[]],[\"name/436\",[255,75.905]],[\"comment/436\",[]],[\"name/437\",[252,35.475]],[\"comment/437\",[]],[\"name/438\",[256,42.005]],[\"comment/438\",[]],[\"name/439\",[257,40.74]],[\"comment/439\",[]],[\"name/440\",[258,43.197]],[\"comment/440\",[]],[\"name/441\",[259,43.197]],[\"comment/441\",[]],[\"name/442\",[260,42.947]],[\"comment/442\",[]],[\"name/443\",[261,43.197]],[\"comment/443\",[]],[\"name/444\",[254,35.954]],[\"comment/444\",[]],[\"name/445\",[8,67.432]],[\"comment/445\",[]],[\"name/446\",[262,75.905]],[\"comment/446\",[]],[\"name/447\",[263,75.905]],[\"comment/447\",[]],[\"name/448\",[252,35.475]],[\"comment/448\",[]],[\"name/449\",[264,53.933]],[\"comment/449\",[]],[\"name/450\",[265,70.797]],[\"comment/450\",[]],[\"name/451\",[29,35.13]],[\"comment/451\",[]],[\"name/452\",[266,67.432]],[\"comment/452\",[]],[\"name/453\",[65,35.243]],[\"comment/453\",[]],[\"name/454\",[37,47.573]],[\"comment/454\",[]],[\"name/455\",[66,59.811]],[\"comment/455\",[]],[\"name/456\",[267,70.797]],[\"comment/456\",[]],[\"name/457\",[268,57.447]],[\"comment/457\",[]],[\"name/458\",[269,75.905]],[\"comment/458\",[]],[\"name/459\",[270,67.432]],[\"comment/459\",[]],[\"name/460\",[271,75.905]],[\"comment/460\",[]],[\"name/461\",[113,52.551]],[\"comment/461\",[]],[\"name/462\",[272,75.905]],[\"comment/462\",[]],[\"name/463\",[273,75.905]],[\"comment/463\",[]],[\"name/464\",[274,75.905]],[\"comment/464\",[]],[\"name/465\",[275,75.905]],[\"comment/465\",[]],[\"name/466\",[253,42.703]],[\"comment/466\",[]],[\"name/467\",[65,35.243]],[\"comment/467\",[]],[\"name/468\",[268,57.447]],[\"comment/468\",[]],[\"name/469\",[276,51.926]],[\"comment/469\",[]],[\"name/470\",[277,51.926]],[\"comment/470\",[]],[\"name/471\",[252,35.475]],[\"comment/471\",[]],[\"name/472\",[254,35.954]],[\"comment/472\",[]],[\"name/473\",[172,42.703]],[\"comment/473\",[]],[\"name/474\",[173,41.565]],[\"comment/474\",[]],[\"name/475\",[278,75.905]],[\"comment/475\",[]],[\"name/476\",[258,43.197]],[\"comment/476\",[]],[\"name/477\",[29,35.13]],[\"comment/477\",[]],[\"name/478\",[65,35.243]],[\"comment/478\",[]],[\"name/479\",[279,75.905]],[\"comment/479\",[]],[\"name/480\",[172,42.703]],[\"comment/480\",[]],[\"name/481\",[173,41.565]],[\"comment/481\",[]],[\"name/482\",[280,51.338]],[\"comment/482\",[]],[\"name/483\",[276,51.926]],[\"comment/483\",[]],[\"name/484\",[277,51.926]],[\"comment/484\",[]],[\"name/485\",[252,35.475]],[\"comment/485\",[]],[\"name/486\",[256,42.005]],[\"comment/486\",[]],[\"name/487\",[257,40.74]],[\"comment/487\",[]],[\"name/488\",[259,43.197]],[\"comment/488\",[]],[\"name/489\",[260,42.947]],[\"comment/489\",[]],[\"name/490\",[261,43.197]],[\"comment/490\",[]],[\"name/491\",[254,35.954]],[\"comment/491\",[]],[\"name/492\",[281,75.905]],[\"comment/492\",[]],[\"name/493\",[253,42.703]],[\"comment/493\",[]],[\"name/494\",[65,35.243]],[\"comment/494\",[]],[\"name/495\",[282,64.919]],[\"comment/495\",[]],[\"name/496\",[252,35.475]],[\"comment/496\",[]],[\"name/497\",[254,35.954]],[\"comment/497\",[]],[\"name/498\",[172,42.703]],[\"comment/498\",[]],[\"name/499\",[173,41.565]],[\"comment/499\",[]],[\"name/500\",[283,75.905]],[\"comment/500\",[]],[\"name/501\",[258,43.197]],[\"comment/501\",[]],[\"name/502\",[29,35.13]],[\"comment/502\",[]],[\"name/503\",[172,42.703]],[\"comment/503\",[]],[\"name/504\",[173,41.565]],[\"comment/504\",[]],[\"name/505\",[284,75.905]],[\"comment/505\",[]],[\"name/506\",[285,75.905]],[\"comment/506\",[]],[\"name/507\",[280,51.338]],[\"comment/507\",[]],[\"name/508\",[252,35.475]],[\"comment/508\",[]],[\"name/509\",[256,42.005]],[\"comment/509\",[]],[\"name/510\",[257,40.74]],[\"comment/510\",[]],[\"name/511\",[259,43.197]],[\"comment/511\",[]],[\"name/512\",[260,42.947]],[\"comment/512\",[]],[\"name/513\",[261,43.197]],[\"comment/513\",[]],[\"name/514\",[254,35.954]],[\"comment/514\",[]],[\"name/515\",[286,75.905]],[\"comment/515\",[]],[\"name/516\",[287,75.905]],[\"comment/516\",[]],[\"name/517\",[288,75.905]],[\"comment/517\",[]],[\"name/518\",[289,75.905]],[\"comment/518\",[]],[\"name/519\",[290,75.905]],[\"comment/519\",[]],[\"name/520\",[291,75.905]],[\"comment/520\",[]],[\"name/521\",[292,75.905]],[\"comment/521\",[]],[\"name/522\",[293,75.905]],[\"comment/522\",[]],[\"name/523\",[294,75.905]],[\"comment/523\",[]],[\"name/524\",[295,75.905]],[\"comment/524\",[]],[\"name/525\",[296,75.905]],[\"comment/525\",[]],[\"name/526\",[297,75.905]],[\"comment/526\",[]],[\"name/527\",[298,75.905]],[\"comment/527\",[]],[\"name/528\",[299,75.905]],[\"comment/528\",[]],[\"name/529\",[300,75.905]],[\"comment/529\",[]],[\"name/530\",[301,75.905]],[\"comment/530\",[]],[\"name/531\",[253,42.703]],[\"comment/531\",[]],[\"name/532\",[65,35.243]],[\"comment/532\",[]],[\"name/533\",[302,70.797]],[\"comment/533\",[]],[\"name/534\",[303,75.905]],[\"comment/534\",[]],[\"name/535\",[282,64.919]],[\"comment/535\",[]],[\"name/536\",[252,35.475]],[\"comment/536\",[]],[\"name/537\",[254,35.954]],[\"comment/537\",[]],[\"name/538\",[172,42.703]],[\"comment/538\",[]],[\"name/539\",[173,41.565]],[\"comment/539\",[]],[\"name/540\",[304,75.905]],[\"comment/540\",[]],[\"name/541\",[258,43.197]],[\"comment/541\",[]],[\"name/542\",[29,35.13]],[\"comment/542\",[]],[\"name/543\",[305,75.905]],[\"comment/543\",[]],[\"name/544\",[306,75.905]],[\"comment/544\",[]],[\"name/545\",[307,52.551]],[\"comment/545\",[]],[\"name/546\",[173,41.565]],[\"comment/546\",[]],[\"name/547\",[308,75.905]],[\"comment/547\",[]],[\"name/548\",[280,51.338]],[\"comment/548\",[]],[\"name/549\",[252,35.475]],[\"comment/549\",[]],[\"name/550\",[256,42.005]],[\"comment/550\",[]],[\"name/551\",[257,40.74]],[\"comment/551\",[]],[\"name/552\",[259,43.197]],[\"comment/552\",[]],[\"name/553\",[260,42.947]],[\"comment/553\",[]],[\"name/554\",[261,43.197]],[\"comment/554\",[]],[\"name/555\",[254,35.954]],[\"comment/555\",[]],[\"name/556\",[309,75.905]],[\"comment/556\",[]],[\"name/557\",[310,70.797]],[\"comment/557\",[]],[\"name/558\",[311,75.905]],[\"comment/558\",[]],[\"name/559\",[312,75.905]],[\"comment/559\",[]],[\"name/560\",[313,75.905]],[\"comment/560\",[]],[\"name/561\",[314,75.905]],[\"comment/561\",[]],[\"name/562\",[178,58.559]],[\"comment/562\",[]],[\"name/563\",[315,75.905]],[\"comment/563\",[]],[\"name/564\",[316,70.797]],[\"comment/564\",[]],[\"name/565\",[317,41.144]],[\"comment/565\",[]],[\"name/566\",[318,70.797]],[\"comment/566\",[]],[\"name/567\",[319,70.797]],[\"comment/567\",[]],[\"name/568\",[320,59.811]],[\"comment/568\",[]],[\"name/569\",[321,75.905]],[\"comment/569\",[]],[\"name/570\",[253,42.703]],[\"comment/570\",[]],[\"name/571\",[65,35.243]],[\"comment/571\",[]],[\"name/572\",[322,75.905]],[\"comment/572\",[]],[\"name/573\",[276,51.926]],[\"comment/573\",[]],[\"name/574\",[277,51.926]],[\"comment/574\",[]],[\"name/575\",[252,35.475]],[\"comment/575\",[]],[\"name/576\",[254,35.954]],[\"comment/576\",[]],[\"name/577\",[172,42.703]],[\"comment/577\",[]],[\"name/578\",[173,41.565]],[\"comment/578\",[]],[\"name/579\",[323,75.905]],[\"comment/579\",[]],[\"name/580\",[258,43.197]],[\"comment/580\",[]],[\"name/581\",[29,35.13]],[\"comment/581\",[]],[\"name/582\",[65,35.243]],[\"comment/582\",[]],[\"name/583\",[324,75.905]],[\"comment/583\",[]],[\"name/584\",[307,52.551]],[\"comment/584\",[]],[\"name/585\",[173,41.565]],[\"comment/585\",[]],[\"name/586\",[172,42.703]],[\"comment/586\",[]],[\"name/587\",[277,51.926]],[\"comment/587\",[]],[\"name/588\",[252,35.475]],[\"comment/588\",[]],[\"name/589\",[256,42.005]],[\"comment/589\",[]],[\"name/590\",[257,40.74]],[\"comment/590\",[]],[\"name/591\",[259,43.197]],[\"comment/591\",[]],[\"name/592\",[260,42.947]],[\"comment/592\",[]],[\"name/593\",[261,43.197]],[\"comment/593\",[]],[\"name/594\",[254,35.954]],[\"comment/594\",[]],[\"name/595\",[325,75.905]],[\"comment/595\",[]],[\"name/596\",[65,35.243]],[\"comment/596\",[]],[\"name/597\",[66,59.811]],[\"comment/597\",[]],[\"name/598\",[326,53.933]],[\"comment/598\",[]],[\"name/599\",[276,51.926]],[\"comment/599\",[]],[\"name/600\",[327,75.905]],[\"comment/600\",[]],[\"name/601\",[328,75.905]],[\"comment/601\",[]],[\"name/602\",[329,75.905]],[\"comment/602\",[]],[\"name/603\",[330,75.905]],[\"comment/603\",[]],[\"name/604\",[331,75.905]],[\"comment/604\",[]],[\"name/605\",[332,75.905]],[\"comment/605\",[]],[\"name/606\",[333,75.905]],[\"comment/606\",[]],[\"name/607\",[334,75.905]],[\"comment/607\",[]],[\"name/608\",[335,75.905]],[\"comment/608\",[]],[\"name/609\",[336,75.905]],[\"comment/609\",[]],[\"name/610\",[67,36.987]],[\"comment/610\",[]],[\"name/611\",[198,53.218]],[\"comment/611\",[]],[\"name/612\",[199,62.912]],[\"comment/612\",[]],[\"name/613\",[200,67.432]],[\"comment/613\",[]],[\"name/614\",[148,61.242]],[\"comment/614\",[]],[\"name/615\",[337,70.797]],[\"comment/615\",[]],[\"name/616\",[338,75.905]],[\"comment/616\",[]],[\"name/617\",[253,42.703]],[\"comment/617\",[]],[\"name/618\",[65,35.243]],[\"comment/618\",[]],[\"name/619\",[276,51.926]],[\"comment/619\",[]],[\"name/620\",[277,51.926]],[\"comment/620\",[]],[\"name/621\",[252,35.475]],[\"comment/621\",[]],[\"name/622\",[254,35.954]],[\"comment/622\",[]],[\"name/623\",[172,42.703]],[\"comment/623\",[]],[\"name/624\",[173,41.565]],[\"comment/624\",[]],[\"name/625\",[339,75.905]],[\"comment/625\",[]],[\"name/626\",[258,43.197]],[\"comment/626\",[]],[\"name/627\",[29,35.13]],[\"comment/627\",[]],[\"name/628\",[65,35.243]],[\"comment/628\",[]],[\"name/629\",[340,75.905]],[\"comment/629\",[]],[\"name/630\",[307,52.551]],[\"comment/630\",[]],[\"name/631\",[280,51.338]],[\"comment/631\",[]],[\"name/632\",[277,51.926]],[\"comment/632\",[]],[\"name/633\",[276,51.926]],[\"comment/633\",[]],[\"name/634\",[252,35.475]],[\"comment/634\",[]],[\"name/635\",[256,42.005]],[\"comment/635\",[]],[\"name/636\",[257,40.74]],[\"comment/636\",[]],[\"name/637\",[259,43.197]],[\"comment/637\",[]],[\"name/638\",[260,42.947]],[\"comment/638\",[]],[\"name/639\",[261,43.197]],[\"comment/639\",[]],[\"name/640\",[254,35.954]],[\"comment/640\",[]],[\"name/641\",[341,75.905]],[\"comment/641\",[]],[\"name/642\",[342,75.905]],[\"comment/642\",[]],[\"name/643\",[343,75.905]],[\"comment/643\",[]],[\"name/644\",[253,42.703]],[\"comment/644\",[]],[\"name/645\",[65,35.243]],[\"comment/645\",[]],[\"name/646\",[257,40.74]],[\"comment/646\",[]],[\"name/647\",[344,75.905]],[\"comment/647\",[]],[\"name/648\",[276,51.926]],[\"comment/648\",[]],[\"name/649\",[277,51.926]],[\"comment/649\",[]],[\"name/650\",[252,35.475]],[\"comment/650\",[]],[\"name/651\",[254,35.954]],[\"comment/651\",[]],[\"name/652\",[172,42.703]],[\"comment/652\",[]],[\"name/653\",[173,41.565]],[\"comment/653\",[]],[\"name/654\",[345,75.905]],[\"comment/654\",[]],[\"name/655\",[258,43.197]],[\"comment/655\",[]],[\"name/656\",[29,35.13]],[\"comment/656\",[]],[\"name/657\",[65,35.243]],[\"comment/657\",[]],[\"name/658\",[346,75.905]],[\"comment/658\",[]],[\"name/659\",[172,42.703]],[\"comment/659\",[]],[\"name/660\",[173,41.565]],[\"comment/660\",[]],[\"name/661\",[307,52.551]],[\"comment/661\",[]],[\"name/662\",[276,51.926]],[\"comment/662\",[]],[\"name/663\",[277,51.926]],[\"comment/663\",[]],[\"name/664\",[280,51.338]],[\"comment/664\",[]],[\"name/665\",[252,35.475]],[\"comment/665\",[]],[\"name/666\",[256,42.005]],[\"comment/666\",[]],[\"name/667\",[257,40.74]],[\"comment/667\",[]],[\"name/668\",[259,43.197]],[\"comment/668\",[]],[\"name/669\",[260,42.947]],[\"comment/669\",[]],[\"name/670\",[261,43.197]],[\"comment/670\",[]],[\"name/671\",[254,35.954]],[\"comment/671\",[]],[\"name/672\",[347,75.905]],[\"comment/672\",[]],[\"name/673\",[67,36.987]],[\"comment/673\",[]],[\"name/674\",[320,59.811]],[\"comment/674\",[]],[\"name/675\",[348,64.919]],[\"comment/675\",[]],[\"name/676\",[349,64.919]],[\"comment/676\",[]],[\"name/677\",[350,70.797]],[\"comment/677\",[]],[\"name/678\",[113,52.551]],[\"comment/678\",[]],[\"name/679\",[351,75.905]],[\"comment/679\",[]],[\"name/680\",[253,42.703]],[\"comment/680\",[]],[\"name/681\",[65,35.243]],[\"comment/681\",[]],[\"name/682\",[276,51.926]],[\"comment/682\",[]],[\"name/683\",[277,51.926]],[\"comment/683\",[]],[\"name/684\",[282,64.919]],[\"comment/684\",[]],[\"name/685\",[252,35.475]],[\"comment/685\",[]],[\"name/686\",[254,35.954]],[\"comment/686\",[]],[\"name/687\",[172,42.703]],[\"comment/687\",[]],[\"name/688\",[173,41.565]],[\"comment/688\",[]],[\"name/689\",[352,75.905]],[\"comment/689\",[]],[\"name/690\",[258,43.197]],[\"comment/690\",[]],[\"name/691\",[29,35.13]],[\"comment/691\",[]],[\"name/692\",[65,35.243]],[\"comment/692\",[]],[\"name/693\",[353,64.919]],[\"comment/693\",[]],[\"name/694\",[307,52.551]],[\"comment/694\",[]],[\"name/695\",[173,41.565]],[\"comment/695\",[]],[\"name/696\",[172,42.703]],[\"comment/696\",[]],[\"name/697\",[277,51.926]],[\"comment/697\",[]],[\"name/698\",[252,35.475]],[\"comment/698\",[]],[\"name/699\",[256,42.005]],[\"comment/699\",[]],[\"name/700\",[257,40.74]],[\"comment/700\",[]],[\"name/701\",[259,43.197]],[\"comment/701\",[]],[\"name/702\",[260,42.947]],[\"comment/702\",[]],[\"name/703\",[261,43.197]],[\"comment/703\",[]],[\"name/704\",[254,35.954]],[\"comment/704\",[]],[\"name/705\",[354,75.905]],[\"comment/705\",[]],[\"name/706\",[253,42.703]],[\"comment/706\",[]],[\"name/707\",[65,35.243]],[\"comment/707\",[]],[\"name/708\",[355,62.912]],[\"comment/708\",[]],[\"name/709\",[356,62.912]],[\"comment/709\",[]],[\"name/710\",[357,61.242]],[\"comment/710\",[]],[\"name/711\",[358,70.797]],[\"comment/711\",[]],[\"name/712\",[276,51.926]],[\"comment/712\",[]],[\"name/713\",[277,51.926]],[\"comment/713\",[]],[\"name/714\",[252,35.475]],[\"comment/714\",[]],[\"name/715\",[254,35.954]],[\"comment/715\",[]],[\"name/716\",[172,42.703]],[\"comment/716\",[]],[\"name/717\",[173,41.565]],[\"comment/717\",[]],[\"name/718\",[359,75.905]],[\"comment/718\",[]],[\"name/719\",[258,43.197]],[\"comment/719\",[]],[\"name/720\",[29,35.13]],[\"comment/720\",[]],[\"name/721\",[65,35.243]],[\"comment/721\",[]],[\"name/722\",[355,62.912]],[\"comment/722\",[]],[\"name/723\",[356,62.912]],[\"comment/723\",[]],[\"name/724\",[276,51.926]],[\"comment/724\",[]],[\"name/725\",[277,51.926]],[\"comment/725\",[]],[\"name/726\",[178,58.559]],[\"comment/726\",[]],[\"name/727\",[280,51.338]],[\"comment/727\",[]],[\"name/728\",[252,35.475]],[\"comment/728\",[]],[\"name/729\",[256,42.005]],[\"comment/729\",[]],[\"name/730\",[257,40.74]],[\"comment/730\",[]],[\"name/731\",[259,43.197]],[\"comment/731\",[]],[\"name/732\",[260,42.947]],[\"comment/732\",[]],[\"name/733\",[261,43.197]],[\"comment/733\",[]],[\"name/734\",[254,35.954]],[\"comment/734\",[]],[\"name/735\",[360,75.905]],[\"comment/735\",[]],[\"name/736\",[173,41.565]],[\"comment/736\",[]],[\"name/737\",[361,64.919]],[\"comment/737\",[]],[\"name/738\",[362,67.432]],[\"comment/738\",[]],[\"name/739\",[55,61.242]],[\"comment/739\",[]],[\"name/740\",[280,51.338]],[\"comment/740\",[]],[\"name/741\",[363,75.905]],[\"comment/741\",[]],[\"name/742\",[326,53.933]],[\"comment/742\",[]],[\"name/743\",[364,67.432]],[\"comment/743\",[]],[\"name/744\",[365,75.905]],[\"comment/744\",[]],[\"name/745\",[253,42.703]],[\"comment/745\",[]],[\"name/746\",[65,35.243]],[\"comment/746\",[]],[\"name/747\",[282,64.919]],[\"comment/747\",[]],[\"name/748\",[366,75.905]],[\"comment/748\",[]],[\"name/749\",[252,35.475]],[\"comment/749\",[]],[\"name/750\",[254,35.954]],[\"comment/750\",[]],[\"name/751\",[172,42.703]],[\"comment/751\",[]],[\"name/752\",[173,41.565]],[\"comment/752\",[]],[\"name/753\",[367,75.905]],[\"comment/753\",[]],[\"name/754\",[258,43.197]],[\"comment/754\",[]],[\"name/755\",[29,35.13]],[\"comment/755\",[]],[\"name/756\",[65,35.243]],[\"comment/756\",[]],[\"name/757\",[368,75.905]],[\"comment/757\",[]],[\"name/758\",[29,35.13]],[\"comment/758\",[]],[\"name/759\",[369,75.905]],[\"comment/759\",[]],[\"name/760\",[29,35.13]],[\"comment/760\",[]],[\"name/761\",[370,75.905]],[\"comment/761\",[]],[\"name/762\",[29,35.13]],[\"comment/762\",[]],[\"name/763\",[172,42.703]],[\"comment/763\",[]],[\"name/764\",[307,52.551]],[\"comment/764\",[]],[\"name/765\",[173,41.565]],[\"comment/765\",[]],[\"name/766\",[252,35.475]],[\"comment/766\",[]],[\"name/767\",[256,42.005]],[\"comment/767\",[]],[\"name/768\",[257,40.74]],[\"comment/768\",[]],[\"name/769\",[259,43.197]],[\"comment/769\",[]],[\"name/770\",[260,42.947]],[\"comment/770\",[]],[\"name/771\",[261,43.197]],[\"comment/771\",[]],[\"name/772\",[254,35.954]],[\"comment/772\",[]],[\"name/773\",[371,75.905]],[\"comment/773\",[]],[\"name/774\",[253,42.703]],[\"comment/774\",[]],[\"name/775\",[65,35.243]],[\"comment/775\",[]],[\"name/776\",[372,70.797]],[\"comment/776\",[]],[\"name/777\",[178,58.559]],[\"comment/777\",[]],[\"name/778\",[276,51.926]],[\"comment/778\",[]],[\"name/779\",[172,42.703]],[\"comment/779\",[]],[\"name/780\",[173,41.565]],[\"comment/780\",[]],[\"name/781\",[252,35.475]],[\"comment/781\",[]],[\"name/782\",[254,35.954]],[\"comment/782\",[]],[\"name/783\",[373,75.905]],[\"comment/783\",[]],[\"name/784\",[258,43.197]],[\"comment/784\",[]],[\"name/785\",[29,35.13]],[\"comment/785\",[]],[\"name/786\",[307,52.551]],[\"comment/786\",[]],[\"name/787\",[374,75.905]],[\"comment/787\",[]],[\"name/788\",[178,58.559]],[\"comment/788\",[]],[\"name/789\",[252,35.475]],[\"comment/789\",[]],[\"name/790\",[256,42.005]],[\"comment/790\",[]],[\"name/791\",[257,40.74]],[\"comment/791\",[]],[\"name/792\",[259,43.197]],[\"comment/792\",[]],[\"name/793\",[260,42.947]],[\"comment/793\",[]],[\"name/794\",[261,43.197]],[\"comment/794\",[]],[\"name/795\",[254,35.954]],[\"comment/795\",[]],[\"name/796\",[375,75.905]],[\"comment/796\",[]],[\"name/797\",[253,42.703]],[\"comment/797\",[]],[\"name/798\",[376,70.797]],[\"comment/798\",[]],[\"name/799\",[377,64.919]],[\"comment/799\",[]],[\"name/800\",[178,58.559]],[\"comment/800\",[]],[\"name/801\",[378,75.905]],[\"comment/801\",[]],[\"name/802\",[379,70.797]],[\"comment/802\",[]],[\"name/803\",[357,61.242]],[\"comment/803\",[]],[\"name/804\",[302,70.797]],[\"comment/804\",[]],[\"name/805\",[257,40.74]],[\"comment/805\",[]],[\"name/806\",[252,35.475]],[\"comment/806\",[]],[\"name/807\",[254,35.954]],[\"comment/807\",[]],[\"name/808\",[172,42.703]],[\"comment/808\",[]],[\"name/809\",[173,41.565]],[\"comment/809\",[]],[\"name/810\",[380,75.905]],[\"comment/810\",[]],[\"name/811\",[258,43.197]],[\"comment/811\",[]],[\"name/812\",[252,35.475]],[\"comment/812\",[]],[\"name/813\",[256,42.005]],[\"comment/813\",[]],[\"name/814\",[257,40.74]],[\"comment/814\",[]],[\"name/815\",[259,43.197]],[\"comment/815\",[]],[\"name/816\",[260,42.947]],[\"comment/816\",[]],[\"name/817\",[261,43.197]],[\"comment/817\",[]],[\"name/818\",[254,35.954]],[\"comment/818\",[]],[\"name/819\",[381,75.905]],[\"comment/819\",[]],[\"name/820\",[65,35.243]],[\"comment/820\",[]],[\"name/821\",[362,67.432]],[\"comment/821\",[]],[\"name/822\",[382,75.905]],[\"comment/822\",[]],[\"name/823\",[383,75.905]],[\"comment/823\",[]],[\"name/824\",[384,75.905]],[\"comment/824\",[]],[\"name/825\",[316,70.797]],[\"comment/825\",[]],[\"name/826\",[317,41.144]],[\"comment/826\",[]],[\"name/827\",[318,70.797]],[\"comment/827\",[]],[\"name/828\",[319,70.797]],[\"comment/828\",[]],[\"name/829\",[385,75.905]],[\"comment/829\",[]],[\"name/830\",[166,70.797]],[\"comment/830\",[]],[\"name/831\",[178,58.559]],[\"comment/831\",[]],[\"name/832\",[171,67.432]],[\"comment/832\",[]],[\"name/833\",[172,42.703]],[\"comment/833\",[]],[\"name/834\",[173,41.565]],[\"comment/834\",[]],[\"name/835\",[165,70.797]],[\"comment/835\",[]],[\"name/836\",[167,70.797]],[\"comment/836\",[]],[\"name/837\",[168,67.432]],[\"comment/837\",[]],[\"name/838\",[169,70.797]],[\"comment/838\",[]],[\"name/839\",[170,70.797]],[\"comment/839\",[]],[\"name/840\",[174,70.797]],[\"comment/840\",[]],[\"name/841\",[175,70.797]],[\"comment/841\",[]],[\"name/842\",[176,70.797]],[\"comment/842\",[]],[\"name/843\",[177,70.797]],[\"comment/843\",[]],[\"name/844\",[386,75.905]],[\"comment/844\",[]],[\"name/845\",[387,61.242]],[\"comment/845\",[]],[\"name/846\",[388,67.432]],[\"comment/846\",[]],[\"name/847\",[389,75.905]],[\"comment/847\",[]],[\"name/848\",[253,42.703]],[\"comment/848\",[]],[\"name/849\",[252,35.475]],[\"comment/849\",[]],[\"name/850\",[254,35.954]],[\"comment/850\",[]],[\"name/851\",[390,75.905]],[\"comment/851\",[]],[\"name/852\",[258,43.197]],[\"comment/852\",[]],[\"name/853\",[29,35.13]],[\"comment/853\",[]],[\"name/854\",[172,42.703]],[\"comment/854\",[]],[\"name/855\",[173,41.565]],[\"comment/855\",[]],[\"name/856\",[252,35.475]],[\"comment/856\",[]],[\"name/857\",[256,42.005]],[\"comment/857\",[]],[\"name/858\",[257,40.74]],[\"comment/858\",[]],[\"name/859\",[259,43.197]],[\"comment/859\",[]],[\"name/860\",[260,42.947]],[\"comment/860\",[]],[\"name/861\",[261,43.197]],[\"comment/861\",[]],[\"name/862\",[254,35.954]],[\"comment/862\",[]],[\"name/863\",[391,75.905]],[\"comment/863\",[]],[\"name/864\",[253,42.703]],[\"comment/864\",[]],[\"name/865\",[252,35.475]],[\"comment/865\",[]],[\"name/866\",[254,35.954]],[\"comment/866\",[]],[\"name/867\",[392,75.905]],[\"comment/867\",[]],[\"name/868\",[258,43.197]],[\"comment/868\",[]],[\"name/869\",[29,35.13]],[\"comment/869\",[]],[\"name/870\",[307,52.551]],[\"comment/870\",[]],[\"name/871\",[252,35.475]],[\"comment/871\",[]],[\"name/872\",[256,42.005]],[\"comment/872\",[]],[\"name/873\",[257,40.74]],[\"comment/873\",[]],[\"name/874\",[259,43.197]],[\"comment/874\",[]],[\"name/875\",[260,42.947]],[\"comment/875\",[]],[\"name/876\",[261,43.197]],[\"comment/876\",[]],[\"name/877\",[254,35.954]],[\"comment/877\",[]],[\"name/878\",[393,75.905]],[\"comment/878\",[]],[\"name/879\",[253,42.703]],[\"comment/879\",[]],[\"name/880\",[357,61.242]],[\"comment/880\",[]],[\"name/881\",[276,51.926]],[\"comment/881\",[]],[\"name/882\",[277,51.926]],[\"comment/882\",[]],[\"name/883\",[257,40.74]],[\"comment/883\",[]],[\"name/884\",[252,35.475]],[\"comment/884\",[]],[\"name/885\",[254,35.954]],[\"comment/885\",[]],[\"name/886\",[172,42.703]],[\"comment/886\",[]],[\"name/887\",[173,41.565]],[\"comment/887\",[]],[\"name/888\",[394,75.905]],[\"comment/888\",[]],[\"name/889\",[395,75.905]],[\"comment/889\",[]],[\"name/890\",[146,51.926]],[\"comment/890\",[]],[\"name/891\",[396,75.905]],[\"comment/891\",[]],[\"name/892\",[258,43.197]],[\"comment/892\",[]],[\"name/893\",[29,35.13]],[\"comment/893\",[]],[\"name/894\",[173,41.565]],[\"comment/894\",[]],[\"name/895\",[172,42.703]],[\"comment/895\",[]],[\"name/896\",[397,70.797]],[\"comment/896\",[]],[\"name/897\",[277,51.926]],[\"comment/897\",[]],[\"name/898\",[280,51.338]],[\"comment/898\",[]],[\"name/899\",[252,35.475]],[\"comment/899\",[]],[\"name/900\",[256,42.005]],[\"comment/900\",[]],[\"name/901\",[257,40.74]],[\"comment/901\",[]],[\"name/902\",[259,43.197]],[\"comment/902\",[]],[\"name/903\",[260,42.947]],[\"comment/903\",[]],[\"name/904\",[261,43.197]],[\"comment/904\",[]],[\"name/905\",[254,35.954]],[\"comment/905\",[]],[\"name/906\",[398,75.905]],[\"comment/906\",[]],[\"name/907\",[399,75.905]],[\"comment/907\",[]],[\"name/908\",[253,42.703]],[\"comment/908\",[]],[\"name/909\",[107,67.432]],[\"comment/909\",[]],[\"name/910\",[29,35.13]],[\"comment/910\",[]],[\"name/911\",[108,58.559]],[\"comment/911\",[]],[\"name/912\",[29,35.13]],[\"comment/912\",[]],[\"name/913\",[326,53.933]],[\"comment/913\",[]],[\"name/914\",[198,53.218]],[\"comment/914\",[]],[\"name/915\",[109,58.559]],[\"comment/915\",[]],[\"name/916\",[29,35.13]],[\"comment/916\",[]],[\"name/917\",[326,53.933]],[\"comment/917\",[]],[\"name/918\",[198,53.218]],[\"comment/918\",[]],[\"name/919\",[357,61.242]],[\"comment/919\",[]],[\"name/920\",[84,47.973]],[\"comment/920\",[]],[\"name/921\",[400,75.905]],[\"comment/921\",[]],[\"name/922\",[126,70.797]],[\"comment/922\",[]],[\"name/923\",[401,75.905]],[\"comment/923\",[]],[\"name/924\",[145,70.797]],[\"comment/924\",[]],[\"name/925\",[402,75.905]],[\"comment/925\",[]],[\"name/926\",[149,70.797]],[\"comment/926\",[]],[\"name/927\",[201,70.797]],[\"comment/927\",[]],[\"name/928\",[403,75.905]],[\"comment/928\",[]],[\"name/929\",[404,75.905]],[\"comment/929\",[]],[\"name/930\",[29,35.13]],[\"comment/930\",[]],[\"name/931\",[377,64.919]],[\"comment/931\",[]],[\"name/932\",[326,53.933]],[\"comment/932\",[]],[\"name/933\",[235,70.797]],[\"comment/933\",[]],[\"name/934\",[405,75.905]],[\"comment/934\",[]],[\"name/935\",[406,75.905]],[\"comment/935\",[]],[\"name/936\",[118,70.797]],[\"comment/936\",[]],[\"name/937\",[407,75.905]],[\"comment/937\",[]],[\"name/938\",[408,75.905]],[\"comment/938\",[]],[\"name/939\",[252,35.475]],[\"comment/939\",[]],[\"name/940\",[254,35.954]],[\"comment/940\",[]],[\"name/941\",[172,42.703]],[\"comment/941\",[]],[\"name/942\",[173,41.565]],[\"comment/942\",[]],[\"name/943\",[409,75.905]],[\"comment/943\",[]],[\"name/944\",[258,43.197]],[\"comment/944\",[]],[\"name/945\",[29,35.13]],[\"comment/945\",[]],[\"name/946\",[84,47.973]],[\"comment/946\",[]],[\"name/947\",[307,52.551]],[\"comment/947\",[]],[\"name/948\",[410,70.797]],[\"comment/948\",[]],[\"name/949\",[411,75.905]],[\"comment/949\",[]],[\"name/950\",[280,51.338]],[\"comment/950\",[]],[\"name/951\",[252,35.475]],[\"comment/951\",[]],[\"name/952\",[256,42.005]],[\"comment/952\",[]],[\"name/953\",[257,40.74]],[\"comment/953\",[]],[\"name/954\",[259,43.197]],[\"comment/954\",[]],[\"name/955\",[260,42.947]],[\"comment/955\",[]],[\"name/956\",[261,43.197]],[\"comment/956\",[]],[\"name/957\",[254,35.954]],[\"comment/957\",[]],[\"name/958\",[412,75.905]],[\"comment/958\",[]],[\"name/959\",[253,42.703]],[\"comment/959\",[]],[\"name/960\",[55,61.242]],[\"comment/960\",[]],[\"name/961\",[413,70.797]],[\"comment/961\",[]],[\"name/962\",[252,35.475]],[\"comment/962\",[]],[\"name/963\",[254,35.954]],[\"comment/963\",[]],[\"name/964\",[414,75.905]],[\"comment/964\",[]],[\"name/965\",[258,43.197]],[\"comment/965\",[]],[\"name/966\",[29,35.13]],[\"comment/966\",[]],[\"name/967\",[415,64.919]],[\"comment/967\",[]],[\"name/968\",[416,64.919]],[\"comment/968\",[]],[\"name/969\",[417,64.919]],[\"comment/969\",[]],[\"name/970\",[55,61.242]],[\"comment/970\",[]],[\"name/971\",[418,64.919]],[\"comment/971\",[]],[\"name/972\",[419,75.905]],[\"comment/972\",[]],[\"name/973\",[420,75.905]],[\"comment/973\",[]],[\"name/974\",[421,75.905]],[\"comment/974\",[]],[\"name/975\",[422,75.905]],[\"comment/975\",[]],[\"name/976\",[423,75.905]],[\"comment/976\",[]],[\"name/977\",[424,75.905]],[\"comment/977\",[]],[\"name/978\",[425,75.905]],[\"comment/978\",[]],[\"name/979\",[426,75.905]],[\"comment/979\",[]],[\"name/980\",[427,75.905]],[\"comment/980\",[]],[\"name/981\",[252,35.475]],[\"comment/981\",[]],[\"name/982\",[256,42.005]],[\"comment/982\",[]],[\"name/983\",[257,40.74]],[\"comment/983\",[]],[\"name/984\",[259,43.197]],[\"comment/984\",[]],[\"name/985\",[260,42.947]],[\"comment/985\",[]],[\"name/986\",[261,43.197]],[\"comment/986\",[]],[\"name/987\",[254,35.954]],[\"comment/987\",[]],[\"name/988\",[428,75.905]],[\"comment/988\",[]],[\"name/989\",[253,42.703]],[\"comment/989\",[]],[\"name/990\",[418,64.919]],[\"comment/990\",[]],[\"name/991\",[413,70.797]],[\"comment/991\",[]],[\"name/992\",[252,35.475]],[\"comment/992\",[]],[\"name/993\",[254,35.954]],[\"comment/993\",[]],[\"name/994\",[429,75.905]],[\"comment/994\",[]],[\"name/995\",[258,43.197]],[\"comment/995\",[]],[\"name/996\",[29,35.13]],[\"comment/996\",[]],[\"name/997\",[415,64.919]],[\"comment/997\",[]],[\"name/998\",[416,64.919]],[\"comment/998\",[]],[\"name/999\",[417,64.919]],[\"comment/999\",[]],[\"name/1000\",[55,61.242]],[\"comment/1000\",[]],[\"name/1001\",[418,64.919]],[\"comment/1001\",[]],[\"name/1002\",[252,35.475]],[\"comment/1002\",[]],[\"name/1003\",[256,42.005]],[\"comment/1003\",[]],[\"name/1004\",[257,40.74]],[\"comment/1004\",[]],[\"name/1005\",[259,43.197]],[\"comment/1005\",[]],[\"name/1006\",[260,42.947]],[\"comment/1006\",[]],[\"name/1007\",[261,43.197]],[\"comment/1007\",[]],[\"name/1008\",[254,35.954]],[\"comment/1008\",[]],[\"name/1009\",[430,75.905]],[\"comment/1009\",[]],[\"name/1010\",[253,42.703]],[\"comment/1010\",[]],[\"name/1011\",[431,75.905]],[\"comment/1011\",[]],[\"name/1012\",[252,35.475]],[\"comment/1012\",[]],[\"name/1013\",[254,35.954]],[\"comment/1013\",[]],[\"name/1014\",[172,42.703]],[\"comment/1014\",[]],[\"name/1015\",[173,41.565]],[\"comment/1015\",[]],[\"name/1016\",[432,75.905]],[\"comment/1016\",[]],[\"name/1017\",[258,43.197]],[\"comment/1017\",[]],[\"name/1018\",[29,35.13]],[\"comment/1018\",[]],[\"name/1019\",[172,42.703]],[\"comment/1019\",[]],[\"name/1020\",[173,41.565]],[\"comment/1020\",[]],[\"name/1021\",[388,67.432]],[\"comment/1021\",[]],[\"name/1022\",[418,64.919]],[\"comment/1022\",[]],[\"name/1023\",[252,35.475]],[\"comment/1023\",[]],[\"name/1024\",[256,42.005]],[\"comment/1024\",[]],[\"name/1025\",[257,40.74]],[\"comment/1025\",[]],[\"name/1026\",[259,43.197]],[\"comment/1026\",[]],[\"name/1027\",[260,42.947]],[\"comment/1027\",[]],[\"name/1028\",[261,43.197]],[\"comment/1028\",[]],[\"name/1029\",[254,35.954]],[\"comment/1029\",[]],[\"name/1030\",[433,75.905]],[\"comment/1030\",[]],[\"name/1031\",[253,42.703]],[\"comment/1031\",[]],[\"name/1032\",[387,61.242]],[\"comment/1032\",[]],[\"name/1033\",[434,75.905]],[\"comment/1033\",[]],[\"name/1034\",[357,61.242]],[\"comment/1034\",[]],[\"name/1035\",[435,75.905]],[\"comment/1035\",[]],[\"name/1036\",[436,75.905]],[\"comment/1036\",[]],[\"name/1037\",[252,35.475]],[\"comment/1037\",[]],[\"name/1038\",[254,35.954]],[\"comment/1038\",[]],[\"name/1039\",[437,75.905]],[\"comment/1039\",[]],[\"name/1040\",[258,43.197]],[\"comment/1040\",[]],[\"name/1041\",[438,75.905]],[\"comment/1041\",[]],[\"name/1042\",[252,35.475]],[\"comment/1042\",[]],[\"name/1043\",[256,42.005]],[\"comment/1043\",[]],[\"name/1044\",[257,40.74]],[\"comment/1044\",[]],[\"name/1045\",[259,43.197]],[\"comment/1045\",[]],[\"name/1046\",[260,42.947]],[\"comment/1046\",[]],[\"name/1047\",[261,43.197]],[\"comment/1047\",[]],[\"name/1048\",[254,35.954]],[\"comment/1048\",[]],[\"name/1049\",[439,75.905]],[\"comment/1049\",[]],[\"name/1050\",[253,42.703]],[\"comment/1050\",[]],[\"name/1051\",[276,51.926]],[\"comment/1051\",[]],[\"name/1052\",[440,70.797]],[\"comment/1052\",[]],[\"name/1053\",[348,64.919]],[\"comment/1053\",[]],[\"name/1054\",[349,64.919]],[\"comment/1054\",[]],[\"name/1055\",[252,35.475]],[\"comment/1055\",[]],[\"name/1056\",[254,35.954]],[\"comment/1056\",[]],[\"name/1057\",[172,42.703]],[\"comment/1057\",[]],[\"name/1058\",[173,41.565]],[\"comment/1058\",[]],[\"name/1059\",[441,75.905]],[\"comment/1059\",[]],[\"name/1060\",[379,70.797]],[\"comment/1060\",[]],[\"name/1061\",[442,75.905]],[\"comment/1061\",[]],[\"name/1062\",[443,75.905]],[\"comment/1062\",[]],[\"name/1063\",[350,70.797]],[\"comment/1063\",[]],[\"name/1064\",[64,47.573]],[\"comment/1064\",[]],[\"name/1065\",[67,36.987]],[\"comment/1065\",[]],[\"name/1066\",[65,35.243]],[\"comment/1066\",[]],[\"name/1067\",[69,40.544]],[\"comment/1067\",[]],[\"name/1068\",[202,67.432]],[\"comment/1068\",[]],[\"name/1069\",[203,67.432]],[\"comment/1069\",[]],[\"name/1070\",[204,70.797]],[\"comment/1070\",[]],[\"name/1071\",[205,70.797]],[\"comment/1071\",[]],[\"name/1072\",[125,53.933]],[\"comment/1072\",[]],[\"name/1073\",[113,52.551]],[\"comment/1073\",[]],[\"name/1074\",[84,47.973]],[\"comment/1074\",[]],[\"name/1075\",[85,48.39]],[\"comment/1075\",[]],[\"name/1076\",[86,48.39]],[\"comment/1076\",[]],[\"name/1077\",[444,75.905]],[\"comment/1077\",[]],[\"name/1078\",[326,53.933]],[\"comment/1078\",[]],[\"name/1079\",[198,53.218]],[\"comment/1079\",[]],[\"name/1080\",[445,75.905]],[\"comment/1080\",[]],[\"name/1081\",[258,43.197]],[\"comment/1081\",[]],[\"name/1082\",[29,35.13]],[\"comment/1082\",[]],[\"name/1083\",[307,52.551]],[\"comment/1083\",[]],[\"name/1084\",[173,41.565]],[\"comment/1084\",[]],[\"name/1085\",[172,42.703]],[\"comment/1085\",[]],[\"name/1086\",[353,64.919]],[\"comment/1086\",[]],[\"name/1087\",[280,51.338]],[\"comment/1087\",[]],[\"name/1088\",[252,35.475]],[\"comment/1088\",[]],[\"name/1089\",[256,42.005]],[\"comment/1089\",[]],[\"name/1090\",[257,40.74]],[\"comment/1090\",[]],[\"name/1091\",[259,43.197]],[\"comment/1091\",[]],[\"name/1092\",[260,42.947]],[\"comment/1092\",[]],[\"name/1093\",[261,43.197]],[\"comment/1093\",[]],[\"name/1094\",[254,35.954]],[\"comment/1094\",[]],[\"name/1095\",[446,75.905]],[\"comment/1095\",[]],[\"name/1096\",[253,42.703]],[\"comment/1096\",[]],[\"name/1097\",[447,59.811]],[\"comment/1097\",[]],[\"name/1098\",[268,57.447]],[\"comment/1098\",[]],[\"name/1099\",[252,35.475]],[\"comment/1099\",[]],[\"name/1100\",[254,35.954]],[\"comment/1100\",[]],[\"name/1101\",[172,42.703]],[\"comment/1101\",[]],[\"name/1102\",[173,41.565]],[\"comment/1102\",[]],[\"name/1103\",[448,75.905]],[\"comment/1103\",[]],[\"name/1104\",[258,43.197]],[\"comment/1104\",[]],[\"name/1105\",[29,35.13]],[\"comment/1105\",[]],[\"name/1106\",[449,75.905]],[\"comment/1106\",[]],[\"name/1107\",[268,57.447]],[\"comment/1107\",[]],[\"name/1108\",[172,42.703]],[\"comment/1108\",[]],[\"name/1109\",[173,41.565]],[\"comment/1109\",[]],[\"name/1110\",[307,52.551]],[\"comment/1110\",[]],[\"name/1111\",[447,59.811]],[\"comment/1111\",[]],[\"name/1112\",[280,51.338]],[\"comment/1112\",[]],[\"name/1113\",[252,35.475]],[\"comment/1113\",[]],[\"name/1114\",[256,42.005]],[\"comment/1114\",[]],[\"name/1115\",[257,40.74]],[\"comment/1115\",[]],[\"name/1116\",[259,43.197]],[\"comment/1116\",[]],[\"name/1117\",[260,42.947]],[\"comment/1117\",[]],[\"name/1118\",[261,43.197]],[\"comment/1118\",[]],[\"name/1119\",[254,35.954]],[\"comment/1119\",[]],[\"name/1120\",[450,75.905]],[\"comment/1120\",[]],[\"name/1121\",[451,75.905]],[\"comment/1121\",[]],[\"name/1122\",[452,67.432]],[\"comment/1122\",[]],[\"name/1123\",[447,59.811]],[\"comment/1123\",[]],[\"name/1124\",[268,57.447]],[\"comment/1124\",[]],[\"name/1125\",[453,61.242]],[\"comment/1125\",[]],[\"name/1126\",[454,67.432]],[\"comment/1126\",[]],[\"name/1127\",[455,70.797]],[\"comment/1127\",[]],[\"name/1128\",[253,42.703]],[\"comment/1128\",[]],[\"name/1129\",[252,35.475]],[\"comment/1129\",[]],[\"name/1130\",[254,35.954]],[\"comment/1130\",[]],[\"name/1131\",[456,75.905]],[\"comment/1131\",[]],[\"name/1132\",[452,67.432]],[\"comment/1132\",[]],[\"name/1133\",[253,42.703]],[\"comment/1133\",[]],[\"name/1134\",[252,35.475]],[\"comment/1134\",[]],[\"name/1135\",[254,35.954]],[\"comment/1135\",[]],[\"name/1136\",[457,75.905]],[\"comment/1136\",[]],[\"name/1137\",[458,70.797]],[\"comment/1137\",[]],[\"name/1138\",[459,70.797]],[\"comment/1138\",[]],[\"name/1139\",[453,61.242]],[\"comment/1139\",[]],[\"name/1140\",[460,75.905]],[\"comment/1140\",[]],[\"name/1141\",[452,67.432]],[\"comment/1141\",[]],[\"name/1142\",[253,42.703]],[\"comment/1142\",[]],[\"name/1143\",[252,35.475]],[\"comment/1143\",[]],[\"name/1144\",[254,35.954]],[\"comment/1144\",[]],[\"name/1145\",[461,75.905]],[\"comment/1145\",[]],[\"name/1146\",[258,43.197]],[\"comment/1146\",[]],[\"name/1147\",[29,35.13]],[\"comment/1147\",[]],[\"name/1148\",[462,67.432]],[\"comment/1148\",[]],[\"name/1149\",[268,57.447]],[\"comment/1149\",[]],[\"name/1150\",[453,61.242]],[\"comment/1150\",[]],[\"name/1151\",[447,59.811]],[\"comment/1151\",[]],[\"name/1152\",[463,67.432]],[\"comment/1152\",[]],[\"name/1153\",[252,35.475]],[\"comment/1153\",[]],[\"name/1154\",[171,67.432]],[\"comment/1154\",[]],[\"name/1155\",[256,42.005]],[\"comment/1155\",[]],[\"name/1156\",[252,35.475]],[\"comment/1156\",[]],[\"name/1157\",[256,42.005]],[\"comment/1157\",[]],[\"name/1158\",[257,40.74]],[\"comment/1158\",[]],[\"name/1159\",[259,43.197]],[\"comment/1159\",[]],[\"name/1160\",[260,42.947]],[\"comment/1160\",[]],[\"name/1161\",[261,43.197]],[\"comment/1161\",[]],[\"name/1162\",[254,35.954]],[\"comment/1162\",[]],[\"name/1163\",[464,75.905]],[\"comment/1163\",[]],[\"name/1164\",[458,70.797]],[\"comment/1164\",[]],[\"name/1165\",[459,70.797]],[\"comment/1165\",[]],[\"name/1166\",[465,75.905]],[\"comment/1166\",[]],[\"name/1167\",[253,42.703]],[\"comment/1167\",[]],[\"name/1168\",[447,59.811]],[\"comment/1168\",[]],[\"name/1169\",[268,57.447]],[\"comment/1169\",[]],[\"name/1170\",[453,61.242]],[\"comment/1170\",[]],[\"name/1171\",[454,67.432]],[\"comment/1171\",[]],[\"name/1172\",[466,75.905]],[\"comment/1172\",[]],[\"name/1173\",[252,35.475]],[\"comment/1173\",[]],[\"name/1174\",[254,35.954]],[\"comment/1174\",[]],[\"name/1175\",[172,42.703]],[\"comment/1175\",[]],[\"name/1176\",[173,41.565]],[\"comment/1176\",[]],[\"name/1177\",[467,75.905]],[\"comment/1177\",[]],[\"name/1178\",[258,43.197]],[\"comment/1178\",[]],[\"name/1179\",[29,35.13]],[\"comment/1179\",[]],[\"name/1180\",[462,67.432]],[\"comment/1180\",[]],[\"name/1181\",[268,57.447]],[\"comment/1181\",[]],[\"name/1182\",[468,75.905]],[\"comment/1182\",[]],[\"name/1183\",[453,61.242]],[\"comment/1183\",[]],[\"name/1184\",[463,67.432]],[\"comment/1184\",[]],[\"name/1185\",[252,35.475]],[\"comment/1185\",[]],[\"name/1186\",[307,52.551]],[\"comment/1186\",[]],[\"name/1187\",[447,59.811]],[\"comment/1187\",[]],[\"name/1188\",[280,51.338]],[\"comment/1188\",[]],[\"name/1189\",[252,35.475]],[\"comment/1189\",[]],[\"name/1190\",[256,42.005]],[\"comment/1190\",[]],[\"name/1191\",[257,40.74]],[\"comment/1191\",[]],[\"name/1192\",[259,43.197]],[\"comment/1192\",[]],[\"name/1193\",[260,42.947]],[\"comment/1193\",[]],[\"name/1194\",[261,43.197]],[\"comment/1194\",[]],[\"name/1195\",[254,35.954]],[\"comment/1195\",[]],[\"name/1196\",[469,75.905]],[\"comment/1196\",[]],[\"name/1197\",[326,53.933]],[\"comment/1197\",[]],[\"name/1198\",[198,53.218]],[\"comment/1198\",[]],[\"name/1199\",[470,75.905]],[\"comment/1199\",[]],[\"name/1200\",[253,42.703]],[\"comment/1200\",[]],[\"name/1201\",[37,47.573]],[\"comment/1201\",[]],[\"name/1202\",[267,70.797]],[\"comment/1202\",[]],[\"name/1203\",[270,67.432]],[\"comment/1203\",[]],[\"name/1204\",[471,62.912]],[\"comment/1204\",[]],[\"name/1205\",[252,35.475]],[\"comment/1205\",[]],[\"name/1206\",[254,35.954]],[\"comment/1206\",[]],[\"name/1207\",[472,75.905]],[\"comment/1207\",[]],[\"name/1208\",[258,43.197]],[\"comment/1208\",[]],[\"name/1209\",[29,35.13]],[\"comment/1209\",[]],[\"name/1210\",[473,75.905]],[\"comment/1210\",[]],[\"name/1211\",[252,35.475]],[\"comment/1211\",[]],[\"name/1212\",[256,42.005]],[\"comment/1212\",[]],[\"name/1213\",[257,40.74]],[\"comment/1213\",[]],[\"name/1214\",[259,43.197]],[\"comment/1214\",[]],[\"name/1215\",[260,42.947]],[\"comment/1215\",[]],[\"name/1216\",[261,43.197]],[\"comment/1216\",[]],[\"name/1217\",[254,35.954]],[\"comment/1217\",[]],[\"name/1218\",[474,75.905]],[\"comment/1218\",[]],[\"name/1219\",[253,42.703]],[\"comment/1219\",[]],[\"name/1220\",[475,70.797]],[\"comment/1220\",[]],[\"name/1221\",[377,64.919]],[\"comment/1221\",[]],[\"name/1222\",[476,70.797]],[\"comment/1222\",[]],[\"name/1223\",[477,70.797]],[\"comment/1223\",[]],[\"name/1224\",[7,70.797]],[\"comment/1224\",[]],[\"name/1225\",[478,75.905]],[\"comment/1225\",[]],[\"name/1226\",[479,75.905]],[\"comment/1226\",[]],[\"name/1227\",[252,35.475]],[\"comment/1227\",[]],[\"name/1228\",[254,35.954]],[\"comment/1228\",[]],[\"name/1229\",[480,75.905]],[\"comment/1229\",[]],[\"name/1230\",[258,43.197]],[\"comment/1230\",[]],[\"name/1231\",[252,35.475]],[\"comment/1231\",[]],[\"name/1232\",[256,42.005]],[\"comment/1232\",[]],[\"name/1233\",[257,40.74]],[\"comment/1233\",[]],[\"name/1234\",[259,43.197]],[\"comment/1234\",[]],[\"name/1235\",[260,42.947]],[\"comment/1235\",[]],[\"name/1236\",[261,43.197]],[\"comment/1236\",[]],[\"name/1237\",[254,35.954]],[\"comment/1237\",[]],[\"name/1238\",[481,75.905]],[\"comment/1238\",[]],[\"name/1239\",[348,64.919]],[\"comment/1239\",[]],[\"name/1240\",[349,64.919]],[\"comment/1240\",[]],[\"name/1241\",[440,70.797]],[\"comment/1241\",[]],[\"name/1242\",[482,75.905]],[\"comment/1242\",[]],[\"name/1243\",[483,70.797]],[\"comment/1243\",[]],[\"name/1244\",[484,75.905]],[\"comment/1244\",[]],[\"name/1245\",[485,75.905]],[\"comment/1245\",[]],[\"name/1246\",[486,75.905]],[\"comment/1246\",[]],[\"name/1247\",[257,40.74]],[\"comment/1247\",[]],[\"name/1248\",[487,70.797]],[\"comment/1248\",[]],[\"name/1249\",[488,70.797]],[\"comment/1249\",[]],[\"name/1250\",[172,42.703]],[\"comment/1250\",[]],[\"name/1251\",[173,41.565]],[\"comment/1251\",[]],[\"name/1252\",[489,70.797]],[\"comment/1252\",[]],[\"name/1253\",[490,62.912]],[\"comment/1253\",[]],[\"name/1254\",[491,62.912]],[\"comment/1254\",[]],[\"name/1255\",[310,70.797]],[\"comment/1255\",[]],[\"name/1256\",[492,70.797]],[\"comment/1256\",[]],[\"name/1257\",[493,75.905]],[\"comment/1257\",[]],[\"name/1258\",[487,70.797]],[\"comment/1258\",[]],[\"name/1259\",[488,70.797]],[\"comment/1259\",[]],[\"name/1260\",[172,42.703]],[\"comment/1260\",[]],[\"name/1261\",[173,41.565]],[\"comment/1261\",[]],[\"name/1262\",[489,70.797]],[\"comment/1262\",[]],[\"name/1263\",[490,62.912]],[\"comment/1263\",[]],[\"name/1264\",[491,62.912]],[\"comment/1264\",[]],[\"name/1265\",[492,70.797]],[\"comment/1265\",[]],[\"name/1266\",[494,75.905]],[\"comment/1266\",[]],[\"name/1267\",[257,40.74]],[\"comment/1267\",[]],[\"name/1268\",[105,67.432]],[\"comment/1268\",[]],[\"name/1269\",[495,64.919]],[\"comment/1269\",[]],[\"name/1270\",[496,75.905]],[\"comment/1270\",[]],[\"name/1271\",[146,51.926]],[\"comment/1271\",[]],[\"name/1272\",[67,36.987]],[\"comment/1272\",[]],[\"name/1273\",[376,70.797]],[\"comment/1273\",[]],[\"name/1274\",[172,42.703]],[\"comment/1274\",[]],[\"name/1275\",[173,41.565]],[\"comment/1275\",[]],[\"name/1276\",[497,75.905]],[\"comment/1276\",[]],[\"name/1277\",[498,70.797]],[\"comment/1277\",[]],[\"name/1278\",[490,62.912]],[\"comment/1278\",[]],[\"name/1279\",[491,62.912]],[\"comment/1279\",[]],[\"name/1280\",[471,62.912]],[\"comment/1280\",[]],[\"name/1281\",[499,75.905]],[\"comment/1281\",[]],[\"name/1282\",[500,75.905]],[\"comment/1282\",[]],[\"name/1283\",[501,75.905]],[\"comment/1283\",[]],[\"name/1284\",[256,42.005]],[\"comment/1284\",[]],[\"name/1285\",[257,40.74]],[\"comment/1285\",[]],[\"name/1286\",[415,64.919]],[\"comment/1286\",[]],[\"name/1287\",[416,64.919]],[\"comment/1287\",[]],[\"name/1288\",[417,64.919]],[\"comment/1288\",[]],[\"name/1289\",[307,52.551]],[\"comment/1289\",[]],[\"name/1290\",[172,42.703]],[\"comment/1290\",[]],[\"name/1291\",[173,41.565]],[\"comment/1291\",[]],[\"name/1292\",[361,64.919]],[\"comment/1292\",[]],[\"name/1293\",[387,61.242]],[\"comment/1293\",[]],[\"name/1294\",[280,51.338]],[\"comment/1294\",[]],[\"name/1295\",[260,42.947]],[\"comment/1295\",[]],[\"name/1296\",[502,75.905]],[\"comment/1296\",[]],[\"name/1297\",[257,40.74]],[\"comment/1297\",[]],[\"name/1298\",[447,59.811]],[\"comment/1298\",[]],[\"name/1299\",[268,57.447]],[\"comment/1299\",[]],[\"name/1300\",[453,61.242]],[\"comment/1300\",[]],[\"name/1301\",[463,67.432]],[\"comment/1301\",[]],[\"name/1302\",[252,35.475]],[\"comment/1302\",[]],[\"name/1303\",[454,67.432]],[\"comment/1303\",[]],[\"name/1304\",[462,67.432]],[\"comment/1304\",[]],[\"name/1305\",[503,75.905]],[\"comment/1305\",[]],[\"name/1306\",[257,40.74]],[\"comment/1306\",[]],[\"name/1307\",[504,75.905]],[\"comment/1307\",[]],[\"name/1308\",[505,70.797]],[\"comment/1308\",[]],[\"name/1309\",[172,42.703]],[\"comment/1309\",[]],[\"name/1310\",[173,41.565]],[\"comment/1310\",[]],[\"name/1311\",[356,62.912]],[\"comment/1311\",[]],[\"name/1312\",[355,62.912]],[\"comment/1312\",[]],[\"name/1313\",[506,75.905]],[\"comment/1313\",[]],[\"name/1314\",[256,42.005]],[\"comment/1314\",[]],[\"name/1315\",[257,40.74]],[\"comment/1315\",[]],[\"name/1316\",[415,64.919]],[\"comment/1316\",[]],[\"name/1317\",[416,64.919]],[\"comment/1317\",[]],[\"name/1318\",[417,64.919]],[\"comment/1318\",[]],[\"name/1319\",[307,52.551]],[\"comment/1319\",[]],[\"name/1320\",[172,42.703]],[\"comment/1320\",[]],[\"name/1321\",[173,41.565]],[\"comment/1321\",[]],[\"name/1322\",[361,64.919]],[\"comment/1322\",[]],[\"name/1323\",[387,61.242]],[\"comment/1323\",[]],[\"name/1324\",[280,51.338]],[\"comment/1324\",[]],[\"name/1325\",[507,75.905]],[\"comment/1325\",[]],[\"name/1326\",[257,40.74]],[\"comment/1326\",[]],[\"name/1327\",[508,75.905]],[\"comment/1327\",[]],[\"name/1328\",[509,75.905]],[\"comment/1328\",[]],[\"name/1329\",[253,42.703]],[\"comment/1329\",[]],[\"name/1330\",[475,70.797]],[\"comment/1330\",[]],[\"name/1331\",[377,64.919]],[\"comment/1331\",[]],[\"name/1332\",[476,70.797]],[\"comment/1332\",[]],[\"name/1333\",[477,70.797]],[\"comment/1333\",[]],[\"name/1334\",[252,35.475]],[\"comment/1334\",[]],[\"name/1335\",[254,35.954]],[\"comment/1335\",[]],[\"name/1336\",[510,75.905]],[\"comment/1336\",[]],[\"name/1337\",[258,43.197]],[\"comment/1337\",[]],[\"name/1338\",[252,35.475]],[\"comment/1338\",[]],[\"name/1339\",[256,42.005]],[\"comment/1339\",[]],[\"name/1340\",[257,40.74]],[\"comment/1340\",[]],[\"name/1341\",[259,43.197]],[\"comment/1341\",[]],[\"name/1342\",[260,42.947]],[\"comment/1342\",[]],[\"name/1343\",[261,43.197]],[\"comment/1343\",[]],[\"name/1344\",[254,35.954]],[\"comment/1344\",[]],[\"name/1345\",[511,75.905]],[\"comment/1345\",[]],[\"name/1346\",[348,64.919]],[\"comment/1346\",[]],[\"name/1347\",[349,64.919]],[\"comment/1347\",[]],[\"name/1348\",[483,70.797]],[\"comment/1348\",[]],[\"name/1349\",[512,75.905]],[\"comment/1349\",[]],[\"name/1350\",[253,42.703]],[\"comment/1350\",[]],[\"name/1351\",[252,35.475]],[\"comment/1351\",[]],[\"name/1352\",[254,35.954]],[\"comment/1352\",[]],[\"name/1353\",[513,75.905]],[\"comment/1353\",[]],[\"name/1354\",[258,43.197]],[\"comment/1354\",[]],[\"name/1355\",[29,35.13]],[\"comment/1355\",[]],[\"name/1356\",[514,75.905]],[\"comment/1356\",[]],[\"name/1357\",[515,75.905]],[\"comment/1357\",[]],[\"name/1358\",[516,75.905]],[\"comment/1358\",[]],[\"name/1359\",[29,35.13]],[\"comment/1359\",[]],[\"name/1360\",[495,64.919]],[\"comment/1360\",[]],[\"name/1361\",[517,75.905]],[\"comment/1361\",[]],[\"name/1362\",[518,75.905]],[\"comment/1362\",[]],[\"name/1363\",[519,75.905]],[\"comment/1363\",[]],[\"name/1364\",[520,75.905]],[\"comment/1364\",[]],[\"name/1365\",[307,52.551]],[\"comment/1365\",[]],[\"name/1366\",[521,75.905]],[\"comment/1366\",[]],[\"name/1367\",[29,35.13]],[\"comment/1367\",[]],[\"name/1368\",[522,75.905]],[\"comment/1368\",[]],[\"name/1369\",[523,75.905]],[\"comment/1369\",[]],[\"name/1370\",[524,75.905]],[\"comment/1370\",[]],[\"name/1371\",[525,75.905]],[\"comment/1371\",[]],[\"name/1372\",[526,75.905]],[\"comment/1372\",[]],[\"name/1373\",[252,35.475]],[\"comment/1373\",[]],[\"name/1374\",[256,42.005]],[\"comment/1374\",[]],[\"name/1375\",[257,40.74]],[\"comment/1375\",[]],[\"name/1376\",[259,43.197]],[\"comment/1376\",[]],[\"name/1377\",[260,42.947]],[\"comment/1377\",[]],[\"name/1378\",[261,43.197]],[\"comment/1378\",[]],[\"name/1379\",[254,35.954]],[\"comment/1379\",[]],[\"name/1380\",[527,75.905]],[\"comment/1380\",[]],[\"name/1381\",[253,42.703]],[\"comment/1381\",[]],[\"name/1382\",[270,67.432]],[\"comment/1382\",[]],[\"name/1383\",[252,35.475]],[\"comment/1383\",[]],[\"name/1384\",[254,35.954]],[\"comment/1384\",[]],[\"name/1385\",[528,75.905]],[\"comment/1385\",[]],[\"name/1386\",[258,43.197]],[\"comment/1386\",[]],[\"name/1387\",[29,35.13]],[\"comment/1387\",[]],[\"name/1388\",[265,70.797]],[\"comment/1388\",[]],[\"name/1389\",[29,35.13]],[\"comment/1389\",[]],[\"name/1390\",[72,67.432]],[\"comment/1390\",[]],[\"name/1391\",[529,75.905]],[\"comment/1391\",[]],[\"name/1392\",[498,70.797]],[\"comment/1392\",[]],[\"name/1393\",[320,59.811]],[\"comment/1393\",[]],[\"name/1394\",[530,75.905]],[\"comment/1394\",[]],[\"name/1395\",[531,75.905]],[\"comment/1395\",[]],[\"name/1396\",[252,35.475]],[\"comment/1396\",[]],[\"name/1397\",[256,42.005]],[\"comment/1397\",[]],[\"name/1398\",[257,40.74]],[\"comment/1398\",[]],[\"name/1399\",[259,43.197]],[\"comment/1399\",[]],[\"name/1400\",[260,42.947]],[\"comment/1400\",[]],[\"name/1401\",[261,43.197]],[\"comment/1401\",[]],[\"name/1402\",[254,35.954]],[\"comment/1402\",[]],[\"name/1403\",[532,75.905]],[\"comment/1403\",[]],[\"name/1404\",[253,42.703]],[\"comment/1404\",[]],[\"name/1405\",[56,59.811]],[\"comment/1405\",[]],[\"name/1406\",[252,35.475]],[\"comment/1406\",[]],[\"name/1407\",[254,35.954]],[\"comment/1407\",[]],[\"name/1408\",[533,75.905]],[\"comment/1408\",[]],[\"name/1409\",[258,43.197]],[\"comment/1409\",[]],[\"name/1410\",[252,35.475]],[\"comment/1410\",[]],[\"name/1411\",[256,42.005]],[\"comment/1411\",[]],[\"name/1412\",[257,40.74]],[\"comment/1412\",[]],[\"name/1413\",[259,43.197]],[\"comment/1413\",[]],[\"name/1414\",[260,42.947]],[\"comment/1414\",[]],[\"name/1415\",[261,43.197]],[\"comment/1415\",[]],[\"name/1416\",[254,35.954]],[\"comment/1416\",[]],[\"name/1417\",[534,75.905]],[\"comment/1417\",[]],[\"name/1418\",[253,42.703]],[\"comment/1418\",[]],[\"name/1419\",[252,35.475]],[\"comment/1419\",[]],[\"name/1420\",[254,35.954]],[\"comment/1420\",[]],[\"name/1421\",[535,75.905]],[\"comment/1421\",[]],[\"name/1422\",[258,43.197]],[\"comment/1422\",[]],[\"name/1423\",[29,35.13]],[\"comment/1423\",[]],[\"name/1424\",[536,75.905]],[\"comment/1424\",[]],[\"name/1425\",[29,35.13]],[\"comment/1425\",[]],[\"name/1426\",[537,70.797]],[\"comment/1426\",[]],[\"name/1427\",[538,70.797]],[\"comment/1427\",[]],[\"name/1428\",[539,70.797]],[\"comment/1428\",[]],[\"name/1429\",[29,35.13]],[\"comment/1429\",[]],[\"name/1430\",[540,64.919]],[\"comment/1430\",[]],[\"name/1431\",[541,70.797]],[\"comment/1431\",[]],[\"name/1432\",[56,59.811]],[\"comment/1432\",[]],[\"name/1433\",[542,70.797]],[\"comment/1433\",[]],[\"name/1434\",[543,70.797]],[\"comment/1434\",[]],[\"name/1435\",[320,59.811]],[\"comment/1435\",[]],[\"name/1436\",[544,70.797]],[\"comment/1436\",[]],[\"name/1437\",[545,75.905]],[\"comment/1437\",[]],[\"name/1438\",[546,70.797]],[\"comment/1438\",[]],[\"name/1439\",[547,70.797]],[\"comment/1439\",[]],[\"name/1440\",[548,70.797]],[\"comment/1440\",[]],[\"name/1441\",[29,35.13]],[\"comment/1441\",[]],[\"name/1442\",[549,75.905]],[\"comment/1442\",[]],[\"name/1443\",[550,70.797]],[\"comment/1443\",[]],[\"name/1444\",[551,70.797]],[\"comment/1444\",[]],[\"name/1445\",[29,35.13]],[\"comment/1445\",[]],[\"name/1446\",[552,70.797]],[\"comment/1446\",[]],[\"name/1447\",[553,70.797]],[\"comment/1447\",[]],[\"name/1448\",[554,70.797]],[\"comment/1448\",[]],[\"name/1449\",[555,75.905]],[\"comment/1449\",[]],[\"name/1450\",[556,75.905]],[\"comment/1450\",[]],[\"name/1451\",[557,75.905]],[\"comment/1451\",[]],[\"name/1452\",[558,75.905]],[\"comment/1452\",[]],[\"name/1453\",[559,70.797]],[\"comment/1453\",[]],[\"name/1454\",[560,70.797]],[\"comment/1454\",[]],[\"name/1455\",[561,70.797]],[\"comment/1455\",[]],[\"name/1456\",[562,70.797]],[\"comment/1456\",[]],[\"name/1457\",[563,70.797]],[\"comment/1457\",[]],[\"name/1458\",[564,75.905]],[\"comment/1458\",[]],[\"name/1459\",[565,70.797]],[\"comment/1459\",[]],[\"name/1460\",[566,75.905]],[\"comment/1460\",[]],[\"name/1461\",[567,70.797]],[\"comment/1461\",[]],[\"name/1462\",[568,70.797]],[\"comment/1462\",[]],[\"name/1463\",[569,70.797]],[\"comment/1463\",[]],[\"name/1464\",[570,70.797]],[\"comment/1464\",[]],[\"name/1465\",[571,70.797]],[\"comment/1465\",[]],[\"name/1466\",[572,70.797]],[\"comment/1466\",[]],[\"name/1467\",[573,70.797]],[\"comment/1467\",[]],[\"name/1468\",[574,70.797]],[\"comment/1468\",[]],[\"name/1469\",[29,35.13]],[\"comment/1469\",[]],[\"name/1470\",[540,64.919]],[\"comment/1470\",[]],[\"name/1471\",[541,70.797]],[\"comment/1471\",[]],[\"name/1472\",[56,59.811]],[\"comment/1472\",[]],[\"name/1473\",[542,70.797]],[\"comment/1473\",[]],[\"name/1474\",[543,70.797]],[\"comment/1474\",[]],[\"name/1475\",[320,59.811]],[\"comment/1475\",[]],[\"name/1476\",[575,70.797]],[\"comment/1476\",[]],[\"name/1477\",[576,70.797]],[\"comment/1477\",[]],[\"name/1478\",[577,75.905]],[\"comment/1478\",[]],[\"name/1479\",[29,35.13]],[\"comment/1479\",[]],[\"name/1480\",[578,75.905]],[\"comment/1480\",[]],[\"name/1481\",[113,52.551]],[\"comment/1481\",[]],[\"name/1482\",[256,42.005]],[\"comment/1482\",[]],[\"name/1483\",[252,35.475]],[\"comment/1483\",[]],[\"name/1484\",[256,42.005]],[\"comment/1484\",[]],[\"name/1485\",[257,40.74]],[\"comment/1485\",[]],[\"name/1486\",[259,43.197]],[\"comment/1486\",[]],[\"name/1487\",[260,42.947]],[\"comment/1487\",[]],[\"name/1488\",[261,43.197]],[\"comment/1488\",[]],[\"name/1489\",[254,35.954]],[\"comment/1489\",[]],[\"name/1490\",[579,75.905]],[\"comment/1490\",[]],[\"name/1491\",[253,42.703]],[\"comment/1491\",[]],[\"name/1492\",[252,35.475]],[\"comment/1492\",[]],[\"name/1493\",[254,35.954]],[\"comment/1493\",[]],[\"name/1494\",[580,75.905]],[\"comment/1494\",[]],[\"name/1495\",[258,43.197]],[\"comment/1495\",[]],[\"name/1496\",[29,35.13]],[\"comment/1496\",[]],[\"name/1497\",[397,70.797]],[\"comment/1497\",[]],[\"name/1498\",[29,35.13]],[\"comment/1498\",[]],[\"name/1499\",[537,70.797]],[\"comment/1499\",[]],[\"name/1500\",[538,70.797]],[\"comment/1500\",[]],[\"name/1501\",[544,70.797]],[\"comment/1501\",[]],[\"name/1502\",[539,70.797]],[\"comment/1502\",[]],[\"name/1503\",[29,35.13]],[\"comment/1503\",[]],[\"name/1504\",[540,64.919]],[\"comment/1504\",[]],[\"name/1505\",[495,64.919]],[\"comment/1505\",[]],[\"name/1506\",[56,59.811]],[\"comment/1506\",[]],[\"name/1507\",[490,62.912]],[\"comment/1507\",[]],[\"name/1508\",[491,62.912]],[\"comment/1508\",[]],[\"name/1509\",[320,59.811]],[\"comment/1509\",[]],[\"name/1510\",[546,70.797]],[\"comment/1510\",[]],[\"name/1511\",[547,70.797]],[\"comment/1511\",[]],[\"name/1512\",[548,70.797]],[\"comment/1512\",[]],[\"name/1513\",[29,35.13]],[\"comment/1513\",[]],[\"name/1514\",[581,75.905]],[\"comment/1514\",[]],[\"name/1515\",[550,70.797]],[\"comment/1515\",[]],[\"name/1516\",[551,70.797]],[\"comment/1516\",[]],[\"name/1517\",[29,35.13]],[\"comment/1517\",[]],[\"name/1518\",[552,70.797]],[\"comment/1518\",[]],[\"name/1519\",[553,70.797]],[\"comment/1519\",[]],[\"name/1520\",[582,75.905]],[\"comment/1520\",[]],[\"name/1521\",[554,70.797]],[\"comment/1521\",[]],[\"name/1522\",[559,70.797]],[\"comment/1522\",[]],[\"name/1523\",[560,70.797]],[\"comment/1523\",[]],[\"name/1524\",[583,75.905]],[\"comment/1524\",[]],[\"name/1525\",[561,70.797]],[\"comment/1525\",[]],[\"name/1526\",[562,70.797]],[\"comment/1526\",[]],[\"name/1527\",[563,70.797]],[\"comment/1527\",[]],[\"name/1528\",[565,70.797]],[\"comment/1528\",[]],[\"name/1529\",[567,70.797]],[\"comment/1529\",[]],[\"name/1530\",[568,70.797]],[\"comment/1530\",[]],[\"name/1531\",[569,70.797]],[\"comment/1531\",[]],[\"name/1532\",[570,70.797]],[\"comment/1532\",[]],[\"name/1533\",[571,70.797]],[\"comment/1533\",[]],[\"name/1534\",[572,70.797]],[\"comment/1534\",[]],[\"name/1535\",[573,70.797]],[\"comment/1535\",[]],[\"name/1536\",[574,70.797]],[\"comment/1536\",[]],[\"name/1537\",[29,35.13]],[\"comment/1537\",[]],[\"name/1538\",[540,64.919]],[\"comment/1538\",[]],[\"name/1539\",[495,64.919]],[\"comment/1539\",[]],[\"name/1540\",[168,67.432]],[\"comment/1540\",[]],[\"name/1541\",[56,59.811]],[\"comment/1541\",[]],[\"name/1542\",[490,62.912]],[\"comment/1542\",[]],[\"name/1543\",[491,62.912]],[\"comment/1543\",[]],[\"name/1544\",[320,59.811]],[\"comment/1544\",[]],[\"name/1545\",[575,70.797]],[\"comment/1545\",[]],[\"name/1546\",[576,70.797]],[\"comment/1546\",[]],[\"name/1547\",[252,35.475]],[\"comment/1547\",[]],[\"name/1548\",[256,42.005]],[\"comment/1548\",[]],[\"name/1549\",[257,40.74]],[\"comment/1549\",[]],[\"name/1550\",[259,43.197]],[\"comment/1550\",[]],[\"name/1551\",[260,42.947]],[\"comment/1551\",[]],[\"name/1552\",[261,43.197]],[\"comment/1552\",[]],[\"name/1553\",[254,35.954]],[\"comment/1553\",[]],[\"name/1554\",[584,75.905]],[\"comment/1554\",[]],[\"name/1555\",[585,75.905]],[\"comment/1555\",[]],[\"name/1556\",[586,75.905]],[\"comment/1556\",[]],[\"name/1557\",[587,75.905]],[\"comment/1557\",[]],[\"name/1558\",[588,75.905]],[\"comment/1558\",[]],[\"name/1559\",[589,75.905]],[\"comment/1559\",[]],[\"name/1560\",[590,75.905]],[\"comment/1560\",[]],[\"name/1561\",[591,75.905]],[\"comment/1561\",[]],[\"name/1562\",[592,75.905]],[\"comment/1562\",[]],[\"name/1563\",[593,75.905]],[\"comment/1563\",[]],[\"name/1564\",[594,75.905]],[\"comment/1564\",[]],[\"name/1565\",[595,75.905]],[\"comment/1565\",[]],[\"name/1566\",[253,42.703]],[\"comment/1566\",[]],[\"name/1567\",[252,35.475]],[\"comment/1567\",[]],[\"name/1568\",[254,35.954]],[\"comment/1568\",[]],[\"name/1569\",[596,75.905]],[\"comment/1569\",[]],[\"name/1570\",[258,43.197]],[\"comment/1570\",[]],[\"name/1571\",[29,35.13]],[\"comment/1571\",[]],[\"name/1572\",[372,70.797]],[\"comment/1572\",[]],[\"name/1573\",[597,75.905]],[\"comment/1573\",[]],[\"name/1574\",[252,35.475]],[\"comment/1574\",[]],[\"name/1575\",[256,42.005]],[\"comment/1575\",[]],[\"name/1576\",[257,40.74]],[\"comment/1576\",[]],[\"name/1577\",[259,43.197]],[\"comment/1577\",[]],[\"name/1578\",[260,42.947]],[\"comment/1578\",[]],[\"name/1579\",[261,43.197]],[\"comment/1579\",[]],[\"name/1580\",[254,35.954]],[\"comment/1580\",[]],[\"name/1581\",[598,75.905]],[\"comment/1581\",[]],[\"name/1582\",[253,42.703]],[\"comment/1582\",[]],[\"name/1583\",[252,35.475]],[\"comment/1583\",[]],[\"name/1584\",[254,35.954]],[\"comment/1584\",[]],[\"name/1585\",[599,75.905]],[\"comment/1585\",[]],[\"name/1586\",[258,43.197]],[\"comment/1586\",[]],[\"name/1587\",[29,35.13]],[\"comment/1587\",[]],[\"name/1588\",[600,75.905]],[\"comment/1588\",[]],[\"name/1589\",[252,35.475]],[\"comment/1589\",[]],[\"name/1590\",[256,42.005]],[\"comment/1590\",[]],[\"name/1591\",[257,40.74]],[\"comment/1591\",[]],[\"name/1592\",[259,43.197]],[\"comment/1592\",[]],[\"name/1593\",[260,42.947]],[\"comment/1593\",[]],[\"name/1594\",[261,43.197]],[\"comment/1594\",[]],[\"name/1595\",[254,35.954]],[\"comment/1595\",[]],[\"name/1596\",[601,75.905]],[\"comment/1596\",[]],[\"name/1597\",[252,35.475]],[\"comment/1597\",[]],[\"name/1598\",[256,42.005]],[\"comment/1598\",[]],[\"name/1599\",[257,40.74]],[\"comment/1599\",[]],[\"name/1600\",[602,75.905]],[\"comment/1600\",[]],[\"name/1601\",[603,75.905]],[\"comment/1601\",[]],[\"name/1602\",[604,75.905]],[\"comment/1602\",[]],[\"name/1603\",[8,67.432]],[\"comment/1603\",[]],[\"name/1604\",[254,35.954]],[\"comment/1604\",[]],[\"name/1605\",[605,75.905]],[\"comment/1605\",[]],[\"name/1606\",[253,42.703]],[\"comment/1606\",[]],[\"name/1607\",[606,58.559]],[\"comment/1607\",[]],[\"name/1608\",[252,35.475]],[\"comment/1608\",[]],[\"name/1609\",[254,35.954]],[\"comment/1609\",[]],[\"name/1610\",[172,42.703]],[\"comment/1610\",[]],[\"name/1611\",[173,41.565]],[\"comment/1611\",[]],[\"name/1612\",[607,75.905]],[\"comment/1612\",[]],[\"name/1613\",[258,43.197]],[\"comment/1613\",[]],[\"name/1614\",[29,35.13]],[\"comment/1614\",[]],[\"name/1615\",[353,64.919]],[\"comment/1615\",[]],[\"name/1616\",[606,58.559]],[\"comment/1616\",[]],[\"name/1617\",[252,35.475]],[\"comment/1617\",[]],[\"name/1618\",[256,42.005]],[\"comment/1618\",[]],[\"name/1619\",[257,40.74]],[\"comment/1619\",[]],[\"name/1620\",[259,43.197]],[\"comment/1620\",[]],[\"name/1621\",[260,42.947]],[\"comment/1621\",[]],[\"name/1622\",[261,43.197]],[\"comment/1622\",[]],[\"name/1623\",[254,35.954]],[\"comment/1623\",[]],[\"name/1624\",[608,75.905]],[\"comment/1624\",[]],[\"name/1625\",[253,42.703]],[\"comment/1625\",[]],[\"name/1626\",[606,58.559]],[\"comment/1626\",[]],[\"name/1627\",[252,35.475]],[\"comment/1627\",[]],[\"name/1628\",[254,35.954]],[\"comment/1628\",[]],[\"name/1629\",[172,42.703]],[\"comment/1629\",[]],[\"name/1630\",[173,41.565]],[\"comment/1630\",[]],[\"name/1631\",[609,75.905]],[\"comment/1631\",[]],[\"name/1632\",[258,43.197]],[\"comment/1632\",[]],[\"name/1633\",[29,35.13]],[\"comment/1633\",[]],[\"name/1634\",[353,64.919]],[\"comment/1634\",[]],[\"name/1635\",[606,58.559]],[\"comment/1635\",[]],[\"name/1636\",[252,35.475]],[\"comment/1636\",[]],[\"name/1637\",[256,42.005]],[\"comment/1637\",[]],[\"name/1638\",[257,40.74]],[\"comment/1638\",[]],[\"name/1639\",[259,43.197]],[\"comment/1639\",[]],[\"name/1640\",[260,42.947]],[\"comment/1640\",[]],[\"name/1641\",[261,43.197]],[\"comment/1641\",[]],[\"name/1642\",[254,35.954]],[\"comment/1642\",[]],[\"name/1643\",[610,75.905]],[\"comment/1643\",[]],[\"name/1644\",[253,42.703]],[\"comment/1644\",[]],[\"name/1645\",[606,58.559]],[\"comment/1645\",[]],[\"name/1646\",[252,35.475]],[\"comment/1646\",[]],[\"name/1647\",[254,35.954]],[\"comment/1647\",[]],[\"name/1648\",[172,42.703]],[\"comment/1648\",[]],[\"name/1649\",[173,41.565]],[\"comment/1649\",[]],[\"name/1650\",[611,75.905]],[\"comment/1650\",[]],[\"name/1651\",[258,43.197]],[\"comment/1651\",[]],[\"name/1652\",[252,35.475]],[\"comment/1652\",[]],[\"name/1653\",[256,42.005]],[\"comment/1653\",[]],[\"name/1654\",[257,40.74]],[\"comment/1654\",[]],[\"name/1655\",[259,43.197]],[\"comment/1655\",[]],[\"name/1656\",[260,42.947]],[\"comment/1656\",[]],[\"name/1657\",[261,43.197]],[\"comment/1657\",[]],[\"name/1658\",[254,35.954]],[\"comment/1658\",[]],[\"name/1659\",[612,75.905]],[\"comment/1659\",[]],[\"name/1660\",[253,42.703]],[\"comment/1660\",[]],[\"name/1661\",[606,58.559]],[\"comment/1661\",[]],[\"name/1662\",[355,62.912]],[\"comment/1662\",[]],[\"name/1663\",[356,62.912]],[\"comment/1663\",[]],[\"name/1664\",[357,61.242]],[\"comment/1664\",[]],[\"name/1665\",[358,70.797]],[\"comment/1665\",[]],[\"name/1666\",[276,51.926]],[\"comment/1666\",[]],[\"name/1667\",[277,51.926]],[\"comment/1667\",[]],[\"name/1668\",[252,35.475]],[\"comment/1668\",[]],[\"name/1669\",[254,35.954]],[\"comment/1669\",[]],[\"name/1670\",[172,42.703]],[\"comment/1670\",[]],[\"name/1671\",[173,41.565]],[\"comment/1671\",[]],[\"name/1672\",[613,75.905]],[\"comment/1672\",[]],[\"name/1673\",[258,43.197]],[\"comment/1673\",[]],[\"name/1674\",[29,35.13]],[\"comment/1674\",[]],[\"name/1675\",[606,58.559]],[\"comment/1675\",[]],[\"name/1676\",[355,62.912]],[\"comment/1676\",[]],[\"name/1677\",[356,62.912]],[\"comment/1677\",[]],[\"name/1678\",[276,51.926]],[\"comment/1678\",[]],[\"name/1679\",[277,51.926]],[\"comment/1679\",[]],[\"name/1680\",[178,58.559]],[\"comment/1680\",[]],[\"name/1681\",[280,51.338]],[\"comment/1681\",[]],[\"name/1682\",[252,35.475]],[\"comment/1682\",[]],[\"name/1683\",[256,42.005]],[\"comment/1683\",[]],[\"name/1684\",[257,40.74]],[\"comment/1684\",[]],[\"name/1685\",[259,43.197]],[\"comment/1685\",[]],[\"name/1686\",[260,42.947]],[\"comment/1686\",[]],[\"name/1687\",[261,43.197]],[\"comment/1687\",[]],[\"name/1688\",[254,35.954]],[\"comment/1688\",[]],[\"name/1689\",[614,75.905]],[\"comment/1689\",[]],[\"name/1690\",[173,41.565]],[\"comment/1690\",[]],[\"name/1691\",[361,64.919]],[\"comment/1691\",[]],[\"name/1692\",[362,67.432]],[\"comment/1692\",[]],[\"name/1693\",[55,61.242]],[\"comment/1693\",[]],[\"name/1694\",[280,51.338]],[\"comment/1694\",[]],[\"name/1695\",[615,75.905]],[\"comment/1695\",[]],[\"name/1696\",[253,42.703]],[\"comment/1696\",[]],[\"name/1697\",[616,75.905]],[\"comment/1697\",[]],[\"name/1698\",[108,58.559]],[\"comment/1698\",[]],[\"name/1699\",[109,58.559]],[\"comment/1699\",[]],[\"name/1700\",[252,35.475]],[\"comment/1700\",[]],[\"name/1701\",[254,35.954]],[\"comment/1701\",[]],[\"name/1702\",[617,75.905]],[\"comment/1702\",[]],[\"name/1703\",[258,43.197]],[\"comment/1703\",[]],[\"name/1704\",[29,35.13]],[\"comment/1704\",[]],[\"name/1705\",[107,67.432]],[\"comment/1705\",[]],[\"name/1706\",[29,35.13]],[\"comment/1706\",[]],[\"name/1707\",[65,35.243]],[\"comment/1707\",[]],[\"name/1708\",[37,47.573]],[\"comment/1708\",[]],[\"name/1709\",[618,64.919]],[\"comment/1709\",[]],[\"name/1710\",[619,75.905]],[\"comment/1710\",[]],[\"name/1711\",[620,75.905]],[\"comment/1711\",[]],[\"name/1712\",[621,75.905]],[\"comment/1712\",[]],[\"name/1713\",[29,35.13]],[\"comment/1713\",[]],[\"name/1714\",[65,35.243]],[\"comment/1714\",[]],[\"name/1715\",[622,75.905]],[\"comment/1715\",[]],[\"name/1716\",[623,75.905]],[\"comment/1716\",[]],[\"name/1717\",[113,52.551]],[\"comment/1717\",[]],[\"name/1718\",[114,70.797]],[\"comment/1718\",[]],[\"name/1719\",[624,75.905]],[\"comment/1719\",[]],[\"name/1720\",[625,75.905]],[\"comment/1720\",[]],[\"name/1721\",[626,75.905]],[\"comment/1721\",[]],[\"name/1722\",[627,75.905]],[\"comment/1722\",[]],[\"name/1723\",[172,42.703]],[\"comment/1723\",[]],[\"name/1724\",[173,41.565]],[\"comment/1724\",[]],[\"name/1725\",[280,51.338]],[\"comment/1725\",[]],[\"name/1726\",[252,35.475]],[\"comment/1726\",[]],[\"name/1727\",[256,42.005]],[\"comment/1727\",[]],[\"name/1728\",[257,40.74]],[\"comment/1728\",[]],[\"name/1729\",[259,43.197]],[\"comment/1729\",[]],[\"name/1730\",[260,42.947]],[\"comment/1730\",[]],[\"name/1731\",[261,43.197]],[\"comment/1731\",[]],[\"name/1732\",[254,35.954]],[\"comment/1732\",[]],[\"name/1733\",[628,75.905]],[\"comment/1733\",[]],[\"name/1734\",[65,35.243]],[\"comment/1734\",[]],[\"name/1735\",[629,41.565]],[\"comment/1735\",[]],[\"name/1736\",[317,41.144]],[\"comment/1736\",[]],[\"name/1737\",[69,40.544]],[\"comment/1737\",[]],[\"name/1738\",[70,41.353]],[\"comment/1738\",[]],[\"name/1739\",[67,36.987]],[\"comment/1739\",[]],[\"name/1740\",[181,41.353]],[\"comment/1740\",[]],[\"name/1741\",[630,41.565]],[\"comment/1741\",[]],[\"name/1742\",[631,41.565]],[\"comment/1742\",[]],[\"name/1743\",[132,40.94]],[\"comment/1743\",[]],[\"name/1744\",[632,41.353]],[\"comment/1744\",[]],[\"name/1745\",[236,41.353]],[\"comment/1745\",[]],[\"name/1746\",[633,41.353]],[\"comment/1746\",[]],[\"name/1747\",[5,41.353]],[\"comment/1747\",[]],[\"name/1748\",[634,75.905]],[\"comment/1748\",[]],[\"name/1749\",[635,75.905]],[\"comment/1749\",[]],[\"name/1750\",[636,75.905]],[\"comment/1750\",[]],[\"name/1751\",[637,75.905]],[\"comment/1751\",[]],[\"name/1752\",[387,61.242]],[\"comment/1752\",[]],[\"name/1753\",[388,67.432]],[\"comment/1753\",[]],[\"name/1754\",[387,61.242]],[\"comment/1754\",[]],[\"name/1755\",[638,75.905]],[\"comment/1755\",[]],[\"name/1756\",[639,75.905]],[\"comment/1756\",[]],[\"name/1757\",[640,75.905]],[\"comment/1757\",[]],[\"name/1758\",[641,75.905]],[\"comment/1758\",[]],[\"name/1759\",[642,75.905]],[\"comment/1759\",[]],[\"name/1760\",[643,75.905]],[\"comment/1760\",[]],[\"name/1761\",[644,75.905]],[\"comment/1761\",[]],[\"name/1762\",[645,75.905]],[\"comment/1762\",[]],[\"name/1763\",[646,75.905]],[\"comment/1763\",[]],[\"name/1764\",[647,75.905]],[\"comment/1764\",[]],[\"name/1765\",[648,75.905]],[\"comment/1765\",[]],[\"name/1766\",[649,75.905]],[\"comment/1766\",[]],[\"name/1767\",[650,75.905]],[\"comment/1767\",[]],[\"name/1768\",[651,75.905]],[\"comment/1768\",[]],[\"name/1769\",[652,75.905]],[\"comment/1769\",[]],[\"name/1770\",[653,75.905]],[\"comment/1770\",[]],[\"name/1771\",[654,75.905]],[\"comment/1771\",[]],[\"name/1772\",[655,70.797]],[\"comment/1772\",[]],[\"name/1773\",[656,70.797]],[\"comment/1773\",[]],[\"name/1774\",[657,70.797]],[\"comment/1774\",[]],[\"name/1775\",[658,70.797]],[\"comment/1775\",[]],[\"name/1776\",[659,70.797]],[\"comment/1776\",[]],[\"name/1777\",[660,70.797]],[\"comment/1777\",[]],[\"name/1778\",[661,75.905]],[\"comment/1778\",[]],[\"name/1779\",[655,70.797]],[\"comment/1779\",[]],[\"name/1780\",[656,70.797]],[\"comment/1780\",[]],[\"name/1781\",[657,70.797]],[\"comment/1781\",[]],[\"name/1782\",[658,70.797]],[\"comment/1782\",[]],[\"name/1783\",[659,70.797]],[\"comment/1783\",[]],[\"name/1784\",[660,70.797]],[\"comment/1784\",[]],[\"name/1785\",[662,75.905]],[\"comment/1785\",[]],[\"name/1786\",[629,41.565]],[\"comment/1786\",[]],[\"name/1787\",[67,36.987]],[\"comment/1787\",[]],[\"name/1788\",[663,75.905]],[\"comment/1788\",[]],[\"name/1789\",[72,67.432]],[\"comment/1789\",[]],[\"name/1790\",[73,70.797]],[\"comment/1790\",[]],[\"name/1791\",[74,70.797]],[\"comment/1791\",[]],[\"name/1792\",[664,75.905]],[\"comment/1792\",[]],[\"name/1793\",[78,70.797]],[\"comment/1793\",[]],[\"name/1794\",[77,70.797]],[\"comment/1794\",[]],[\"name/1795\",[83,70.797]],[\"comment/1795\",[]],[\"name/1796\",[65,35.243]],[\"comment/1796\",[]],[\"name/1797\",[317,41.144]],[\"comment/1797\",[]],[\"name/1798\",[69,40.544]],[\"comment/1798\",[]],[\"name/1799\",[70,41.353]],[\"comment/1799\",[]],[\"name/1800\",[181,41.353]],[\"comment/1800\",[]],[\"name/1801\",[630,41.565]],[\"comment/1801\",[]],[\"name/1802\",[631,41.565]],[\"comment/1802\",[]],[\"name/1803\",[132,40.94]],[\"comment/1803\",[]],[\"name/1804\",[632,41.353]],[\"comment/1804\",[]],[\"name/1805\",[236,41.353]],[\"comment/1805\",[]],[\"name/1806\",[633,41.353]],[\"comment/1806\",[]],[\"name/1807\",[5,41.353]],[\"comment/1807\",[]],[\"name/1808\",[665,75.905]],[\"comment/1808\",[]],[\"name/1809\",[629,41.565]],[\"comment/1809\",[]],[\"name/1810\",[127,52.551]],[\"comment/1810\",[]],[\"name/1811\",[130,57.447]],[\"comment/1811\",[]],[\"name/1812\",[65,35.243]],[\"comment/1812\",[]],[\"name/1813\",[317,41.144]],[\"comment/1813\",[]],[\"name/1814\",[69,40.544]],[\"comment/1814\",[]],[\"name/1815\",[70,41.353]],[\"comment/1815\",[]],[\"name/1816\",[67,36.987]],[\"comment/1816\",[]],[\"name/1817\",[181,41.353]],[\"comment/1817\",[]],[\"name/1818\",[630,41.565]],[\"comment/1818\",[]],[\"name/1819\",[631,41.565]],[\"comment/1819\",[]],[\"name/1820\",[132,40.94]],[\"comment/1820\",[]],[\"name/1821\",[632,41.353]],[\"comment/1821\",[]],[\"name/1822\",[236,41.353]],[\"comment/1822\",[]],[\"name/1823\",[633,41.353]],[\"comment/1823\",[]],[\"name/1824\",[5,41.353]],[\"comment/1824\",[]],[\"name/1825\",[666,75.905]],[\"comment/1825\",[]],[\"name/1826\",[629,41.565]],[\"comment/1826\",[]],[\"name/1827\",[108,58.559]],[\"comment/1827\",[]],[\"name/1828\",[109,58.559]],[\"comment/1828\",[]],[\"name/1829\",[667,75.905]],[\"comment/1829\",[]],[\"name/1830\",[668,75.905]],[\"comment/1830\",[]],[\"name/1831\",[111,70.797]],[\"comment/1831\",[]],[\"name/1832\",[65,35.243]],[\"comment/1832\",[]],[\"name/1833\",[317,41.144]],[\"comment/1833\",[]],[\"name/1834\",[69,40.544]],[\"comment/1834\",[]],[\"name/1835\",[70,41.353]],[\"comment/1835\",[]],[\"name/1836\",[67,36.987]],[\"comment/1836\",[]],[\"name/1837\",[181,41.353]],[\"comment/1837\",[]],[\"name/1838\",[630,41.565]],[\"comment/1838\",[]],[\"name/1839\",[631,41.565]],[\"comment/1839\",[]],[\"name/1840\",[132,40.94]],[\"comment/1840\",[]],[\"name/1841\",[632,41.353]],[\"comment/1841\",[]],[\"name/1842\",[236,41.353]],[\"comment/1842\",[]],[\"name/1843\",[633,41.353]],[\"comment/1843\",[]],[\"name/1844\",[5,41.353]],[\"comment/1844\",[]],[\"name/1845\",[669,75.905]],[\"comment/1845\",[]],[\"name/1846\",[629,41.565]],[\"comment/1846\",[]],[\"name/1847\",[108,58.559]],[\"comment/1847\",[]],[\"name/1848\",[109,58.559]],[\"comment/1848\",[]],[\"name/1849\",[65,35.243]],[\"comment/1849\",[]],[\"name/1850\",[317,41.144]],[\"comment/1850\",[]],[\"name/1851\",[69,40.544]],[\"comment/1851\",[]],[\"name/1852\",[70,41.353]],[\"comment/1852\",[]],[\"name/1853\",[67,36.987]],[\"comment/1853\",[]],[\"name/1854\",[181,41.353]],[\"comment/1854\",[]],[\"name/1855\",[630,41.565]],[\"comment/1855\",[]],[\"name/1856\",[631,41.565]],[\"comment/1856\",[]],[\"name/1857\",[132,40.94]],[\"comment/1857\",[]],[\"name/1858\",[632,41.353]],[\"comment/1858\",[]],[\"name/1859\",[236,41.353]],[\"comment/1859\",[]],[\"name/1860\",[633,41.353]],[\"comment/1860\",[]],[\"name/1861\",[5,41.353]],[\"comment/1861\",[]],[\"name/1862\",[670,75.905]],[\"comment/1862\",[]],[\"name/1863\",[671,64.919]],[\"comment/1863\",[]],[\"name/1864\",[672,64.919]],[\"comment/1864\",[]],[\"name/1865\",[673,64.919]],[\"comment/1865\",[]],[\"name/1866\",[674,64.919]],[\"comment/1866\",[]],[\"name/1867\",[675,64.919]],[\"comment/1867\",[]],[\"name/1868\",[676,75.905]],[\"comment/1868\",[]],[\"name/1869\",[671,64.919]],[\"comment/1869\",[]],[\"name/1870\",[672,64.919]],[\"comment/1870\",[]],[\"name/1871\",[673,64.919]],[\"comment/1871\",[]],[\"name/1872\",[674,64.919]],[\"comment/1872\",[]],[\"name/1873\",[675,64.919]],[\"comment/1873\",[]],[\"name/1874\",[677,75.905]],[\"comment/1874\",[]],[\"name/1875\",[629,41.565]],[\"comment/1875\",[]],[\"name/1876\",[108,58.559]],[\"comment/1876\",[]],[\"name/1877\",[109,58.559]],[\"comment/1877\",[]],[\"name/1878\",[37,47.573]],[\"comment/1878\",[]],[\"name/1879\",[618,64.919]],[\"comment/1879\",[]],[\"name/1880\",[678,70.797]],[\"comment/1880\",[]],[\"name/1881\",[679,75.905]],[\"comment/1881\",[]],[\"name/1882\",[65,35.243]],[\"comment/1882\",[]],[\"name/1883\",[317,41.144]],[\"comment/1883\",[]],[\"name/1884\",[69,40.544]],[\"comment/1884\",[]],[\"name/1885\",[70,41.353]],[\"comment/1885\",[]],[\"name/1886\",[67,36.987]],[\"comment/1886\",[]],[\"name/1887\",[181,41.353]],[\"comment/1887\",[]],[\"name/1888\",[630,41.565]],[\"comment/1888\",[]],[\"name/1889\",[631,41.565]],[\"comment/1889\",[]],[\"name/1890\",[132,40.94]],[\"comment/1890\",[]],[\"name/1891\",[632,41.353]],[\"comment/1891\",[]],[\"name/1892\",[236,41.353]],[\"comment/1892\",[]],[\"name/1893\",[633,41.353]],[\"comment/1893\",[]],[\"name/1894\",[5,41.353]],[\"comment/1894\",[]],[\"name/1895\",[680,75.905]],[\"comment/1895\",[]],[\"name/1896\",[629,41.565]],[\"comment/1896\",[]],[\"name/1897\",[37,47.573]],[\"comment/1897\",[]],[\"name/1898\",[618,64.919]],[\"comment/1898\",[]],[\"name/1899\",[116,64.919]],[\"comment/1899\",[]],[\"name/1900\",[65,35.243]],[\"comment/1900\",[]],[\"name/1901\",[317,41.144]],[\"comment/1901\",[]],[\"name/1902\",[69,40.544]],[\"comment/1902\",[]],[\"name/1903\",[70,41.353]],[\"comment/1903\",[]],[\"name/1904\",[67,36.987]],[\"comment/1904\",[]],[\"name/1905\",[181,41.353]],[\"comment/1905\",[]],[\"name/1906\",[630,41.565]],[\"comment/1906\",[]],[\"name/1907\",[631,41.565]],[\"comment/1907\",[]],[\"name/1908\",[132,40.94]],[\"comment/1908\",[]],[\"name/1909\",[632,41.353]],[\"comment/1909\",[]],[\"name/1910\",[236,41.353]],[\"comment/1910\",[]],[\"name/1911\",[633,41.353]],[\"comment/1911\",[]],[\"name/1912\",[5,41.353]],[\"comment/1912\",[]],[\"name/1913\",[681,75.905]],[\"comment/1913\",[]],[\"name/1914\",[629,41.565]],[\"comment/1914\",[]],[\"name/1915\",[108,58.559]],[\"comment/1915\",[]],[\"name/1916\",[109,58.559]],[\"comment/1916\",[]],[\"name/1917\",[116,64.919]],[\"comment/1917\",[]],[\"name/1918\",[65,35.243]],[\"comment/1918\",[]],[\"name/1919\",[317,41.144]],[\"comment/1919\",[]],[\"name/1920\",[69,40.544]],[\"comment/1920\",[]],[\"name/1921\",[70,41.353]],[\"comment/1921\",[]],[\"name/1922\",[67,36.987]],[\"comment/1922\",[]],[\"name/1923\",[181,41.353]],[\"comment/1923\",[]],[\"name/1924\",[630,41.565]],[\"comment/1924\",[]],[\"name/1925\",[631,41.565]],[\"comment/1925\",[]],[\"name/1926\",[132,40.94]],[\"comment/1926\",[]],[\"name/1927\",[632,41.353]],[\"comment/1927\",[]],[\"name/1928\",[236,41.353]],[\"comment/1928\",[]],[\"name/1929\",[633,41.353]],[\"comment/1929\",[]],[\"name/1930\",[5,41.353]],[\"comment/1930\",[]],[\"name/1931\",[682,75.905]],[\"comment/1931\",[]],[\"name/1932\",[671,64.919]],[\"comment/1932\",[]],[\"name/1933\",[683,70.797]],[\"comment/1933\",[]],[\"name/1934\",[684,70.797]],[\"comment/1934\",[]],[\"name/1935\",[672,64.919]],[\"comment/1935\",[]],[\"name/1936\",[673,64.919]],[\"comment/1936\",[]],[\"name/1937\",[674,64.919]],[\"comment/1937\",[]],[\"name/1938\",[675,64.919]],[\"comment/1938\",[]],[\"name/1939\",[685,75.905]],[\"comment/1939\",[]],[\"name/1940\",[671,64.919]],[\"comment/1940\",[]],[\"name/1941\",[683,70.797]],[\"comment/1941\",[]],[\"name/1942\",[684,70.797]],[\"comment/1942\",[]],[\"name/1943\",[672,64.919]],[\"comment/1943\",[]],[\"name/1944\",[673,64.919]],[\"comment/1944\",[]],[\"name/1945\",[674,64.919]],[\"comment/1945\",[]],[\"name/1946\",[675,64.919]],[\"comment/1946\",[]],[\"name/1947\",[686,75.905]],[\"comment/1947\",[]],[\"name/1948\",[629,41.565]],[\"comment/1948\",[]],[\"name/1949\",[108,58.559]],[\"comment/1949\",[]],[\"name/1950\",[109,58.559]],[\"comment/1950\",[]],[\"name/1951\",[37,47.573]],[\"comment/1951\",[]],[\"name/1952\",[618,64.919]],[\"comment/1952\",[]],[\"name/1953\",[678,70.797]],[\"comment/1953\",[]],[\"name/1954\",[687,75.905]],[\"comment/1954\",[]],[\"name/1955\",[65,35.243]],[\"comment/1955\",[]],[\"name/1956\",[317,41.144]],[\"comment/1956\",[]],[\"name/1957\",[69,40.544]],[\"comment/1957\",[]],[\"name/1958\",[70,41.353]],[\"comment/1958\",[]],[\"name/1959\",[67,36.987]],[\"comment/1959\",[]],[\"name/1960\",[181,41.353]],[\"comment/1960\",[]],[\"name/1961\",[630,41.565]],[\"comment/1961\",[]],[\"name/1962\",[631,41.565]],[\"comment/1962\",[]],[\"name/1963\",[132,40.94]],[\"comment/1963\",[]],[\"name/1964\",[632,41.353]],[\"comment/1964\",[]],[\"name/1965\",[236,41.353]],[\"comment/1965\",[]],[\"name/1966\",[633,41.353]],[\"comment/1966\",[]],[\"name/1967\",[5,41.353]],[\"comment/1967\",[]],[\"name/1968\",[688,75.905]],[\"comment/1968\",[]],[\"name/1969\",[629,41.565]],[\"comment/1969\",[]],[\"name/1970\",[689,70.797]],[\"comment/1970\",[]],[\"name/1971\",[65,35.243]],[\"comment/1971\",[]],[\"name/1972\",[317,41.144]],[\"comment/1972\",[]],[\"name/1973\",[69,40.544]],[\"comment/1973\",[]],[\"name/1974\",[70,41.353]],[\"comment/1974\",[]],[\"name/1975\",[67,36.987]],[\"comment/1975\",[]],[\"name/1976\",[181,41.353]],[\"comment/1976\",[]],[\"name/1977\",[630,41.565]],[\"comment/1977\",[]],[\"name/1978\",[631,41.565]],[\"comment/1978\",[]],[\"name/1979\",[132,40.94]],[\"comment/1979\",[]],[\"name/1980\",[632,41.353]],[\"comment/1980\",[]],[\"name/1981\",[236,41.353]],[\"comment/1981\",[]],[\"name/1982\",[633,41.353]],[\"comment/1982\",[]],[\"name/1983\",[5,41.353]],[\"comment/1983\",[]],[\"name/1984\",[690,75.905]],[\"comment/1984\",[]],[\"name/1985\",[629,41.565]],[\"comment/1985\",[]],[\"name/1986\",[689,70.797]],[\"comment/1986\",[]],[\"name/1987\",[37,47.573]],[\"comment/1987\",[]],[\"name/1988\",[691,70.797]],[\"comment/1988\",[]],[\"name/1989\",[65,35.243]],[\"comment/1989\",[]],[\"name/1990\",[317,41.144]],[\"comment/1990\",[]],[\"name/1991\",[69,40.544]],[\"comment/1991\",[]],[\"name/1992\",[70,41.353]],[\"comment/1992\",[]],[\"name/1993\",[67,36.987]],[\"comment/1993\",[]],[\"name/1994\",[181,41.353]],[\"comment/1994\",[]],[\"name/1995\",[630,41.565]],[\"comment/1995\",[]],[\"name/1996\",[631,41.565]],[\"comment/1996\",[]],[\"name/1997\",[132,40.94]],[\"comment/1997\",[]],[\"name/1998\",[632,41.353]],[\"comment/1998\",[]],[\"name/1999\",[236,41.353]],[\"comment/1999\",[]],[\"name/2000\",[633,41.353]],[\"comment/2000\",[]],[\"name/2001\",[5,41.353]],[\"comment/2001\",[]],[\"name/2002\",[692,75.905]],[\"comment/2002\",[]],[\"name/2003\",[629,41.565]],[\"comment/2003\",[]],[\"name/2004\",[127,52.551]],[\"comment/2004\",[]],[\"name/2005\",[128,67.432]],[\"comment/2005\",[]],[\"name/2006\",[130,57.447]],[\"comment/2006\",[]],[\"name/2007\",[113,52.551]],[\"comment/2007\",[]],[\"name/2008\",[131,67.432]],[\"comment/2008\",[]],[\"name/2009\",[65,35.243]],[\"comment/2009\",[]],[\"name/2010\",[317,41.144]],[\"comment/2010\",[]],[\"name/2011\",[69,40.544]],[\"comment/2011\",[]],[\"name/2012\",[70,41.353]],[\"comment/2012\",[]],[\"name/2013\",[67,36.987]],[\"comment/2013\",[]],[\"name/2014\",[181,41.353]],[\"comment/2014\",[]],[\"name/2015\",[630,41.565]],[\"comment/2015\",[]],[\"name/2016\",[631,41.565]],[\"comment/2016\",[]],[\"name/2017\",[132,40.94]],[\"comment/2017\",[]],[\"name/2018\",[632,41.353]],[\"comment/2018\",[]],[\"name/2019\",[236,41.353]],[\"comment/2019\",[]],[\"name/2020\",[633,41.353]],[\"comment/2020\",[]],[\"name/2021\",[5,41.353]],[\"comment/2021\",[]],[\"name/2022\",[693,75.905]],[\"comment/2022\",[]],[\"name/2023\",[629,41.565]],[\"comment/2023\",[]],[\"name/2024\",[65,35.243]],[\"comment/2024\",[]],[\"name/2025\",[37,47.573]],[\"comment/2025\",[]],[\"name/2026\",[317,41.144]],[\"comment/2026\",[]],[\"name/2027\",[69,40.544]],[\"comment/2027\",[]],[\"name/2028\",[70,41.353]],[\"comment/2028\",[]],[\"name/2029\",[67,36.987]],[\"comment/2029\",[]],[\"name/2030\",[181,41.353]],[\"comment/2030\",[]],[\"name/2031\",[630,41.565]],[\"comment/2031\",[]],[\"name/2032\",[631,41.565]],[\"comment/2032\",[]],[\"name/2033\",[132,40.94]],[\"comment/2033\",[]],[\"name/2034\",[632,41.353]],[\"comment/2034\",[]],[\"name/2035\",[236,41.353]],[\"comment/2035\",[]],[\"name/2036\",[633,41.353]],[\"comment/2036\",[]],[\"name/2037\",[5,41.353]],[\"comment/2037\",[]],[\"name/2038\",[694,75.905]],[\"comment/2038\",[]],[\"name/2039\",[629,41.565]],[\"comment/2039\",[]],[\"name/2040\",[65,35.243]],[\"comment/2040\",[]],[\"name/2041\",[317,41.144]],[\"comment/2041\",[]],[\"name/2042\",[69,40.544]],[\"comment/2042\",[]],[\"name/2043\",[70,41.353]],[\"comment/2043\",[]],[\"name/2044\",[67,36.987]],[\"comment/2044\",[]],[\"name/2045\",[181,41.353]],[\"comment/2045\",[]],[\"name/2046\",[630,41.565]],[\"comment/2046\",[]],[\"name/2047\",[631,41.565]],[\"comment/2047\",[]],[\"name/2048\",[132,40.94]],[\"comment/2048\",[]],[\"name/2049\",[632,41.353]],[\"comment/2049\",[]],[\"name/2050\",[236,41.353]],[\"comment/2050\",[]],[\"name/2051\",[633,41.353]],[\"comment/2051\",[]],[\"name/2052\",[5,41.353]],[\"comment/2052\",[]],[\"name/2053\",[695,75.905]],[\"comment/2053\",[]],[\"name/2054\",[629,41.565]],[\"comment/2054\",[]],[\"name/2055\",[146,51.926]],[\"comment/2055\",[]],[\"name/2056\",[147,70.797]],[\"comment/2056\",[]],[\"name/2057\",[148,61.242]],[\"comment/2057\",[]],[\"name/2058\",[65,35.243]],[\"comment/2058\",[]],[\"name/2059\",[317,41.144]],[\"comment/2059\",[]],[\"name/2060\",[69,40.544]],[\"comment/2060\",[]],[\"name/2061\",[70,41.353]],[\"comment/2061\",[]],[\"name/2062\",[67,36.987]],[\"comment/2062\",[]],[\"name/2063\",[181,41.353]],[\"comment/2063\",[]],[\"name/2064\",[630,41.565]],[\"comment/2064\",[]],[\"name/2065\",[631,41.565]],[\"comment/2065\",[]],[\"name/2066\",[132,40.94]],[\"comment/2066\",[]],[\"name/2067\",[632,41.353]],[\"comment/2067\",[]],[\"name/2068\",[236,41.353]],[\"comment/2068\",[]],[\"name/2069\",[633,41.353]],[\"comment/2069\",[]],[\"name/2070\",[5,41.353]],[\"comment/2070\",[]],[\"name/2071\",[133,70.797]],[\"comment/2071\",[]],[\"name/2072\",[629,41.565]],[\"comment/2072\",[]],[\"name/2073\",[134,70.797]],[\"comment/2073\",[]],[\"name/2074\",[696,75.905]],[\"comment/2074\",[]],[\"name/2075\",[65,35.243]],[\"comment/2075\",[]],[\"name/2076\",[317,41.144]],[\"comment/2076\",[]],[\"name/2077\",[69,40.544]],[\"comment/2077\",[]],[\"name/2078\",[70,41.353]],[\"comment/2078\",[]],[\"name/2079\",[67,36.987]],[\"comment/2079\",[]],[\"name/2080\",[181,41.353]],[\"comment/2080\",[]],[\"name/2081\",[630,41.565]],[\"comment/2081\",[]],[\"name/2082\",[631,41.565]],[\"comment/2082\",[]],[\"name/2083\",[132,40.94]],[\"comment/2083\",[]],[\"name/2084\",[632,41.353]],[\"comment/2084\",[]],[\"name/2085\",[236,41.353]],[\"comment/2085\",[]],[\"name/2086\",[633,41.353]],[\"comment/2086\",[]],[\"name/2087\",[5,41.353]],[\"comment/2087\",[]],[\"name/2088\",[697,75.905]],[\"comment/2088\",[]],[\"name/2089\",[629,41.565]],[\"comment/2089\",[]],[\"name/2090\",[140,58.559]],[\"comment/2090\",[]],[\"name/2091\",[698,64.919]],[\"comment/2091\",[]],[\"name/2092\",[65,35.243]],[\"comment/2092\",[]],[\"name/2093\",[317,41.144]],[\"comment/2093\",[]],[\"name/2094\",[69,40.544]],[\"comment/2094\",[]],[\"name/2095\",[70,41.353]],[\"comment/2095\",[]],[\"name/2096\",[67,36.987]],[\"comment/2096\",[]],[\"name/2097\",[181,41.353]],[\"comment/2097\",[]],[\"name/2098\",[630,41.565]],[\"comment/2098\",[]],[\"name/2099\",[631,41.565]],[\"comment/2099\",[]],[\"name/2100\",[132,40.94]],[\"comment/2100\",[]],[\"name/2101\",[632,41.353]],[\"comment/2101\",[]],[\"name/2102\",[236,41.353]],[\"comment/2102\",[]],[\"name/2103\",[633,41.353]],[\"comment/2103\",[]],[\"name/2104\",[5,41.353]],[\"comment/2104\",[]],[\"name/2105\",[699,75.905]],[\"comment/2105\",[]],[\"name/2106\",[629,41.565]],[\"comment/2106\",[]],[\"name/2107\",[37,47.573]],[\"comment/2107\",[]],[\"name/2108\",[127,52.551]],[\"comment/2108\",[]],[\"name/2109\",[151,64.919]],[\"comment/2109\",[]],[\"name/2110\",[152,70.797]],[\"comment/2110\",[]],[\"name/2111\",[150,67.432]],[\"comment/2111\",[]],[\"name/2112\",[130,57.447]],[\"comment/2112\",[]],[\"name/2113\",[65,35.243]],[\"comment/2113\",[]],[\"name/2114\",[317,41.144]],[\"comment/2114\",[]],[\"name/2115\",[69,40.544]],[\"comment/2115\",[]],[\"name/2116\",[70,41.353]],[\"comment/2116\",[]],[\"name/2117\",[67,36.987]],[\"comment/2117\",[]],[\"name/2118\",[181,41.353]],[\"comment/2118\",[]],[\"name/2119\",[630,41.565]],[\"comment/2119\",[]],[\"name/2120\",[631,41.565]],[\"comment/2120\",[]],[\"name/2121\",[132,40.94]],[\"comment/2121\",[]],[\"name/2122\",[632,41.353]],[\"comment/2122\",[]],[\"name/2123\",[236,41.353]],[\"comment/2123\",[]],[\"name/2124\",[633,41.353]],[\"comment/2124\",[]],[\"name/2125\",[5,41.353]],[\"comment/2125\",[]],[\"name/2126\",[700,75.905]],[\"comment/2126\",[]],[\"name/2127\",[629,41.565]],[\"comment/2127\",[]],[\"name/2128\",[140,58.559]],[\"comment/2128\",[]],[\"name/2129\",[698,64.919]],[\"comment/2129\",[]],[\"name/2130\",[150,67.432]],[\"comment/2130\",[]],[\"name/2131\",[701,75.905]],[\"comment/2131\",[]],[\"name/2132\",[65,35.243]],[\"comment/2132\",[]],[\"name/2133\",[317,41.144]],[\"comment/2133\",[]],[\"name/2134\",[69,40.544]],[\"comment/2134\",[]],[\"name/2135\",[70,41.353]],[\"comment/2135\",[]],[\"name/2136\",[67,36.987]],[\"comment/2136\",[]],[\"name/2137\",[181,41.353]],[\"comment/2137\",[]],[\"name/2138\",[630,41.565]],[\"comment/2138\",[]],[\"name/2139\",[631,41.565]],[\"comment/2139\",[]],[\"name/2140\",[132,40.94]],[\"comment/2140\",[]],[\"name/2141\",[632,41.353]],[\"comment/2141\",[]],[\"name/2142\",[236,41.353]],[\"comment/2142\",[]],[\"name/2143\",[633,41.353]],[\"comment/2143\",[]],[\"name/2144\",[5,41.353]],[\"comment/2144\",[]],[\"name/2145\",[702,75.905]],[\"comment/2145\",[]],[\"name/2146\",[629,41.565]],[\"comment/2146\",[]],[\"name/2147\",[184,70.797]],[\"comment/2147\",[]],[\"name/2148\",[703,70.797]],[\"comment/2148\",[]],[\"name/2149\",[65,35.243]],[\"comment/2149\",[]],[\"name/2150\",[317,41.144]],[\"comment/2150\",[]],[\"name/2151\",[69,40.544]],[\"comment/2151\",[]],[\"name/2152\",[70,41.353]],[\"comment/2152\",[]],[\"name/2153\",[67,36.987]],[\"comment/2153\",[]],[\"name/2154\",[181,41.353]],[\"comment/2154\",[]],[\"name/2155\",[630,41.565]],[\"comment/2155\",[]],[\"name/2156\",[631,41.565]],[\"comment/2156\",[]],[\"name/2157\",[132,40.94]],[\"comment/2157\",[]],[\"name/2158\",[632,41.353]],[\"comment/2158\",[]],[\"name/2159\",[236,41.353]],[\"comment/2159\",[]],[\"name/2160\",[633,41.353]],[\"comment/2160\",[]],[\"name/2161\",[5,41.353]],[\"comment/2161\",[]],[\"name/2162\",[704,75.905]],[\"comment/2162\",[]],[\"name/2163\",[705,75.905]],[\"comment/2163\",[]],[\"name/2164\",[706,75.905]],[\"comment/2164\",[]],[\"name/2165\",[707,75.905]],[\"comment/2165\",[]],[\"name/2166\",[629,41.565]],[\"comment/2166\",[]],[\"name/2167\",[708,75.905]],[\"comment/2167\",[]],[\"name/2168\",[709,75.905]],[\"comment/2168\",[]],[\"name/2169\",[710,75.905]],[\"comment/2169\",[]],[\"name/2170\",[65,35.243]],[\"comment/2170\",[]],[\"name/2171\",[317,41.144]],[\"comment/2171\",[]],[\"name/2172\",[69,40.544]],[\"comment/2172\",[]],[\"name/2173\",[70,41.353]],[\"comment/2173\",[]],[\"name/2174\",[67,36.987]],[\"comment/2174\",[]],[\"name/2175\",[181,41.353]],[\"comment/2175\",[]],[\"name/2176\",[630,41.565]],[\"comment/2176\",[]],[\"name/2177\",[631,41.565]],[\"comment/2177\",[]],[\"name/2178\",[132,40.94]],[\"comment/2178\",[]],[\"name/2179\",[632,41.353]],[\"comment/2179\",[]],[\"name/2180\",[236,41.353]],[\"comment/2180\",[]],[\"name/2181\",[633,41.353]],[\"comment/2181\",[]],[\"name/2182\",[5,41.353]],[\"comment/2182\",[]],[\"name/2183\",[711,75.905]],[\"comment/2183\",[]],[\"name/2184\",[629,41.565]],[\"comment/2184\",[]],[\"name/2185\",[65,35.243]],[\"comment/2185\",[]],[\"name/2186\",[199,62.912]],[\"comment/2186\",[]],[\"name/2187\",[140,58.559]],[\"comment/2187\",[]],[\"name/2188\",[317,41.144]],[\"comment/2188\",[]],[\"name/2189\",[69,40.544]],[\"comment/2189\",[]],[\"name/2190\",[70,41.353]],[\"comment/2190\",[]],[\"name/2191\",[67,36.987]],[\"comment/2191\",[]],[\"name/2192\",[181,41.353]],[\"comment/2192\",[]],[\"name/2193\",[630,41.565]],[\"comment/2193\",[]],[\"name/2194\",[631,41.565]],[\"comment/2194\",[]],[\"name/2195\",[132,40.94]],[\"comment/2195\",[]],[\"name/2196\",[632,41.353]],[\"comment/2196\",[]],[\"name/2197\",[236,41.353]],[\"comment/2197\",[]],[\"name/2198\",[633,41.353]],[\"comment/2198\",[]],[\"name/2199\",[5,41.353]],[\"comment/2199\",[]],[\"name/2200\",[712,75.905]],[\"comment/2200\",[]],[\"name/2201\",[629,41.565]],[\"comment/2201\",[]],[\"name/2202\",[713,75.905]],[\"comment/2202\",[]],[\"name/2203\",[65,35.243]],[\"comment/2203\",[]],[\"name/2204\",[317,41.144]],[\"comment/2204\",[]],[\"name/2205\",[69,40.544]],[\"comment/2205\",[]],[\"name/2206\",[70,41.353]],[\"comment/2206\",[]],[\"name/2207\",[67,36.987]],[\"comment/2207\",[]],[\"name/2208\",[181,41.353]],[\"comment/2208\",[]],[\"name/2209\",[630,41.565]],[\"comment/2209\",[]],[\"name/2210\",[631,41.565]],[\"comment/2210\",[]],[\"name/2211\",[132,40.94]],[\"comment/2211\",[]],[\"name/2212\",[632,41.353]],[\"comment/2212\",[]],[\"name/2213\",[236,41.353]],[\"comment/2213\",[]],[\"name/2214\",[633,41.353]],[\"comment/2214\",[]],[\"name/2215\",[5,41.353]],[\"comment/2215\",[]],[\"name/2216\",[714,75.905]],[\"comment/2216\",[]],[\"name/2217\",[629,41.565]],[\"comment/2217\",[]],[\"name/2218\",[199,62.912]],[\"comment/2218\",[]],[\"name/2219\",[37,47.573]],[\"comment/2219\",[]],[\"name/2220\",[140,58.559]],[\"comment/2220\",[]],[\"name/2221\",[113,52.551]],[\"comment/2221\",[]],[\"name/2222\",[127,52.551]],[\"comment/2222\",[]],[\"name/2223\",[67,36.987]],[\"comment/2223\",[]],[\"name/2224\",[65,35.243]],[\"comment/2224\",[]],[\"name/2225\",[317,41.144]],[\"comment/2225\",[]],[\"name/2226\",[69,40.544]],[\"comment/2226\",[]],[\"name/2227\",[70,41.353]],[\"comment/2227\",[]],[\"name/2228\",[181,41.353]],[\"comment/2228\",[]],[\"name/2229\",[630,41.565]],[\"comment/2229\",[]],[\"name/2230\",[631,41.565]],[\"comment/2230\",[]],[\"name/2231\",[132,40.94]],[\"comment/2231\",[]],[\"name/2232\",[632,41.353]],[\"comment/2232\",[]],[\"name/2233\",[236,41.353]],[\"comment/2233\",[]],[\"name/2234\",[633,41.353]],[\"comment/2234\",[]],[\"name/2235\",[5,41.353]],[\"comment/2235\",[]],[\"name/2236\",[715,75.905]],[\"comment/2236\",[]],[\"name/2237\",[716,70.797]],[\"comment/2237\",[]],[\"name/2238\",[717,75.905]],[\"comment/2238\",[]],[\"name/2239\",[716,70.797]],[\"comment/2239\",[]],[\"name/2240\",[718,75.905]],[\"comment/2240\",[]],[\"name/2241\",[629,41.565]],[\"comment/2241\",[]],[\"name/2242\",[200,67.432]],[\"comment/2242\",[]],[\"name/2243\",[198,53.218]],[\"comment/2243\",[]],[\"name/2244\",[719,70.797]],[\"comment/2244\",[]],[\"name/2245\",[148,61.242]],[\"comment/2245\",[]],[\"name/2246\",[67,36.987]],[\"comment/2246\",[]],[\"name/2247\",[65,35.243]],[\"comment/2247\",[]],[\"name/2248\",[317,41.144]],[\"comment/2248\",[]],[\"name/2249\",[69,40.544]],[\"comment/2249\",[]],[\"name/2250\",[70,41.353]],[\"comment/2250\",[]],[\"name/2251\",[181,41.353]],[\"comment/2251\",[]],[\"name/2252\",[630,41.565]],[\"comment/2252\",[]],[\"name/2253\",[631,41.565]],[\"comment/2253\",[]],[\"name/2254\",[132,40.94]],[\"comment/2254\",[]],[\"name/2255\",[632,41.353]],[\"comment/2255\",[]],[\"name/2256\",[236,41.353]],[\"comment/2256\",[]],[\"name/2257\",[633,41.353]],[\"comment/2257\",[]],[\"name/2258\",[5,41.353]],[\"comment/2258\",[]],[\"name/2259\",[720,75.905]],[\"comment/2259\",[]],[\"name/2260\",[721,70.797]],[\"comment/2260\",[]],[\"name/2261\",[722,70.797]],[\"comment/2261\",[]],[\"name/2262\",[723,70.797]],[\"comment/2262\",[]],[\"name/2263\",[724,70.797]],[\"comment/2263\",[]],[\"name/2264\",[725,75.905]],[\"comment/2264\",[]],[\"name/2265\",[721,70.797]],[\"comment/2265\",[]],[\"name/2266\",[722,70.797]],[\"comment/2266\",[]],[\"name/2267\",[723,70.797]],[\"comment/2267\",[]],[\"name/2268\",[724,70.797]],[\"comment/2268\",[]],[\"name/2269\",[726,75.905]],[\"comment/2269\",[]],[\"name/2270\",[629,41.565]],[\"comment/2270\",[]],[\"name/2271\",[698,64.919]],[\"comment/2271\",[]],[\"name/2272\",[65,35.243]],[\"comment/2272\",[]],[\"name/2273\",[317,41.144]],[\"comment/2273\",[]],[\"name/2274\",[69,40.544]],[\"comment/2274\",[]],[\"name/2275\",[70,41.353]],[\"comment/2275\",[]],[\"name/2276\",[67,36.987]],[\"comment/2276\",[]],[\"name/2277\",[181,41.353]],[\"comment/2277\",[]],[\"name/2278\",[630,41.565]],[\"comment/2278\",[]],[\"name/2279\",[631,41.565]],[\"comment/2279\",[]],[\"name/2280\",[132,40.94]],[\"comment/2280\",[]],[\"name/2281\",[632,41.353]],[\"comment/2281\",[]],[\"name/2282\",[236,41.353]],[\"comment/2282\",[]],[\"name/2283\",[633,41.353]],[\"comment/2283\",[]],[\"name/2284\",[5,41.353]],[\"comment/2284\",[]],[\"name/2285\",[727,75.905]],[\"comment/2285\",[]],[\"name/2286\",[728,70.797]],[\"comment/2286\",[]],[\"name/2287\",[729,70.797]],[\"comment/2287\",[]],[\"name/2288\",[730,70.797]],[\"comment/2288\",[]],[\"name/2289\",[731,70.797]],[\"comment/2289\",[]],[\"name/2290\",[732,75.905]],[\"comment/2290\",[]],[\"name/2291\",[728,70.797]],[\"comment/2291\",[]],[\"name/2292\",[729,70.797]],[\"comment/2292\",[]],[\"name/2293\",[730,70.797]],[\"comment/2293\",[]],[\"name/2294\",[731,70.797]],[\"comment/2294\",[]],[\"name/2295\",[733,75.905]],[\"comment/2295\",[]],[\"name/2296\",[629,41.565]],[\"comment/2296\",[]],[\"name/2297\",[67,36.987]],[\"comment/2297\",[]],[\"name/2298\",[113,52.551]],[\"comment/2298\",[]],[\"name/2299\",[698,64.919]],[\"comment/2299\",[]],[\"name/2300\",[203,67.432]],[\"comment/2300\",[]],[\"name/2301\",[202,67.432]],[\"comment/2301\",[]],[\"name/2302\",[65,35.243]],[\"comment/2302\",[]],[\"name/2303\",[317,41.144]],[\"comment/2303\",[]],[\"name/2304\",[69,40.544]],[\"comment/2304\",[]],[\"name/2305\",[70,41.353]],[\"comment/2305\",[]],[\"name/2306\",[181,41.353]],[\"comment/2306\",[]],[\"name/2307\",[630,41.565]],[\"comment/2307\",[]],[\"name/2308\",[631,41.565]],[\"comment/2308\",[]],[\"name/2309\",[132,40.94]],[\"comment/2309\",[]],[\"name/2310\",[632,41.353]],[\"comment/2310\",[]],[\"name/2311\",[236,41.353]],[\"comment/2311\",[]],[\"name/2312\",[633,41.353]],[\"comment/2312\",[]],[\"name/2313\",[5,41.353]],[\"comment/2313\",[]],[\"name/2314\",[734,75.905]],[\"comment/2314\",[]],[\"name/2315\",[735,70.797]],[\"comment/2315\",[]],[\"name/2316\",[736,70.797]],[\"comment/2316\",[]],[\"name/2317\",[737,70.797]],[\"comment/2317\",[]],[\"name/2318\",[738,75.905]],[\"comment/2318\",[]],[\"name/2319\",[735,70.797]],[\"comment/2319\",[]],[\"name/2320\",[736,70.797]],[\"comment/2320\",[]],[\"name/2321\",[737,70.797]],[\"comment/2321\",[]],[\"name/2322\",[739,75.905]],[\"comment/2322\",[]],[\"name/2323\",[629,41.565]],[\"comment/2323\",[]],[\"name/2324\",[37,47.573]],[\"comment/2324\",[]],[\"name/2325\",[127,52.551]],[\"comment/2325\",[]],[\"name/2326\",[130,57.447]],[\"comment/2326\",[]],[\"name/2327\",[131,67.432]],[\"comment/2327\",[]],[\"name/2328\",[455,70.797]],[\"comment/2328\",[]],[\"name/2329\",[128,67.432]],[\"comment/2329\",[]],[\"name/2330\",[691,70.797]],[\"comment/2330\",[]],[\"name/2331\",[67,36.987]],[\"comment/2331\",[]],[\"name/2332\",[65,35.243]],[\"comment/2332\",[]],[\"name/2333\",[317,41.144]],[\"comment/2333\",[]],[\"name/2334\",[69,40.544]],[\"comment/2334\",[]],[\"name/2335\",[70,41.353]],[\"comment/2335\",[]],[\"name/2336\",[181,41.353]],[\"comment/2336\",[]],[\"name/2337\",[630,41.565]],[\"comment/2337\",[]],[\"name/2338\",[631,41.565]],[\"comment/2338\",[]],[\"name/2339\",[132,40.94]],[\"comment/2339\",[]],[\"name/2340\",[632,41.353]],[\"comment/2340\",[]],[\"name/2341\",[236,41.353]],[\"comment/2341\",[]],[\"name/2342\",[633,41.353]],[\"comment/2342\",[]],[\"name/2343\",[5,41.353]],[\"comment/2343\",[]],[\"name/2344\",[740,75.905]],[\"comment/2344\",[]],[\"name/2345\",[741,70.797]],[\"comment/2345\",[]],[\"name/2346\",[742,70.797]],[\"comment/2346\",[]],[\"name/2347\",[743,75.905]],[\"comment/2347\",[]],[\"name/2348\",[741,70.797]],[\"comment/2348\",[]],[\"name/2349\",[742,70.797]],[\"comment/2349\",[]],[\"name/2350\",[744,75.905]],[\"comment/2350\",[]],[\"name/2351\",[629,41.565]],[\"comment/2351\",[]],[\"name/2352\",[67,36.987]],[\"comment/2352\",[]],[\"name/2353\",[266,67.432]],[\"comment/2353\",[]],[\"name/2354\",[66,59.811]],[\"comment/2354\",[]],[\"name/2355\",[37,47.573]],[\"comment/2355\",[]],[\"name/2356\",[471,62.912]],[\"comment/2356\",[]],[\"name/2357\",[49,61.242]],[\"comment/2357\",[]],[\"name/2358\",[65,35.243]],[\"comment/2358\",[]],[\"name/2359\",[317,41.144]],[\"comment/2359\",[]],[\"name/2360\",[69,40.544]],[\"comment/2360\",[]],[\"name/2361\",[70,41.353]],[\"comment/2361\",[]],[\"name/2362\",[181,41.353]],[\"comment/2362\",[]],[\"name/2363\",[630,41.565]],[\"comment/2363\",[]],[\"name/2364\",[631,41.565]],[\"comment/2364\",[]],[\"name/2365\",[132,40.94]],[\"comment/2365\",[]],[\"name/2366\",[632,41.353]],[\"comment/2366\",[]],[\"name/2367\",[236,41.353]],[\"comment/2367\",[]],[\"name/2368\",[633,41.353]],[\"comment/2368\",[]],[\"name/2369\",[5,41.353]],[\"comment/2369\",[]],[\"name/2370\",[745,75.905]],[\"comment/2370\",[]],[\"name/2371\",[629,41.565]],[\"comment/2371\",[]],[\"name/2372\",[37,47.573]],[\"comment/2372\",[]],[\"name/2373\",[127,52.551]],[\"comment/2373\",[]],[\"name/2374\",[210,70.797]],[\"comment/2374\",[]],[\"name/2375\",[49,61.242]],[\"comment/2375\",[]],[\"name/2376\",[151,64.919]],[\"comment/2376\",[]],[\"name/2377\",[130,57.447]],[\"comment/2377\",[]],[\"name/2378\",[65,35.243]],[\"comment/2378\",[]],[\"name/2379\",[317,41.144]],[\"comment/2379\",[]],[\"name/2380\",[69,40.544]],[\"comment/2380\",[]],[\"name/2381\",[70,41.353]],[\"comment/2381\",[]],[\"name/2382\",[67,36.987]],[\"comment/2382\",[]],[\"name/2383\",[181,41.353]],[\"comment/2383\",[]],[\"name/2384\",[630,41.565]],[\"comment/2384\",[]],[\"name/2385\",[631,41.565]],[\"comment/2385\",[]],[\"name/2386\",[132,40.94]],[\"comment/2386\",[]],[\"name/2387\",[632,41.353]],[\"comment/2387\",[]],[\"name/2388\",[236,41.353]],[\"comment/2388\",[]],[\"name/2389\",[633,41.353]],[\"comment/2389\",[]],[\"name/2390\",[5,41.353]],[\"comment/2390\",[]],[\"name/2391\",[746,75.905]],[\"comment/2391\",[]],[\"name/2392\",[629,41.565]],[\"comment/2392\",[]],[\"name/2393\",[266,67.432]],[\"comment/2393\",[]],[\"name/2394\",[37,47.573]],[\"comment/2394\",[]],[\"name/2395\",[113,52.551]],[\"comment/2395\",[]],[\"name/2396\",[65,35.243]],[\"comment/2396\",[]],[\"name/2397\",[317,41.144]],[\"comment/2397\",[]],[\"name/2398\",[69,40.544]],[\"comment/2398\",[]],[\"name/2399\",[70,41.353]],[\"comment/2399\",[]],[\"name/2400\",[67,36.987]],[\"comment/2400\",[]],[\"name/2401\",[181,41.353]],[\"comment/2401\",[]],[\"name/2402\",[630,41.565]],[\"comment/2402\",[]],[\"name/2403\",[631,41.565]],[\"comment/2403\",[]],[\"name/2404\",[132,40.94]],[\"comment/2404\",[]],[\"name/2405\",[632,41.353]],[\"comment/2405\",[]],[\"name/2406\",[236,41.353]],[\"comment/2406\",[]],[\"name/2407\",[633,41.353]],[\"comment/2407\",[]],[\"name/2408\",[5,41.353]],[\"comment/2408\",[]],[\"name/2409\",[747,75.905]],[\"comment/2409\",[]],[\"name/2410\",[748,75.905]],[\"comment/2410\",[]],[\"name/2411\",[156,70.797]],[\"comment/2411\",[]],[\"name/2412\",[157,70.797]],[\"comment/2412\",[]],[\"name/2413\",[158,70.797]],[\"comment/2413\",[]],[\"name/2414\",[159,70.797]],[\"comment/2414\",[]],[\"name/2415\",[65,35.243]],[\"comment/2415\",[]],[\"name/2416\",[629,41.565]],[\"comment/2416\",[]],[\"name/2417\",[317,41.144]],[\"comment/2417\",[]],[\"name/2418\",[69,40.544]],[\"comment/2418\",[]],[\"name/2419\",[70,41.353]],[\"comment/2419\",[]],[\"name/2420\",[67,36.987]],[\"comment/2420\",[]],[\"name/2421\",[181,41.353]],[\"comment/2421\",[]],[\"name/2422\",[630,41.565]],[\"comment/2422\",[]],[\"name/2423\",[631,41.565]],[\"comment/2423\",[]],[\"name/2424\",[132,40.94]],[\"comment/2424\",[]],[\"name/2425\",[632,41.353]],[\"comment/2425\",[]],[\"name/2426\",[236,41.353]],[\"comment/2426\",[]],[\"name/2427\",[633,41.353]],[\"comment/2427\",[]],[\"name/2428\",[5,41.353]],[\"comment/2428\",[]],[\"name/2429\",[749,75.905]],[\"comment/2429\",[]],[\"name/2430\",[161,70.797]],[\"comment/2430\",[]],[\"name/2431\",[162,70.797]],[\"comment/2431\",[]],[\"name/2432\",[163,70.797]],[\"comment/2432\",[]],[\"name/2433\",[65,35.243]],[\"comment/2433\",[]],[\"name/2434\",[629,41.565]],[\"comment/2434\",[]],[\"name/2435\",[317,41.144]],[\"comment/2435\",[]],[\"name/2436\",[69,40.544]],[\"comment/2436\",[]],[\"name/2437\",[70,41.353]],[\"comment/2437\",[]],[\"name/2438\",[67,36.987]],[\"comment/2438\",[]],[\"name/2439\",[181,41.353]],[\"comment/2439\",[]],[\"name/2440\",[630,41.565]],[\"comment/2440\",[]],[\"name/2441\",[631,41.565]],[\"comment/2441\",[]],[\"name/2442\",[132,40.94]],[\"comment/2442\",[]],[\"name/2443\",[632,41.353]],[\"comment/2443\",[]],[\"name/2444\",[236,41.353]],[\"comment/2444\",[]],[\"name/2445\",[633,41.353]],[\"comment/2445\",[]],[\"name/2446\",[5,41.353]],[\"comment/2446\",[]],[\"name/2447\",[750,75.905]],[\"comment/2447\",[]],[\"name/2448\",[629,41.565]],[\"comment/2448\",[]],[\"name/2449\",[75,70.797]],[\"comment/2449\",[]],[\"name/2450\",[65,35.243]],[\"comment/2450\",[]],[\"name/2451\",[317,41.144]],[\"comment/2451\",[]],[\"name/2452\",[69,40.544]],[\"comment/2452\",[]],[\"name/2453\",[70,41.353]],[\"comment/2453\",[]],[\"name/2454\",[67,36.987]],[\"comment/2454\",[]],[\"name/2455\",[181,41.353]],[\"comment/2455\",[]],[\"name/2456\",[630,41.565]],[\"comment/2456\",[]],[\"name/2457\",[631,41.565]],[\"comment/2457\",[]],[\"name/2458\",[132,40.94]],[\"comment/2458\",[]],[\"name/2459\",[632,41.353]],[\"comment/2459\",[]],[\"name/2460\",[236,41.353]],[\"comment/2460\",[]],[\"name/2461\",[633,41.353]],[\"comment/2461\",[]],[\"name/2462\",[5,41.353]],[\"comment/2462\",[]],[\"name/2463\",[751,75.905]],[\"comment/2463\",[]],[\"name/2464\",[629,41.565]],[\"comment/2464\",[]],[\"name/2465\",[232,70.797]],[\"comment/2465\",[]],[\"name/2466\",[230,70.797]],[\"comment/2466\",[]],[\"name/2467\",[65,35.243]],[\"comment/2467\",[]],[\"name/2468\",[317,41.144]],[\"comment/2468\",[]],[\"name/2469\",[69,40.544]],[\"comment/2469\",[]],[\"name/2470\",[70,41.353]],[\"comment/2470\",[]],[\"name/2471\",[67,36.987]],[\"comment/2471\",[]],[\"name/2472\",[181,41.353]],[\"comment/2472\",[]],[\"name/2473\",[630,41.565]],[\"comment/2473\",[]],[\"name/2474\",[631,41.565]],[\"comment/2474\",[]],[\"name/2475\",[132,40.94]],[\"comment/2475\",[]],[\"name/2476\",[632,41.353]],[\"comment/2476\",[]],[\"name/2477\",[236,41.353]],[\"comment/2477\",[]],[\"name/2478\",[633,41.353]],[\"comment/2478\",[]],[\"name/2479\",[5,41.353]],[\"comment/2479\",[]],[\"name/2480\",[752,75.905]],[\"comment/2480\",[]],[\"name/2481\",[629,41.565]],[\"comment/2481\",[]],[\"name/2482\",[76,70.797]],[\"comment/2482\",[]],[\"name/2483\",[65,35.243]],[\"comment/2483\",[]],[\"name/2484\",[317,41.144]],[\"comment/2484\",[]],[\"name/2485\",[69,40.544]],[\"comment/2485\",[]],[\"name/2486\",[70,41.353]],[\"comment/2486\",[]],[\"name/2487\",[67,36.987]],[\"comment/2487\",[]],[\"name/2488\",[181,41.353]],[\"comment/2488\",[]],[\"name/2489\",[630,41.565]],[\"comment/2489\",[]],[\"name/2490\",[631,41.565]],[\"comment/2490\",[]],[\"name/2491\",[132,40.94]],[\"comment/2491\",[]],[\"name/2492\",[632,41.353]],[\"comment/2492\",[]],[\"name/2493\",[236,41.353]],[\"comment/2493\",[]],[\"name/2494\",[633,41.353]],[\"comment/2494\",[]],[\"name/2495\",[5,41.353]],[\"comment/2495\",[]],[\"name/2496\",[753,75.905]],[\"comment/2496\",[]],[\"name/2497\",[754,70.797]],[\"comment/2497\",[]],[\"name/2498\",[755,70.797]],[\"comment/2498\",[]],[\"name/2499\",[756,70.797]],[\"comment/2499\",[]],[\"name/2500\",[757,70.797]],[\"comment/2500\",[]],[\"name/2501\",[758,70.797]],[\"comment/2501\",[]],[\"name/2502\",[759,75.905]],[\"comment/2502\",[]],[\"name/2503\",[754,70.797]],[\"comment/2503\",[]],[\"name/2504\",[755,70.797]],[\"comment/2504\",[]],[\"name/2505\",[756,70.797]],[\"comment/2505\",[]],[\"name/2506\",[757,70.797]],[\"comment/2506\",[]],[\"name/2507\",[758,70.797]],[\"comment/2507\",[]],[\"name/2508\",[760,75.905]],[\"comment/2508\",[]],[\"name/2509\",[629,41.565]],[\"comment/2509\",[]],[\"name/2510\",[761,75.905]],[\"comment/2510\",[]],[\"name/2511\",[762,75.905]],[\"comment/2511\",[]],[\"name/2512\",[763,75.905]],[\"comment/2512\",[]],[\"name/2513\",[67,36.987]],[\"comment/2513\",[]],[\"name/2514\",[65,35.243]],[\"comment/2514\",[]],[\"name/2515\",[317,41.144]],[\"comment/2515\",[]],[\"name/2516\",[69,40.544]],[\"comment/2516\",[]],[\"name/2517\",[70,41.353]],[\"comment/2517\",[]],[\"name/2518\",[181,41.353]],[\"comment/2518\",[]],[\"name/2519\",[630,41.565]],[\"comment/2519\",[]],[\"name/2520\",[631,41.565]],[\"comment/2520\",[]],[\"name/2521\",[132,40.94]],[\"comment/2521\",[]],[\"name/2522\",[632,41.353]],[\"comment/2522\",[]],[\"name/2523\",[236,41.353]],[\"comment/2523\",[]],[\"name/2524\",[633,41.353]],[\"comment/2524\",[]],[\"name/2525\",[5,41.353]],[\"comment/2525\",[]],[\"name/2526\",[764,75.905]],[\"comment/2526\",[]],[\"name/2527\",[629,41.565]],[\"comment/2527\",[]],[\"name/2528\",[703,70.797]],[\"comment/2528\",[]],[\"name/2529\",[765,75.905]],[\"comment/2529\",[]],[\"name/2530\",[766,75.905]],[\"comment/2530\",[]],[\"name/2531\",[65,35.243]],[\"comment/2531\",[]],[\"name/2532\",[317,41.144]],[\"comment/2532\",[]],[\"name/2533\",[69,40.544]],[\"comment/2533\",[]],[\"name/2534\",[70,41.353]],[\"comment/2534\",[]],[\"name/2535\",[67,36.987]],[\"comment/2535\",[]],[\"name/2536\",[181,41.353]],[\"comment/2536\",[]],[\"name/2537\",[630,41.565]],[\"comment/2537\",[]],[\"name/2538\",[631,41.565]],[\"comment/2538\",[]],[\"name/2539\",[132,40.94]],[\"comment/2539\",[]],[\"name/2540\",[632,41.353]],[\"comment/2540\",[]],[\"name/2541\",[236,41.353]],[\"comment/2541\",[]],[\"name/2542\",[633,41.353]],[\"comment/2542\",[]],[\"name/2543\",[5,41.353]],[\"comment/2543\",[]],[\"name/2544\",[767,75.905]],[\"comment/2544\",[]],[\"name/2545\",[629,41.565]],[\"comment/2545\",[]],[\"name/2546\",[37,47.573]],[\"comment/2546\",[]],[\"name/2547\",[768,70.797]],[\"comment/2547\",[]],[\"name/2548\",[769,70.797]],[\"comment/2548\",[]],[\"name/2549\",[127,52.551]],[\"comment/2549\",[]],[\"name/2550\",[238,64.919]],[\"comment/2550\",[]],[\"name/2551\",[49,61.242]],[\"comment/2551\",[]],[\"name/2552\",[471,62.912]],[\"comment/2552\",[]],[\"name/2553\",[119,59.811]],[\"comment/2553\",[]],[\"name/2554\",[770,70.797]],[\"comment/2554\",[]],[\"name/2555\",[122,67.432]],[\"comment/2555\",[]],[\"name/2556\",[120,54.703]],[\"comment/2556\",[]],[\"name/2557\",[65,35.243]],[\"comment/2557\",[]],[\"name/2558\",[317,41.144]],[\"comment/2558\",[]],[\"name/2559\",[69,40.544]],[\"comment/2559\",[]],[\"name/2560\",[70,41.353]],[\"comment/2560\",[]],[\"name/2561\",[67,36.987]],[\"comment/2561\",[]],[\"name/2562\",[181,41.353]],[\"comment/2562\",[]],[\"name/2563\",[630,41.565]],[\"comment/2563\",[]],[\"name/2564\",[631,41.565]],[\"comment/2564\",[]],[\"name/2565\",[132,40.94]],[\"comment/2565\",[]],[\"name/2566\",[632,41.353]],[\"comment/2566\",[]],[\"name/2567\",[236,41.353]],[\"comment/2567\",[]],[\"name/2568\",[633,41.353]],[\"comment/2568\",[]],[\"name/2569\",[5,41.353]],[\"comment/2569\",[]],[\"name/2570\",[771,75.905]],[\"comment/2570\",[]],[\"name/2571\",[629,41.565]],[\"comment/2571\",[]],[\"name/2572\",[37,47.573]],[\"comment/2572\",[]],[\"name/2573\",[768,70.797]],[\"comment/2573\",[]],[\"name/2574\",[769,70.797]],[\"comment/2574\",[]],[\"name/2575\",[127,52.551]],[\"comment/2575\",[]],[\"name/2576\",[238,64.919]],[\"comment/2576\",[]],[\"name/2577\",[49,61.242]],[\"comment/2577\",[]],[\"name/2578\",[471,62.912]],[\"comment/2578\",[]],[\"name/2579\",[770,70.797]],[\"comment/2579\",[]],[\"name/2580\",[120,54.703]],[\"comment/2580\",[]],[\"name/2581\",[121,62.912]],[\"comment/2581\",[]],[\"name/2582\",[65,35.243]],[\"comment/2582\",[]],[\"name/2583\",[317,41.144]],[\"comment/2583\",[]],[\"name/2584\",[69,40.544]],[\"comment/2584\",[]],[\"name/2585\",[70,41.353]],[\"comment/2585\",[]],[\"name/2586\",[67,36.987]],[\"comment/2586\",[]],[\"name/2587\",[181,41.353]],[\"comment/2587\",[]],[\"name/2588\",[630,41.565]],[\"comment/2588\",[]],[\"name/2589\",[631,41.565]],[\"comment/2589\",[]],[\"name/2590\",[132,40.94]],[\"comment/2590\",[]],[\"name/2591\",[632,41.353]],[\"comment/2591\",[]],[\"name/2592\",[236,41.353]],[\"comment/2592\",[]],[\"name/2593\",[633,41.353]],[\"comment/2593\",[]],[\"name/2594\",[5,41.353]],[\"comment/2594\",[]],[\"name/2595\",[772,75.905]],[\"comment/2595\",[]],[\"name/2596\",[629,41.565]],[\"comment/2596\",[]],[\"name/2597\",[120,54.703]],[\"comment/2597\",[]],[\"name/2598\",[121,62.912]],[\"comment/2598\",[]],[\"name/2599\",[127,52.551]],[\"comment/2599\",[]],[\"name/2600\",[130,57.447]],[\"comment/2600\",[]],[\"name/2601\",[37,47.573]],[\"comment/2601\",[]],[\"name/2602\",[65,35.243]],[\"comment/2602\",[]],[\"name/2603\",[317,41.144]],[\"comment/2603\",[]],[\"name/2604\",[69,40.544]],[\"comment/2604\",[]],[\"name/2605\",[70,41.353]],[\"comment/2605\",[]],[\"name/2606\",[67,36.987]],[\"comment/2606\",[]],[\"name/2607\",[181,41.353]],[\"comment/2607\",[]],[\"name/2608\",[630,41.565]],[\"comment/2608\",[]],[\"name/2609\",[631,41.565]],[\"comment/2609\",[]],[\"name/2610\",[132,40.94]],[\"comment/2610\",[]],[\"name/2611\",[632,41.353]],[\"comment/2611\",[]],[\"name/2612\",[236,41.353]],[\"comment/2612\",[]],[\"name/2613\",[633,41.353]],[\"comment/2613\",[]],[\"name/2614\",[5,41.353]],[\"comment/2614\",[]],[\"name/2615\",[773,75.905]],[\"comment/2615\",[]],[\"name/2616\",[629,41.565]],[\"comment/2616\",[]],[\"name/2617\",[120,54.703]],[\"comment/2617\",[]],[\"name/2618\",[121,62.912]],[\"comment/2618\",[]],[\"name/2619\",[774,75.905]],[\"comment/2619\",[]],[\"name/2620\",[37,47.573]],[\"comment/2620\",[]],[\"name/2621\",[65,35.243]],[\"comment/2621\",[]],[\"name/2622\",[317,41.144]],[\"comment/2622\",[]],[\"name/2623\",[69,40.544]],[\"comment/2623\",[]],[\"name/2624\",[70,41.353]],[\"comment/2624\",[]],[\"name/2625\",[67,36.987]],[\"comment/2625\",[]],[\"name/2626\",[181,41.353]],[\"comment/2626\",[]],[\"name/2627\",[630,41.565]],[\"comment/2627\",[]],[\"name/2628\",[631,41.565]],[\"comment/2628\",[]],[\"name/2629\",[132,40.94]],[\"comment/2629\",[]],[\"name/2630\",[632,41.353]],[\"comment/2630\",[]],[\"name/2631\",[236,41.353]],[\"comment/2631\",[]],[\"name/2632\",[633,41.353]],[\"comment/2632\",[]],[\"name/2633\",[5,41.353]],[\"comment/2633\",[]],[\"name/2634\",[775,75.905]],[\"comment/2634\",[]],[\"name/2635\",[629,41.565]],[\"comment/2635\",[]],[\"name/2636\",[120,54.703]],[\"comment/2636\",[]],[\"name/2637\",[119,59.811]],[\"comment/2637\",[]],[\"name/2638\",[124,67.432]],[\"comment/2638\",[]],[\"name/2639\",[65,35.243]],[\"comment/2639\",[]],[\"name/2640\",[317,41.144]],[\"comment/2640\",[]],[\"name/2641\",[69,40.544]],[\"comment/2641\",[]],[\"name/2642\",[70,41.353]],[\"comment/2642\",[]],[\"name/2643\",[67,36.987]],[\"comment/2643\",[]],[\"name/2644\",[181,41.353]],[\"comment/2644\",[]],[\"name/2645\",[630,41.565]],[\"comment/2645\",[]],[\"name/2646\",[631,41.565]],[\"comment/2646\",[]],[\"name/2647\",[132,40.94]],[\"comment/2647\",[]],[\"name/2648\",[632,41.353]],[\"comment/2648\",[]],[\"name/2649\",[236,41.353]],[\"comment/2649\",[]],[\"name/2650\",[633,41.353]],[\"comment/2650\",[]],[\"name/2651\",[5,41.353]],[\"comment/2651\",[]],[\"name/2652\",[776,75.905]],[\"comment/2652\",[]],[\"name/2653\",[629,41.565]],[\"comment/2653\",[]],[\"name/2654\",[120,54.703]],[\"comment/2654\",[]],[\"name/2655\",[119,59.811]],[\"comment/2655\",[]],[\"name/2656\",[238,64.919]],[\"comment/2656\",[]],[\"name/2657\",[65,35.243]],[\"comment/2657\",[]],[\"name/2658\",[317,41.144]],[\"comment/2658\",[]],[\"name/2659\",[69,40.544]],[\"comment/2659\",[]],[\"name/2660\",[70,41.353]],[\"comment/2660\",[]],[\"name/2661\",[67,36.987]],[\"comment/2661\",[]],[\"name/2662\",[181,41.353]],[\"comment/2662\",[]],[\"name/2663\",[630,41.565]],[\"comment/2663\",[]],[\"name/2664\",[631,41.565]],[\"comment/2664\",[]],[\"name/2665\",[132,40.94]],[\"comment/2665\",[]],[\"name/2666\",[632,41.353]],[\"comment/2666\",[]],[\"name/2667\",[236,41.353]],[\"comment/2667\",[]],[\"name/2668\",[633,41.353]],[\"comment/2668\",[]],[\"name/2669\",[5,41.353]],[\"comment/2669\",[]],[\"name/2670\",[777,75.905]],[\"comment/2670\",[]],[\"name/2671\",[629,41.565]],[\"comment/2671\",[]],[\"name/2672\",[120,54.703]],[\"comment/2672\",[]],[\"name/2673\",[119,59.811]],[\"comment/2673\",[]],[\"name/2674\",[127,52.551]],[\"comment/2674\",[]],[\"name/2675\",[37,47.573]],[\"comment/2675\",[]],[\"name/2676\",[65,35.243]],[\"comment/2676\",[]],[\"name/2677\",[317,41.144]],[\"comment/2677\",[]],[\"name/2678\",[69,40.544]],[\"comment/2678\",[]],[\"name/2679\",[70,41.353]],[\"comment/2679\",[]],[\"name/2680\",[67,36.987]],[\"comment/2680\",[]],[\"name/2681\",[181,41.353]],[\"comment/2681\",[]],[\"name/2682\",[630,41.565]],[\"comment/2682\",[]],[\"name/2683\",[631,41.565]],[\"comment/2683\",[]],[\"name/2684\",[132,40.94]],[\"comment/2684\",[]],[\"name/2685\",[632,41.353]],[\"comment/2685\",[]],[\"name/2686\",[236,41.353]],[\"comment/2686\",[]],[\"name/2687\",[633,41.353]],[\"comment/2687\",[]],[\"name/2688\",[5,41.353]],[\"comment/2688\",[]],[\"name/2689\",[778,75.905]],[\"comment/2689\",[]],[\"name/2690\",[629,41.565]],[\"comment/2690\",[]],[\"name/2691\",[120,54.703]],[\"comment/2691\",[]],[\"name/2692\",[119,59.811]],[\"comment/2692\",[]],[\"name/2693\",[124,67.432]],[\"comment/2693\",[]],[\"name/2694\",[67,36.987]],[\"comment/2694\",[]],[\"name/2695\",[65,35.243]],[\"comment/2695\",[]],[\"name/2696\",[317,41.144]],[\"comment/2696\",[]],[\"name/2697\",[69,40.544]],[\"comment/2697\",[]],[\"name/2698\",[70,41.353]],[\"comment/2698\",[]],[\"name/2699\",[181,41.353]],[\"comment/2699\",[]],[\"name/2700\",[630,41.565]],[\"comment/2700\",[]],[\"name/2701\",[631,41.565]],[\"comment/2701\",[]],[\"name/2702\",[132,40.94]],[\"comment/2702\",[]],[\"name/2703\",[632,41.353]],[\"comment/2703\",[]],[\"name/2704\",[236,41.353]],[\"comment/2704\",[]],[\"name/2705\",[633,41.353]],[\"comment/2705\",[]],[\"name/2706\",[5,41.353]],[\"comment/2706\",[]],[\"name/2707\",[779,75.905]],[\"comment/2707\",[]],[\"name/2708\",[780,70.797]],[\"comment/2708\",[]],[\"name/2709\",[781,75.905]],[\"comment/2709\",[]],[\"name/2710\",[780,70.797]],[\"comment/2710\",[]],[\"name/2711\",[782,75.905]],[\"comment/2711\",[]],[\"name/2712\",[783,75.905]],[\"comment/2712\",[]],[\"name/2713\",[784,75.905]],[\"comment/2713\",[]],[\"name/2714\",[785,70.797]],[\"comment/2714\",[]],[\"name/2715\",[785,70.797]],[\"comment/2715\",[]],[\"name/2716\",[29,35.13]],[\"comment/2716\",[]],[\"name/2717\",[64,47.573]],[\"comment/2717\",[]],[\"name/2718\",[786,64.919]],[\"comment/2718\",[]],[\"name/2719\",[787,75.905]],[\"comment/2719\",[]],[\"name/2720\",[29,35.13]],[\"comment/2720\",[]],[\"name/2721\",[788,70.797]],[\"comment/2721\",[]],[\"name/2722\",[788,70.797]],[\"comment/2722\",[]],[\"name/2723\",[29,35.13]],[\"comment/2723\",[]],[\"name/2724\",[64,47.573]],[\"comment/2724\",[]],[\"name/2725\",[786,64.919]],[\"comment/2725\",[]],[\"name/2726\",[789,70.797]],[\"comment/2726\",[]],[\"name/2727\",[29,35.13]],[\"comment/2727\",[]],[\"name/2728\",[790,75.905]],[\"comment/2728\",[]],[\"name/2729\",[29,35.13]],[\"comment/2729\",[]],[\"name/2730\",[85,48.39]],[\"comment/2730\",[]],[\"name/2731\",[86,48.39]],[\"comment/2731\",[]],[\"name/2732\",[791,70.797]],[\"comment/2732\",[]],[\"name/2733\",[791,70.797]],[\"comment/2733\",[]],[\"name/2734\",[29,35.13]],[\"comment/2734\",[]],[\"name/2735\",[64,47.573]],[\"comment/2735\",[]],[\"name/2736\",[786,64.919]],[\"comment/2736\",[]],[\"name/2737\",[789,70.797]],[\"comment/2737\",[]],[\"name/2738\",[29,35.13]],[\"comment/2738\",[]],[\"name/2739\",[410,70.797]],[\"comment/2739\",[]],[\"name/2740\",[792,75.905]],[\"comment/2740\",[]],[\"name/2741\",[793,75.905]],[\"comment/2741\",[]],[\"name/2742\",[794,75.905]],[\"comment/2742\",[]],[\"name/2743\",[795,75.905]],[\"comment/2743\",[]],[\"name/2744\",[796,75.905]],[\"comment/2744\",[]],[\"name/2745\",[797,75.905]],[\"comment/2745\",[]],[\"name/2746\",[798,75.905]],[\"comment/2746\",[]],[\"name/2747\",[786,64.919]],[\"comment/2747\",[]],[\"name/2748\",[799,75.905]],[\"comment/2748\",[]],[\"name/2749\",[326,53.933]],[\"comment/2749\",[]],[\"name/2750\",[198,53.218]],[\"comment/2750\",[]],[\"name/2751\",[800,75.905]],[\"comment/2751\",[]],[\"name/2752\",[326,53.933]],[\"comment/2752\",[]],[\"name/2753\",[198,53.218]],[\"comment/2753\",[]],[\"name/2754\",[326,53.933]],[\"comment/2754\",[]],[\"name/2755\",[801,75.905]],[\"comment/2755\",[]],[\"name/2756\",[364,67.432]],[\"comment/2756\",[]],[\"name/2757\",[326,53.933]],[\"comment/2757\",[]],[\"name/2758\",[198,53.218]],[\"comment/2758\",[]],[\"name/2759\",[37,47.573]],[\"comment/2759\",[]],[\"name/2760\",[66,59.811]],[\"comment/2760\",[]],[\"name/2761\",[326,53.933]],[\"comment/2761\",[]],[\"name/2762\",[198,53.218]],[\"comment/2762\",[]],[\"name/2763\",[364,67.432]],[\"comment/2763\",[]],[\"name/2764\",[802,70.797]],[\"comment/2764\",[]],[\"name/2765\",[802,70.797]],[\"comment/2765\",[]],[\"name/2766\",[29,35.13]],[\"comment/2766\",[]],[\"name/2767\",[65,35.243]],[\"comment/2767\",[]],[\"name/2768\",[633,41.353]],[\"comment/2768\",[]],[\"name/2769\",[632,41.353]],[\"comment/2769\",[]],[\"name/2770\",[803,70.797]],[\"comment/2770\",[]],[\"name/2771\",[803,70.797]],[\"comment/2771\",[]],[\"name/2772\",[29,35.13]],[\"comment/2772\",[]],[\"name/2773\",[804,75.905]],[\"comment/2773\",[]],[\"name/2774\",[805,75.905]],[\"comment/2774\",[]],[\"name/2775\",[806,75.905]],[\"comment/2775\",[]],[\"name/2776\",[807,75.905]],[\"comment/2776\",[]],[\"name/2777\",[808,75.905]],[\"comment/2777\",[]],[\"name/2778\",[65,35.243]],[\"comment/2778\",[]],[\"name/2779\",[326,53.933]],[\"comment/2779\",[]],[\"name/2780\",[198,53.218]],[\"comment/2780\",[]],[\"name/2781\",[809,75.905]],[\"comment/2781\",[]],[\"name/2782\",[810,70.797]],[\"comment/2782\",[]],[\"name/2783\",[810,70.797]],[\"comment/2783\",[]],[\"name/2784\",[29,35.13]],[\"comment/2784\",[]],[\"name/2785\",[65,35.243]],[\"comment/2785\",[]],[\"name/2786\",[811,75.905]],[\"comment/2786\",[]],[\"name/2787\",[79,70.797]],[\"comment/2787\",[]],[\"name/2788\",[812,75.905]],[\"comment/2788\",[]],[\"name/2789\",[505,70.797]],[\"comment/2789\",[]],[\"name/2790\",[56,59.811]],[\"comment/2790\",[]],[\"name/2791\",[173,41.565]],[\"comment/2791\",[]],[\"name/2792\",[813,75.905]],[\"comment/2792\",[]],[\"name/2793\",[814,75.905]],[\"comment/2793\",[]],[\"name/2794\",[37,47.573]],[\"comment/2794\",[]],[\"name/2795\",[67,36.987]],[\"comment/2795\",[]],[\"name/2796\",[815,75.905]],[\"comment/2796\",[]],[\"name/2797\",[140,58.559]],[\"comment/2797\",[]],[\"name/2798\",[127,52.551]],[\"comment/2798\",[]],[\"name/2799\",[113,52.551]],[\"comment/2799\",[]],[\"name/2800\",[197,67.432]],[\"comment/2800\",[]],[\"name/2801\",[606,58.559]],[\"comment/2801\",[]],[\"name/2802\",[173,41.565]],[\"comment/2802\",[]],[\"name/2803\",[140,58.559]],[\"comment/2803\",[]],[\"name/2804\",[816,75.905]],[\"comment/2804\",[]],[\"name/2805\",[67,36.987]],[\"comment/2805\",[]],[\"name/2806\",[817,75.905]],[\"comment/2806\",[]],[\"name/2807\",[198,53.218]],[\"comment/2807\",[]],[\"name/2808\",[818,75.905]],[\"comment/2808\",[]],[\"name/2809\",[337,70.797]],[\"comment/2809\",[]],[\"name/2810\",[148,61.242]],[\"comment/2810\",[]],[\"name/2811\",[819,70.797]],[\"comment/2811\",[]],[\"name/2812\",[819,70.797]],[\"comment/2812\",[]],[\"name/2813\",[29,35.13]],[\"comment/2813\",[]],[\"name/2814\",[65,35.243]],[\"comment/2814\",[]],[\"name/2815\",[120,54.703]],[\"comment/2815\",[]],[\"name/2816\",[820,75.905]],[\"comment/2816\",[]],[\"name/2817\",[821,75.905]],[\"comment/2817\",[]],[\"name/2818\",[822,75.905]],[\"comment/2818\",[]],[\"name/2819\",[823,75.905]],[\"comment/2819\",[]],[\"name/2820\",[824,75.905]],[\"comment/2820\",[]],[\"name/2821\",[825,75.905]],[\"comment/2821\",[]],[\"name/2822\",[826,75.905]],[\"comment/2822\",[]],[\"name/2823\",[827,75.905]],[\"comment/2823\",[]],[\"name/2824\",[828,75.905]],[\"comment/2824\",[]],[\"name/2825\",[829,75.905]],[\"comment/2825\",[]],[\"name/2826\",[830,75.905]],[\"comment/2826\",[]],[\"name/2827\",[831,75.905]],[\"comment/2827\",[]],[\"name/2828\",[832,75.905]],[\"comment/2828\",[]],[\"name/2829\",[833,75.905]],[\"comment/2829\",[]],[\"name/2830\",[834,75.905]],[\"comment/2830\",[]],[\"name/2831\",[835,75.905]],[\"comment/2831\",[]],[\"name/2832\",[836,75.905]],[\"comment/2832\",[]],[\"name/2833\",[837,75.905]],[\"comment/2833\",[]],[\"name/2834\",[838,75.905]],[\"comment/2834\",[]],[\"name/2835\",[839,75.905]],[\"comment/2835\",[]],[\"name/2836\",[182,70.797]],[\"comment/2836\",[]],[\"name/2837\",[29,35.13]],[\"comment/2837\",[]],[\"name/2838\",[840,75.905]],[\"comment/2838\",[]],[\"name/2839\",[29,35.13]],[\"comment/2839\",[]],[\"name/2840\",[841,75.905]],[\"comment/2840\",[]],[\"name/2841\",[29,35.13]],[\"comment/2841\",[]],[\"name/2842\",[842,75.905]],[\"comment/2842\",[]],[\"name/2843\",[29,35.13]],[\"comment/2843\",[]],[\"name/2844\",[843,75.905]],[\"comment/2844\",[]],[\"name/2845\",[29,35.13]],[\"comment/2845\",[]],[\"name/2846\",[844,75.905]],[\"comment/2846\",[]],[\"name/2847\",[29,35.13]],[\"comment/2847\",[]],[\"name/2848\",[845,75.905]],[\"comment/2848\",[]],[\"name/2849\",[29,35.13]],[\"comment/2849\",[]],[\"name/2850\",[846,75.905]],[\"comment/2850\",[]],[\"name/2851\",[29,35.13]],[\"comment/2851\",[]],[\"name/2852\",[847,75.905]],[\"comment/2852\",[]],[\"name/2853\",[29,35.13]],[\"comment/2853\",[]],[\"name/2854\",[848,75.905]],[\"comment/2854\",[]],[\"name/2855\",[29,35.13]],[\"comment/2855\",[]],[\"name/2856\",[849,75.905]],[\"comment/2856\",[]],[\"name/2857\",[29,35.13]],[\"comment/2857\",[]],[\"name/2858\",[850,75.905]],[\"comment/2858\",[]],[\"name/2859\",[29,35.13]],[\"comment/2859\",[]],[\"name/2860\",[851,75.905]],[\"comment/2860\",[]],[\"name/2861\",[29,35.13]],[\"comment/2861\",[]],[\"name/2862\",[852,75.905]],[\"comment/2862\",[]],[\"name/2863\",[853,75.905]],[\"comment/2863\",[]],[\"name/2864\",[854,75.905]],[\"comment/2864\",[]],[\"name/2865\",[855,75.905]],[\"comment/2865\",[]],[\"name/2866\",[856,75.905]],[\"comment/2866\",[]],[\"name/2867\",[857,75.905]],[\"comment/2867\",[]],[\"name/2868\",[858,75.905]],[\"comment/2868\",[]],[\"name/2869\",[859,75.905]],[\"comment/2869\",[]],[\"name/2870\",[860,75.905]],[\"comment/2870\",[]],[\"name/2871\",[861,75.905]],[\"comment/2871\",[]],[\"name/2872\",[862,75.905]],[\"comment/2872\",[]],[\"name/2873\",[863,75.905]],[\"comment/2873\",[]],[\"name/2874\",[29,35.13]],[\"comment/2874\",[]],[\"name/2875\",[199,62.912]],[\"comment/2875\",[]],[\"name/2876\",[67,36.987]],[\"comment/2876\",[]],[\"name/2877\",[719,70.797]],[\"comment/2877\",[]],[\"name/2878\",[198,53.218]],[\"comment/2878\",[]],[\"name/2879\",[864,75.905]],[\"comment/2879\",[]],[\"name/2880\",[69,40.544]],[\"comment/2880\",[]],[\"name/2881\",[865,75.905]],[\"comment/2881\",[]],[\"name/2882\",[866,75.905]],[\"comment/2882\",[]],[\"name/2883\",[1,53.218]],[\"comment/2883\",[]],[\"name/2884\",[867,54.703]],[\"comment/2884\",[]],[\"name/2885\",[264,53.933]],[\"comment/2885\",[]],[\"name/2886\",[146,51.926]],[\"comment/2886\",[]],[\"name/2887\",[868,54.703]],[\"comment/2887\",[]],[\"name/2888\",[869,54.703]],[\"comment/2888\",[]],[\"name/2889\",[870,75.905]],[\"comment/2889\",[]],[\"name/2890\",[1,53.218]],[\"comment/2890\",[]],[\"name/2891\",[867,54.703]],[\"comment/2891\",[]],[\"name/2892\",[264,53.933]],[\"comment/2892\",[]],[\"name/2893\",[146,51.926]],[\"comment/2893\",[]],[\"name/2894\",[868,54.703]],[\"comment/2894\",[]],[\"name/2895\",[869,54.703]],[\"comment/2895\",[]],[\"name/2896\",[871,75.905]],[\"comment/2896\",[]],[\"name/2897\",[1,53.218]],[\"comment/2897\",[]],[\"name/2898\",[867,54.703]],[\"comment/2898\",[]],[\"name/2899\",[264,53.933]],[\"comment/2899\",[]],[\"name/2900\",[146,51.926]],[\"comment/2900\",[]],[\"name/2901\",[868,54.703]],[\"comment/2901\",[]],[\"name/2902\",[869,54.703]],[\"comment/2902\",[]],[\"name/2903\",[872,75.905]],[\"comment/2903\",[]],[\"name/2904\",[1,53.218]],[\"comment/2904\",[]],[\"name/2905\",[867,54.703]],[\"comment/2905\",[]],[\"name/2906\",[264,53.933]],[\"comment/2906\",[]],[\"name/2907\",[146,51.926]],[\"comment/2907\",[]],[\"name/2908\",[868,54.703]],[\"comment/2908\",[]],[\"name/2909\",[869,54.703]],[\"comment/2909\",[]],[\"name/2910\",[873,75.905]],[\"comment/2910\",[]],[\"name/2911\",[1,53.218]],[\"comment/2911\",[]],[\"name/2912\",[867,54.703]],[\"comment/2912\",[]],[\"name/2913\",[264,53.933]],[\"comment/2913\",[]],[\"name/2914\",[146,51.926]],[\"comment/2914\",[]],[\"name/2915\",[868,54.703]],[\"comment/2915\",[]],[\"name/2916\",[869,54.703]],[\"comment/2916\",[]],[\"name/2917\",[874,75.905]],[\"comment/2917\",[]],[\"name/2918\",[1,53.218]],[\"comment/2918\",[]],[\"name/2919\",[867,54.703]],[\"comment/2919\",[]],[\"name/2920\",[264,53.933]],[\"comment/2920\",[]],[\"name/2921\",[146,51.926]],[\"comment/2921\",[]],[\"name/2922\",[868,54.703]],[\"comment/2922\",[]],[\"name/2923\",[869,54.703]],[\"comment/2923\",[]],[\"name/2924\",[875,75.905]],[\"comment/2924\",[]],[\"name/2925\",[1,53.218]],[\"comment/2925\",[]],[\"name/2926\",[867,54.703]],[\"comment/2926\",[]],[\"name/2927\",[264,53.933]],[\"comment/2927\",[]],[\"name/2928\",[146,51.926]],[\"comment/2928\",[]],[\"name/2929\",[868,54.703]],[\"comment/2929\",[]],[\"name/2930\",[869,54.703]],[\"comment/2930\",[]],[\"name/2931\",[876,75.905]],[\"comment/2931\",[]],[\"name/2932\",[1,53.218]],[\"comment/2932\",[]],[\"name/2933\",[867,54.703]],[\"comment/2933\",[]],[\"name/2934\",[264,53.933]],[\"comment/2934\",[]],[\"name/2935\",[146,51.926]],[\"comment/2935\",[]],[\"name/2936\",[868,54.703]],[\"comment/2936\",[]],[\"name/2937\",[869,54.703]],[\"comment/2937\",[]],[\"name/2938\",[877,75.905]],[\"comment/2938\",[]],[\"name/2939\",[1,53.218]],[\"comment/2939\",[]],[\"name/2940\",[867,54.703]],[\"comment/2940\",[]],[\"name/2941\",[264,53.933]],[\"comment/2941\",[]],[\"name/2942\",[146,51.926]],[\"comment/2942\",[]],[\"name/2943\",[868,54.703]],[\"comment/2943\",[]],[\"name/2944\",[869,54.703]],[\"comment/2944\",[]],[\"name/2945\",[878,75.905]],[\"comment/2945\",[]],[\"name/2946\",[1,53.218]],[\"comment/2946\",[]],[\"name/2947\",[867,54.703]],[\"comment/2947\",[]],[\"name/2948\",[264,53.933]],[\"comment/2948\",[]],[\"name/2949\",[146,51.926]],[\"comment/2949\",[]],[\"name/2950\",[868,54.703]],[\"comment/2950\",[]],[\"name/2951\",[869,54.703]],[\"comment/2951\",[]],[\"name/2952\",[879,75.905]],[\"comment/2952\",[]],[\"name/2953\",[1,53.218]],[\"comment/2953\",[]],[\"name/2954\",[867,54.703]],[\"comment/2954\",[]],[\"name/2955\",[264,53.933]],[\"comment/2955\",[]],[\"name/2956\",[146,51.926]],[\"comment/2956\",[]],[\"name/2957\",[868,54.703]],[\"comment/2957\",[]],[\"name/2958\",[869,54.703]],[\"comment/2958\",[]],[\"name/2959\",[880,75.905]],[\"comment/2959\",[]],[\"name/2960\",[1,53.218]],[\"comment/2960\",[]],[\"name/2961\",[867,54.703]],[\"comment/2961\",[]],[\"name/2962\",[264,53.933]],[\"comment/2962\",[]],[\"name/2963\",[146,51.926]],[\"comment/2963\",[]],[\"name/2964\",[868,54.703]],[\"comment/2964\",[]],[\"name/2965\",[869,54.703]],[\"comment/2965\",[]],[\"name/2966\",[881,75.905]],[\"comment/2966\",[]],[\"name/2967\",[882,75.905]],[\"comment/2967\",[]]],\"invertedIndex\":[[\"__type\",{\"_index\":29,\"name\":{\"31\":{},\"47\":{},\"59\":{},\"139\":{},\"276\":{},\"310\":{},\"422\":{},\"451\":{},\"477\":{},\"502\":{},\"542\":{},\"581\":{},\"627\":{},\"656\":{},\"691\":{},\"720\":{},\"755\":{},\"758\":{},\"760\":{},\"762\":{},\"785\":{},\"853\":{},\"869\":{},\"893\":{},\"910\":{},\"912\":{},\"916\":{},\"930\":{},\"945\":{},\"966\":{},\"996\":{},\"1018\":{},\"1082\":{},\"1105\":{},\"1147\":{},\"1179\":{},\"1209\":{},\"1355\":{},\"1359\":{},\"1367\":{},\"1387\":{},\"1389\":{},\"1423\":{},\"1425\":{},\"1429\":{},\"1441\":{},\"1445\":{},\"1469\":{},\"1479\":{},\"1496\":{},\"1498\":{},\"1503\":{},\"1513\":{},\"1517\":{},\"1537\":{},\"1571\":{},\"1587\":{},\"1614\":{},\"1633\":{},\"1674\":{},\"1704\":{},\"1706\":{},\"1713\":{},\"2716\":{},\"2720\":{},\"2723\":{},\"2727\":{},\"2729\":{},\"2734\":{},\"2738\":{},\"2766\":{},\"2772\":{},\"2784\":{},\"2813\":{},\"2837\":{},\"2839\":{},\"2841\":{},\"2843\":{},\"2845\":{},\"2847\":{},\"2849\":{},\"2851\":{},\"2853\":{},\"2855\":{},\"2857\":{},\"2859\":{},\"2861\":{},\"2874\":{}},\"comment\":{}}],[\"accepted\",{\"_index\":419,\"name\":{\"972\":{}},\"comment\":{}}],[\"account\",{\"_index\":65,\"name\":{\"70\":{},\"135\":{},\"140\":{},\"154\":{},\"168\":{},\"184\":{},\"208\":{},\"219\":{},\"319\":{},\"335\":{},\"389\":{},\"398\":{},\"411\":{},\"423\":{},\"453\":{},\"467\":{},\"478\":{},\"494\":{},\"532\":{},\"571\":{},\"582\":{},\"596\":{},\"618\":{},\"628\":{},\"645\":{},\"657\":{},\"681\":{},\"692\":{},\"707\":{},\"721\":{},\"746\":{},\"756\":{},\"775\":{},\"820\":{},\"1066\":{},\"1707\":{},\"1714\":{},\"1734\":{},\"1796\":{},\"1812\":{},\"1832\":{},\"1849\":{},\"1882\":{},\"1900\":{},\"1918\":{},\"1955\":{},\"1971\":{},\"1989\":{},\"2009\":{},\"2024\":{},\"2040\":{},\"2058\":{},\"2075\":{},\"2092\":{},\"2113\":{},\"2132\":{},\"2149\":{},\"2170\":{},\"2185\":{},\"2203\":{},\"2224\":{},\"2247\":{},\"2272\":{},\"2302\":{},\"2332\":{},\"2358\":{},\"2378\":{},\"2396\":{},\"2415\":{},\"2433\":{},\"2450\":{},\"2467\":{},\"2483\":{},\"2514\":{},\"2531\":{},\"2557\":{},\"2582\":{},\"2602\":{},\"2621\":{},\"2639\":{},\"2657\":{},\"2676\":{},\"2695\":{},\"2767\":{},\"2778\":{},\"2785\":{},\"2814\":{}},\"comment\":{}}],[\"account_data\",{\"_index\":305,\"name\":{\"543\":{}},\"comment\":{}}],[\"account_flags\",{\"_index\":306,\"name\":{\"544\":{}},\"comment\":{}}],[\"account_hash\",{\"_index\":165,\"name\":{\"250\":{},\"835\":{}},\"comment\":{}}],[\"account_nfts\",{\"_index\":340,\"name\":{\"629\":{}},\"comment\":{}}],[\"account_objects\",{\"_index\":346,\"name\":{\"658\":{}},\"comment\":{}}],[\"account_root\",{\"_index\":400,\"name\":{\"921\":{}},\"comment\":{}}],[\"account_sequence_available\",{\"_index\":420,\"name\":{\"973\":{}},\"comment\":{}}],[\"account_sequence_next\",{\"_index\":421,\"name\":{\"974\":{}},\"comment\":{}}],[\"accountchannelsrequest\",{\"_index\":275,\"name\":{\"465\":{}},\"comment\":{}}],[\"accountchannelsresponse\",{\"_index\":278,\"name\":{\"475\":{}},\"comment\":{}}],[\"accountcurrenciesrequest\",{\"_index\":281,\"name\":{\"492\":{}},\"comment\":{}}],[\"accountcurrenciesresponse\",{\"_index\":283,\"name\":{\"500\":{}},\"comment\":{}}],[\"accountdelete\",{\"_index\":665,\"name\":{\"1808\":{}},\"comment\":{}}],[\"accountinfoaccountflags\",{\"_index\":286,\"name\":{\"515\":{}},\"comment\":{}}],[\"accountinforequest\",{\"_index\":301,\"name\":{\"530\":{}},\"comment\":{}}],[\"accountinforesponse\",{\"_index\":304,\"name\":{\"540\":{}},\"comment\":{}}],[\"accountlinesrequest\",{\"_index\":321,\"name\":{\"569\":{}},\"comment\":{}}],[\"accountlinesresponse\",{\"_index\":323,\"name\":{\"579\":{}},\"comment\":{}}],[\"accountlinestrustline\",{\"_index\":325,\"name\":{\"595\":{}},\"comment\":{}}],[\"accountnftoken\",{\"_index\":336,\"name\":{\"609\":{}},\"comment\":{}}],[\"accountnftsrequest\",{\"_index\":338,\"name\":{\"616\":{}},\"comment\":{}}],[\"accountnftsresponse\",{\"_index\":339,\"name\":{\"625\":{}},\"comment\":{}}],[\"accountobject\",{\"_index\":341,\"name\":{\"641\":{}},\"comment\":{}}],[\"accountobjectsrequest\",{\"_index\":343,\"name\":{\"643\":{}},\"comment\":{}}],[\"accountobjectsresponse\",{\"_index\":345,\"name\":{\"654\":{}},\"comment\":{}}],[\"accountobjecttype\",{\"_index\":342,\"name\":{\"642\":{}},\"comment\":{}}],[\"accountoffer\",{\"_index\":347,\"name\":{\"672\":{}},\"comment\":{}}],[\"accountoffersrequest\",{\"_index\":351,\"name\":{\"679\":{}},\"comment\":{}}],[\"accountoffersresponse\",{\"_index\":352,\"name\":{\"689\":{}},\"comment\":{}}],[\"accountqueuedata\",{\"_index\":309,\"name\":{\"556\":{}},\"comment\":{}}],[\"accountqueuetransaction\",{\"_index\":315,\"name\":{\"563\":{}},\"comment\":{}}],[\"accountroot\",{\"_index\":63,\"name\":{\"68\":{}},\"comment\":{}}],[\"accountrootflags\",{\"_index\":87,\"name\":{\"92\":{}},\"comment\":{}}],[\"accountrootflagsinterface\",{\"_index\":103,\"name\":{\"108\":{}},\"comment\":{}}],[\"accounts\",{\"_index\":377,\"name\":{\"799\":{},\"931\":{},\"1221\":{},\"1331\":{}},\"comment\":{}}],[\"accounts_proposed\",{\"_index\":476,\"name\":{\"1222\":{},\"1332\":{}},\"comment\":{}}],[\"accountset\",{\"_index\":662,\"name\":{\"1785\":{}},\"comment\":{}}],[\"accountsetasfflags\",{\"_index\":638,\"name\":{\"1755\":{}},\"comment\":{}}],[\"accountsetflagsinterface\",{\"_index\":661,\"name\":{\"1778\":{}},\"comment\":{}}],[\"accountsettfflags\",{\"_index\":654,\"name\":{\"1771\":{}},\"comment\":{}}],[\"accountstate\",{\"_index\":166,\"name\":{\"251\":{},\"830\":{}},\"comment\":{}}],[\"accounttxnid\",{\"_index\":70,\"name\":{\"75\":{},\"1738\":{},\"1799\":{},\"1815\":{},\"1835\":{},\"1852\":{},\"1885\":{},\"1903\":{},\"1921\":{},\"1958\":{},\"1974\":{},\"1992\":{},\"2012\":{},\"2028\":{},\"2043\":{},\"2061\":{},\"2078\":{},\"2095\":{},\"2116\":{},\"2135\":{},\"2152\":{},\"2173\":{},\"2190\":{},\"2206\":{},\"2227\":{},\"2250\":{},\"2275\":{},\"2305\":{},\"2335\":{},\"2361\":{},\"2381\":{},\"2399\":{},\"2419\":{},\"2437\":{},\"2453\":{},\"2470\":{},\"2486\":{},\"2517\":{},\"2534\":{},\"2560\":{},\"2585\":{},\"2605\":{},\"2624\":{},\"2642\":{},\"2660\":{},\"2679\":{},\"2698\":{}},\"comment\":{}}],[\"accounttxrequest\",{\"_index\":354,\"name\":{\"705\":{}},\"comment\":{}}],[\"accounttxresponse\",{\"_index\":359,\"name\":{\"718\":{}},\"comment\":{}}],[\"accounttxtransaction\",{\"_index\":360,\"name\":{\"735\":{}},\"comment\":{}}],[\"action\",{\"_index\":504,\"name\":{\"1307\":{}},\"comment\":{}}],[\"address\",{\"_index\":53,\"name\":{\"57\":{}},\"comment\":{}}],[\"affectednodes\",{\"_index\":793,\"name\":{\"2741\":{}},\"comment\":{}}],[\"age\",{\"_index\":540,\"name\":{\"1430\":{},\"1470\":{},\"1504\":{},\"1538\":{}},\"comment\":{}}],[\"agent\",{\"_index\":30,\"name\":{\"32\":{}},\"comment\":{}}],[\"allowtrustlineclawback\",{\"_index\":300,\"name\":{\"529\":{}},\"comment\":{}}],[\"alternatives\",{\"_index\":462,\"name\":{\"1148\":{},\"1180\":{},\"1304\":{}},\"comment\":{}}],[\"amendment\",{\"_index\":184,\"name\":{\"277\":{},\"2147\":{}},\"comment\":{}}],[\"amendment_blocked\",{\"_index\":537,\"name\":{\"1426\":{},\"1499\":{}},\"comment\":{}}],[\"amendments\",{\"_index\":105,\"name\":{\"125\":{},\"127\":{},\"1268\":{}},\"comment\":{}}],[\"amendments_id\",{\"_index\":104,\"name\":{\"124\":{}},\"comment\":{}}],[\"amm\",{\"_index\":107,\"name\":{\"133\":{},\"909\":{},\"1705\":{}},\"comment\":{}}],[\"amm_account\",{\"_index\":616,\"name\":{\"1697\":{}},\"comment\":{}}],[\"ammbid\",{\"_index\":666,\"name\":{\"1825\":{}},\"comment\":{}}],[\"ammcreate\",{\"_index\":680,\"name\":{\"1895\":{}},\"comment\":{}}],[\"ammdelete\",{\"_index\":669,\"name\":{\"1845\":{}},\"comment\":{}}],[\"ammdeposit\",{\"_index\":677,\"name\":{\"1874\":{}},\"comment\":{}}],[\"ammdepositflags\",{\"_index\":670,\"name\":{\"1862\":{}},\"comment\":{}}],[\"ammdepositflagsinterface\",{\"_index\":676,\"name\":{\"1868\":{}},\"comment\":{}}],[\"ammid\",{\"_index\":71,\"name\":{\"76\":{}},\"comment\":{}}],[\"amminforequest\",{\"_index\":615,\"name\":{\"1695\":{}},\"comment\":{}}],[\"amminforesponse\",{\"_index\":617,\"name\":{\"1702\":{}},\"comment\":{}}],[\"ammvote\",{\"_index\":681,\"name\":{\"1913\":{}},\"comment\":{}}],[\"ammwithdraw\",{\"_index\":686,\"name\":{\"1947\":{}},\"comment\":{}}],[\"ammwithdrawflags\",{\"_index\":682,\"name\":{\"1931\":{}},\"comment\":{}}],[\"ammwithdrawflagsinterface\",{\"_index\":685,\"name\":{\"1939\":{}},\"comment\":{}}],[\"amount\",{\"_index\":37,\"name\":{\"39\":{},\"221\":{},\"290\":{},\"337\":{},\"454\":{},\"1201\":{},\"1708\":{},\"1878\":{},\"1897\":{},\"1951\":{},\"1987\":{},\"2025\":{},\"2107\":{},\"2219\":{},\"2324\":{},\"2355\":{},\"2372\":{},\"2394\":{},\"2546\":{},\"2572\":{},\"2601\":{},\"2620\":{},\"2675\":{},\"2759\":{},\"2794\":{}},\"comment\":{}}],[\"amount2\",{\"_index\":618,\"name\":{\"1709\":{},\"1879\":{},\"1898\":{},\"1952\":{}},\"comment\":{}}],[\"api_version\",{\"_index\":254,\"name\":{\"435\":{},\"444\":{},\"472\":{},\"491\":{},\"497\":{},\"514\":{},\"537\":{},\"555\":{},\"576\":{},\"594\":{},\"622\":{},\"640\":{},\"651\":{},\"671\":{},\"686\":{},\"704\":{},\"715\":{},\"734\":{},\"750\":{},\"772\":{},\"782\":{},\"795\":{},\"807\":{},\"818\":{},\"850\":{},\"862\":{},\"866\":{},\"877\":{},\"885\":{},\"905\":{},\"940\":{},\"957\":{},\"963\":{},\"987\":{},\"993\":{},\"1008\":{},\"1013\":{},\"1029\":{},\"1038\":{},\"1048\":{},\"1056\":{},\"1094\":{},\"1100\":{},\"1119\":{},\"1130\":{},\"1135\":{},\"1144\":{},\"1162\":{},\"1174\":{},\"1195\":{},\"1206\":{},\"1217\":{},\"1228\":{},\"1237\":{},\"1335\":{},\"1344\":{},\"1352\":{},\"1379\":{},\"1384\":{},\"1402\":{},\"1407\":{},\"1416\":{},\"1420\":{},\"1489\":{},\"1493\":{},\"1553\":{},\"1568\":{},\"1580\":{},\"1584\":{},\"1595\":{},\"1604\":{},\"1609\":{},\"1623\":{},\"1628\":{},\"1642\":{},\"1647\":{},\"1658\":{},\"1669\":{},\"1688\":{},\"1701\":{},\"1732\":{}},\"comment\":{}}],[\"applied\",{\"_index\":422,\"name\":{\"975\":{}},\"comment\":{}}],[\"asfaccounttxnid\",{\"_index\":643,\"name\":{\"1760\":{}},\"comment\":{}}],[\"asfallowtrustlineclawback\",{\"_index\":653,\"name\":{\"1770\":{}},\"comment\":{}}],[\"asfauthorizednftokenminter\",{\"_index\":648,\"name\":{\"1765\":{}},\"comment\":{}}],[\"asfdefaultripple\",{\"_index\":646,\"name\":{\"1763\":{}},\"comment\":{}}],[\"asfdepositauth\",{\"_index\":647,\"name\":{\"1764\":{}},\"comment\":{}}],[\"asfdisablemaster\",{\"_index\":642,\"name\":{\"1759\":{}},\"comment\":{}}],[\"asfdisallowincomingcheck\",{\"_index\":650,\"name\":{\"1767\":{}},\"comment\":{}}],[\"asfdisallowincomingnftokenoffer\",{\"_index\":649,\"name\":{\"1766\":{}},\"comment\":{}}],[\"asfdisallowincomingpaychan\",{\"_index\":651,\"name\":{\"1768\":{}},\"comment\":{}}],[\"asfdisallowincomingtrustline\",{\"_index\":652,\"name\":{\"1769\":{}},\"comment\":{}}],[\"asfdisallowxrp\",{\"_index\":641,\"name\":{\"1758\":{}},\"comment\":{}}],[\"asfglobalfreeze\",{\"_index\":645,\"name\":{\"1762\":{}},\"comment\":{}}],[\"asfnofreeze\",{\"_index\":644,\"name\":{\"1761\":{}},\"comment\":{}}],[\"asfrequireauth\",{\"_index\":640,\"name\":{\"1757\":{}},\"comment\":{}}],[\"asfrequiredest\",{\"_index\":639,\"name\":{\"1756\":{}},\"comment\":{}}],[\"asset\",{\"_index\":108,\"name\":{\"136\":{},\"911\":{},\"1698\":{},\"1827\":{},\"1847\":{},\"1876\":{},\"1915\":{},\"1949\":{}},\"comment\":{}}],[\"asset2\",{\"_index\":109,\"name\":{\"137\":{},\"915\":{},\"1699\":{},\"1828\":{},\"1848\":{},\"1877\":{},\"1916\":{},\"1950\":{}},\"comment\":{}}],[\"asset2_frozen\",{\"_index\":620,\"name\":{\"1711\":{}},\"comment\":{}}],[\"asset_frozen\",{\"_index\":619,\"name\":{\"1710\":{}},\"comment\":{}}],[\"assets\",{\"_index\":370,\"name\":{\"761\":{}},\"comment\":{}}],[\"attestationrewardaccount\",{\"_index\":768,\"name\":{\"2547\":{},\"2573\":{}},\"comment\":{}}],[\"attestationsigneraccount\",{\"_index\":769,\"name\":{\"2548\":{},\"2574\":{}},\"comment\":{}}],[\"auction_slot\",{\"_index\":621,\"name\":{\"1712\":{}},\"comment\":{}}],[\"auctionslot\",{\"_index\":110,\"name\":{\"138\":{}},\"comment\":{}}],[\"auth_accounts\",{\"_index\":622,\"name\":{\"1715\":{}},\"comment\":{}}],[\"auth_change\",{\"_index\":316,\"name\":{\"564\":{},\"825\":{}},\"comment\":{}}],[\"auth_change_queued\",{\"_index\":311,\"name\":{\"558\":{}},\"comment\":{}}],[\"authaccount\",{\"_index\":819,\"name\":{\"2811\":{},\"2812\":{}},\"comment\":{}}],[\"authaccounts\",{\"_index\":111,\"name\":{\"141\":{},\"1831\":{}},\"comment\":{}}],[\"authorization\",{\"_index\":31,\"name\":{\"33\":{}},\"comment\":{}}],[\"authorize\",{\"_index\":134,\"name\":{\"185\":{},\"2073\":{}},\"comment\":{}}],[\"authorized\",{\"_index\":332,\"name\":{\"605\":{}},\"comment\":{}}],[\"autofill\",{\"_index\":16,\"name\":{\"16\":{}},\"comment\":{}}],[\"avg_time\",{\"_index\":588,\"name\":{\"1558\":{}},\"comment\":{}}],[\"balance\",{\"_index\":66,\"name\":{\"71\":{},\"338\":{},\"354\":{},\"455\":{},\"597\":{},\"2354\":{},\"2760\":{}},\"comment\":{}}],[\"balances\",{\"_index\":369,\"name\":{\"759\":{}},\"comment\":{}}],[\"base_fee\",{\"_index\":495,\"name\":{\"1269\":{},\"1360\":{},\"1505\":{},\"1539\":{}},\"comment\":{}}],[\"base_fee_xrp\",{\"_index\":541,\"name\":{\"1431\":{},\"1471\":{}},\"comment\":{}}],[\"basefee\",{\"_index\":156,\"name\":{\"241\":{},\"2411\":{}},\"comment\":{}}],[\"basefeedrops\",{\"_index\":161,\"name\":{\"246\":{},\"2430\":{}},\"comment\":{}}],[\"baserequest\",{\"_index\":251,\"name\":{\"432\":{}},\"comment\":{}}],[\"baseresponse\",{\"_index\":255,\"name\":{\"436\":{}},\"comment\":{}}],[\"basetransaction\",{\"_index\":628,\"name\":{\"1733\":{}},\"comment\":{}}],[\"bidmax\",{\"_index\":668,\"name\":{\"1830\":{}},\"comment\":{}}],[\"bidmin\",{\"_index\":667,\"name\":{\"1829\":{}},\"comment\":{}}],[\"binary\",{\"_index\":357,\"name\":{\"710\":{},\"803\":{},\"880\":{},\"919\":{},\"1034\":{},\"1664\":{}},\"comment\":{}}],[\"bookdirectory\",{\"_index\":204,\"name\":{\"323\":{},\"1070\":{}},\"comment\":{}}],[\"booknode\",{\"_index\":205,\"name\":{\"324\":{},\"1071\":{}},\"comment\":{}}],[\"bookoffer\",{\"_index\":441,\"name\":{\"1059\":{}},\"comment\":{}}],[\"bookoffercurrency\",{\"_index\":444,\"name\":{\"1077\":{}},\"comment\":{}}],[\"bookoffersrequest\",{\"_index\":439,\"name\":{\"1049\":{}},\"comment\":{}}],[\"bookoffersresponse\",{\"_index\":445,\"name\":{\"1080\":{}},\"comment\":{}}],[\"books\",{\"_index\":477,\"name\":{\"1223\":{},\"1333\":{}},\"comment\":{}}],[\"bookssnapshot\",{\"_index\":485,\"name\":{\"1245\":{}},\"comment\":{}}],[\"both\",{\"_index\":483,\"name\":{\"1243\":{},\"1348\":{}},\"comment\":{}}],[\"bridge\",{\"_index\":118,\"name\":{\"152\":{},\"936\":{}},\"comment\":{}}],[\"bridge_account\",{\"_index\":406,\"name\":{\"935\":{}},\"comment\":{}}],[\"broadcast\",{\"_index\":423,\"name\":{\"976\":{}},\"comment\":{}}],[\"build_version\",{\"_index\":538,\"name\":{\"1427\":{},\"1500\":{}},\"comment\":{}}],[\"buildversion\",{\"_index\":6,\"name\":{\"6\":{}},\"comment\":{}}],[\"burnednftokens\",{\"_index\":80,\"name\":{\"85\":{}},\"comment\":{}}],[\"cancel_after\",{\"_index\":272,\"name\":{\"462\":{}},\"comment\":{}}],[\"cancelafter\",{\"_index\":151,\"name\":{\"223\":{},\"344\":{},\"2109\":{},\"2376\":{}},\"comment\":{}}],[\"channel\",{\"_index\":266,\"name\":{\"452\":{},\"2353\":{},\"2393\":{}},\"comment\":{}}],[\"channel_id\",{\"_index\":267,\"name\":{\"456\":{},\"1202\":{}},\"comment\":{}}],[\"channels\",{\"_index\":279,\"name\":{\"479\":{}},\"comment\":{}}],[\"channelverifyrequest\",{\"_index\":470,\"name\":{\"1199\":{}},\"comment\":{}}],[\"channelverifyresponse\",{\"_index\":472,\"name\":{\"1207\":{}},\"comment\":{}}],[\"check\",{\"_index\":126,\"name\":{\"166\":{},\"922\":{}},\"comment\":{}}],[\"checkcancel\",{\"_index\":688,\"name\":{\"1968\":{}},\"comment\":{}}],[\"checkcash\",{\"_index\":690,\"name\":{\"1984\":{}},\"comment\":{}}],[\"checkcreate\",{\"_index\":692,\"name\":{\"2002\":{}},\"comment\":{}}],[\"checkid\",{\"_index\":689,\"name\":{\"1970\":{},\"1986\":{}},\"comment\":{}}],[\"classicaddress\",{\"_index\":51,\"name\":{\"55\":{}},\"comment\":{}}],[\"clawback\",{\"_index\":693,\"name\":{\"2022\":{}},\"comment\":{}}],[\"clearflag\",{\"_index\":663,\"name\":{\"1788\":{}},\"comment\":{}}],[\"client\",{\"_index\":0,\"name\":{\"0\":{}},\"comment\":{}}],[\"clientoptions\",{\"_index\":25,\"name\":{\"25\":{}},\"comment\":{}}],[\"close_flags\",{\"_index\":167,\"name\":{\"252\":{},\"836\":{}},\"comment\":{}}],[\"close_time\",{\"_index\":168,\"name\":{\"253\":{},\"837\":{},\"1540\":{}},\"comment\":{}}],[\"close_time_human\",{\"_index\":169,\"name\":{\"254\":{},\"838\":{}},\"comment\":{}}],[\"close_time_resolution\",{\"_index\":170,\"name\":{\"255\":{},\"839\":{}},\"comment\":{}}],[\"closed\",{\"_index\":171,\"name\":{\"256\":{},\"832\":{},\"1154\":{}},\"comment\":{}}],[\"closed_ledger\",{\"_index\":539,\"name\":{\"1428\":{},\"1502\":{}},\"comment\":{}}],[\"closetime\",{\"_index\":185,\"name\":{\"278\":{}},\"comment\":{}}],[\"command\",{\"_index\":253,\"name\":{\"434\":{},\"466\":{},\"493\":{},\"531\":{},\"570\":{},\"617\":{},\"644\":{},\"680\":{},\"706\":{},\"745\":{},\"774\":{},\"797\":{},\"848\":{},\"864\":{},\"879\":{},\"908\":{},\"959\":{},\"989\":{},\"1010\":{},\"1031\":{},\"1050\":{},\"1096\":{},\"1128\":{},\"1133\":{},\"1142\":{},\"1167\":{},\"1200\":{},\"1219\":{},\"1329\":{},\"1350\":{},\"1381\":{},\"1404\":{},\"1418\":{},\"1491\":{},\"1566\":{},\"1582\":{},\"1606\":{},\"1625\":{},\"1644\":{},\"1660\":{},\"1696\":{}},\"comment\":{}}],[\"complete_ledgers\",{\"_index\":544,\"name\":{\"1436\":{},\"1501\":{}},\"comment\":{}}],[\"condition\",{\"_index\":150,\"name\":{\"222\":{},\"2111\":{},\"2130\":{}},\"comment\":{}}],[\"connect\",{\"_index\":13,\"name\":{\"13\":{}},\"comment\":{}}],[\"connection\",{\"_index\":2,\"name\":{\"2\":{}},\"comment\":{}}],[\"connectionerror\",{\"_index\":871,\"name\":{\"2896\":{}},\"comment\":{}}],[\"connectiontimeout\",{\"_index\":32,\"name\":{\"34\":{}},\"comment\":{}}],[\"consensus\",{\"_index\":508,\"name\":{\"1327\":{}},\"comment\":{}}],[\"consensusstream\",{\"_index\":507,\"name\":{\"1325\":{}},\"comment\":{}}],[\"constructor\",{\"_index\":1,\"name\":{\"1\":{},\"52\":{},\"2883\":{},\"2890\":{},\"2897\":{},\"2904\":{},\"2911\":{},\"2918\":{},\"2925\":{},\"2932\":{},\"2939\":{},\"2946\":{},\"2953\":{},\"2960\":{}},\"comment\":{}}],[\"converge_time\",{\"_index\":581,\"name\":{\"1514\":{}},\"comment\":{}}],[\"converge_time_s\",{\"_index\":549,\"name\":{\"1442\":{}},\"comment\":{}}],[\"converthextostring\",{\"_index\":856,\"name\":{\"2866\":{}},\"comment\":{}}],[\"convertstringtohex\",{\"_index\":855,\"name\":{\"2865\":{}},\"comment\":{}}],[\"cookie\",{\"_index\":496,\"name\":{\"1270\":{}},\"comment\":{}}],[\"count\",{\"_index\":578,\"name\":{\"1480\":{}},\"comment\":{}}],[\"creatednode\",{\"_index\":785,\"name\":{\"2714\":{},\"2715\":{}},\"comment\":{}}],[\"ctid\",{\"_index\":434,\"name\":{\"1033\":{}},\"comment\":{}}],[\"currency\",{\"_index\":326,\"name\":{\"598\":{},\"742\":{},\"913\":{},\"917\":{},\"932\":{},\"1078\":{},\"1197\":{},\"2749\":{},\"2752\":{},\"2754\":{},\"2757\":{},\"2761\":{},\"2779\":{}},\"comment\":{}}],[\"current_ledger_size\",{\"_index\":514,\"name\":{\"1356\":{}},\"comment\":{}}],[\"current_queue_size\",{\"_index\":515,\"name\":{\"1357\":{}},\"comment\":{}}],[\"data\",{\"_index\":146,\"name\":{\"209\":{},\"890\":{},\"1271\":{},\"2055\":{},\"2886\":{},\"2893\":{},\"2900\":{},\"2907\":{},\"2914\":{},\"2921\":{},\"2928\":{},\"2935\":{},\"2942\":{},\"2949\":{},\"2956\":{},\"2963\":{}},\"comment\":{}}],[\"date\",{\"_index\":505,\"name\":{\"1308\":{},\"2789\":{}},\"comment\":{}}],[\"decimaltoquality\",{\"_index\":833,\"name\":{\"2829\":{}},\"comment\":{}}],[\"decimaltotransferrate\",{\"_index\":835,\"name\":{\"2831\":{}},\"comment\":{}}],[\"decode\",{\"_index\":858,\"name\":{\"2868\":{}},\"comment\":{}}],[\"defaultripple\",{\"_index\":287,\"name\":{\"516\":{}},\"comment\":{}}],[\"deletednode\",{\"_index\":791,\"name\":{\"2732\":{},\"2733\":{}},\"comment\":{}}],[\"deletion_blockers_only\",{\"_index\":344,\"name\":{\"647\":{}},\"comment\":{}}],[\"delivered_amount\",{\"_index\":795,\"name\":{\"2743\":{}},\"comment\":{}}],[\"deliveredamount\",{\"_index\":794,\"name\":{\"2742\":{}},\"comment\":{}}],[\"delivermin\",{\"_index\":691,\"name\":{\"1988\":{},\"2330\":{}},\"comment\":{}}],[\"deposit_authorized\",{\"_index\":449,\"name\":{\"1106\":{}},\"comment\":{}}],[\"deposit_preauth\",{\"_index\":401,\"name\":{\"923\":{}},\"comment\":{}}],[\"depositauth\",{\"_index\":288,\"name\":{\"517\":{}},\"comment\":{}}],[\"depositauthorizedrequest\",{\"_index\":446,\"name\":{\"1095\":{}},\"comment\":{}}],[\"depositauthorizedresponse\",{\"_index\":448,\"name\":{\"1103\":{}},\"comment\":{}}],[\"depositpreauth\",{\"_index\":133,\"name\":{\"182\":{},\"2071\":{}},\"comment\":{}}],[\"derivewallet\",{\"_index\":48,\"name\":{\"51\":{}},\"comment\":{}}],[\"derivexaddress\",{\"_index\":852,\"name\":{\"2862\":{}},\"comment\":{}}],[\"destination\",{\"_index\":127,\"name\":{\"169\":{},\"220\":{},\"291\":{},\"336\":{},\"1810\":{},\"2004\":{},\"2108\":{},\"2222\":{},\"2325\":{},\"2373\":{},\"2549\":{},\"2575\":{},\"2599\":{},\"2674\":{},\"2798\":{}},\"comment\":{}}],[\"destination_account\",{\"_index\":268,\"name\":{\"457\":{},\"468\":{},\"1098\":{},\"1107\":{},\"1124\":{},\"1149\":{},\"1169\":{},\"1181\":{},\"1299\":{}},\"comment\":{}}],[\"destination_amount\",{\"_index\":453,\"name\":{\"1125\":{},\"1139\":{},\"1150\":{},\"1170\":{},\"1183\":{},\"1300\":{}},\"comment\":{}}],[\"destination_currencies\",{\"_index\":468,\"name\":{\"1182\":{}},\"comment\":{}}],[\"destination_tag\",{\"_index\":274,\"name\":{\"464\":{}},\"comment\":{}}],[\"destinationnode\",{\"_index\":129,\"name\":{\"176\":{},\"229\":{},\"347\":{}},\"comment\":{}}],[\"destinationtag\",{\"_index\":130,\"name\":{\"177\":{},\"227\":{},\"346\":{},\"1811\":{},\"2006\":{},\"2112\":{},\"2326\":{},\"2377\":{},\"2600\":{}},\"comment\":{}}],[\"details\",{\"_index\":265,\"name\":{\"450\":{},\"1388\":{}},\"comment\":{}}],[\"did\",{\"_index\":145,\"name\":{\"206\":{},\"924\":{}},\"comment\":{}}],[\"diddelete\",{\"_index\":694,\"name\":{\"2038\":{}},\"comment\":{}}],[\"diddocument\",{\"_index\":147,\"name\":{\"210\":{},\"2056\":{}},\"comment\":{}}],[\"didset\",{\"_index\":695,\"name\":{\"2053\":{}},\"comment\":{}}],[\"directory\",{\"_index\":402,\"name\":{\"925\":{}},\"comment\":{}}],[\"directorynode\",{\"_index\":135,\"name\":{\"191\":{}},\"comment\":{}}],[\"disabledvalidators\",{\"_index\":188,\"name\":{\"282\":{}},\"comment\":{}}],[\"disablemasterkey\",{\"_index\":289,\"name\":{\"518\":{}},\"comment\":{}}],[\"disallowincomingcheck\",{\"_index\":290,\"name\":{\"519\":{}},\"comment\":{}}],[\"disallowincomingnftokenoffer\",{\"_index\":291,\"name\":{\"520\":{}},\"comment\":{}}],[\"disallowincomingpaychan\",{\"_index\":292,\"name\":{\"521\":{}},\"comment\":{}}],[\"disallowincomingtrustline\",{\"_index\":293,\"name\":{\"522\":{}},\"comment\":{}}],[\"disallowincomingxrp\",{\"_index\":294,\"name\":{\"523\":{}},\"comment\":{}}],[\"disconnect\",{\"_index\":14,\"name\":{\"14\":{}},\"comment\":{}}],[\"disconnectederror\",{\"_index\":874,\"name\":{\"2917\":{}},\"comment\":{}}],[\"discounted_fee\",{\"_index\":623,\"name\":{\"1716\":{}},\"comment\":{}}],[\"discountedfee\",{\"_index\":112,\"name\":{\"142\":{}},\"comment\":{}}],[\"domain\",{\"_index\":72,\"name\":{\"77\":{},\"1390\":{},\"1789\":{}},\"comment\":{}}],[\"drops\",{\"_index\":516,\"name\":{\"1358\":{}},\"comment\":{}}],[\"dropstoxrp\",{\"_index\":825,\"name\":{\"2821\":{}},\"comment\":{}}],[\"duration_us\",{\"_index\":593,\"name\":{\"1563\":{}},\"comment\":{}}],[\"ecdsa\",{\"_index\":33,\"name\":{\"35\":{}},\"comment\":{}}],[\"ed25519\",{\"_index\":34,\"name\":{\"36\":{}},\"comment\":{}}],[\"emailhash\",{\"_index\":73,\"name\":{\"78\":{},\"1790\":{}},\"comment\":{}}],[\"enableamendment\",{\"_index\":702,\"name\":{\"2145\":{}},\"comment\":{}}],[\"enableamendmentflags\",{\"_index\":704,\"name\":{\"2162\":{}},\"comment\":{}}],[\"encode\",{\"_index\":857,\"name\":{\"2867\":{}},\"comment\":{}}],[\"encodeformultisigning\",{\"_index\":859,\"name\":{\"2869\":{}},\"comment\":{}}],[\"encodeforsigning\",{\"_index\":860,\"name\":{\"2870\":{}},\"comment\":{}}],[\"encodeforsigningclaim\",{\"_index\":861,\"name\":{\"2871\":{}},\"comment\":{}}],[\"engine_result\",{\"_index\":415,\"name\":{\"967\":{},\"997\":{},\"1286\":{},\"1316\":{}},\"comment\":{}}],[\"engine_result_code\",{\"_index\":416,\"name\":{\"968\":{},\"998\":{},\"1287\":{},\"1317\":{}},\"comment\":{}}],[\"engine_result_message\",{\"_index\":417,\"name\":{\"969\":{},\"999\":{},\"1288\":{},\"1318\":{}},\"comment\":{}}],[\"ephemeral_key\",{\"_index\":529,\"name\":{\"1391\":{}},\"comment\":{}}],[\"eprice\",{\"_index\":678,\"name\":{\"1880\":{},\"1953\":{}},\"comment\":{}}],[\"error\",{\"_index\":602,\"name\":{\"1600\":{}},\"comment\":{}}],[\"error_code\",{\"_index\":603,\"name\":{\"1601\":{}},\"comment\":{}}],[\"error_message\",{\"_index\":604,\"name\":{\"1602\":{}},\"comment\":{}}],[\"errorresponse\",{\"_index\":601,\"name\":{\"1596\":{}},\"comment\":{}}],[\"escrow\",{\"_index\":149,\"name\":{\"217\":{},\"926\":{}},\"comment\":{}}],[\"escrowcancel\",{\"_index\":697,\"name\":{\"2088\":{}},\"comment\":{}}],[\"escrowcreate\",{\"_index\":699,\"name\":{\"2105\":{}},\"comment\":{}}],[\"escrowfinish\",{\"_index\":700,\"name\":{\"2126\":{}},\"comment\":{}}],[\"expand\",{\"_index\":378,\"name\":{\"801\":{}},\"comment\":{}}],[\"expected_ledger_size\",{\"_index\":520,\"name\":{\"1364\":{}},\"comment\":{}}],[\"expiration\",{\"_index\":113,\"name\":{\"143\":{},\"178\":{},\"292\":{},\"326\":{},\"343\":{},\"461\":{},\"678\":{},\"1073\":{},\"1481\":{},\"1717\":{},\"2007\":{},\"2221\":{},\"2298\":{},\"2395\":{},\"2799\":{}},\"comment\":{}}],[\"fail_hard\",{\"_index\":413,\"name\":{\"961\":{},\"991\":{}},\"comment\":{}}],[\"faucethost\",{\"_index\":38,\"name\":{\"40\":{}},\"comment\":{}}],[\"faucetpath\",{\"_index\":39,\"name\":{\"41\":{}},\"comment\":{}}],[\"fee\",{\"_index\":317,\"name\":{\"565\":{},\"826\":{},\"1736\":{},\"1797\":{},\"1813\":{},\"1833\":{},\"1850\":{},\"1883\":{},\"1901\":{},\"1919\":{},\"1956\":{},\"1972\":{},\"1990\":{},\"2010\":{},\"2026\":{},\"2041\":{},\"2059\":{},\"2076\":{},\"2093\":{},\"2114\":{},\"2133\":{},\"2150\":{},\"2171\":{},\"2188\":{},\"2204\":{},\"2225\":{},\"2248\":{},\"2273\":{},\"2303\":{},\"2333\":{},\"2359\":{},\"2379\":{},\"2397\":{},\"2417\":{},\"2435\":{},\"2451\":{},\"2468\":{},\"2484\":{},\"2515\":{},\"2532\":{},\"2558\":{},\"2583\":{},\"2603\":{},\"2622\":{},\"2640\":{},\"2658\":{},\"2677\":{},\"2696\":{}},\"comment\":{}}],[\"fee_base\",{\"_index\":487,\"name\":{\"1248\":{},\"1258\":{}},\"comment\":{}}],[\"fee_level\",{\"_index\":318,\"name\":{\"566\":{},\"827\":{}},\"comment\":{}}],[\"fee_ref\",{\"_index\":488,\"name\":{\"1249\":{},\"1259\":{}},\"comment\":{}}],[\"fee_settings_id\",{\"_index\":153,\"name\":{\"233\":{}},\"comment\":{}}],[\"feecushion\",{\"_index\":3,\"name\":{\"3\":{},\"26\":{}},\"comment\":{}}],[\"feerequest\",{\"_index\":512,\"name\":{\"1349\":{}},\"comment\":{}}],[\"feeresponse\",{\"_index\":513,\"name\":{\"1353\":{}},\"comment\":{}}],[\"feesettings\",{\"_index\":154,\"name\":{\"234\":{}},\"comment\":{}}],[\"feesettingspostamendmentfields\",{\"_index\":160,\"name\":{\"245\":{}},\"comment\":{}}],[\"feesettingspreamendmentfields\",{\"_index\":155,\"name\":{\"240\":{}},\"comment\":{}}],[\"finalfields\",{\"_index\":789,\"name\":{\"2726\":{},\"2737\":{}},\"comment\":{}}],[\"finishafter\",{\"_index\":152,\"name\":{\"224\":{},\"2110\":{}},\"comment\":{}}],[\"firstnftsequence\",{\"_index\":81,\"name\":{\"86\":{}},\"comment\":{}}],[\"flags\",{\"_index\":67,\"name\":{\"72\":{},\"129\":{},\"148\":{},\"161\":{},\"170\":{},\"186\":{},\"193\":{},\"212\":{},\"225\":{},\"236\":{},\"270\":{},\"293\":{},\"311\":{},\"318\":{},\"342\":{},\"353\":{},\"377\":{},\"390\":{},\"404\":{},\"415\":{},\"610\":{},\"673\":{},\"1065\":{},\"1272\":{},\"1739\":{},\"1787\":{},\"1816\":{},\"1836\":{},\"1853\":{},\"1886\":{},\"1904\":{},\"1922\":{},\"1959\":{},\"1975\":{},\"1993\":{},\"2013\":{},\"2029\":{},\"2044\":{},\"2062\":{},\"2079\":{},\"2096\":{},\"2117\":{},\"2136\":{},\"2153\":{},\"2174\":{},\"2191\":{},\"2207\":{},\"2223\":{},\"2246\":{},\"2276\":{},\"2297\":{},\"2331\":{},\"2352\":{},\"2382\":{},\"2400\":{},\"2420\":{},\"2438\":{},\"2454\":{},\"2471\":{},\"2487\":{},\"2513\":{},\"2535\":{},\"2561\":{},\"2586\":{},\"2606\":{},\"2625\":{},\"2643\":{},\"2661\":{},\"2680\":{},\"2694\":{},\"2795\":{},\"2805\":{},\"2876\":{}},\"comment\":{}}],[\"forward\",{\"_index\":358,\"name\":{\"711\":{},\"1665\":{}},\"comment\":{}}],[\"forwarded\",{\"_index\":261,\"name\":{\"443\":{},\"490\":{},\"513\":{},\"554\":{},\"593\":{},\"639\":{},\"670\":{},\"703\":{},\"733\":{},\"771\":{},\"794\":{},\"817\":{},\"861\":{},\"876\":{},\"904\":{},\"956\":{},\"986\":{},\"1007\":{},\"1028\":{},\"1047\":{},\"1093\":{},\"1118\":{},\"1161\":{},\"1194\":{},\"1216\":{},\"1236\":{},\"1343\":{},\"1378\":{},\"1401\":{},\"1415\":{},\"1488\":{},\"1552\":{},\"1579\":{},\"1594\":{},\"1622\":{},\"1641\":{},\"1657\":{},\"1687\":{},\"1731\":{}},\"comment\":{}}],[\"freeze\",{\"_index\":334,\"name\":{\"607\":{}},\"comment\":{}}],[\"freeze_peer\",{\"_index\":335,\"name\":{\"608\":{}},\"comment\":{}}],[\"fromentropy\",{\"_index\":45,\"name\":{\"48\":{}},\"comment\":{}}],[\"frommnemonic\",{\"_index\":46,\"name\":{\"49\":{}},\"comment\":{}}],[\"fromrfc1751mnemonic\",{\"_index\":47,\"name\":{\"50\":{}},\"comment\":{}}],[\"fromsecret\",{\"_index\":44,\"name\":{\"46\":{}},\"comment\":{}}],[\"fromseed\",{\"_index\":43,\"name\":{\"45\":{}},\"comment\":{}}],[\"fulfillment\",{\"_index\":701,\"name\":{\"2131\":{}},\"comment\":{}}],[\"full\",{\"_index\":376,\"name\":{\"798\":{},\"1273\":{}},\"comment\":{}}],[\"full_reply\",{\"_index\":463,\"name\":{\"1152\":{},\"1184\":{},\"1301\":{}},\"comment\":{}}],[\"fundingoptions\",{\"_index\":36,\"name\":{\"38\":{}},\"comment\":{}}],[\"fundwallet\",{\"_index\":24,\"name\":{\"24\":{}},\"comment\":{}}],[\"gatewaybalance\",{\"_index\":363,\"name\":{\"741\":{}},\"comment\":{}}],[\"gatewaybalancesrequest\",{\"_index\":365,\"name\":{\"744\":{}},\"comment\":{}}],[\"gatewaybalancesresponse\",{\"_index\":367,\"name\":{\"753\":{}},\"comment\":{}}],[\"generate\",{\"_index\":42,\"name\":{\"44\":{}},\"comment\":{}}],[\"getbalancechanges\",{\"_index\":824,\"name\":{\"2820\":{}},\"comment\":{}}],[\"getbalances\",{\"_index\":21,\"name\":{\"21\":{}},\"comment\":{}}],[\"getledgerindex\",{\"_index\":23,\"name\":{\"23\":{}},\"comment\":{}}],[\"getnftokenid\",{\"_index\":862,\"name\":{\"2872\":{}},\"comment\":{}}],[\"getorderbook\",{\"_index\":22,\"name\":{\"22\":{}},\"comment\":{}}],[\"getserverinfo\",{\"_index\":12,\"name\":{\"12\":{}},\"comment\":{}}],[\"getxaddress\",{\"_index\":58,\"name\":{\"63\":{}},\"comment\":{}}],[\"getxchainclaimid\",{\"_index\":865,\"name\":{\"2881\":{}},\"comment\":{}}],[\"getxrpbalance\",{\"_index\":20,\"name\":{\"20\":{}},\"comment\":{}}],[\"globalfreeze\",{\"_index\":295,\"name\":{\"524\":{}},\"comment\":{}}],[\"hash\",{\"_index\":56,\"name\":{\"61\":{},\"1405\":{},\"1432\":{},\"1472\":{},\"1506\":{},\"1541\":{},\"2790\":{}},\"comment\":{}}],[\"hashaccountroot\",{\"_index\":842,\"name\":{\"2842\":{}},\"comment\":{}}],[\"hashes\",{\"_index\":182,\"name\":{\"269\":{},\"2836\":{}},\"comment\":{}}],[\"hashescrow\",{\"_index\":850,\"name\":{\"2858\":{}},\"comment\":{}}],[\"hashledger\",{\"_index\":848,\"name\":{\"2854\":{}},\"comment\":{}}],[\"hashledgerheader\",{\"_index\":849,\"name\":{\"2856\":{}},\"comment\":{}}],[\"hashofferid\",{\"_index\":844,\"name\":{\"2846\":{}},\"comment\":{}}],[\"hashpaymentchannel\",{\"_index\":851,\"name\":{\"2860\":{}},\"comment\":{}}],[\"hashsignedtx\",{\"_index\":840,\"name\":{\"2838\":{}},\"comment\":{}}],[\"hashsignerlistid\",{\"_index\":843,\"name\":{\"2844\":{}},\"comment\":{}}],[\"hashstatetree\",{\"_index\":847,\"name\":{\"2852\":{}},\"comment\":{}}],[\"hashtrustline\",{\"_index\":845,\"name\":{\"2848\":{}},\"comment\":{}}],[\"hashtx\",{\"_index\":841,\"name\":{\"2840\":{}},\"comment\":{}}],[\"hashtxtree\",{\"_index\":846,\"name\":{\"2850\":{}},\"comment\":{}}],[\"hasnextpage\",{\"_index\":827,\"name\":{\"2823\":{}},\"comment\":{}}],[\"headers\",{\"_index\":28,\"name\":{\"30\":{}},\"comment\":{}}],[\"highest_sequence\",{\"_index\":313,\"name\":{\"560\":{}},\"comment\":{}}],[\"highlimit\",{\"_index\":213,\"name\":{\"356\":{}},\"comment\":{}}],[\"highnode\",{\"_index\":215,\"name\":{\"358\":{}},\"comment\":{}}],[\"highqualityin\",{\"_index\":218,\"name\":{\"361\":{}},\"comment\":{}}],[\"highqualityout\",{\"_index\":219,\"name\":{\"362\":{}},\"comment\":{}}],[\"hostid\",{\"_index\":545,\"name\":{\"1437\":{}},\"comment\":{}}],[\"hotwallet\",{\"_index\":366,\"name\":{\"748\":{}},\"comment\":{}}],[\"id\",{\"_index\":252,\"name\":{\"433\":{},\"437\":{},\"448\":{},\"471\":{},\"485\":{},\"496\":{},\"508\":{},\"536\":{},\"549\":{},\"575\":{},\"588\":{},\"621\":{},\"634\":{},\"650\":{},\"665\":{},\"685\":{},\"698\":{},\"714\":{},\"728\":{},\"749\":{},\"766\":{},\"781\":{},\"789\":{},\"806\":{},\"812\":{},\"849\":{},\"856\":{},\"865\":{},\"871\":{},\"884\":{},\"899\":{},\"939\":{},\"951\":{},\"962\":{},\"981\":{},\"992\":{},\"1002\":{},\"1012\":{},\"1023\":{},\"1037\":{},\"1042\":{},\"1055\":{},\"1088\":{},\"1099\":{},\"1113\":{},\"1129\":{},\"1134\":{},\"1143\":{},\"1153\":{},\"1156\":{},\"1173\":{},\"1185\":{},\"1189\":{},\"1205\":{},\"1211\":{},\"1227\":{},\"1231\":{},\"1302\":{},\"1334\":{},\"1338\":{},\"1351\":{},\"1373\":{},\"1383\":{},\"1396\":{},\"1406\":{},\"1410\":{},\"1419\":{},\"1483\":{},\"1492\":{},\"1547\":{},\"1567\":{},\"1574\":{},\"1583\":{},\"1589\":{},\"1597\":{},\"1608\":{},\"1617\":{},\"1627\":{},\"1636\":{},\"1646\":{},\"1652\":{},\"1668\":{},\"1682\":{},\"1700\":{},\"1726\":{}},\"comment\":{}}],[\"in_progress\",{\"_index\":589,\"name\":{\"1559\":{}},\"comment\":{}}],[\"index\",{\"_index\":84,\"name\":{\"89\":{},\"130\":{},\"149\":{},\"163\":{},\"181\":{},\"188\":{},\"203\":{},\"214\":{},\"230\":{},\"237\":{},\"271\":{},\"285\":{},\"297\":{},\"305\":{},\"327\":{},\"348\":{},\"363\":{},\"382\":{},\"393\":{},\"406\":{},\"417\":{},\"920\":{},\"946\":{},\"1074\":{}},\"comment\":{}}],[\"indexes\",{\"_index\":137,\"name\":{\"195\":{}},\"comment\":{}}],[\"indexnext\",{\"_index\":138,\"name\":{\"196\":{}},\"comment\":{}}],[\"indexprevious\",{\"_index\":139,\"name\":{\"197\":{}},\"comment\":{}}],[\"info\",{\"_index\":536,\"name\":{\"1424\":{}},\"comment\":{}}],[\"inledger\",{\"_index\":813,\"name\":{\"2792\":{}},\"comment\":{}}],[\"inspect\",{\"_index\":869,\"name\":{\"2888\":{},\"2895\":{},\"2902\":{},\"2909\":{},\"2916\":{},\"2923\":{},\"2930\":{},\"2937\":{},\"2944\":{},\"2951\":{},\"2958\":{},\"2965\":{}},\"comment\":{}}],[\"invoiceid\",{\"_index\":131,\"name\":{\"179\":{},\"2008\":{},\"2327\":{}},\"comment\":{}}],[\"io_latency_ms\",{\"_index\":546,\"name\":{\"1438\":{},\"1510\":{}},\"comment\":{}}],[\"is_burned\",{\"_index\":816,\"name\":{\"2804\":{}},\"comment\":{}}],[\"isconnected\",{\"_index\":15,\"name\":{\"15\":{}},\"comment\":{}}],[\"iscreatednode\",{\"_index\":782,\"name\":{\"2711\":{}},\"comment\":{}}],[\"isdeletednode\",{\"_index\":784,\"name\":{\"2713\":{}},\"comment\":{}}],[\"ismodifiednode\",{\"_index\":783,\"name\":{\"2712\":{}},\"comment\":{}}],[\"isotimetorippletime\",{\"_index\":829,\"name\":{\"2825\":{}},\"comment\":{}}],[\"issuedcurrency\",{\"_index\":800,\"name\":{\"2751\":{}},\"comment\":{}}],[\"issuedcurrencyamount\",{\"_index\":801,\"name\":{\"2755\":{}},\"comment\":{}}],[\"issuer\",{\"_index\":198,\"name\":{\"312\":{},\"611\":{},\"914\":{},\"918\":{},\"1079\":{},\"1198\":{},\"2243\":{},\"2750\":{},\"2753\":{},\"2758\":{},\"2762\":{},\"2780\":{},\"2807\":{},\"2878\":{}},\"comment\":{}}],[\"issuingchaindoor\",{\"_index\":822,\"name\":{\"2818\":{}},\"comment\":{}}],[\"issuingchainissue\",{\"_index\":823,\"name\":{\"2819\":{}},\"comment\":{}}],[\"isvalidaddress\",{\"_index\":839,\"name\":{\"2835\":{}},\"comment\":{}}],[\"isvalidsecret\",{\"_index\":838,\"name\":{\"2834\":{}},\"comment\":{}}],[\"job_type\",{\"_index\":585,\"name\":{\"1555\":{}},\"comment\":{}}],[\"job_types\",{\"_index\":552,\"name\":{\"1446\":{},\"1518\":{}},\"comment\":{}}],[\"jobtype\",{\"_index\":584,\"name\":{\"1554\":{}},\"comment\":{}}],[\"jq_trans_overflow\",{\"_index\":547,\"name\":{\"1439\":{},\"1511\":{}},\"comment\":{}}],[\"kept\",{\"_index\":424,\"name\":{\"977\":{}},\"comment\":{}}],[\"keytorfc1751mnemonic\",{\"_index\":60,\"name\":{\"65\":{}},\"comment\":{}}],[\"last_close\",{\"_index\":548,\"name\":{\"1440\":{},\"1512\":{}},\"comment\":{}}],[\"last_result\",{\"_index\":384,\"name\":{\"824\":{}},\"comment\":{}}],[\"lastledgersequence\",{\"_index\":181,\"name\":{\"268\":{},\"1740\":{},\"1800\":{},\"1817\":{},\"1837\":{},\"1854\":{},\"1887\":{},\"1905\":{},\"1923\":{},\"1960\":{},\"1976\":{},\"1994\":{},\"2014\":{},\"2030\":{},\"2045\":{},\"2063\":{},\"2080\":{},\"2097\":{},\"2118\":{},\"2137\":{},\"2154\":{},\"2175\":{},\"2192\":{},\"2208\":{},\"2228\":{},\"2251\":{},\"2277\":{},\"2306\":{},\"2336\":{},\"2362\":{},\"2383\":{},\"2401\":{},\"2421\":{},\"2439\":{},\"2455\":{},\"2472\":{},\"2488\":{},\"2518\":{},\"2536\":{},\"2562\":{},\"2587\":{},\"2607\":{},\"2626\":{},\"2644\":{},\"2662\":{},\"2681\":{},\"2699\":{}},\"comment\":{}}],[\"ledger\",{\"_index\":164,\"name\":{\"249\":{}},\"comment\":{}}],[\"ledger_current_index\",{\"_index\":307,\"name\":{\"545\":{},\"584\":{},\"630\":{},\"661\":{},\"694\":{},\"764\":{},\"786\":{},\"870\":{},\"947\":{},\"1083\":{},\"1110\":{},\"1186\":{},\"1289\":{},\"1319\":{},\"1365\":{}},\"comment\":{}}],[\"ledger_hash\",{\"_index\":172,\"name\":{\"257\":{},\"473\":{},\"480\":{},\"498\":{},\"503\":{},\"538\":{},\"577\":{},\"586\":{},\"623\":{},\"652\":{},\"659\":{},\"687\":{},\"696\":{},\"716\":{},\"751\":{},\"763\":{},\"779\":{},\"808\":{},\"833\":{},\"854\":{},\"886\":{},\"895\":{},\"941\":{},\"1014\":{},\"1019\":{},\"1057\":{},\"1085\":{},\"1101\":{},\"1108\":{},\"1175\":{},\"1250\":{},\"1260\":{},\"1274\":{},\"1290\":{},\"1309\":{},\"1320\":{},\"1610\":{},\"1629\":{},\"1648\":{},\"1670\":{},\"1723\":{}},\"comment\":{}}],[\"ledger_index\",{\"_index\":173,\"name\":{\"258\":{},\"474\":{},\"481\":{},\"499\":{},\"504\":{},\"539\":{},\"546\":{},\"578\":{},\"585\":{},\"624\":{},\"653\":{},\"660\":{},\"688\":{},\"695\":{},\"717\":{},\"736\":{},\"752\":{},\"765\":{},\"780\":{},\"809\":{},\"834\":{},\"855\":{},\"887\":{},\"894\":{},\"942\":{},\"1015\":{},\"1020\":{},\"1058\":{},\"1084\":{},\"1102\":{},\"1109\":{},\"1176\":{},\"1251\":{},\"1261\":{},\"1275\":{},\"1291\":{},\"1310\":{},\"1321\":{},\"1611\":{},\"1630\":{},\"1649\":{},\"1671\":{},\"1690\":{},\"1724\":{},\"2791\":{},\"2802\":{}},\"comment\":{}}],[\"ledger_index_max\",{\"_index\":356,\"name\":{\"709\":{},\"723\":{},\"1311\":{},\"1663\":{},\"1677\":{}},\"comment\":{}}],[\"ledger_index_min\",{\"_index\":355,\"name\":{\"708\":{},\"722\":{},\"1312\":{},\"1662\":{},\"1676\":{}},\"comment\":{}}],[\"ledger_time\",{\"_index\":489,\"name\":{\"1252\":{},\"1262\":{}},\"comment\":{}}],[\"ledgerbinary\",{\"_index\":385,\"name\":{\"829\":{}},\"comment\":{}}],[\"ledgerclosedrequest\",{\"_index\":389,\"name\":{\"847\":{}},\"comment\":{}}],[\"ledgerclosedresponse\",{\"_index\":390,\"name\":{\"851\":{}},\"comment\":{}}],[\"ledgercurrentrequest\",{\"_index\":391,\"name\":{\"863\":{}},\"comment\":{}}],[\"ledgercurrentresponse\",{\"_index\":392,\"name\":{\"867\":{}},\"comment\":{}}],[\"ledgerdatabinaryledgerentry\",{\"_index\":395,\"name\":{\"889\":{}},\"comment\":{}}],[\"ledgerdatalabeledledgerentry\",{\"_index\":394,\"name\":{\"888\":{}},\"comment\":{}}],[\"ledgerdataledgerstate\",{\"_index\":398,\"name\":{\"906\":{}},\"comment\":{}}],[\"ledgerdatarequest\",{\"_index\":393,\"name\":{\"878\":{}},\"comment\":{}}],[\"ledgerdataresponse\",{\"_index\":396,\"name\":{\"891\":{}},\"comment\":{}}],[\"ledgerentry\",{\"_index\":62,\"name\":{\"67\":{},\"265\":{}},\"comment\":{}}],[\"ledgerentryfilter\",{\"_index\":179,\"name\":{\"264\":{}},\"comment\":{}}],[\"ledgerentryrequest\",{\"_index\":399,\"name\":{\"907\":{}},\"comment\":{}}],[\"ledgerentryresponse\",{\"_index\":409,\"name\":{\"943\":{}},\"comment\":{}}],[\"ledgerentrytype\",{\"_index\":64,\"name\":{\"69\":{},\"126\":{},\"134\":{},\"153\":{},\"167\":{},\"183\":{},\"192\":{},\"207\":{},\"218\":{},\"235\":{},\"267\":{},\"281\":{},\"289\":{},\"301\":{},\"317\":{},\"334\":{},\"352\":{},\"376\":{},\"388\":{},\"397\":{},\"410\":{},\"1064\":{},\"2717\":{},\"2724\":{},\"2735\":{}},\"comment\":{}}],[\"ledgerhashes\",{\"_index\":180,\"name\":{\"266\":{}},\"comment\":{}}],[\"ledgerindex\",{\"_index\":786,\"name\":{\"2718\":{},\"2725\":{},\"2736\":{},\"2747\":{}},\"comment\":{}}],[\"ledgermodifiedoffercreatetransaction\",{\"_index\":386,\"name\":{\"844\":{}},\"comment\":{}}],[\"ledgerqueuedata\",{\"_index\":381,\"name\":{\"819\":{}},\"comment\":{}}],[\"ledgerrequest\",{\"_index\":375,\"name\":{\"796\":{}},\"comment\":{}}],[\"ledgerresponse\",{\"_index\":380,\"name\":{\"810\":{}},\"comment\":{}}],[\"ledgersequence\",{\"_index\":703,\"name\":{\"2148\":{},\"2528\":{}},\"comment\":{}}],[\"ledgerstream\",{\"_index\":486,\"name\":{\"1246\":{}},\"comment\":{}}],[\"ledgerstreamresponse\",{\"_index\":493,\"name\":{\"1257\":{}},\"comment\":{}}],[\"levels\",{\"_index\":521,\"name\":{\"1366\":{}},\"comment\":{}}],[\"limit\",{\"_index\":276,\"name\":{\"469\":{},\"483\":{},\"573\":{},\"599\":{},\"619\":{},\"633\":{},\"648\":{},\"662\":{},\"682\":{},\"712\":{},\"724\":{},\"778\":{},\"881\":{},\"1051\":{},\"1666\":{},\"1678\":{}},\"comment\":{}}],[\"limit_peer\",{\"_index\":327,\"name\":{\"600\":{}},\"comment\":{}}],[\"limitamount\",{\"_index\":761,\"name\":{\"2510\":{}},\"comment\":{}}],[\"lines\",{\"_index\":324,\"name\":{\"583\":{}},\"comment\":{}}],[\"load\",{\"_index\":551,\"name\":{\"1444\":{},\"1516\":{}},\"comment\":{}}],[\"load_base\",{\"_index\":582,\"name\":{\"1520\":{}},\"comment\":{}}],[\"load_factor\",{\"_index\":554,\"name\":{\"1448\":{},\"1521\":{}},\"comment\":{}}],[\"load_factor_cluster\",{\"_index\":558,\"name\":{\"1452\":{}},\"comment\":{}}],[\"load_factor_fee_escalation\",{\"_index\":559,\"name\":{\"1453\":{},\"1522\":{}},\"comment\":{}}],[\"load_factor_fee_queue\",{\"_index\":560,\"name\":{\"1454\":{},\"1523\":{}},\"comment\":{}}],[\"load_factor_fee_reference\",{\"_index\":583,\"name\":{\"1524\":{}},\"comment\":{}}],[\"load_factor_local\",{\"_index\":556,\"name\":{\"1450\":{}},\"comment\":{}}],[\"load_factor_net\",{\"_index\":557,\"name\":{\"1451\":{}},\"comment\":{}}],[\"load_factor_server\",{\"_index\":561,\"name\":{\"1455\":{},\"1525\":{}},\"comment\":{}}],[\"load_fee\",{\"_index\":497,\"name\":{\"1276\":{}},\"comment\":{}}],[\"lockingchaindoor\",{\"_index\":820,\"name\":{\"2816\":{}},\"comment\":{}}],[\"lockingchainissue\",{\"_index\":821,\"name\":{\"2817\":{}},\"comment\":{}}],[\"lowest_sequence\",{\"_index\":312,\"name\":{\"559\":{}},\"comment\":{}}],[\"lowlimit\",{\"_index\":212,\"name\":{\"355\":{}},\"comment\":{}}],[\"lownode\",{\"_index\":214,\"name\":{\"357\":{}},\"comment\":{}}],[\"lowqualityin\",{\"_index\":216,\"name\":{\"359\":{}},\"comment\":{}}],[\"lowqualityout\",{\"_index\":217,\"name\":{\"360\":{}},\"comment\":{}}],[\"lp_token\",{\"_index\":625,\"name\":{\"1720\":{}},\"comment\":{}}],[\"lptokenbalance\",{\"_index\":115,\"name\":{\"145\":{}},\"comment\":{}}],[\"lptokenin\",{\"_index\":687,\"name\":{\"1954\":{}},\"comment\":{}}],[\"lptokenout\",{\"_index\":679,\"name\":{\"1881\":{}},\"comment\":{}}],[\"lsfallowtrustlineclawback\",{\"_index\":102,\"name\":{\"107\":{},\"123\":{}},\"comment\":{}}],[\"lsfamm\",{\"_index\":97,\"name\":{\"102\":{},\"118\":{}},\"comment\":{}}],[\"lsfdefaultripple\",{\"_index\":95,\"name\":{\"100\":{},\"116\":{}},\"comment\":{}}],[\"lsfdepositauth\",{\"_index\":96,\"name\":{\"101\":{},\"117\":{}},\"comment\":{}}],[\"lsfdisablemaster\",{\"_index\":92,\"name\":{\"97\":{},\"113\":{}},\"comment\":{}}],[\"lsfdisallowincomingcheck\",{\"_index\":99,\"name\":{\"104\":{},\"120\":{}},\"comment\":{}}],[\"lsfdisallowincomingnftokenoffer\",{\"_index\":98,\"name\":{\"103\":{},\"119\":{}},\"comment\":{}}],[\"lsfdisallowincomingpaychan\",{\"_index\":100,\"name\":{\"105\":{},\"121\":{}},\"comment\":{}}],[\"lsfdisallowincomingtrustline\",{\"_index\":101,\"name\":{\"106\":{},\"122\":{}},\"comment\":{}}],[\"lsfdisallowxrp\",{\"_index\":91,\"name\":{\"96\":{},\"112\":{}},\"comment\":{}}],[\"lsfglobalfreeze\",{\"_index\":94,\"name\":{\"99\":{},\"115\":{}},\"comment\":{}}],[\"lsfhighauth\",{\"_index\":224,\"name\":{\"370\":{}},\"comment\":{}}],[\"lsfhighfreeze\",{\"_index\":228,\"name\":{\"374\":{}},\"comment\":{}}],[\"lsfhighnoripple\",{\"_index\":226,\"name\":{\"372\":{}},\"comment\":{}}],[\"lsfhighreserve\",{\"_index\":222,\"name\":{\"368\":{}},\"comment\":{}}],[\"lsflowauth\",{\"_index\":223,\"name\":{\"369\":{}},\"comment\":{}}],[\"lsflowfreeze\",{\"_index\":227,\"name\":{\"373\":{}},\"comment\":{}}],[\"lsflownoripple\",{\"_index\":225,\"name\":{\"371\":{}},\"comment\":{}}],[\"lsflowreserve\",{\"_index\":221,\"name\":{\"367\":{}},\"comment\":{}}],[\"lsfnofreeze\",{\"_index\":93,\"name\":{\"98\":{},\"114\":{}},\"comment\":{}}],[\"lsfoneownercount\",{\"_index\":234,\"name\":{\"386\":{}},\"comment\":{}}],[\"lsfpassive\",{\"_index\":207,\"name\":{\"331\":{}},\"comment\":{}}],[\"lsfpasswordspent\",{\"_index\":88,\"name\":{\"93\":{},\"109\":{}},\"comment\":{}}],[\"lsfrequireauth\",{\"_index\":90,\"name\":{\"95\":{},\"111\":{}},\"comment\":{}}],[\"lsfrequiredesttag\",{\"_index\":89,\"name\":{\"94\":{},\"110\":{}},\"comment\":{}}],[\"lsfsell\",{\"_index\":208,\"name\":{\"332\":{}},\"comment\":{}}],[\"majorities\",{\"_index\":106,\"name\":{\"128\":{}},\"comment\":{}}],[\"majority\",{\"_index\":183,\"name\":{\"274\":{},\"275\":{}},\"comment\":{}}],[\"manifest\",{\"_index\":530,\"name\":{\"1394\":{}},\"comment\":{}}],[\"manifestrequest\",{\"_index\":527,\"name\":{\"1380\":{}},\"comment\":{}}],[\"manifestresponse\",{\"_index\":528,\"name\":{\"1385\":{}},\"comment\":{}}],[\"marker\",{\"_index\":277,\"name\":{\"470\":{},\"484\":{},\"574\":{},\"587\":{},\"620\":{},\"632\":{},\"649\":{},\"663\":{},\"683\":{},\"697\":{},\"713\":{},\"725\":{},\"882\":{},\"897\":{},\"1667\":{},\"1679\":{}},\"comment\":{}}],[\"markerrequest\",{\"_index\":248,\"name\":{\"429\":{}},\"comment\":{}}],[\"markerresponse\",{\"_index\":249,\"name\":{\"430\":{}},\"comment\":{}}],[\"master_key\",{\"_index\":498,\"name\":{\"1277\":{},\"1392\":{}},\"comment\":{}}],[\"max_ledger\",{\"_index\":436,\"name\":{\"1036\":{}},\"comment\":{}}],[\"max_queue_size\",{\"_index\":526,\"name\":{\"1372\":{}},\"comment\":{}}],[\"max_spend_drops\",{\"_index\":319,\"name\":{\"567\":{},\"828\":{}},\"comment\":{}}],[\"max_spend_drops_total\",{\"_index\":314,\"name\":{\"561\":{}},\"comment\":{}}],[\"maxfeexrp\",{\"_index\":4,\"name\":{\"4\":{},\"27\":{}},\"comment\":{}}],[\"median_fee\",{\"_index\":517,\"name\":{\"1361\":{}},\"comment\":{}}],[\"median_level\",{\"_index\":522,\"name\":{\"1368\":{}},\"comment\":{}}],[\"memo\",{\"_index\":803,\"name\":{\"2770\":{},\"2771\":{}},\"comment\":{}}],[\"memodata\",{\"_index\":804,\"name\":{\"2773\":{}},\"comment\":{}}],[\"memoformat\",{\"_index\":806,\"name\":{\"2775\":{}},\"comment\":{}}],[\"memos\",{\"_index\":630,\"name\":{\"1741\":{},\"1801\":{},\"1818\":{},\"1838\":{},\"1855\":{},\"1888\":{},\"1906\":{},\"1924\":{},\"1961\":{},\"1977\":{},\"1995\":{},\"2015\":{},\"2031\":{},\"2046\":{},\"2064\":{},\"2081\":{},\"2098\":{},\"2119\":{},\"2138\":{},\"2155\":{},\"2176\":{},\"2193\":{},\"2209\":{},\"2229\":{},\"2252\":{},\"2278\":{},\"2307\":{},\"2337\":{},\"2363\":{},\"2384\":{},\"2402\":{},\"2422\":{},\"2440\":{},\"2456\":{},\"2473\":{},\"2489\":{},\"2519\":{},\"2537\":{},\"2563\":{},\"2588\":{},\"2608\":{},\"2627\":{},\"2645\":{},\"2663\":{},\"2682\":{},\"2700\":{}},\"comment\":{}}],[\"memotype\",{\"_index\":805,\"name\":{\"2774\":{}},\"comment\":{}}],[\"message\",{\"_index\":264,\"name\":{\"449\":{},\"2885\":{},\"2892\":{},\"2899\":{},\"2906\":{},\"2913\":{},\"2920\":{},\"2927\":{},\"2934\":{},\"2941\":{},\"2948\":{},\"2955\":{},\"2962\":{}},\"comment\":{}}],[\"messagekey\",{\"_index\":74,\"name\":{\"79\":{},\"1791\":{}},\"comment\":{}}],[\"meta\",{\"_index\":361,\"name\":{\"737\":{},\"1292\":{},\"1322\":{},\"1691\":{}},\"comment\":{}}],[\"metadata\",{\"_index\":388,\"name\":{\"846\":{},\"1021\":{},\"1753\":{}},\"comment\":{}}],[\"min_ledger\",{\"_index\":435,\"name\":{\"1035\":{}},\"comment\":{}}],[\"minaccountcreateamount\",{\"_index\":124,\"name\":{\"160\":{},\"2638\":{},\"2693\":{}},\"comment\":{}}],[\"minimum_fee\",{\"_index\":518,\"name\":{\"1362\":{}},\"comment\":{}}],[\"minimum_level\",{\"_index\":523,\"name\":{\"1369\":{}},\"comment\":{}}],[\"mintednftokens\",{\"_index\":82,\"name\":{\"87\":{}},\"comment\":{}}],[\"modifiednode\",{\"_index\":788,\"name\":{\"2721\":{},\"2722\":{}},\"comment\":{}}],[\"multisign\",{\"_index\":882,\"name\":{\"2967\":{}},\"comment\":{}}],[\"name\",{\"_index\":867,\"name\":{\"2884\":{},\"2891\":{},\"2898\":{},\"2905\":{},\"2912\":{},\"2919\":{},\"2926\":{},\"2933\":{},\"2940\":{},\"2947\":{},\"2954\":{},\"2961\":{}},\"comment\":{}}],[\"negative_unl_id\",{\"_index\":186,\"name\":{\"279\":{}},\"comment\":{}}],[\"negativeunl\",{\"_index\":187,\"name\":{\"280\":{}},\"comment\":{}}],[\"network_id\",{\"_index\":555,\"name\":{\"1449\":{}},\"comment\":{}}],[\"network_ledger\",{\"_index\":564,\"name\":{\"1458\":{}},\"comment\":{}}],[\"networkid\",{\"_index\":5,\"name\":{\"5\":{},\"1747\":{},\"1807\":{},\"1824\":{},\"1844\":{},\"1861\":{},\"1894\":{},\"1912\":{},\"1930\":{},\"1967\":{},\"1983\":{},\"2001\":{},\"2021\":{},\"2037\":{},\"2052\":{},\"2070\":{},\"2087\":{},\"2104\":{},\"2125\":{},\"2144\":{},\"2161\":{},\"2182\":{},\"2199\":{},\"2215\":{},\"2235\":{},\"2258\":{},\"2284\":{},\"2313\":{},\"2343\":{},\"2369\":{},\"2390\":{},\"2408\":{},\"2428\":{},\"2446\":{},\"2462\":{},\"2479\":{},\"2495\":{},\"2525\":{},\"2543\":{},\"2569\":{},\"2594\":{},\"2614\":{},\"2633\":{},\"2651\":{},\"2669\":{},\"2688\":{},\"2706\":{}},\"comment\":{}}],[\"newfields\",{\"_index\":787,\"name\":{\"2719\":{}},\"comment\":{}}],[\"nextpagemin\",{\"_index\":194,\"name\":{\"302\":{}},\"comment\":{}}],[\"nft_id\",{\"_index\":606,\"name\":{\"1607\":{},\"1616\":{},\"1626\":{},\"1635\":{},\"1645\":{},\"1661\":{},\"1675\":{},\"2801\":{}},\"comment\":{}}],[\"nft_offer_index\",{\"_index\":815,\"name\":{\"2796\":{}},\"comment\":{}}],[\"nft_page\",{\"_index\":405,\"name\":{\"934\":{}},\"comment\":{}}],[\"nft_serial\",{\"_index\":337,\"name\":{\"615\":{},\"2809\":{}},\"comment\":{}}],[\"nft_taxon\",{\"_index\":818,\"name\":{\"2808\":{}},\"comment\":{}}],[\"nftbuyoffersrequest\",{\"_index\":605,\"name\":{\"1605\":{}},\"comment\":{}}],[\"nftbuyoffersresponse\",{\"_index\":607,\"name\":{\"1612\":{}},\"comment\":{}}],[\"nfthistoryrequest\",{\"_index\":612,\"name\":{\"1659\":{}},\"comment\":{}}],[\"nfthistoryresponse\",{\"_index\":613,\"name\":{\"1672\":{}},\"comment\":{}}],[\"nfthistorytransaction\",{\"_index\":614,\"name\":{\"1689\":{}},\"comment\":{}}],[\"nftinforequest\",{\"_index\":610,\"name\":{\"1643\":{}},\"comment\":{}}],[\"nftinforesponse\",{\"_index\":611,\"name\":{\"1650\":{}},\"comment\":{}}],[\"nftoffer\",{\"_index\":814,\"name\":{\"2793\":{}},\"comment\":{}}],[\"nftoken\",{\"_index\":197,\"name\":{\"308\":{},\"309\":{},\"2800\":{}},\"comment\":{}}],[\"nftokenacceptoffer\",{\"_index\":707,\"name\":{\"2165\":{}},\"comment\":{}}],[\"nftokenbrokerfee\",{\"_index\":710,\"name\":{\"2169\":{}},\"comment\":{}}],[\"nftokenburn\",{\"_index\":711,\"name\":{\"2183\":{}},\"comment\":{}}],[\"nftokenbuyoffer\",{\"_index\":709,\"name\":{\"2168\":{}},\"comment\":{}}],[\"nftokencanceloffer\",{\"_index\":712,\"name\":{\"2200\":{}},\"comment\":{}}],[\"nftokencreateoffer\",{\"_index\":714,\"name\":{\"2216\":{}},\"comment\":{}}],[\"nftokencreateofferflags\",{\"_index\":715,\"name\":{\"2236\":{}},\"comment\":{}}],[\"nftokencreateofferflagsinterface\",{\"_index\":717,\"name\":{\"2238\":{}},\"comment\":{}}],[\"nftokenid\",{\"_index\":199,\"name\":{\"313\":{},\"612\":{},\"2186\":{},\"2218\":{},\"2875\":{}},\"comment\":{}}],[\"nftokenmint\",{\"_index\":718,\"name\":{\"2240\":{}},\"comment\":{}}],[\"nftokenminter\",{\"_index\":83,\"name\":{\"88\":{},\"1795\":{}},\"comment\":{}}],[\"nftokenmintflags\",{\"_index\":720,\"name\":{\"2259\":{}},\"comment\":{}}],[\"nftokenmintflagsinterface\",{\"_index\":725,\"name\":{\"2264\":{}},\"comment\":{}}],[\"nftokenoffer\",{\"_index\":191,\"name\":{\"288\":{}},\"comment\":{}}],[\"nftokenoffernode\",{\"_index\":192,\"name\":{\"294\":{}},\"comment\":{}}],[\"nftokenoffers\",{\"_index\":713,\"name\":{\"2202\":{}},\"comment\":{}}],[\"nftokenpage\",{\"_index\":193,\"name\":{\"300\":{}},\"comment\":{}}],[\"nftokens\",{\"_index\":195,\"name\":{\"303\":{}},\"comment\":{}}],[\"nftokenselloffer\",{\"_index\":708,\"name\":{\"2167\":{}},\"comment\":{}}],[\"nftokentaxon\",{\"_index\":200,\"name\":{\"314\":{},\"613\":{},\"2242\":{}},\"comment\":{}}],[\"nftselloffersrequest\",{\"_index\":608,\"name\":{\"1624\":{}},\"comment\":{}}],[\"nftselloffersresponse\",{\"_index\":609,\"name\":{\"1631\":{}},\"comment\":{}}],[\"no_ripple\",{\"_index\":330,\"name\":{\"603\":{}},\"comment\":{}}],[\"no_ripple_peer\",{\"_index\":331,\"name\":{\"604\":{}},\"comment\":{}}],[\"node\",{\"_index\":410,\"name\":{\"948\":{},\"2739\":{}},\"comment\":{}}],[\"node_binary\",{\"_index\":411,\"name\":{\"949\":{}},\"comment\":{}}],[\"nofreeze\",{\"_index\":296,\"name\":{\"525\":{}},\"comment\":{}}],[\"noripplecheckrequest\",{\"_index\":371,\"name\":{\"773\":{}},\"comment\":{}}],[\"noripplecheckresponse\",{\"_index\":373,\"name\":{\"783\":{}},\"comment\":{}}],[\"notconnectederror\",{\"_index\":873,\"name\":{\"2910\":{}},\"comment\":{}}],[\"notfounderror\",{\"_index\":879,\"name\":{\"2952\":{}},\"comment\":{}}],[\"obligations\",{\"_index\":368,\"name\":{\"757\":{}},\"comment\":{}}],[\"offer\",{\"_index\":201,\"name\":{\"316\":{},\"927\":{}},\"comment\":{}}],[\"offercancel\",{\"_index\":726,\"name\":{\"2269\":{}},\"comment\":{}}],[\"offercreate\",{\"_index\":733,\"name\":{\"2295\":{}},\"comment\":{}}],[\"offercreateflags\",{\"_index\":727,\"name\":{\"2285\":{}},\"comment\":{}}],[\"offercreateflagsinterface\",{\"_index\":732,\"name\":{\"2290\":{}},\"comment\":{}}],[\"offerflags\",{\"_index\":206,\"name\":{\"330\":{}},\"comment\":{}}],[\"offers\",{\"_index\":353,\"name\":{\"693\":{},\"1086\":{},\"1615\":{},\"1634\":{}},\"comment\":{}}],[\"offersequence\",{\"_index\":698,\"name\":{\"2091\":{},\"2129\":{},\"2271\":{},\"2299\":{}},\"comment\":{}}],[\"on\",{\"_index\":10,\"name\":{\"10\":{}},\"comment\":{}}],[\"open_ledger_cost\",{\"_index\":426,\"name\":{\"979\":{}},\"comment\":{}}],[\"open_ledger_fee\",{\"_index\":519,\"name\":{\"1363\":{}},\"comment\":{}}],[\"open_ledger_level\",{\"_index\":524,\"name\":{\"1370\":{}},\"comment\":{}}],[\"orderbookstream\",{\"_index\":506,\"name\":{\"1313\":{}},\"comment\":{}}],[\"otherchaindestination\",{\"_index\":774,\"name\":{\"2619\":{}},\"comment\":{}}],[\"otherchainsource\",{\"_index\":238,\"name\":{\"401\":{},\"2550\":{},\"2576\":{},\"2656\":{}},\"comment\":{}}],[\"owner\",{\"_index\":140,\"name\":{\"198\":{},\"295\":{},\"2090\":{},\"2128\":{},\"2187\":{},\"2220\":{},\"2797\":{},\"2803\":{}},\"comment\":{}}],[\"owner_funds\",{\"_index\":379,\"name\":{\"802\":{},\"1060\":{}},\"comment\":{}}],[\"ownercount\",{\"_index\":68,\"name\":{\"73\":{}},\"comment\":{}}],[\"ownernode\",{\"_index\":125,\"name\":{\"162\":{},\"171\":{},\"187\":{},\"213\":{},\"228\":{},\"296\":{},\"325\":{},\"341\":{},\"378\":{},\"391\":{},\"405\":{},\"416\":{},\"1072\":{}},\"comment\":{}}],[\"parent_close_time\",{\"_index\":174,\"name\":{\"259\":{},\"840\":{}},\"comment\":{}}],[\"parent_hash\",{\"_index\":175,\"name\":{\"260\":{},\"841\":{}},\"comment\":{}}],[\"parseaccountrootflags\",{\"_index\":246,\"name\":{\"427\":{}},\"comment\":{}}],[\"parsenftokenid\",{\"_index\":863,\"name\":{\"2873\":{}},\"comment\":{}}],[\"passwordspent\",{\"_index\":297,\"name\":{\"526\":{}},\"comment\":{}}],[\"path\",{\"_index\":809,\"name\":{\"2781\":{}},\"comment\":{}}],[\"pathfindcloserequest\",{\"_index\":456,\"name\":{\"1131\":{}},\"comment\":{}}],[\"pathfindcreaterequest\",{\"_index\":451,\"name\":{\"1121\":{}},\"comment\":{}}],[\"pathfindpathoption\",{\"_index\":457,\"name\":{\"1136\":{}},\"comment\":{}}],[\"pathfindrequest\",{\"_index\":450,\"name\":{\"1120\":{}},\"comment\":{}}],[\"pathfindresponse\",{\"_index\":461,\"name\":{\"1145\":{}},\"comment\":{}}],[\"pathfindstatusrequest\",{\"_index\":460,\"name\":{\"1140\":{}},\"comment\":{}}],[\"pathfindstream\",{\"_index\":502,\"name\":{\"1296\":{}},\"comment\":{}}],[\"paths\",{\"_index\":455,\"name\":{\"1127\":{},\"2328\":{}},\"comment\":{}}],[\"paths_computed\",{\"_index\":458,\"name\":{\"1137\":{},\"1164\":{}},\"comment\":{}}],[\"pathstep\",{\"_index\":808,\"name\":{\"2777\":{}},\"comment\":{}}],[\"paychannel\",{\"_index\":209,\"name\":{\"333\":{}},\"comment\":{}}],[\"payment\",{\"_index\":739,\"name\":{\"2322\":{}},\"comment\":{}}],[\"payment_channel\",{\"_index\":403,\"name\":{\"928\":{}},\"comment\":{}}],[\"paymentchannelclaim\",{\"_index\":744,\"name\":{\"2350\":{}},\"comment\":{}}],[\"paymentchannelclaimflags\",{\"_index\":740,\"name\":{\"2344\":{}},\"comment\":{}}],[\"paymentchannelclaimflagsinterface\",{\"_index\":743,\"name\":{\"2347\":{}},\"comment\":{}}],[\"paymentchannelcreate\",{\"_index\":745,\"name\":{\"2370\":{}},\"comment\":{}}],[\"paymentchannelfund\",{\"_index\":746,\"name\":{\"2391\":{}},\"comment\":{}}],[\"paymentflags\",{\"_index\":734,\"name\":{\"2314\":{}},\"comment\":{}}],[\"paymentflagsinterface\",{\"_index\":738,\"name\":{\"2318\":{}},\"comment\":{}}],[\"peak_time\",{\"_index\":587,\"name\":{\"1557\":{}},\"comment\":{}}],[\"peer\",{\"_index\":322,\"name\":{\"572\":{}},\"comment\":{}}],[\"peer_authorized\",{\"_index\":333,\"name\":{\"606\":{}},\"comment\":{}}],[\"peer_disconnects\",{\"_index\":562,\"name\":{\"1456\":{},\"1526\":{}},\"comment\":{}}],[\"peer_disconnects_resources\",{\"_index\":563,\"name\":{\"1457\":{},\"1527\":{}},\"comment\":{}}],[\"peers\",{\"_index\":565,\"name\":{\"1459\":{},\"1528\":{}},\"comment\":{}}],[\"peerstatusstream\",{\"_index\":503,\"name\":{\"1305\":{}},\"comment\":{}}],[\"per_second\",{\"_index\":586,\"name\":{\"1556\":{}},\"comment\":{}}],[\"percenttoquality\",{\"_index\":832,\"name\":{\"2828\":{}},\"comment\":{}}],[\"percenttotransferrate\",{\"_index\":834,\"name\":{\"2830\":{}},\"comment\":{}}],[\"pingrequest\",{\"_index\":595,\"name\":{\"1565\":{}},\"comment\":{}}],[\"pingresponse\",{\"_index\":596,\"name\":{\"1569\":{}},\"comment\":{}}],[\"ports\",{\"_index\":566,\"name\":{\"1460\":{}},\"comment\":{}}],[\"preflight_result\",{\"_index\":383,\"name\":{\"823\":{}},\"comment\":{}}],[\"preparetransaction\",{\"_index\":19,\"name\":{\"19\":{}},\"comment\":{}}],[\"previousfields\",{\"_index\":790,\"name\":{\"2728\":{}},\"comment\":{}}],[\"previouspagemin\",{\"_index\":196,\"name\":{\"304\":{}},\"comment\":{}}],[\"previoustxnid\",{\"_index\":85,\"name\":{\"90\":{},\"131\":{},\"150\":{},\"164\":{},\"172\":{},\"189\":{},\"204\":{},\"215\":{},\"231\":{},\"238\":{},\"272\":{},\"286\":{},\"298\":{},\"306\":{},\"328\":{},\"349\":{},\"364\":{},\"383\":{},\"394\":{},\"407\":{},\"418\":{},\"1075\":{},\"2730\":{}},\"comment\":{}}],[\"previoustxnlgrseq\",{\"_index\":86,\"name\":{\"91\":{},\"132\":{},\"151\":{},\"165\":{},\"173\":{},\"190\":{},\"205\":{},\"216\":{},\"232\":{},\"239\":{},\"273\":{},\"287\":{},\"299\":{},\"307\":{},\"329\":{},\"350\":{},\"365\":{},\"384\":{},\"395\":{},\"408\":{},\"419\":{},\"1076\":{},\"2731\":{}},\"comment\":{}}],[\"price\",{\"_index\":114,\"name\":{\"144\":{},\"1718\":{}},\"comment\":{}}],[\"privatekey\",{\"_index\":50,\"name\":{\"54\":{}},\"comment\":{}}],[\"problems\",{\"_index\":374,\"name\":{\"787\":{}},\"comment\":{}}],[\"proposers\",{\"_index\":550,\"name\":{\"1443\":{},\"1515\":{}},\"comment\":{}}],[\"pseudotransaction\",{\"_index\":635,\"name\":{\"1749\":{}},\"comment\":{}}],[\"pubkey_node\",{\"_index\":567,\"name\":{\"1461\":{},\"1529\":{}},\"comment\":{}}],[\"pubkey_validator\",{\"_index\":568,\"name\":{\"1462\":{},\"1530\":{}},\"comment\":{}}],[\"public_key\",{\"_index\":270,\"name\":{\"459\":{},\"1203\":{},\"1382\":{}},\"comment\":{}}],[\"public_key_hex\",{\"_index\":271,\"name\":{\"460\":{}},\"comment\":{}}],[\"publickey\",{\"_index\":49,\"name\":{\"53\":{},\"339\":{},\"2357\":{},\"2375\":{},\"2551\":{},\"2577\":{}},\"comment\":{}}],[\"quality\",{\"_index\":350,\"name\":{\"677\":{},\"1063\":{}},\"comment\":{}}],[\"quality_in\",{\"_index\":328,\"name\":{\"601\":{}},\"comment\":{}}],[\"quality_out\",{\"_index\":329,\"name\":{\"602\":{}},\"comment\":{}}],[\"qualityin\",{\"_index\":762,\"name\":{\"2511\":{}},\"comment\":{}}],[\"qualityout\",{\"_index\":763,\"name\":{\"2512\":{}},\"comment\":{}}],[\"qualitytodecimal\",{\"_index\":837,\"name\":{\"2833\":{}},\"comment\":{}}],[\"queue\",{\"_index\":302,\"name\":{\"533\":{},\"804\":{}},\"comment\":{}}],[\"queue_data\",{\"_index\":308,\"name\":{\"547\":{}},\"comment\":{}}],[\"queued\",{\"_index\":425,\"name\":{\"978\":{}},\"comment\":{}}],[\"random\",{\"_index\":600,\"name\":{\"1588\":{}},\"comment\":{}}],[\"randomrequest\",{\"_index\":598,\"name\":{\"1581\":{}},\"comment\":{}}],[\"randomresponse\",{\"_index\":599,\"name\":{\"1585\":{}},\"comment\":{}}],[\"receive_currencies\",{\"_index\":284,\"name\":{\"505\":{}},\"comment\":{}}],[\"reference_level\",{\"_index\":525,\"name\":{\"1371\":{}},\"comment\":{}}],[\"referencefeeunits\",{\"_index\":157,\"name\":{\"242\":{},\"2412\":{}},\"comment\":{}}],[\"regularkey\",{\"_index\":75,\"name\":{\"80\":{},\"2449\":{}},\"comment\":{}}],[\"request\",{\"_index\":8,\"name\":{\"8\":{},\"445\":{},\"1603\":{}},\"comment\":{}}],[\"requestall\",{\"_index\":11,\"name\":{\"11\":{}},\"comment\":{}}],[\"requestallresponsemap\",{\"_index\":250,\"name\":{\"431\":{}},\"comment\":{}}],[\"requested\",{\"_index\":531,\"name\":{\"1395\":{}},\"comment\":{}}],[\"requestnextpage\",{\"_index\":9,\"name\":{\"9\":{}},\"comment\":{}}],[\"requestresponsemap\",{\"_index\":247,\"name\":{\"428\":{}},\"comment\":{}}],[\"requireauthorization\",{\"_index\":298,\"name\":{\"527\":{}},\"comment\":{}}],[\"requiredestinationtag\",{\"_index\":299,\"name\":{\"528\":{}},\"comment\":{}}],[\"reserve_base\",{\"_index\":490,\"name\":{\"1253\":{},\"1263\":{},\"1278\":{},\"1507\":{},\"1542\":{}},\"comment\":{}}],[\"reserve_base_xrp\",{\"_index\":542,\"name\":{\"1433\":{},\"1473\":{}},\"comment\":{}}],[\"reserve_inc\",{\"_index\":491,\"name\":{\"1254\":{},\"1264\":{},\"1279\":{},\"1508\":{},\"1543\":{}},\"comment\":{}}],[\"reserve_inc_xrp\",{\"_index\":543,\"name\":{\"1434\":{},\"1474\":{}},\"comment\":{}}],[\"reservebase\",{\"_index\":158,\"name\":{\"243\":{},\"2413\":{}},\"comment\":{}}],[\"reservebasedrops\",{\"_index\":162,\"name\":{\"247\":{},\"2431\":{}},\"comment\":{}}],[\"reserveincrement\",{\"_index\":159,\"name\":{\"244\":{},\"2414\":{}},\"comment\":{}}],[\"reserveincrementdrops\",{\"_index\":163,\"name\":{\"248\":{},\"2432\":{}},\"comment\":{}}],[\"response\",{\"_index\":262,\"name\":{\"446\":{}},\"comment\":{}}],[\"responseformaterror\",{\"_index\":877,\"name\":{\"2938\":{}},\"comment\":{}}],[\"responseonlytxinfo\",{\"_index\":812,\"name\":{\"2788\":{}},\"comment\":{}}],[\"responsewarning\",{\"_index\":263,\"name\":{\"447\":{}},\"comment\":{}}],[\"result\",{\"_index\":258,\"name\":{\"440\":{},\"476\":{},\"501\":{},\"541\":{},\"580\":{},\"626\":{},\"655\":{},\"690\":{},\"719\":{},\"754\":{},\"784\":{},\"811\":{},\"852\":{},\"868\":{},\"892\":{},\"944\":{},\"965\":{},\"995\":{},\"1017\":{},\"1040\":{},\"1081\":{},\"1104\":{},\"1146\":{},\"1178\":{},\"1208\":{},\"1230\":{},\"1337\":{},\"1354\":{},\"1386\":{},\"1409\":{},\"1422\":{},\"1495\":{},\"1570\":{},\"1586\":{},\"1613\":{},\"1632\":{},\"1651\":{},\"1673\":{},\"1703\":{}},\"comment\":{}}],[\"retries_remaining\",{\"_index\":382,\"name\":{\"822\":{}},\"comment\":{}}],[\"rfc1751mnemonictokey\",{\"_index\":61,\"name\":{\"66\":{}},\"comment\":{}}],[\"ripple_state\",{\"_index\":404,\"name\":{\"929\":{}},\"comment\":{}}],[\"ripplederror\",{\"_index\":872,\"name\":{\"2903\":{}},\"comment\":{}}],[\"ripplednotinitializederror\",{\"_index\":875,\"name\":{\"2924\":{}},\"comment\":{}}],[\"ripplepathfindpathoption\",{\"_index\":464,\"name\":{\"1163\":{}},\"comment\":{}}],[\"ripplepathfindrequest\",{\"_index\":465,\"name\":{\"1166\":{}},\"comment\":{}}],[\"ripplepathfindresponse\",{\"_index\":467,\"name\":{\"1177\":{}},\"comment\":{}}],[\"ripplestate\",{\"_index\":211,\"name\":{\"351\":{}},\"comment\":{}}],[\"ripplestateflags\",{\"_index\":220,\"name\":{\"366\":{}},\"comment\":{}}],[\"rippletimetoisotime\",{\"_index\":828,\"name\":{\"2824\":{}},\"comment\":{}}],[\"rippletimetounixtime\",{\"_index\":830,\"name\":{\"2826\":{}},\"comment\":{}}],[\"role\",{\"_index\":372,\"name\":{\"776\":{},\"1572\":{}},\"comment\":{}}],[\"rootindex\",{\"_index\":136,\"name\":{\"194\":{}},\"comment\":{}}],[\"searched_all\",{\"_index\":438,\"name\":{\"1041\":{}},\"comment\":{}}],[\"secp256k1\",{\"_index\":35,\"name\":{\"37\":{}},\"comment\":{}}],[\"seed\",{\"_index\":52,\"name\":{\"56\":{}},\"comment\":{}}],[\"send_currencies\",{\"_index\":285,\"name\":{\"506\":{}},\"comment\":{}}],[\"send_max\",{\"_index\":454,\"name\":{\"1126\":{},\"1171\":{},\"1303\":{}},\"comment\":{}}],[\"sendmax\",{\"_index\":128,\"name\":{\"174\":{},\"2005\":{},\"2329\":{}},\"comment\":{}}],[\"seq\",{\"_index\":320,\"name\":{\"568\":{},\"674\":{},\"1393\":{},\"1435\":{},\"1475\":{},\"1509\":{},\"1544\":{}},\"comment\":{}}],[\"sequence\",{\"_index\":69,\"name\":{\"74\":{},\"175\":{},\"320\":{},\"1067\":{},\"1737\":{},\"1798\":{},\"1814\":{},\"1834\":{},\"1851\":{},\"1884\":{},\"1902\":{},\"1920\":{},\"1957\":{},\"1973\":{},\"1991\":{},\"2011\":{},\"2027\":{},\"2042\":{},\"2060\":{},\"2077\":{},\"2094\":{},\"2115\":{},\"2134\":{},\"2151\":{},\"2172\":{},\"2189\":{},\"2205\":{},\"2226\":{},\"2249\":{},\"2274\":{},\"2304\":{},\"2334\":{},\"2360\":{},\"2380\":{},\"2398\":{},\"2418\":{},\"2436\":{},\"2452\":{},\"2469\":{},\"2485\":{},\"2516\":{},\"2533\":{},\"2559\":{},\"2584\":{},\"2604\":{},\"2623\":{},\"2641\":{},\"2659\":{},\"2678\":{},\"2697\":{},\"2880\":{}},\"comment\":{}}],[\"server_state\",{\"_index\":569,\"name\":{\"1463\":{},\"1531\":{}},\"comment\":{}}],[\"server_state_duration_us\",{\"_index\":570,\"name\":{\"1464\":{},\"1532\":{}},\"comment\":{}}],[\"serverdefinitionsrequest\",{\"_index\":532,\"name\":{\"1403\":{}},\"comment\":{}}],[\"serverdefinitionsresponse\",{\"_index\":533,\"name\":{\"1408\":{}},\"comment\":{}}],[\"serverinforequest\",{\"_index\":534,\"name\":{\"1417\":{}},\"comment\":{}}],[\"serverinforesponse\",{\"_index\":535,\"name\":{\"1421\":{}},\"comment\":{}}],[\"serverstate\",{\"_index\":590,\"name\":{\"1560\":{}},\"comment\":{}}],[\"serverstaterequest\",{\"_index\":579,\"name\":{\"1490\":{}},\"comment\":{}}],[\"serverstateresponse\",{\"_index\":580,\"name\":{\"1494\":{}},\"comment\":{}}],[\"setfee\",{\"_index\":747,\"name\":{\"2409\":{}},\"comment\":{}}],[\"setfeepostamendment\",{\"_index\":749,\"name\":{\"2429\":{}},\"comment\":{}}],[\"setfeepreamendment\",{\"_index\":748,\"name\":{\"2410\":{}},\"comment\":{}}],[\"setflag\",{\"_index\":664,\"name\":{\"1792\":{}},\"comment\":{}}],[\"setregularkey\",{\"_index\":750,\"name\":{\"2447\":{}},\"comment\":{}}],[\"settle_delay\",{\"_index\":269,\"name\":{\"458\":{}},\"comment\":{}}],[\"settledelay\",{\"_index\":210,\"name\":{\"340\":{},\"2374\":{}},\"comment\":{}}],[\"settransactionflagstonumber\",{\"_index\":245,\"name\":{\"426\":{}},\"comment\":{}}],[\"sign\",{\"_index\":54,\"name\":{\"58\":{}},\"comment\":{}}],[\"signature\",{\"_index\":471,\"name\":{\"1204\":{},\"1280\":{},\"2356\":{},\"2552\":{},\"2578\":{}},\"comment\":{}}],[\"signature_verified\",{\"_index\":473,\"name\":{\"1210\":{}},\"comment\":{}}],[\"signaturereward\",{\"_index\":119,\"name\":{\"155\":{},\"403\":{},\"2553\":{},\"2637\":{},\"2655\":{},\"2673\":{},\"2692\":{}},\"comment\":{}}],[\"signer\",{\"_index\":802,\"name\":{\"2764\":{},\"2765\":{}},\"comment\":{}}],[\"signer_lists\",{\"_index\":303,\"name\":{\"534\":{}},\"comment\":{}}],[\"signerentries\",{\"_index\":230,\"name\":{\"379\":{},\"2466\":{}},\"comment\":{}}],[\"signerentry\",{\"_index\":810,\"name\":{\"2782\":{},\"2783\":{}},\"comment\":{}}],[\"signerlist\",{\"_index\":229,\"name\":{\"375\":{}},\"comment\":{}}],[\"signerlistflags\",{\"_index\":233,\"name\":{\"385\":{}},\"comment\":{}}],[\"signerlistid\",{\"_index\":231,\"name\":{\"380\":{}},\"comment\":{}}],[\"signerlistset\",{\"_index\":751,\"name\":{\"2463\":{}},\"comment\":{}}],[\"signerquorum\",{\"_index\":232,\"name\":{\"381\":{},\"2465\":{}},\"comment\":{}}],[\"signers\",{\"_index\":631,\"name\":{\"1742\":{},\"1802\":{},\"1819\":{},\"1839\":{},\"1856\":{},\"1889\":{},\"1907\":{},\"1925\":{},\"1962\":{},\"1978\":{},\"1996\":{},\"2016\":{},\"2032\":{},\"2047\":{},\"2065\":{},\"2082\":{},\"2099\":{},\"2120\":{},\"2139\":{},\"2156\":{},\"2177\":{},\"2194\":{},\"2210\":{},\"2230\":{},\"2253\":{},\"2279\":{},\"2308\":{},\"2338\":{},\"2364\":{},\"2385\":{},\"2403\":{},\"2423\":{},\"2441\":{},\"2457\":{},\"2474\":{},\"2490\":{},\"2520\":{},\"2538\":{},\"2564\":{},\"2589\":{},\"2609\":{},\"2628\":{},\"2646\":{},\"2664\":{},\"2683\":{},\"2701\":{}},\"comment\":{}}],[\"signerweight\",{\"_index\":811,\"name\":{\"2786\":{}},\"comment\":{}}],[\"signing_time\",{\"_index\":499,\"name\":{\"1281\":{}},\"comment\":{}}],[\"signingpubkey\",{\"_index\":632,\"name\":{\"1744\":{},\"1804\":{},\"1821\":{},\"1841\":{},\"1858\":{},\"1891\":{},\"1909\":{},\"1927\":{},\"1964\":{},\"1980\":{},\"1998\":{},\"2018\":{},\"2034\":{},\"2049\":{},\"2067\":{},\"2084\":{},\"2101\":{},\"2122\":{},\"2141\":{},\"2158\":{},\"2179\":{},\"2196\":{},\"2212\":{},\"2232\":{},\"2255\":{},\"2281\":{},\"2310\":{},\"2340\":{},\"2366\":{},\"2387\":{},\"2405\":{},\"2425\":{},\"2443\":{},\"2459\":{},\"2476\":{},\"2492\":{},\"2522\":{},\"2540\":{},\"2566\":{},\"2591\":{},\"2611\":{},\"2630\":{},\"2648\":{},\"2666\":{},\"2685\":{},\"2703\":{},\"2769\":{}},\"comment\":{}}],[\"signpaymentchannelclaim\",{\"_index\":853,\"name\":{\"2863\":{}},\"comment\":{}}],[\"snapshot\",{\"_index\":482,\"name\":{\"1242\":{}},\"comment\":{}}],[\"source_account\",{\"_index\":447,\"name\":{\"1097\":{},\"1111\":{},\"1123\":{},\"1151\":{},\"1168\":{},\"1187\":{},\"1298\":{}},\"comment\":{}}],[\"source_amount\",{\"_index\":459,\"name\":{\"1138\":{},\"1165\":{}},\"comment\":{}}],[\"source_currencies\",{\"_index\":466,\"name\":{\"1172\":{}},\"comment\":{}}],[\"source_tab\",{\"_index\":273,\"name\":{\"463\":{}},\"comment\":{}}],[\"sourcecurrencyamount\",{\"_index\":469,\"name\":{\"1196\":{}},\"comment\":{}}],[\"sourcetag\",{\"_index\":132,\"name\":{\"180\":{},\"226\":{},\"345\":{},\"1743\":{},\"1803\":{},\"1820\":{},\"1840\":{},\"1857\":{},\"1890\":{},\"1908\":{},\"1926\":{},\"1963\":{},\"1979\":{},\"1997\":{},\"2017\":{},\"2033\":{},\"2048\":{},\"2066\":{},\"2083\":{},\"2100\":{},\"2121\":{},\"2140\":{},\"2157\":{},\"2178\":{},\"2195\":{},\"2211\":{},\"2231\":{},\"2254\":{},\"2280\":{},\"2309\":{},\"2339\":{},\"2365\":{},\"2386\":{},\"2404\":{},\"2424\":{},\"2442\":{},\"2458\":{},\"2475\":{},\"2491\":{},\"2521\":{},\"2539\":{},\"2565\":{},\"2590\":{},\"2610\":{},\"2629\":{},\"2647\":{},\"2665\":{},\"2684\":{},\"2702\":{}},\"comment\":{}}],[\"state\",{\"_index\":397,\"name\":{\"896\":{},\"1497\":{}},\"comment\":{}}],[\"state_accounting\",{\"_index\":571,\"name\":{\"1465\":{},\"1533\":{}},\"comment\":{}}],[\"stateaccounting\",{\"_index\":592,\"name\":{\"1562\":{}},\"comment\":{}}],[\"stateaccountingfinal\",{\"_index\":591,\"name\":{\"1561\":{}},\"comment\":{}}],[\"status\",{\"_index\":256,\"name\":{\"438\":{},\"486\":{},\"509\":{},\"550\":{},\"589\":{},\"635\":{},\"666\":{},\"699\":{},\"729\":{},\"767\":{},\"790\":{},\"813\":{},\"857\":{},\"872\":{},\"900\":{},\"952\":{},\"982\":{},\"1003\":{},\"1024\":{},\"1043\":{},\"1089\":{},\"1114\":{},\"1155\":{},\"1157\":{},\"1190\":{},\"1212\":{},\"1232\":{},\"1284\":{},\"1314\":{},\"1339\":{},\"1374\":{},\"1397\":{},\"1411\":{},\"1482\":{},\"1484\":{},\"1548\":{},\"1575\":{},\"1590\":{},\"1598\":{},\"1618\":{},\"1637\":{},\"1653\":{},\"1683\":{},\"1727\":{}},\"comment\":{}}],[\"stream\",{\"_index\":484,\"name\":{\"1244\":{}},\"comment\":{}}],[\"streams\",{\"_index\":475,\"name\":{\"1220\":{},\"1330\":{}},\"comment\":{}}],[\"streamtype\",{\"_index\":807,\"name\":{\"2776\":{}},\"comment\":{}}],[\"strict\",{\"_index\":282,\"name\":{\"495\":{},\"535\":{},\"684\":{},\"747\":{}},\"comment\":{}}],[\"subcommand\",{\"_index\":452,\"name\":{\"1122\":{},\"1132\":{},\"1141\":{}},\"comment\":{}}],[\"submit\",{\"_index\":17,\"name\":{\"17\":{}},\"comment\":{}}],[\"submitandwait\",{\"_index\":18,\"name\":{\"18\":{}},\"comment\":{}}],[\"submitmultisignedrequest\",{\"_index\":428,\"name\":{\"988\":{}},\"comment\":{}}],[\"submitmultisignedresponse\",{\"_index\":429,\"name\":{\"994\":{}},\"comment\":{}}],[\"submitrequest\",{\"_index\":412,\"name\":{\"958\":{}},\"comment\":{}}],[\"submitresponse\",{\"_index\":414,\"name\":{\"964\":{}},\"comment\":{}}],[\"submittabletransaction\",{\"_index\":636,\"name\":{\"1750\":{}},\"comment\":{}}],[\"subscribebook\",{\"_index\":481,\"name\":{\"1238\":{}},\"comment\":{}}],[\"subscriberequest\",{\"_index\":474,\"name\":{\"1218\":{}},\"comment\":{}}],[\"subscriberesponse\",{\"_index\":480,\"name\":{\"1229\":{}},\"comment\":{}}],[\"taker\",{\"_index\":440,\"name\":{\"1052\":{},\"1241\":{}},\"comment\":{}}],[\"taker_gets\",{\"_index\":348,\"name\":{\"675\":{},\"1053\":{},\"1239\":{},\"1346\":{}},\"comment\":{}}],[\"taker_gets_funded\",{\"_index\":442,\"name\":{\"1061\":{}},\"comment\":{}}],[\"taker_pays\",{\"_index\":349,\"name\":{\"676\":{},\"1054\":{},\"1240\":{},\"1347\":{}},\"comment\":{}}],[\"taker_pays_funded\",{\"_index\":443,\"name\":{\"1062\":{}},\"comment\":{}}],[\"takergets\",{\"_index\":203,\"name\":{\"322\":{},\"1069\":{},\"2300\":{}},\"comment\":{}}],[\"takergetscurrency\",{\"_index\":143,\"name\":{\"201\":{}},\"comment\":{}}],[\"takergetsissuer\",{\"_index\":144,\"name\":{\"202\":{}},\"comment\":{}}],[\"takerpays\",{\"_index\":202,\"name\":{\"321\":{},\"1068\":{},\"2301\":{}},\"comment\":{}}],[\"takerpayscurrency\",{\"_index\":141,\"name\":{\"199\":{}},\"comment\":{}}],[\"takerpaysissuer\",{\"_index\":142,\"name\":{\"200\":{}},\"comment\":{}}],[\"taxon\",{\"_index\":864,\"name\":{\"2879\":{}},\"comment\":{}}],[\"tfallowxrp\",{\"_index\":660,\"name\":{\"1777\":{},\"1784\":{}},\"comment\":{}}],[\"tfburnable\",{\"_index\":721,\"name\":{\"2260\":{},\"2265\":{}},\"comment\":{}}],[\"tfclearaccountcreateamount\",{\"_index\":780,\"name\":{\"2708\":{},\"2710\":{}},\"comment\":{}}],[\"tfclearfreeze\",{\"_index\":758,\"name\":{\"2501\":{},\"2507\":{}},\"comment\":{}}],[\"tfclearnoripple\",{\"_index\":756,\"name\":{\"2499\":{},\"2505\":{}},\"comment\":{}}],[\"tfclose\",{\"_index\":742,\"name\":{\"2346\":{},\"2349\":{}},\"comment\":{}}],[\"tfdisallowxrp\",{\"_index\":659,\"name\":{\"1776\":{},\"1783\":{}},\"comment\":{}}],[\"tffillorkill\",{\"_index\":730,\"name\":{\"2288\":{},\"2293\":{}},\"comment\":{}}],[\"tfgotmajority\",{\"_index\":705,\"name\":{\"2163\":{}},\"comment\":{}}],[\"tfimmediateorcancel\",{\"_index\":729,\"name\":{\"2287\":{},\"2292\":{}},\"comment\":{}}],[\"tflimitlptoken\",{\"_index\":675,\"name\":{\"1867\":{},\"1873\":{},\"1938\":{},\"1946\":{}},\"comment\":{}}],[\"tflimitquality\",{\"_index\":737,\"name\":{\"2317\":{},\"2321\":{}},\"comment\":{}}],[\"tflostmajority\",{\"_index\":706,\"name\":{\"2164\":{}},\"comment\":{}}],[\"tflptoken\",{\"_index\":671,\"name\":{\"1863\":{},\"1869\":{},\"1932\":{},\"1940\":{}},\"comment\":{}}],[\"tfnodirectripple\",{\"_index\":735,\"name\":{\"2315\":{},\"2319\":{}},\"comment\":{}}],[\"tfoneassetlptoken\",{\"_index\":674,\"name\":{\"1866\":{},\"1872\":{},\"1937\":{},\"1945\":{}},\"comment\":{}}],[\"tfoneassetwithdrawall\",{\"_index\":684,\"name\":{\"1934\":{},\"1942\":{}},\"comment\":{}}],[\"tfonlyxrp\",{\"_index\":722,\"name\":{\"2261\":{},\"2266\":{}},\"comment\":{}}],[\"tfoptionalauth\",{\"_index\":658,\"name\":{\"1775\":{},\"1782\":{}},\"comment\":{}}],[\"tfoptionaldesttag\",{\"_index\":656,\"name\":{\"1773\":{},\"1780\":{}},\"comment\":{}}],[\"tfpartialpayment\",{\"_index\":736,\"name\":{\"2316\":{},\"2320\":{}},\"comment\":{}}],[\"tfpassive\",{\"_index\":728,\"name\":{\"2286\":{},\"2291\":{}},\"comment\":{}}],[\"tfrenew\",{\"_index\":741,\"name\":{\"2345\":{},\"2348\":{}},\"comment\":{}}],[\"tfrequireauth\",{\"_index\":657,\"name\":{\"1774\":{},\"1781\":{}},\"comment\":{}}],[\"tfrequiredesttag\",{\"_index\":655,\"name\":{\"1772\":{},\"1779\":{}},\"comment\":{}}],[\"tfsell\",{\"_index\":731,\"name\":{\"2289\":{},\"2294\":{}},\"comment\":{}}],[\"tfsellnftoken\",{\"_index\":716,\"name\":{\"2237\":{},\"2239\":{}},\"comment\":{}}],[\"tfsetfauth\",{\"_index\":754,\"name\":{\"2497\":{},\"2503\":{}},\"comment\":{}}],[\"tfsetfreeze\",{\"_index\":757,\"name\":{\"2500\":{},\"2506\":{}},\"comment\":{}}],[\"tfsetnoripple\",{\"_index\":755,\"name\":{\"2498\":{},\"2504\":{}},\"comment\":{}}],[\"tfsingleasset\",{\"_index\":672,\"name\":{\"1864\":{},\"1870\":{},\"1935\":{},\"1943\":{}},\"comment\":{}}],[\"tftransferable\",{\"_index\":724,\"name\":{\"2263\":{},\"2268\":{}},\"comment\":{}}],[\"tftrustline\",{\"_index\":723,\"name\":{\"2262\":{},\"2267\":{}},\"comment\":{}}],[\"tftwoasset\",{\"_index\":673,\"name\":{\"1865\":{},\"1871\":{},\"1936\":{},\"1944\":{}},\"comment\":{}}],[\"tfwithdrawall\",{\"_index\":683,\"name\":{\"1933\":{},\"1941\":{}},\"comment\":{}}],[\"threads\",{\"_index\":553,\"name\":{\"1447\":{},\"1519\":{}},\"comment\":{}}],[\"ticket\",{\"_index\":235,\"name\":{\"387\":{},\"933\":{}},\"comment\":{}}],[\"ticketcount\",{\"_index\":76,\"name\":{\"81\":{},\"2482\":{}},\"comment\":{}}],[\"ticketcreate\",{\"_index\":752,\"name\":{\"2480\":{}},\"comment\":{}}],[\"ticketsequence\",{\"_index\":236,\"name\":{\"392\":{},\"1745\":{},\"1805\":{},\"1822\":{},\"1842\":{},\"1859\":{},\"1892\":{},\"1910\":{},\"1928\":{},\"1965\":{},\"1981\":{},\"1999\":{},\"2019\":{},\"2035\":{},\"2050\":{},\"2068\":{},\"2085\":{},\"2102\":{},\"2123\":{},\"2142\":{},\"2159\":{},\"2180\":{},\"2197\":{},\"2213\":{},\"2233\":{},\"2256\":{},\"2282\":{},\"2311\":{},\"2341\":{},\"2367\":{},\"2388\":{},\"2406\":{},\"2426\":{},\"2444\":{},\"2460\":{},\"2477\":{},\"2493\":{},\"2523\":{},\"2541\":{},\"2567\":{},\"2592\":{},\"2612\":{},\"2631\":{},\"2649\":{},\"2667\":{},\"2686\":{},\"2704\":{}},\"comment\":{}}],[\"ticksize\",{\"_index\":77,\"name\":{\"82\":{},\"1794\":{}},\"comment\":{}}],[\"time\",{\"_index\":572,\"name\":{\"1466\":{},\"1534\":{}},\"comment\":{}}],[\"time_interval\",{\"_index\":624,\"name\":{\"1719\":{}},\"comment\":{}}],[\"timeout\",{\"_index\":26,\"name\":{\"28\":{}},\"comment\":{}}],[\"timeouterror\",{\"_index\":876,\"name\":{\"2931\":{}},\"comment\":{}}],[\"tostring\",{\"_index\":868,\"name\":{\"2887\":{},\"2894\":{},\"2901\":{},\"2908\":{},\"2915\":{},\"2922\":{},\"2929\":{},\"2936\":{},\"2943\":{},\"2950\":{},\"2957\":{},\"2964\":{}},\"comment\":{}}],[\"total_coins\",{\"_index\":176,\"name\":{\"261\":{},\"842\":{}},\"comment\":{}}],[\"trace\",{\"_index\":27,\"name\":{\"29\":{}},\"comment\":{}}],[\"trading_fee\",{\"_index\":626,\"name\":{\"1721\":{}},\"comment\":{}}],[\"tradingfee\",{\"_index\":116,\"name\":{\"146\":{},\"424\":{},\"1899\":{},\"1917\":{}},\"comment\":{}}],[\"transaction\",{\"_index\":387,\"name\":{\"845\":{},\"1032\":{},\"1293\":{},\"1323\":{},\"1752\":{},\"1754\":{}},\"comment\":{}}],[\"transaction_hash\",{\"_index\":177,\"name\":{\"262\":{},\"843\":{}},\"comment\":{}}],[\"transactionandmetadata\",{\"_index\":637,\"name\":{\"1751\":{}},\"comment\":{}}],[\"transactionentryrequest\",{\"_index\":430,\"name\":{\"1009\":{}},\"comment\":{}}],[\"transactionentryresponse\",{\"_index\":432,\"name\":{\"1016\":{}},\"comment\":{}}],[\"transactionindex\",{\"_index\":796,\"name\":{\"2744\":{}},\"comment\":{}}],[\"transactionmetadata\",{\"_index\":798,\"name\":{\"2746\":{}},\"comment\":{}}],[\"transactionmetadatabase\",{\"_index\":792,\"name\":{\"2740\":{}},\"comment\":{}}],[\"transactionresult\",{\"_index\":797,\"name\":{\"2745\":{}},\"comment\":{}}],[\"transactions\",{\"_index\":178,\"name\":{\"263\":{},\"562\":{},\"726\":{},\"777\":{},\"788\":{},\"800\":{},\"831\":{},\"1680\":{}},\"comment\":{}}],[\"transactionstream\",{\"_index\":501,\"name\":{\"1283\":{}},\"comment\":{}}],[\"transactiontype\",{\"_index\":629,\"name\":{\"1735\":{},\"1786\":{},\"1809\":{},\"1826\":{},\"1846\":{},\"1875\":{},\"1896\":{},\"1914\":{},\"1948\":{},\"1969\":{},\"1985\":{},\"2003\":{},\"2023\":{},\"2039\":{},\"2054\":{},\"2072\":{},\"2089\":{},\"2106\":{},\"2127\":{},\"2146\":{},\"2166\":{},\"2184\":{},\"2201\":{},\"2217\":{},\"2241\":{},\"2270\":{},\"2296\":{},\"2323\":{},\"2351\":{},\"2371\":{},\"2392\":{},\"2416\":{},\"2434\":{},\"2448\":{},\"2464\":{},\"2481\":{},\"2509\":{},\"2527\":{},\"2545\":{},\"2571\":{},\"2596\":{},\"2616\":{},\"2635\":{},\"2653\":{},\"2671\":{},\"2690\":{}},\"comment\":{}}],[\"transfer_fee\",{\"_index\":817,\"name\":{\"2806\":{}},\"comment\":{}}],[\"transferfee\",{\"_index\":719,\"name\":{\"2244\":{},\"2877\":{}},\"comment\":{}}],[\"transferrate\",{\"_index\":78,\"name\":{\"83\":{},\"1793\":{}},\"comment\":{}}],[\"transferratetodecimal\",{\"_index\":836,\"name\":{\"2832\":{}},\"comment\":{}}],[\"transitions\",{\"_index\":594,\"name\":{\"1564\":{}},\"comment\":{}}],[\"trustset\",{\"_index\":760,\"name\":{\"2508\":{}},\"comment\":{}}],[\"trustsetflags\",{\"_index\":759,\"name\":{\"2502\":{}},\"comment\":{}}],[\"trustsetflagsinterface\",{\"_index\":753,\"name\":{\"2496\":{}},\"comment\":{}}],[\"tx\",{\"_index\":362,\"name\":{\"738\":{},\"821\":{},\"1692\":{}},\"comment\":{}}],[\"tx_blob\",{\"_index\":55,\"name\":{\"60\":{},\"739\":{},\"960\":{},\"970\":{},\"1000\":{},\"1693\":{}},\"comment\":{}}],[\"tx_hash\",{\"_index\":431,\"name\":{\"1011\":{}},\"comment\":{}}],[\"tx_json\",{\"_index\":418,\"name\":{\"971\":{},\"990\":{},\"1001\":{},\"1022\":{}},\"comment\":{}}],[\"txn_count\",{\"_index\":310,\"name\":{\"557\":{},\"1255\":{}},\"comment\":{}}],[\"txnsignature\",{\"_index\":633,\"name\":{\"1746\":{},\"1806\":{},\"1823\":{},\"1843\":{},\"1860\":{},\"1893\":{},\"1911\":{},\"1929\":{},\"1966\":{},\"1982\":{},\"2000\":{},\"2020\":{},\"2036\":{},\"2051\":{},\"2069\":{},\"2086\":{},\"2103\":{},\"2124\":{},\"2143\":{},\"2160\":{},\"2181\":{},\"2198\":{},\"2214\":{},\"2234\":{},\"2257\":{},\"2283\":{},\"2312\":{},\"2342\":{},\"2368\":{},\"2389\":{},\"2407\":{},\"2427\":{},\"2445\":{},\"2461\":{},\"2478\":{},\"2494\":{},\"2524\":{},\"2542\":{},\"2568\":{},\"2593\":{},\"2613\":{},\"2632\":{},\"2650\":{},\"2668\":{},\"2687\":{},\"2705\":{},\"2768\":{}},\"comment\":{}}],[\"txrequest\",{\"_index\":433,\"name\":{\"1030\":{}},\"comment\":{}}],[\"txresponse\",{\"_index\":437,\"name\":{\"1039\":{}},\"comment\":{}}],[\"type\",{\"_index\":257,\"name\":{\"439\":{},\"487\":{},\"510\":{},\"551\":{},\"590\":{},\"636\":{},\"646\":{},\"667\":{},\"700\":{},\"730\":{},\"768\":{},\"791\":{},\"805\":{},\"814\":{},\"858\":{},\"873\":{},\"883\":{},\"901\":{},\"953\":{},\"983\":{},\"1004\":{},\"1025\":{},\"1044\":{},\"1090\":{},\"1115\":{},\"1158\":{},\"1191\":{},\"1213\":{},\"1233\":{},\"1247\":{},\"1267\":{},\"1285\":{},\"1297\":{},\"1306\":{},\"1315\":{},\"1326\":{},\"1340\":{},\"1375\":{},\"1398\":{},\"1412\":{},\"1485\":{},\"1549\":{},\"1576\":{},\"1591\":{},\"1599\":{},\"1619\":{},\"1638\":{},\"1654\":{},\"1684\":{},\"1728\":{}},\"comment\":{}}],[\"unauthorize\",{\"_index\":696,\"name\":{\"2074\":{}},\"comment\":{}}],[\"unexpectederror\",{\"_index\":870,\"name\":{\"2889\":{}},\"comment\":{}}],[\"unixtimetorippletime\",{\"_index\":831,\"name\":{\"2827\":{}},\"comment\":{}}],[\"unlimited\",{\"_index\":597,\"name\":{\"1573\":{}},\"comment\":{}}],[\"unlmodify\",{\"_index\":764,\"name\":{\"2526\":{}},\"comment\":{}}],[\"unlmodifydisabling\",{\"_index\":765,\"name\":{\"2529\":{}},\"comment\":{}}],[\"unlmodifyvalidator\",{\"_index\":766,\"name\":{\"2530\":{}},\"comment\":{}}],[\"unsubscribebook\",{\"_index\":511,\"name\":{\"1345\":{}},\"comment\":{}}],[\"unsubscriberequest\",{\"_index\":509,\"name\":{\"1328\":{}},\"comment\":{}}],[\"unsubscriberesponse\",{\"_index\":510,\"name\":{\"1336\":{}},\"comment\":{}}],[\"uptime\",{\"_index\":573,\"name\":{\"1467\":{},\"1535\":{}},\"comment\":{}}],[\"uri\",{\"_index\":148,\"name\":{\"211\":{},\"315\":{},\"614\":{},\"2057\":{},\"2245\":{},\"2810\":{}},\"comment\":{}}],[\"url\",{\"_index\":7,\"name\":{\"7\":{},\"1224\":{}},\"comment\":{}}],[\"url_password\",{\"_index\":479,\"name\":{\"1226\":{}},\"comment\":{}}],[\"url_username\",{\"_index\":478,\"name\":{\"1225\":{}},\"comment\":{}}],[\"usagecontext\",{\"_index\":40,\"name\":{\"42\":{}},\"comment\":{}}],[\"validate\",{\"_index\":634,\"name\":{\"1748\":{}},\"comment\":{}}],[\"validated\",{\"_index\":280,\"name\":{\"482\":{},\"507\":{},\"548\":{},\"631\":{},\"664\":{},\"727\":{},\"740\":{},\"898\":{},\"950\":{},\"1087\":{},\"1112\":{},\"1188\":{},\"1294\":{},\"1324\":{},\"1681\":{},\"1694\":{},\"1725\":{}},\"comment\":{}}],[\"validated_ledger\",{\"_index\":574,\"name\":{\"1468\":{},\"1536\":{}},\"comment\":{}}],[\"validated_ledger_index\",{\"_index\":427,\"name\":{\"980\":{}},\"comment\":{}}],[\"validated_ledgers\",{\"_index\":492,\"name\":{\"1256\":{},\"1265\":{}},\"comment\":{}}],[\"validation_public_key\",{\"_index\":500,\"name\":{\"1282\":{}},\"comment\":{}}],[\"validation_quorum\",{\"_index\":575,\"name\":{\"1476\":{},\"1545\":{}},\"comment\":{}}],[\"validationerror\",{\"_index\":878,\"name\":{\"2945\":{}},\"comment\":{}}],[\"validationstream\",{\"_index\":494,\"name\":{\"1266\":{}},\"comment\":{}}],[\"validator_list\",{\"_index\":577,\"name\":{\"1478\":{}},\"comment\":{}}],[\"validator_list_expires\",{\"_index\":576,\"name\":{\"1477\":{},\"1546\":{}},\"comment\":{}}],[\"validatortodisable\",{\"_index\":189,\"name\":{\"283\":{}},\"comment\":{}}],[\"validatortoreenable\",{\"_index\":190,\"name\":{\"284\":{}},\"comment\":{}}],[\"value\",{\"_index\":364,\"name\":{\"743\":{},\"2756\":{},\"2763\":{}},\"comment\":{}}],[\"verifypaymentchannelclaim\",{\"_index\":854,\"name\":{\"2864\":{}},\"comment\":{}}],[\"verifysignature\",{\"_index\":881,\"name\":{\"2966\":{}},\"comment\":{}}],[\"verifytransaction\",{\"_index\":57,\"name\":{\"62\":{}},\"comment\":{}}],[\"vote_slots\",{\"_index\":627,\"name\":{\"1722\":{}},\"comment\":{}}],[\"voteentry\",{\"_index\":243,\"name\":{\"421\":{}},\"comment\":{}}],[\"voteslot\",{\"_index\":242,\"name\":{\"420\":{}},\"comment\":{}}],[\"voteslots\",{\"_index\":117,\"name\":{\"147\":{}},\"comment\":{}}],[\"voteweight\",{\"_index\":244,\"name\":{\"425\":{}},\"comment\":{}}],[\"wallet\",{\"_index\":41,\"name\":{\"43\":{}},\"comment\":{}}],[\"walletfromsecretnumbers\",{\"_index\":59,\"name\":{\"64\":{}},\"comment\":{}}],[\"walletlocator\",{\"_index\":79,\"name\":{\"84\":{},\"2787\":{}},\"comment\":{}}],[\"warning\",{\"_index\":259,\"name\":{\"441\":{},\"488\":{},\"511\":{},\"552\":{},\"591\":{},\"637\":{},\"668\":{},\"701\":{},\"731\":{},\"769\":{},\"792\":{},\"815\":{},\"859\":{},\"874\":{},\"902\":{},\"954\":{},\"984\":{},\"1005\":{},\"1026\":{},\"1045\":{},\"1091\":{},\"1116\":{},\"1159\":{},\"1192\":{},\"1214\":{},\"1234\":{},\"1341\":{},\"1376\":{},\"1399\":{},\"1413\":{},\"1486\":{},\"1550\":{},\"1577\":{},\"1592\":{},\"1620\":{},\"1639\":{},\"1655\":{},\"1685\":{},\"1729\":{}},\"comment\":{}}],[\"warnings\",{\"_index\":260,\"name\":{\"442\":{},\"489\":{},\"512\":{},\"553\":{},\"592\":{},\"638\":{},\"669\":{},\"702\":{},\"732\":{},\"770\":{},\"793\":{},\"816\":{},\"860\":{},\"875\":{},\"903\":{},\"955\":{},\"985\":{},\"1006\":{},\"1027\":{},\"1046\":{},\"1092\":{},\"1117\":{},\"1160\":{},\"1193\":{},\"1215\":{},\"1235\":{},\"1295\":{},\"1342\":{},\"1377\":{},\"1400\":{},\"1414\":{},\"1487\":{},\"1551\":{},\"1578\":{},\"1593\":{},\"1621\":{},\"1640\":{},\"1656\":{},\"1686\":{},\"1730\":{}},\"comment\":{}}],[\"waslockingchainsend\",{\"_index\":770,\"name\":{\"2554\":{},\"2579\":{}},\"comment\":{}}],[\"xchain_owned_claim_id\",{\"_index\":407,\"name\":{\"937\":{}},\"comment\":{}}],[\"xchain_owned_create_account_claim_id\",{\"_index\":408,\"name\":{\"938\":{}},\"comment\":{}}],[\"xchainaccountclaimcount\",{\"_index\":123,\"name\":{\"159\":{}},\"comment\":{}}],[\"xchainaccountcreatecommit\",{\"_index\":777,\"name\":{\"2670\":{}},\"comment\":{}}],[\"xchainaccountcreatecount\",{\"_index\":122,\"name\":{\"158\":{},\"413\":{},\"2555\":{}},\"comment\":{}}],[\"xchainaddaccountcreateattestation\",{\"_index\":767,\"name\":{\"2544\":{}},\"comment\":{}}],[\"xchainaddclaimattestation\",{\"_index\":771,\"name\":{\"2570\":{}},\"comment\":{}}],[\"xchainbridge\",{\"_index\":120,\"name\":{\"156\":{},\"399\":{},\"412\":{},\"2556\":{},\"2580\":{},\"2597\":{},\"2617\":{},\"2636\":{},\"2654\":{},\"2672\":{},\"2691\":{},\"2815\":{}},\"comment\":{}}],[\"xchainclaim\",{\"_index\":772,\"name\":{\"2595\":{}},\"comment\":{}}],[\"xchainclaimattestations\",{\"_index\":239,\"name\":{\"402\":{}},\"comment\":{}}],[\"xchainclaimid\",{\"_index\":121,\"name\":{\"157\":{},\"400\":{},\"2581\":{},\"2598\":{},\"2618\":{}},\"comment\":{}}],[\"xchaincommit\",{\"_index\":773,\"name\":{\"2615\":{}},\"comment\":{}}],[\"xchaincreateaccountattestations\",{\"_index\":241,\"name\":{\"414\":{}},\"comment\":{}}],[\"xchaincreatebridge\",{\"_index\":775,\"name\":{\"2634\":{}},\"comment\":{}}],[\"xchaincreateclaimid\",{\"_index\":776,\"name\":{\"2652\":{}},\"comment\":{}}],[\"xchainmodifybridge\",{\"_index\":778,\"name\":{\"2689\":{}},\"comment\":{}}],[\"xchainmodifybridgeflags\",{\"_index\":779,\"name\":{\"2707\":{}},\"comment\":{}}],[\"xchainmodifybridgeflagsinterface\",{\"_index\":781,\"name\":{\"2709\":{}},\"comment\":{}}],[\"xchainownedclaimid\",{\"_index\":237,\"name\":{\"396\":{}},\"comment\":{}}],[\"xchainownedcreateaccountclaimid\",{\"_index\":240,\"name\":{\"409\":{}},\"comment\":{}}],[\"xrp\",{\"_index\":799,\"name\":{\"2748\":{}},\"comment\":{}}],[\"xrplerror\",{\"_index\":866,\"name\":{\"2882\":{}},\"comment\":{}}],[\"xrplfauceterror\",{\"_index\":880,\"name\":{\"2959\":{}},\"comment\":{}}],[\"xrptodrops\",{\"_index\":826,\"name\":{\"2822\":{}},\"comment\":{}}]],\"pipeline\":[]}}"); \ No newline at end of file +window.searchData = "eJzEvWtz5DaWrvtfrK+9d4+9p3s8/a1cl+46UyprSrKnI3acUFCZSIldmck0yaxS9cT57yeYzAtIrMu7FiDPJ7uUAN6HuCy8AEnwv79rm6/dd3/5v//93ed6u/zuL9//8OMfvttWm/DdX757va7Dtv/uD9/t2/V3f/lusa66LnR/HP/8v5/6zfq7P5z++t1fvvvu//vDqZQ/ff/DuZRFs+36dr/om1Yq6mqaLir2D9/tqnYAORNdhL7/lx/+NVbahkVfN1tN6JLMo7MK4fW+e9J0ViEszsk8Opvq+V0If/90I8psqudVCM/tzqmyDf3Xpv38/o2ockxVL50qD/t6vfw1tJ1Wa4eEX84JPVrVrkaUql1t1vnhzz98/68XpaFwSWL8HS37X/71Mvba8Ns+dOLgu7qkyVD4GJ77m+oxIErb8NzvxrQeRaU9TO1AXMmrtdwYx2TV2tsmj6G/De2X0L7frhpR6jH03SFlPab0qB3DFBLKnArLukNEJsk8OnX3eswflqLQWScYosxEqdr3zapW+kGUyKPR7R82tVxj5ySu8uvNfl318oCMEvmv4dV2+V8VdCnVdvm1cl/Rrg1Dyru22naVPj8fk/eT5M7x+vd291O1rrYLuTofQ//c7h7OKZ1qR6lO03q4pHMq/dwuQ/vQNJ81qSZK6NT6EJaPQ8xbhmdNbX1IWh+TevRW+6FTrtdB7pZDsq+nZKjOn/48s7Y/74bedWmuetuHdlUtzmLHBKLX1ayhWChuEk+ssFeUdVHXqMj29SY0+x4UvaTOkWyraDQrgse0F7m+W/6vuvtf9fYptPU40djkn0K1DC3YZ64uqQsiVI/xskwGOKUtKb/vn5q2/mfV4918nqcgzmU5d2fqjJd8VLf0YF2i2NvXb25fnTnCdr/p/nj4mxxJLvEpLH/405++/3e2iKtLAnoojQRk2V1Y7H74058/f8+XHifByo+D67v9dllvH4XoOk2Bh9dq0+zprk+UeHVOTV/CDJOL6NV+Efq/NR0sO+Z4aoSVmUX6puqfbNK7MUeO9L6rHsPrZtuHZ/i6D3kW5zxW+WjjiTEA45/F3jLzLtvQUk46KugqSkQTH2E4v9I2m9tALGxijSFRF4RVTaIx7QcHjUUrV8lR5ZjMey1vt33b7L6pQuGczqt0vQ2bZlsvVKnNJSGohW4/xkrI9qPcTLv9w7pe/EeQK29M9TkYqm6q0tZfqj6oMmMyv84hT714tVy2oUtXNJOqG5NW56QevU4bRLYBNNuoq4DLMPPPlu2P6bJ2wj8m8JQ9bCStvknr51hoTI0sn2XVYfmMNP+weDbX3Z8vbTOu496dg9zH/eYhdtir/fZwGd0fmZTijBAJfQ7f7ppP715//29/+j6JPhcVKhkq0a4Wcba7Jh6nFwkqmShxURhX40OYvhS8aZb7dej+GP0mz5KRWXu1WAwu6VPTkBN9XGSUlCg+au2YkRnuUZK7bztyPSdJX407DcMs9K0f86socSEc1jGJGac65yuCMd+zQjG0HSwjxrt19Uj6dxFidcxVBOHnr9vQvna1STNkLdost8MdBE+7dJeMJbvp3fM2um1n7Kv981a4m2cFur72kGw25RDeNJuqJvcjRIblKVsRiLebql7/rerIFZvIEYacT2POIijXoRsWZPEEhLJsxqySeTTCfAqP+3XVemDaMWtBmLvBf/e+oNIf8haNKgPObf1Pe1QZWLoxYxmQwTKuQvspXjPDMMfM4lraCDS6xg/NoopXbyjR6BbX59xlZuZ9uw3Lj+/ums+B3tuSJ+hD9u2qP2UvM0/Xbdd/fHfnnp9WQwHbVV96nroeAPy1tTlkL11bR5wDm71XHWk2p9xFkOrJzTUUJb3PJu1aG5Fu2vClbvadz2PsjrlTk/EyiB8e29vwWw7m+rHtDiWUQv2RWmJNHfW4784UdUjqWmddFnfrbnVTdd3Xpl3e7uKbRqDy1bpb7Y4FdLv5nSSgPsbr5dg+hd/2dRvehK6/qx49cO1YwjJ0fX8ooTzdq320/25Hq/bCZryL603dVet18zW+2WvgWh6zS/d+3VwP63BddXFcNZI9rMPmVEBBto/NuzaEyGMZsLbN6pS3INFf181DtfZTPR7yvwTZm7Cq9uv+U73brV1oy7GA9lRAUbZd09W9d0wux+zlx+Sr62sPT7XZvExseL9dNJt6+3j0Oj+vVv4hOZRXH8s7up/mWN4Lkr9+CovPJZAXx4JekPWm+vb6qdqWoN1V3xZjUS/Ie9fuu35db32je0bcR4WVHFGDxgH0Q70Nr9fV14fK1yEOtGfKxaWkLFpmD/2Q7P3JfhoM6TRj9v466/xcJGV84KVaeGjGErqpCxhEA/ZkXsplds9SCDBlIt3AuZYSBU7dZRZyntdEoBPb6ebNMqEIKulH3bjZ7hTqEqRR9XeJbNuKQacONgM5z88iwLG1dYN6ja4llImeNzu2FXPAnkuamuFi1+K3xp6LmLvkYpeR45k9F5La52KXkmemoeEs+2r/CC/nsqnL+D+XJ/peXb/9+Ob67ce72/toZ/pL1dbDjD7jjtN6TPXE5m/Cdjk8+ajfyTin/N0flJkq+56TuVwnd7vfWxNXVZyzBMp19Y+mrfs6mFE2cc4SKNjjMjMKw9MyKgB2G2kGkHEXSQWy3USagRW4h2QBBG8h8ZA5d5Ao0EnoAUzY9fXvHmyOkr4oc32d+xTeSd709J0g23XBIHpMnS/5g03zh2zR/eEx1Ns18MjnWXnM0415suQ/3Bz8OfqM47mP7Q7G2/SIIw9x11bDeyjvAg7Qj1lWIVv816YPQ+3rk8VJ+0vTh+6YI0sam6NOsobJiZfEZqWTZMZ0xCPY5qETSoEJCEICZx4CK2fKmaDFc81Pbb18VIfFmOr3nnEiVdekc7y2vHknhrBMPbL4bf24rfp9Gz6Fr1W7tEB0p6ztKWsuzN9fP1X11twTrp4XQ76HU74yGK/XVb3Rx23KsRgygk8YIyDH/vG6DVUfoOdHU6Zjh1kcyijVd6Z4w1Vn0g1FlIK7nlXcK/YlXo5tM6s25cVeHA2aDWMSfEKUhQ+vNXxslqbBdXihYTtmygWAJuVY3D8vyyCmqTkGyp+dYTBsgmbgMuboBHByhAmyJ3xI9HtP0hdR1xw9XljeFB0hWGZoUXq4J11v2VMvGPnlJFcmAhSvInE8XImycLSKpG3BSpQ3hYgIgY8QuRhYQKBRiHjgwrkN2+V1pcbwCKIbNpkq/mQmgzT2nsFE2/BmAToMjV0yGoplOmaEAjysQpOgT6WIIG+fd3VrjUwhzpQJ8H77pakXwTQ86zFPiaF52+zbRbC1QXfIU6T6ITM1uXKvl5pjTAzB8JjTtq+rtYpyTvm7W4Opss8fXK4za5qcoRjmShXgdv/wj/hYTRChO2crAfG+6/b6ExBzhvqUqwTCJYWncyzO/y7YN45NA00ddPPgcwfYRB6WsZkKohimkBmKdR5RUX759N7KsG/rQuJYLJ+3hj+gq0A29zsDy18kmwBBX8xDZiyWSdB4fjw+eXdzfrJWhJym/r3nSULdNVfOrjlvUU1BWVbXGAw0eVMo+ASOgcCrXgrGtvwFm+l4iKYLqIoyFwe6jD1Xy53ZFpNySmFCIZ3i8od1DMwU2inA/PBuBsVCvAKbEeZZ4Emor9swnOT3DRq+ceLfPdAn4r44P7ngrMiaAhkCK4IxPOf5HhqSKUrbNL18vLgZ54CiPz1IwNTnnCVRPjJHriIwW+noVR/Oaeh7kXaX/IWwDvOyA6c55iuEcVd9Du1N9a17vW/bsF2oJxsRSP1Qxq761i0uZZTGw7YBJDjDlgCO9tfQZ9fc8JmVF6q5AS+v5ga40jWHORlmJPqmWwTL5mNSvAI2xogJuhgRNcfEMLgTDwNUpe+dhiy/cpT0uZT3b3KXoCd507qTl31T9RWsuRwT5wm+f/OmWew3wCvZF916ubzkyZIHttbOsuiemiCHOc6ToMFn8pL4qv0ka1yq89JYdD7JZsRkHsEWiU8oBeIvhARGXQIrJ9ZO0OII+7ZbtM1XDWdM9XvH2UjVFWqP15YXbWMIS8CVxQ3P0cQA1gdplBqAHkKcVAD+0KEs/brZLmvr1S+iTNkAwwsU61cr4CCFCcIhW7VCD0yQId7V27p7MkOsDtmKQSDz00QenqJkYfiBhVjc9sQCPAiNFI5nV2QUeMaOKWyTNlwXVgzPI0UyDGQiYgS/j5BBTFYiBsp3EzAYZigYuAxPkQBGr6e/e/v2/vbt3d37j38FXlCfpc59Rf1dCLeh7+utHtaipL+3uZlLuxxOfKk54T2BwWM8gAAN5wQB3+IGEEwDOUGxP0RrQ8KGsIRleKCWRmMG0E0bzu9lv6vDemnpSmnm7EH2U9UF4H1VHeLqoeoC+hqrXCHcLZ6wGobzYuD9ZVvrL7oC0O2pzFUI+2OZL4Z/+Hr3UOFFwA+lPYylvSzy++2iDcjmEs5dR0WWg+fGXNP1GYMuzV1q1L1pm10JlNPYWx7Ls9UoUTt6Fy6GHnXk3wn/3J1LX8O5U7/AhcRdeyxAAx//P7urji7qHrIckeTVLJ9eFcerYjCOO0X3T8BncGKMWT67K4ewbnvg6yYEVtfPP2xSBmuxbrpwv0Kcakw1zfYyUMN3ke1Mx1wvh3T/tN/ox8jRYOe8L4jXhq5Z75ENPoZxUsALgtZd4yQcc74ImnrwQYLk22OQUY4h0RrCptlKQ41Z7n2Dk8r8QoDWWptmKw3VN321vl80tf4Bohhqmq041OXrrObqIvK+IJ6t0qb5CmClZurX7zGiX7//HzBUR1Gvpfr1+3Km6oRSyFapaAZjNUPLtVY8mtlcncjK2CsNDI/hU67M8I1gWUxWCpdtsyBEq9EiOItYLQgWNlsEZZ7dUvBAwzXByrFcPI7ZdM2i7YtFOKfxOuGVtF4qpL32ytgvHsxswE5gZSyYAOYyYWe6cjYMQrRWXhkrNkH74V/+/d++/9MPM0N2SP6uXsdPcgx38Si6KK3rVicPgEnn3l8dUwwfeNbfGInT/t53WBNt1y3WydVyYFXXj+nQU2EItqrrRz7TMTEInrOprp5O+cpgQHeiUwr8VjQCYVjHxBD+B0wYqHhAHY9vV18BOaXLHkguwdNZ8dhbJmcJ8vmQj2//+uru/a9v73/5+EF/PmSWOjd+fQyPVV9/Cb98/KBVQJT0945ec2lX8IovlXvwa/wI1PLXal0vh6+Eq0M0ITt+R2r5JS6iCNwZ6q45cprhzlB9szwXURruU3i7zaVrQ9iWxIMiXQLkD3QAkukpnAQt/5k6GyL2VI6EmfF0HY06mTXGI+SHF/SQM+RnyX/vcEbJu0La/LJzzAYJhfsNEAV7hZJkMbw7CcIcPrZwu6j0WEUCDRR9d8xeDOq6eq43+w32PgLJtRlLMLyfAKL9vB+2ZrfDRw8y8JpLKeUR74ZV7iq0wHNxJFx/zI8+DYc26pjsOvTVEnjDkG7W8XsXm0sZ5RoWfeKeblDTo/cgEjRj03HCPWuDaKaZm0TMn73tqNgMruFmzOI8MjGTg5z/QzN39oytxIlTHcHdaxIh6mNu8PFsHckU7M8o9uBewr84fUupyJgREUtEwkIRsGTkKxzxSke6F4hw3FaL4TO0cdrffbNlru3bbYmvNuud25THEFkQDMP7xymL9S1kBAg/ejXlMR6+iuBA4TclwWMwAhGnQeJxyhN/qBmOzQgadP5UyoMfPwVD+CrGNlshMNh2WwKSsd8GQNk23BK4AjtuNkhwy00Czdlzo2GJCe2m0j8JFiX9H5rOztI5s9nhUrkAFZ774ffrGo3aF6ThmL5d9Rg2tSlqizhjEjRuRyxjmDRFbgnk1KO9dXPqzoXrxxKiLjDZEQqpKUuASuspOz6BiKbwRGLmR6cZKhGcQL7soOSQO400S49mLhZaU/yPLCYyVxH5vtRlSOVVC3ZWUrxeMRyVJEqjT9RE2qYHaETx8wGiBvXzkaGF5IdTOK3yjwF8NVyU/6lpPp9PaTQgPDTN52WUrwAG4vJnBLC7L7PGcC8uCi2L/evh/GVNkfVMuYVM0RVM2aVL8TXLHO/H6QQ5nS/Cdr8heA6JXLPkZTped6ubquvqLwFXu1p3q905E9hRxyviGG7Dem0D6MYcTvWJI2mrhX5bfUz1u3uSi6rPlIzXJjz/+stuWfXhDngxYMJSdf3+kDN5J8CHAm1MxQT4lpQsfHiw4vVQiEX98DzF4pgrF+Gmbb7US9vl7y558uXrRRgOE74Nba0/bzylqBdhuMPfnbLmwmBGOUIwOGVRGJswI+GMGVNpDsuUOWmM7DkTBQMnTRouZ9acA8Zx/Kb69vqp2m6D+g3JS8rfO57PlF0xPbrOvGXfHMay9tMhDLeq5iDWG1VAjUC375IKwW/e6Qg/VWvkec85w8M5WwmIm/3Dul78R1CXhXOM3SHj54CtC3WQ4TiidXgT1pUZpTtkXR6zloCBF4tzFNuKUQeBZr85BD4D6gD4unVOYVy86iiGk57nLNbTnoHuip55nHRW07nHpqjqoHGcf2xC8owhzzHEOhRk5+YofksHRF6LrUuib7a1MwFi9k6AzLB4JGhs8z7Vu906QCd2REl/b6M3l3Y5vfhSc2aMBAafMgAE0NgkEBZnA2B8aL5+qDe1avLSlmm+ro8Zi4D8rX588pE81Y9PRVE+NF+RkExVCRyLwRpxcQwVUhLkQ/P1P/fVuu6/vVcNDlUpv42ZwVv7JqCf966eeyRq9kW7r7+ShhYrXksRkqeaIqaC9QQ5jITFbzEAJJPHSNDyTYYNEXMZEmaGzaBRf6RchnYvZp40/47Mh+br8RBhq+xwZ2TdfG3PuU1dXb5HM4zCDKxhFL4I14fm6/Axb2dVVWPWwvXkBRoqqTzRwQaMqZ21tG3aU/bCNZUDNtqDlyD70Hx914bwT299rU6ZC9eWH2qoq5egenV9PbF2BqRqs/GYO7Xl3oSwy2q9ZQi7l2rBPLihFcvRxcvq2/pxG9oPdaf6q0vK33tRPVN2ramj68xZUs9R8BW1DgBvR88hbNvROsiYYkgN3Beew3SHf4dz5nJAQwrd39I867rrwZdNUZz/3DftfuPD+e2UtwQOtCKZc/gXJDqQaT0yB8tfjpgAsdWIAJmxGCFBfyR6vbYUmaXMX4n8vA2HaPR6cvsUEx7mq2YbDkEJv7E8v1h6trob7kWqM9WY6veepSJV1wx1vLa8e/sxhOW+viwOTY2xND4tysLwlBiL26ZDGWD8FX2oPaboD/9verZdRoHCfEzgD/EyiCm8x0D5oR0Gw8I6A5cR0hPAOHr9/fVTVW+HPr18va7qjV57aY7fO6oxBK4IR1x/XrTj4CyRD4caU/7U1kv9bVKO7Hkx/P3hVEZ5vLyOdeRbDH8C7TIO+HP/FNpD6vGxCi9jM5Rz4OxO5bxQPb7q+zB86QE5yhqo0WpaXEnowT5V/b4Nn8LXqlXPx+dgu1Mx7amYkpCQjeDQcEth6JGovWC7oslq4GDQXM9B+ed9HNDkATjQfD/gAsa8AQCd4RNEcM4ztKHqw3FqdMR5Ivv/pJvgcLKtBVVN5XwGi+01HQZcrwNhmbPsiBn8lPaQ8XWxih8v4lj9i0Oy36klJjm8ZkG5rvGCjleX5SAMl2eeqdmL8E3bBlTXHM7i+id0A7J5dmdxy0z1BnT3vM9eQlkT4LsUuyNALqeQPZAvKfYKvzZ9uF03alQ9pcue/YeCxgQWxasvTR/CMZs+yM5XdYH48wVhV7XdqXY+Nc1sq3y1346fE/ojmY6oAFKkC/3d5dtEh6x3zcf95iF6R+EiJaRGBRfN9kto+7tnTYtOiMocKmXOylXePJ0oMv/q0adhH7TrP4Vu12y7cF3tzjLjx4/SBKbyr6v2c2iPhcyKnvzmKnVkYoodf/TUxqv1Wq2QaRpZJQoFP1VdmNdGNDajn8Uip9MWua0wL+pK2DeKqRiRRbPZVFtM6ZLWLVft6vsvoe2YN58SyWl6i2zaOrNelcgCHQtun6gsvYGOYIzM4D/3pDlMpc5p/XI9s6xMxcTFIiLVhm6/FsZLLHZO65f7WrXbeku+zJXqXRJnC4JtF6X2S66adthIpL/YmWrGyf2i0KCOZfFRnQgzoZ0O5sZJgpx2sAknfnHqmOG/+O42S5IbcqjipKgzJ2TENqHrmIM8ScVL+izZZeirek0OGlL2kt4qG7eacKQBf4YBNx74XS7TQQDKm4QV+7K95e16ReSBf+vM9P68IrMYf76nO/j0reM4qUssehX2Hm0rOo9Lfnyx/n7JvZRPvIV/L7+GrwiOhwrcf6aPIyDOH7iXDiCAxe6f6F0XRvCY3CUaxPfprS/Qa3318Nr7fcW9Mk+8I38vvySvdZjDbdf7nn4RnXgP/l5669wwOBDFND0qG4ff037LmKgTllJ0Sjw4CwseoWh17cNcgH2GkCC0wGODAMOgBGSJija4Nfdmr4Qjv9RrA9gcthusBOdcJRDoyVCSN+zoGjusbPHFTsuY/XJw4w1M9vvsYo+ZZH1BOPYeBEBnu+ug4olxl98kYZLikZdf7ktFayt/7gryxpSwf2Oqe+/WjghE7PIUhOI2gESkZC+oIJCwbyMyUVs45bHszUdu9BQEE/eARDJ6O6ggmnUaQTaN8vCoYLhv27Bd1AGxofO0RY0oWThsRZPL8JtRGgR1fChI17f1wsFxzlcGQ54iaATHHAE3DzZmmCbKGDQoIGi/aMAcA2YEVC2YSOgzYQKiEnl0I5YkLmnF6MJRM5ZeR+5YyzRkMJBuyRgopymDwTRbxmC5jBkMBVgzhstrzqxonqZ0GzQYDrJoDJ3fpMF49imnlFGTEImA+X67ao7/yz5CySTFg+UyrKr9up+dnwIqXB1zK6encNfDIu2aru4nx9/gQIe84vE3Vpy6qx7W4brq+tAypx7LTGMBm0MB0s0HB9h63Xx9v100m3r7+PopLD676IZS6mMpi2MpL4KofRPYRBp/4PSlgI8niWaz7qpvi7GcF8G8a/ddv663jhE8A+2jkl4E9e+fbrIhn9tdKbzHdfNQrWeH6aBcY2blHB0j0LZxwmybsiDD13m+Nu3ydhfE9TNNc8rdHXMXQWrDb/u6DcPM0LT1P9l7oiLZsZBqVkhJQP2AbYQQPGjbiHgYSId48aHehtfr6utD5Zg2DsWcg8XiUowXkjFA+i5VlKrk/tS8WHRnKoZ270kl4uBuFCD+2z7steAykT5lyBUeDyu6Hw5P0qzsdANsmi8bQ9uHSwGgHThAWtwPSGTtGwFI14MWP2n38696AChsjy2Bythdw6G0fTWOyrWjRmOxkVHdRYuTFdw/S4oFd84m1P4xkrdbhkCo+2QpiG+HDIFR9sZSFM+uGAKi74elLM6dMAOOrZm8u18IELLvlRK5d7wQJEu4L7TLxWAxQezX78EwdklYOJDNCjaEsojdG8zm4r5wpoNAAW0O4w9pOhAQ1OY43rCmw2CBbc6TEdpgJGuT5YQ3HQoNcHOqrBCnY+FBbg6WGeZINCLQ/eewgho+jirgndPg4a1/3t5rC8lpsVdxFjG+XZC5St/3T/fDluZjuD+sEKVOMaMg8+bhrJuvoevvoxMSQZY0Yx7IcLi2j4TImYeyqZ7vh+235f2ybXbdfd/0FfkOEM3DZc+D6i8vfkvBbd5vp7nMCNygjF5D12CipIaXpS493Vr+1TSvfsnxtXABPNgxxjyl5O/X4Qv9IpoGcc5ZBGXWuc1Aaf4iWB19cIiIMj8WxCZPjIxhXxh4OjBOVnLjNSkX3XmdcLu3XlN5cO8Vkd8F8b5nqn3MkC2svXGSKkOvmyDS6rsmqTb2ogkiLq7AUmH7+gvqdJBBJTqe355CfQLadiV6hn/f1YClbbyyXK6dVwaMj47qpsUkXcE9i7RccMtiCp4xXvI2LCAMdb+CQPFtV0A4ym4FAePZrIBQ9L0Kgsa5VWEBMjaWd6MCQkL2KQgm9zYFBGWaBAptUnBgXFhDHiOaJjQshTDnNS3Z5L0u9PbjHgQE7fAHE8JifAZUeoiQYoiyFYCAzOCMALeDmPw9YoUphnvYEqsgx++53tfqiJyBTDIWBGnoD9MCJNI3aU0o2+a+1Z4FpkDifCUxPP0kyVwA6PS4mD6pzCNYnLEAyHBJ926aNHcBpJX2wCJFgj2saAHwdJVpTh8KMZsen3MWYI4p8PlTewUgLlA5KHkGyQi+77q9WJ8TxfqUOkfy+DN9GDClenwEXDgtySR8Vz2L7ozS7o95cuR/+fQeVd23dabYdjXcY2hr8V7A/EovOYzS9OAAthejVCV3F+fFopuLMbTb4SbioL0FxDVPl0hDhg4QVrf3EmVsdw+QFjcrEln7VgXS5tCqLm13/5oO6QvQxl7aI/z7ejiUtq3HUbl29WgsNiSpe3pxsoJbekmx4I7ehNo/RvL28xAIdTsvBfHt5iEwymZeiuLZy0NA9K28lMW5k2fAsTWTdx8PAUK28VIi9y4egmQJ94X28Bis+QG/x9Q/P/wjRG83jKf8Tn4T45ZY6uSbTETJw+9y6WngHXMCdnCasKQjJEpGTeGM3u0LKQTQGmIISsyj9MUD0E3iy7AOh0MUH9bN4nNou/tmu5Z2QCkctpACgJp3pngg+4zJqw6a0sdMNAYgegRK3O4SwJEChVdytPgDLNhHIE9N9hS/rTahac5aYHOZaxZOCvOqxZ6lLOiyqZJBoz3HzxpHeXYbRFEdN4njM90gEjoH5VpvEEd33ySR04DboMwN57XhIBbixEkutxkHwYwTRiFLzsNRoU856+TwOx7mVsptgEtx2E2AEc/1OGokBTyDKgr11efQ3j8G8c3wSG+SPld2V30zyR7T+2WPN20xzUtiv6D8BYFUE/iMACPLDQBkhRenK7rASwqG13cTdP/yLgVAV3cIgLp8SeWx1Qsiri9eUnVw7YLIq6c5EPLYeQ6QvOz4UmmH34O6IDYNEt0wYxKEuia2aiI6aMaiyQCmrplYMt+SiUEToqa+YJokLLleSgtGl0tT9pyxk7lYgkD0tRIB41wqQUDaSonAcS2UIBhgnUTweJdJFiRrk7kXSRAUtEYiqPxLJAjLNjWUWiBxaESgu3vWreE5TUlbOC0UtYQXXLcdnAmDVlAVjiem+434TOuMgMhZEqWSZlgRpeK/mYaiPNTbiv6kOA1wTp8nexzVuO4lQ2bVK4uBeX0jCwFVVF0EzFSxBYAqKzqImaTdPOgjHQqt89Huj6rosFPcNj3iPE7bFAd8MaAEEnNTe0g6c9eTm9qX3z23zO+eiaONZuWDZxqRkyZ2csEkHT55wu2WvIzOth3ZVsiL+kE8NoVAOObIl+6f7//RGav36pKpBIBVu4isGj8S4SR4ZFT5w7p5MFf5MVM+wJdqXS+rXnTxBEKczQURj/G/Vn34Wn37iX9bbZrCYIqFt8+IMvXXzmaofKXSR85SmqfERkG+AqWtZzplkVWGULS61mAuwL7ikCC0dYcNgt+IlRiUrVgbwlPTf63W62CmiDOWAKF9qURgcKfGviF7VLF/OJyqDU7xqxKcx7W64FgPBNDZHKyKJ4Y4fp+YSVpip1gqWtsr5q4gb0w594uNMPyOsQhk3DM2QnG7xiKSad/YCCTsHItM1r1jH5a9+cz7x0YwcQdZJLPvIRvRrNNI7j6yjjcJhqF/9fjYhseqDzdtvQiS42PSlvF8UuG66+Mug9varLpwPxRkv9CrSd4yOL/tm97NM81cBqhpq8U60ONchLlkLAPSt/XGTnHMVQ7hvn9qQ/fUrB19N8lfBouZ1UUUy7RuxNHCnMjlinM6oBLoBN/HJS7i/MTCVe/HXkduP/H6PyuQ4ABlKKsHtIKxLlDGsvlAK5TkBGUusxd0onma0u4HrXCyI5TpHJ7QimcPl9m+EECMA+bHZvyw6eHTmIIrpNIVcYRswaobJNHtO4A8gLb/ZwFoG/rAKF79mCNfWjtQnEeADhW3oLD33nkG+f67SVzeTBMQmK20TBB240wlkW8eWlBo28ADGByDaXjKcVIYoo4QqYAJ0ZG3kmTCEjaSL1izkDR7Tj9wWkcTCG8bBRijZTQBcXZRwDFZRROMYBMFHqtF9CBZm8xsDU1Qoi0UqOyW0IRlC3O5VlBDiwPdh8PEIvi/SYIixi8tUXV8U0qu7fdr8tw2Qu+YNEPsaBHJ3k8IRskzRDVDRwhDTg4SD887vEHPiTMEm6/Dx21X++0Svdhpjgxp/tFYQlV5LhYSZD89TOjJXx3GOhIzt1EdSDrsBBKjLQYhZbAW2BiVoy41TB3RFkJRliAEiuc2vgWFXYTwLLab9hwMNfvw/nqaooSxJkrUHPUM09XPnR4ak+bNMyVvdM0YghZS3D4ZkxcMMkVgdcYmCLghzF4YwxBNMMVhd78YCBiAc/0uC5OGGvmjuvM05cKN8VO6Cawj5GR8QBeV18JO5mdzUQw59GR9LBdFUMNP7idyjSCGRnEGocxv4tIs3kCU/SVcGscfjNTv347JxM/fzpLgwUi450GVqd7umLOa3skgFYXXMUCxNvRtHbr7NmyqWh56M20qZxbKrg2rdf341N9rs8CMhMiYBbKuOjPDNE+WvPJFV7rrAV9yBeWZL7iSstKXW3E5/outnKjypVZQGvhCKwmAfpmVx0gj2E/KTsn4uzl23fZVLzRnVOp5a+2YQ7qkI2zW7losbdhck6UX66aT5slY9JzWMh/J8tDuRMzg35yAQJS9CYLEszUhoxy7laFSZjnKoRxa/J493o7pIvfpIXdlQPp6Aw7NSfqXwLh/2m8qwdDRMOdcL4LUhq5Z77m3j0WuSdYXgau7xkw15imHMya+t3YmKltxKHy0TzOUA+mbvlrfL5oanoQmGQqCXCY3Q7UQubKQUsdx3SzrVR2Wh5N0Xreh6oPyxj+SD3cofSGxq2lBknlQLlk4H2Apri0RyqiUIohpg74+GBr1FvQkWcEb0Wm54O3oKbdjh45QNm/SQRDQ5gdB49//4LD41td2Zafpyu3MEuViu7Mz8Iz2z9qlxTC0nVoKxbVbi+HIO7YUjGPXFkNRd24pGt/urQnI2FjOXVwMCdjJpZi8u7kYlCmoldnVZcGIsHY4H6TXZ7VJupLTWlowOq9N0T2BjdC2BzYIA+sFBE9GL+DAhF6gzm7ThAWnN6JgcH6bsef0g7wZDgNRpzgKxjfHYUDKJEfheGY5DEaf5ige5zxnQrI2mXemw6CQqY6ics91GJYtzBWa7Vi0NNAN9wnUuS5KVHCim5cKznIxsfMp0EQZehIUEGbflmJ05VelYFn+rFJGVzmsFBaWI2UiCzySCohKE1ciaZ60AABoTCck/vGMdDzkRlDa/dx3g3Ak5ZYQx+S5L0RDzQ8zvaT9UD2EdViOf3i77aOQMZ5qKiUVAyEdZ8c9UkqOrJYkOR575d1DvvArYMOQvhJ9jtGcdJyqnI1OSsU89ATZHYey3DOCoFnnFMPlmxEUZCrIdMwIhmqXUxKfVzbAmBrI6ZIRHMAipzxef4wAGSbSMs6YgRKmiMP/TR9qSeaGSxrjpHAInar7jlMVtN9JsaD/nkBzhnTX39ddt+cO++UIZvkKYDSfg9C3SIJjllzxakMekMUJj8lzRevtYr1fhvvDp6WlgZ4CpFlzYbRlWMoArcOwehBdJ3X10gENhlY/PkvUNo1lSF/N8uViLIY3iE1j/5ghW7gNy7Dt60p4vJJQj3PlIizDrunq/n7XhuEpVQtHmjUbRnKJBEBdYuAt6zYs+sY29uJMuQChW7TNV4v6OUeudMN9m5ZTPmXIFd5V3zaH55yequ1Wero4RUiz5sK0h3ME7jv5adyUZJYvF6OvF5/pozM5gHOOXOntqr/fVdIT7al4lCd77mvr5WO4V9/oIObAec4yKHaEAtLPi6eq3t4Pr/cv7xfrqt7c2+IhV0BZsMNTT6caL8DJlpdta2yOzrpmgwwOsmYj/I17zYZAQdufKZR//9MAZbaiGTugDBa78tT25CbJym3KpcViu3JTav8YydqXgyC0jTkCxLUzB8HIW3MEimNvDgJRN+cIFt/unAXH1kzO/TkICNigI4i8O3QQkiXcl9mj47Dmm3S39Wa/rvrkYPxxe272q7wxx5Y8i4/zooG4GIfe2/3DppaeLJskKLLVl5ao7vJNKdlXhtmPmhGS2tfMIMlVVa/vn5gPkBKicfoMWXo6IfQMEwkkrIw8gsAz5jgUqt/ybmGaooRRIErUPMIM09WeTmeASfOmgJI3+gEMgbMCFIDJBWDyggGgCKxzvwkCbgjzjI9hiJM9xWGf5zEQMNDkzu4sTBpqrvfrvu7qx634dhGXtuDEyRQOzqHEZfDT6T+Yz7LKINqnWa0gwCTLoaDzLQ4jhWqOwhy0cRxonHBc/hEjAipjR5uxicTlJm+ucGwep64jt59kze4GIG2iZ6Fcc74BTJ7+WSyHEzBAqaaA5fL5AzuapymdrsEABxgIls7rJQx49nBZxmHIiGLAlA8ZFJK/SNA0Hj0oXU1e4Mw4kNABZQiemccUOuDgAJp1eKEDzBJEc4809OP5mjU/lGaeeagSFgin2SchqpBFQqp6PmJ0eIT2eCOTtMj6TSpbXb5x18Cv3rg7jyLGJV8RDDqaiwSGSG6EUTqrSOXpqEY85YaxiOe5a+zDY28dI3y2+8c6oDzIedvEpS3hmcSyNcPEXkTm+HJaJSsO75NkJKNJsmJxDkmGMtkjK5LgjWQqqzFygjka0WyJrGiiH5LZ7GbICmeeXHJtEAA4CY/Pkut5Lupznm3O5lnzMvIhaTM55CQ0VXLRM5F1dmm98AidKsK/izCTUV5BUIU29fZ+nIEBsUlir2D1bBCMEzsFodayTHyaoDbcn/PdI4EwH9CCw3ku6mmebS7mWTUKoWoXT2F5X9GfWZsLztJ7Zflu4jVI+pXylmh+jUYTpEqztuc5x+iospK1ec40M6g4VOF2w6LKyxblOduUqABAXMo2HhTENDLJm9bx72Wik3FbegLojlDJTi8Wo7xb4KmgKU7lbHIT12qNVf5t7FTcGK+yNqpTdXvMytuKZgnKVr8SufJ3lxEINXqV2D9mQOII9lPTfD4cPtwJi6YkUZHFE12quohKibltPO44KEZYPg4Klu0r5jQoRvaUvoTs/WOgv60raZ8yFQHYVd/sAMdMmQD0ZMIIG2YUGEAZ0wyJZ2DjY0DeaedGgmOP3YrE7q7LTLZ9dQmKjIIiEB71lG8wT0uEvr98IVTH/6EkenabCVN5suSHgWyVn+Zxyv+2r9Z1T+4wzUQvKZ1S0Xsyd4yRm0mOXTcMOUyGTkV5x33bZgZg+6SNKvuKf616Jky9Rp0lfTsMY+ZYm5l2d0laSPxu6K832gQX9e1kXsuX/6s2wUfyybyeJT8keCMdbTFDeGiaz/SpFtkYH5sl0gMGgu2YtJD4z0OkBtUPUb2s/NvnXd1W3N2BmX6IExcC0Cfto7vyzdKc7E0bvtTNvrt73r5/A8jvjun7563H5wEYHx7b2/CbDWX92HaHPH4c0rOMBw4v5DF5SmRYuZmLvYqyKJPrmZnraF23V9zYVPqcwS7MLYf5bb00VYnNPaZUbYuPQHYvkJx7bjgCv/PGYRj333AUbheOA/FZNxVD2JHjSKz7cmYYUwOZ9+hwHHGnjuOx79fhQIYVfu7enQgVh6w346lpr/b9U9PW/xRf2uPSFtnPEwtXt/XYy+AiSbNvF+IRTzJPkr8M1jJ0fb092C4/G11IGcDLYX/kKFcacZK5DBA9K8kchrnJiqMMcZnLM9CtgMqWngzo2dlzArJrBYjQtoIAEJWQyZs9NnEJzycXrlk//jpyx5rTCJqBeD+oQBltoRmMc4cKlskkmqEEr6hwWS2jF83TlGYDaYYTfaRCZ7eTZjz7lJNrLhHE+blMN1X/9K7eJvZyPJZp9qsYG+NQfMo3fvtWsK5kQjwEd/sHwbryhV9NMtJhmL4Gt2+VYDDTagICHatAZbGrfrRNLtmmHFgXtsv7TUXaG6n5LtkKQOyq/omMtwLBKU8Bed9wosaSFKlMSLS9EWgM1sYEokR0gcgTzTU0Mt4O32RFwm2Urni0nZdtCrbxBWR00YTB3UMBIKWDJiye/glgoN0z4cnqnTQY1TmH//684+5zpanwjnmIf/eLZrPbMx/oYEq/SnLK3TO6BMUIqPPanGSeMRfENsvOaRxTLIlE9YPbwyIPiFKThKXDVFq4JU5Nr8EfqAgKb6SCkORQRdA4YhUEAgYrgignWnFoVDeVdo/maUpsGpFlantFCayr3d07Q6g8vyFEIxj3gVAMbvuHhjDt+qAIwmYPTWHd4zGCGBrFvKODoogbOTSLff8GhQEDU/5ujQAUh6NPh6/HYB6KS1vSSYkaqJ9iL8rrqmQqzFsBUHzDCHaGTFjk3ixfsnpjlqZ3724JJODulgkI3N0SqCy7W340sL96d7dsjSjsbknNp+1ueXrS8ZGyOpDTj96ZJvkLYNH2SOAweCQTiDL7CESeKciEptyhFtA8t6c9aOy9aZ3NdmNag5OmCX5RQacssbQQStYWGAx+1jhyLjZsKPySQ8IxLjxsSNzyQwIyLUJsOMJSRCKyLkhcUOaGMy9ObFjiEkXisi9UbGDGCSN30aLCTc4CPkzWp2ezX7FmiEpX5ol2tmT9oXYS3vxcOw+gPNquyMfV/Hr8wumvoa1X0tGgVLoiyxC2YHUVQqJzPZ3tP7y+4p8t8sfvyDLfsBSqIM6Xj7HbP6zrxf3nQPZ3HmOSLx9jOLi26vctOZ/xFHG2fAhrUxi8hqljyiFY6J2OAKyACXGBN55kwhK+ky9Ys500e04/cJpOEwjvOQUYo+U0AXGOU8AxGU4TjOA3BR6r3fQgWZvMbDZNUKLXFKjsVtOEZQtzuUZTQ5t9c6JbtPWD9OTLPE0R40MWinzIaorLRpM2VBvueH9C+JIhT/i4H2pQjnKUkb7ftc2u6dhPBwgMcdY8mOFNc0MlnJLniQ5isOSYOFvwft+F9vBPi3KcKx9hV3Xd14b9SBqDEOXKQ2A/20II277VgvV79TsUVI/3fXyCA2JCKu8bk0QlPCNdKPChnhmvt52dPhEGED/FQ0HYP8CDgQif3aEwrB/bwSDkT+xQHI4P65hQLE3j+YgOBqN9OoeicX0wB8PBw1Ou75OQyAA1vFEtMg0J8MAkH7iXFooctjdlFYW5g/ZYYfGQPVzYopkn122rXffUyLH/ohglzxB9aHrypiUheExqE0u+dn9w4rOXqcY/yu9QzcoZZLrbeY2NxU1+g9/MGs85m/FFNRL/bhg1zFySlJZOI3H1TuC4yBjC/UNFG5JULkqdJ9mGFa44JvYLKrfaU1HuDrtTmL2Rziqn98+d0n1Nr0JY5WMGv3AbutB+sXSqWY586Xq7sCmPGfzC/fP2nn1qihi0UXK/6JdqXS+rPiyPX8sgJ7pUnMpmguDCn7S0odLh4RCNUTP/ZolVqoHEYlZKgMYuDcAQw6YQ1lgGgkAxjSTBYxuIgsQ4kgSOdRqIJeYl63Bb7ENRgBhIk6CxUAMxh6cpji9MKaucX8dC62bLO7Z5mnzXRpYoO7cElL2JH7bLTWA2l2nhSZ48+aHX3q+C4aqjHHnSi6b5XBuEz+nzZJdVX+Gix9R5kivu/GJaMz3G2CW6pz9zwmjuhU+coJLKDEcrI7ObEYCd2UQCeVaDEZpqaRtQUY486U3V9aHlnoShxSd58uS1KZQGgKZPKwIzdcoE0rSJAohPAdHy+hNAFvF6+8i6KV4/ypWH8OWc7l5+Lotm4bKboebbRtGnNcmdqOR306ZUlPvX77XyTyngDarLq7qc4ZmmyLc7RHmy2Zkhul+aooSNZwEpk7/tEKCJE3Cc/mOAUQ8kYFmwwwh0s3Dfht2aHKwUwiRHjrT2Av5FUnhgFOyAwHFGk66HnmOkWPx1PzwW0Ndf6Le7KOlZHqP8JHyEYWk13DEVAsgsTYEQQpWoBJE5KPtEDHtiCimqfDkYlR2WsrjoMXWepOKnaWXETxsBWD8tEsh+2oPAjl0VQx7FLpTa0AWJnGaUeEz/3C5DO9zu4of0LAk+ovnHMagiqYcx4guakxrDCCkpRhFQMGwf6+2wt8s9dUMqz3OVQ7hfMF9b0TlOWQvCbELXVY9enkvuLKTjoBnfS+r5IEQSMZlLAHHhWOIQo7FN3lUPRa5/E+idM1L4mDgvKlxWTXhwmOTJkj9vYMPicQ6r9ORFlWEHfNtJlm2WJN+xUQXKoXZOye7zHpPBqnEOq3Rcjb9sO+BB+DRVkUfhmWLVh+EJaPvj8Jy49kA8Li49Es+pqw/F2+XFx+I1Dv3BeByIfTSeg5AfjseF6fUzp2p4gNfQGPLDkGwzOJ6GFKHYsc8/1kAkK/HMNles9tQ2Re1vd+eT2wYIfrHAghif3jbAcDMbi2J6gtsAIjzDzbJYn+K249iayfwktwFIfJabJbI/zW1AsoSw3Ce6ZSwmiHFPdc+SlHqumyoWebJ7Tux6tlsQF5/uBsW5Z59JWfHpZ14wbsV3QbKfl1+L2M5ZcardjOBME81cxzC/6JLKaJxrewYhCZG0Gm8cop9LGIZ5cZpRiOns7eY0BoAobwgSYaMRAMQ5A5BImyZ+QFiY8BNt60SPy2PVbp7YAQBxQk8I7BM5gICEjNyJm8aIg8Z1ta1XoeuFeD9LUiToU2WqkX/OysjKz3GQysCzG6A4HcNIUUMcA8WVLkVSeLoVj0N3LX5SmqcpMTORZWrTUwLrbF/nRIXK87MVjWCcslAMbt6iIUyTF4ogzGA0hXUaM4IYGsU8oaEo4qxGs9inNhQGDka5k5wANHndeHhmsn0TVvW2Hm62SJ8v4dIWmfvEwvWjZ7jLYEC4m38yhXj7z4rAHNggAljObTDiKB1T5vJ0UABQ6ajCAR5c4hIzqVy4eqAHex25/cR7wIcVSDjoQ4ayHvhhBWMP/pCxbAeAWKGkg0BkLvOBIE40T1PaDwixwskHhch0jgNDrHj2cJl9gAiAmAbM99tVo07pUaKCc/m8VHASj4kdITFRNYdCAABq/YTE3+o0Etfa2rwYpyo3ISalYjPhBNnd3llzH4KgTXophmu2Q1DkaS4FccxvCIY6saUkvhnNAGNqIOcchuAAk1fK4521ECBDwCozTzFQacgaHpMWzzdNUhWcopJiwTlqAu0IWqmuOWghCFCrpyz+Vmeg2FbXZqpJsnJTVVosNldNqf3tnjVbQRDadEWAuOYrCEaesAgUx4wFgahTFsHim7MsOLZmcs5aEBAwbRFE3nkLQrKEsDIzF4cVB7H/p3m4Yzr18Sc8WP2jebjnRkhc2FWUkA5SJyruDmBo77uwaOgJcSI1SeoUqz6zb7DPtC4pXVLVF/5d+YlSlNAlVG+HJ40f29CRQ3aiNU2LyiXHLV565OxN9OgXsaulBzhWfXg1Pjhdbx/f1dtqPS+aSCJrxNP7NDM5ZqdJ8JGy3Lfju9LMzEaUezXNw0zuM2bpNZZx6wWWn+axys8b7104nDAxd8tjs01/NHWKc9aZH5sVDNiwyRvL9fZRMPbRz0Uc/bw81crHfCYvlyhZPiyuiypTXqLumepojLT1eIMe/17CmSflqV+IjwEd7ec04Yis8FX4RNr6RXhAnn2ZPxG3fQkekJa+Ap+om78AjwOAlW//8juAIH/1PWFwfPEdgICCSK5hZkAmX4mttstmI0wDkwRFJoK0RP2j4RNKUzAh1CyffkWElbYkCDyNyaFQrclPC9MUJSYGokT1275TTFd7OqcHTFr4hi8hb/12L4TAfrOXALB9qxeSl77RSxCYv81rgYAbwv4tXghD/gYvweH49i4EAgaa3GmDhYlDzdu2bVop0kwS4IGGHvVpYdIxVVM28xgnxJTjVyBBbkQTcuI2EiQWhkSg2iltrhx7uAqnKR+pYhAWDlJhtbXjUyD5ljdOhPAldYakEgQIWS4GINLxkP/47u6n/befV6vQSo+hEsmK+EauXNU9UtyM/HbVMx9aZtXPWbLFjcIG12OAULoXS+OZaAxYyqFALBZ3MFBZLPawII0rPTDID8YPVX6SptKVWBSw5WpLAxI8Y7w4lwkWDN5I8CjGJYMFh7MZPIxp+WBBERYRPI11KeEAMjaWeVlhQRIXFzyTfYlhgTJNArnLDQVsFtZuw3qNWJAkXSkPQheMmJAU3eNCGH3dhsDyVmlbXIUx9E7I8Dg7IQymexEGzGlGrGCSG5HJzHZEQhMGrmhI0oSFHAlTMGBJCPacseM3JTiI6Eo4GLstwYEEX8LhWI0JDiM7E47HYU3MSNYm85gTHEpzJxyVy57gWLapoYBBEdFmgU55pWeaopQrMb/MMwP1OJFEU/cg7peHKDlb6Mx/bYhicPYnAEZ3GQmM01/gMJKz4GjMnkJ/meqcSPQRpV+joooEvIP/BSpS0NPpM5xC9ntTIITgDjLfmAIBZEeQ/66UDQNvDs/8n/2KFEnimvMLvBxFwmTFZW2G/1vd9U37TZ7kp4lKzfNEqchUPyP2zPaUsj7hY8Jr4JMfDAKRtSgM/SkUCEb4FgoM81Bvq5Y8EoxBOGfIFD6OZoPyJUduA9Sb2jCqrk7pM2U3Vfs5kPfMGd1zhkxh05Czzf8YgB5gKRJniDUNQsH9CuPPaoDtccEZE4pAcZORaIZnqQr5YapUwBLPkd3jwm+MQQTRG5MYdnsMoggOmQSxmmQQQ/bJJInDKttgTA3kMcwgjuaZSR6XbQaBDIG9gHnmoeiQdSd/d4hMiAcuPFzPi8e+5kRfB+ctmG86CRDil51M4r31+vtCV90/3z+smwez+ilXAQTx41IChP6JKQ1j1ue7n76977p9aOVV4zxZqXUjWS6ycky4ucn6kMikfs6SLS5ad1pcN++o+LAI7qtnNojR+nGubARpxUTLq2smuN1tPc7m0lAIfZ6jaZwTHdws6iKGaRzfMsaIJc2MIpd5KSOA8VFSXM4k6QotaOhygSVNCp4xXvzLGhhDXNgwKPalDYwjLG4YGOvyBkaRFzgMjWOJYwUyNpZnmQMjaQsdhsm11IGhTJNAgeWOBBaHtVfX18ojAdMURSwfUaTq9magXDVvNvfHLzuiwtMsWeJdF3DZY+JswR9Mij9kStIzBCVnmBvAq5WHEHnJjsHDwpDDhjcCsyQlPABVpDb9z0l97eqc9EFxfr4nAYxTPQjBzfIkgmmCBwGEuZ1ksE7rNgy8OcyTOQgizuMkiX0KB1HQ0JM7cfM4cfD5qeqCsj05S4IHn1f85EmVeaXNnHNWRjZKwp2NR8pHX3oXX0sGMd4FXHoVsuVuhzlmu8A1u0uGLOFjK989b9+/sTZ1/7wVnqpAK3pd0RGGrupj6izJD1XXfzjsEZirfV11/bi9UKoBrsOmwa9/c0yd19nqx21ocdHunD5Pttm3i3BXkfMaLXzI0VePJa643j7e7B/+g/5wHXvd9fZxt3+Qvl2HxrV68Tn05g7XH7KV6mx3z9uhKg4H8eEIz9suypQF8DH0X5v2syHWbMccrkDz53jf//rm7tVmMqOt9ttDju6P0a/iBBkVeLrzQpR2+kksan544k0X9suGmszH4xOT302l3+4fNnXfVw9r0i8cT+wkE8k6kRmJ8rzaLq9DXy0r+nYinRK3Jj1xCVjxV9OsdIdiLkS4Z+q40KsonxNj3sh8y6LN+ePcF9yG/lW3ms7RYbvfdH9ME8jtd+knVbcaltR1G97EG01isVdVt2rHTEvpaBICW2F4tY8+/40yVHvhM+AGhjd1V63Xzde/f7rBGZbHTM/trhTDwzpcV10f3ZuEKB7WYXPKls1BOlEVA7KiBoqPzbs2hH8GnGDbrE45stX/um4eqrWV4PGQqxzFm7Cq9uv+U73brQ0YyzFbe8pWgGPXdHVvG6HLMVOpETqIN239z7D8+O6u+Ry214fwbuig5wK2q34oYHMqoFj0eL9dNJt6+3gkPLwAaA8n9bGUI2ZzLKU45eunsPjsx1scsxfnuqm+vX6qtn6yXfVtMRZQnO2u3Xf9ut5aRuOMro+KyB8VQ8kHqA/1NrxeV18fKkujHsjORItLfgcZ5VnuFMtyZ3MsfWxY4gWsVO5VHzsWaRGbcjMUP+8GB1etjRjNMVsxDsQ60VUBhmWwHiwAp0ooQ4AYtxmAzbYp+q+M4lnKk9td53SHVO9Pax1yM5xJa1jocQMPVfEMwtmFsWjcaDSw2UcmCkcNUXulgYPFWmNeKuMYRrGowWygsg1sFCoZ4QaiEjj0oJdp8IEN3OWZFQvf4Ilgrbcc5pLy3QZd6PU6VO2ghogthsSrNRQFOME3zaaiX0udqy1PKb1SbzdVvf4b88joXC0MicXP3uuC1+NBuMwG/lzxeGyutHGvSx7HB6LXhT6z7Q5DYhXaT/GmsjYeVqFtx/Ru2Xrx+bb+JyZZLz53NbTJwN4AIFfRgqZ11ey4nT2XpO5ki/fq9YhD301O4k0wPEoC9F7+XlPafYkbTHny2p1lptbTnbw8DOxm7xxGuc+bh8Te8k2D2Pxub2aP4G/8Jh2CuOebKS7d/k3kyTu/+Vcv3gSm6oC+/5sHot8KpgIvcxc4E0W5IZyAcPeC8zDE28LJjEDeETYDEAb3TVgHcfIdE7yEzY1KtjrdIzVnCUPX19uKu1dKyC8nOcpIy8OeUQdWxDLA62HZv+3rav3+jRT1Yv3FOU+9VL2/LK9bjljY6TpkBNl4xPIO7yFLA/Et1vcGN6gJNBNCtIPLhyiNoaw7J82RLD2z5U1OKGbJN0MymOaHYhaXJVI6quqKJv3UZ4wUBMAbTSC89kivCcQhzevDbZJkHNgnTSbPLKukAGFuaYKTYZhkGMQzxSRu25RgzF5/+Yl9Y+SnelnWK12KxE3SCMjND8KLWmcp9QUtTYB7MWuqIL6QJUj8VC+vmU2/SOKhXkrHzukS9AlzcwnhMDmlovb907HDcS+cXKpr3z9Vl7QuOcGbxUpWUyaKcm4sEjTZMFFMjJuRoj1UIhXLO660do1WS65i1mPFlWwzV6Ig6Koi9Rw7JaLwPipSNxoouYsJzinuYVbLJIuKXimWtZsk9WpldzS7ZoctEgEAPxRPkE4jJCNoDigGcFkfUV72PJG2w+zMhX+MPc7pESfysaLZz/hTRUO2u6/NwSNApV71q+Fhqf5rU53ysJPfFJl1b5Nk8uMcXGLL8xz0JcMq7gpQb3Ff0itUpR3tpFyLrT3zMvJ/a9ZL5h7bXPXplNQtJhnpqZbqpiEpzlITWqKvVsU2gk2ciW0Sq2gVE03pTM3uTDV53p5OpY0eVZNVJrSptmc+A6tdsqxk3Zt9q9oAgnmdNYHVwWrSsI2dcuR5WQ1KMrRTDrOrVTulaG1nfdLub1V5xeTOADxOF6kBze6m9eDyvBoKZHxn86jb/aowugWeoTh9sAaimeEphcsREwhz09QG7nml04/FDdOlVJNdGkld83ykCMzygBBrXxIl2b2IUndttay3j8K0Pq3JIbF0loV+bbJ/ia/N4V5Eaewirc5FlNTiUaTrikNIVYueJa1vu2ORK13yK3G1m92KKIt7lYgh06mIQKJPiRjsLkXugLJHifufw6HI0po/icVd7kS9ctWbzK7f50zkAAv5kjjI+l2JDAJ4khjD60hECNWPRAQ+NzKXn3kR4fGt04+lvYjrsa0zqWMvZfKkiraTAshwRiTREX2I/zmomZLdFvief5rKGm1BxnNPU11PIMh83omsb7Mt8D7nNKt2qy0o8nzTlCHPFnifa5oymG2B/3mmWf+z24Kc55hm4h5bkPv8Unr9LluQ/dzSbOZw24LM55VmGE5bkPOc0pTAZQsS+R+npuBwHghz4y7+Fb9v9+Hm8BITUNxVv1rv+mNiYfqMGBnN23r7uA5TayDqdocMgEfQtU837DDh0825XNWft+Plmmq72Y6XXKjWPwzfH7E195CjkPqp3t+v3m52/Tdb9dercMxkZUhs9SWVdoOYTGu5Pzyva7R4+0AD3sGmxpwByDECAahkMBqIrEMTeaefGaUGKueYBeDI4WvpUo7BbGjC+bh2tKRxlAOPQRyTy1Dl19GXYm0L6RHWtZKOJNFR4VxLz5WUxbQsJd2pmEqptyogKeyy9JsVitjbm7bW5pVRK+yOKb1Sx4jw8x6qxuP4b/ZZVansgcRV6dkEEcWlXZBI2LwNIoqq659I2bf0QSpc3glJa92xFSJXvbgXEle+fTNE7uP4bkjc1zO3Q0QkeT8konBsiMhdUdkRiXuiZ0tEFlf3RGJ536aIevX6rsisDpzbIiIIuC8SO4GMjREZBdkZiUHcWyMihr43EjE4N0fmADO792vD3jIZfipt9M5lWlzegdFh8S5iqr9TJTgXNNMQHZAkoj6sMak54FEN8YpENxJdkt2KSLLIxRlNiCSnRJqLpifAANUreY+kjs3GQ6xowXVEVW21HJIk7Dcu+nlmQ4KRnMZF32wzxM4meoyor9kNhiiruItI2GMttCvWfMX0ul2mQgyaiKOIAqfbTogQupeIEJxGQgLQXMRF3WUhZtKTuyv/VfdPy7b6ytxemfxc4P5KWh627zvFZFRPiV6t16Dy1+Mfq/U6W/20j2qnOG2flqQR7zaRFOBmN6TO328ipZFdbVMb2PqfYfsaopDvOdFDANyn5vRna4JJMu2WD5243D0foXzH4Ad256kRaEHyjEPDjZZcvJxwUeSemYzniSP5d81kJnOAKXbfDGvKFxgEwJ0zZWB6QhJwe+qUXoEqvW8xKdeyd3HmdexfTEXhLujaxyC0xL0MVUy6TTUTU+9TYWLgpel3qjQ58VbVVE2/V6WJHQfhe20YTm5WySf9qNUpbg/NqtO+RaTJ89tEU2njVpEmqywjp9qeRSRY7dK2EVn35q0jtQGE7aNZE1i3kNTejm4jzbp91laSBiVtJ005zFtKaqcUt5VmfdK+taTKK9tLMwDPFhNSA9o2U1oPrq0mDQXabpo5BfeWkwqjbzvNUJxbTxqItv00pXBtQREIsS08fFLudbVdBHJJFP1c1BbOy4VtYczLyB+S0FWayB4+iSd8/hKQE2b8RM464wPyzIyfSFtmfEBWGsmJtnkM49XOzvhc3dtmfKQBuBk/bQLTjA9IYzN+wpEx4wNQ7IyfcNhmfKRT8jN+2ieNMz4iL834KYB5xgdrQJzxyXqwz/gAij7jp5OAb8ZHYJQZP0XxzPgAiDjjJxT2GZ9GIGZ8+utT5x9fYrY/lmqd67sn/0x/kgTneV6K35OZKSk7MqrQm7Cuv4SWOZZ4JrYcE0unE+tXpvqX86X53AsvLXuXk6zDufCSQDw66XrjkFrVmmeZ1bfLsQiVrviVc7V73Aova/IqJ4Z8p8IDaT7lxOByKUIHVD3Kuf/5HIogDfiTs7jXnchXjniT+PrdzoTHgH3JebrKciUCCOZJzhgZjoSHQPzIicDtRibyqRdhz0GLfn4BP+I4Cy3mZedv8aNRiTTyyShA9jZsue8MJJJd2IpfG7BdpRhP6AuVvk4FiL993tUtXsMhTu4Wfb/90tSLIA2USLMeU6uO03smXCLo82aec+ESabs/c58NR3RlV1TOOh+Oq3uPT/OdEZc2gcOrFTgnLuHI9mu+s+ISDo9n854Xl/ZJl2/znxmXAji9W965cWQ9eP1b5tlx6QSf4+Gyzo9LUfw+zn+GXELh9XLSOXLSVwBe5BMAvvP/M46S18+RNwnxe0qW0/H9HzMwfcnAeQS+//z7nMPvM0++zz32vsCZ9+4D73NOuy9z1H2xc+7dh9znnHCfcbx93tn2WQfb555qn32kfYnz7PMPsy9ykn3uMfYFzrDPOsA+9/R65ej6y6ehXy0WYUdPYLM0Zad9qnB8+p/jO2wACaDaAVD4fdftmfma1K1P6fNkL+ls9X756neRaudsBKltshMggBheSAp7gLF1Qd5mSP3QaDfQ5mFtB91ANvsBQoA2hCTKsSMgHm9LSCKjPUG7sWBT6F5stSsoiGhbaBS7fTHUimxj2Lpx2BkQCrA19IzntDcolmZzaCiX3QGRZNtD8jjsDw9D2yDhBtYszQvZINetrDl+jg3S7kR4hG/3D/8IC4Nwd86QJ2wxQrG+2Qhl3eUiEZBbXaD8L5/e47r7ts4WVI2f+54T2uGgAJx398k26ADjl38fCm0e3fhl3JECIazGr9S9KRAPMH4Zd6nQbowYv6z7VSgIZvwy71wZagU0fgXuYYFQFuNX4m4WigUbv/z7WiASaPwy73DxMLTx47+aNE/zQsbP8w2lBD/H+GlfIPIIW/xXrG/2X8oXURD/OfkkCuw/ZWFk/y/Whff/XN97ojV9/sv/9Semxv0RMO9bUOIA8Pov55ehmAZy+q8S34miiYr4L+dXo2gir/9yf0OK6cVu/5XxRSkGJcN/ZX5fiq+bHP+V+7UpZqrN9V95355ioPL8V8aXqGieHP+VwMT+6837N7zxOv9Y1HFNS4Wt1oXU7rFmktbne1VpZrqfyVrmeVVSGmgzXfPYQquandLp+rbN5Xqlc5P4vNpNs7cqi03bM4aM+VoFYifqGYNthtY7ID81z/ufcU7WpaXJeC5unoWhKxenX+L67fOuiqFPuPNI65tpdRBlip1jeOZWFUKcVGcE9tmUkp9No7f08XnjL6Un0FORltlzAOTeQKr6SlNajmlcxb9/86ZZ7DeBnZ0vKvVyeUnqEWPutcQi0h0WuXDZY5wFHAZDEOXdxVnQaC0EMSWenBU9YUSvWMlRzGvXbCekKha8xKWSrUZCEIRdxFk9z0IIKJJ/OKubzYPUxUTncOlhdtsgiSqe4SLrMQzK1WpuYXLNLqsgAEA+4TKhuE2ChKA7hAuA0x4I8po3OGu7jMFUeOIKxo8e3bSh2vfkETHTFGVdQlo07ham4FzM3vdPTVv/E5avogw5wr9sK6v0fltK/HzVlx0WOpRJFbCY5C1UFw6gqFrKIUkmiaoUq1mCIDjTRACYzBMkLgZbgsAebi0NwZsqvjWM5gprEtZkUY1iM1sQAGi6CJoc8wWh8SaMoDGaMazLCqaM6rFWc4ZBiCaNwrCbNbg2ZNPG1InDvEFAgImj5nunmcOQNFNHAbnMHYQjmzyCxWH2OJDY9L3tFm3zlT8FOP69qOFLCobt3gSZAfj565Z+jiKVbY5JM8RWKzlGE6JDFrKnW8UF+5LKWs0LAsBYl1TcYlwQYVuNm8OKofJZy8K2gM2wQM3A2RWiIUxmBRHHrEpKkmFUECzWpqQkNpMCdU/eohC902hQIADJnhAIZnOC1oJoTei6sBsTBEa3JcSs5DMlEI5iSQgYjyFBUEQ7knLYzQgDQVgR9o2q+PeXsCKON6kmyNwcwR71kuoqx70gcsohhKkmcgohIjy27atVLxqv+KWpQ4bqmMEv/K7e1t2TQXh1yJAv/LrZLmu8ohdR8iLtK4d2+/mLUG9W7WbGyYRQa4t20/meGCIMTBs574cZKl+zm7nvhUHNoNhN9/tgiLjJbpZ5DwzB0uym+/0vqHuqdjPjvS8IALCbWe97obWA2M3s97wQGNhu5r/fBeFgdjP3vS4EBbGbWe9zMRCp3RzNA48x/v4CdjMq2Gg3j8i+na9YFtn5UsSwna+JqGHnSxYH7FcsjNovWfTdfr2q12vu4bBUdjXJkHG15xue798IUX5yxecs9ZK/S4qIq64vlvW5PqXaJdc3qW6z65OFbZ3bGbehyldcH9ECHtenNIPs+iYN4XB9srjF9cUk2a5PxlJcX0zicX1K99Rc36R3ulyfAqC7vgmC0/XptQC4vnldeF2fDIO6vokByHF9Cg7k+iYwftcnowCuL+bwur4EYuL6ttXDOrzaDN/B4ObwaZKy3o8oG7d/M3Z2w9F4cVdVlCNLGgjPlL4QnT3XL5gV8uqtfgXD4CwLhWByLZi8uRHs0cfUHLx9EdrE6GDAhmFNDNk0Nh8DjhPMypBjJcPNYHC8oaF4jJ4G7LyCrSH7rtXZgBiiuSFB7P4GrxHZ4nD14nA5GBJgdMjZzul1QCjN7pBILseDAcmmh6Jx+B4W5UfO+EyDYNjuNwnNIYnsfi6+ql/9temvq380bd1/Q8u96lePTb+55ILm/RGdofjQdB6MddNlc8Q28/rmrvkctuI7B/M0RY0mWTjsNBN8bqoY0w3HFg03c+lOTqNsdv3w1/qYVfhcGgrDf+yEJlA+eoLKsnaCVk39hEdU8Li0rNXkwldPu1zm2g02FwWQ5h+awjz1GBuFdbpiy9isLoqEGU0aLMNpwvGDs5pMzDB5TbgH8WaT6UBGtwmDSHaTQTH7TUutiIaTrxu740ShdMvJzHs+zwljKaaTgfK4ThRJtJ00j913CjA/slaIcp5kGtx6Xt/cUS9ZamVf9avNrkfetaSvAbN+h7TvT5WPNMc0B24L2YqwaWVWy+VSxfo5eUb+eU8y4UuYZELB6pRnV8MZhK4L/e2iWltpBuW+O2YsAHJdPdeb/YZ/NFVg2Yx5lUdVTTiHplqFVjaTbDOtQjt3lv6aGRNfh75aMsfMSHUzLmo2l9wFkLQFBgUCrTLATqsuNcge61tvgDVi7ieOlQeGAngRisdrRUxNpi1EhHZzrUYwONOShELMX5eAoUBZnJABwLNCAXuaukwhO5pvrQIiAQsWEsq7asFrClm6cPXlXr+Asx26iCEnvKyVDAiILWdIvIw1DQaHLGwoMvfqhsVKljjTlMI6h0hoWuy8rrYfmuhj21Dho61fVNv1mNVgDcQd9+ubu0/ht33dhlfxsUEGpnbMfjx1qCDX62o7PhLirKlwylyW6a6tlswqVUXqj3mLEx1stB/qlL0sV/JZeRvX4pI9g0tdvMIrfCmbcZk/DwEOsdyAQC30U1AqNrhh8yIFBpwGjZy6dYcQGHYaTXJYvbHFgjoNM5m03qADAyfxJwc4IxoZ99SGd0TbBrG+x5QvuasWS3i31U4XVOA2NIllvhkNguF7JxOczM0TBQrbPZkAZWyfKDCGZdCEKHcFhDUcuoNCtV7WForWhOCW4LQRTU8y2oBcmzoTunK7OlqwALd1pgEiZ19HGwLwxs50BOTt7GhQhq2dKVbu3g5QW5bNnaTOsnd3FEDz9s50giyyv6Mh2jZ4poAFdngUPMsWz4Qte48nBRNcFvMJhTTVS7or86cViIso6KouJ7B7HZUApD7gl1Bgj/gB0uiEK5y+7xPGHaT7cw6GWoCco+szDziEIbL6P/9gbiDUKeZ9FgLHchmyEl9vMMQX0Ig5v+pg6FGwAXN/7cEAYzBeGV+BsNWOxXBlfh0CBzMbrdyvRhjQbAYr72sSOJbFWGV8ZUIEYu+a3QbypRQmlel+mX6zbFLsuGNn2RU/s0sPKK49FHvT7jzBIRtY862LJI/xvgV404KW8TcMtuM7ayMfnq/FtB3ej+8O2V4tFmHXH47doTDTVEXXHkzx8NqDuAguUo0pb8N6bb3Yq+3qsPTownrdrKQbBGacn/bfvDQP+2+lYdrmM/vIpEZzyCs9NInjCCsUjsK6QsFhjNVhWaHgEJIl4UjMZsTcQOwKRWkl2wrF0FTckpptLNP+NQ6CLZU4qoylEo7ILpU4KttSydC1+aUS27ONSyUDjLRUYnHMSyVb7YhLJamO7EslHExfKrFTu2+pZEBTlkosmGepZJhkpaUSO7ual0oiEOH/ftq35HGH0c8v4fjO5Vqt3oHXbRwuspRjMModk4gtehE8GiVh3xqQZM/iTOTkozgBKdn4XIQcjkeSBULKRdsbRYBOpJmbpCe5XI3YAIqdiZrA42MkaZOBuXDkOxcJSrMsFw6XVxE7pWpSoj7pcyeiPGBLIgCvH9FqADEi03pwOxAJBbYe0RyT5TlEGMxsRCgZLkOcjAB7EU1GXl8xQyAMxfjVDm1XI0r1EvZiXrzVZcQXIc/+hzRSZEhQjkagOWXMBdFdT4Lg3C4BYGTXkIA4zAMAAcSGhMQbHPAG0hwF10ouY4E0leIv0sby2AwAxOQ2Eqp80wEgat4joXJZEKRrq04k7dk+Q4LAAL4kxfHaE7B2EJdC1pHbrABgsGdJJ64s64KgYQ4mBcswMsj0CviZdGr12hoaiHI3h1coVHdzSfUi7mZWvNndRBeRsbeRYMBbHAAAf5IIp66cH4JLa5ssiTK01wIIv33e1S37oT1OPcS5chGUj/1xDMgn/3AI1ZnM5eVnIw2dTrfSSa9zWmmgFmQrndSBw0rrEMiUNSdxT1ZwA6lWmmkln5XWsWwOdg5XwMHqiKqDnVP5HCzQo3QHm3Qop4MFYBAHm+C4HSxWO5CDperI72B1MNzBJuYkz8ECaKCDTcByHCxgoRAHm1got4MlgX4U/Cv1bCSTCn82cni+6liIoeirfjU8XHX0j4aJXHo2kUktPpuo5bE8m0hVhVUqr2LARwCva9HyDD+/xCrmXK51+XLgldctd9WzaGAv2seq7Y8Z3MLD45fiquEiWZ+SusWU4w3pClYONQRkf/n0HpLbt3WOjGb/L0KQ75ekdMN/EXM6ffFKwfZzeHtJFpjFL9reiRuods3GJ3Xv8u8SiMm4X3DyHbsEpVn1C4fLo4s9QzXnUcfwuXJRHrDjEYDXh2s1gBjwaT24nbcY5VHLHQX6LK8twmAmO0LJcNfiDA/Y6mh69/rpGUJipIffBQd9/hm3zsOt9eFzMEiBV/3q4ZJcnf7EV4l+3q6//f3TDSjbbNffnttdtupdu+/6D/UWvdx+SL8e0+cqj2bIUNf9NEue/vW+N0hvzqnNqozVh1dBaWLL8ifpzrCAp3MDr2PN+7mFx9rrAZx0AFiA7MMBQiJGho3KMU6QN+lmQ8bCZB1A6KK5WdYr0SAcErzIwvlSsnnpPFJn3PSLxeH7fbKsdr8tloRutclyyio2EkPWsaIUsLyM5LwLTBFBWWJG8p5FpiiNONdI3+1akSZQl5ppO/gWm3JjaDsbcXN4nraS5W2r3YilwHpXBFNXvBGLb80rd1R91Rv3U+e6V0ZAVr4xhHvtq9YEtPqd1Yd//Svi4CvgeErMWwPLQOAqOMbJWQfL0zWyEo6na/daeI7x5wvEl2pdL6s+0LZotd8evEn3RzKd6I5i03W4pzE+pEVdbPRzUcM1Lxe2WzEv53qGJFLXTsTHJ8a1b9oD0oItSUStpgSQZyxJIm0xJICsqa7N4QOvdtaKcHVvMyJIA3A2JG0CkwkBpDELknBkGBAAirUfCYfNfCCdkrceaZ80Gg9EXrIdKYDZdIA1IFoOsh7shgNA0e1GOiH4zAYCo1iNFMVjNAAQ0WYkFHaTQSP8OJv72S/gzH/GN9xvqq6rv8w3YsnyrvrV7pxamnf175C832zCsh6e05gbGlm/PuVr2sUpXx7Ju3q9/rn9j3qNIqzq9Xpo23W+9vBwDKjaBZ9e6h/Bb6uwiS3b3/POBZfv6GrADirf6yxg/j4IIBLd0cLm6JwA1KSfWnBMvVbbc47SKzAvsPyZfxwVXv74vkGaiMoP+QBS8msViR7wPgUgCi7vIl3L8k7+2l71ObR/DT1Wvf2Q+nFMnSd5U30zSO7G1G5JdRGbfoPUaEnk/istYuPea17Eyl+itPQopy1Fql1ZxKZ171nEiiCWlWSEk72SFKGUlWTE4VlJyj1DW0nGHcO1kpTl9ZVkDOBcSao1AKwkZ/XgXUnK8RBcScZBMWclKcNAK8kYxb+SFEGAlWRE4V1JzhEmRqqtFuvwJqwD46Si38taqXnBuJeKkTmzMaZpFvtN2PZM/SYEzeEvy2Mu4S4+giBNx4myeT4GALgJORE3zciAsDjKE3X7AMcrn5+UuRYwzspIM7C+Pm0I2+YyIA56goQkxxQAWLwrSEiMtgDpnoIvSHun1RggAKIzSBHs1gCsBdkbkHXhMAcADOAO0unCaQ8QHM0fpDAugwCgyA4h4XBYBBoi9QjMt7jOP76AOzB/eetCmu0LztpGU6B8MOiX3XDP/67eIJc9ROH9IUM/ZnAK37T1Iryp+uo2tHUQIt9ZeTfkWFZ91Z1yuKWbLzXzSbFE85zUKcY8yDjTkR5iVCVedV3oXw95AaVBoV8cE3sFNRvp/iiZKi0aSNcnyFRJfQrwf3AMrWrFNOZ9XkyvdNkuCl+/y5K1GMUS3zBTgRSL6Pximd4BNXPo/j6ZLq3bwoyvkUFXDhjCzG+PqRioFcz90pgOApnAvO+KqRCA/cv4ihglf3nM4Kb6Njge6hGD+Cf88YKPzad6t1uHN3UbFr1W5FW/2jbtIcPylIGeQyeg7KMNbV9X62NSQHs3ZtidM/i1P9Sbuv/PfbWu+2+A8npI/ts5uUk3tu1xEvH2PpnQcmufaVhIwtfMwI1qpsVRKEf7A1BkV0CRzB1Du4uu103RRV1cJrykOzFyno09FXGiphyFqIgoZwBOlJCD/3A5xg1winNDYBB9v/3S1NwnqCd69ZhSWAkrUjdV/0Q6rInM7pjKJXEbtsvr6lkV6cJ2uTmkc7bUuv4S2usa6ReHpJva3S1et2E57EBU6/dv9OpbnFPXS3c1souRiZT8PIo2gPn17XQEG1e32pXRa9vpdRlWtmp/5P3srEMafSxWveyalqpj24pWAcAWlhOMjGWlAsMuKif6tiWl1vL8gnLa8MblpCYrLSanwualJHDF4kIyuW77MlJB0BeRUy/iW0JqEMoCcorgWT4qAOLicaJuXzqm0snC8fVTtd2G9et1VW+ERWSSDF9Qfgrb8NVS6lW/ao95xMkqRWcIXq+bbv68vEawOOZxExAWPkmOLPj4TJbF37QRzCruJgFWW9PW8aD52gpcd8X5QMqXWI8l5VvXZpPrcDrJFAJylYj0MY1JfHHOky3/U7Wu5EkolX8458mWVxfIqTq2WEbEkfkv1acnQifCzf5hXS9kJ5Ii7A655o7E2wHBhRvRDS2LOKg3qKstojv4Vl5QVBBXYURMsK/IoG6qG0WilzrtoqGZtFUb21auFRwCZlrNpXj5KzsEUlvlpVyuFR8aAOXVHx3+HCtBCAdYFRJA3hUiWkPIapGuJ/fKEUGDV5GEg8paUUJw2OqSQMtYaSJgyKozpXKvQBkkwW6zbw1S6V7ScDveIyQvJdf5xe8mmayfKI/dNCEYDHdQIJDb0PeHJxwrJL5M3hYbMi6PGfNBLFY0wjB7URFifNn51aqnn8njMcb3m6tjxqL9A5uQ6C4C3PLCRgvsjDNeo7QAYd7Y+WKlbfzAE2DOq5aOxkL9ce7Ll6ZmAzc6xPe5S8G47HqZd0MtmKhhd78taurusGXPeH/UBGQw7VlvlFpryWLbs98xtcCZjXv+W6cmPJt1z30P1YJmMe9Zb6YqULx9f7ffLnW4IdULWvdz8U7jfriI3O3qC4Rtt1oSR9cMF23TikGSlg8l4eSBs0kMV496wOjysxygBAP5vwuI3/1JEHgMvZBkxk6ggUDfl7RSjusTmwrzfFFjZTg+CcTj9y5UxdyehAh6vQtVjtMTuzbq86KeneXyRBjc40U4mQ5Pqx2Dv5vWUa67k8Cs3i6aqks4OxHN5OsisHxXJ2EZPN2FKdfRzYB++Jd//7fv//RDvCcXz2+Dder+OP5RtG2xLxyT37Th1WZ4ipd5kD1NhfvCn6ouMNMwU+zVQ9UF6aOSBDQj/imsQjv01Hch/LKt6cPLOIz2lHkVwv6YOR+oC+2XMFSKDeWQ7aESHqQxQ7zfLtpgbPITSR3lzcURHCNHYXWMOAywjOGgpGVMGTjjOLLYWRxCmjY4EvOEYe49rJ1VupDNzhqairOzbGOZ7CwOgtlZjirDzuKIrJ3lqGx21tC1eTvL9myjnTXASHaWxTHbWVvtiHZWqiO7nTXEbNXOsiHbZ2cNaIqdZcE8dhbHEu0sx2S3syIQYUObrkd8aJzMbETftM1OGuFJ4Sc7ujxmFO3O5Ap0D2iHiZxgaaCzH3RTnV1hMTTdG6YwTnOI4ODuMMXKtIcInuwPUySHQUQwgEicsniDsKEXaR6R7Uoukwg1mOISiSbz2EQExeQTU658o4hAak4x5XJZRaiTq16R6OM+swjhAG6RAPLaRbSGEL9I15PbMEJxHHWMRBjPsowQHOYZCbQM04iAIa4xpXLbRgZp5hs/hcf9umr5LnZJUPRmdloyfB97Ss2aMtt1XbXjv6VnHCFh2XLNVR1mS0fgfcxc3uhgdGklJsz1PXEAbgLJrzDtYHYqQGMIHiVpDqs70eVhXzJnyXMkOpjkReYsZhcCdFTRfyT91O48AATFcyQQHreB1YTmM6j6cDkMHQfyFsnU4XYVAJDuJxIcp5PQYTQPMSdxuQcSY+IbDsPhQ931zInMkwRlfUNSMu4bJtRiXPjPfdPuyRfiCf0xOPx2ypIt/nbbc0cks+rhnCdDXrIuqbDZuiAInHVJ5U3WBap8KeQQ9W4ONoYm4K0L2w5G6wI1BmtdiOawWRdEHrQuKUuOdUHAeOuSshitCx4lbPGhNIJoXQgIu3VBa0K2LnR9OKwLggNYF2L2cloXCEizLgSOy7ogMLJ1SUkc1oXBiK3L2Eb8C7jx70WNS1Iw7FsmyGLXe81N34T44S/pDG4VFjxDKmq1DAgA4xhScYthQISlcZ6qmwe4ofJZt8C2gM0sQM3AeQWiIUxWARHHnEJKkmEUECzWJ6QkNpsAdU/eJRC902gSIADJIxAIZouA1oLoEOi6sBsEPEjbuqjTHkA4ijsgYDzmAEERvUHKYbcGDMTEGbT7g3HQzy6kU+JuYfiCeb96te+fjKUfPmHer6oxJzNp05choZzOznfRnE7OLwb0eh2q1o+0GLIXhxqStiH801dHq1PWgjXkxTnUT2Gg29C/CWGXUUPLEHYvUUs5WIeaKgH2Ix1jzkTjma2T3+Rg8mcplHClmYOHoJgMT1nUNhw5XTowCMqOUCBc86wbKdVs6DLi9eKq5oEtXCsxbOTrtQ4T8Zpt6q5hqngAKViU3RWIC8V3BE6Y3Hpo+EoL/x79VPTwSRflFXpN8Pg5mffke/NTuePHY4RvUIBiP++BizuqNXv/tfEr24mSfFawJiJto0xkzFso2tUx2yfTa7NsnSiC4vJnompf9GCVzG+XUDVt3CrRRia2UzEdoBm7FAoOv0MxITDuTmg9QNiZmHYA666EJizuSEyl7bsRwFXLOxHJtTt2IRQIYAdiOiE5dx80DG3nYQrh2nVQEOQdh4m+Y7chFY9dxi8fP1w3y3pFdoPzj0V9xrRU2GhcSLl4psaymbIQyEzC5wRv6q56WNdbclDPxPfb9ebwz2WUKRfg1+Fk9KpvyLMsOYAvUSYngGAZZqpWz6BKM6ZhJmtxDaqkoYuZwxVa1axxoOvb5hz0Sud86LzaTbdX9BEOOZb5KPdbFhWI9SwzBptp0Tsg71rm/c9oW3RpybfMxc3GBbpy0bkQ12+3LiqG7l3mk5zPvOgginuZY3jsiwoh+pcZgd3AUPKxg/n766eq3r5aLo+Rcbyx8qrvQ9ez5+epmYo6HkwNdkL6FXNzB7sNAxIqWzN+sEuST+Fr1S4FQ4GiXv7QHoqknEdp+DEwF4UfI/iLwSvH0oO8yBn1bsSf+6fQHjKPk08GZzMUtRiSdqeiCsOKh9qDlPoJ9248cbIA8fTvUeXjjVGgBGR7Kqkw6n9V3Ydm8bnePo5dM9Dn8IK4X6tuPZY29s6xtMLIx4xxLvYpPZD7+YB7jE6LQ5oXClRjxp/aevmY03lH4IdTMaWngvzIb1wfu1GZdTOIaVlP+6OB4K/RMGB13LlNz67Lbe1vW6/7OwG3jke7gWl978bE1v0gc8Z+gPsC2H0CkNm2f5A1/TL7CoZp17Lf4EeV9iFQWPP+RFbNivsWhvq172e4sfV9DnRp69v/8IMr+yIotme/xA0t7qOAxPb9FQsuue9y+NYcut8yT/wy+yykin1/Jbky/74KTYTup8Agnn0UBs29f+KAxfdNVFjjfgkKi+6T0Hym/REUybQvQnPZ90NQOGwfhKYy7H+gONhkQOMY9jtQHOvmAQ3m2jRAEeH1Ns1mW2fboA6plVlSoloMv9UF6yojcHmX+yiatsynsVzLe3gsInaSGYpuA2lsSn0ZL7anc/kON6q6bGea1bdcR7GMy3SascTyHAXWl+U0o3M5bpmstGU4P1W5lt8wGrTsZuD8y21LzWHLbL7+MpbXKKZhWc2sZDKX0zAouoxmMLOWzygktmymCTOWywJeukwev8fO8l2+/F52KRx/5960+BU/aY9Zw0jbYAYBYdX+JcqY4ROlofVfJIyv+FBZMejSytLHwAFxbVsjEoU2MmQxzUPHai7XLMqLPjmStjtjUVafAyJtZ7xHql3xu2ndexyu3ACyp42bwOFiRWmLb404sp2qCKV404jD40blTqn5z7hPuhynLK97zBjA6SrVGgB85KwevM5RREG9YjzV57hDGQbygzGK3wGKIIDniyi8Lm+OQPi6ZrOppUnr8PtLOLtLwVZrNyLnebtI3WLuAGnd3SXaoL0TxS+b6ZjTiyAum+gG0yfCqMYrUseclyynWq9Yz+e9RADZfEXiDvclCgNhNVL3RlSk8jUDlraAy4HJzaBYsLghPB5MFDeZsIgk34WJWJoNi0hcPkzunqoRi3unz4nJAIAVixG8XkytBcSMzerC7cZEGNiOxfNzlh+TcTBDFsNkODIRBbFkEYfbk80hCFN2eIJF9TBRqpcwaPPirTYtvog8s5aQWCwbgAE/tZ+S2B7TR2CuZ0+4q14qYdrMHmjHHBaApvushMXptgAY2XMlIA7nhfQcPY6mXcYZR/EG0rwY10ouR4Y0leLL0sbyuDMAxOTREqp8p4YMf8WvpaPd49rAoCh7NzIYOhwcAgP4uBTH6+bA2kE8HVlHbmcHgMH+Lp3es1wegoZ5vRQsw/EBWIjvS5jc7o8G4jygvpkUJ3sxFxiX77KBp+so4AMnLGYjqIAYneCExWMFFRz8CVmCx/hsLAQEOsAJR44FVHAADzhB8ZpArdeA0XbaXXICLdZMkA+k2spvBLUGQ5zgtMncVlBBsXvBCVchM6hAQm5wwuW3g0BoBPxgEhK9hlDDQR3hFCjLEgI1BHvCpJ7yTKGCZnOF0+k+3xZqcAZfOEXLNYYKGOwMJ1R51jBFIt5Zm56AIN/BJRK/xDtrjIr1nTXiyvLe7+C4LO934FD4+R8cl/HcDxwNewGMwzK8AIYjqa8dcjTYa4cGEPX9F5bE9/4Ljia//8JhOd5/MXRy/blvtnc7n/g2N6X2/ovSnq73XwyNqrz/wjar5/0XHMv0/gvHmP/+Cw6svf/CMbref7HNAvL7L1L0d7z/YkAD3n9h4bzvv9hqDnn/Rao/9/svOCb8/gvrirLefzGAYu+/sJgZ77/gkMj7Lxyh+/0XES+13OMJnprbjFO9gMlOije668lFZNnqlMTgpxEM2EinJDYHjcBYb8mnTK5b8gia4iRSEvnTKriwaplTaZ9XhmpBMslEHZjdMdRl1emA6Ku+GcDQQIoRZlvJ44ARLIvHTOGyzSU03GVXSYxuh51Eg6DoI+ngZzeQEIzuHAkcp2VEawfwinQdeU0iAoa6Q2I6z7GFEBrkBwkwvxFEsAAHmDJ5rR8D9KPg+KhPTDKpZNuXfJ5P8hW6zumLfXneQvqIH5Na/KSvlgd3xkAlWXULVhn1edK47m5Cu6m7rm62Yfmm2RzOSSLByYRF1w+8AryEoK+G22w+JKDHs8CyPPxTeBPKBPFqsQi7Pixft2EZtn1drcmpVOCpjiUsJiWUQeN6sYxjMtAmJMZDCzgWG21CkaZOgcc8b3qajPXTervZLLWt8bhloNR8ps1kEw5m8gW2DJ9vAmWtvsBmc/u2js8bfqnfGz2/DUmy/RKU2fmba0o0/0p92f2/CU9fAkgzsm8VYANUFgISnmctYIITlwMCmX1FoGHJdu5NWIcerL4x7Qubukgkw9cdL6uItYuJHO5ORjG5qJgk30jJYLCXiqHy7JQMZItEMVWBMAQ1osFXES2Za62U5sTd1aRBMw2WDOX1WDFhUZsl4xqcVkyYa7aUYWHxW5NRkW25FDCb65qgFTBeeq0Zvde87krYLxnS48Am02cpE6Zgmn3YBLKMFZMRjW4s5ithyBK4P1/Q6m7cE1x+bJaX6lvttwfb0/1x8rvovSaFHnb6aqHUOAFe7HglfKnR72KhsSmlrj9qHvTyJw1uLPNq3ENdbsf0tLWLy6SvhKz0SBau8+m0Yy31anP8i3g5k2Lp66FaOxJGG3v2DK+pzKvl+AfxUuIyoyv5l3//t+//9MMlCMSSw3qi+6Opn0bLmevQV8uqr36qOvIqmKR4Lb1arcLieEnk3C4pXFXH3NtjbrrWuOvhG67+Etqw5O9eiFDLU37lToUR61zsfZXJdV8WLEr+frsMz2awaPVbHwsoDfYpdPu1vcoisvZUghdtPkqJHLNBS6QQB9b/uRT+6f3NzYe3b+5f3by///X7c7lfqrauHtah++M0gavYH7Rif0CLffP23atfPtyNud5+un3/80eibCKVHNJmFf7q5v2voe3idyrGer78YCpvXNBNu/xYYPQLHHT//umGvE/66QYPpot924btgn7A4ljQVZSIuYP66YYTqLtuH1qx+HMSpPC4At4PGZevhUuYpihTLUSZeg3NUM2VRYkq9cZKzntlUoFjl4RqjW8Ofiqk0uFN86Va70ljwRZ7dcqC1NMRO7tfxPpk75CWSRYktM/EQETPycCZ2PybO77hzz/irb3Z9fcDbbVdhPuafFB4WupVmoPx+GdSa0ebCcq9i5JJpplpjR2nGL2m4or/qVpXzE7I8acy0S8uTA97Jypz353IKIFOEWHbcaIht2IqEdf9uM9ISYy/4DUPlXTcnmRhj4UwAzRsGrJTh01jWHdrpRx2dvlBMfzIj4fbvg3VZnJfbBwTlx/gcXFT9U+3fdiRu1vH3/DrroRbUnFh5C2oyUbYCcsxBKdK6hjUpPhBOBVSRiEhM2/XIcmsRYc/wW05duy3274l6yX62Tri4DKPYy8c00sDcCyTvpJPods12y78vF1/u3t+v12RoylNhV/XsqJvXTNlXh3T0xdE4DKyT1X3ZJE9ps+VHe9y3dfcZgInP8tXCMNaCdNsuRD1dlxMWgjq7fqUxyEf9+yP7+5+Xq1o9dNvhnjLeslJWdqJAWcoRmbF3QGeqsgvV2ki21V/3wwJ+G46lUsz+ISbr4ynmMqdkvlElvL5E1Mp5LgJTTA87+oW1JukheVm3br5HDip4Se8Uw/tSi9l4qKuzslY4AORMyJOpKAwqAhKveyipHYySaLu7h/27TbodRendElJEeEiowYESeKwUzyM7hX9ONFEaZbYWX2c0ZvVnejzFJGh1/bVMzsqp/37lNIt1YW2rtaQ1jmpS2zf1qrKmAYtPg4vr/b9k/C4W/Sz4T6Zrcyrat8/acuWuEz+Spq2/me4vJbBqc+Sme5gO4q+WsTZ+Oub00tvTmkv0lvPCoi/uv6maeh983nJV/FX1pdjLulNJ+UN3gjhsPFnZ6iP2fwQg7C9HuoxV5l6iBEM9RAzuOphsnnR1ovwJr7NF6/OTz/i3ctQ3tVu+OfxFiOz4j+XRj4R8xj647bZ66dq+xjdq788FZOkQR+3WbbNrrtr/t7uiFIvP6LFPbe7u+bNkI0o7vIjWtxT1X0Mz/1N9Ug9ChT9ihbY1rvdOtzVm3DXvL/9efgfomAiFf74UjPm+3Qug3yIKUnluYJftvUzcAmnZKjE/pheuQgqGSqxC+0ibPu75j/31bruvxHFz5PAPTos6k21loqeJzFT3x1d5Kd4c4hAj9OZ+RURMh0q0kd57po3Y1GECJkOFfltrF2p/HkSfJj9Wq3r5W1YtNG7wvEAi343FvpquWxDRwWwaQL0EYthOyoK2penKsYf8FlnSH/YEl3ePcvFXd3fD9vCw18O+6zLnl+OHrONOSRpg2gJuaM9/tQ0Pax7tN3tmCcTYNx9/lB3/fulrbrbdd31wpYDjHDYSTGoH3a5SgjftfuuX9fbgDd5lCO7o921waD83LfCYh5v734IchblbshRRny21awpK7vMRtm/hWppFn86ZcpEeNst2uYrLB5OyTNlb6pvm7DtB7u8DWtYfjdmW5yz2TAm83xbfwl/52ebaQJ0EhsC0PTaxq8bp+UzKVGhL6GtV98wKTYtKrZotl9C29/2bb19vGv+Fu3FXlTSRMbi/xae75oxO198lAgtPmwX9MsM4w8GZ0gXM/5go3nXtNf7dV8f31Ji4WbpzCJA+ZlFc52OTIeKPIb+uNMYvdAzWW+ff4ZXD1XbBanQaQID6fFg/NlHkCa0kySy5fwhOuKp3a3ftm20b3TM8sfzL2JZf/r+h3iMdX27X/RqaVfTpMyuzxmN29WuolUrI3RM41TYhK6LdyYYkUsyp87k+XRGRNxgohR++Jd/vbRzP496jErfdKd0TqV62+3CoteELskMdRZ13F+24Xl3eD+F7r6z34t0YqpMqCvPYS0dmhRNurX0UCqoznV2EoDq8gUYyIFAAiTDwaeODRKSgBwqBSi4AURCUMPI2Q7R4HrdbLfhMLXQg2v2e5HBRZUJDa45rGVwkaKmwQWqc4OLBLAOLpCBHFwkgGlw8erY4CIJzIMLpOAGFwlhHVxCO0SDa9xLZ6at+MciwyopEBpTE0bLgErlTKMJ0eWGUiptHUeIOjmIUmnTCGJ0seGTapvHDqLPDZxU3jpquFqPhszHpj+OLW7cJCmKDB66VGgEpciWYcQIm8YSTMANKAbCOqpgDnJoMRCm8SURYIOMoTCPNJiEG24MiHXMiW0SDbw3dbeQB16SosjAo0uFBl6KbBl4jLBp4MEE3MBjIKwDD+YgBx4DYRp4EgE28BgK88CDSbiBx4BYB57YJqlJ/Nj077f18HBd/U/FMhJJSxpIrniLnaSuxmEuWRSP1TQwKcaTxXLaUAOZZEpZLI9FlZlMhpXl8tpXA5tiZlk0p7VVWjIa9sMTVs2+pwd6/GORoZ0UCA3mCaNl+KZypgGL6HJDNJW2DkpEnRyGqbRp4DG62FBLtc2DC9HnhlMqbx1AXK3HM+Xxfbt3TbupmJFDpCkzNzLlYpMiAW6aDTlx2zSIU7DzHwdinvhwFnrG40BsU51IAc5xHIl9csNp2FmNgzFPZ3L7RIPy8BRlxd9AmP1eZDBSZUIDcQ5rGYSkqGkAgurc4CMBrAMPZCAHHQlgGnC8OjbYSALzQAMpuEFGQlgHmNAO093Qd81+y++EXn4ttQs6KxHdAY0wjbufc0HrzqeuLOx6zsUdO566PrfbORe37nSSyvAu51zds8OpEwi7m3MAx84mXffxQ0+fbj68q/aLwNjF2e9lHoAiysQeg5rBmh6GokRNQwlUZx+UogCswwlkoB+iogBMQ4pXBx+wogjMwwqkYB++oiCsQ4tnSB4aTo9ynz8qfE6BPgW5GZ5RHZ5oJoo8/0YV9v/+4bvxuIa//PdAdzij9C/f/fC//8///vfv/vDdqg7rZffdX/7vaQT9/3zdTXItu64t5r6csmJ5EgDx0xFXTtzSs4uOV3L/HSKpsDQ4iNqNySNc7aUxmZn4kuT/+t//z/c7zP/5+s//9b//1/+7/s//Of+z//P//v6mfv+P9//6//j85+u/n6+Y/+pT//M/X//9+eE1sD74qfH/f7J+cPzn67/ja+o/Efnzg+P6wfHnB+U/X/8V9v9Rrh+UPz+o//n6r37F51/++TG9fkz//Jj95+u/dv+YXT9mf35s/ufrv/NL819p/PnBef3g/POD/p+v/zr77/PrB/3PD8Z/vv4b9y8a14/Fnx/L/3z9N+8fy+vH8s+P1X++/ltfHv9M/c8P1vWD9fcP/52DQTMz7tAMSM2KzaA/TILzNznjOw+DZmfc4Rl/0zO+UzGU/vAdofE3Q+M7G8PoD99BGn+TNL7zMSb94TtM42+axndGBs3TuAM1/iZqfCdlBP3hO1bjb67Gd15G0h++wzX+pmt8Z2YU/eE7YONvwuQ7M0ITJnfC5G/C5DszQhMmd8IE5qY1OfHZiUxPfxMm35kRmjC5EyZ/EybfmRGaMLkTJn8TJt+ZEZowuRMmfxMm35kRmjC5EyZ/EybfmRGaMLkTJn8TJslndLnjJX/jJcUndbmzJX+zpStbNNV6Z0v/ZktXtmiq9c6W/s2WfqdFaar1zpbCtW9d/GiqlVwA/2ZLv9OiNNV6Z0v/Zku/06I01XpnS/9mS7/TojTVemdL/2ZLv9OiNNV6Z0v/ZktXtmiq9Y6X/o2XfmdGaar1Tpj+TZh9Z0bzy+LfjL+XVrsTZn8TZt+ZUZowuxNmfxNm35kxmjC7E2Z/E2bfmTGaMLsTZnCPtW6yaMKM3Gj9TZh9Z8ZowuxOmP1NmH1nxmjC7E6Y/U2YfWfGaMLsTpj9TZh9Z8ZowuxOmP1NmK0JjCbM7oTZ34TNz+vee94Bm38DNr8jY/nl45/Y/PvDd8Dm34DNFTCaznkHbP4N2PyOzKTpnHfA5t+Aze/ITJrOeQdswq38upen6Zzkbv5vwOZ3ZCZN57wDNv8GbH5HZtJ0zjtg82/A5ndkJk3nvAM2/wZsfkdm0nTOO2Dzb8D8OzOTptPvhPnfhPl3Zia9wvqdMP+bMP/OzKz7yu53vvxvvvw7MU7z5Xe+/G++/DsxPr4n7VF/v1N+58v/5su/E+PypfOfOvzwnS+Hx8X1vKhfs/7lsL8/TJ4Y/+bLvxPj9v3/eaj+/eE7X/43X/6dGKf58jtf/jdf/p0Y9+8HZJvw//nOl//NV3wnxoM9Xcedr/ibr/hOjNN8xZ2v+Juv+M6Mk3zFna/4m6/4Tkx8yI/e6Yq/6YrvvMQgP3pnK/5mK77TEkJ+9E5W/E1WfGclyP113LkKaEWsXgS5wQ7SjfibqvjOSUzyo3em4m+m4jslQeesuDMVfzOV3ykJOmflnan8m6n8TknQTOWdqfybqfzOSdCrYt6pyr+pyu+kJElV3qnKv6nK76Tk+DL/lzL+/vCdq/ybq/zOSgq7S807Wfk3WfmdllT6w3e28m+28jsvSa+Jeacrodm1ul0kXUn6XX/Tld95SSc/emcr/2arvtOSpDdXd7Lqb7LqOytJ+nN156r+5qq+k5Jkrqo7VfU3VfWdlCKpqjtV9TdV9Z2TInNV3Zmqv5mq75QUmavqTlT9TVR9Z6TIXFV3nupvnuo7IUXmqrrTVH/TVN8JKZKmutNU0D5d/VOSpiL9U2ygfkekSJz2yN8f/vXZ+envlBRJ1B7Bn4YW6uc7KEVCtUfwp6GH+llN1M+j+UvaqB/oo37s8f3dI/jT0Ej9zMdXeI/gT0Mn9eOPb/EewZ+GVuonHl/kPYI/Db3UTz6+y3sEfxqaqZ96fJ33CP40xG214Nk3erB+/dWwH48v9aANe4jbasKz7/VgHXts2a8uPPtqD9ayx579asOzb/dgPXts2q8+PPuCD9a0x679asTTrzjr2mPbfnXi6Vecte2xb79a8fQrzvr22LjfnfvPg2hI3KB5P2T7kDBbGqR/P6CBP1ZPnj+LDdLCH9DDH6st//wFGBRB7GTPctyKSCt/QC9/rPY8fywbpJs/oJ0/Voee39kN0tAf0NEfq0nPb+4G6ekPaOqP1afn93eDtPUH9PXH6taPD/vikt7+gOb+WC37VwBIAqHFP1bXnj+PD9LkH9DlH6txPz7za+a/6fD3I43+AZ3+oTuBzguQBEK3f+hOIJc70vAf0PEfq4k/PlzvSNN/QNd/rEb++FAhHqTxP6DzP1YzfzycmDT/B3T/h757G4P0/wcAwFg9/ceXiBDAAAMYq63/+BIRBRjAAGN19h9fIgIBAyRg2KZydt0mFDDAAsZq7z++REQDBnDAWB3+x5eIgMAAERiryT+GsMbWICgwQAXGavSPoV/T/sUH/wFJAkEGhu0E2pfLvxpYgCQQdGCshv8Yk34HCBAMEIKxmv7jofcECQYowViN/zGC/wYkhCAFY3X/H18iggUDtGDMHcL8mvJvzgkFSAxBDMZCgMe3kJjBADQYywEe30LCBgPcYCwKeHwLiRwMoIMxdwrZ3RSxgwF4MJYHPL6FhA8G+MFYJPD4FhJBGEAIY6nAkA//+5EEAiOMJQOvAJEAgiSMhQOvABFMGKAJYwHBIwDEEwaAwlhK8AgAQYUBqjAWFAwZ9CtIYGGALIxNC7RTPogtDMCFsbxgCL+dJb4wABjGMoMh+jXjn+FfgL1DBBlcbDDE6Mt+hBkGOMPwHUI+jxJqGGANY/HBkPVv6AN/A5JC8IaxCOExCxFxGEAOYynCED4PE3UYwA4jmqsxoYcB9jAWKDy+hsQfBgDEWKrw/QI5/Q8gKQSGGLFTWPR7TCxiAEaMJQxDP19u/wpTRERiAEmM5QyDvwMziEsMgImxtGHw92AG0YkBPDGimi8CEYoBRDGWOgyl30SCFAOUYix4eMSYOMUAqBjLHh5zKaGKAVYxNlbwuZR4xQCwGMsghrLnQiIWA8hiLIV4fIkIWgxQi7Eg4nExJW4xAC5GNk8khC4G2MXIbK6FBDAGCMZYLDGUtbQIYgxQjFE7fqynRSBjgGSMatJHNGMAZ4xq0kdIY4BpjGrSR1xjAGyM2unjD9VENwbwxqgmf4Q4BhjHWHDxyA9xjgHQMWrPgPyhnmjHAO4YtWfAx2u5JICAHmNJxuCvmA0iHwPoQxZmDP6amRD9ENAPWZ4xTL6m/zPDAuQFXwAQWaQx+OtmQgxEwEBkGwh/5UyIgQgYiHz2y+T8dV3CIAIMIgs2Bn/1TIiECEiIbAmh32QhFiJgIbIthH6ThWiIgIbI1hD6TRbiIQIeIp8dQ9JeFwIiAiAiizj491gIiQiQiCzk4NcRISgigCKy1zFYfs3xrxR+niQQWET2UgYjz6RCXETARWQvZqB3IUJkREBGZFkHn8aE2IiAjche0sAvg0J4RIBHZIHHI74ESASARBZ5POJLiESASGSJxyO+REgElzdsIZnE84Stb8AFDo2PCFvicK1xkHd86SoHiN/mEd5TELbSAZc6LO7gb0gLW+yAqx1kL6ihj+TCFjzgioflHWMKexYRtugBVz0s8BiTrV1gyx5w3cMCj8c3iC1+wNUP0jwPC1sDAUIiSzx4S0CIkAgIiWjTFhQiJAJCIltIeFNDiJAICIks8HjMAQRIBIBElnc85gDiIwI+Ios7HnMA4REBHpHNI/zVYCE8IsAjojuC/C6C+IiAj8jyjsc0QnxEwEdE351BIT4i4CNi756MEB8R8BGxd2NQCJAIAInYuzEoBEgEgEQWeAz+irUQIREQEtlCMtldDPERAR+R7SOTvCUgREcEdES2jrBXrYXYiICNyLYRZ9cwIiMCMiJbRpw/BxAZEZAR2TLi5L0UIS4i4CKyl1A4m8AJiwiwiGwWcbYCjaCIAIrIQo7BX70WoiICKiJLOYb7l9m/OQ0KkOwBi8hijuG0oSnERQRcRLaLOG0oCpERARmRuRe2UmAWQiMCNCJzL2798AIkg2Ajsm0k+G0EsREBG5FlHSP4RYzgiACOyMaRUFqA4IgAjsjCjhHGC5Akgo7I0o4R88vmP4M3FYTwiACPyOaRcP4bkCQCj8jijhE8icRHBHxEto8ETyLxEQEfke0jwZNIgEQASGQDSX7YoiohQCIAJLKBJPlsSIBEAEhkA8ljPiBAIgAkEp9mPiBCIiAksoXkMR8QIREQEglp5gNCJAJEIqHNfECMRMBIZBvJYz4gRiJgJLKN5DEfECMRMBLZRvKYD4iRCBiJbCN5zAfESASMRLaRPOYDYiQCRiLbSB7zATESASORbSSP+YAgiQCSSI5mPiBKIqAkktLMB4RJBJhEFnu85gPiJAJOIttJku9DQKREQEpkyQe9tyNOIuAkstxjJG+REigRgBLZUMIfLQiUCECJbChJYwvEhECJAJTIhhL2nrkQKBGAEqn3WzNCpERASqSREiFSIiAlsuRjsBfdhUCJAJRI6fvHSfrASWQ7SfJNHYiTCDiJLPcYSZ1CCJQIQInU+60ZIVAiACWyoSSpcwiBEgEokQ0lxbcgIVAiACWyoaT4FZ1AiQCU6Of9dKzESRScRD/vp2MlTKLAJPp5Px0rURIFJdGtJMU3nSBKoqAk+nmvyFWCJApIop93l1qJkSgYiX78/cKDEiRRQBJd6DHY2gclRqJgJPrZESSPmEqIRIFIdBNJ8d0zCJIoIInubZ6KXsiVKImCkuje6omtgVCCJApIohtJeItRiZIoKImOd4dQCZMoMImOd4dQCZMoMImOd4dQCZMoMIluJmGrQJQgiQKS6Hhfg5UgiQKS6N7+qYr1yJUoiYKS6FIP+ZAOkRIkUUASlfc1WImSKCiJStOiVsIkCkyi8n5zVQmTKDCJyvvNVSVKoqAkKu83V5UoiYKS6N4Uii/kUaIkCkqi8r4KK0ESBSTRpR6ceZQoiYKSqDTvriphEgUmUWne11LCJIp7RWmTQbZbFG4XtfeL+vCLINsxCreM2kzC33ZQtmvUtW2UNt8CunMUpFDfi8yVbR6Fu0fpe525sv2jcAMpfS81V7aFFO4htdRD+FouZdtI4T5SDZMo20kKt5LSPQ3yPbDYblLgJGp7Nzx+JSdQogAlajuFfC8sIiUKUqLWzIREShSkRK2ZCQmUKECJWjMTEilRkBK1PRPSloISK1GwEl348SxAUghaorZTyK7lREsUtEStySDBEgUsUXtTnRItUdASne8FdUq4RIFLdPkHfwVeiZcoeIku/hC+GE2Jlyh4iS7+kEF7g0q8RMFLdPGHsMVYSrREQUt04YcMolVKrETBSnQ2b8wosRIFK9HZvMKvxEoUrETnezGdEipRoBKd78V0SqREQUrU34vplECJApSo711B+WWAQIkClOhyD+FbwCqBEgUoUd8R5NM4gRIFKFHfEeTTOIESBShRf7++qsRJFJxEF3vIYA90REkUlES3kjzuZYiSKCiJLvSQwSZRYiQKRqKLPISt5FIiJApCogs8RNjjDPERBR/RvWsVn4IJjyjwiEZzDSY6oqAjGs01mOCIAo5oNNdgYiMKNqKLOoTvy6vERhRsRKN5GiE0okAjGu+VdEpkREFGNLqnESIjCjKiCzoej0MERhRgRJdz8I3ilLiIgotovnd+VMIiCiyiufdGZtcwgiIKKKLZPYkQFFFAEc33pgpKTETBRDRncw0kLKLAIprNW4NKWESBRTTj/dqeEhdRcBHdLkJf21PCIgosoptF+Ft3SmBEAUa0mq40gREFGNFqutIERhRgRKvpShMZUZARXdQhfI9uJTaiYCNaTVea0IgCjWg1XWkiIwoyovXeLVKJjCjIiC7oEL7PuBIZUZARXdAhfK9xJTKiICO6oEP4fuNKZERBRuyzL8R871xCIwY0Yos6hO8BbsRGDGzEPnsm5Ls0ExwxwBFb1iF8L3AjOGKAI7awQ/haSCM6YqAj9nnvMGNERwx0xD7vHWaM4IgBjtjnvcOMER0x0BFb3CF8LacRHzHwEVvcIXxfcyM+YuAjtrhD+N7mRnzEwEdsgYfw/c2NCImBkNgCD+F7nBsREgMhsbFjyL9JhEgMiMTGjiH/JhEjMTASW+Yhr/3OSQ4BSWyphzz2PCdMYsAktthDHvueEycxcBJb7CGPvc+Jkxg4iW0neex/TqTEQEpsH5fx2AOdUIkBlVizoMSIlBhIie0FJfSiZkRKDKTEpLk1NEIlBlRi5/AM8rqHESkxkBLbUvLYyp1IiYGU2D5Cg61HMwIlBlBi8l7PZARKDKDE5L2eyYiTGDiJyXs9kxEmMWAS22dqGJ8GiJMYOIltJ+EbyxtxEgMnscUewlZUGVESAyWxhR6PLwBBEgMksYUe/NnSCJIYIInp+67QCJIYIIlp0x80oiQGSmJbSeZgL1wZURIDJbFmsy0jSmKgJNZstmUESQzP3Gg22zJ26gYeu7GNhJ8RYOzkDTx6o9luy9jhG3j6RrPdlrHzN64DOPZ2W3S3LKNncEAGz3ZbdLcsY+dw4EEcG0mmssdjY2dx4GEcG0n4kihj53HggRxnuy265ZixMznwUI7GSYwdywFOYrPZ7MgIlBhAic33i4NGoMQASmy+t1gw4iQGTmLzvcWCESYxYBLbTMIXpRmBEgMosfnuURuREgMpsfne4sMIlBhAiW0oeXyNCJQYQIntRSV8zzgjUmIgJbbkQ/iyMiNUYkAl5u+XFoxQiQGVmDcvzhihEgMqMX+3qo1IiYGUmL9b1UagxABKzN+taiNOYuAkttxD+PEnRqDEAEpsQwk/AsUIlRhQifmeCfn9EKESAyqxTSX8MBQjWGKAJbaxhK/PM8IlBlxim0ucX1AJmBiAiS0AEeePRURMDMTEloCI88sJIRMDMrFFIMJX6RkxEwMzsWUg4vyrTNDEAE1so4nzJBI0MUATWwginl9q/wq+igRNDNDEFoKI15fJP8HZjKiJgZrYQhCJD52NiJoYqIktBZHgQSRsYsAmlp/3PwFhEwM2scUgEvJl4990POeL5BDcxLabhH5p/avE34DkEOTEFoRI2Pcf4fOBxxsiJwZyYktC5HtRDytAcgh0YktCJJwXIDkEOrElIRLBC5AgAp3YkpBXjgidGNCJLQqhL5AYkRMDObHcMeRTOpETAzmxJSHCT4kxQicGdGI13jkmdGJAJ7YoRPLzzV+F/wTETgzsxLad8EWKRuzEwE5sWYgk1ScjeGKAJ7bxhN/cETwxwBNbGPI4mZHgiQGe2LIQji9G7MTATmzbSZIVAUbkxEBObMtJGhNcI3JiICdzy0nyE+WInEyQk7nlJOmagEnkZIKczC0nfGnRJHIyQU7mXlbCEXcSOZkgJ3PLCV+bNImcTJCTuSRE+NqiSehkAp3MRSHC1xZNYicT7GQuCxG+tmgSPJmAJ3PjCb+qT4InE/BkLgvhX8RJ7GSCncxtJzzJk9jJBDuZ205K2GPaJHYywU7mtpNikj4JnUygk7nphM7Gk8jJBDmZW0749WwSOZkgJ3MfKs4X6k4iJxPkZJ6DxemS8UnkZIKczC0nxQ+3JHIyQU7mlhN+XzOJnEyQk7nl5PFHIDEEOJkbTvit3SRwMgFO5j5rnN/aTSInE+Rk7vPG+Z3ZJHQygU7mPnOc35lNQicT6GRuOuF3ZpPgyQQ8mRtPHkkmeDIBT+bGE75SbRI+mcAnU5qHlEn8ZIKfzL0dF5/OiJ9M8JO5PES+l8rdnc9JAGUCoEx9P6NM4icT/GRuP3n8DYifTPCTqc02IJMIygRBmdpsSDMJoUwglLlIRIrfGRBDmWAoU2czmxBEmYAoU9/PypMYygRDmdtQHrMJMZQJhjI1m9mEIMoERJl7qcljNiGKMkFR5l5q8phNCKNMYJS5GeUxmxBGmcAo06RJMnGUCY4yl4tI8fs7AikTIGXaDiK/vyOQMgFS5nIR5WfkTQIpEyBlLhdRvnBvEkiZAClzuYjyZWeTQMoESJnLRZQvmpoEUiZAylwwonzR0ySSMvGE8wUjyhc9TXbKOR5zvmRE+aKnyU46x6POF40oP4JpstPO8bjzZSPKj2Ca7MRzPPJ82Yh+eBLZqefXsecrifwIpklPPockLh3RwZPITj/H48+Xjuh4HL1OkohHoC8dUb5uY7JT0PEY9M0pj5sDdhI6cMr099qnSThlAqfMpSM6yDr+STBlAqbMhSPKl41MoikTNGXudSePmxPCKRM4Ze51J/y6SDhlAqdM724QCadM4JR59ufiNyeEUyZwytwrTx43J4RTJnDK9J1CPpkQTpnAKXNzyuPmhHDKBE6Z0dwhEk2ZoCkzmi72JJoyQVNmNF3sSTRlgqbMrSmPmxOiKRM0ZW5NedycEE2ZoClza8rj5oRoygRNmVtTHkkmnDKBU2bs6ZBfUwinTOCUGd0jM+GUCZwyo3lkJpoyQVNmdo/MhFMmcMrM7pGZcMoETpnZPTITTpnAKTO7R2bCKRM4ZWb3yEw4ZQKnzOxmRMIpEzhl5r4u81sLwikTOGXmDiJZCzcJpkzAlLl0RIXfWBBOmcApc+mI8tVgk3DKBE6ZS0dU+I0F4ZQJnDIXjyhfCTKJp0zwlHn26KKbvE3iKRM8ZS4eUb4UYxJPmeApc/GICnnrdRJNmaApc+mI7tVIEZBCwikTOGVuThHy1uskmjJBU+bSERWynHMSTJmAKbN2BlmECaZMwJS5bET5EoxJMGUCpvjGFH5j6QRTHDDFP+9TJJxYioOl+KIR5WtAnFiKg6X4XoXCm+hOLMXBUnxbCm2iO6EUB0rxTSn0YuREUhwkxT/N9diJpDhIiu8tuvidpRNJcZAU35t08TtLJ5LiICn+2TGk85gTSnGgFN+Uwu8InFCKA6X4eLuyE0lxkBTfksLvCJxQigOl+KYUfkfgxFIcLMVH83qDE0txsBQfzesNTizFwVJ8NK83OLEUB0vx0bze4MRSHCzFF40oX87kxFIcLMXHm/ScWIqDpbi8Vyc7oRQHSvElI6rGdgdwQikOlOKbUh6zGaEUB0rxJSPK12M5oRQHSvF9rAlfj+WEUhwoxZeMKF+P5YRSHCjFl4woX4/lhFIcKMX3ll18PZYTSnGgFF80onw9lhNLcbAUXzSifD2WE0txsBRfNqJ8PZYTTHHAFF82onw9lhNMccAUXzaifD2WE0xxwBTfy1HoG7xOLMXBUnwf/s63rnRiKQ6W4otG1CbrGTmxFAdL8WUjamQHWieU4kApvs82oSdUOZEUB0lx3Skkd6ZOHMXBUVx3BvnXiDiKg6O4dfeGxFEcHMWtuTckjOLAKG7dZEgYxYFR/DAK/QsQRXFQFLd309AJojggilvziOwEURwQxa1pGjpBFAdEcWuahk4QxQFRfCMKX9TmBFEcEMWtaRo6QRQHRPH5bho6MRQHQ/HZNA2dGIqDofhsmoZODMXBUHw2TUMnhuJgKD6bpqETQ3EwFJ9N09CJoTgYis/uIYUYioOh+DaUyS+pxFAcDMW3oUx+SSWG4mAovkhE+eI4J4biYCju3XxIEMUBUdyb+ZAoioOiuHdBJIrioCi+UEQnvykgiuKgKL4V5TEjE0ZxYBTfjMJnZKIoDori/n69wQmiOCCKe/eIQhDFAVHcm6MlnCCKA6J4d8iJE0RxQBRfKKJ8gaETRXFQFD+KwmdkoigOiuJnTQr9IxBEcUAUP4jCZ2SCKA6I4gdR+BeBIIoDovhBFD4jE0RxQBQ/iMJnZIIoDojie03KY0YmiOKAKN6tSXGCKA6I4nsnL77K0YmiOCiK53uJnhNEcUAUz/HqfTohFAdC8SUiOikJOyEUB0Lx3LNh8AIkhkAovkRE2dl1TgDFAVC828rLCaA4AIpvQOEL7JwAigOgeDbvHDohFAdC8Xy/c+hEUBwExfeClMf1hAiKg6D4XpDCrycEUBwAxfd6FP5egRNAcQAUr2YuJH7i4Ce+16M8vsbETxz8xPc5J48LEhEUB0Hxfc7J44JEBMVBUHwLCl+m6cRQHAzF93ZejwsSURQHRfG9JOXxRyAxBEbxvSblcUEijOLAKLEZhV+QgjBKAKPEXpPCL0hBHCXAUWKvSeEXpCCOEuAosR2FX5CCOEqAo8SnWQwQBFICICUWjChfrRtEUgIkJbak8OksiKQESEp83rtrBoGUAEiJ5SLqdG1YEEgJgJTYkOL06LQgkBIAKbFcRJ2uSQkCKQGQEgtG1AnHBnGUAEeJ0bRsgjhKgKPEeLdsgjBKAKPEeLdsgihKgKLEaFo2QRQlQFFiNC2bIIoSoCgxmpZNEEUJUJTYisIXbAdRlABFibFTSDv4QRglgFFCdgpp6zGIowQ4SuxjTx7/BsRRAhwlFosoP4cxiKMEOEpsRwmyF1MQRQlQlNiKwk9hDKIoAYoSW1H4KYxBFCVAUWIrCj+FMYiiBChKbEXhpzAGUZQARYmtKEEfMIIoSoCixFYUrmlBFCVAUWIrStC7uyCKEqAosRUl+DeBKEqAosTe0utxSSKKEqAooe8dlYIoSoCixFmR8vgnIEEERYmtKHzNeBBFCVCUaFakBGGUAEYJbVo2QRwlwFFCm5ZNEEkJkJTQpmUTRFICJCVs55A+qAWRlABJCWtaNkEoJYBSwt6PKUEkJUBSwpqWTRBKCaCUsKZlE8RSAiwlrGnZBLGUAEsJa1o2QSwlwFLCmpZNEEsJsJSwpmUTxFICLCX2gpSkT1pBLCXAUmI2LewgmBKAKbEXpPDtE4JgSgCmxF6Qwg+FDYIpAZgSe0EKP9Y1CKYEYErsBSlJ+6dBMCUAU2IvSOEbEATBlABMidnMiMRSAiwlZjcjEksJsJTYlpL8DpFYSoClxGxQL4ilBFhK+Bv1glBKAKWEN6gXxFICLCU6SwliKQGWEt6gXhBLCbCU8Ab1glhKgKWEN6gXBFMCMCW8Qb0gmhKgKbFwRPlGGEE0JUBTwps9HIJoSoCmhL9f+AqCKQGYEhtT+EYaQTAlAFNinxjPX6AOgikBmBLRPTETTQnQlDgnxvPbG6IpAZoS+8T4x+0N0ZQATYl4vwEbBFMCMCW6FSlBMCUAU2KvSOG7mQTBlABMiW5FShBMCcCUaFakBLGUAEuJbkVKEEwJwJToVqQE4ZQAToluRUoQTgnglOhWpAThlABOiW5FShBQCQCV6FakBAGVAFCJDSp8U5sgoBIAKtGBShBQCQCV2GtSipzQFsRTAjwl9oqU4l0D4ikBnhLLR17TGQGVAFCJvSKl+O0ZAZUAUIkFJMpOjA7iKQGeEns9yqMBSjwlwFNir0dhK12DaEqApkTN5ntINCVAU6Kam0OCKQGYEtXdHBJMCcCUqO5xmWhKgKZEdY/LRFMCNCUXjijfSyWJpiRoSn6ax+UkmpKgKfl5Py4nwZQETMlP87icBFMSMCU/zeNyEkxJwJT8NI/LSTAlAVPy0zwuJ8GUBEzJT/O4nERTEjQlP83jchJNSdCU3JpS9DEniaYkaEp2y1KSaEqCpmSzLCUJpyRwSnbLUpJwSgKnZLcsJYmnJHhKdstSkoBKAqhktywlCagkgEp2y1KSgEoCqGS3LCUJqCSASm5Q4bv6JAGVBFDJZllKEk9J8JTcnsI1IYmnJHhK7nUpfD+ZJJ6S4Cm5PYXvJ5PEUxI8JReQGN9PJomoJIhKynOdaBJPSfCUlGadaBJPSfCUlOc60SSakqApKc91okksJcFSctGI8d10klhKgqXkPkXek0eIZBAsJbW5M0xiKQmWkotGBvekJJaSYCnZbe+VxFISLCW77b2SYEoCpuRekuL0BO0kmJKAKan7XRvKkkkwJQFTcp+REvQI6CSakqApuRelPKYSoikJmpJHU+gjRhJNSdCU3JrCYTKJpiRoSi4cGUH3b02iKQmakraTyP+MRFMSNCVtJ5F/mQinJHBK2u7Z8BwQTknglFw6YnxzrCScksApuXTEPsoOSknCKQmckktH7EOek5JgSgKm5LIR41tjJcGUBExJa1qHSTAlAVPS3i2bJJaSYCm5LeVxW0EsJcFSctGI8c29klhKgqXkWZjCb0+JpSRYSs73/q9JKCWBUvKsS+G3p4RSEiglZ/O0nIRSEiglz7oUfntKLCXBUvJYCr89JZaSYCk5s7k9JZaSYCl5LOWRIxJEsJRcNmJ8j7ckmJKAKbkx5fFVIpiSgCnpzeMysZQES0lvXoJNYikJlpK+p0N+f0ssJcFS0pt9N5NYSoKlZLMwJQmlJFBKerPvZhJKSaCU9GbfzSSUkkAp6c2+m0ksJcFSMpp9N5NYSoKlZDT7biaxlARLyWj23UxiKQmWkrGfUvhjDrGUBEvJc1gK/yoRS0mwlIz57l8mwZQETMmNKdyTkmBKAqbkXplC38BMYikJlpLRBZFYSoKlZGMpSSwlwVIyuwszsZQES8kczYMGsZQES8lFI68HDWIpCZaSi0aM73mZxFISLCUXjRjf8zKJpSRYSu7FKZZfc/wr/CcgMQRKySUjxvfMTEIpCZSS2SwKSEIpCZSS+V4UkMRSEiwls1kUkMRSEiwlq1kUkMRSEiwlq1kUkMRSEiwlq1kUkERTEjQlq1kUkERTEjQlq1kUkMRTEjwlF48Y3zo1iackeErWDiJ93ScJqCSASlZjeklAJQFUcvmI8c1Pk4BKAqjkBpVivSPCKQmcUktHBntSK4IpBZhSy0aMbxtaBFMKMKX2Fl/8klZEUwo0pRaO8KP4imBKAabUZ0+G9Aa5CKYUYEotGxlso8EilFJAKbVkZAjtNxShlAJKqSUjxndKLEIpBZRSe4cvtpVIEUgpgJRaLmKD3hYVgZQCSKnlIoOdbFyEUQoYpTajfMgXoIiiFChKLRQxvtFjEUUpUJRaKGJ8o8ciilKgKLUVhf/3k/yBodQiEeP7RBYxlAJDqUUixveJLGIoBYZSe1HKIO8lFBGUAkGpBSLGd4ksIigFglJLREzoHFqEUAoIpeT9wmERQSkQlJLmcIoiglIgKCVN97qIoBQISknTvS4iKAWCUotETPhETgylwFBKmofkIoZSYCgl74fkIohSgCglzUNyEUYpYJSS5tmkCKMUMEpJ85BchFEKGKW0eUguwigFjFLaPCQXYZQCRiltHpKLMEoBo5Tu2ZBfTgmjFDBK6Q4iv5wRRilglNI9H/LrEWGUAkYpbVaKFmGUAkYpjffqqiKMUsAotVTElF0RCKIUIErp+xm5iKEUGEpZ84xcxFAKDKUWiRjft7WIoRQYSlnTvC5iKAWGUvZuXhchlAJCKWua10UIpYBQyprmdRFCKSCUsqZ5XQRRChClrGleF0GUAkQpa5rXRRClAFHKmuZ1EUUpUJRaKGJ869giilKgKDWb5nURRSlQlNorUthKzyKGUmAotUyEf5EJoRQQSs33euUiglIgKDWbd16LCEqBoNQCEeN7rhYRlAJBqdk0aooISoGg1Hw3aooASgGg1GwaNUUApQBQyptGTRFAKQCU8qZRUwRQCgClvGnUFBGUAkEpbxo1RQSlQFDKm0ZNEUEpEJRaIGLKb/GJoBQISp3VKDxHhFAKCKU2ofAcEUEpEJQ6gsJzRASlQFDqCMojRySIICh1BIXniAhKgaDUERSeIyIoBYJSR1B4joigFAhKRUN5RQSlQFBqgYjxDYyLCEqBoNRZjcIvCERQCgSlYs+I/DmJCEqBoFQ0QSSCUiAo1W3tVURQCgSloppnTUIoBYRSS0Rez5qEUAoIpXLfHvJnBEIoBYRS2d0eEkIpIJTK5vaQCEqBoFR2t4dEUAoEpbK7PSSEUkAold3tISGUAkKp7G4PCaEUEEpld3tIDKXAUCq720NiKAWGUrVvD/mjIjGUAkOp6m4PiaEUGEotEnm8KFXEUAoMpWrfIPKHVWIoBYZSe0XKo39ODKXAUGobCt/OvIihFBhKbUPh25kXMZQCQ6lqZkRCKAWEUtXNiIRQCgillokY30+9CKIUIMr4fJq1AGf0b4nfH/7UWLPi96bs+Kxwxq4KAyu837Q5g1cJwRLN2pQzetVQrNEsTzmjVw3DGs0KlTN61ZhYo1mkckavGo41mnUqZ/SqEVijyecZvWok1tgRpTfQZ/SqgSHtFqycUawxMKSjCSnRlt8f/lToQkq85feHPyXakBJy+f3hT402pMRdfn/4U6MNKaGX3x/+1GhDSvTl94c/NdqQEoL5/eFPjTakRGF+f/hTY4eU3p2f0asGhlSaTUjOKNYQDOnmGP6W0xm9amBMF7AYO97hjF0VMKV7kzC+Be0ZvWpgSve6Fr4L7Rm9amBK5b0A/wxeJTCk0qzBP6NXDQypNAdRndGrBoZUmrOozuhVA0MqO6T04eOMXjUwpHvrMLYM+YxhBcWI6p5H6a3rGb1qYER1R5TeO57RqwaGVPW1S/EZuypgRBe/+Piy+DcKE0q85veHPyXmc6/oM3iVwIQuguGL6M7gVQIDuhDG1xowm9dvwfKpmM99vP2Hrtw4o1cNzOfGm0EX8ZzRqwbmcwMOA/kzhhUM87n3FPt+Q49UYOk0TOdeBjOSndBzRq8amM69EoZvgn1GrxqYzwUz/P2gM3iVwHwumkn5jvgM/IsQy/n94U+J77SlPkqwfBrmcy+K4YdknNGrBgZ0H9jCN008o1cNDOhCmsfRS2f0qoEB3bDDz+s4o1hjYkRns47/jF41MKSzuxklwPP7w58S7c0oUZ7fH/7UaG9GifT8/vCnRnszSrDn94c/NdqbUeI9vz/8qdHejBLy+f3hT432ZpSwz+8Pf2qs6zw/0eWMXjUwpt2hLmcUazjGdGmOTeW3cMR/fn/4U2PFNGmT54xeNTCny3SMnwxyRq8amFN/e+QZvEpgTL0hyTN61cCYerOL8hm9amBMvdlI+YxeNTCmi3iMH5JxRq8aGFNvNss7o1cNjGm8X187g1giMKXRbJl3Rq8amNJods07o1cNTGk0G+ed0asGpjSavfPO6FUDYxrN9nln9KqBMe12LjujVw2MaeyLPuWmM3rVwJjGjunjiYeQ0e8Pf2rs2ZQuaj6jVw2MaX66mZDA0e8Pf2qMbiYkdvT7w58a67lp1uP3YDlNzOleg+OPu3RCSL8//KmxMNPpXToxpN8f/lRoNPOMXjUwpfl+7fIMXiUwpNnsoXJGrxoY0oVD5o/LNeGk3x/+1GhDSkTp94enRrWXfIJKvz/8qfHe2OcMXiUwo9W8h3lGrxqY0W1LTl/eOaNXDcxo7YzSTgfRpd8f/lRYvsTOjDhjVwVM6Aam1/eVCNPvD39qrHmUH3twRq8aGNG9VOcVLwJNvz/8qVFtvFhEEZvGp7ncD2ZNA61pfJoX1s/oVWNgjTWN8oMgzuhVQ7CGNnc/g3HTQG4an+amdDBtGqhN42gTv/sZTJsGatM42sTvfgbTpoHaNI428bufwbRpoDaNo0387mcwbRqoTeNTzd3PYNo0UJvGaF4iPqNYA7VpbG3iR4Wc0asGxnSv76Ez2GDcNJCbxl7gQ2ewwbBpIDaNsWdR3qkdDJsGYtMY3bV+MGwaiE1jr/R53IENhk0DsWlsbHrcgQ2GTQOxaewVP48ZfTBsGohNY2PT4w5sMGwaiE1jyZEFb6kNhk0DsWlIc7EfzJoGWtOQ7mI/mDYN1KYhzUbPZ/SqgTGVZq/nM3rVwJguO7Lgnb3BuGkgNw1pXvY8o1cNjKm8Xyo5g1cJTKk0r3ye0asGplSatz7P6FUDU6rNi59nFGugNw1t3v08o1cNjKk2r3+e0asGxlSbN0DP6FUDY7pXCAV/VBiMnAaS09gH1zwa4YOZ00BzGnu7tUcjfDB0GohOYxGSBb9HH0ydBqrT0GazqzN61cCc6j48hPrEYOg0EJ3GRqdkr4YMhk4D0WlsdEq6d9sZvWpgSJch2fdGgvcbeWf0qoEhbRYPncGrBGbUmjfmz+hVAzO6d2HjR2Sd0asGZtTaqZTB00B4GtZNpcydBrrTsHYqZe400J2GtVMpc6eB7jRmO5UydxroTmO2Uylzp4HuNGY7lTJ4GghPY7ZTKYOngfA05p5K+WPxYPA0EJ7GbG9MGTwNhKex1xkF2YLgjF0VMKTLkB6b25/RqwamdBmSBXsZYjB0GohOY6NTkL0gzthVARO6/Ij+BoybBnLT2NzET4E6o1cNTOeyI+PnOJ3Rqwam07s5lGnTQG0a3aqjM3rVwHDuhUf8RKkzetXAcHZrj87oVQPj2Sw/OoNXCUxntwLpjF41MJ/dIqQzetXAhHbrkM4o1kBuGt1SpDN61cCUdquRzuhVA1PaLUg6o1cNjOlek8TPHDujVw2M6d7Y7fGu4GDcNJCbxrKj17uCg3HTQG4am5voW4+DYdNAbBobm/gBamf0qoEp3diUtOHCqGkgNY1NTfwMszOKNZCaxl6lxM+vOqNXDczopiZ+gtQZvWpgRrPZpf+MXjUwo5uakl6XGDUNpKax3MiKrGQ+Y1cFzGd2aj+YNA2UppGd2g8mTQOlaWxpYqfonLGrAuZzO9PrXoM500BnGnvtUtE9Is4o1kBnGvs4Hbbz1Bm7KmA+9/ol+iLrYMg0EJnGRiZ+HMsZvWpgOqtJJ0Omgcg0qkknQ6aByDSqTSdDpoHINKpNJ0Omgcg0qkknI6aBxDSqTScjpoHEJJ8uncKMSdCYZK9notkSJkyCwiRbmPgRLWf0qiFYo5s9hQmToDDJ8qLx4f+iwohJkJjksxPKrybCiEmQmGR5kfGDOs7oVcOxRjy37jyDV4nAEvl+XVsYMAkCk5zDd1jKhfGSIC/J3jTu8X0VxkuCvCTLil7fV2G8JMhLsnmJn31yRq8amNHlRZMff3JGrxqY0U1Mj2+9MGISJCbZO8m9vvWMmASJSTYxPfpvwohJkJhkedHk55mc0asGhnR50eRnIJzRqwamdHnR/PA7e2HEJEhMsrxofvj9sDBiEiQmWWA0+XEIZ/SqgTmV7uU8YcYkaEyyj+l58KEwYxI0Jllg9OJDYcYkaEyyjenBh8KMSdCYZIHR5OcrnNGrBua0MyZhxiRoTLKP7nkopjBjEjQmkR3Tx6WFGZOgMYnumD4uLcyYBI1JjjE9IsaMSdCYZIHR5Husn9GrBsZ0gdEc7GZQmDAJCpPso3xeFxcmTILCJOc0n8fFhQmToDDJ4iL1x4TMhElQmGRvRuePCwMTJkFhksVFk28YfkavGphSbTZiOqNXDUypNXsxnVGsgcgkS4wm33v8jF41MKVLjCbfd/qMXjUwpbZT+rgwMGUSVCZZZDT55tFn9KqBOV1k9Mw6UyZBZZJFRs+sM2USVCaxnVO+dk4YMwkyk1i+t+M4o1cNzOkyI+UnkZ3RqwbmdJnR5Ltin1Gsgcwks51NGTMJMpPMndPHlYExkyAzydw5fVwZGDMJMpPM5uCLM3rVwJzO+SQiYcgkiEyyzOhFRMKYSZCZZMaTiIQhkyAyyUEm1uwQhkyCyCTzvb3nGbxKYEC9ezlPmDQJSpP4nkgfl2omTYLSJN5s5HRGrxoY0E6ahEmToDSJN9s5ndGrBubTmx2dzuhVAxPqzaZOZ/SqgQn1Zl+nM3rVwIx6s7XTGb1qYEq92d3pjF41MKbLjSbfm/2MYg2kJllu9KIVYdQkSE2y3OhFK8KoSZCaZJ8eRFFDGDQJQpMsNZp8o/kzetXAlHb7353RqwamNJoVI8KcSdCZJLoVI8KkSVCaZLHR5Pven9GrBoY0utV3wqxJ0Jokm9fxhVGTIDVJdqvvhFGTIDVJtg/4jJoEqUmyW30njJoEqUmyW30nDJsEsUmyW30njJsEuUmyW30njJsEuUmWHU1+MsIZvWpgTLN7O08YOAmCk+yd8h4vxgkDJ0FwkupiyrxJ0JukulUjwsRJUJxkAdLkhz2c0asGxrS6VSPCzEnQnKSaVSPC0EkQnaS6VSPC2EmQnaS6VSPC2EmQnaS6VSPC2EmQnaS6VSPC4EkQnqS6VSPC4EkQnvTT3ZgqgydFeNLlSJMfB3JGrxoDa0jzrVVGT4r0pMuRlB+GfEavGoo1mpgqkydFedJPt+JemTwpypMuRpr8dJAzetVwrNFsBX5GrxqBNd67gZ/Bq0Riia4PpQyfFPFJR9eHUoZPiviko9kW/IxeNTClo9kZ/IxeNTClo9kc/IxeNTClo3tTTxk+KeKTLkma/OCQM3rVwJiO5uSOM3rVwJiOpqmvzJ4U7UnbvfSU2ZOiPem2J34Myhm9amBMpdvwUZk9KdqTdsublNGTIj3poafHN47RkyI9qXSMr4yeFOlJNz29vnGMnhTpSc8pR49vHKMnRXrSs7zp8Y1j9KRITyrdA5Qye1K0J5X9AMUbOMrsSdGeVLr1zMrsSdGeVJs7U2X0pEhPqt2dqTJ6UqQn3fSkvNmgjJ4U6Um1uzNVhk+K+KTaXfKZPSnak2p3Z6rMnhTtSbW7M1VmT4r2pNrdmSqzJ0V7Uu3uTJXZk6I9qXZ3psrsSdGetDsU6YxiDbQn3fbEz0U6o1cNjOm2J34mzhm9amBMtz3xY13O6FUDY7rtiR/pcUavGpjTBUmTH+dwRq8amNMFSZMfyHBGrxqY0wVJkx9IcEavGpjTBUmTb0Z/Rq8amNMFSZPvBn9GrxqY021PfD/3M4o10J50QdLkW7qf0asG5nTbE99U/YxeNTCn257skVNmT4r2pAuS5mPnbGX2pGhP2i5xUqZPivqks+maKsMnRXzS2V70GT8p8pMuTZqPPZqVAZQiQOnsuqbKBEpRoNS7iz4DKEWAUu+6psoAShGg1LuuqTKAUgQo9a5rqkygFAVKveuaKhMoRYFS77qmygRKUaDUu66pMoFSFChdnDTtMSMzgVIUKPWua6pMoBQFSr1xUmUApQhQGu1FnwGUIkBp7Mn0cXFhAKUIUBqdkyoDKEWA0micVJlAKQqURuekygRKUaA0OidVJlCKAqXROakyglIkKI3OSZURlCJBaXROqoygFAlKo3NSZQSlSFCa+5r/uPdgBqVoUJrdgz4jKEWC0mwf9BlBKRKUtqudlBGUIkFp7kv+4zaKEZQiQenypPnYbVkZQSkSlC5Pmo9djpURlCJB6fIk/lKUMoBSBCjNthvFAEoRoHRp0nxspqsMoBQBStud9ZQJlKJA6eKkOfkLXsoESlGgtJo9n5UBlCJAaXXLRpUBlCJAaXXvmCoTKEWB0ureMVUmUIoCpbVD+rg/ZgKlKFBabWufCZSiQGl1rX0GUIoApdW29hlAKQKUfbrWvjGAMgQo+3StfWMAZQhQ9ula+8YAyhCg7NO19o0BlCFA2adr7RsTKEOBss+eS/kzhzGBMhQo+3StfWMCZShQtjjpNXsYEyhDgbJOoIwJlKFA2ae74hsTKEOBsnb5kzGBMhQoa5c/GRMoQ4GyxUnzsT+xMYEyFCgbXdPUmEAZCpSNpmlqDKAMAcpG1zQ1BlCGAGWja5oaAyhDgLLRNU2NCZShQNnomqbGBMpQoGx0TVNjAmUoUCbd85MxgTIUKNurnx7bVxsjKEOCMuk43xhBGRKULU96zh6MoAwJyqSLKRMoQ4Ey6TjfmEAZCpRJt9jZmEAZCpRJt9jZmEAZCpRtgZr8ucWYQBkKlEnXjDImUIYCZZ1AGRMoQ4Ey7ZpRxgTKUKBMu2aUMYEyFCjTrhllTKAMBcq0a0YZIyhDgjLtmlHGCMqQoEy7ZpQxgjIkKNN9zefPgsYIypCgrN1gzxhBGRKUaXWzByMoQ4Ky5UmvpVzGCMqQoGx50mtJmTGCMiQoW570OHP2jF41MKfLk5RuqmsMoAwByvYWe49T/owBlCFA2dIkKf2a8e/+D2EhRX8ya/r6xvjJkJ/Mur6+MX4y5CdblvSc0hk/GfKT7ZOdXlM64ydDfrLNT877Jsb4yZCfrD3ZyRg/GfKTdSc7GdMnQ32y9mQnY/pkqE/WnuxkTJ8M9cnak52M6ZOhPll7spMxfjLkJ2tPdjLGT4b8ZO3JTsb4yZCfbFnSdN5WM8ZPhvxkC5OeUWf+ZOhP5qNZsWjMnwz9yRYmaYxHDZZT9Cfz/Z7pY0pn/mToT7Yw6bXq0Zg/GfqTLUyajyM8jPmToT+Zt4/5zJ8M/cn20U6PfXmN+ZOhP9n2p8eFgfGTIT+Z75iy/XCN6ZOhPtnWp9cVjumToT5ZNG19Y/hkiE8W3fbkxvDJEJ8suu3JjemToT5ZdNuTG9MnQ32y2Bnl3U5j+mSoTxbdfpDG9MlQnyyat0yN4ZMhPll0+0EawydDfLLo9oM0hk+G+GTZ7QdpDJ8M8cmy2w/SmD4Z6pNltx+kMX0y1CfLrrFvTJ8M9cm2Pvmj28n0yVCfrD3YyZg+GeqTbX16HHljTJ8M9cn2fnuf+TXz37y+tsyfDP3JFiaNjz9qsJyiP1k2lG+Mnwz5yaptRTF+MuQn2/z0OPLGGD8Z8pNVR/nG/MnQn6wayjfGT4b8ZNVRvjF+MuQnq47yjfGTIT9ZdZRvjJ8M+cmqo3xj/GTIT1Yd5RvzJ0N/smob+8yfDP1pfvbzE2+JTeZPE/1pLkx6HIY9GT9N5Ke5LGl6ff9px0exBknpRH6ae/2TrBO1I64aJKYT+WkuS3ocyj2ZPk3Up7koyeO7RGlgCRLSifg0lyQ9drybzJ4m2tPc++6lPX4NktGJ9jSXJM3vfNE/CsnoRHyaS5JmjEcNktGJ+DQ3Pu0/rA8MGMOnifg0lyTNEP57MHyaiE9zL3+ag/+bMnyaiE9z77235zDye7CQIj7NRUnz8VuwjKI9zb34Kfht6WT2NNGe5oKk+TguYjJ7mmhPc++89zgPYDJ7mmhPc++8F/wiOZk9TbSnuVc/xWMWZPY00Z7mPtzpsRnQZPY00Z7mgiT7sD1MJ5OnifI0FyO9fwuWUZSnueUpeA97MnmaKE9zOdJ8nAswGT1NpKe5HGk+zgWYjJ4m0tPc++49NuSfjJ4m0tNcjjQfO65PRk8T6WluenrsUz4ZPU2kp7k33svHN47R00R6mnvjvcdO5ZPZ00R7mguS5mOn8snsaaI9zb366bFT+WT2NNGe5t54Lx85ZfY00Z7mgqRZj5wye5poT3NB0qxHTpk9TbSnuSBp1iOnzJ4m2tPc9lSPnDJ7+vXhT42V03rklNnTRHua254ee3RPZk8T7WkuSJrFTgaYTJ4mytPci5+KbeA1mTtNdKe5lz4V23xrMnWaqE5zL3wqtvnWZOo0UZ3mIiT/sM0lJzOnieY0lyD5h+19PBk5TSSnuQDJH3vbTmZOE81p7iVPj78nSyaK09wLnh5/T5ZL9Ka5lzs9/p4slahNc2sT/3sya5poTXPB0ePvyaRpojTN5UaPvyeDponQNJca+WOf4cmgaSI0zb3M6fXAxqBpIjTNpUavxxzmTBOdac4dzcd0xZxpojPNhUbO/6YsmYhMc4lR8D8pCyYK01xcFPwvynKJvDSXFfljx+bJeGkiL81lRcGAfDJbmmhLc0FR0HtXBksTYWkuJUr678hUaaIqzUVEr0YEQ6WJqDSXED2bCAyVJqLSXEL0aiIwU5poSnMB0auJwEhpIinNBUTPDgAzpYmmNLcpvToATJUmqtLcm+q9OgBMlSaq0lxG9OwAMFaayEpzGdGzA8BYaSIrzb2m6dUBYKw0kZXm3lbv1QFgrDSRleZmpcdvwTKKqDRjT5yP5wCGShNRaS4iel4DmCpNVKW5iGjIh+LpZKo0UZXmIqIhFE8nQ6WJqDRzT6B8x8XJUGkiKs3s2qDMlCaa0lxA9Jx9mClNNKW5gOg1+zBSmkhKc/nQa/ZhojRRlGZ213YGShNBae4DnF4TGAOliaA09456rwmMgdJEUJqZ3QTGQGkiKM2sbgJjojRRlGZ9ugmMidJEUZp7S73XBMZEaaIozb2l3msCY6I0UZTm8qHHBMZAaSIozdoPRo8GAgOliaA0a3YTGAOliaA090FOD7KcDJQmgtLcBzk9yHIyUJoISnPpkD9OMpgMlCaC0lw65OPRDGGgNBGUfOmQP/budwZKjqDkHSg5AyVHUPJPN5M6AyVHUPJPM5M68yRHT/JPM5M68yRHT/JPM5M68yRHT/JPN5M6AyVHUPJPN5M6AyVHUPJPN5M6AyVHUPJPN5M6AyVHUPLRzaTOQMkRlHx0M6kzUHIEJR/dTOoMlBxBycd7JnXGSY6c5EuH/HFChTNQcgQlXzrkg7185oyTHDnJlw3543wKZ5zkyEm+bOj1W7CEIib5kiF/nHDhDJMcMck3Jj2uKs4wyRGTXPYsyncRd4ZJjpjky4ZeVyZnnOTISb5s6HVlcsZJjpzky4Y0vyz+zXAswSKKmuTSPNg7wyRHTHLpHuydYZIjJrk0D/bOLMnRklyaB3tnlORISS7NeXjOJMlRknyx0POCwCTJUZJ8S9LrgsAkyVGSfEvS64LAJMlRknyx0POCwCTJUZJ8S9LrgsAkyVGSfK9iel0QmCQ5SpJvSXpdEJgkOUqSb0l6/BYso+hIrnsa5b7nzJEcHcm3I70mQeZIjo7kC4VeEwdjJEdGctvzaNL3zJ1BkiMkue15lL9374ySHCnJlwy9JjBmSY6W5Na93uRMkxw1ya15vckZJzlyklvzepMzT3L0JLfm9SZnnOTISW7d603OQMkRlNy615uckZIjKbl1rzc5QyVHVPLZvd7kjJUcWcln93qTM1hyhCWf3etNzmjJkZZ8dq83OaMlR1ry+X69yRksOcKSb1h6HBXkTJYcZcmndxMYkyVHWfLZvc7sDJccccln9zqzM19y9CVfXvSafZgwOQqTLy56zj5MmByFyZcYvWYfZkyOxuTLjF6zD1MmR2XypUav2Yc5k6Mz+VKj5+zDoMkRmnyvXnrNPgyaHKHJ3bvZh0mTozT5Wb30mH0YNTlSk3t2sw+jJkdq8r173mv2YdTkSE1+qOkx+zBqcqQm39vn8d+CQZMjNHnsaz3vojmDJkdo8qVGLoM//zFocoQmj/3QJI8aLKUITb7cyIUfweuMmhypyTc1iT1qsJQiNflyI5f5qMFSitTky41c2CsozqDJEZo89jz6uDFm0uQoTb6l6fWXZdLkKE1+pOnxl2XU5EhNntL9ZRk1OVKTb2p6/WWZNTlak29rev1lGTY5YpNvbOJ/WWZNjtbkuTPKNcGZNTlak2fHoc6sydGa/CxeetwxMGtytCbf1vS6Y2DW5GhNvuDo9ejFqMmRmny50fPRi1GTIzV57ZCyd3OcQZMjNPlyI3/ssu+MmhypyavrPjFpcpQmr7b7xKTJUZq8uu4TgyZHaPLquk/MmRydyavrPjFmcmQmr7b7xJjJkZni03WfgjFTIDPFp+s+BXOmQGeKT9d9CuZMgc4Un677FAyaAqEpPl33KZg0BUpTfLruUzBqCqSm+Ly7T8GgKRCaYqmRPw4tCAZNgdAUn677FAyaAqEpNjQ9puJg0BQITbFXLj2m4mDQFAhNMbr2UzBoCoSmGE37KZgzBTpTjK79FEyaAqUpRtN+CgZNgdAUo2k/BZOmQGmK0bSfgkFTIDTF6NpPwagpkJpidO2nYNQUSE0xuvZTMGoKpKaQrv0UjJoCqSmkaz8Fo6ZAagrp2k/BqCmQmkK69lMwawq0ppB3+ykYNQVSUyw38seRKcGoKZCaYlPT4zEhmDUFWlNsa1LGocGoKZCaYlOTsnd6g0lToDSFVPOoEkyaAqUp9NM8qgSTpkBpCh3No0owaQqUplBpHlWCSVOgNIXu+1EOzMGkKVCaQq3LBpOmQGkKne9sMGcKdKZYbPTIBnOmQGeK7UyvbDBnCnSm0GyzwTKKzhRabTZYRhGaYkPTKxsMmgKhKZYa+eNooWDQFAhNYd1C+mDSFChNsdjoeefDpClQmmK50fPOh1FTIDXFgqPHQ2gwagqkptjU9HgIDWZNgdYUFs+H0GDSFChNYXsa5X2jYNIUKE1hTQ8/GDQFQlPMrocfDJoCoSlm08MP5kyBzhSz6eEHY6ZAZorZ9PCDKVOgMsXsevjBnCnQmWJ2PfxgzhToTDG7Hn4wZwp0pphdDz+YMwU6U8yuhx/MmQKdKWbXww8GTYHQFN718INBUyA0hb97+MGcKdCZYjvT43S1YNAUCE2x2Og5FTNpCpSm2CualM49zJkCnSl8NvMGY6ZAZoplRs95gzFTIDPFXtD0mDeYMgUqUywyes0bDJkCkSmWGL3mDWZMgcYUC4ye8wYzpkBjim1Mr3mDKVOgMsVZzvSYN5gyBSpT7F3yXvMGU6ZAZYqznOkxbzBlClSm2Gc0veYNpkyByhTh3bzBlClQmWIvaHr8FiyjaEyxjelxGmIwZQpUpoju/dFgyhSoTLGVic8bzJgCjSkWGL1uvhgxBRJTbGIytq41GDAFAlMcYOKTF/OlQF+KhUXPyYv5UqAvxfalx+TFgCkQmGID02PyYr4U6EuxsOg1eTFeCuSlyG5NaDBeCuSlyG5NaDBeCuSlqG5NaDBfCvSlqG5NaDBfCvSlqG5NaDBhChSmqG5NaDBhChSmqG5NaDBiCiSmqPea0GDAFAhMsYHpcYRqMGEKFKaoDkGDEVMgMUV1a0KDGVOgMcU2JuEbHQczpkBjys/nva40GTElElN+dkjta+o/wbZAMmJKJKY8xDTpf0oyYkokpvw0E2kyYUoUpvx0E2kyYUoUpvw0E2kyYEoEpvw0E2kyYUoUpvw0E2kyYEoEpvx0E2kyYEoEpvx0E2kyYEoEphzdRJoMmBKBKUc3kSYDpkRgytFNpMmEKVGYcnQTaTJhShSmHN1EmoyYEokpx3siTSZMicKUR5j4BivJiCmRmHJ0E2kyYkokptyrmR7feiZMicKUo3kHPxkwJQJTtmuZkgFTIjDl0qLn5MOAKRGYcmnRa/JhvpToS7mw6DX5MF5K5KXcS5kekw/zpURfyoVFz8mH+VKiL+XeF+81+TBfSvSl3PvivSYfJkyJwpSS3eTDjCnRmHLvi/eafJgxJRpT7iOZXpMPM6ZEY8qzmukx+TBjSjSm3PviPX4LllEUptzC9DiAPpkwJQpTare7UzJhShSm1KbxlIyYEokplxi9TlZIhkyJyJRLjIZ++OzDkCkRmXKJ0XP2YciUiEy5kekx+zBjSjSm3Mb0mH0YMSUSU25iesw+TJgShSkXFz1nHyZMicKUe1+81+zDhClRmNKsm32YMCUKUy4ves4+jJgSiSnNu9mHEVMiMeU+kek1+zBkSkSmPMuZHrMPQ6ZEZMq9nOnxW7CMojHlAiM37tvJjCnRmHIvZnrNPgyZEpEpZ/PGUzJkSkSmnLs7yu0wmTIlKlNuZXrNPkyZEpUp5+yeIZkyJSpTLjIayh9lGTIlIlMuMXpOggyZEpEplxi9JkFmTInGlHst02MSZMSUSEy5d8t7TIJMmBKFKRcYPSdBZkyJxpQu3STIjCnRmHIb02sSZMaUaEy5VzO9JkGmTInKlGc102MSZMyUyEy5z2J6TYKMmRKZKT26SZA5U6Iz5V7N9PgtWEaRmfIwE3+RI5kzJTpT7rVMr0mQOVOiM2U0++gkY6ZEZsplRs8JjDFTIjNltBMpY6ZEZsp9GNPrVpAxUyIzZXQv4SdjpkRmymhewk+mTInKlNG8hJ+MmRKZKaN5CT+ZMiUqU0b3En4yZUpUpszuJfxkzpToTJndS/jJoCkRmjK7l/CTUVMiNWV2L+Ens6ZEa8rsXsJPZk2J1pTZvYSfDJsSsSnz/RJ+MmtKtKY81sTfWEqGTYnYlNm9hJ8MmxKxKbN56ymZNSVaU1b31lMya0q0pqzmradk1JRITVnNW0/JpClRmrKat56SQVMiNGV1bz0lg6ZEaMrq3npKRk2J1JTVvfWUjJoSqSmre+spGTUlUlNW99ZTMmpKpKas7q2nZNSUSE316d56KmZNhdZUn/dbT8WkqVCa6rPBnr/1VEyaCqWpPt1bT8WoqZCaarnRsPya419dJUhIC6WplhsNYy9AFIOmQmiqT/PIVAyaCqGpNjTx2asYNBVCU3261lMxaCqEpvo0radizlToTDWa1lMxZipkphpN66mYMhUqU42u9VRMmQqVqUbXeiqmTIXKVKNrPRVTpkJlqtG1noo5U6Ez1ehaT8WcqdCZanStp2LOVOhMNbrWUzFoKoSmGu/WUzFnKnSm2guZ6IKEYspUqEwlXeOpmDIVKlPtHfOU7aNfDJkKkak2MhnfvaaYMhUqU8nuO7EV8cWQqRCZai9imvxNtmLIVIhMdRYx8fmPGVOhMZV0XadixlRoTCVN16kYMRUSU0nTdSomTIXCVNp0nYoBUyEwlXZdp2LAVAhMpV3XqRgxFRJTadd1KkZMhcRU2nWdihFTITGVdl2nYsZUaEylXdepmDEVGlNp13UqZkyFxlT67joVE6ZCYaotTJMvnC5GTIXEVNZ1nYoZU6Ex1d4vz+Rr+j8z/D0YMhUiU+398iZfGlYMmQqRqax556mYMRUaU1n3zlMxYyo0prLmnadixFRITGXNO0/FhKlQmMqad56KAVMhMJV17zwVA6ZCYCrr3nkqRkyFxFSze+epGDEVElPN7p2nYsRUSEw1u3eeihlToTHV7N55KmZMhcZUs3vnqZgxFRpTzfc7T8WEqVCYap/ENPk7T8WIqZCYanbvPBUjpkJiqgVGjxeWihFTITHVrOb902LGVGhMtcRovCYwhkyFyFQbmSZbo1uMmAqJqZYXjcnfgi1GTIXEVK7vt2CLCVOhMFV3LlMxYCoEpmrPZSoGTIXAVN25TMV8qdCXqjuXqRgvFfJSedO7L+ZLhb5U3vXui/lSoS9VdL37Yr5U6EsVXe++GDAVAlNF17svBkyFwFTR9e6LAVMhMFV0vftiwFQITBVd774YMBUCU8W7d1/Mlwp9qbYvTf4CWDFgKgSmiq53X0yYCoWptjC97gOZMBUKU+11TK9plAlToTBVjm4SZMJUKEy1lzJN/lpLMWEqFKbai5keZ0wVE6ZCYarsZlIGTIXAVNnOpAyYCoGpsptJmTAVClNlN5MyYCoEpspuJmW+VOhLle1MyoCpEJiq2pmUAVMhMFW1MykTpkJhqmpnUkZMhcRU1c6kzJgKjamqnUmZMRUaU1U7kzJjKjSmqmYmZcJUKEy1t8ub/D2OYsJUKExV7UzKhKlQmGqfyzS5xhYTpgJhks8+l2mSw2/P2N8Kvz/8qfB+m+QMXiUGlmhOZTqjVw3BGu9Tmc7gVUKxxPtUpjN4lTAs8T6V6QxeJSaWaE5lOqNXDccazalMZ/SqEVijOZXpjF41Ems0pzKd0asGJrQ7lemMYo2BGe1OZTqjVw0MaXcq0xm9amBI36cynbGrAmZ075U3qQKc0asGhnRvlue0h39GrxqY0r2WyWlX8YxeNTCl+1wmpwtLz+hVA1M6mnn0jF41MKWLjEYVuwM7o1cNTGm3mumMYg3BlMqbQs/gVQJDKu/3m8/gVQIzKs2Ojmf0qoEplfeOjmfwKoEhlfeOjmfwKoEZlXYmJdD0+8OfGu1MSqDp94c/NdqZlEjT7w9/arQzKaGm3x+eGtrOpMSafn/4U6OdSYk1/f7wp0Y7kxJr+v3hT41mJiXS9PvDnwo7o7QzeUavGhjSvZjJiS2fsasCZnRvl+f0CfKMXjUwo3vDvMdvwRKqmNC9XZ7TO9ozetXAhGqzP8kZvWpgQhcajSKtzTOGFQzzuZWp6L8FMabfH/5UWM9L5awvcEavGpjOvVVeBf0tWDoN02nv9aBn8CqB4bT3SrszeJXAdFqzxdMZvWpgOu29xdMZvEpgPO29xdMZvEpgOq15oj+jVw1M52ye6M8o1piYz9k80Z/RqwYmdDZP9Gf0qoEJnc0T/Rm9amBGZ/NEf0avGhjS2TzRn9GrBqZ0Pp/oz9hVATM6d0bpk/QZvWpgSM8iJvokTYDp94c/FfYLeeTlxDN2VcCE7iVM8WEVCC79/vCnwroHDbI50xm7KmA6z1lMQiuwbDpmcx/FFPQqQGTp94c/FfaTPO11n9GrBiZz75DH/54Eln5/+FPB339P4kq/P/ypEM3fk6XSMZVndzz+92SpdEzlXrX0+HuyVDqmMj7vvycRpd8f/lTYqXzcJRFR+v3hT41mC9wzetXAZO4lS68nRSJKvz/8qfHu1Z/BqwRGs1uxdEavGhjOZsXSGbxKYDqbFUtn8CqB8WxWLJ3BqwTms1uxdEavGpjQbsXSGcUaiRntViyd0asGZrRbsXRGrxqY0W7F0hm9amBGuxVLZ/SqgSHtViyd0asGhvS9YumMXRUwo8eTHk82BJR+f/hTo+0xEVH6/eFPjbbHRETp94enRrU9JiJKvz/8qdH1mAgo/f7wp0TXYyKe9PvDnxJtj4l40u8Pf2p0PSbCSb8//CnR9ZiIJv3+8KdE22MinvT7w58abY+JeNLvD39qtD0m4km/P/yp0faYiCf9/nDXGJ+uxzSYKA0UpfHpekyDkdJAUhqfrsc0GCkNJKXxefeYBhOlgaI0jijx54rBSGkgKY1NSsHuQwcTpYGiNM7eeOw+dDBPGuhJY69YSi4Gg3nSQE8an2z+O0g+B2rS2AuWHv8dJJ0DLWns9UrJ1WIwSxpoSWM0q0HO6FUD07kPXkouH4NZ0kBLGouGPHn/cjBNGqhJY2tS8uekwTRpoCaN0bSZBsOkgZg0RtdmGgyTBmLSGE2baTBLGmhJYzRtpsEoaSAljfHeSfwMXiUwo9LsJH5GsQZK0pBmJ/EzetXAjEqzk/gZvWpgRqXZSfyMXjUwo9LsJH5GrxqYUWl2Ej+jVw0MqTQ7iZ/RqwaGVJ47iZ+xqwJmdC9aSv4kPJglDbSkIV2nfjBLGmhJ4xy+xL/1jJIGUtJYLqRGz8Y5o1cNDOlyocfLhGf0qoEh1e5mdDBMGohJQ5ub0cEsaaAlDW1uRgfDpIGYNPR9hN0ZvEpgQrU5wu6MXjUwo9ocYXdGrxqYUW2OsDujVw3MqDVH2J1RrIGeNKw5wu6MXjUwpNYcYXdGrxoYUmuOsDujVw0MqT2PsDtjVwXM6Cal5E/Tg5nSQFMae2O81+zDTGmgKY1tSvm4r2aoNBCVhr13wT2DVwkM6RKi58zBUGkgKo29M95j5mCmNNCUxj586TFzMFIaSEpj74v3mDmYKA0UpbH3xXvNHEyUBorSOGuWHjMHE6WBojSOKD1mDiZKA0Vp7H3xXjMHM6WBpjT2qqXXzMFMaaApjUVEz5mDqdJAVRqzupmDudJAVxr79CX+WzBXGuhKY7tS0j1EzuhVA0PqXQd/MFsaaEtjUdHzpoPp0kBdGouK+FqyM3iVwJD67O5bGC8N5KXh/t4A8oxeNTCkHu81bWf0qoEhbVYuncGrBGbU3/s5ncGrBEY0mv2czijWQGYa8d7P6QxeJTCj8d7P6QxeJTCi0U6kDJkGItOIdiJlyjRQmUa0EylTpoHKNKKdSBkzDWSmEe1EypxpoDONaCdSBk0DoWlEO5EyaBoITSObiZQx00BmGrknUv4C8GDMNJCZxl62VIyVB0Omgcg09qKlejTSGDINRKaxFy09fguWUCSmsQ9gqkcbjRHTQGIa2d6OMmQaiExjiZEa2VbljF0VMJ/7BCa+j+UZvWpgPg8x8RfXBiOmgcQ06vPc3eoMYgkUptEJ02DCNFCYRidMgwnTQGEarTANJkwDhWl0wjSYMA0UptEJ02DCNFCYRitMgwnTQGEarTANJkwDhWm0wjSYMA0UptEK02DCNFCYpBUmYcIkKEzSCpMwYRIUJmmFSZgwCQqTNMIkTJgEhUm2MBVXAGHCJChMsoWJvjMrTJgEhUm2MBXZ3eqMXRUcK6wn+mJTqDBfEvQl2b5E37kV5kuCviTbl4oJlTBfEvQl2b5U/OIszJcEfUn2hnj8r8F0SVCXZOsS/2swWxK0Jdm2xP8aTJYEZUm2LPG/BnMlQVeS7Ur8r8FYSZCVZBlRfLhaCmMlQVaS7rylM3rVwGQuJXo9cwqDJUFYktGsmj+jVw1MpzQXd2GwJAhLIs1iT2GuJOhKIt1iT2GuJOhKIs1iT2GsJMhKIs1iT2GqJKhKIs1iT2GoJIhK0i5REoZKgqgk7RIlYawkyErSLlESxkqCrCTtEiVhrCTIStIuURLmSoKuJO0SJWGuJOhK0i5REuZKgq4kzRIlYaokqEqyjCg+/ClLGCsJspIsJIoPf0YS5kqCriTaPSMJgyVBWJK9SIlv2XFGrxqYUm1a9sJcSdCVRLuWvTBXEnQlsaZlL4yVBFlJrGnZC1MlQVUSa1r2wlBJEJXEuk6TMFQSRCWxrtMkjJUEWUms6zQJYyVBVhLrOk3CWEmQlcS6TpMwVhJkJbGu0yTMlQRdSazrNAlzJUFXkvnuNAljJUFWkoVE8Xk8WjBXEnQlWUoUH3ozy1hJkJVkGVF86M0sQyVBVJK5Z1F6M8tISZCUZO45lN7MMlASBCWZ+1aU84cwUBIEJVk69Pq3ZNlETpJlQ69/S5ZMxCRZMvT6t2S5REqSJUOPf0tGSYKUJL5z+XjIYpQkSEnSUpIwShKkJPH3uQtn8CqB0TxnLHHCEUZJgpQke53S68LKKEmQkmSfsTQ+tHUojJIEKUmWC8mnHjVYQJGSxLsLPKMkQUoSby/wzJIELUmiu8AzShKkJInuAs8oSZCSJJpt7c/oVQMzGs229mf0qoEhjWZb+zN61cCQRrOt/Rm9amBIo9nW/oxeNTCk0Wxrf0avGhjSaLa1P6NXDUxpPLe1P2NXBczogqEYj+YGsyRBS5LsXmUWZkmCliSLhmKwBYbCLEnQkiTfGzKfwasERjSbDZnP6FUDI5rvDZnP4FUCE5rvDZnP4FUCA5rvDZnP4FUC85nNhsxn9KqB+cxmQ+YzetXAhFazIfMZxRqISVLNhsxn9KqBCa1mQ+YzetXAjFazIfMZvWpgSKvZkPmMXjUwpPXckPmMXRUwo8uGYjz6AYyTBDlJqm2KMk4S5CRZNvSYNxgmCWKS7AOWBr2TZJQkSEm6XEiECbQySFKEJN2QNNiSFGWMpMhI+pF3U1aZIikqki4UksE65coUSVGR9NOsSVaGSIqIpJ9uTbIyRlJkJP00a5KVOZKiI+mnWZOsDJIUIUk/zftMyiRJUZL0061JVmZJipako1uTrMySFC1JR7cmWZkmKWqSjm5NsjJPUvQkHd2aZGWipChKOro1ycpMSdGUdHRrkpWpkqIq6XivSVZmSoqmpAuIYvDGijJTUjQlHXv6ZM0AZaKkKEq6eCgGawYo8yRFT1LZt6CsGaCMkxQ5SRcOxeDvcSvzJEVPUpH3vwTTJEVN0mVDj38JhkmKmKSLhl7/EiyZaEm6ZCgGbxApwyRFTFLp2vTKMEkRk3QfrMTfbVVmSYqWpJLNO6XKLEnRkvRYEr8qMkpSpCTVvfpj0n6EMkpSpCRdLmTOblKUQZIiJOleoCR0l/EzetXAfOpuNPHfguUTIUn38iS+x/gZvWpgQrXRTmWOpOhIqu+Dv87gVQLzqc3BX2f0qoEB1ffBX2fwKoH51PfBX2fwKoH5tG6dpzJGUmQktW6dpzJHUnQktW6dpzJIUoQktW6dpzJIUoQktW6dpzJIUoQktW6dpzJIUoQktW6dpzJIUoQktfc6T2WMpMhIavv6zpvcyhhJkZF0mVDwxxuGSIqIpMuEQujMwxBJEZF0I5Lwx01liKSISLoRif93MERSRCTdiPT472DpRETSjUjyuGdjjKTISLpXJr2uzwySFCFJZ7PEU5kjKTqSLhaSFH5JYpKkKEm6N7vTr1n/chiWYOlEStIlQ687DWZJipaki4Ys7MvlXw2swTRJUZN00ZDll49/ct1pMExSxCTdO969rq4MkxQxSb1pgirDJEVMUu+aoMowSRGT1JsmqDJLUrQk9aYJqoySFClJvVuErIySFClJvVuErMySFC1JvVuErMySFC1Jo1uErAyTFDFJo1uErEyTFDVJo1uErEyTFDVJo1uErEyTFDVJ470IWZklKVqSLhgK4ZuWKLMkRUvSaB+VmCUpWpJG96jEKEmRkjTaRyVGSYqUpEuGRNj+jMooSZGSdLnQawpkkqQoSXoOU+IIrUySFCVJz+Z3/JmPUZIiJWlHScooSZGStKUkZZSkSEnaUZIySlKkJO0oSRklKVKSdpSkjJIUKUlbSlJGSYqUpC0lKaMkRUrSlpKUUZIiJWlLScooSZGStKUkZZSkSEnaUpIySlKkJG0pSRklKVKSNpSkjJIUKUk3JQnfi0YZJSlSkraUpIySFClJlww9b2gZJiliklZ3N8o0SVGT7PNpXuYx5kmGnmTdYUrGQMkQlKw9TMmYKBmKknWHKRkjJUNSsu4wJWOkZEhK1h2mZEyUDEXJ2sOUjJGSISlZe5iSMVMyNCVrD1MyhkqGqGTtYUrGUMkQlaw9TMkYKhmikrWHKRlDJUNUsvYwJWOoZP9fZ2e75DiSm+t7md8TG8zvTN/BuQaHo0Jdorq1o5LKEqu7xw7f+wl+5MsEBHKh/WV5tguiyGQmgOcFwKGS3xmm5CWk5DlS8mYO6uV2Nl5CSp4jJW9mb1RGGF5CSp4jJT8RIhMkku0lpOQ5UvITHzLiGDcvASXPgZKf+JAJEsn2ElDyHCj5uUQpSmkaLwElz4GStztNxbxElDwnSt7uSZq8RJQ8J0p+t0LJS0zJc6bk9yqUvASVPIdKfq9CyUtUyXOq5PcqlLwElTyHSn63QslLUMlzqOR3K5S8RJU8p0p+t0LJS1TJc6rkdyuUvISVPMdKfrdCyUtYyXOs5HcrlLwEljwHS363QslLYMlzsOR3KpS8BJY8B0t+rlCyMrb0EljyHCz5CROZKAWwXuJKnnMlP1EiE6UBA17CSp5jJT+3vRNHKHkJKnkOlfxebZKXoJLnUMnvTlDyElXynCp5v9cGx0tUyXOq5P1OGxwvQSXPoZL3O21wvMSUPGdK3u/I672ElDxHSn7iQ5t7l4SUPEdKfqlN2ti7JKTkOVLyC1La2LskpOQ5UvI+7e1dElTyHCp5n/f2LgkqeQ6V/MSINvcuCSt5jpX8MkhpY++SwJLnYMnPg5Tkq5CwkudYyS9YSUZsXgJLnoMlP49R2nplJbTkOVryC1qSth6JK3nOlXzY6cDsJazkOVbyYa8Ds5e4kudcyYedDsxewkqeYyUfdjowewkreY6VfNjpwOwlrOQ5VvJxj8x7CSt5jpV83CPzXuJKnnMlH/fIvJe4kudcycc9Mu8lsOQ5WPJxj8x7CSx5DpZ83CPzXiJLnpMlH/fIvJfQkudoycdtMu8lsOQ5WPITJUpOLrzwEljyHCz5uHvSS2DJc7DkJ0pkvRg0SljJc6zkJ0ZkvaR78xJU8hwq+bTTqMlLTMlzpuTTXqMmLzElz5mSTzuNmrwElTyHSj7tNGryElPynCn5tIPmvYSUPEdKPu2BTy8xJc+Zkk974NNLTMlzpuTTHvj0ElXynCr5vAc+vYSVPMdKPu+BTy9hJc+xks974NNLXMlzruTzHvj0EljyHCz5vA0+vYSVPMdKfoJEycntILzElTznSn633Z2XwJLnYMlPmEgc5+YlrOQ5VvJ5L1aSqJLnVMnnvTJPL1Elz6mSLztlnl6CSp5DJV92yjy9xJQ8Z0q+7PRx8BJS8hwp+bLXx8FLSMlzpOTLXh8HLyElz5GSL3t9HLwElTyHSr7s9XHwElTyHCr5stfHwUtQyXOo5MteHwcvQSXPoZIve30cvESVPKdKodvu4xAkphQ4UwoTIUpOluAFCSoFDpXCRIiSk975ICGlwJFSmABRclKGJUhEKXCiFCY+lJzkrgQJKAUOlEI3b6CSTD9IPClwnhQmOJSc5HQFiSYFTpNCN2+eUqY+SCwpcJYUutkBlTL1QSJJgZOkMGGh5GUXNkgkKXCSFCYstLEiJI4UOEcKxmyvCIkiBU6RgrHbK0JiSIEzpGDc9oqQGFLgDCnMDEleERJBCpwghZkgyStC4keB86MwN7qTV4TEjwLnR2EuSfKyaxEkghQ4QQoTENpyLYLEkAJnSGEuSvIbe5VEkQKnSGEuS/KyVDdIGClwjBTmwiQva8yChJECx0jB7hzsQaJIgVOkYHf0TEGiSIFTpGD39ExBwkiBY6Rgd/RMQcJIgWOkYHf0TEGiSIFTpGD3gqMgUaTAKVKwe8FRkChS4BQp2L3gKEgUKXCKFNxecBQkihQ4RQpuLzgKEkUKnCIFtxccBYkiBU6RgtsLjoLEkQLnSMFtB0dBokiBU6Qw97nzshgpSBwpcI4UdvvcBYkkBU6SwtLnTtzNJZIUOEkKExdKXlYlBAklNf+x2pj3UVmVECSUFDhKCn6HxgeJJAVOksLEhTY3HwklBY6SwoySNjYfCSUFjpLCjJI2Nh8JJQWOksLEhbY2c4kkBU6SwoSFNvcviSQFTpLCQpI29i+JJAVOksLS5W5j/5JIUuAkKfi8t39JJClwkhSWLncb+5dEkgInSWHCQpv7l0SSAidJYSZJW/uXxJICZ0lhAkMb+5dEkgInSWEuUfIySQ8SSQqcJIV5fNLW/iXBpMBhUpjQ0IYQMkgwKXCYFOZmd150RyWUFDhKCnOruyBJiYJEkgInSSHsKeuDhJICR0khzKjTiaL2ILGkwFlSiDva+iChpMBRUpgrlDaqnIKEkgJHSWHiQsZYsWArSCgpcJQUJi6UglREFySQFDhICnO7OyOXZAcJJAUOksI8Ocm4P4P/R+qebEgLlIOkEHfqkIPEkQLnSCHu1SEHiSQFTpJC3KlDDhJIChwkhbhThxwkjhQ4Rwpzs7uNk00CSYGDpDBxoc2TTUJJgaOkkOzeySaxpMBZUljqkzZONoklBc6SQvJ7J5sEkwKHSWGZnLRxskk0KXCaFCY2tHmySTgpcJwUlslJGyebhJMCx0lhxkkbVyGtUQ6TwkSGUtiI6SWYFDhMCvPcpK2TTYJJgcOkMJGhrZNNYkmBs6QwN7uTTzaJJAVOkkJ22yebxJEC50gh+72TTSJJgZOkkMPeySaRpMBJUpiw0NbJJoGkwEFSmMDQ5skmsaTAWVKYyNDGqSShpMBRUpjnJm2dKBJKChwlhXluktn4JRJLCpwlhbJT+xEklhQ4SwplT7kcJJgUOEwKZUe5HCSWFDhLCmVHuRwklBQ4SgplR7kcJJIUOEkKu4OTgkSSAidJYXdwUpBIUuAkKewOTgoSSQqcJIXdwUlBIkmBk6S4OzgpSiwpcpYUdwcnRYklRc6S4u7gpCjRpMhpUtwZnBQlmhQ5TYozTQpyljhKPClynhS7vYYOUSJKkROlOFcobew+UWJKkTOlOCGird0nSlQpcqoUu72AKUpcKXKuFLudrk1RwkqRY6U4UaKNQzpKXClyrhTNzj4aJbAUOViKZm8fjRJaihwtRbOzj0aJLUXOlqLZ2UejBJcih0vR7OyjUaJLkdOlaPb20Sjxpcj5UjR7+2iU+FLkfCmavX00Snwpcr4Uzd4+GiW+FDlfinZ3H5X4UuR8KdrdfVTiS5HzpWh391EJMEUOmKLd2UclvhQ5X4pz67sgk7Io8aXI+VK0u/uoBJgiB0zR7u6jEmGKnDBFu7uPSoQpcsIU7eyPyhwiSoQpcsIU7U4xcpQAU+SAKbqd5H2U+FLkfCm6veR9lPhS5Hwpup3kfZTwUuR4Kbqd5H2U6FLkdCm6neR9lPBS5Hgpur3kfZTwUuR4Kbq95H2U8FLkeCm6veR9lABT5IApur3kfZQAU+SAKbq95H2UAFPkgCn6veR9lAhT5IQp+r3kfZQIU+SEKfrt5H2UAFPkgCn6OaqXkV2UCFPkhCn6veR9lBBT5Igp+r3kaJQQU+SIKc6DlDZSxVFCTJEjpjgXK5kkJnqjhJgiR0zR74hEo0SYIidM0e+JRKNEmCInTDHsiESjBJgiB0wx7IhEo8SXIudLMexoSaIEmCIHTDHsiUSjBJgiB0wx7IlEowSYIgdMMeyJRKNEmCInTDHsiUSjxJgiZ0wx7IlEo0SZIqdMMeyJRKNEmSKnTDHsiUSjRJkip0wxbotEowSZIodMcR6qFGTBQJQgU+SQKe4OVYoSZIocMsW5XmlrB5MwU+SYKS6YaWMHkzBT5Jgpxr0MaZQwU+SYKe5hpihhpsgxU9zFTFHCTJFjpriHmaKEmSLHTHEPM0UJM0WOmeIeZooSZoocM8VdzBQlzBQ5Zoq7mClKmClyzBR3MVOUMFPkmCnuYqYoYabIMVPcxUxRwkyRY6a4i5mihJkix0xxFzNFCTNFjpniDmaKEmaKHDPFBTPJAoooYabIMVPcxUxRwkyRY6Y4t8Lb2sEkzhQ5Z4p5D9dHiTRFTppidnsJPYk1Rc6a4twMbyMQlVBT5Kgp5p3i5CiRpshJU8x7xclRQk2Ro6aYd4qTo0SaIidNMe8UJ0cJNUWOmmLeKU6OEmmKnDTFslecHCXSFDlpimWvODlKqCly1BTLXnFylFBT5Kgplr3i5CixpshZUyx7xclRgk2Rw6ZY9oqTo0SbIqdNsewVJ0eJNkVOm2LZLk6OEmuKnDXFeapSkHsaRIk1Rc6aYtkrTo4Sa4qcNaW5F97GJpgk1pQ4a0qd2dkEk8SaEmdNaZ6utBGIJok1Jc6aUrfTiCRJsClx2JT25isliTUlzprS7nylJLGmxFlT2puvlCTUlDhqSnvzlZJEmhInTanbayqaJNKUOGlK3V5T0SShpsRRUzJ7TUWTxJoSZ03J7DUVTRJsShw2JbPXVDRJsClx2JTMXlPRJNGmxGlTMntNRZOEmxLHTclsNxVNEm1KnDaluZYpyrVpSaJNidOmNFcziWNbksSaEmdNaR6vFGXNUpJYU+KsKc21TBtXIa1QTprSXMkUZUadJNKUOGlKuw3xkkSaEidNaR6xJHbHShJnSpwzpXnEUpSpSJJIU+KkKdm9TVQCTYmDpmR3N1EJNCUOmpLd20QlzpQ4Z0p2bxOVMFPimCnZnSF1SaJMiVOmZPeG1CUJMyWOmZLbG1KXJM6UOGdKbm9IXZI4U+KcKbm9IXVJAk2Jg6bk9obUJYk0JU6aktsbUpck1JQ4akpub0hdklBT4qgpue0hdUkCTYmDpuTmPVRGGkkCTYmDpuT2KkKTBJoSB01prmSS9x4JMyWOmdJeHVOSKFPilCnt1jEliTIlTpnSXh1TkjBT4pgp7dUxJYkyJU6Z0l4dU5IgU+KQKe3WMSUJMiUOmdJuHVOSIFPikCnt1jElCTIlDpnSbh1TkihT4pQp7dYxJYkyJU6Z0m4dU5IwU+KYKe3WMSWJMyXOmdJOHVOSMFPimCnNdUxRBglJwkyJY6Y0d8SLciovSZgpccyUJmaUohwJJwkzJY6Z0lzIlCSxdpIgU+KQKc2FTBsWpBXKEVOaeFFKohcpAabEAVOaaNGWBWl1cryUJlqUxBaFScJLieOlNOOlDQvSyuRwKU2kKKUNX1iCS4nDpTRXMCVZq5QkuJQ4XEoTKUppw5OV4FLicClNpCiljbNVgkuJw6UU57W58Z5JdClxupTivDo33jOJLiVOl9LcDi9tvGcSXkocL6UJFqW8EfNJfClxvpQmWpSy3MEiSYApccCUJlqU8kbUJwGmxAFTmmhRyhvrVAJMiQOmNNEiqaNIkuBS4nApTaQo5Y11LsGlxOFSmqcs5Y11LsGlxOFSmkiRc/7PEP/h/ZMNaY1yuJTmlni2iBgjSXApcbiUJlaU8sb7JuGlxPFSmljR9m+R1ijHS2lpibfxWyS8lDheSnMV09Z1SHgpcbyU5jKmvLF3SHgpcbyUJlbkUhQBeZLwUuJ4Kc14afO3SOuU86U00aLteyqtUw6Y0kSLbCee0hJeShwvpbklXt7YSSW+lDhfShMt2r6j0irlgCnlHeVokgBT4oApzV3x5NGOSeJLifOlVHbXqMSXEudLqdi95yrxpcT5Uiq7a1TiS4nzpVTmvVQq+UsSXUqcLqUSdixI65OzpTQPWiri+pTIUuJkKU2gaMuCtDo5WUozWSob56tElhInS2nCRKlsnK8SWUqcLOVuJ5rPEljKHCzlbm95ZgksZQ6Wcre3PLMEljIHS3luiVdkVyFLZClzspTnMqYipUeyBJYyB0t5boq3YUFYnpljpTw3xSuyq5AlrpQ5V8rzkCUjLdAsYaXMsVLu5u1TngKWJayUOVbKcwFTjH96/48QPLchLNDMsVKeGJFJ4U8f/uEjC8OzhJUyx0p5bo1XZIclS1gpc6yU5+Z4RT7ks4SVMsdKeWJEG8dJlqhS5lQpm52EU5agUuZQKc8N8op8uGYJK2WOlfJcxOSt/M5LWClzrJTnIUsbiposgaXMwVKexyxtDInLEljKHCzliRPZTobaWUJLmaOlPBcxjfpGodQlS2gpc7SUJ060+bZIaClztJQnUrT5XCS4lDlcyjNcKnIImiW4lDlcynZvmUpwKXO4lCdSlDs5is0SXMocLuW5imnrWJHoUuZ0Kc/TlsRpOFmCS5nDpTyhIie2ls8SW8qcLeWZLTmxEjRLaClztJQnTpQ7KW2VJbCUOVjKEyXasiCtTo6V8sSIcic7LFnCSpljpexmkdPG2yphpcyxUnZ+R06TJayUOVbKbl6eG96GhJUyx0p5okS5kxMLWQJLmYOlPFGi3G14CxJYyhws5YkS5W7jfJTAUuZgKU+cKHfiIpfAUuZgKftu24LElTLnStnPK3TjZJO4UuZcKft5jW7sfhJYyhws5QkTZbOxdUlkKXOylCdOlI0cIGQJLWWOlvLEibLZeN8ktJQ5WsoTJ8pmY51LaClztJQnTpTNxjqX0FLmaClPnCibjXUuoaXM0VKeOFE2G+tcQkuZo6U8caJsNvxACS1ljpbyxImy2VinElrKHC3liRRls7FOJbiUOVzKEynKdmOdSnApc7iUJ1KU7cY6leBS5nApT6Qo2411KsGlzOFSnlhRthvrVMJLmeOlHOaWuFID7CzhpczxUp5oUbYbK10CTJkDpjzxorwxBzpLiClzxJQnYpQ3RrFmCTJlDpnyxIzyxijWLGGmzDFTnphR3hhomCXMlDlmynFepRsrXcJMmWOmPDGjvDFlKEuYKXPMlCdmlDfmhWQJM2WOmfLEjPLG8IAsYabMMVOemFF2GytdwkyZY6Y8MaPsNtaphJkyx0x5YkbZbaxTCTNljpnyxIyy21inEmbKHDPliRllt7FOJcyUOWbKEzPKbmOdSpgpc8yUJ26U3cY6lVBT5qgpT9wob4wSyBJqyhw15Ykb5Y3m81lCTZmjpjxxo7zROD5LqClz1JQnbpQ3GsdnCTVljpryxI3yRuP4LKGmzFFTnrhR3mhlnSXUlDlqyhM3yhtNpLOEmjJHTXniRnmjiXSWUFPmqClP3ChvtLXNEmrKHDXliRtlv7FOJdSUOWrKc9c8OesigabMQVOeqFEOnRyDSaApc9CUZ9CUu/E6ylMsKKGmzFFTnriR8fnPYP5ReKZCIk2Zk6Y8YaMczMZPkRYpJ0154kY52A0b0iLlqClP4Chv9ODKEmvKnDXlCRxtPFiJNGVOmvKEjTYfrESaMidNecJGmw9WIk2Zk6Y8gaOtByuhpsxRUy5h78FKsClz2JQndrT5YCXclDluyhM9yhtNgbIEnDIHTnmiR1sPVlqiHDflUnYfrLREOW4qEzzaerBF4k2F86YyFzLJD7ZIuKlw3FQ6u/Ngi4SbCsdNZWJHWw+2SLipcNxUJnqUN7obFQk4FQ6cysSP5AdbJOBUOHAqXdx5sEUCToUDpzLxo+0HKyzRwpFTmSuZth6ssEYLJ06lK7sPVlijhROnYrq9BysRp8KJU5nwUd7oYFMk4lQ4cSoTPtp4sBJvKpw3FeP2HqwEnAoHTmXCR5sPViJOhROnMuGjrQcrAafCgVMxce/BSsCpcOBUTNp9sNIa5cCpmPmsl524IgGnwoFTmbvmbTxYaYly3FRst/dgJdxUOG4qc8+8rQcr4abCcVNZcJP8YCXaVDhtKtbtPViJNhVOm4r1ew9Wwk2F46Yy46aNfgdFwk2F46Yy4yb5wUqwqXDYVGzafbDSEuW4qUz0aPvBSkuUA6cyA6etByutUQ6cygycth6shJwKR05lRk5bD1aCToVDpzJDp40a7iJBp8KhU5mhk/xgJeRUOHIqzu89WAk5FY6cysSPNh+shJwKR07FxZ0HKxGnwolTmYnT5oOV1ignTmUmTpsPVlqjnDiVmThtlLYWiTkVzpzKhJA2HqzEnApnTmVmTlsPVmJOhTOnMgGkzQcrMafCmVOZANLWg5WQU+HIqczIaevBSsipcORUZuS09WAl5FQ4ciozcopyAqtIyKlw5FTmlnkbD1Zaohw4lRk4bT5YaYly4FQmerT9YKUlyoFTmejR1oOVeFPhvKnMvGnrwUq8qXDeVGbetPVgJd5UOG8qM2/aKAMvEm8qnDeVsJ15KhJtKpw2lbCXeSoSbSqcNpWwl3kqEm0qnDaVsJN5KhJuKhw3lbCXeSoSbiocN5Wwl3kqEm4qHDeVGTdtVNYXCTcVjptK3M48FQk2FQ6bStzLPBUJNhUOm0rcyzwVCTYVDptK3Mk8FYk1Fc6aStzLPBWJNRXOmkrcyzwViTUVzprKzJqinHkqEmsqnDWVmTVtNCsoEmuq//G//vzjfP3Z34f++P+ux/73H//xn//5x+H9vf8c+uP7vT/21+F8uDz++PN//3g7z/9i7IowffMf//G/f0xtD/7jf//v//6s3zj+f3/iq6b/bfzuw/v77es6tIaiXe3EMP+dcd3ywbvlQ0jLhxznD9aY5YO18wcXlr9yafnH3vnlQ7Xjw/Ln4wj36cM4I3r+YPPyIS52xiEQ8wez/JuxC+/8IdYPefmrsWPM/MEt3zVWe00fcv1z07lYf0+1bcZhYcunXP8bvtmMbceXT97WT6HaG5tCzZ/G5irLJ1//14T7ORaxLLevwyeT6ydX/92oXVg+pXoFYwJ8/lTqTzRjRLV8whMq+B0lL59sV3+H7epTsp0P9VPCvyv1fzWm/q9YBNb4XD/VW2oN/sJaLARX/52N+FR/uXVd/TZXn4J1Ef8r/p3HNXtbr8DDsg/1+nyqV+DrGpgGGS+ffP3bcQrb8qlUyxGLN+JXRvzKiL8Yu8rNnxKuPll8wneM1QIvvH9vPw6PH+1LaGJq3uaAL1js5/k9Upu/327kHfemMV+6l4y9/zhcr/3lce//+6t/ELO2mNVsmBfn62Yfn7fro6d2fWPXvGb3637vr+/nXr7gZtMM8zv07xiWLrm5w+G1x3XsL/1ArMUurtbMOKHtBXPn6+m2fDxdDt8f9DJzc5n+pUNjtCvcU2dcYzLk100+301nmt8f4ss2fxrZavuM0kvL6nK+iivKua6xWcq/YVO4UNeeyd3rRof712P6RK02Dyqal27q9TTc/uqvxJxvXtJx/sJr5sSb6XNr8qXfPZsU7qUvjU3/0q++fftn/06vMHStt/TSEpqtib87EB/spd8Nq8JPD+0TSi+dULPZ4e9PZtG0F/razTyd+js1FtrLe+1Xj8bkW9k+7vzSxlmNCncyto+9vGT1v7/6r/54GA50K2r34dcuczI43A/Xx+F9ON/oS2nbk7O8tL9zp4H85pctPR09ubmy/NKLA3Pn69DfT4d38mxM11yn6V66UHKBrjRvYYLTvUY+Nrz0nB5vn/fb5+3RH4krlponb0zIMP7SPXn07Fm51mEIr92Ffjg8Tk8PLKTS2nwtwnz0O48sdra17F+7rf0wCBfbenYmvHZ2PIYD9b9MbB6SRcRRQ7Kx6ugF88Pv65msgdbZry6+CV0NAseRzzUgRfDZ4ZOt/2usgZwZByLUgLT+r8kg+ERQmWpYZlIN481YVLt8sghNa2BjMkLdnJABqKGfGQUBNSBFkOoRmuJ3lLx8sh3CqM4iDEXg1SX8u4Iw1CD4dPhvoYZvBkGgwV9YBGjWIzRN+IQEhqvhtHWuhrUOoZ/Dv/O4Zg/L3iP4DAhNE0JTBJrBIvj0CE0RRIeaPphG8NWAtP67iF8Z8RdId1jkO6Y2jzUgfeklHX5LJ2g07eoMrxqUTs/Gm0+vOZ7D762Trn1Fk33JuRl+bwQI5MU02pecX1ro2o3Tal3j4/HeP+im1myTQfkgTqf+feiP19uxp/nCRPKFURmhfu+vLNpbrTjlYrtcbr8QkbxfDr++Hd7/okbJD1UehJehv18Pw/kn/aGhS+3d127VH/31+MF+bAytqaKN7qqpB3VT2jOvJrZMzcoZq83KwPobPVRMZ1rHQnutH9SGby9y2WqKNrn18fEmJJhD+/obr3V2Pz6+sVOzaz2nZevU2JGWXDStv6COhldjTx5IbBexWfbzly3K/pLxxLT6Dr7fe+bZxDYHYsYhf0pTQpLKtNtc1G5Qo6nP2+PMIET7bNVxG2w9Pw3bRgUxKfdgalB+GJbcQW3c+vHBVnN7fBm1DTkHF1oYZHxWr72tBFxoT0KzuDMagz9vbJG0B4ZJ2hzxx8ev8/DjeD/8osbanSR59VVVY8/LpM20mWTVa5hYlNeJa59J0h6WH3z7dM1CAW+ofqirrp9Li4foS3W/jQOlgmMf1/9W6hGU/EqpwJxAzEpY2Q/4DRxOF+A4w3V3Be4tIieQtWnw9vLJrk4tgEcNu6eWMPobZunGRDYTxDKxeuUmaUPOz/Pbz/7+YA6eTc3m4tNyg3wNckL15UMNcYJbvjnUsCFUNLgk9//8I1TUFGtAFs1iEIFerPQ01tAq1m+PpVLPGq0gAEyuktEaaKWa00g13En1MlK9jFQjybHf0fyhXk+uoBfRYa4cL9d4bKwLmz/UGKdUTljc8m9KfTSlItNSVwxgZkmufqjuSF0jpdRotuvwCVC1AyLtkGTpAGS7hP+1PjYDCGoM8K9BhLu6aqZGaMb4GpWbgP8GDGvqpRsb4e/VSM5YxNOISI3FCnVdh0+A8nVdGYdfiVfROIe/xYp3yF0hrjUOGQfsGcZl2KvLyCDqNb4SegMga3xd2sYDqXtfvw0xsQGkNR4I3GPr8VqX+vMsvIZtsFb3j6TcNR6nreRMaBOVZhElqAz+yzgnFGLa6U1/DT9u9/P/9McFxHxMRw69bJKt0x43j9OxPx2+LsP9/Pl5oT5ATsSi8rQdLU4u1HjR1B7x37Vh8eN0PD8O3y79x+Hx9JtJ1tMqnYvZ4vi0ztf328f5+v39R8+flCHXqvQLni0vz+sJfoTSkS9QemzPX/B5+HtE6dQ2Sa865Vn3bFvEiKGQm66NIFbrv++f9CGSq9VC+cfp++X27XA53fv+f9i6JfDcKYPXx+l6k4yRvLI2m/A4jV76+d4/vwRkYWkdTtg7cs8/k3VkteuI8QPTtT8TJwlcGhPgVkYLaRROF2QlTcJZoc5Fjtdi6cW0D9CtB0jGxeCL7arJyrgYXIJZfdwXbsz75UDzcLZ1KB2kTU4Lm0ajj/cD3V5N+x6tqejOK9frMPQjtzjfrvf+1+F+FDIvqWXfNgSkorNy712/43H+fu3v0ne0RNyGuiRsyMqb8zXlTx+XG1uQ7eGjPc2+hh9v4274naZ1bav6qe5o1r4rq9G3meVS263+IytP9K/hh3Arc5vBmxrTzbcya4/e1SzLTLV7TtRm8xaf4/DMmJt1q7+Hk/9CHjEJkFeRo1UuzmpzFcjSm2nJzfy3jdIsLslAlJV+vXgf6BryLWnXOpxfw+10vpDfTHJ7ynP55/e34fxBzzzyYJzXnVHfDpfDladAmt+1bD6uxoWunii+7uYRck+HpEMqutX67fDo356ONdeetinoXqPJ1Kknv8QXAhWUVGy0xAyZFilYD5yozOkuFo/32yddl62K29Zo2nql4zqaleSSbRZwoZtKW4JCMpnWmM6RGo1tAMAQSTih3NW+nY8fh990dyQelDIiHe2cyfVEQv1C0b3G387Xw/1vCiGbIBEeTCpIsNQMSVezKNCgL1D6X3/p7fbX8Xzv34cb/W7bnhSuypCN1icZ7Y7gkZpsj4uA/IsyeTuafAqevG/fxk7plMPUouQlv9wHoiLyut0TJiUpmvftNtopiVxr8vkl8q0Az3RB/1zIduGJtMdA42GVkr7J4ON6+Hz8YEJzkjMwWfuQaZDkSdBl0poy0/mB3+7nI3UBDXGBqiqkKA/J2Z7ENr1tjrii3cS/zpejkM9qXAutofsVKSFG+xuxnW6RvI+n9+XtcGJJFtumbYKSUs/GnmyZVtFgLVyCVTEED0C5dJYyAnrBzZd4KGyQC7VOuTcvthlnt23SySMFbZR75GL0Z38/n/6Wdo3UpleMMr3CrAobRyKvlNKne8qLGcJ8kaxX+kOTuXlpUDexPclT1B1iizFaRxNbV9qkpH3Qo6lnVu4JHFTKfidjjPW6Qn4gasa0r+aYkDi/SwqhNvrUbY6iGsK3iy4r97H3S3+4jwCUukEkx62UzL5fzj3dWZsfpr1Jo4nb55RNoI5nK3xS2rqNMQCnxSaSfEpNpwB5Kb3t2TqPukwiiRQQjer3KdO4q/G3H18fNDFsWhfcrjFWzYhoN5v1K86PG/2CZh0BetnK2rJSltt8wb1/3C5f3Pc3qT1HwKCra5yVZGX6HiqiSr79ARVaV1SnzcSM/+vhSo+Ndu34ajBUcBkqxwv118RKAAGwI+pia1o2VVScapY0VTQLqW+q/zhX+pvr78p48jUELxXmlao9LYg3wCY7UMAOXLPL8OyRFemqEMCgqNQYhwMTsQDqHQ2eoLErkaxxjnEGDBNq4zWiQF7WuJUvQtvskShGKanxYKI+K9/c2/V4flqMrU9uwUULNNlF68vcrldWb0SEX0rXa7bCJQvNJb5opr/fb8SLy21dkV3WzgsGxxf79sXK6NogUWvv0V8fX/Q8JCkwG9S/dTb1GO794YMajMSg8iy6XccavDG+Jk+zMVXf/2WHyZDAZGjHc3UubakagKn5Xf1Utz0Ug0/9mJZPkAqVSuWnFiHLp6hekWNbgh/97+H2GO7nKznqc+ts2WUz0dqczQ23Hz3JxuTWVZoaR79gc/g9HdnD7fr18Y1FMa2q3UflOXS7/XVmecDWVbWd8kyeXMsjT40kcuKn1Z9QKqDlxLch+sRa9lDqTjiNiXnN+tyJgvqL7b70ukXJ1yYwQPuewaIgT/Xtm5u1jxwWz0cKUQiQChmp/7W/gUOoqQ1hZMjg2/3VdMrau9UYr9o0jgRFKPepsjCTcQBnpVD2faARjm9f26KsO5TycON8xYaFLKs34bxHrZBZq4GgXZtm5y6fIDhMq7hw3Vk73f7HyzZNW6BsDaRu8FrWBh2oGcqofYISburUWz9hj0fjjYJWHaiqsnDMLBp+TA2w6ifs8crCjiN7/wLJglucI1mp2D327+ePw2W4/ffX4XIeyDPN7aFste82LE75/1N/v7NLzoYcFcqz/ti/s204e0IKlc0WFtnU24ZENLVZomlW9wtGn7VYtjS/NSjFDPOeKBw77e9NTZSmfClGs+fb9e3b5fb+V39/vN2uF/oSBwL+dLvBsb+MIr/++PasgU6JxPBR+4gWi5LBSAzqXM7FIAc/nkjcc315nfJYXORyb5/PaiHfCk+K+lUU5XeurZMOygRgY2vm1lLGsk3qmk7ZvkCwLOEOglCUjUAW08L9NI74LeiXpCwfPPb388/+t5CHy60uYJrdorP3GM7XJ4GFIbUrSNNUEb+rdVkuQRCFTwkJ6YK0iInIfFtol+pf2IAvQLWxjTiVItybrIQlzY+SiIlt5bW+ZgiCWVMKNWzu8irChlRaKbQgF/H09vu2SYTpMr5xrZ2AwNoqJXrtNw40JWpbrWdQxgyNPb6BG0sqzQIe7rIssvYNxDewCzYt1TJrRXRVbqxCPKC5DL16WVt6wXtx2BS13WyO/XA4U7fYtmIOr/Qxj6xIsiXHtmoVFydMY0yKM9rAICtbW4ym6n8j19f6NAat3ZSA5Xg+8sYQrcdqFs2Awo4gDvCtv1W0z7FaelrEjtTWKl/rWQl+/DmGZ4fhdqfp+VYCb5VpKSIu/6unfkwryNO2qfiX2nLXKtOCUmmg1ZW7thFIULY7UmjKXYt1gtc+fIWe3LXS46ANDphlpil3rYI4KHVfx/NDysAS/feLhvqjkDxtd6CiLDw+3j4OzOts1jpqbLS187M5ujWmVndkE2LQpIQ2kyZtuLEnkTsSpCkFSsev+3ySsuwuobtOuVb69+ODNl9qfqiSqvVHG8I4nqINchorutvefxzOF976sU0ComBM20evv46b10bzAiJVVW6HzOBzwWzrOtlOyST663PQTbTOSm3hbOd0u398XYbzqEl/Skk7Ylb7oxezokUCO5SKAm7x/XI4f1CzgZjVvWP99fv5OkHRrwstAyHNB6xSXEfMvfFHFNrGjsYqX11q86N/PA7fmVnSY0JZJdJ/3s+8Dp+0H0DtZlKeqE87c2h9L+OURfSTmed7R+SETokXZ1vSPSOyP6dsjzCZE6v7iVPolCqU/vF+v/2iZ2MLMCoVXppCKe0JciDyY4vy+FmsPYOFNhdlilKPMls7na9npi8iqfmi3V9+fzI1gGuLf5KyvUL/+/N8F7IFpDkI2n8tsQ2CMOjfXE1Xh9qKOq7wHt2kM0qgM6r411DQoheA74Awlb7M6XC+vP043BlAaJZSqYi+KDVNp8PXez/8uLFOVq3iQneLZ0OfB5aGa8v9ddvgqT8MX3dJVB+Iqswp09awJ73NjhhU3jJal+Bs6zHXVmoZagasFYPOBSYgcRKh0Yj4i4ilBN2KidWwSYhtoVgxaEZgwGxMRhV6Rt1hhoIjr13poRzJa1UOugIUVMkXVOwX/I6CJt9d/R22QyPxrvazsx36u3VVjW9N1aRYdAWwBvUXptbaW4O/QLt8a9F1Dl0BrEUODnX/1jnk79YWHHl9AdGJDpY96D/67VtfnUvr0WQjoJ9dQKc8dB+0AS3eI1QHsdaG2ohfiWYUNqJnXsLVJ/T50zZsOfX921j4QSXhRLGO9aHNHIw2L/1PetK4FpWjwjUrS5BHk/f+ROUBHblKqJ6KzgEYTY79Lc/X70/tvYjoRhm2nPr+/evxgxfwNYFL3bu15qQNzbbntVXKQCZbwmZGcptW6W6f+r7eNnrPWidbGaQ1tj5vj2ENhc795cjkoG0Mo8y1tObv/Z71Nn7TusmzxyLo7tuwaN0MlcTvdL4/pgbb48NnNX5tO1ulzu05qCR9qpeLw9wNyBRwUKBeBfFyXn9S3XDRDRTIAyy95rHrHuWq6+qQ4q6bm6sCGmy4rp5h2G59VSL4+lceSk0HFwuAw61qAeTRoVNEyySDfkAmogNMrD/GRHRZjRHnLNhPglIyoS8NpqEYKEJNhl4h43Znj3MW53YGX8roD1PqCA1TMC0GWjNToMYs6Fja4UzoMDKkQwlkByLVQadhoHEzbn2w6PiKSnyDv4D+0lp0aLUgEhZaDAfC5aAjcTgrHf6dxzWj443FMBvrwdg8NCgep2bAeRzwKwM8AjhZNmKtRkiIIn5lxF+gsYFN1RuzCcs74Tsyeslqa9xPt/sv5pC7tqVcwrP22o1otkjV1bbF+L76CnBC4IOE6miBSMa6oGN9P2KVUONepLr4MHYHbiTWea52cqWemLODlV2qi1Oq1ghIq9RMKxa16fAKdaCUHdxSuIzGoDHG2tECS9mgjbHB5BxjV1kRhNQObrNDeys0LzZund+EF9bDcffo6YYNy3hcqYcz75XlUc/NUlwb2kRl45XZzNtnz0BGG9VEpe7+dL+N///99knJVWyXndrSx7X/uF3P78RUu4J1mYnR1GNsKMAYdFsO8IIh1k6+pelKp/DrMjYOeM4Xt6SjKFuEnL5oCwLXNk5KeEusEheO5t7u/SfVEwXSEMZq/fOv6/F8/S5UBLXoUZleGo39OlwuPSuQb6tFVIa+H4b+1+FvoVuCa0v0ktIlp+bEiRjtppuUL9KTWaFZdltDnJTVj9/7sYsMzdC1L7pSlvS9Hw7fv9/78TKnxLD0u9vOSEn5rgqGhV/eNphKSlLzvR+Wuzn3kqHyoba1sc3KOHk1SXUSra+vO62/98OlP37v77OJ1lgbQakfzkKnaQSbPdFIKbPO3/vhdj/297HknFxYGw7rvJzv/fDo72ON7PVEy9ZIAk1rS9KBtXuofmH8fv9xOF8nRsRvGVkXyj15tHj/FHYYS6qvdbY2mqy5Vg4flElMjj5dq0RFnsg4eLdZKcwZDW9Msclkj15CGpXBnolLCLBDm1olcZ8NcoCSHYGLSn3jaGt+XaktImNWamRXWz/6w5FbJDA16n/pJEthS9mSpayskBiNfR7+Hv+bUOmfHXkmyhKP0ebUzuw40NIjsqVk5esLa/fL+THw30yE78psy2RxnEgz3GmOPjvCzJWi5dGcKLzJlkgzlDLtyRy7b+QpKPW/s53nn0hKypTFDD8Oj2v/e/hk1DQbcr+Uqvn5PaD+YnNRykZiP87ff/SP4U1Kmbl2Hw7KBlejwcv5g7bNt+2t17a1GC09delpV6pX9lIaDS3lHlSbZNsb5pVdEhtrrDjUtuveKzuQ/Lhd2HYWSSknmo2ZjLZj3fpJ+1Ruw3NU4NqcaFKWs7ImI21zK+SWfE0iYr5QqPmAUIP7UJNxoWbMMN8YuSfIdpFZxDzcWLNIsWZbMQw31hwFtBZIOKaacUr1S1PNvqGsEYUmqeZEUK2VgF4qy8r1enJNqeaayMxVIJ7rheVqJ9d4s0CLULMkpSZJUD6Falh0uMe8qlJzSyjuK+g4CkRoOkx8xigr0yGj06HLR4eG2x0a3SDFaQyE0wao0wB1GuTq10ncBklWg9Tvyv3X7L5d2zrh36EVg7FISCMfbiw6iWFWs0Gi1DjktxyuDwlzg+pHgzSqcUggOySfHXL2Dvp+B/GOK2veCp/Q9hzjt4xfB5QjEe5x7z1mZ6PRggH0NFrp+Pk6DvD7/uTikxaQTpl0Gd37r2P/ttRkUV11Y7AoKxOfArVWHA86urrUIA2QSWH7QxofOXmk2tf5aMuHtaq8YpG6fJGZdBgHX1eEq3sB2jq6upWgVQPy7L6uX/Rp8LUVha9vfkFOs1Me6tNNYg49acqjPDunvx19DSrab6mvsoHg9Lef9/7n+UZFroYoI5VH8fn6HBCkQiIfo11Yj08mgc6ka1deYx/ANjwQi4mAtmD1FKgMkFq3kPjYgnH0BcxjrV0qyjjmfP15O7/3jJlbMuQJDAuKCafMUZ8fb3OvNXp/if+sTLU02nDKktsr1Vra6CtAhsknpSDo/NiqFyVdj5JyztP58XE7nk9nyV4m9pRv8OPjc3gu5QqJtJtSKvTPj9vYhGS4zZW2vBVTNiTw1W7xj8dXf5SK2lMm1aZKUQO1J9SwZvKYlcmhySoVBxAhbXXOHKbQ4GDv/IqwcOjC8cj4b2grZM06rRLjgVJ1PCxGzdgEZrq+m1oZzvyDnsuLSO82/R2fKnYO5+vxxuo2OhLlKsUkrcXpQqlJskErm1adH3P1k1CESjK/WSl1Xew9E6pM0oVZ+d7/8/btjTegCORhOKWE8p+3b8+GiA5amSf/q/97uN1P7yYFIzG9tiJHmR+8HB6DIMP3bY219kQYbc2nt5QsMJlkpVbFCFQxONcCwguMkDIYsmUiwoaI0CQCLCc49wnNQBJ8xBXkYRiUWbWhufp3Bp3FTF4rQxFUoHeRgR9gwNhNQYiAAU+2gyuKaU4Wu5Dt0O2jW2U/COGhG7KYzWQhGLKrUAhtSK2FrgMt/SzuuHUV4FvMV7JurazGv0PPMeth2a+NvtFuAaGJ9dCGogucDfCKAiYXQ6FoIYewEeqViF8Z8RcY8mYT9C7opWKTkraNC/Trc+wYwg9K23b2WEcnW6UP/Oyzmkh4k26jmM28zSfl8PYUGgVSw2eVIcNilTMLQ+bo1ojEVr1FqFqeUFUeAfmT+spCuxXrqxvrOwLhVqr+capLFpX9uVrONXRDw5iCt65DGqCDqtpgDKDBToH3wFiU4Fuc+BajAd3aZBz/DuvbeLzFq8o4K8tAlvv89NRMOzbWrosbHQNqeqsGpxAuo3sBtjzMz4YAHftdQo+hmiFK1X1JdXfM9StyFcmUeivLquuDNq+DT7SKGFeFokEqyUJVZVdNINIZ0Bkav6qv8FQhNTTYUYyH35WxVy2q+ZeewhvrkO/aOQ7rgB/bDH77d77kzOZ5tywQp4x16y9+aT3xrcqTiV5wTI028p/NPrfr922NeFaqNmZjc/tRqaNK62tmpTqI2hR6qbTeZlbWRC9G551VvNK20bjWeaJGpUttRcVKCDRbHTt2zQ9p/v/Hb2BdDNrnpSzyW21fDt/6S3/cNN76f8oJSI3x2QscuECmDUezspRgtSo+tibk0zZZbC0Kz6ytQM3KCsWN29jWGOOEVdZQNiZP5wvXwWcS0rzy8CeL0q1sy1mzskc4MSncy1azoJ0t1NjkYVNbpwDfHzl8RAhw45HAhyoVUlSIlpHng5QbGT2Ip6tvAZoAhAD1qqt/5aoLARGrq6wCvoev3+XrgezrNft1sohyJtWiehCEHlT18IKxJx8mkeAtKUtjZmM1fTaPLJkyfRuTcHzbUESLuecvmQeasS6Hrh12pK3qnO1JOry2Jiq9dD9F8V1pz0Zlenw7vI6hTUZ2KGbVzrWsWzbvG+zJsFOjTM611sSNoZApDkqQNVv9aegqbymDUnhUDcnPpXUvlHLfZ0FDO7o0AEqjULkGOrG+98hloDgi1SxDQl/+ddYzNj1E5MYrm7VN1/osU28lSFGb8RlNCQld0ogyKAcGXW6H4/O4sjaluzQqVVh6/2s7/Ul2RaWoobUopD9JZktZ0ni5/drW1bTtmpRd0C63X4Kspu0Qo+yccrn9elbVxNaO+oJkUU0roPNKTLwa45qaNunvlW3BLp+TrFdQlpqOdJRQHkGzOdbXiPQFS8pyjcUU+5GRND6O2u1SM8qbvGCQhGjPysfp8EGOi3YwOPIDSinybO1p7bUY2St7N152xoG3OzNSE0qofNkcCt72wVi7LyqX485o8LZcHOoSpZr4ohgQ3p5265gL5a6oHxPenvfNqKl/92uExm5ksOWqRVJuxsqZ4aRrPhqLvLAo5dHhrY+1TidRW93StreZIqQ9tdnMx2kUMvJlblvRkNev79HWse8/ny/SkrIZra8wW5SstYpN/dOftaRCv+p2pJfXL9jR3r2fqjSoubbMTf8oLrdfz0+iLbzT71+X26+tB9GOm9OfAJfbL8EY7Vmj3k8m50N6DK2sV3+eXG6/xKfQLjmti/84XW/CO0ba/dRXV23ydu1vv679/bm9cNvEyyur3S6P0+c4YY39XEP6BKrf2dHUr9v9+Pjs2XzvNnIFLFC/G2NsfX7uad2qQNbRS+o3eLE6NgNmXYBb0QrEk8pGtJfH6dHTylDbUjinrDb4OPzzdj8PZ5ai6UhnupdMkUSjIcIciFCUjuLH4Xo+9Q8pLx5IB2WrbAq8GpQao5C2eUW3HD8O97/YIJzW4wo1Vo41Q4euTbGm4cCQ0bIpr6Ja8EGvTCHMFyTOmm63eOW8hGpNmDYdSX219oGObuQb6wIcOjIaQ7mLfhx+vz3zbd965UWZLR5NjZvJ8e1p7rdrg8JQI4esHHPIDL8Nt+HAGiS1i0XZpu7j8PvU98xVax9ufcu01s4fXx/P2RLTxkxrOw/tYOmP/oPUgKZChjFBapGU4f9oj+rEE+niv/Z6gc4lgAlDGmAihO0RTB2voklw0BMa1CdkvhNk7wn7NUiwyaD1eW3yh2b7GRw7I7gra/9xtKwo4M4F6qAClQmaYVjoD2yHKTUdlH9dgTYH+AAadWswp8ysSkL8BQocrIWqBlMy7VqZ6UAoHHqbYUagdfh3HtcMum6xr1mPGZAe/WnWmcIB3VcCusQFaIfwPtoILXREH5uIX4nCGhuhwQdmt8lBw6MUogoNRG1bDL92qMno14buJ7YgB15wZwo6yhQ8r4LfXqBBKui5g3ViC7rqFO2hP18/24bb2aV1WZigrDb86BnioO2z0XwFGjmvLNYcDXN+4tvEZoagIyilGB/nq3hytB6zEgJ/nK9LWfQMkIRdlAxMXFv6YWhgUuYGP87XYWMWecualca2pONkgG1aJ9hql8Hn8DbmoXn60re+aVYqQlpjrFlfykTirnX/JIG7bb0Ph35YWpD2MSdG6cGZW4u1iE6Znl4MYm4Pybe2Gh7bKfM73OJze7hWf2S1fFc0Oy7S++nAGCARHXZKELHYl5aTaXOlTln/yuwJnYyJIK5TysVFs8ItJnNRlE0Ntm3L95kMV+6Uuh72JWOger/9Te2S55eU2yy1yyqH2vy+M3Au8f518Dg6JWhi38fntJCBZJ1+x2A2n58sGZ2mTTdsGJYfa+tbWG3+dfkG6fw0bU7aVQhsO2XrOcwGoMmMdo0UZbQ6/QHJ4JD2BKhfyatHVeD3QAcOP9qiLtmiI7Et6PlX4KdCFW8Lmm8XZQbqOjYvOv/s376uF95DllQMKTvnVntfVzpmlhxxSn/k2g+/bve/6FW1LXOqq4SSX7QCNAFpwoi4BN60gTdt4hoFdauOCTUNqFBARZJJiHgy5pRDZG1QgW7yWkEI/TQmeRrMYzaobTR4eqZAg1AQWnZYFx0KbDt4yygWtwbVlSgHtwaxj0FFgUF8ZfEXa+muRRxmUTdhIeeCH2AdXD+H6AtaZOtxzX4tCg6IkVAP4dGfOjSaGvw3VHpicp2FyMNG9N6GzMOih7iN618gvkrooIkGBDYpqwdq5xCmR7atE++UXeKup4G9coGMH3CgVIg6jYcq36NDbVYOJBy/b2KGz/L5VEi/HSVKGA3yNiq+rQMrLxh69Hc2m9q17RPjKhhUyqZHo8PhN1W/hdY7ND6u91B3EF1Pw7evv6e7KLXPC2S6pXa2HjUqZHPJHAmnTAReT8OP82OcpiZeaCtJ8Er9WmtSuMzY5rC8cuDSanNDsBhaQarxyuDtehrGxm3iTydBrDLOhj3p8WRiUL08nwB+KqQFlJL8LmE03Y9ap6jmpxzSTlmJgBfT80z3p8uNRBaohd6LzW/321/9nUnRIpHAarUL1eLXnYqDSBM288JzmYz9LfxeR65O52EuBufRNYLN1pU3yiK7anOKoQSbZPC4Mjn1bPM5PCAzE42yg/uGYTk8KGRJKYsixA6Srm2au1Y+GnSVMGunbyWIX75nzF7Ri7bkol96hlMqjKknm/TSOkjlpVsxWn1+fIU09ldGd9zixnNrV4Z9bSuYEng0fduRWVFKicmWLsq2VVdO2Zi0NfYkl2s19E6pG2gNsreKBN3KCq7FHPe/bEu7nf5cf0rE2raszCnL6aqh/iLtdOQtee1we3LkXNsfduUkRpkLGedTfPt77gYh+QhtbtJ4ZfNEalRykFo/zivHGE6jNJb7KfucrczfKzUXzKrk1bRNZrQqtOvt7VlY5Fp9V1R26oAlQUVPKr6UD/wJDrR7YdKmSwRxkmvVzEHZP6fqryapqNiPuu3DrWymyoxKvahbkKWcR3e9DXsDaokmRqmQu96G0+3rKpgjTEA70E3Y8FtoUVMU2quba6ieJg2mjjREVhY1NAVZ1Bg5L5UuWmPs6XBPpObCKkt2uUXxcE+k4bhVtoqRXUjblqe6V363XJDV7tMAyqasyS009rDKXZwNTCSF4DoD98M7U1a2DbucEmXMZp5HyCdDfCNlZ/TF2vKfGYAkrW9tbVtgrZJtzrap1KgNlbRNxRY7lHUkQ147ZfIDXeCfi+0CeaRWScZuw4/+Phc79Y/hfH2arJkCbfXxqtnH7evOGrC32UC/SkbQ7g5Dn2zUru2v4TEcpkkXkkaq9fiU8tpJWEuseIp1579zNUOOJjgGAMOgEYnFtBtrqozJWmA0zOOxWdmQfrq6t3EcB12drRosrRUfygZ/spi4ZUZKYjQZempGZtp0Us2Wm3W8FpRPSMLXm1wFmmi56mraHW1WXY0okUn21Xn2NecPGZPplN23Pg9TM52pn8RTMw1DaCWCbvThVcYWy3c8t9hpoyeMvKwHgHY8xufh/uibqQDPB1ebMfVKj2yyujHfgqT6lKmUyV6TJ32+ytaB0harbmrQXeulBGXvRT4PN5GsQ1YKHEYrp/P1OC0pqZMCidC6rHvhYHXyeCSzJDncKVsBVrPj/50nCNFLbZlDp9SLV5viRUZykdq1WA0KpeKtosMYpYqrWhx7kHxJoamP5EKV4tjV7NPR3ZHeXMrU/WjvQS/LkLUDcKnM5EwG395vH59fvDszifC7tR5MGT5Plof+k74/7YGalMqrpXiPzcCwbdGzUyYglpEa1ClrIwJtSm0x9CZcmLetYFF9t9pZH9NEHHKRdLaRevt6Mvoca5k2enPKsuMty3LMRfppOmU4x77iOewkU0teXACL1dGbojbJ3Fylg77YFG4teWhKVWBrTb6drXLVOu3O0R/+enJngiM0VtlB5TmJ1bbZ0W64fX9/g0aR0Y7WnrJcYrQ3b97SXtu6oVbpGn/297dH/36jSyQ4omtQSrM++/t7fx2G29KUgLhPhnTDVQ5sg8XJhTr1dz5dLpN9Tdv37LO/f5wfj/Pt2h+Pt48pRnyK2okeMykT88+WeXRM1K5JqQT5PF+/S5lkT1a2dsOcjAkJ5Ja/GaeckPR570+X8/cfUsNcV4g4XPnO3PsxctgQF1iCG7UGpzb8ogyozfNoI4/F3vCbhwhtoya0fFw7Pi4fwqp0Wz5gOCuEhqjNgDgV6qoahTuE6lVO52qEiKHHziOcxMTr+l+qWAkdbX0t+YBSCTM3PEaMdErg3dyky/cxFUhuVNvxDh1KIZnCIHCI/qDWW0uW6o1ah0TXG7WOdK43qn6oOjJXBYOuhtKuCu4w1ATyOIwvgajL155qvl6qr8/Ur3NhlOU80xxKrpHNHQk2V+WYNvSuRkeRFpsf2TpuDtOnnbLX1uf9/PMw8OqdtixbKcz7vN9+ntkMJ9u6aRgqY52yHc7no/863rZUSW1SwwStn/L17XJ+5zWjttWAhLXjBRJkVikkW82//WCTOVueFLTuxmSOP5uWdmHc/Voztzb4g5ITasygrEMRDnzXiqwiZtYsWlitxTfWRrZttBGVrROrKdY+yLXdE6IyIhJ7N6W2WYcNyjNd7tyU2iPdaovKFlvD7di/nz+oKjOTIzMrnYSpdSC5XW2/hFBXTVLKzP/76zb0b4cH84Zce2RqJb33w/V4+xDdITK7SZnyq+Ykh6hNsjhl5cm9P42NOt/7U99/Xc8D7W1AGhKudajK7ejef/+6jFXxVHxDbmI1qXzQwn1smystxxoaWjilXmMxe6BdIlo0pMwZrIbqI/o4kHSLbR11r2zCuViV5kq2tE4pi1qsbV5gi4XUqwjtQMbY8YleufYyg3J6R9MNZAFirCmIa1FbUHLjpZfM27cDb2fZPm2DonWDjlpWqRet33C+vtMvaKNUsw66Qx29VerZly/gv8C0CAG92622DVBj9am1gyFxIIo3vLI8cTF9HkWaPNdnWlk3ap6ttosUNy1cOjmiUB2iDJHFfh7tTE2vdJ6qodPt/jHCgSdpSnsbirLGoxq9XS9/D7/5KPFUyJggZR+eavPX4X49X7/TH95CKuVY0udA27a1l75GSaEGj6HGROhOgcKcWPsoxFoIhQorFOCk6temGkWm+ue5Or+52sk1ZswVCOfaCKPUmTLQfZRQ/6c6xqIgFka3XtNhJkUHutqhzwbqp8waaxuU5RvMx8A0DwOSaSyqzhwqdhxGxwLGGoTPBrMNjUMnR1RNGb9228aVYr6r8cq2PmPy49w/3u79mEBiK8a1lT/a+Q9sPNKIN2kTnNZXV5qctX7P7exbd7MoJfezsePb4fP8RjsZJ1KykJSAlNiz1B6BM9rTeLYnqOlI3alSoL1Yu96G8/U8nA+XMTcs2CYlmMoAZbb9r/gm6V6tVElRyyI8LMTsKzdjl3UmIul66UY8LU/bMianRLuNrWeA304/88oepOtgwuG2TCukWW06yOCVXzwb/bqefz9bJR2ZlbL1+41pg9taFfX7eBvX+pGNAGpVxkbJmh/94f7+Y3y1aWThPWH2yMl0ytX96N8/bYh/kc2nzTYoZWePnmKe0DrUujfiMbbsYkN6PCnV65AHNShLtkoB22idGTftlr1OncaAJLuIwRS2SZrXtV2oQ21wG5XSGVE+2qZ/1tF38we3OgcYKxQw6RqDukzA3UNRsolwHTAi3UTk5yN6F2MU+nic1k9QyGHkpckdPtk1eY1S84BSczgHGcXDBU290ITJYIyugadkCkrIOxRXdxjG28Hx7xL+HVpbGbSsMgALBlGIwYg5g7+wKNtex0RbpI8tlI2YLGox/MNi6Id1+Hce1wxhm/VokeADwhaUqXs0IgvVkbQBJeQYlGjRSsCilYCN0Cli8r3FfDYbMdMETQVswni/pNTUTWHT/difplP9dhVrP8jMYm1iW7AstZAk2S9lbDKb3qq8tSQBpgymW5PSZZJe8sqgdLb5dJoH0k7eKY+0xpj4o1s3xqm31cam8KtJr3r9fjqwetvUPmSrbb082/m8PYbDx7j9s4RBsiQpqezAtBgdZQiizUQuVLt0JkkI2fKJhCwoh5CNosuNXClJ6ShTzo9+GC7927G/HBgIatubKBHabOzZVisgctD0u6R9QwauMx1u16+PbwyxtY6Etq0rb7fT6tyVScLRxGH4ujPPvtUvrBOqGqX0iqIAqoIyBY2vvI+ZF9oqhySi64mPOZc2YC4ZpnlazKKxEQ8naTfw83emuk+kMjvhmE3KXjuzxbfL+UEBg2t73QVlldxsbBwuxmFxKwnx8C20SezVLn0HCwlEqotms7IUcjY7/nR6rW0OTAnhVlPPgV0LTr1STrXao9IQ26IprwxhV2NcRORIhveFt3icCXa7f33Qa2vbyK9TjZWx3WyWNcdtA4oAfzagqWwAUMI4VxMxNhq5SBPh7SaEdAkxT1pH2SEtl4ABkJI0GdqSDO8+I87BoF2T4eejJaopSAKW6jmagiZUBS1du7VHMVqnIl1pOwD3rkCxUiMDC22QNWgIZkDyDP7CwvKKDi38Ywv/eO2q5uAfN3IK/DuPa4b2x651Sx6boEe9j0erqIBB0wGRRkDbPER7NkLBFFHZF/ErI/4iQvuU0No3ofVD0rp25+9jwvRZA9qRGjIlbl2sfX594/nSFrkaTDIz6A5sApYhMuwmYinFtUoIXccSglEMLTbogWowttis5U8ZE9cz8s5rQ1rk301GwJsxZaYYLHVMJy41dW9KwqJflVZ4LB16Fndh1WGhixk6gmE+soUyxhoEdgYT0sHrrIXllVtZhK9rC3+HwA7CLesQtEKxZTHN2npYXk95iLWsx+vp0XUsYPEFNM5Fvzobcc0RXf8iXuOIXxnXv1jPeIOlji5rSamIHZfkv5DRZ0fEY+qz+uPrwsKrVo6lDdQWM1J+uA0JilIHtNqTBqm2E4K0Ycv18Pn4caNXlokfqiwimgtA35YaNGKPtIXr1uo8tGE3eP2scsBF/banKlDf1jGarhne9ZLheWDzO3MAPWlzb7Re1WySiQts6/IGra83mVou7m/h15OdWDubbrbKrs+QBAqOy7q1OvTzD9jRAxyBAHlDhLuDpJNB0snENVmIuXIJxDEF/K9pTcPCPcE5k5EYzEgMZkhPMcfeZDDKgt6X6EhqCk6hgnOrrBJk9KjvcNR36OzYIQbqkCY2SORBw2sxbdga7OMQgFjcXLuqKyx2TAvnCoWyFopm22hX8e88rhkk1vpVAYFSVg+to0e/zoATIqxxIJyrgGuOUBqvLQ4jfmXEX0ScnAnuWEIaUjv6cMooLVsMI8HBkUSV9gChBk/nK5ULBkJltKVSc1EKlSS0XKyer6Eu9VCdQbxCoT6TiLE1dX3CS4z1KaS6DNDxNaGAuPpRcI9yFZLn+vLl+raiUW+pfkSpqL9Uz6ys4lW4aGjuauACmQ6bgUH23+BFNRj4YeDyWRABuw7uRjSC9q3GYUtxoAnQ+BtIeA006wb5I+OgtvLYAjwiLQjXDQZgGK/UdEpjkdsd1Cg7Xcx22LFDylsR5lml0G02yQelJ9KrLimbZTyG+/mdjTFu5d91owkRi7QuSe1p9PVt/AcHWoPlSZfKDpqVbp3Wpf0FX9/+2dOfYEgWHssmYzlk5VClxfZTT4S2Ws4oC54fX9/YqF7SWUH9Y8fxy9fjrwMb+9vmTJQrc7KFjuO9qHpo+X9R9lAVDAvubVuEV7R5Vm5Znuft25rIomxGMtsWPftWMqxstFStSRdHRnQq45fJ3DDOi92sAEkkaFevp8f7/fytH5vT0M2OqE+VwmOYk24jKVExWrnAalG4lZm4x8oHPRz+4uNpSF8AHELaN3sy+Pa9Z7nqti1CXIV/aJmNHJixyih2/aKpiQwr9vdkR1U2D5hNfh7+ZtfeVo8gwQL+buDuGqscd7d+kXjtZCS1EiBOJvltt6103K3uC7IXNur2Gliv4RnZuj0Z26Fby7A492Sk9sgIjRcWMn90tm2S4pDz6uDNW2XlCKzLv5+MtXnheY0Wpd9PxqvoTufhJA1WjiQZGhBBBiUNHU5j5+ZxpyVWCdWxHaI4pQJrOI2T2Idft6lKiDZcbXsMmAg/NirzuKPp/nD/F8OyUiTuIRQySZn6Wr5FniOc2mDNYl6gDcpWuYtxyXAihhHOKrUBi2FpvnBqhylbSKlsUJbujKZvD6ZfaO+xgxbHKTvODVvDwiMZ4xmAeYKyJcBwOp0vl3F6yYU1kWy3HYupflbZ1n44fb8N0nDaSMoTOqVAYjidPz7643lszC22vAzkatfpIDpnZzhdzh/n4fI8ViwS4VLEdJW1shO5DZOUVcrLtwnFo4l0i4Ai3zplyedwutweG7fdkNuuffvEW0Jkk0jYRWR5oSEz2lBwOH18DuNzvRx+fTu8E4czkg64HZJZnRLUVtv94/1++0Utk7UIzUWnPQgXy5cbu+JWaG47DPTrtH7oYne4H2h4GcmkQCTYbadE4Y3hqa0ItU36IQKCLhUnOttPdyKRDv84HI1SMD4Z3RgRHlvdve3QbbLTunGj7a+tmX/U66jX3SmLvRbbz7eDzCXAoaWdET+cPr6GZweEdL1FKlhbBDic6iF4PN9ZviQR7fw6Ms4pm5oM40z7ybERNxJPNhJIkRFWAISbpKxjW7/w13n4cbwffjHBfCRdkRLylElZgTh+weVvfgqT+jiL52rVHsNcrXK48EUe2lYyJmDGcVBmXFbLY/UrIz+hkMwA2jgEZfZ7OH0e7mMhj9h5jXTbWtuUKLnfaPvxOP9kDZ6Jrw0qY5WjHYfTvb/2v6hn1p4BDsjbqYOCje0pFNIeFSK/oAQWMCw+ONLUo+kco70PY099emcTubOIYpTC09miMOEnkgnkaPljTdZ6Bo9+2Iot2o0voHdQUG98o+6WP7fkaIUyhPbKovjZqnCxkZiFnkiJqyezcrRCypJRXhDU8efjfP1+6Z+aVMRWmGsA+EwEqUmQ32j7hA2n6no8n2JkASJQ1NbKj5a/HsPlfGVmSRyDNWLVt71G5vTWkMAc6bo1mYf55iYpK6jWbzqf+o9P5r5TRg9mFZUzfIbT5nHoyHEIDq/MZg9j3x3KG9ppor4GR0X7GCd7T8qSNgQAT/dKQfRi87nJZJtvt157KydrUpWWbYve/FqLBbkadIImQNwQIW6IEChEJOciqr0SKrrWwe6oSzcJSzChtDuD1WYsxoxR8BkK04xQFmNeTTEQUGAYaUHKtGAvKBB3detEWwjIOqQN1t61pupZrUE1ExTw1iBWMhiIid7sFg3ErYVUwa5yOggP0BnOYqScRQG7dfh3HtcMMmw9PACP6i2PU8tD3xkgaQjI5gQszYhrjhafIA6J+JVx/QsoTBNEfgk1aknr7p3f/3qwWKYtNkD+QiuRHwWlrFVTi1CV8vDFilDr3cZDRZvdv41smopCciDdntB7PuO2FpzkKDS0UIPaAg1PgR6mQLgLlYSFdsgWPEQtRxxuw+Hy9n470wFWhsTIWHT1lM3KMrzhzlrJWjLsW2tjHLnAiq9MRwQ3OOwQLyStqyEDSt9OhIGwC4osg5fdQEZjgjYAXb9S6Mjfrr66H2KsSFa2f22+4jAWhD2P/g6JTkpQBgCr3amURITwTZBVlCj22a6EolvNqrJyuTE8m2k3IbLItYOiGovSfU1kRnvSJqqejfIGSKndM21SjjRsDD+3qklksSVtwm41SfcM8ssxnxodcOq7k6o2C+UhWbtlN98s9FxuvUb7+oLmEqVAemgg6DIBvVDDenSVlYOtklN4xGFNI62SU2R5EIantd4fEqME2WiG/5PdKhKCDBX1PDhoTIFGrqCMoSAwR8MfU+C7F/gSHfJqK4zu4K906yAVs/pOEJ9CQIp2sdbkNQEF7wijB9EQyOKMsRbyf4dCKBdW3wn/Df/O29V3gscE8LIOrPZ5JXOr77TOCAJcgzQ1IjaO8BDRncDGtURx/QuIVFFCYtVh17oofxpppbfpQqsUUNUg942dpJmMC83KerhqjR/LbWjr1iqV1ZlWNhTbajKemsMFqzYo+yS1Rjf6c5J7oQWho9nz034Y2q7yRjuFYLjTChLX1kMkpQ5pNPI2/Lj3jx+3C21131ZJJ6WEc8pi8LrH9tdZbQ/faul5dIFv73zQsofWnDy7oJUE2qCsER6In+BawpWqqijD7/PauOX327fL7Rs13SYR6jYHJ9947TH/+8mT9G1yryQlSfj99s8H627ZAslUQ5KiTUX/vr49ZU5cW8wUcCSaon06V7GEPbQ30wSkGlA5YOCDGAjbTVyDh7UbPA7TBPk4frpJGCeWwIdQNW4yylUzSFFGtADZu8loUFPQXa8YHMRYAgXuRkFCpSCC7FCN0SH473BIdnmFm9iBcZga1G8YgEqD8lKLv7CwbJGIsGsqBOkW9HS3Dg4Aetxbh3/ncc1IxVm/tt2May4NRzcO04AqvYCoF26YjbjmiIJehIQ24lfG9S9Qc4J2QjYBrSbtpv1bDITakjhlP8nRkhD6tHMBi3KK0fB7Q29MJlV02q2Wece2fdmQjArV1wnV+UUZbqiOHToBIaUI/wkJ/VRfiVSdrFT/TcoIH2pTy5qGRHYx1zcg1/qOjC6ZNehAQyf0cyr1vS7VUyx4RzukOju830glGjjGBvzcwB02BiX0Zu2UCZ5s4aRbJFGRVDRo8GTQ3dUgH2OQFzAW5fLwugxmUBjMVjAOnTcddhOMNTQeO5FHUSTeUePxe1GEbryyR8aWpoFIaYuSwzbG3kcWeR15L1Uptgl/o23Y+HXtf39uzWomg/iUb3Nt/Tfc1oaAxCoB0lmJuL+ul4/b8XyiMi2i8Q1KVAJTo5Tv24UlMBPR+QZl9AKbPw+X8/Ew0BuZyOzGoJRQfF03tf+h9dmNVQqwGoNS3ylS7GKVcQCxKfSdIiXc2rHVX/czLeZpfRxEm3VPQl8Hk5FzKKukB90m7Crjw5GZlYOvvu40ZmrypNjmlA/hfnmr8zNppQTpMqp0r0drX4/+Pv0hsUbqprX3/XH4Ps7iGvrf9FQnPE1lankPmK9KWmkptY/VEg3pCEwBLYWvZrxyaDasv13643fWR8YXUpe/JsKVIVU1vsgxhA2sVcJbqxRpLmbHVLo8HyZ0ZM6BstJoNSv0Mm+vsyhHC60GhVJNopzR1idgdx1u8+bNEjGk4/pLv3o0ee/7p6oCQ2o2lV7oz8OFDS9pK6sgSbAJzn5CbjEpewKPLQ5Pf//LVhxkPJ2yEGg2LYabmegxixIfzAa3yuLauS5Ke7ehf+rqZdt6Va/Uno6WHpcbE060/aiUTLEaonSAzPJQChtHZUjPyhub69FtEbOR0/328RjdxWFuxEdTdW0RsW5dz1Yvt/cnB6dd3lpbwjCCtttbVSqEGiGEmt+GfCPUUCDCF6jpDGiB0Lcr1ZAHxCGBMNaEB/IY8CRyjV7QH7fUGKfUgL9U/XepKRS0xjUdcikdyoaQqzAdhCgG/f8NRCJoiGsMcjN2nSewRlPAJWi8ZTBizji4Rw6oxa0zAdDWzAO1ePSJ8rhSdKwwXjmwdXnArClD24auBpqhxmwQUCJ7hV7JKLqKNSCDZAONTFJ9IKl2M8AGm6s/mKudXEkQIFKu5zuUB6WqdEqNINF5rSCD1yH67RA/dnBEO+ThDOCXQaRrEN+i5bEBRTQWgiCLvlnoRGKcRSwL6ObQxsEB03lAPI9MmwdM87hS9MgwXtkL/dfhMQrrz9fv7z+mSaNszi+RgqA9gQ3K2eu/J6tvt1/X/vg2HW1vtKmhb3XrRenlUKuTFq22UNr4khbtKwnr/CW13m+0+pQPNm2JkVFGwdTudPHjH9BGA4kMbojK/Vg0/XTNrQNfXw4PAU5QOt3Ldx2PtCJyGKYZB8w/SJ6oi5VxKb5iuvtbpgMBJS/dqW/385EN7iJVovW08ejuip5sAdoidG2yEQErWsHbCNFcxMsD0a9FutBmZdwwX/jz2HOS5onKUunGWHN36W7funZeKYlv7J5Zz9w2GKtbvcc9QsdDG6EujvalLxVepdbd1Q58XKzNi3pe4du3qD0QlW5Ya/95GabWpI3KeL21Kdz81PrENirzCbPROeyVLpTIvpTx2rPNZ65KSluTMs+wYVgmrJFM8Xnp6JlOHuEW20Dc/Ffu8GyyXW+i/da7VkJ1Vl+VWpJuF7GzxsjlOaXQZsHt0iJUZep0+HrvpXlr7TZWlOm43/fP4fY0Yi4boonQvEP/9ecfn+fPfqp7+I///K//+7//D8GWyQE="; \ No newline at end of file diff --git a/docs/assets/style.css b/docs/assets/style.css index 258146fc05..2ab8b836e7 100644 --- a/docs/assets/style.css +++ b/docs/assets/style.css @@ -1,85 +1,247 @@ -:root { - /* Light */ - --light-color-background: #f2f4f8; - --light-color-background-secondary: #eff0f1; - --light-color-warning-text: #222; - --light-color-background-warning: #e6e600; - --light-color-icon-background: var(--light-color-background); - --light-color-accent: #c5c7c9; - --light-color-active-menu-item: var(--light-color-accent); - --light-color-text: #222; - --light-color-text-aside: #6e6e6e; - --light-color-link: #1f70c2; - - --light-color-ts-project: #b111c9; - --light-color-ts-module: var(--light-color-ts-project); - --light-color-ts-namespace: var(--light-color-ts-project); - --light-color-ts-enum: #7e6f15; - --light-color-ts-enum-member: var(--light-color-ts-enum); - --light-color-ts-variable: #4760ec; - --light-color-ts-function: #572be7; - --light-color-ts-class: #1f70c2; - --light-color-ts-interface: #108024; - --light-color-ts-constructor: var(--light-color-ts-class); - --light-color-ts-property: var(--light-color-ts-variable); - --light-color-ts-method: var(--light-color-ts-function); - --light-color-ts-call-signature: var(--light-color-ts-method); - --light-color-ts-index-signature: var(--light-color-ts-property); - --light-color-ts-constructor-signature: var(--light-color-ts-constructor); - --light-color-ts-parameter: var(--light-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --light-color-ts-type-parameter: var(--light-color-ts-type-alias); - --light-color-ts-accessor: var(--light-color-ts-property); - --light-color-ts-get-signature: var(--light-color-ts-accessor); - --light-color-ts-set-signature: var(--light-color-ts-accessor); - --light-color-ts-type-alias: #d51270; - /* reference not included as links will be colored with the kind that it points to */ - - --light-external-icon: url("data:image/svg+xml;utf8,"); - --light-color-scheme: light; - - /* Dark */ - --dark-color-background: #2b2e33; - --dark-color-background-secondary: #1e2024; - --dark-color-background-warning: #bebe00; - --dark-color-warning-text: #222; - --dark-color-icon-background: var(--dark-color-background-secondary); - --dark-color-accent: #9096a2; - --dark-color-active-menu-item: #5d5d6a; - --dark-color-text: #f5f5f5; - --dark-color-text-aside: #dddddd; - --dark-color-link: #00aff4; - - --dark-color-ts-project: #e358ff; - --dark-color-ts-module: var(--dark-color-ts-project); - --dark-color-ts-namespace: var(--dark-color-ts-project); - --dark-color-ts-enum: #f4d93e; - --dark-color-ts-enum-member: var(--dark-color-ts-enum); - --dark-color-ts-variable: #798dff; - --dark-color-ts-function: #a280ff; - --dark-color-ts-class: #8ac4ff; - --dark-color-ts-interface: #6cff87; - --dark-color-ts-constructor: var(--dark-color-ts-class); - --dark-color-ts-property: var(--dark-color-ts-variable); - --dark-color-ts-method: var(--dark-color-ts-function); - --dark-color-ts-call-signature: var(--dark-color-ts-method); - --dark-color-ts-index-signature: var(--dark-color-ts-property); - --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); - --dark-color-ts-parameter: var(--dark-color-ts-variable); - /* type literal not included as links will never be generated to it */ - --dark-color-ts-type-parameter: var(--dark-color-ts-type-alias); - --dark-color-ts-accessor: var(--dark-color-ts-property); - --dark-color-ts-get-signature: var(--dark-color-ts-accessor); - --dark-color-ts-set-signature: var(--dark-color-ts-accessor); - --dark-color-ts-type-alias: #ff6492; - /* reference not included as links will be colored with the kind that it points to */ - - --dark-external-icon: url("data:image/svg+xml;utf8,"); - --dark-color-scheme: dark; -} - -@media (prefers-color-scheme: light) { +@layer typedoc { :root { + /* Light */ + --light-color-background: #f2f4f8; + --light-color-background-secondary: #eff0f1; + --light-color-warning-text: #222; + --light-color-background-warning: #e6e600; + --light-color-accent: #c5c7c9; + --light-color-active-menu-item: var(--light-color-accent); + --light-color-text: #222; + --light-color-text-aside: #6e6e6e; + + --light-color-icon-background: var(--light-color-background); + --light-color-icon-text: var(--light-color-text); + + --light-color-comment-tag-text: var(--light-color-text); + --light-color-comment-tag: var(--light-color-background); + + --light-color-link: #1f70c2; + --light-color-focus-outline: #3584e4; + + --light-color-ts-keyword: #056bd6; + --light-color-ts-project: #b111c9; + --light-color-ts-module: var(--light-color-ts-project); + --light-color-ts-namespace: var(--light-color-ts-project); + --light-color-ts-enum: #7e6f15; + --light-color-ts-enum-member: var(--light-color-ts-enum); + --light-color-ts-variable: #4760ec; + --light-color-ts-function: #572be7; + --light-color-ts-class: #1f70c2; + --light-color-ts-interface: #108024; + --light-color-ts-constructor: var(--light-color-ts-class); + --light-color-ts-property: #9f5f30; + --light-color-ts-method: #be3989; + --light-color-ts-reference: #ff4d82; + --light-color-ts-call-signature: var(--light-color-ts-method); + --light-color-ts-index-signature: var(--light-color-ts-property); + --light-color-ts-constructor-signature: var( + --light-color-ts-constructor + ); + --light-color-ts-parameter: var(--light-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --light-color-ts-type-parameter: #a55c0e; + --light-color-ts-accessor: #c73c3c; + --light-color-ts-get-signature: var(--light-color-ts-accessor); + --light-color-ts-set-signature: var(--light-color-ts-accessor); + --light-color-ts-type-alias: #d51270; + /* reference not included as links will be colored with the kind that it points to */ + --light-color-document: #000000; + + --light-color-alert-note: #0969d9; + --light-color-alert-tip: #1a7f37; + --light-color-alert-important: #8250df; + --light-color-alert-warning: #9a6700; + --light-color-alert-caution: #cf222e; + + --light-external-icon: url("data:image/svg+xml;utf8,"); + --light-color-scheme: light; + + /* Dark */ + --dark-color-background: #2b2e33; + --dark-color-background-secondary: #1e2024; + --dark-color-background-warning: #bebe00; + --dark-color-warning-text: #222; + --dark-color-accent: #9096a2; + --dark-color-active-menu-item: #5d5d6a; + --dark-color-text: #f5f5f5; + --dark-color-text-aside: #dddddd; + + --dark-color-icon-background: var(--dark-color-background-secondary); + --dark-color-icon-text: var(--dark-color-text); + + --dark-color-comment-tag-text: var(--dark-color-text); + --dark-color-comment-tag: var(--dark-color-background); + + --dark-color-link: #00aff4; + --dark-color-focus-outline: #4c97f2; + + --dark-color-ts-keyword: #3399ff; + --dark-color-ts-project: #e358ff; + --dark-color-ts-module: var(--dark-color-ts-project); + --dark-color-ts-namespace: var(--dark-color-ts-project); + --dark-color-ts-enum: #f4d93e; + --dark-color-ts-enum-member: var(--dark-color-ts-enum); + --dark-color-ts-variable: #798dff; + --dark-color-ts-function: #a280ff; + --dark-color-ts-class: #8ac4ff; + --dark-color-ts-interface: #6cff87; + --dark-color-ts-constructor: var(--dark-color-ts-class); + --dark-color-ts-property: #ff984d; + --dark-color-ts-method: #ff4db8; + --dark-color-ts-reference: #ff4d82; + --dark-color-ts-call-signature: var(--dark-color-ts-method); + --dark-color-ts-index-signature: var(--dark-color-ts-property); + --dark-color-ts-constructor-signature: var(--dark-color-ts-constructor); + --dark-color-ts-parameter: var(--dark-color-ts-variable); + /* type literal not included as links will never be generated to it */ + --dark-color-ts-type-parameter: #e07d13; + --dark-color-ts-accessor: #ff6060; + --dark-color-ts-get-signature: var(--dark-color-ts-accessor); + --dark-color-ts-set-signature: var(--dark-color-ts-accessor); + --dark-color-ts-type-alias: #ff6492; + /* reference not included as links will be colored with the kind that it points to */ + --dark-color-document: #ffffff; + + --dark-color-alert-note: #0969d9; + --dark-color-alert-tip: #1a7f37; + --dark-color-alert-important: #8250df; + --dark-color-alert-warning: #9a6700; + --dark-color-alert-caution: #cf222e; + + --dark-external-icon: url("data:image/svg+xml;utf8,"); + --dark-color-scheme: dark; + } + + @media (prefers-color-scheme: light) { + :root { + --color-background: var(--light-color-background); + --color-background-secondary: var( + --light-color-background-secondary + ); + --color-background-warning: var(--light-color-background-warning); + --color-warning-text: var(--light-color-warning-text); + --color-accent: var(--light-color-accent); + --color-active-menu-item: var(--light-color-active-menu-item); + --color-text: var(--light-color-text); + --color-text-aside: var(--light-color-text-aside); + + --color-icon-background: var(--light-color-icon-background); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); + --color-ts-module: var(--light-color-ts-module); + --color-ts-namespace: var(--light-color-ts-namespace); + --color-ts-enum: var(--light-color-ts-enum); + --color-ts-enum-member: var(--light-color-ts-enum-member); + --color-ts-variable: var(--light-color-ts-variable); + --color-ts-function: var(--light-color-ts-function); + --color-ts-class: var(--light-color-ts-class); + --color-ts-interface: var(--light-color-ts-interface); + --color-ts-constructor: var(--light-color-ts-constructor); + --color-ts-property: var(--light-color-ts-property); + --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); + --color-ts-call-signature: var(--light-color-ts-call-signature); + --color-ts-index-signature: var(--light-color-ts-index-signature); + --color-ts-constructor-signature: var( + --light-color-ts-constructor-signature + ); + --color-ts-parameter: var(--light-color-ts-parameter); + --color-ts-type-parameter: var(--light-color-ts-type-parameter); + --color-ts-accessor: var(--light-color-ts-accessor); + --color-ts-get-signature: var(--light-color-ts-get-signature); + --color-ts-set-signature: var(--light-color-ts-set-signature); + --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-alert-note: var(--light-color-alert-note); + --color-alert-tip: var(--light-color-alert-tip); + --color-alert-important: var(--light-color-alert-important); + --color-alert-warning: var(--light-color-alert-warning); + --color-alert-caution: var(--light-color-alert-caution); + + --external-icon: var(--light-external-icon); + --color-scheme: var(--light-color-scheme); + } + } + + @media (prefers-color-scheme: dark) { + :root { + --color-background: var(--dark-color-background); + --color-background-secondary: var( + --dark-color-background-secondary + ); + --color-background-warning: var(--dark-color-background-warning); + --color-warning-text: var(--dark-color-warning-text); + --color-accent: var(--dark-color-accent); + --color-active-menu-item: var(--dark-color-active-menu-item); + --color-text: var(--dark-color-text); + --color-text-aside: var(--dark-color-text-aside); + + --color-icon-background: var(--dark-color-icon-background); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); + --color-ts-module: var(--dark-color-ts-module); + --color-ts-namespace: var(--dark-color-ts-namespace); + --color-ts-enum: var(--dark-color-ts-enum); + --color-ts-enum-member: var(--dark-color-ts-enum-member); + --color-ts-variable: var(--dark-color-ts-variable); + --color-ts-function: var(--dark-color-ts-function); + --color-ts-class: var(--dark-color-ts-class); + --color-ts-interface: var(--dark-color-ts-interface); + --color-ts-constructor: var(--dark-color-ts-constructor); + --color-ts-property: var(--dark-color-ts-property); + --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); + --color-ts-call-signature: var(--dark-color-ts-call-signature); + --color-ts-index-signature: var(--dark-color-ts-index-signature); + --color-ts-constructor-signature: var( + --dark-color-ts-constructor-signature + ); + --color-ts-parameter: var(--dark-color-ts-parameter); + --color-ts-type-parameter: var(--dark-color-ts-type-parameter); + --color-ts-accessor: var(--dark-color-ts-accessor); + --color-ts-get-signature: var(--dark-color-ts-get-signature); + --color-ts-set-signature: var(--dark-color-ts-set-signature); + --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-alert-note: var(--dark-color-alert-note); + --color-alert-tip: var(--dark-color-alert-tip); + --color-alert-important: var(--dark-color-alert-important); + --color-alert-warning: var(--dark-color-alert-warning); + --color-alert-caution: var(--dark-color-alert-caution); + + --external-icon: var(--dark-external-icon); + --color-scheme: var(--dark-color-scheme); + } + } + + html { + color-scheme: var(--color-scheme); + } + + body { + margin: 0; + } + + :root[data-theme="light"] { --color-background: var(--light-color-background); --color-background-secondary: var(--light-color-background-secondary); --color-background-warning: var(--light-color-background-warning); @@ -89,8 +251,16 @@ --color-active-menu-item: var(--light-color-active-menu-item); --color-text: var(--light-color-text); --color-text-aside: var(--light-color-text-aside); + --color-icon-text: var(--light-color-icon-text); + + --color-comment-tag-text: var(--light-color-text); + --color-comment-tag: var(--light-color-background); + --color-link: var(--light-color-link); + --color-focus-outline: var(--light-color-focus-outline); + --color-ts-keyword: var(--light-color-ts-keyword); + --color-ts-project: var(--light-color-ts-project); --color-ts-module: var(--light-color-ts-module); --color-ts-namespace: var(--light-color-ts-namespace); --color-ts-enum: var(--light-color-ts-enum); @@ -102,6 +272,7 @@ --color-ts-constructor: var(--light-color-ts-constructor); --color-ts-property: var(--light-color-ts-property); --color-ts-method: var(--light-color-ts-method); + --color-ts-reference: var(--light-color-ts-reference); --color-ts-call-signature: var(--light-color-ts-call-signature); --color-ts-index-signature: var(--light-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -113,14 +284,19 @@ --color-ts-get-signature: var(--light-color-ts-get-signature); --color-ts-set-signature: var(--light-color-ts-set-signature); --color-ts-type-alias: var(--light-color-ts-type-alias); + --color-document: var(--light-color-document); + + --color-note: var(--light-color-note); + --color-tip: var(--light-color-tip); + --color-important: var(--light-color-important); + --color-warning: var(--light-color-warning); + --color-caution: var(--light-color-caution); --external-icon: var(--light-external-icon); --color-scheme: var(--light-color-scheme); } -} -@media (prefers-color-scheme: dark) { - :root { + :root[data-theme="dark"] { --color-background: var(--dark-color-background); --color-background-secondary: var(--dark-color-background-secondary); --color-background-warning: var(--dark-color-background-warning); @@ -130,8 +306,16 @@ --color-active-menu-item: var(--dark-color-active-menu-item); --color-text: var(--dark-color-text); --color-text-aside: var(--dark-color-text-aside); + --color-icon-text: var(--dark-color-icon-text); + + --color-comment-tag-text: var(--dark-color-text); + --color-comment-tag: var(--dark-color-background); + --color-link: var(--dark-color-link); + --color-focus-outline: var(--dark-color-focus-outline); + --color-ts-keyword: var(--dark-color-ts-keyword); + --color-ts-project: var(--dark-color-ts-project); --color-ts-module: var(--dark-color-ts-module); --color-ts-namespace: var(--dark-color-ts-namespace); --color-ts-enum: var(--dark-color-ts-enum); @@ -143,6 +327,7 @@ --color-ts-constructor: var(--dark-color-ts-constructor); --color-ts-property: var(--dark-color-ts-property); --color-ts-method: var(--dark-color-ts-method); + --color-ts-reference: var(--dark-color-ts-reference); --color-ts-call-signature: var(--dark-color-ts-call-signature); --color-ts-index-signature: var(--dark-color-ts-index-signature); --color-ts-constructor-signature: var( @@ -154,1226 +339,1273 @@ --color-ts-get-signature: var(--dark-color-ts-get-signature); --color-ts-set-signature: var(--dark-color-ts-set-signature); --color-ts-type-alias: var(--dark-color-ts-type-alias); + --color-document: var(--dark-color-document); + + --color-note: var(--dark-color-note); + --color-tip: var(--dark-color-tip); + --color-important: var(--dark-color-important); + --color-warning: var(--dark-color-warning); + --color-caution: var(--dark-color-caution); --external-icon: var(--dark-external-icon); --color-scheme: var(--dark-color-scheme); } -} - -html { - color-scheme: var(--color-scheme); -} -body { - margin: 0; -} - -:root[data-theme="light"] { - --color-background: var(--light-color-background); - --color-background-secondary: var(--light-color-background-secondary); - --color-background-warning: var(--light-color-background-warning); - --color-warning-text: var(--light-color-warning-text); - --color-icon-background: var(--light-color-icon-background); - --color-accent: var(--light-color-accent); - --color-active-menu-item: var(--light-color-active-menu-item); - --color-text: var(--light-color-text); - --color-text-aside: var(--light-color-text-aside); - --color-link: var(--light-color-link); - - --color-ts-module: var(--light-color-ts-module); - --color-ts-namespace: var(--light-color-ts-namespace); - --color-ts-enum: var(--light-color-ts-enum); - --color-ts-enum-member: var(--light-color-ts-enum-member); - --color-ts-variable: var(--light-color-ts-variable); - --color-ts-function: var(--light-color-ts-function); - --color-ts-class: var(--light-color-ts-class); - --color-ts-interface: var(--light-color-ts-interface); - --color-ts-constructor: var(--light-color-ts-constructor); - --color-ts-property: var(--light-color-ts-property); - --color-ts-method: var(--light-color-ts-method); - --color-ts-call-signature: var(--light-color-ts-call-signature); - --color-ts-index-signature: var(--light-color-ts-index-signature); - --color-ts-constructor-signature: var( - --light-color-ts-constructor-signature - ); - --color-ts-parameter: var(--light-color-ts-parameter); - --color-ts-type-parameter: var(--light-color-ts-type-parameter); - --color-ts-accessor: var(--light-color-ts-accessor); - --color-ts-get-signature: var(--light-color-ts-get-signature); - --color-ts-set-signature: var(--light-color-ts-set-signature); - --color-ts-type-alias: var(--light-color-ts-type-alias); - - --external-icon: var(--light-external-icon); - --color-scheme: var(--light-color-scheme); -} - -:root[data-theme="dark"] { - --color-background: var(--dark-color-background); - --color-background-secondary: var(--dark-color-background-secondary); - --color-background-warning: var(--dark-color-background-warning); - --color-warning-text: var(--dark-color-warning-text); - --color-icon-background: var(--dark-color-icon-background); - --color-accent: var(--dark-color-accent); - --color-active-menu-item: var(--dark-color-active-menu-item); - --color-text: var(--dark-color-text); - --color-text-aside: var(--dark-color-text-aside); - --color-link: var(--dark-color-link); - - --color-ts-module: var(--dark-color-ts-module); - --color-ts-namespace: var(--dark-color-ts-namespace); - --color-ts-enum: var(--dark-color-ts-enum); - --color-ts-enum-member: var(--dark-color-ts-enum-member); - --color-ts-variable: var(--dark-color-ts-variable); - --color-ts-function: var(--dark-color-ts-function); - --color-ts-class: var(--dark-color-ts-class); - --color-ts-interface: var(--dark-color-ts-interface); - --color-ts-constructor: var(--dark-color-ts-constructor); - --color-ts-property: var(--dark-color-ts-property); - --color-ts-method: var(--dark-color-ts-method); - --color-ts-call-signature: var(--dark-color-ts-call-signature); - --color-ts-index-signature: var(--dark-color-ts-index-signature); - --color-ts-constructor-signature: var( - --dark-color-ts-constructor-signature - ); - --color-ts-parameter: var(--dark-color-ts-parameter); - --color-ts-type-parameter: var(--dark-color-ts-type-parameter); - --color-ts-accessor: var(--dark-color-ts-accessor); - --color-ts-get-signature: var(--dark-color-ts-get-signature); - --color-ts-set-signature: var(--dark-color-ts-set-signature); - --color-ts-type-alias: var(--dark-color-ts-type-alias); - - --external-icon: var(--dark-external-icon); - --color-scheme: var(--dark-color-scheme); -} + *:focus-visible, + .tsd-accordion-summary:focus-visible svg { + outline: 2px solid var(--color-focus-outline); + } -.always-visible, -.always-visible .tsd-signatures { - display: inherit !important; -} + .always-visible, + .always-visible .tsd-signatures { + display: inherit !important; + } -h1, -h2, -h3, -h4, -h5, -h6 { - line-height: 1.2; -} + h1, + h2, + h3, + h4, + h5, + h6 { + line-height: 1.2; + } -h1 > a, -h2 > a, -h3 > a, -h4 > a, -h5 > a, -h6 > a { - text-decoration: none; - color: var(--color-text); -} + h1 { + font-size: 1.875rem; + margin: 0.67rem 0; + } -h1 { - font-size: 1.875rem; - margin: 0.67rem 0; -} + h2 { + font-size: 1.5rem; + margin: 0.83rem 0; + } -h2 { - font-size: 1.5rem; - margin: 0.83rem 0; -} + h3 { + font-size: 1.25rem; + margin: 1rem 0; + } -h3 { - font-size: 1.25rem; - margin: 1rem 0; -} + h4 { + font-size: 1.05rem; + margin: 1.33rem 0; + } -h4 { - font-size: 1.05rem; - margin: 1.33rem 0; -} + h5 { + font-size: 1rem; + margin: 1.5rem 0; + } -h5 { - font-size: 1rem; - margin: 1.5rem 0; -} + h6 { + font-size: 0.875rem; + margin: 2.33rem 0; + } -h6 { - font-size: 0.875rem; - margin: 2.33rem 0; -} + dl, + menu, + ol, + ul { + margin: 1em 0; + } -.uppercase { - text-transform: uppercase; -} + dd { + margin: 0 0 0 34px; + } -dl, -menu, -ol, -ul { - margin: 1em 0; -} + .container { + max-width: 1700px; + padding: 0 2rem; + } -dd { - margin: 0 0 0 40px; -} + /* Footer */ + footer { + border-top: 1px solid var(--color-accent); + padding-top: 1rem; + padding-bottom: 1rem; + max-height: 3.5rem; + } + footer > p { + margin: 0 1em; + } -.container { - max-width: 1700px; - padding: 0 2rem; -} + .container-main { + margin: 0 auto; + /* toolbar, footer, margin */ + min-height: calc(100vh - 41px - 56px - 4rem); + } -/* Footer */ -.tsd-generator { - border-top: 1px solid var(--color-accent); - padding-top: 1rem; - padding-bottom: 1rem; - max-height: 3.5rem; -} + @keyframes fade-in { + from { + opacity: 0; + } + to { + opacity: 1; + } + } + @keyframes fade-out { + from { + opacity: 1; + visibility: visible; + } + to { + opacity: 0; + } + } + @keyframes fade-in-delayed { + 0% { + opacity: 0; + } + 33% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + @keyframes fade-out-delayed { + 0% { + opacity: 1; + visibility: visible; + } + 66% { + opacity: 0; + } + 100% { + opacity: 0; + } + } + @keyframes pop-in-from-right { + from { + transform: translate(100%, 0); + } + to { + transform: translate(0, 0); + } + } + @keyframes pop-out-to-right { + from { + transform: translate(0, 0); + visibility: visible; + } + to { + transform: translate(100%, 0); + } + } + body { + background: var(--color-background); + font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", "Noto Sans", + Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji"; + font-size: 16px; + color: var(--color-text); + } -.tsd-generator > p { - margin-top: 0; - margin-bottom: 0; - padding: 0 1rem; -} + a { + color: var(--color-link); + text-decoration: none; + } + a:hover { + text-decoration: underline; + } + a.external[target="_blank"] { + background-image: var(--external-icon); + background-position: top 3px right; + background-repeat: no-repeat; + padding-right: 13px; + } + a.tsd-anchor-link { + color: var(--color-text); + } -.container-main { - margin: 0 auto; - /* toolbar, footer, margin */ - min-height: calc(100vh - 41px - 56px - 4rem); -} + code, + pre { + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + padding: 0.2em; + margin: 0; + font-size: 0.875rem; + border-radius: 0.8em; + } -@keyframes fade-in { - from { + pre { + position: relative; + white-space: pre-wrap; + word-wrap: break-word; + padding: 10px; + border: 1px solid var(--color-accent); + margin-bottom: 8px; + } + pre code { + padding: 0; + font-size: 100%; + } + pre > button { + position: absolute; + top: 10px; + right: 10px; opacity: 0; + transition: opacity 0.1s; + box-sizing: border-box; } - to { + pre:hover > button, + pre > button.visible { opacity: 1; } -} -@keyframes fade-out { - from { - opacity: 1; - visibility: visible; + + blockquote { + margin: 1em 0; + padding-left: 1em; + border-left: 4px solid gray; } - to { - opacity: 0; + + .tsd-typography { + line-height: 1.333em; } -} -@keyframes fade-in-delayed { - 0% { - opacity: 0; + .tsd-typography ul { + list-style: square; + padding: 0 0 0 20px; + margin: 0; } - 33% { - opacity: 0; + .tsd-typography .tsd-index-panel h3, + .tsd-index-panel .tsd-typography h3, + .tsd-typography h4, + .tsd-typography h5, + .tsd-typography h6 { + font-size: 1em; } - 100% { - opacity: 1; + .tsd-typography h5, + .tsd-typography h6 { + font-weight: normal; } -} -@keyframes fade-out-delayed { - 0% { - opacity: 1; - visibility: visible; + .tsd-typography p, + .tsd-typography ul, + .tsd-typography ol { + margin: 1em 0; } - 66% { - opacity: 0; + .tsd-typography table { + border-collapse: collapse; + border: none; } - 100% { - opacity: 0; + .tsd-typography td, + .tsd-typography th { + padding: 6px 13px; + border: 1px solid var(--color-accent); } -} -@keyframes pop-in-from-right { - from { - transform: translate(100%, 0); + .tsd-typography thead, + .tsd-typography tr:nth-child(even) { + background-color: var(--color-background-secondary); } - to { - transform: translate(0, 0); + + .tsd-alert { + padding: 8px 16px; + margin-bottom: 16px; + border-left: 0.25em solid var(--alert-color); } -} -@keyframes pop-out-to-right { - from { - transform: translate(0, 0); - visibility: visible; + .tsd-alert blockquote > :last-child, + .tsd-alert > :last-child { + margin-bottom: 0; } - to { - transform: translate(100%, 0); + .tsd-alert-title { + color: var(--alert-color); + display: inline-flex; + align-items: center; + } + .tsd-alert-title span { + margin-left: 4px; } -} -body { - background: var(--color-background); - font-family: "Segoe UI", sans-serif; - font-size: 16px; - color: var(--color-text); -} -a { - color: var(--color-link); - text-decoration: none; -} -a:hover { - text-decoration: underline; -} -a.external[target="_blank"] { - background-image: var(--external-icon); - background-position: top 3px right; - background-repeat: no-repeat; - padding-right: 13px; -} + .tsd-alert-note { + --alert-color: var(--color-alert-note); + } + .tsd-alert-tip { + --alert-color: var(--color-alert-tip); + } + .tsd-alert-important { + --alert-color: var(--color-alert-important); + } + .tsd-alert-warning { + --alert-color: var(--color-alert-warning); + } + .tsd-alert-caution { + --alert-color: var(--color-alert-caution); + } -code, -pre { - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - padding: 0.2em; - margin: 0; - font-size: 0.875rem; - border-radius: 0.8em; -} + .tsd-breadcrumb { + margin: 0; + padding: 0; + color: var(--color-text-aside); + } + .tsd-breadcrumb a { + color: var(--color-text-aside); + text-decoration: none; + } + .tsd-breadcrumb a:hover { + text-decoration: underline; + } + .tsd-breadcrumb li { + display: inline; + } + .tsd-breadcrumb li:after { + content: " / "; + } -pre { - position: relative; - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; - padding: 10px; - border: 1px solid var(--color-accent); -} -pre code { - padding: 0; - font-size: 100%; -} -pre > button { - position: absolute; - top: 10px; - right: 10px; - opacity: 0; - transition: opacity 0.1s; - box-sizing: border-box; -} -pre:hover > button, -pre > button.visible { - opacity: 1; -} + .tsd-comment-tags { + display: flex; + flex-direction: column; + } + dl.tsd-comment-tag-group { + display: flex; + align-items: center; + overflow: hidden; + margin: 0.5em 0; + } + dl.tsd-comment-tag-group dt { + display: flex; + margin-right: 0.5em; + font-size: 0.875em; + font-weight: normal; + } + dl.tsd-comment-tag-group dd { + margin: 0; + } + code.tsd-tag { + padding: 0.25em 0.4em; + border: 0.1em solid var(--color-accent); + margin-right: 0.25em; + font-size: 70%; + } + h1 code.tsd-tag:first-of-type { + margin-left: 0.25em; + } -blockquote { - margin: 1em 0; - padding-left: 1em; - border-left: 4px solid gray; -} + dl.tsd-comment-tag-group dd:before, + dl.tsd-comment-tag-group dd:after { + content: " "; + } + dl.tsd-comment-tag-group dd pre, + dl.tsd-comment-tag-group dd:after { + clear: both; + } + dl.tsd-comment-tag-group p { + margin: 0; + } -.tsd-typography { - line-height: 1.333em; -} -.tsd-typography ul { - list-style: square; - padding: 0 0 0 20px; - margin: 0; -} -.tsd-typography .tsd-index-panel h3, -.tsd-index-panel .tsd-typography h3, -.tsd-typography h4, -.tsd-typography h5, -.tsd-typography h6 { - font-size: 1em; -} -.tsd-typography h5, -.tsd-typography h6 { - font-weight: normal; -} -.tsd-typography p, -.tsd-typography ul, -.tsd-typography ol { - margin: 1em 0; -} -.tsd-typography table { - border-collapse: collapse; - border: none; -} -.tsd-typography td, -.tsd-typography th { - padding: 6px 13px; - border: 1px solid var(--color-accent); -} -.tsd-typography thead, -.tsd-typography tr:nth-child(even) { - background-color: var(--color-background-secondary); -} + .tsd-panel.tsd-comment .lead { + font-size: 1.1em; + line-height: 1.333em; + margin-bottom: 2em; + } + .tsd-panel.tsd-comment .lead:last-child { + margin-bottom: 0; + } -.tsd-breadcrumb { - margin: 0; - padding: 0; - color: var(--color-text-aside); -} -.tsd-breadcrumb a { - color: var(--color-text-aside); - text-decoration: none; -} -.tsd-breadcrumb a:hover { - text-decoration: underline; -} -.tsd-breadcrumb li { - display: inline; -} -.tsd-breadcrumb li:after { - content: " / "; -} + .tsd-filter-visibility h4 { + font-size: 1rem; + padding-top: 0.75rem; + padding-bottom: 0.5rem; + margin: 0; + } + .tsd-filter-item:not(:last-child) { + margin-bottom: 0.5rem; + } + .tsd-filter-input { + display: flex; + width: -moz-fit-content; + width: fit-content; + align-items: center; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + cursor: pointer; + } + .tsd-filter-input input[type="checkbox"] { + cursor: pointer; + position: absolute; + width: 1.5em; + height: 1.5em; + opacity: 0; + } + .tsd-filter-input input[type="checkbox"]:disabled { + pointer-events: none; + } + .tsd-filter-input svg { + cursor: pointer; + width: 1.5em; + height: 1.5em; + margin-right: 0.5em; + border-radius: 0.33em; + /* Leaving this at full opacity breaks event listeners on Firefox. + Don't remove unless you know what you're doing. */ + opacity: 0.99; + } + .tsd-filter-input input[type="checkbox"]:focus-visible + svg { + outline: 2px solid var(--color-focus-outline); + } + .tsd-checkbox-background { + fill: var(--color-accent); + } + input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { + stroke: var(--color-text); + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { + fill: var(--color-background); + stroke: var(--color-accent); + stroke-width: 0.25rem; + } + .tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { + stroke: var(--color-accent); + } -.tsd-comment-tags { - display: flex; - flex-direction: column; -} -dl.tsd-comment-tag-group { - display: flex; - align-items: center; - overflow: hidden; - margin: 0.5em 0; -} -dl.tsd-comment-tag-group dt { - display: flex; - margin-right: 0.5em; - font-size: 0.875em; - font-weight: normal; -} -dl.tsd-comment-tag-group dd { - margin: 0; -} -code.tsd-tag { - padding: 0.25em 0.4em; - border: 0.1em solid var(--color-accent); - margin-right: 0.25em; - font-size: 70%; -} -h1 code.tsd-tag:first-of-type { - margin-left: 0.25em; -} + .settings-label { + font-weight: bold; + text-transform: uppercase; + display: inline-block; + } -dl.tsd-comment-tag-group dd:before, -dl.tsd-comment-tag-group dd:after { - content: " "; -} -dl.tsd-comment-tag-group dd pre, -dl.tsd-comment-tag-group dd:after { - clear: both; -} -dl.tsd-comment-tag-group p { - margin: 0; -} + .tsd-filter-visibility .settings-label { + margin: 0.75rem 0 0.5rem 0; + } -.tsd-panel.tsd-comment .lead { - font-size: 1.1em; - line-height: 1.333em; - margin-bottom: 2em; -} -.tsd-panel.tsd-comment .lead:last-child { - margin-bottom: 0; -} + .tsd-theme-toggle .settings-label { + margin: 0.75rem 0.75rem 0 0; + } -.tsd-filter-visibility h4 { - font-size: 1rem; - padding-top: 0.75rem; - padding-bottom: 0.5rem; - margin: 0; -} -.tsd-filter-item:not(:last-child) { - margin-bottom: 0.5rem; -} -.tsd-filter-input { - display: flex; - width: fit-content; - width: -moz-fit-content; - align-items: center; - user-select: none; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - cursor: pointer; -} -.tsd-filter-input input[type="checkbox"] { - cursor: pointer; - position: absolute; - width: 1.5em; - height: 1.5em; - opacity: 0; -} -.tsd-filter-input input[type="checkbox"]:disabled { - pointer-events: none; -} -.tsd-filter-input svg { - cursor: pointer; - width: 1.5em; - height: 1.5em; - margin-right: 0.5em; - border-radius: 0.33em; - /* Leaving this at full opacity breaks event listeners on Firefox. - Don't remove unless you know what you're doing. */ - opacity: 0.99; -} -.tsd-filter-input input[type="checkbox"]:focus + svg { - transform: scale(0.95); -} -.tsd-filter-input input[type="checkbox"]:focus:not(:focus-visible) + svg { - transform: scale(1); -} -.tsd-checkbox-background { - fill: var(--color-accent); -} -input[type="checkbox"]:checked ~ svg .tsd-checkbox-checkmark { - stroke: var(--color-text); -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-background { - fill: var(--color-background); - stroke: var(--color-accent); - stroke-width: 0.25rem; -} -.tsd-filter-input input:disabled ~ svg > .tsd-checkbox-checkmark { - stroke: var(--color-accent); -} + .tsd-hierarchy h4 label:hover span { + text-decoration: underline; + } -.tsd-theme-toggle { - padding-top: 0.75rem; -} -.tsd-theme-toggle > h4 { - display: inline; - vertical-align: middle; - margin-right: 0.75rem; -} + .tsd-hierarchy { + list-style: square; + margin: 0; + } + .tsd-hierarchy-target { + font-weight: bold; + } + .tsd-hierarchy-toggle { + color: var(--color-link); + cursor: pointer; + } -.tsd-hierarchy { - list-style: square; - margin: 0; -} -.tsd-hierarchy .target { - font-weight: bold; -} + .tsd-full-hierarchy:not(:last-child) { + margin-bottom: 1em; + padding-bottom: 1em; + border-bottom: 1px solid var(--color-accent); + } + .tsd-full-hierarchy, + .tsd-full-hierarchy ul { + list-style: none; + margin: 0; + padding: 0; + } + .tsd-full-hierarchy ul { + padding-left: 1.5rem; + } + .tsd-full-hierarchy a { + padding: 0.25rem 0 !important; + font-size: 1rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-full-hierarchy svg[data-dropdown] { + cursor: pointer; + } + .tsd-full-hierarchy svg[data-dropdown="false"] { + transform: rotate(-90deg); + } + .tsd-full-hierarchy svg[data-dropdown="false"] ~ ul { + display: none; + } -.tsd-panel-group.tsd-index-group { - margin-bottom: 0; -} -.tsd-index-panel .tsd-index-list { - list-style: none; - line-height: 1.333em; - margin: 0; - padding: 0.25rem 0 0 0; - overflow: hidden; - display: grid; - grid-template-columns: repeat(3, 1fr); - column-gap: 1rem; - grid-template-rows: auto; -} -@media (max-width: 1024px) { - .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(2, 1fr); + .tsd-panel-group.tsd-index-group { + margin-bottom: 0; } -} -@media (max-width: 768px) { .tsd-index-panel .tsd-index-list { - grid-template-columns: repeat(1, 1fr); + list-style: none; + line-height: 1.333em; + margin: 0; + padding: 0.25rem 0 0 0; + overflow: hidden; + display: grid; + grid-template-columns: repeat(3, 1fr); + column-gap: 1rem; + grid-template-rows: auto; + } + @media (max-width: 1024px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(2, 1fr); + } + } + @media (max-width: 768px) { + .tsd-index-panel .tsd-index-list { + grid-template-columns: repeat(1, 1fr); + } + } + .tsd-index-panel .tsd-index-list li { + -webkit-page-break-inside: avoid; + -moz-page-break-inside: avoid; + -ms-page-break-inside: avoid; + -o-page-break-inside: avoid; + page-break-inside: avoid; } -} -.tsd-index-panel .tsd-index-list li { - -webkit-page-break-inside: avoid; - -moz-page-break-inside: avoid; - -ms-page-break-inside: avoid; - -o-page-break-inside: avoid; - page-break-inside: avoid; -} -.tsd-flag { - display: inline-block; - padding: 0.25em 0.4em; - border-radius: 4px; - color: var(--color-comment-tag-text); - background-color: var(--color-comment-tag); - text-indent: 0; - font-size: 75%; - line-height: 1; - font-weight: normal; -} + .tsd-flag { + display: inline-block; + padding: 0.25em 0.4em; + border-radius: 4px; + color: var(--color-comment-tag-text); + background-color: var(--color-comment-tag); + text-indent: 0; + font-size: 75%; + line-height: 1; + font-weight: normal; + } -.tsd-anchor { - position: relative; - top: -100px; -} + .tsd-anchor { + position: relative; + top: -100px; + } -.tsd-member { - position: relative; -} -.tsd-member .tsd-anchor + h3 { - display: flex; - align-items: center; - margin-top: 0; - margin-bottom: 0; - border-bottom: none; -} + .tsd-member { + position: relative; + } + .tsd-member .tsd-anchor + h3 { + display: flex; + align-items: center; + margin-top: 0; + margin-bottom: 0; + border-bottom: none; + } -.tsd-navigation.settings { - margin: 1rem 0; -} -.tsd-navigation > a, -.tsd-navigation .tsd-accordion-summary { - width: calc(100% - 0.5rem); -} -.tsd-navigation a, -.tsd-navigation summary > span, -.tsd-page-navigation a { - display: inline-flex; - align-items: center; - padding: 0.25rem; - color: var(--color-text); - text-decoration: none; - box-sizing: border-box; -} -.tsd-navigation a.current, -.tsd-page-navigation a.current { - background: var(--color-active-menu-item); -} -.tsd-navigation a:hover, -.tsd-page-navigation a:hover { - text-decoration: underline; -} -.tsd-navigation ul, -.tsd-page-navigation ul { - margin-top: 0; - margin-bottom: 0; - padding: 0; - list-style: none; -} -.tsd-navigation li, -.tsd-page-navigation li { - padding: 0; - max-width: 100%; -} -.tsd-nested-navigation { - margin-left: 3rem; -} -.tsd-nested-navigation > li > details { - margin-left: -1.5rem; -} -.tsd-small-nested-navigation { - margin-left: 1.5rem; -} -.tsd-small-nested-navigation > li > details { - margin-left: -1.5rem; -} + .tsd-navigation.settings { + margin: 1rem 0; + } + .tsd-navigation > a, + .tsd-navigation .tsd-accordion-summary { + width: calc(100% - 0.25rem); + display: flex; + align-items: center; + } + .tsd-navigation a, + .tsd-navigation summary > span, + .tsd-page-navigation a { + display: flex; + width: calc(100% - 0.25rem); + align-items: center; + padding: 0.25rem; + color: var(--color-text); + text-decoration: none; + box-sizing: border-box; + } + .tsd-navigation a.current, + .tsd-page-navigation a.current { + background: var(--color-active-menu-item); + } + .tsd-navigation a:hover, + .tsd-page-navigation a:hover { + text-decoration: underline; + } + .tsd-navigation ul, + .tsd-page-navigation ul { + margin-top: 0; + margin-bottom: 0; + padding: 0; + list-style: none; + } + .tsd-navigation li, + .tsd-page-navigation li { + padding: 0; + max-width: 100%; + } + .tsd-navigation .tsd-nav-link { + display: none; + } + .tsd-nested-navigation { + margin-left: 3rem; + } + .tsd-nested-navigation > li > details { + margin-left: -1.5rem; + } + .tsd-small-nested-navigation { + margin-left: 1.5rem; + } + .tsd-small-nested-navigation > li > details { + margin-left: -1.5rem; + } -.tsd-nested-navigation > li > a, -.tsd-nested-navigation > li > span { - width: calc(100% - 1.75rem - 0.5rem); -} + .tsd-page-navigation-section { + margin-left: 10px; + } + .tsd-page-navigation-section > summary { + padding: 0.25rem; + } + .tsd-page-navigation-section > div { + margin-left: 20px; + } + .tsd-page-navigation ul { + padding-left: 1.75rem; + } -.tsd-page-navigation ul { - padding-left: 1.75rem; -} - -#tsd-sidebar-links a { - margin-top: 0; - margin-bottom: 0.5rem; - line-height: 1.25rem; -} -#tsd-sidebar-links a:last-of-type { - margin-bottom: 0; -} - -a.tsd-index-link { - padding: 0.25rem 0 !important; - font-size: 1rem; - line-height: 1.25rem; - display: inline-flex; - align-items: center; - color: var(--color-text); -} -.tsd-accordion-summary { - list-style-type: none; /* hide marker on non-safari */ - outline: none; /* broken on safari, so just hide it */ -} -.tsd-accordion-summary::-webkit-details-marker { - display: none; /* hide marker on safari */ -} -.tsd-accordion-summary, -.tsd-accordion-summary a { - user-select: none; - -moz-user-select: none; - -webkit-user-select: none; - -ms-user-select: none; - - cursor: pointer; -} -.tsd-accordion-summary a { - width: calc(100% - 1.5rem); -} -.tsd-accordion-summary > * { - margin-top: 0; - margin-bottom: 0; - padding-top: 0; - padding-bottom: 0; -} -.tsd-index-accordion .tsd-accordion-summary > svg { - margin-left: 0.25rem; -} -.tsd-index-content > :not(:first-child) { - margin-top: 0.75rem; -} -.tsd-index-heading { - margin-top: 1.5rem; - margin-bottom: 0.75rem; -} - -.tsd-kind-icon { - margin-right: 0.5rem; - width: 1.25rem; - height: 1.25rem; - min-width: 1.25rem; - min-height: 1.25rem; -} -.tsd-kind-icon path { - transform-origin: center; - transform: scale(1.1); -} -.tsd-signature > .tsd-kind-icon { - margin-right: 0.8rem; -} - -.tsd-panel { - margin-bottom: 2.5rem; -} -.tsd-panel.tsd-member { - margin-bottom: 4rem; -} -.tsd-panel:empty { - display: none; -} -.tsd-panel > h1, -.tsd-panel > h2, -.tsd-panel > h3 { - margin: 1.5rem -1.5rem 0.75rem -1.5rem; - padding: 0 1.5rem 0.75rem 1.5rem; -} -.tsd-panel > h1.tsd-before-signature, -.tsd-panel > h2.tsd-before-signature, -.tsd-panel > h3.tsd-before-signature { - margin-bottom: 0; - border-bottom: none; -} - -.tsd-panel-group { - margin: 4rem 0; -} -.tsd-panel-group.tsd-index-group { - margin: 2rem 0; -} -.tsd-panel-group.tsd-index-group details { - margin: 2rem 0; -} - -#tsd-search { - transition: background-color 0.2s; -} -#tsd-search .title { - position: relative; - z-index: 2; -} -#tsd-search .field { - position: absolute; - left: 0; - top: 0; - right: 2.5rem; - height: 100%; -} -#tsd-search .field input { - box-sizing: border-box; - position: relative; - top: -50px; - z-index: 1; - width: 100%; - padding: 0 10px; - opacity: 0; - outline: 0; - border: 0; - background: transparent; - color: var(--color-text); -} -#tsd-search .field label { - position: absolute; - overflow: hidden; - right: -40px; -} -#tsd-search .field input, -#tsd-search .title, -#tsd-toolbar-links a { - transition: opacity 0.2s; -} -#tsd-search .results { - position: absolute; - visibility: hidden; - top: 40px; - width: 100%; - margin: 0; - padding: 0; - list-style: none; - box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); -} -#tsd-search .results li { - padding: 0 10px; - background-color: var(--color-background); -} -#tsd-search .results li:nth-child(even) { - background-color: var(--color-background-secondary); -} -#tsd-search .results li.state { - display: none; -} -#tsd-search .results li.current:not(.no-results), -#tsd-search .results li:hover:not(.no-results) { - background-color: var(--color-accent); -} -#tsd-search .results a { - display: block; -} -#tsd-search .results a:before { - top: 10px; -} -#tsd-search .results span.parent { - color: var(--color-text-aside); - font-weight: normal; -} -#tsd-search.has-focus { - background-color: var(--color-accent); -} -#tsd-search.has-focus .field input { - top: 0; - opacity: 1; -} -#tsd-search.has-focus .title, -#tsd-search.has-focus #tsd-toolbar-links a { - z-index: 0; - opacity: 0; -} -#tsd-search.has-focus .results { - visibility: visible; -} -#tsd-search.loading .results li.state.loading { - display: block; -} -#tsd-search.failure .results li.state.failure { - display: block; -} - -#tsd-toolbar-links { - position: absolute; - top: 0; - right: 2rem; - height: 100%; - display: flex; - align-items: center; - justify-content: flex-end; -} -#tsd-toolbar-links a { - margin-left: 1.5rem; -} -#tsd-toolbar-links a:hover { - text-decoration: underline; -} - -.tsd-signature { - margin: 0 0 1rem 0; - padding: 1rem 0.5rem; - border: 1px solid var(--color-accent); - font-family: Menlo, Monaco, Consolas, "Courier New", monospace; - font-size: 14px; - overflow-x: auto; -} - -.tsd-signature-symbol { - color: var(--color-text-aside); - font-weight: normal; -} - -.tsd-signature-type { - font-style: italic; - font-weight: normal; -} - -.tsd-signatures { - padding: 0; - margin: 0 0 1em 0; - list-style-type: none; -} -.tsd-signatures .tsd-signature { - margin: 0; - border-color: var(--color-accent); - border-width: 1px 0; - transition: background-color 0.1s; -} -.tsd-description .tsd-signatures .tsd-signature { - border-width: 1px; -} - -ul.tsd-parameter-list, -ul.tsd-type-parameter-list { - list-style: square; - margin: 0; - padding-left: 20px; -} -ul.tsd-parameter-list > li.tsd-parameter-signature, -ul.tsd-type-parameter-list > li.tsd-parameter-signature { - list-style: none; - margin-left: -20px; -} -ul.tsd-parameter-list h5, -ul.tsd-type-parameter-list h5 { - font-size: 16px; - margin: 1em 0 0.5em 0; -} -.tsd-sources { - margin-top: 1rem; - font-size: 0.875em; -} -.tsd-sources a { - color: var(--color-text-aside); - text-decoration: underline; -} -.tsd-sources ul { - list-style: none; - padding: 0; -} - -.tsd-page-toolbar { - position: sticky; - z-index: 1; - top: 0; - left: 0; - width: 100%; - color: var(--color-text); - background: var(--color-background-secondary); - border-bottom: 1px var(--color-accent) solid; - transition: transform 0.3s ease-in-out; -} -.tsd-page-toolbar a { - color: var(--color-text); - text-decoration: none; -} -.tsd-page-toolbar a.title { - font-weight: bold; -} -.tsd-page-toolbar a.title:hover { - text-decoration: underline; -} -.tsd-page-toolbar .tsd-toolbar-contents { - display: flex; - justify-content: space-between; - height: 2.5rem; - margin: 0 auto; -} -.tsd-page-toolbar .table-cell { - position: relative; - white-space: nowrap; - line-height: 40px; -} -.tsd-page-toolbar .table-cell:first-child { - width: 100%; -} -.tsd-page-toolbar .tsd-toolbar-icon { - box-sizing: border-box; - line-height: 0; - padding: 12px 0; -} + #tsd-sidebar-links a { + margin-top: 0; + margin-bottom: 0.5rem; + line-height: 1.25rem; + } + #tsd-sidebar-links a:last-of-type { + margin-bottom: 0; + } -.tsd-widget { - display: inline-block; - overflow: hidden; - opacity: 0.8; - height: 40px; - transition: - opacity 0.1s, - background-color 0.2s; - vertical-align: bottom; - cursor: pointer; -} -.tsd-widget:hover { - opacity: 0.9; -} -.tsd-widget.active { - opacity: 1; - background-color: var(--color-accent); -} -.tsd-widget.no-caption { - width: 40px; -} -.tsd-widget.no-caption:before { - margin: 0; -} + a.tsd-index-link { + padding: 0.25rem 0 !important; + font-size: 1rem; + line-height: 1.25rem; + display: inline-flex; + align-items: center; + color: var(--color-text); + } + .tsd-accordion-summary { + list-style-type: none; /* hide marker on non-safari */ + outline: none; /* broken on safari, so just hide it */ + } + .tsd-accordion-summary::-webkit-details-marker { + display: none; /* hide marker on safari */ + } + .tsd-accordion-summary, + .tsd-accordion-summary a { + -moz-user-select: none; + -webkit-user-select: none; + -ms-user-select: none; + user-select: none; + + cursor: pointer; + } + .tsd-accordion-summary a { + width: calc(100% - 1.5rem); + } + .tsd-accordion-summary > * { + margin-top: 0; + margin-bottom: 0; + padding-top: 0; + padding-bottom: 0; + } + .tsd-accordion .tsd-accordion-summary > svg { + margin-left: 0.25rem; + vertical-align: text-top; + } + /* + * We need to be careful to target the arrow indicating whether the accordion + * is open, but not any other SVGs included in the details element. + */ + .tsd-accordion:not([open]) > .tsd-accordion-summary > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h1 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h2 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h3 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h4 > svg:first-child, + .tsd-accordion:not([open]) > .tsd-accordion-summary > h5 > svg:first-child { + transform: rotate(-90deg); + } + .tsd-index-content > :not(:first-child) { + margin-top: 0.75rem; + } + .tsd-index-heading { + margin-top: 1.5rem; + margin-bottom: 0.75rem; + } -.tsd-widget.options, -.tsd-widget.menu { - display: none; -} -input[type="checkbox"] + .tsd-widget:before { - background-position: -120px 0; -} -input[type="checkbox"]:checked + .tsd-widget:before { - background-position: -160px 0; -} + .tsd-no-select { + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + } + .tsd-kind-icon { + margin-right: 0.5rem; + width: 1.25rem; + height: 1.25rem; + min-width: 1.25rem; + min-height: 1.25rem; + } + .tsd-signature > .tsd-kind-icon { + margin-right: 0.8rem; + } -img { - max-width: 100%; -} + .tsd-panel { + margin-bottom: 2.5rem; + } + .tsd-panel.tsd-member { + margin-bottom: 4rem; + } + .tsd-panel:empty { + display: none; + } + .tsd-panel > h1, + .tsd-panel > h2, + .tsd-panel > h3 { + margin: 1.5rem -1.5rem 0.75rem -1.5rem; + padding: 0 1.5rem 0.75rem 1.5rem; + } + .tsd-panel > h1.tsd-before-signature, + .tsd-panel > h2.tsd-before-signature, + .tsd-panel > h3.tsd-before-signature { + margin-bottom: 0; + border-bottom: none; + } -.tsd-anchor-icon { - display: inline-flex; - align-items: center; - margin-left: 0.5rem; - vertical-align: middle; - color: var(--color-text); -} + .tsd-panel-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group { + margin: 2rem 0; + } + .tsd-panel-group.tsd-index-group details { + margin: 2rem 0; + } + .tsd-panel-group > .tsd-accordion-summary { + margin-bottom: 1rem; + } -.tsd-anchor-icon svg { - width: 1em; - height: 1em; - visibility: hidden; -} + #tsd-search { + transition: background-color 0.2s; + } + #tsd-search .title { + position: relative; + z-index: 2; + } + #tsd-search .field { + position: absolute; + left: 0; + top: 0; + right: 2.5rem; + height: 100%; + } + #tsd-search .field input { + box-sizing: border-box; + position: relative; + top: -50px; + z-index: 1; + width: 100%; + padding: 0 10px; + opacity: 0; + outline: 0; + border: 0; + background: transparent; + color: var(--color-text); + } + #tsd-search .field label { + position: absolute; + overflow: hidden; + right: -40px; + } + #tsd-search .field input, + #tsd-search .title, + #tsd-toolbar-links a { + transition: opacity 0.2s; + } + #tsd-search .results { + position: absolute; + visibility: hidden; + top: 40px; + width: 100%; + margin: 0; + padding: 0; + list-style: none; + box-shadow: 0 0 4px rgba(0, 0, 0, 0.25); + } + #tsd-search .results li { + background-color: var(--color-background); + line-height: initial; + padding: 4px; + } + #tsd-search .results li:nth-child(even) { + background-color: var(--color-background-secondary); + } + #tsd-search .results li.state { + display: none; + } + #tsd-search .results li.current:not(.no-results), + #tsd-search .results li:hover:not(.no-results) { + background-color: var(--color-accent); + } + #tsd-search .results a { + display: flex; + align-items: center; + padding: 0.25rem; + box-sizing: border-box; + } + #tsd-search .results a:before { + top: 10px; + } + #tsd-search .results span.parent { + color: var(--color-text-aside); + font-weight: normal; + } + #tsd-search.has-focus { + background-color: var(--color-accent); + } + #tsd-search.has-focus .field input { + top: 0; + opacity: 1; + } + #tsd-search.has-focus .title, + #tsd-search.has-focus #tsd-toolbar-links a { + z-index: 0; + opacity: 0; + } + #tsd-search.has-focus .results { + visibility: visible; + } + #tsd-search.loading .results li.state.loading { + display: block; + } + #tsd-search.failure .results li.state.failure { + display: block; + } -.tsd-anchor-link:hover > .tsd-anchor-icon svg { - visibility: visible; -} + #tsd-toolbar-links { + position: absolute; + top: 0; + right: 2rem; + height: 100%; + display: flex; + align-items: center; + justify-content: flex-end; + } + #tsd-toolbar-links a { + margin-left: 1.5rem; + } + #tsd-toolbar-links a:hover { + text-decoration: underline; + } -.deprecated { - text-decoration: line-through; -} + .tsd-signature { + margin: 0 0 1rem 0; + padding: 1rem 0.5rem; + border: 1px solid var(--color-accent); + font-family: Menlo, Monaco, Consolas, "Courier New", monospace; + font-size: 14px; + overflow-x: auto; + } -.warning { - padding: 1rem; - color: var(--color-warning-text); - background: var(--color-background-warning); -} + .tsd-signature-keyword { + color: var(--color-ts-keyword); + font-weight: normal; + } -.tsd-kind-project { - color: var(--color-ts-project); -} -.tsd-kind-module { - color: var(--color-ts-module); -} -.tsd-kind-namespace { - color: var(--color-ts-namespace); -} -.tsd-kind-enum { - color: var(--color-ts-enum); -} -.tsd-kind-enum-member { - color: var(--color-ts-enum-member); -} -.tsd-kind-variable { - color: var(--color-ts-variable); -} -.tsd-kind-function { - color: var(--color-ts-function); -} -.tsd-kind-class { - color: var(--color-ts-class); -} -.tsd-kind-interface { - color: var(--color-ts-interface); -} -.tsd-kind-constructor { - color: var(--color-ts-constructor); -} -.tsd-kind-property { - color: var(--color-ts-property); -} -.tsd-kind-method { - color: var(--color-ts-method); -} -.tsd-kind-call-signature { - color: var(--color-ts-call-signature); -} -.tsd-kind-index-signature { - color: var(--color-ts-index-signature); -} -.tsd-kind-constructor-signature { - color: var(--color-ts-constructor-signature); -} -.tsd-kind-parameter { - color: var(--color-ts-parameter); -} -.tsd-kind-type-literal { - color: var(--color-ts-type-literal); -} -.tsd-kind-type-parameter { - color: var(--color-ts-type-parameter); -} -.tsd-kind-accessor { - color: var(--color-ts-accessor); -} -.tsd-kind-get-signature { - color: var(--color-ts-get-signature); -} -.tsd-kind-set-signature { - color: var(--color-ts-set-signature); -} -.tsd-kind-type-alias { - color: var(--color-ts-type-alias); -} + .tsd-signature-symbol { + color: var(--color-text-aside); + font-weight: normal; + } -/* if we have a kind icon, don't color the text by kind */ -.tsd-kind-icon ~ span { - color: var(--color-text); -} + .tsd-signature-type { + font-style: italic; + font-weight: normal; + } -* { - scrollbar-width: thin; - scrollbar-color: var(--color-accent) var(--color-icon-background); -} + .tsd-signatures { + padding: 0; + margin: 0 0 1em 0; + list-style-type: none; + } + .tsd-signatures .tsd-signature { + margin: 0; + border-color: var(--color-accent); + border-width: 1px 0; + transition: background-color 0.1s; + } + .tsd-signatures .tsd-index-signature:not(:last-child) { + margin-bottom: 1em; + } + .tsd-signatures .tsd-index-signature .tsd-signature { + border-width: 1px; + } + .tsd-description .tsd-signatures .tsd-signature { + border-width: 1px; + } -*::-webkit-scrollbar { - width: 0.75rem; -} + ul.tsd-parameter-list, + ul.tsd-type-parameter-list { + list-style: square; + margin: 0; + padding-left: 20px; + } + ul.tsd-parameter-list > li.tsd-parameter-signature, + ul.tsd-type-parameter-list > li.tsd-parameter-signature { + list-style: none; + margin-left: -20px; + } + ul.tsd-parameter-list h5, + ul.tsd-type-parameter-list h5 { + font-size: 16px; + margin: 1em 0 0.5em 0; + } + .tsd-sources { + margin-top: 1rem; + font-size: 0.875em; + } + .tsd-sources a { + color: var(--color-text-aside); + text-decoration: underline; + } + .tsd-sources ul { + list-style: none; + padding: 0; + } -*::-webkit-scrollbar-track { - background: var(--color-icon-background); -} + .tsd-page-toolbar { + position: sticky; + z-index: 1; + top: 0; + left: 0; + width: 100%; + color: var(--color-text); + background: var(--color-background-secondary); + border-bottom: 1px var(--color-accent) solid; + transition: transform 0.3s ease-in-out; + } + .tsd-page-toolbar a { + color: var(--color-text); + text-decoration: none; + } + .tsd-page-toolbar a.title { + font-weight: bold; + } + .tsd-page-toolbar a.title:hover { + text-decoration: underline; + } + .tsd-page-toolbar .tsd-toolbar-contents { + display: flex; + justify-content: space-between; + height: 2.5rem; + margin: 0 auto; + } + .tsd-page-toolbar .table-cell { + position: relative; + white-space: nowrap; + line-height: 40px; + } + .tsd-page-toolbar .table-cell:first-child { + width: 100%; + } + .tsd-page-toolbar .tsd-toolbar-icon { + box-sizing: border-box; + line-height: 0; + padding: 12px 0; + } -*::-webkit-scrollbar-thumb { - background-color: var(--color-accent); - border-radius: 999rem; - border: 0.25rem solid var(--color-icon-background); -} + .tsd-widget { + display: inline-block; + overflow: hidden; + opacity: 0.8; + height: 40px; + transition: + opacity 0.1s, + background-color 0.2s; + vertical-align: bottom; + cursor: pointer; + } + .tsd-widget:hover { + opacity: 0.9; + } + .tsd-widget.active { + opacity: 1; + background-color: var(--color-accent); + } + .tsd-widget.no-caption { + width: 40px; + } + .tsd-widget.no-caption:before { + margin: 0; + } -/* mobile */ -@media (max-width: 769px) { .tsd-widget.options, .tsd-widget.menu { - display: inline-block; + display: none; } - - .container-main { - display: flex; + input[type="checkbox"] + .tsd-widget:before { + background-position: -120px 0; } - html .col-content { - float: none; + input[type="checkbox"]:checked + .tsd-widget:before { + background-position: -160px 0; + } + + img { max-width: 100%; - width: 100%; } - html .col-sidebar { - position: fixed !important; - overflow-y: auto; - -webkit-overflow-scrolling: touch; - z-index: 1024; - top: 0 !important; - bottom: 0 !important; - left: auto !important; - right: 0 !important; - padding: 1.5rem 1.5rem 0 0; - width: 75vw; - visibility: hidden; - background-color: var(--color-background); - transform: translate(100%, 0); + + .tsd-member-summary-name { + display: inline-flex; + align-items: center; + padding: 0.25rem; + text-decoration: none; } - html .col-sidebar > *:last-child { - padding-bottom: 20px; + + .tsd-anchor-icon { + display: inline-flex; + align-items: center; + margin-left: 0.5rem; + color: var(--color-text); } - html .overlay { - content: ""; - display: block; - position: fixed; - z-index: 1023; - top: 0; - left: 0; - right: 0; - bottom: 0; - background-color: rgba(0, 0, 0, 0.75); + + .tsd-anchor-icon svg { + width: 1em; + height: 1em; visibility: hidden; } - .to-has-menu .overlay { - animation: fade-in 0.4s; + .tsd-member-summary-name:hover > .tsd-anchor-icon svg, + .tsd-anchor-link:hover > .tsd-anchor-icon svg { + visibility: visible; } - .to-has-menu .col-sidebar { - animation: pop-in-from-right 0.4s; + .deprecated { + text-decoration: line-through !important; } - .from-has-menu .overlay { - animation: fade-out 0.4s; + .warning { + padding: 1rem; + color: var(--color-warning-text); + background: var(--color-background-warning); } - .from-has-menu .col-sidebar { - animation: pop-out-to-right 0.4s; + .tsd-kind-project { + color: var(--color-ts-project); } - - .has-menu body { - overflow: hidden; + .tsd-kind-module { + color: var(--color-ts-module); } - .has-menu .overlay { - visibility: visible; + .tsd-kind-namespace { + color: var(--color-ts-namespace); } - .has-menu .col-sidebar { - visibility: visible; - transform: translate(0, 0); - display: flex; - flex-direction: column; - gap: 1.5rem; - max-height: 100vh; - padding: 1rem 2rem; + .tsd-kind-enum { + color: var(--color-ts-enum); } - .has-menu .tsd-navigation { - max-height: 100%; + .tsd-kind-enum-member { + color: var(--color-ts-enum-member); } -} - -/* one sidebar */ -@media (min-width: 770px) { - .container-main { - display: grid; - grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); - grid-template-areas: "sidebar content"; - margin: 2rem auto; + .tsd-kind-variable { + color: var(--color-ts-variable); } - - .col-sidebar { - grid-area: sidebar; + .tsd-kind-function { + color: var(--color-ts-function); } - .col-content { - grid-area: content; - padding: 0 1rem; + .tsd-kind-class { + color: var(--color-ts-class); } -} -@media (min-width: 770px) and (max-width: 1399px) { - .col-sidebar { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; - padding-top: 1rem; + .tsd-kind-interface { + color: var(--color-ts-interface); } - .site-menu { - margin-top: 1rem; + .tsd-kind-constructor { + color: var(--color-ts-constructor); + } + .tsd-kind-property { + color: var(--color-ts-property); + } + .tsd-kind-method { + color: var(--color-ts-method); + } + .tsd-kind-reference { + color: var(--color-ts-reference); + } + .tsd-kind-call-signature { + color: var(--color-ts-call-signature); + } + .tsd-kind-index-signature { + color: var(--color-ts-index-signature); + } + .tsd-kind-constructor-signature { + color: var(--color-ts-constructor-signature); + } + .tsd-kind-parameter { + color: var(--color-ts-parameter); + } + .tsd-kind-type-parameter { + color: var(--color-ts-type-parameter); + } + .tsd-kind-accessor { + color: var(--color-ts-accessor); + } + .tsd-kind-get-signature { + color: var(--color-ts-get-signature); + } + .tsd-kind-set-signature { + color: var(--color-ts-set-signature); + } + .tsd-kind-type-alias { + color: var(--color-ts-type-alias); } -} -/* two sidebars */ -@media (min-width: 1200px) { - .container-main { - grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax(0, 20rem); - grid-template-areas: "sidebar content toc"; + /* if we have a kind icon, don't color the text by kind */ + .tsd-kind-icon ~ span { + color: var(--color-text); } - .col-sidebar { - display: contents; + * { + scrollbar-width: thin; + scrollbar-color: var(--color-accent) var(--color-icon-background); } - .page-menu { - grid-area: toc; - padding-left: 1rem; + *::-webkit-scrollbar { + width: 0.75rem; } - .site-menu { - grid-area: sidebar; + + *::-webkit-scrollbar-track { + background: var(--color-icon-background); } - .site-menu { - margin-top: 1rem 0; + *::-webkit-scrollbar-thumb { + background-color: var(--color-accent); + border-radius: 999rem; + border: 0.25rem solid var(--color-icon-background); } - .page-menu, - .site-menu { - max-height: calc(100vh - 2rem - 42px); - overflow: auto; - position: sticky; - top: 42px; + /* mobile */ + @media (max-width: 769px) { + .tsd-widget.options, + .tsd-widget.menu { + display: inline-block; + } + + .container-main { + display: flex; + } + html .col-content { + float: none; + max-width: 100%; + width: 100%; + } + html .col-sidebar { + position: fixed !important; + overflow-y: auto; + -webkit-overflow-scrolling: touch; + z-index: 1024; + top: 0 !important; + bottom: 0 !important; + left: auto !important; + right: 0 !important; + padding: 1.5rem 1.5rem 0 0; + width: 75vw; + visibility: hidden; + background-color: var(--color-background); + transform: translate(100%, 0); + } + html .col-sidebar > *:last-child { + padding-bottom: 20px; + } + html .overlay { + content: ""; + display: block; + position: fixed; + z-index: 1023; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.75); + visibility: hidden; + } + + .to-has-menu .overlay { + animation: fade-in 0.4s; + } + + .to-has-menu .col-sidebar { + animation: pop-in-from-right 0.4s; + } + + .from-has-menu .overlay { + animation: fade-out 0.4s; + } + + .from-has-menu .col-sidebar { + animation: pop-out-to-right 0.4s; + } + + .has-menu body { + overflow: hidden; + } + .has-menu .overlay { + visibility: visible; + } + .has-menu .col-sidebar { + visibility: visible; + transform: translate(0, 0); + display: flex; + flex-direction: column; + gap: 1.5rem; + max-height: 100vh; + padding: 1rem 2rem; + } + .has-menu .tsd-navigation { + max-height: 100%; + } + #tsd-toolbar-links { + display: none; + } + .tsd-navigation .tsd-nav-link { + display: flex; + } + } + + /* one sidebar */ + @media (min-width: 770px) { + .container-main { + display: grid; + grid-template-columns: minmax(0, 1fr) minmax(0, 2fr); + grid-template-areas: "sidebar content"; + margin: 2rem auto; + } + + .col-sidebar { + grid-area: sidebar; + } + .col-content { + grid-area: content; + padding: 0 1rem; + } + } + @media (min-width: 770px) and (max-width: 1399px) { + .col-sidebar { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + padding-top: 1rem; + } + .site-menu { + margin-top: 1rem; + } + } + + /* two sidebars */ + @media (min-width: 1200px) { + .container-main { + grid-template-columns: minmax(0, 1fr) minmax(0, 2.5fr) minmax( + 0, + 20rem + ); + grid-template-areas: "sidebar content toc"; + } + + .col-sidebar { + display: contents; + } + + .page-menu { + grid-area: toc; + padding-left: 1rem; + } + .site-menu { + grid-area: sidebar; + } + + .site-menu { + margin-top: 1rem; + } + + .page-menu, + .site-menu { + max-height: calc(100vh - 2rem - 42px); + overflow: auto; + position: sticky; + top: 42px; + } } } diff --git a/docs/classes/Client.html b/docs/classes/Client.html index 571cb9a286..a306d8319f 100644 --- a/docs/classes/Client.html +++ b/docs/classes/Client.html @@ -1,1390 +1,296 @@ -Client | xrpl
-
- -
-
-
-
- -

Class Client

-
-

Client for interacting with rippled servers.

-
-
-
-

Hierarchy

-
    -
  • EventEmitter<EventTypes> -
      -
    • Client
-
-
-
- -
-
-

Constructor

-
- -
    - -
  • -

    Creates a new Client with a websocket connection to a rippled server.

    -
    -
    -

    Parameters

    -
      -
    • -
      server: string
      -

      URL of the server to connect to.

      -
    • -
    • -
      options: ClientOptions = {}
      -

      Options for client settings.

      -
    -

    Returns Client

    -
    -

    Example

    import { Client } from "xrpl"
    const client = new Client('wss://s.altnet.rippletest.net:51233') -
    -
-
-

Abstraction

-
- -
    - -
  • -

    Get XRP/non-XRP balances for an account.

    -
    -
    -

    Parameters

    -
      -
    • -
      address: string
      -

      Address of the account to retrieve balances for.

      -
    • -
    • -
      options: {
      Β Β Β Β ledger_hash?: string;
      Β Β Β Β ledger_index?: LedgerIndex;
      Β Β Β Β limit?: number;
      Β Β Β Β peer?: string;
      } = {}
      -

      Allows the client to specify a ledger_hash, ledger_index, +Client | xrpl

      Class Client

      Client for interacting with rippled servers.

      +

      Hierarchy

      • EventEmitter<EventTypes>
        • Client

      Constructor

      • Creates a new Client with a websocket connection to a rippled server.

        +

        Parameters

        • server: string

          URL of the server to connect to.

          +
        • options: ClientOptions = {}

          Options for client settings.

          +

        Returns Client

        import { Client } from "xrpl"
        const client = new Client('wss://s.altnet.rippletest.net:51233') +
        + +

      Abstraction

      • Get XRP/non-XRP balances for an account.

        +

        Parameters

        • address: string

          Address of the account to retrieve balances for.

          +
        • options: {
          Β Β Β Β ledger_hash?: string;
          Β Β Β Β ledger_index?: LedgerIndex;
          Β Β Β Β limit?: number;
          Β Β Β Β peer?: string;
          } = {}

          Allows the client to specify a ledger_hash, ledger_index, filter by peer, and/or limit number of balances.

          -
          -
            -
          • -
            Optional ledger_hash?: string
            -

            Retrieve the account balances at the ledger with +

            • Optionalledger_hash?: string

              Retrieve the account balances at the ledger with a given ledger_hash.

              -
              -
            • -
            • -
              Optional ledger_index?: LedgerIndex
              -

              Retrieve the account balances at a given +

            • Optionalledger_index?: LedgerIndex

              Retrieve the account balances at a given ledger_index.

              -
              -
            • -
            • -
              Optional limit?: number
              -

              Limit number of balances to return.

              -
              -
            • -
            • -
              Optional peer?: string
              -

              Filter balances by peer.

              -
              -
        -

        Returns Promise<{
        Β Β Β Β currency: string;
        Β Β Β Β issuer?: string;
        Β Β Β Β value: string;
        }[]>

        An array of XRP/non-XRP balances for the given account.

        +
      • Optionallimit?: number

        Limit number of balances to return.

        +
      • Optionalpeer?: string

        Filter balances by peer.

        +

    Returns Promise<{ currency: string; issuer?: string; value: string }[]>

    An array of XRP/non-XRP balances for the given account.

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()

    async function getAccountBalances(address) {
    try {
    const options = {
    ledger_index: 'validated',
    limit: 10
    };

    const balances = await xrplClient.getBalances(address, options);

    console.log('Account Balances:');
    balances.forEach((balance) => {
    console.log(`Currency: ${balance.currency}`);
    console.log(`Value: ${balance.value}`);
    console.log(`Issuer: ${balance.issuer}`);
    console.log('---');
    });
    } catch (error) {
    console.error('Error retrieving account balances:', error);
    }
    }

    const address = 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh';
    await getAccountBalances(address);
    await client.disconnect(); +
    -
    -

    Example

    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()

    async function getAccountBalances(address) {
    try {
    const options = {
    ledger_index: 'validated',
    limit: 10
    };

    const balances = await xrplClient.getBalances(address, options);

    console.log('Account Balances:');
    balances.forEach((balance) => {
    console.log(`Currency: ${balance.currency}`);
    console.log(`Value: ${balance.value}`);
    console.log(`Issuer: ${balance.issuer}`);
    console.log('---');
    });
    } catch (error) {
    console.error('Error retrieving account balances:', error);
    }
    }

    const address = 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh';
    await getAccountBalances(address);
    await client.disconnect(); -
    -
-
- -
    - -
  • -

    Returns the index of the most recently validated ledger.

    -
    -

    Returns Promise<number>

    The most recently validated ledger index.

    +
  • Returns the index of the most recently validated ledger.

    +

    Returns Promise<number>

    The most recently validated ledger index.

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    const ledgerIndex = await client.getLedgerIndex()
    console.log(ledgerIndex)
    // 884039 +
    -
    -

    Example

    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    const ledgerIndex = await client.getLedgerIndex()
    console.log(ledgerIndex)
    // 884039 -
    -
-
- -
    - -
  • -

    Fetch orderbook (buy/sell orders) between two currency pairs. This checks both sides of the orderbook +

  • Fetch orderbook (buy/sell orders) between two currency pairs. This checks both sides of the orderbook by making two order_book requests (with the second reversing takerPays and takerGets). Returned offers are not normalized in this function, so either currency could be takerGets or takerPays.

    -
    -
    -

    Parameters

    -
      -
    • -
      currency1: BookOfferCurrency
      -

      Specification of one currency involved. (With a currency code and optionally an issuer)

      -
    • -
    • -
      currency2: BookOfferCurrency
      -

      Specification of a second currency involved. (With a currency code and optionally an issuer)

      -
    • -
    • -
      options: {
      Β Β Β Β ledger_hash?: null | string;
      Β Β Β Β ledger_index?: LedgerIndex;
      Β Β Β Β limit?: number;
      Β Β Β Β taker?: null | string;
      } = {}
      -

      Options allowing the client to specify ledger_index, +

      Parameters

      • currency1: BookOfferCurrency

        Specification of one currency involved. (With a currency code and optionally an issuer)

        +
      • currency2: BookOfferCurrency

        Specification of a second currency involved. (With a currency code and optionally an issuer)

        +
      • options: {
        Β Β Β Β ledger_hash?: null | string;
        Β Β Β Β ledger_index?: LedgerIndex;
        Β Β Β Β limit?: number;
        Β Β Β Β taker?: null | string;
        } = {}

        Options allowing the client to specify ledger_index, ledger_hash, filter by taker, and/or limit number of orders.

        -
        -
          -
        • -
          Optional ledger_hash?: null | string
          -

          Retrieve the orderbook at the ledger with a +

          • Optionalledger_hash?: null | string

            Retrieve the orderbook at the ledger with a given ledger_hash.

            -
            -
          • -
          • -
            Optional ledger_index?: LedgerIndex
            -

            Retrieve the orderbook at a given ledger_index.

            -
            -
          • -
          • -
            Optional limit?: number
            -

            The limit passed into each book_offers request. +

          • Optionalledger_index?: LedgerIndex

            Retrieve the orderbook at a given ledger_index.

            +
          • Optionallimit?: number

            The limit passed into each book_offers request. Can return more than this due to two calls being made. Defaults to 20.

            -
            -
          • -
          • -
            Optional taker?: null | string
            -

            Filter orders by taker.

            -
            -
      -

      Returns Promise<{
      Β Β Β Β buy: BookOffer[];
      Β Β Β Β sell: BookOffer[];
      }>

      An object containing buy and sell objects.

      - -
-
- -
    - -
  • -

    Retrieves the XRP balance of a given account address.

    -
    -
    -

    Parameters

    -
      -
    • -
      address: string
      -

      The XRP address to retrieve the balance for.

      -
    • -
    • -
      Optional options: {
      Β Β Β Β ledger_hash?: string;
      Β Β Β Β ledger_index?: LedgerIndex;
      } = {}
      -

      Additional options for fetching the balance (optional).

      -
      Optional -
        -
      • -
        Optional ledger_hash?: string
        -

        The hash of the ledger to retrieve the balance from (optional).

        -
        -
      • -
      • -
        Optional ledger_index?: LedgerIndex
        -

        The index of the ledger to retrieve the balance from (optional).

        -
        -
    -

    Returns Promise<number>

    A promise that resolves with the XRP balance as a number.

    +
  • Optionaltaker?: null | string

    Filter orders by taker.

    +

Returns Promise<{ buy: BookOffer[]; sell: BookOffer[] }>

An object containing buy and sell objects.

+
  • Retrieves the XRP balance of a given account address.

    +

    Parameters

    • address: string

      The XRP address to retrieve the balance for.

      +
    • Optionaloptions: { ledger_hash?: string; ledger_index?: LedgerIndex } = {}

      Additional options for fetching the balance (optional).

      +
      • Optionalledger_hash?: string

        The hash of the ledger to retrieve the balance from (optional).

        +
      • Optionalledger_index?: LedgerIndex

        The index of the ledger to retrieve the balance from (optional).

        +

    Returns Promise<number>

    A promise that resolves with the XRP balance as a number.

    +
    const client = new Client(wss://s.altnet.rippletest.net:51233)
    await client.connect()
    const balance = await client.getXrpBalance('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn')
    console.log(balance)
    await client.disconnect()
    /// '200' +
    -
    -

    Example

    const client = new Client(wss://s.altnet.rippletest.net:51233)
    await client.connect()
    const balance = await client.getXrpBalance('rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn')
    console.log(balance)
    await client.disconnect()
    /// '200' -
    -
-
-

Core

-
- -

Core

  • Autofills fields in a transaction. This will set Sequence, Fee, lastLedgerSequence according to the current state of the server this Client is connected to. It also converts all X-Addresses to classic addresses and flags interfaces into numbers.

    -
    -
    -

    Type Parameters

    -
    -
    -

    Parameters

    -
      -
    • -
      transaction: T
      -

      A SubmittableTransaction in JSON format

      -
    • -
    • -
      Optional signersCount: number
      -

      The expected number of signers for this transaction. +

      Type Parameters

      Parameters

      • transaction: T

        A SubmittableTransaction in JSON format

        +
      • OptionalsignersCount: number

        The expected number of signers for this transaction. Only used for multisigned transactions.

        -
        Optional
      -

      Returns Promise<T>

      The autofilled transaction.

      +

Returns Promise<T>

The autofilled transaction.

+
const { Client } = require('xrpl')

const client = new Client('wss://s.altnet.rippletest.net:51233')

async function createAndAutofillTransaction() {
const transaction = {
TransactionType: 'Payment',
Account: 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',
Destination: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
Amount: '10000000' // 10 XRP in drops (1/1,000,000th of an XRP)
}

try {
const autofilledTransaction = await client.autofill(transaction)
console.log(autofilledTransaction)
} catch (error) {
console.error(`Failed to autofill transaction: ${error}`)
}
}

createAndAutofillTransaction() +
-
-

Example

const { Client } = require('xrpl')

const client = new Client('wss://s.altnet.rippletest.net:51233')

async function createAndAutofillTransaction() {
const transaction = {
TransactionType: 'Payment',
Account: 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh',
Destination: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
Amount: '10000000' // 10 XRP in drops (1/1,000,000th of an XRP)
}

try {
const autofilledTransaction = await client.autofill(transaction)
console.log(autofilledTransaction)
} catch (error) {
console.error(`Failed to autofill transaction: ${error}`)
}
}

createAndAutofillTransaction() -

Autofill helps fill in fields which should be included in a transaction, but can be determined automatically such as LastLedgerSequence and Fee. If you override one of the fields autofill changes, your explicit values will be used instead. By default, this is done as part of submit and submitAndWait when you pass in an unsigned transaction along with your wallet to be submitted.

-
-
- -
  • Simulates an unsigned transaction. Steps performed on a transaction:

    1. Autofill.
    2. Sign & Encode.
    3. Submit.
    -
    -
    -

    Parameters

    -
      -
    • -
      transaction: string | SubmittableTransaction
      -

      A transaction to autofill, sign & encode, and submit.

      -
    • -
    • -
      Optional opts: {
      Β Β Β Β autofill?: boolean;
      Β Β Β Β failHard?: boolean;
      Β Β Β Β wallet?: Wallet;
      }
      -

      (Optional) Options used to sign and submit a transaction.

      -
      Optional -
        -
      • -
        Optional autofill?: boolean
        -

        If true, autofill a transaction.

        -
        -
      • -
      • -
        Optional failHard?: boolean
        -

        If true, and the transaction fails locally, do not retry or relay the transaction to other servers.

        -
        -
      • -
      • -
        Optional wallet?: Wallet
        -

        A wallet to sign a transaction. It must be provided when submitting an unsigned transaction.

        -
        -
    -

    Returns Promise<SubmitResponse>

    A promise that contains SubmitResponse.

    - -
    -

    Throws

    RippledError if submit request fails.

    +

    Type Parameters

    • Binary extends boolean = false

    Parameters

    • transaction: string | SubmittableTransaction

      A transaction to autofill, sign & encode, and submit.

      +
    • Optionalopts: { binary?: Binary }

      (Optional) Options used to sign and submit a transaction.

      +
      • Optionalbinary?: Binary

        If true, return the metadata in a binary encoding.

        +

    Returns Promise<
    Β Β Β Β Binary extends true
    Β Β Β Β Β Β Β Β ? SimulateBinaryResponse
    Β Β Β Β Β Β Β Β : SimulateJsonResponse<Transaction>,
    >

    A promise that contains SimulateResponse.

    +

    RippledError if the simulate request fails.

    +
  • Submits a signed/unsigned transaction. +Steps performed on a transaction:

    +
      +
    1. Autofill.
    2. +
    3. Sign & Encode.
    4. +
    5. Submit.
    6. +
    +

    Parameters

    • transaction: string | SubmittableTransaction

      A transaction to autofill, sign & encode, and submit.

      +
    • Optionalopts: { autofill?: boolean; failHard?: boolean; wallet?: Wallet }

      (Optional) Options used to sign and submit a transaction.

      +
      • Optionalautofill?: boolean

        If true, autofill a transaction.

        +
      • OptionalfailHard?: boolean

        If true, and the transaction fails locally, do not retry or relay the transaction to other servers.

        +
      • Optionalwallet?: Wallet

        A wallet to sign a transaction. It must be provided when submitting an unsigned transaction.

        +

    Returns Promise<SubmitResponse>

    A promise that contains SubmitResponse.

    +

    RippledError if submit request fails.

    +
    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    const wallet = Wallet.generate()
    const transaction = {
    TransactionType: 'Payment',
    Account: wallet.classicAddress,
    Destination: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    Amount: '10000000' // 10 XRP in drops (1/1,000,000th of an XRP)
    }
    const submitResponse = await client.submit(transaction, { wallet })
    console.log(submitResponse) +
    -

    Example

    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    const wallet = Wallet.generate()
    const transaction = {
    TransactionType: 'Payment',
    Account: wallet.classicAddress,
    Destination: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    Amount: '10000000' // 10 XRP in drops (1/1,000,000th of an XRP)
    }
    const submitResponse = await client.submit(transaction, { wallet })
    console.log(submitResponse) -
    -
-
- -
  • Asynchronously submits a transaction and verifies that it has been included in a validated ledger (or has errored/will not be included for some reason). See Reliable Transaction Submission.

    -
    -
    -

    Type Parameters

    -
    -
    -

    Parameters

    -
      -
    • -
      transaction: string | T
      -

      A transaction to autofill, sign & encode, and submit.

      -
    • -
    • -
      Optional opts: {
      Β Β Β Β autofill?: boolean;
      Β Β Β Β failHard?: boolean;
      Β Β Β Β wallet?: Wallet;
      }
      -

      (Optional) Options used to sign and submit a transaction.

      -
      Optional -
        -
      • -
        Optional autofill?: boolean
        -

        If true, autofill a transaction.

        -
        -
      • -
      • -
        Optional failHard?: boolean
        -

        If true, and the transaction fails locally, do not retry or relay the transaction to other servers.

        -
        -
      • -
      • -
        Optional wallet?: Wallet
        -

        A wallet to sign a transaction. It must be provided when submitting an unsigned transaction.

        -
        -
    -

    Returns Promise<TxResponse<T>>

    A promise that contains TxResponse, that will return when the transaction has been validated.

    +

    Type Parameters

    Parameters

    • transaction: string | T

      A transaction to autofill, sign & encode, and submit.

      +
    • Optionalopts: { autofill?: boolean; failHard?: boolean; wallet?: Wallet }

      (Optional) Options used to sign and submit a transaction.

      +
      • Optionalautofill?: boolean

        If true, autofill a transaction.

        +
      • OptionalfailHard?: boolean

        If true, and the transaction fails locally, do not retry or relay the transaction to other servers.

        +
      • Optionalwallet?: Wallet

        A wallet to sign a transaction. It must be provided when submitting an unsigned transaction.

        +

    Returns Promise<TxResponse<T>>

    A promise that contains TxResponse, that will return when the transaction has been validated.

    +
    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')

    async function submitTransaction() {
    const senderWallet = client.fundWallet()
    const recipientWallet = client.fundWallet()

    const transaction = {
    TransactionType: 'Payment',
    Account: senderWallet.address,
    Destination: recipientWallet.address,
    Amount: '10'
    }

    try {
    await client.submit(signedTransaction, { wallet: senderWallet })
    console.log(result)
    } catch (error) {
    console.error(`Failed to submit transaction: ${error}`)
    }
    }

    submitTransaction() +
    -
    -

    Example

    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')

    async function submitTransaction() {
    const senderWallet = client.fundWallet()
    const recipientWallet = client.fundWallet()

    const transaction = {
    TransactionType: 'Payment',
    Account: senderWallet.address,
    Destination: recipientWallet.address,
    Amount: '10'
    }

    try {
    await client.submit(signedTransaction, { wallet: senderWallet })
    console.log(result)
    } catch (error) {
    console.error(`Failed to submit transaction: ${error}`)
    }
    }

    submitTransaction() -

    In this example we submit a payment transaction between two newly created testnet accounts.

    -

    Under the hood, submit will call client.autofill by default, and because we've passed in a Wallet it +

    Under the hood, submit will call client.autofill by default, and because we've passed in a Wallet it Will also sign the transaction for us before submitting the signed transaction binary blob to the ledger.

    This is similar to submitAndWait which does all of the above, but also waits to see if the transaction has been validated.

    - -

    Throws

    Connection errors: If the Client object is unable to establish a connection to the specified WebSocket endpoint, +

    Connection errors: If the Client object is unable to establish a connection to the specified WebSocket endpoint, an error will be thrown.

    - -

    Throws

    Transaction errors: If the submitted transaction is invalid or cannot be included in a validated ledger for any +

    Transaction errors: If the submitted transaction is invalid or cannot be included in a validated ledger for any reason, the promise returned by submitAndWait() will be rejected with an error. This could include issues with insufficient balance, invalid transaction fields, or other issues specific to the transaction being submitted.

    - -

    Throws

    Ledger errors: If the ledger being used to submit the transaction is undergoing maintenance or otherwise unavailable, +

    Ledger errors: If the ledger being used to submit the transaction is undergoing maintenance or otherwise unavailable, an error will be thrown.

    - -

    Throws

    Timeout errors: If the transaction takes longer than the specified timeout period to be included in a validated +

    Timeout errors: If the transaction takes longer than the specified timeout period to be included in a validated ledger, the promise returned by submitAndWait() will be rejected with an error.

    -
-
-

Faucet

-
- -
    - -
  • -

    The fundWallet() method is used to send an amount of XRP (usually 1000) to a new (randomly generated) +

Faucet

  • The fundWallet() method is used to send an amount of XRP (usually 1000) to a new (randomly generated) or existing XRP Ledger wallet.

    -
    -
    -

    Parameters

    -
      -
    • -
      this: Client
    • -
    • -
      Optional wallet: null | Wallet
      -

      An existing XRPL Wallet to fund. If undefined or null, a new Wallet will be created.

      -
      Optional
    • -
    • -
      options: FundingOptions = {}
      -

      See below.

      -
    -

    Returns Promise<{
    Β Β Β Β balance: number;
    Β Β Β Β wallet: Wallet;
    }>

    A Wallet on the Testnet or Devnet that contains some amount of XRP, -and that wallet's balance in XRP.

    - -
    -

    Example

    Example 1: Fund a randomly generated wallet -const { Client, Wallet } = require('xrpl')

    -

    const client = new Client('wss://s.altnet.rippletest.net:51233') +

    Parameters

    • this: Client
    • Optionalwallet: null | Wallet

      An existing XRPL Wallet to fund. If undefined or null, a new Wallet will be created.

      +
    • options: FundingOptions = {}

      See below.

      +
      • Optionalamount?: string

        A custom amount to fund, if undefined or null, the default amount will be 1000.

        +
      • OptionalfaucetHost?: string

        A custom host for a faucet server. On devnet, testnet, AMM devnet, and HooksV3 testnet, fundWallet will +attempt to determine the correct server automatically. In other environments, or if you would like to customize +the faucet host in devnet or testnet, you should provide the host using this option.

        +
      • OptionalfaucetPath?: string

        A custom path for a faucet server. On devnet, +testnet, AMM devnet, and HooksV3 testnet, fundWallet will +attempt to determine the correct path automatically. In other environments, +or if you would like to customize the faucet path in devnet or testnet, +you should provide the path using this option. +Ex: client.fundWallet(null,{'faucet.altnet.rippletest.net', '/accounts'}) +specifies a request to 'faucet.altnet.rippletest.net/accounts' to fund a new wallet.

        +
      • OptionalusageContext?: string

        An optional field to indicate the use case context of the faucet transaction +Ex: integration test, code snippets.

        +

    Returns Promise<{ balance: number; wallet: Wallet }>

    A Wallet on the Testnet or Devnet that contains some amount of XRP, +and that wallet's balance in XRP.

    +

    Example 1: Fund a randomly generated wallet +const { Client, Wallet } = require('xrpl')

    +

    const client = new Client('wss://s.altnet.rippletest.net:51233') await client.connect() const { balance, wallet } = await client.fundWallet()

    Under the hood, this will use Wallet.generate() to create a new random wallet, then ask a testnet faucet To send it XRP on ledger to make it a real account. If successful, this will return the new account balance in XRP -Along with the Wallet object to track the keys for that account. If you'd like, you can also re-fill an existing +Along with the Wallet object to track the keys for that account. If you'd like, you can also re-fill an existing Account by passing in a Wallet you already have.

    -
    const api = new xrpl.Client("wss://s.altnet.rippletest.net:51233")
    await api.connect()
    const { wallet, balance } = await api.fundWallet() -
    +
    const api = new xrpl.Client("wss://s.altnet.rippletest.net:51233")
    await api.connect()
    const { wallet, balance } = await api.fundWallet() +
    +

    Example 2: Fund wallet using a custom faucet host and known wallet address

    fundWallet will try to infer the url of a faucet API from the network your client is connected to. There are hardcoded default faucets for popular test networks like testnet and devnet. -However, if you're working with a newer or more obscure network, you may have to specify the faucetHost +However, if you're working with a newer or more obscure network, you may have to specify the faucetHost And faucetPath so fundWallet can ask that faucet to fund your wallet.

    -
    const newWallet = Wallet.generate()
    const { balance, wallet } = await client.fundWallet(newWallet, {
    amount: '10',
    faucetHost: 'https://custom-faucet.example.com',
    faucetPath: '/accounts'
    })
    console.log(`Sent 10 XRP to wallet: ${address} from the given faucet. Resulting balance: ${balance} XRP`)
    } catch (error) {
    console.error(`Failed to fund wallet: ${error}`)
    }
    } -
    +
    const newWallet = Wallet.generate()
    const { balance, wallet } = await client.fundWallet(newWallet, {
    amount: '10',
    faucetHost: 'https://custom-faucet.example.com',
    faucetPath: '/accounts'
    })
    console.log(`Sent 10 XRP to wallet: ${address} from the given faucet. Resulting balance: ${balance} XRP`)
    } catch (error) {
    console.error(`Failed to fund wallet: ${error}`)
    }
    } +
    -

    Throws

    When either Client isn't connected or unable to fund wallet address.

    -
-
-

Fee

-
- -
feeCushion: number
-

Factor to multiply estimated fee by to provide a cushion in case the +

When either Client isn't connected or unable to fund wallet address.

+

Fee

feeCushion: number

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: string
-

Maximum transaction cost to allow, in decimal XRP. Must be a string-encoded -number. Defaults to '2'.

-
-
-
-

Network

-
- -
    -
  • get url(): string
  • -
  • -

    Get the url that the client is connected to.

    -
    -

    Returns string

    The URL of the server this client is connected to.

    +
maxFeeXRP: string

Maximum transaction cost to allow, in decimal XRP. Must be a string-encoded +number. Defaults to '2'.

+

Network

  • Tells the Client instance to connect to its rippled server.

    +

    Returns Promise<void>

    A promise that resolves with a void value when a connection is established.

    +

    Client.connect() establishes a connection between a Client object and the server.

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() +
    -
-
- -
    - -
  • -

    Tells the Client instance to connect to its rippled server.

    -
    -

    Returns Promise<void>

    A promise that resolves with a void value when a connection is established.

    - -
    -

    Example

    Client.connect() establishes a connection between a Client object and the server.

    -
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() -

    If you open a client connection, be sure to close it with await client.disconnect() before exiting your application.

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() +
    -

    Example

    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() -
    -
-
- -
    - -
  • -

    Disconnects the XRPL client from the server and cancels all pending requests and subscriptions. Call when -you want to disconnect the client from the server, such as when you're finished using the client or when you +

  • Disconnects the XRPL client from the server and cancels all pending requests and subscriptions. Call when +you want to disconnect the client from the server, such as when you're finished using the client or when you need to switch to a different server.

    -
    -

    Returns Promise<void>

    A promise that resolves with a void value when a connection is destroyed.

    +

    Returns Promise<void>

    A promise that resolves with a void value when a connection is destroyed.

    +

    To use the disconnect() method, you first need to create a new Client object and connect it to a server:

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() +
    -
    -

    Example

    To use the disconnect() method, you first need to create a new Client object and connect it to a server:

    -
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    // do something with the client
    await client.disconnect() -
    -
-
- -
    - -
  • -

    Checks if the Client instance is connected to its rippled server.

    -
    -

    Returns boolean

    Whether the client instance is connected.

    +
  • Checks if the Client instance is connected to its rippled server.

    +

    Returns boolean

    Whether the client instance is connected.

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    console.log(client.isConnected())
    // true
    await client.disconnect()
    console.log(client.isConnected())
    // false +
    -
    -

    Example

    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.connect()
    console.log(client.isConnected())
    // true
    await client.disconnect()
    console.log(client.isConnected())
    // false -
    -
-
- -
    - -
  • -

    Event handler for subscription streams.

    -
    -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    • -
    • -

      U extends ((...args) => void) = OnEventToListenerMap<T>

    -
    -

    Parameters

    -
      -
    • -
      eventName: T
      -

      Name of the event. Only forwards streams.

      -
    • -
    • -
      listener: U
      -

      Function to run on event.

      -
    -

    Returns Client

    This, because it inherits from EventEmitter.

    +
  • Event handler for subscription streams.

    +

    Type Parameters

    • T extends EventTypes
    • U extends (...args: any[]) => void = OnEventToListenerMap<T>

    Parameters

    • eventName: T

      Name of the event. Only forwards streams.

      +
    • listener: U

      Function to run on event.

      +

    Returns this

    This, because it inherits from EventEmitter.

    +
    const api = new Client('wss://s.altnet.rippletest.net:51233')

    api.on('transaction', (tx: TransactionStream) => {
    console.log("Received Transaction")
    console.log(tx)
    })

    await api.connect()
    const response = await api.request({
    command: 'subscribe',
    streams: ['transactions_proposed']
    }) +
    -
    -

    Example

    const api = new Client('wss://s.altnet.rippletest.net:51233')

    api.on('transaction', (tx: TransactionStream) => {
    console.log("Received Transaction")
    console.log(tx)
    })

    await api.connect()
    const response = await api.request({
    command: 'subscribe',
    streams: ['transactions_proposed']
    }) -
    -
-
- -
  • Makes a request to the client with the given command and additional request body parameters.

    -
    -
    -

    Type Parameters

    -
    -
    -

    Parameters

    -
      -
    • -
      req: R
      -

      Request to send to the server.

      -
    -

    Returns Promise<T>

    The response from the server.

    +

    Type Parameters

    Parameters

    • req: R

      Request to send to the server.

      +

    Returns Promise<T>

    The response from the server.

    +
    const response = await client.request({
    command: 'account_info',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    })
    console.log(response) +
    -
    -

    Example

    const response = await client.request({
    command: 'account_info',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    })
    console.log(response) -
    -
-
- -
  • Makes multiple paged requests to the client to return a given number of resources. Multiple paged requests will be made until the limit number of resources is reached (if no limit is provided, a single request will be made).

    If the command is unknown, an additional collect property is required to know which response key contains the array of resources.

    NOTE: This command is used by existing methods and is not recommended for -general use. Instead, use rippled's built-in pagination and make multiple +general use. Instead, use rippled's built-in pagination and make multiple requests as needed.

    -
    -
    -

    Type Parameters

    -
    -
    -

    Parameters

    -
      -
    • -
      request: T
      -

      The initial request to send to the server.

      -
    • -
    • -
      Optional collect: string
      -

      (Optional) the param to use to collect the array of resources (only needed if command is unknown).

      -
      Optional
    -

    Returns Promise<U[]>

    The array of all responses.

    +

    Type Parameters

    Parameters

    • request: T

      The initial request to send to the server.

      +
    • Optionalcollect: string

      (Optional) the param to use to collect the array of resources (only needed if command is unknown).

      +

    Returns Promise<U[]>

    The array of all responses.

    +

    ValidationError if there is no collection key (either from a known command or for the unknown command).

    +
    // Request all ledger data pages
    const allResponses = await client.requestAll({ command: 'ledger_data' });
    console.log(allResponses); +
    -
    -

    Throws

    ValidationError if there is no collection key (either from a known command or for the unknown command).

    +
    // Request all transaction data pages
    const allResponses = await client.requestAll({ command: 'transaction_data' });
    console.log(allResponses); +
    -

    Example

    // Request all ledger data pages
    const allResponses = await client.requestAll({ command: 'ledger_data' });
    console.log(allResponses); -
    +
  • Requests the next page of data.

    +

    Type Parameters

    Parameters

    • req: T

      Request to send.

      +
    • resp: U

      Response with the marker to use in the request.

      +

    Returns Promise<RequestNextPageReturnMap<T>>

    The response with the next page of data.

    +
    const response = await client.request({
    command: 'account_tx',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    })
    console.log(response)
    const nextResponse = await client.requestNextPage({
    command: 'account_tx',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    },
    response)
    console.log(nextResponse) +
    -

    Example

    // Request all transaction data pages
    const allResponses = await client.requestAll({ command: 'transaction_data' });
    console.log(allResponses); -
    -
-
- -
    - -
  • -

    Requests the next page of data.

    -
    -
    -

    Type Parameters

    -
    -
    -

    Parameters

    -
      -
    • -
      req: T
      -

      Request to send.

      -
    • -
    • -
      resp: U
      -

      Response with the marker to use in the request.

      -
    -

    Returns Promise<RequestNextPageReturnMap<T>>

    The response with the next page of data.

    - -
    -

    Example

    const response = await client.request({
    command: 'account_tx',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    })
    console.log(response)
    const nextResponse = await client.requestNextPage({
    command: 'account_tx',
    account: 'r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59',
    },
    response)
    console.log(nextResponse) -
    -
-
-

Other

-
- -
buildVersion: undefined | string
-

Rippled Version used by the server this client is connected to

-
-
-
- -
connection: Connection
-
- -
networkID: undefined | number
-

Network ID of the server this client is connected to

-
-
-
- -
prefixed: string | boolean
-
- -
    - -
  • -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    • -
    • -
      fn: ((...args) => void)
      -
        -
      • -
          -
        • (...args): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            Rest ...args: any[]
            Rest
          -

          Returns void

    • -
    • -
      Optional context: any
      Optional
    -

    Returns Client

-
- -
    - -
  • -

    Calls each of the listeners registered for a given event.

    -
    -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    • -
    • -
      Rest ...args: any[]
      Rest
    -

    Returns boolean

    -
-
- -

Other

apiVersion: APIVersion = DEFAULT_API_VERSION

API Version used by the server this client is connected to

+
buildVersion: undefined | string

Rippled Version used by the server this client is connected to

+
connection: Connection
networkID: undefined | number

Network ID of the server this client is connected to

+
prefixed: string | boolean
  • Type Parameters

    • T extends EventTypes

    Parameters

    • event: T
    • fn: (...args: any[]) => void
    • Optionalcontext: any

    Returns this

  • Calls each of the listeners registered for a given event.

    +

    Type Parameters

    • T extends EventTypes

    Parameters

    • event: T
    • ...args: any[]

    Returns boolean

  • Return an array listing the events for which the emitter has registered listeners.

    -
    -

    Returns EventTypes[]

    -
-
- -
    - -
  • -

    Get networkID and buildVersion from server_info

    -
    -

    Returns Promise<void>

    void

    +

    Returns EventTypes[]

  • Get networkID and buildVersion from server_info

    +

    Returns Promise<void>

    void

    +
    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.getServerInfo()
    console.log(client.networkID)
    console.log(client.buildVersion) +
    -
    -

    Example

    const { Client } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')
    await client.getServerInfo()
    console.log(client.networkID)
    console.log(client.buildVersion) -
    -
-
- -
    - -
  • -

    Return the number of listeners listening to a given event.

    -
    -
    -

    Parameters

    -
      -
    • -
      event: EventTypes
    -

    Returns number

    -
-
- -
    - -
  • -

    Return the listeners registered for a given event.

    -
    -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    -

    Returns ((...args) => void)[]

    -
-
- -
    - -
  • -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    • -
    • -
      Optional fn: ((...args) => void)
      Optional -
        -
      • -
          -
        • (...args): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            Rest ...args: any[]
            Rest
          -

          Returns void

    • -
    • -
      Optional context: any
      Optional
    • -
    • -
      Optional once: boolean
      Optional
    -

    Returns Client

-
- -
    - -
  • -

    Add a one-time listener for a given event.

    -
    -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    • -
    • -
      fn: ((...args) => void)
      -
        -
      • -
          -
        • (...args): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            Rest ...args: any[]
            Rest
          -

          Returns void

    • -
    • -
      Optional context: any
      Optional
    -

    Returns Client

    -
-
- -
  • Return the number of listeners listening to a given event.

    +

    Parameters

    • event: EventTypes

    Returns number

  • Return the listeners registered for a given event.

    +

    Type Parameters

    • T extends EventTypes

    Parameters

    • event: T

    Returns (...args: any[]) => void[]

  • Type Parameters

    • T extends EventTypes

    Parameters

    • event: T
    • Optionalfn: (...args: any[]) => void
    • Optionalcontext: any
    • Optionalonce: boolean

    Returns this

  • Add a one-time listener for a given event.

    +

    Type Parameters

    • T extends EventTypes

    Parameters

    • event: T
    • fn: (...args: any[]) => void
    • Optionalcontext: any

    Returns this

-
- -
    - -
  • -

    Remove all listeners, or those of the specified event.

    -
    -
    -

    Parameters

    -
      -
    • -
      Optional event: EventTypes
      Optional
    -

    Returns Client

    -
-
- -
    - -
  • -

    Remove the listeners of a given event.

    -
    -
    -

    Type Parameters

    -
      -
    • -

      T extends EventTypes

    -
    -

    Parameters

    -
      -
    • -
      event: T
    • -
    • -
      Optional fn: ((...args) => void)
      Optional -
        -
      • -
          -
        • (...args): void
        • -
        • -
          -

          Parameters

          -
            -
          • -
            Rest ...args: any[]
            Rest
          -

          Returns void

    • -
    • -
      Optional context: any
      Optional
    • -
    • -
      Optional once: boolean
      Optional
    -

    Returns Client

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +

Returns Promise<SubmittableTransaction>

Use autofill instead, provided for users familiar with v1

+
  • Remove all listeners, or those of the specified event.

    +

    Parameters

    • Optionalevent: EventTypes

    Returns this

  • Remove the listeners of a given event.

    +

    Type Parameters

    • T extends EventTypes

    Parameters

    • event: T
    • Optionalfn: (...args: any[]) => void
    • Optionalcontext: any
    • Optionalonce: boolean

    Returns this

diff --git a/docs/classes/ConnectionError.html b/docs/classes/ConnectionError.html index 46d6862979..a08c5018e5 100644 --- a/docs/classes/ConnectionError.html +++ b/docs/classes/ConnectionError.html @@ -1,533 +1,30 @@ -ConnectionError | xrpl
-
- -
-
-
-
- -

Class ConnectionError

-
-

Error thrown when xrpl.js has an error with connection to rippled.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/DisconnectedError.html b/docs/classes/DisconnectedError.html index 6574b17506..3bc172bc14 100644 --- a/docs/classes/DisconnectedError.html +++ b/docs/classes/DisconnectedError.html @@ -1,527 +1,30 @@ -DisconnectedError | xrpl
-
- -
-
-
-
- -

Class DisconnectedError

-
-

Error thrown when xrpl.js has disconnected from rippled server.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/NotConnectedError.html b/docs/classes/NotConnectedError.html index 45c24e7b10..092aeeca32 100644 --- a/docs/classes/NotConnectedError.html +++ b/docs/classes/NotConnectedError.html @@ -1,527 +1,30 @@ -NotConnectedError | xrpl
-
- -
-
-
-
- -

Class NotConnectedError

-
-

Error thrown when xrpl.js is not connected to rippled server.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/NotFoundError.html b/docs/classes/NotFoundError.html index 87b4f6754c..9ea75e2e28 100644 --- a/docs/classes/NotFoundError.html +++ b/docs/classes/NotFoundError.html @@ -1,524 +1,30 @@ -NotFoundError | xrpl
-
- -
-
-
-
- -

Class NotFoundError

-
-

Error thrown when xrpl.js cannot retrieve a transaction, ledger, account, etc. +NotFoundError | xrpl

Class NotFoundError

Error thrown when xrpl.js cannot retrieve a transaction, ledger, account, etc. From rippled.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
    - -
  • -

    Console.log in node uses util.inspect on object, and util.inspect allows +

Hierarchy (View Summary)

Constructors

Properties

data?: unknown
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

-
- -
-
- -
    - -
  • -

    Create .stack property on a target object

    -
    -
    -

    Parameters

    -
      -
    • -
      targetObject: object
    • -
    • -
      Optional constructorOpt: Function
      Optional
    -

    Returns void

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +

Returns string

The String output of the Error.

+
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/ResponseFormatError.html b/docs/classes/ResponseFormatError.html index cc03488bb4..4e363a19ab 100644 --- a/docs/classes/ResponseFormatError.html +++ b/docs/classes/ResponseFormatError.html @@ -1,527 +1,30 @@ -ResponseFormatError | xrpl
-
- -
-
-
-
- -

Class ResponseFormatError

-
-

Error thrown when xrpl.js sees a response in the wrong format.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/RippledError.html b/docs/classes/RippledError.html index 02107d3288..55fd248c87 100644 --- a/docs/classes/RippledError.html +++ b/docs/classes/RippledError.html @@ -1,527 +1,30 @@ -RippledError | xrpl
-
- -
-
-
-
- -

Class RippledError

-
-

Error thrown when rippled responds with an error.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/RippledNotInitializedError.html b/docs/classes/RippledNotInitializedError.html index b974a5e525..95c25854a0 100644 --- a/docs/classes/RippledNotInitializedError.html +++ b/docs/classes/RippledNotInitializedError.html @@ -1,527 +1,30 @@ -RippledNotInitializedError | xrpl
-
- -
-
-
-
- -

Class RippledNotInitializedError

-
-

Error thrown when rippled is not initialized.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/TimeoutError.html b/docs/classes/TimeoutError.html index edb9adc9df..5c09a9fb7d 100644 --- a/docs/classes/TimeoutError.html +++ b/docs/classes/TimeoutError.html @@ -1,527 +1,30 @@ -TimeoutError | xrpl
-
- -
-
-
-
- -

Class TimeoutError

-
-

Error thrown when xrpl.js times out.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/UnexpectedError.html b/docs/classes/UnexpectedError.html index 8adf265995..44ceffb402 100644 --- a/docs/classes/UnexpectedError.html +++ b/docs/classes/UnexpectedError.html @@ -1,527 +1,30 @@ -UnexpectedError | xrpl
-
- -
-
-
-
- -

Class UnexpectedError

-
-

Error thrown when xrpl.js cannot specify error type.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/ValidationError.html b/docs/classes/ValidationError.html index 60bc31c544..42d481deb2 100644 --- a/docs/classes/ValidationError.html +++ b/docs/classes/ValidationError.html @@ -1,527 +1,30 @@ -ValidationError | xrpl
-
- -
-
-
-
- -

Class ValidationError

-
-

Error thrown when xrpl.js sees a malformed transaction.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/Wallet.html b/docs/classes/Wallet.html index fcaa90e6d3..5db4be614d 100644 --- a/docs/classes/Wallet.html +++ b/docs/classes/Wallet.html @@ -1,838 +1,114 @@ -Wallet | xrpl
-
- -
-
-
-
- -

Class Wallet

-
-

A utility for deriving a wallet composed of a keypair (publicKey/privateKey). +Wallet | xrpl

Class Wallet

A utility for deriving a wallet composed of a keypair (publicKey/privateKey). A wallet can be derived from either a seed, mnemonic, or entropy (array of random numbers). It provides functionality to sign/verify transactions offline.

-
-
-

Example


// Derive a wallet from a base58 encoded seed.
const seedWallet = Wallet.fromSeed('ssZkdwURFMBXenJPbrpE14b6noJSu')
console.log(seedWallet)
// Wallet {
// publicKey: '02FE9932A9C4AA2AC9F0ED0F2B89302DE7C2C95F91D782DA3CF06E64E1C1216449',
// privateKey: '00445D0A16DD05EFAF6D5AF45E6B8A6DE4170D93C0627021A0B8E705786CBCCFF7',
// classicAddress: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo',
// seed: 'ssZkdwURFMBXenJPbrpE14b6noJSu'
// }.

// Sign a JSON Transaction
const signed = seedWallet.signTransaction({
TransactionType: 'Payment',
Account: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo'
...........
}).

console.log(signed)
// '1200007321......B01BE1DFF3'.
console.log(decode(signed))
// {
// TransactionType: 'Payment',
// SigningPubKey: '02FE9932A9C4AA2AC9F0ED0F2B89302DE7C2C95F91D782DA3CF06E64E1C1216449',
// TxnSignature: '3045022100AAD......5B631ABD21171B61B07D304',
// Account: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo'
// ...........
// } -
-
-
-

Hierarchy

-
    -
  • Wallet
-
-
-
- -
-
-

Constructors

-
- -
    - -
  • -

    Creates a new Wallet.

    -
    -
    -

    Parameters

    -
      -
    • -
      publicKey: string
      -

      The public key for the account.

      -
    • -
    • -
      privateKey: string
      -

      The private key used for signing transactions for the account.

      -
    • -
    • -
      opts: {
      Β Β Β Β masterAddress?: string;
      Β Β Β Β seed?: string;
      } = {}
      -

      (Optional) Options to initialize a Wallet.

      -
      -
        -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
      • -
      • -
        Optional seed?: string
        -

        The seed used to derive the account keys.

        -
        -
    -

    Returns Wallet

    -
-
-

Properties

-
- -
classicAddress: string
-
- -
privateKey: string
-
- -
publicKey: string
-
- -
seed?: string
-
- -
fromSecret: ((seed, opts?) => Wallet) = Wallet.fromSeed
-
-

Type declaration

-
    -
  • -
      -
    • (seed, opts?): Wallet
    • -
    • -

      Derives a wallet from a secret (AKA a seed).

      -
      -
      -

      Parameters

      -
        -
      • -
        seed: string
      • -
      • -
        opts: {
        Β Β Β Β algorithm?: ECDSA;
        Β Β Β Β masterAddress?: string;
        } = {}
        -

        (Optional) Options to derive a Wallet.

        -
        -
          -
        • -
          Optional algorithm?: ECDSA
          -

          The digital signature algorithm to generate an address for.

          -
          -
        • -
        • -
          Optional masterAddress?: string
          -

          Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

          -
          -
      -

      Returns Wallet

      A Wallet derived from a secret (AKA a seed).

      +

// Derive a wallet from a base58 encoded seed.
const seedWallet = Wallet.fromSeed('ssZkdwURFMBXenJPbrpE14b6noJSu')
console.log(seedWallet)
// Wallet {
// publicKey: '02FE9932A9C4AA2AC9F0ED0F2B89302DE7C2C95F91D782DA3CF06E64E1C1216449',
// privateKey: '00445D0A16DD05EFAF6D5AF45E6B8A6DE4170D93C0627021A0B8E705786CBCCFF7',
// classicAddress: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo',
// seed: 'ssZkdwURFMBXenJPbrpE14b6noJSu'
// }.

// Sign a JSON Transaction
const signed = seedWallet.signTransaction({
TransactionType: 'Payment',
Account: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo'
...........
}).

console.log(signed)
// '1200007321......B01BE1DFF3'.
console.log(decode(signed))
// {
// TransactionType: 'Payment',
// SigningPubKey: '02FE9932A9C4AA2AC9F0ED0F2B89302DE7C2C95F91D782DA3CF06E64E1C1216449',
// TxnSignature: '3045022100AAD......5B631ABD21171B61B07D304',
// Account: 'rG88FVLjvYiQaGftSa1cKuE2qNx7aK5ivo'
// ...........
// } +
-
-
-

Accessors

-
- -
    -
  • get address(): string
  • -
  • -

    Alias for wallet.classicAddress.

    -
    -

    Returns string

    The wallet's classic address.

    +

Constructors

  • Creates a new Wallet.

    +

    Parameters

    • publicKey: string

      The public key for the account.

      +
    • privateKey: string

      The private key used for signing transactions for the account.

      +
    • opts: { masterAddress?: string; seed?: string } = {}

      (Optional) Options to initialize a Wallet.

      +
      • OptionalmasterAddress?: string

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        +
      • Optionalseed?: string

        The seed used to derive the account keys.

        +

    Returns Wallet

Properties

classicAddress: string
privateKey: string
publicKey: string
seed?: string
fromSecret: (
Β Β Β Β seed: string,
Β Β Β Β opts?: { algorithm?: ECDSA; masterAddress?: string },
) => Wallet = Wallet.fromSeed

Derives a wallet from a secret (AKA a seed).

+

Type declaration

    • (seed: string, opts?: { algorithm?: ECDSA; masterAddress?: string }): Wallet
    • Derives a wallet from a seed.

      +

      Parameters

      • seed: string

        A string used to generate a keypair (publicKey/privateKey) to derive a wallet.

        +
      • opts: { algorithm?: ECDSA; masterAddress?: string } = {}

        (Optional) Options to derive a Wallet.

        +
        • Optionalalgorithm?: ECDSA

          The digital signature algorithm to generate an address for.

          +
        • OptionalmasterAddress?: string

          Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

          +

      Returns Wallet

      A Wallet derived from a seed.

      +

A string used to generate a keypair (publicKey/privateKey) to derive a wallet.

+

(Optional) Options to derive a Wallet.

+

The digital signature algorithm to generate an address for.

+

Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

+

A Wallet derived from a secret (AKA a seed).

+

Accessors

Methods

  • Gets an X-address in Testnet/Mainnet format.

    +

    Parameters

    • tag: number | false = false

      A tag to be included within the X-address.

      +
    • isTestnet: boolean = false

      A boolean to indicate if X-address should be in Testnet (true) or Mainnet (false) format.

      +

    Returns string

    An X-address.

    +
  • Signs a transaction offline.

    +

    Parameters

    • this: Wallet

      Wallet instance.

      +
    • transaction: Transaction

      A transaction to be signed offline.

      +
    • Optionalmultisign: string | boolean

      Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request.

      +

    Returns { hash: string; tx_blob: string }

    A signed transaction.

    +
    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')

    async function signTransaction() {
    await client.connect()
    const { balance: balance1, wallet: wallet1 } = client.fundWallet()
    const { balance: balance2, wallet: wallet2 } = client.fundWallet()

    const transaction = {
    TransactionType: 'Payment',
    Account: wallet1.address,
    Destination: wallet2.address,
    Amount: '10'
    }

    try {
    await client.autofill(transaction)
    const { tx_blob: signed_tx_blob, hash} = await wallet1.sign(transaction)
    console.log(signed_tx_blob)
    } catch (error) {
    console.error(`Failed to sign transaction: ${error}`)
    }
    const result = await client.submit(signed_tx_blob)
    await client.disconnect()
    }

    signTransaction() +
    -
-
-

Methods

-
- -
    - -
  • -

    Gets an X-address in Testnet/Mainnet format.

    -
    -
    -

    Parameters

    -
      -
    • -
      tag: number | false = false
      -

      A tag to be included within the X-address.

      -
    • -
    • -
      isTestnet: boolean = false
      -

      A boolean to indicate if X-address should be in Testnet (true) or Mainnet (false) format.

      -
    -

    Returns string

    An X-address.

    - -
-
- -
    - -
  • -

    Signs a transaction offline.

    -
    -
    -

    Parameters

    -
      -
    • -
      this: Wallet
      -

      Wallet instance.

      -
    • -
    • -
      transaction: Transaction
      -

      A transaction to be signed offline.

      -
    • -
    • -
      Optional multisign: string | boolean
      -

      Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request.

      -
      Optional
    -

    Returns {
    Β Β Β Β hash: string;
    Β Β Β Β tx_blob: string;
    }

    A signed transaction.

    - -
      -
    • -
      hash: string
    • -
    • -
      tx_blob: string
    -
    -

    Example

    const { Client, Wallet } = require('xrpl')
    const client = new Client('wss://s.altnet.rippletest.net:51233')

    async function signTransaction() {
    await client.connect()
    const { balance: balance1, wallet: wallet1 } = client.fundWallet()
    const { balance: balance2, wallet: wallet2 } = client.fundWallet()

    const transaction = {
    TransactionType: 'Payment',
    Account: wallet1.address,
    Destination: wallet2.address,
    Amount: '10'
    }

    try {
    await client.autofill(transaction)
    const { tx_blob: signed_tx_blob, hash} = await wallet1.sign(transaction)
    console.log(signed_tx_blob)
    } catch (error) {
    console.error(`Failed to sign transaction: ${error}`)
    }
    const result = await client.submit(signed_tx_blob)
    await client.disconnect()
    }

    signTransaction() -

    In order for a transaction to be validated, it must be signed by the account sending the transaction to prove That the owner is actually the one deciding to take that action.

    In this example, we created, signed, and then submitted a transaction to testnet. You may notice that the Output of sign includes a tx_blob and a hash, both of which are needed to submit & verify the results. Note: If you pass a Wallet to client.submit or client.submitAndWait it will do signing like this under the hood.

    -

    tx_blob is a binary representation of a transaction on the XRP Ledger. It's essentially a byte array +

    tx_blob is a binary representation of a transaction on the XRP Ledger. It's essentially a byte array that encodes all of the data necessary to execute the transaction, including the source address, the destination address, the amount, and any additional fields required for the specific transaction type.

    -

    hash is a unique identifier that's generated from the signed transaction data on the XRP Ledger. It's essentially +

    hash is a unique identifier that's generated from the signed transaction data on the XRP Ledger. It's essentially A cryptographic digest of the signed transaction blob, created using a hash function. The signed transaction hash is Useful for identifying and tracking specific transactions on the XRP Ledger. It can be used to query transaction Information, verify the authenticity of a transaction, and detect any tampering with the transaction data.

    - -

    Throws

    ValidationError if the transaction is already signed or does not encode/decode to same result.

    - -

    Throws

    XrplError if the issued currency being signed is XRP ignoring case.

    -
-
- -
    - -
  • -

    Verifies a signed transaction offline.

    -
    -
    -

    Parameters

    -
      -
    • -
      signedTransaction: string | Transaction
      -

      A signed transaction (hex string of signTransaction result) to be verified offline.

      -
    -

    Returns boolean

    Returns true if a signedTransaction is valid.

    - -
    -

    Throws

    Transaction is missing a signature, TxnSignature

    -
-
- -
    - -
  • -

    Derive a Wallet from a seed.

    -
    -
    -

    Parameters

    -
      -
    • -
      seed: string
      -

      The seed used to derive the wallet.

      -
    • -
    • -
      opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β masterAddress?: string;
      } = {}
      -

      (Optional) Options to derive a Wallet.

      -
      -
        -
      • -
        Optional algorithm?: ECDSA
        -

        The digital signature algorithm to generate an address for.

        -
        -
      • -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
    -

    Returns Wallet

    A Wallet derived from the seed.

    - -
-
- -
    - -
  • -

    Derives a wallet from an entropy (array of random numbers).

    -
    -
    -

    Parameters

    -
      -
    • -
      entropy: number[] | Uint8Array
      -

      An array of random numbers to generate a seed used to derive a wallet.

      -
    • -
    • -
      opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β masterAddress?: string;
      } = {}
      -

      (Optional) Options to derive a Wallet.

      -
      -
        -
      • -
        Optional algorithm?: ECDSA
        -

        The digital signature algorithm to generate an address for.

        -
        -
      • -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
    -

    Returns Wallet

    A Wallet derived from an entropy.

    - -
-
- -
    - -
  • -

    Derives a wallet from a bip39 or RFC1751 mnemonic (Defaults to bip39).

    -
    -
    -

    Parameters

    -
      -
    • -
      mnemonic: string
      -

      A string consisting of words (whitespace delimited) used to derive a wallet.

      -
    • -
    • -
      opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β derivationPath?: string;
      Β Β Β Β masterAddress?: string;
      Β Β Β Β mnemonicEncoding?: "bip39" | "rfc1751";
      } = {}
      -

      (Optional) Options to derive a Wallet.

      -
      -
        -
      • -
        Optional algorithm?: ECDSA
        -

        Only used if opts.mnemonicEncoding is 'rfc1751'. Allows the mnemonic to generate its - secp256k1 seed, or its ed25519 seed. By default, it will generate the secp256k1 seed - to match the rippled wallet_propose default algorithm.

        -
        -
      • -
      • -
        Optional derivationPath?: string
        -

        The path to derive a keypair (publicKey/privateKey). Only used for bip39 conversions.

        -
        -
      • -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
      • -
      • -
        Optional mnemonicEncoding?: "bip39" | "rfc1751"
        -

        If set to 'rfc1751', this interprets the mnemonic as a rippled RFC1751 mnemonic like - wallet_propose generates in rippled. Otherwise the function defaults to bip39 decoding.

        -
        -
    -

    Returns Wallet

    A Wallet derived from a mnemonic.

    - -
    -

    Deprecated

    since version 2.6.1. +

    ValidationError if the transaction is already signed or does not encode/decode to same result.

    +

    XrplError if the issued currency being signed is XRP ignoring case.

    +
  • Verifies a signed transaction offline.

    +

    Parameters

    • signedTransaction: string | Transaction

      A signed transaction (hex string of signTransaction result) to be verified offline.

      +

    Returns boolean

    Returns true if a signedTransaction is valid.

    +

    Transaction is missing a signature, TxnSignature

    +
  • Derives a wallet from an entropy (array of random numbers).

    +

    Parameters

    • entropy: number[] | Uint8Array

      An array of random numbers to generate a seed used to derive a wallet.

      +
    • opts: { algorithm?: ECDSA; masterAddress?: string } = {}

      (Optional) Options to derive a Wallet.

      +
      • Optionalalgorithm?: ECDSA

        The digital signature algorithm to generate an address for.

        +
      • OptionalmasterAddress?: string

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        +

    Returns Wallet

    A Wallet derived from an entropy.

    +
  • Derives a wallet from a bip39 or RFC1751 mnemonic (Defaults to bip39).

    +

    Parameters

    • mnemonic: string

      A string consisting of words (whitespace delimited) used to derive a wallet.

      +
    • opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β derivationPath?: string;
      Β Β Β Β masterAddress?: string;
      Β Β Β Β mnemonicEncoding?: "bip39" | "rfc1751";
      } = {}

      (Optional) Options to derive a Wallet.

      +
      • Optionalalgorithm?: ECDSA

        Only used if opts.mnemonicEncoding is 'rfc1751'. Allows the mnemonic to generate its +secp256k1 seed, or its ed25519 seed. By default, it will generate the secp256k1 seed +to match the rippled wallet_propose default algorithm.

        +
      • OptionalderivationPath?: string

        The path to derive a keypair (publicKey/privateKey). Only used for bip39 conversions.

        +
      • OptionalmasterAddress?: string

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        +
      • OptionalmnemonicEncoding?: "bip39" | "rfc1751"

        If set to 'rfc1751', this interprets the mnemonic as a rippled RFC1751 mnemonic like +wallet_propose generates in rippled. Otherwise the function defaults to bip39 decoding.

        +

    Returns Wallet

    A Wallet derived from a mnemonic.

    +

    since version 2.6.1. Will be deleted in version 3.0.0. This representation is currently deprecated in rippled. You should use another method to represent your keys such as a seed or public/private keypair.

    - -

    Throws

    ValidationError if unable to derive private key from mnemonic input.

    -
-
- -
    - -
  • -

    Derives a wallet from a RFC1751 mnemonic, which is how wallet_propose encodes mnemonics.

    -
    -
    -

    Parameters

    -
      -
    • -
      mnemonic: string
      -

      A string consisting of words (whitespace delimited) used to derive a wallet.

      -
    • -
    • -
      opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β masterAddress?: string;
      }
      -

      (Optional) Options to derive a Wallet.

      -
      -
        -
      • -
        Optional algorithm?: ECDSA
        -

        The digital signature algorithm to generate an address for.

        -
        -
      • -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
    -

    Returns Wallet

    A Wallet derived from a mnemonic.

    - -
-
- -
    - -
  • -

    Derives a wallet from a seed.

    -
    -
    -

    Parameters

    -
      -
    • -
      seed: string
      -

      A string used to generate a keypair (publicKey/privateKey) to derive a wallet.

      -
    • -
    • -
      opts: {
      Β Β Β Β algorithm?: ECDSA;
      Β Β Β Β masterAddress?: string;
      } = {}
      -

      (Optional) Options to derive a Wallet.

      -
      -
        -
      • -
        Optional algorithm?: ECDSA
        -

        The digital signature algorithm to generate an address for.

        -
        -
      • -
      • -
        Optional masterAddress?: string
        -

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        -
        -
    -

    Returns Wallet

    A Wallet derived from a seed.

    - -
-
- -
    - -
  • -

    generate() creates a new random Wallet. In order to make this a valid account on ledger, you must +

    ValidationError if unable to derive private key from mnemonic input.

    +
  • Derives a wallet from a seed.

    +

    Parameters

    • seed: string

      A string used to generate a keypair (publicKey/privateKey) to derive a wallet.

      +
    • opts: { algorithm?: ECDSA; masterAddress?: string } = {}

      (Optional) Options to derive a Wallet.

      +
      • Optionalalgorithm?: ECDSA

        The digital signature algorithm to generate an address for.

        +
      • OptionalmasterAddress?: string

        Include if a Wallet uses a Regular Key Pair. It must be the master address of the account.

        +

    Returns Wallet

    A Wallet derived from a seed.

    +
  • generate() creates a new random Wallet. In order to make this a valid account on ledger, you must Send XRP to it. On test networks that can be done with "faucets" which send XRP to any account which asks For it. You can call client.fundWallet() in order to generate credentials and fund the account on test networks.

    -
    -
    -

    Parameters

    -
      -
    • -
      algorithm: ECDSA = DEFAULT_ALGORITHM
      -

      The digital signature algorithm to generate an address for.

      -
    -

    Returns Wallet

    A new Wallet derived from a generated seed.

    - -
    -

    Example

    const { Wallet } = require('xrpl')
    const wallet = Wallet.generate() -
    +

    Parameters

    • algorithm: ECDSA = DEFAULT_ALGORITHM

      The digital signature algorithm to generate an address for.

      +

    Returns Wallet

    A new Wallet derived from a generated seed.

    +
    const { Wallet } = require('xrpl')
    const wallet = Wallet.generate() +
    -

    Throws

    ValidationError when signing algorithm isn't valid

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +

ValidationError when signing algorithm isn't valid

+
diff --git a/docs/classes/XRPLFaucetError.html b/docs/classes/XRPLFaucetError.html index 0abd3d5255..28582ea3f7 100644 --- a/docs/classes/XRPLFaucetError.html +++ b/docs/classes/XRPLFaucetError.html @@ -1,529 +1,32 @@ -XRPLFaucetError | xrpl
-
- -
-
-
-
- -

Class XRPLFaucetError

-
-

Error thrown when a client cannot generate a wallet from the testnet/devnet +XRPLFaucetError | xrpl

Class XRPLFaucetError

Error thrown when a client cannot generate a wallet from the testnet/devnet faucets, or when the client cannot infer the faucet URL (i.e. when the Client is connected to mainnet).

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
    - -
  • -

    Console.log in node uses util.inspect on object, and util.inspect allows +

Hierarchy (View Summary)

Constructors

Properties

data?: unknown
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

-
- -
-
- -
    - -
  • -

    Create .stack property on a target object

    -
    -
    -

    Parameters

    -
      -
    • -
      targetObject: object
    • -
    • -
      Optional constructorOpt: Function
      Optional
    -

    Returns void

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +

Returns string

The String output of the Error.

+
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/classes/XrplError.html b/docs/classes/XrplError.html index 665a95f9c7..613f9ba66c 100644 --- a/docs/classes/XrplError.html +++ b/docs/classes/XrplError.html @@ -1,532 +1,31 @@ -XrplError | xrpl
-
- -
-
-
-
- -

Class XrplError

-
-

Base Error class for xrpl.js. All Errors thrown by xrpl.js should throw +XrplError | xrpl

Class XrplError

Base Error class for xrpl.js. All Errors thrown by xrpl.js should throw XrplErrors.

-
-
-
-

Hierarchy

-
-
-
-
- -
-
-

Constructors

-
-
-

Properties

-
-
-

Methods

-
-
-

Constructors

-
- -
    - -
  • -

    Construct an XrplError.

    -
    -
    -

    Parameters

    -
      -
    • -
      message: string = ''
      -

      The error message.

      -
    • -
    • -
      Optional data: unknown
      -

      The data that caused the error.

      -
      Optional
    -

    Returns XrplError

    -
-
-

Properties

-
- -
data?: unknown
-
- -
message: string
-
- -
name: string
-
- -
stack?: string
-
- -
prepareStackTrace?: ((err, stackTraces) => any)
-
-

Type declaration

-
-
- -
stackTraceLimit: number
-
-

Methods

-
- -
    - -
  • -

    Console.log in node uses util.inspect on object, and util.inspect allows +

Hierarchy (View Summary)

Constructors

  • Construct an XrplError.

    +

    Parameters

    • message: string = ''

      The error message.

      +
    • Optionaldata: unknown

      The data that caused the error.

      +

    Returns XrplError

Properties

data?: unknown
message: string
name: string
stack?: string
prepareStackTrace?: (err: Error, stackTraces: CallSite[]) => any

Optional override for formatting stack traces

+
stackTraceLimit: number

Methods

-
- -
    - -
  • -

    Converts the Error to a human-readable String form.

    -
    -

    Returns string

    The String output of the Error.

    - -
-
- -
    - -
  • -

    Create .stack property on a target object

    -
    -
    -

    Parameters

    -
      -
    • -
      targetObject: object
    • -
    • -
      Optional constructorOpt: Function
      Optional
    -

    Returns void

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +

Returns string

The String output of the Error.

+
  • Converts the Error to a human-readable String form.

    +

    Returns string

    The String output of the Error.

    +
  • Create .stack property on a target object

    +

    Parameters

    • targetObject: object
    • OptionalconstructorOpt: Function

    Returns void

diff --git a/docs/enums/AMMClawbackFlags.html b/docs/enums/AMMClawbackFlags.html new file mode 100644 index 0000000000..1c373f965b --- /dev/null +++ b/docs/enums/AMMClawbackFlags.html @@ -0,0 +1,9 @@ +AMMClawbackFlags | xrpl

Enumeration AMMClawbackFlags

Enum representing values for AMMClawback Transaction Flags.

+

Enumeration Members

Enumeration Members

tfClawTwoAssets: 1
diff --git a/docs/enums/AMMDepositFlags.html b/docs/enums/AMMDepositFlags.html index 9bc6d6fe0e..b09371b8d4 100644 --- a/docs/enums/AMMDepositFlags.html +++ b/docs/enums/AMMDepositFlags.html @@ -1,400 +1,14 @@ -AMMDepositFlags | xrpl
-
- -
-
-
-
- -

Enumeration AMMDepositFlags

-
-

Enum representing values for AMMDeposit Transaction Flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
- -
tfLPToken: 65536
-
- -
tfLimitLPToken: 4194304
-
- -
tfOneAssetLPToken: 2097152
-
- -
tfSingleAsset: 524288
-
- -
tfTwoAsset: 1048576
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +AMMDepositFlags | xrpl

Enumeration AMMDepositFlags

Enum representing values for AMMDeposit Transaction Flags.

+

Enumeration Members

tfLimitLPToken: 4194304
tfLPToken: 65536
tfOneAssetLPToken: 2097152
tfSingleAsset: 524288
tfTwoAsset: 1048576
tfTwoAssetIfEmpty: 8388608
diff --git a/docs/enums/AMMWithdrawFlags.html b/docs/enums/AMMWithdrawFlags.html index 9dcc29dfe1..f19b710e10 100644 --- a/docs/enums/AMMWithdrawFlags.html +++ b/docs/enums/AMMWithdrawFlags.html @@ -1,414 +1,15 @@ -AMMWithdrawFlags | xrpl
-
- -
-
-
-
- -

Enumeration AMMWithdrawFlags

-
-

Enum representing values for AMMWithdrawFlags Transaction Flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
- -
tfLPToken: 65536
-
- -
tfLimitLPToken: 4194304
-
- -
tfOneAssetLPToken: 2097152
-
- -
tfOneAssetWithdrawAll: 262144
-
- -
tfSingleAsset: 524288
-
- -
tfTwoAsset: 1048576
-
- -
tfWithdrawAll: 131072
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +AMMWithdrawFlags | xrpl

Enumeration AMMWithdrawFlags

Enum representing values for AMMWithdrawFlags Transaction Flags.

+

Enumeration Members

tfLimitLPToken: 4194304
tfLPToken: 65536
tfOneAssetLPToken: 2097152
tfOneAssetWithdrawAll: 262144
tfSingleAsset: 524288
tfTwoAsset: 1048576
tfWithdrawAll: 131072
diff --git a/docs/enums/AccountSetAsfFlags.html b/docs/enums/AccountSetAsfFlags.html index 452c741ed7..d9cfeb4e81 100644 --- a/docs/enums/AccountSetAsfFlags.html +++ b/docs/enums/AccountSetAsfFlags.html @@ -1,520 +1,43 @@ -AccountSetAsfFlags | xrpl
-
- -
-
-
-
- -

Enumeration AccountSetAsfFlags

-
-

Enum for AccountSet Flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
- -
asfAccountTxnID: 5
-

Track the ID of this account's most recent transaction. Required for +AccountSetAsfFlags | xrpl

Enumeration AccountSetAsfFlags

Enum for AccountSet Flags.

+

Enumeration Members

asfAccountTxnID: 5

Track the ID of this account's most recent transaction. Required for AccountTxnID.

-
-
-
- -
asfAllowTrustLineClawback: 16
-

Permanently gain the ability to claw back issued IOUs

-
-
-
- -
asfAuthorizedNFTokenMinter: 10
-

Allow another account to mint and burn tokens on behalf of this account.

-
-
-
- -
asfDefaultRipple: 8
-

Enable rippling on this account's trust lines by default.

-
-
-
- -
asfDepositAuth: 9
-

Enable Deposit Authorization on this account.

-
-
-
- -
asfDisableMaster: 4
-

Disallow use of the master key pair. Can only be enabled if the account +

asfAllowTrustLineClawback: 16

Permanently gain the ability to claw back issued IOUs

+
asfAuthorizedNFTokenMinter: 10

Allow another account to mint and burn tokens on behalf of this account.

+
asfDefaultRipple: 8

Enable rippling on this account's trust lines by default.

+
asfDepositAuth: 9

Enable Deposit Authorization on this account.

+
asfDisableMaster: 4

Disallow use of the master key pair. Can only be enabled if the account has configured another way to sign transactions, such as a Regular Key or a Signer List.

-
-
-
- -
asfDisallowIncomingCheck: 13
-

Disallow other accounts from creating incoming Checks

-
-
-
- -
asfDisallowIncomingNFTokenOffer: 12
-

Disallow other accounts from creating incoming NFTOffers

-
-
-
- -
asfDisallowIncomingPayChan: 14
-

Disallow other accounts from creating incoming PayChannels

-
-
-
- -
asfDisallowIncomingTrustline: 15
-

Disallow other accounts from creating incoming Trustlines

-
-
-
- -
asfDisallowXRP: 3
-

XRP should not be sent to this account.

-
-
-
- -
asfGlobalFreeze: 7
-

Freeze all assets issued by this account.

-
-
-
- -
asfNoFreeze: 6
-

Permanently give up the ability to freeze individual trust lines or +

asfDisallowIncomingCheck: 13

Disallow other accounts from creating incoming Checks

+
asfDisallowIncomingNFTokenOffer: 12

Disallow other accounts from creating incoming NFTOffers

+
asfDisallowIncomingPayChan: 14

Disallow other accounts from creating incoming PayChannels

+
asfDisallowIncomingTrustline: 15

Disallow other accounts from creating incoming Trustlines

+
asfDisallowXRP: 3

XRP should not be sent to this account.

+
asfGlobalFreeze: 7

Freeze all assets issued by this account.

+
asfNoFreeze: 6

Permanently give up the ability to freeze individual trust lines or disable Global Freeze. This flag can never be disabled after being enabled.

-
-
-
- -
asfRequireAuth: 2
-

Require authorization for users to hold balances issued by this address +

asfRequireAuth: 2

Require authorization for users to hold balances issued by this address can only be enabled if the address has no trust lines connected to it.

-
-
-
- -
asfRequireDest: 1
-

Require a destination tag to send transactions to this account.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
asfRequireDest: 1

Require a destination tag to send transactions to this account.

+
diff --git a/docs/enums/AccountSetTfFlags.html b/docs/enums/AccountSetTfFlags.html index 6e2190554a..f3d1a0342f 100644 --- a/docs/enums/AccountSetTfFlags.html +++ b/docs/enums/AccountSetTfFlags.html @@ -1,425 +1,20 @@ -AccountSetTfFlags | xrpl
-
- -
-
-
-
- -

Enumeration AccountSetTfFlags

-
-

Enum for AccountSet Transaction Flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
- -
tfAllowXRP: 2097152
-

The same as ClearFlag: asfDisallowXRP.

-
-
-
- -
tfDisallowXRP: 1048576
-

The same as SetFlag: asfDisallowXRP.

-
-
-
- -
tfOptionalAuth: 524288
-

The same as ClearFlag: asfRequireAuth.

-
-
-
- -
tfOptionalDestTag: 131072
-

The same as ClearFlag: asfRequireDest.

-
-
-
- -
tfRequireAuth: 262144
-

The same as SetFlag: asfRequireAuth.

-
-
-
- -
tfRequireDestTag: 65536
-

The same as SetFlag: asfRequireDest.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +AccountSetTfFlags | xrpl

Enumeration AccountSetTfFlags

Enum for AccountSet Transaction Flags.

+

Enumeration Members

tfAllowXRP: 2097152

The same as ClearFlag: asfDisallowXRP.

+
tfDisallowXRP: 1048576

The same as SetFlag: asfDisallowXRP.

+
tfOptionalAuth: 524288

The same as ClearFlag: asfRequireAuth.

+
tfOptionalDestTag: 131072

The same as ClearFlag: asfRequireDest.

+
tfRequireAuth: 262144

The same as SetFlag: asfRequireAuth.

+
tfRequireDestTag: 65536

The same as SetFlag: asfRequireDest.

+
diff --git a/docs/enums/ECDSA.html b/docs/enums/ECDSA.html index 1cbb20c030..15ae11e309 100644 --- a/docs/enums/ECDSA.html +++ b/docs/enums/ECDSA.html @@ -1,375 +1,9 @@ -ECDSA | xrpl
-
- -
-
-
-
- -

Enumeration ECDSA

-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
ed25519: "ed25519"
-
- -
secp256k1: "ecdsa-secp256k1"
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +ECDSA | xrpl

Enumeration ECDSA

Enumeration Members

Enumeration Members

ed25519: "ed25519"
secp256k1: "ecdsa-secp256k1"
diff --git a/docs/enums/EnableAmendmentFlags.html b/docs/enums/EnableAmendmentFlags.html index c9ff9a12c9..9b2e1c1ee9 100644 --- a/docs/enums/EnableAmendmentFlags.html +++ b/docs/enums/EnableAmendmentFlags.html @@ -1,385 +1,12 @@ -EnableAmendmentFlags | xrpl
-
- -
-
-
-
- -

Enumeration EnableAmendmentFlags

-
-

Transaction Flags for an EnableAmendment Transaction.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfGotMajority: 65536
-

Support for this amendment increased to at least 80% of trusted validators starting with this ledger version.

-
-
-
- -
tfLostMajority: 131072
-

Support for this amendment decreased to less than 80% of trusted validators starting with this ledger version.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +EnableAmendmentFlags | xrpl

Enumeration EnableAmendmentFlags

Transaction Flags for an EnableAmendment Transaction.

+

Enumeration Members

Enumeration Members

tfGotMajority: 65536

Support for this amendment increased to at least 80% of trusted validators starting with this ledger version.

+
tfLostMajority: 131072

Support for this amendment decreased to less than 80% of trusted validators starting with this ledger version.

+
diff --git a/docs/enums/LedgerEntry.AccountRootFlags.html b/docs/enums/LedgerEntry.AccountRootFlags.html index c328f3e6ab..af7a7e13b6 100644 --- a/docs/enums/LedgerEntry.AccountRootFlags.html +++ b/docs/enums/LedgerEntry.AccountRootFlags.html @@ -1,553 +1,38 @@ -AccountRootFlags | xrpl
-
- -
-
-
-
- -

Enumeration AccountRootFlags

-
-
-
- -
-
-

Enumeration Members

-
- -
lsfAMM: 33554432
-

This account is an Automated Market Maker (AMM) instance.

-
-
-
- -
lsfAllowTrustLineClawback: 2147483648
-

This address can claw back issued IOUs. Once enabled, cannot be disabled.

-
-
-
- -
lsfDefaultRipple: 8388608
-

Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

-
-
-
- -
lsfDepositAuth: 16777216
-

This account can only receive funds from transactions it sends, and from preauthorized accounts. +AccountRootFlags | xrpl

Enumeration AccountRootFlags

Enumeration Members

lsfAllowTrustLineClawback: 2147483648

This address can claw back issued IOUs. Once enabled, cannot be disabled.

+
lsfAMM: 33554432

This account is an Automated Market Maker (AMM) instance.

+
lsfDefaultRipple: 8388608

Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

+
lsfDepositAuth: 16777216

This account can only receive funds from transactions it sends, and from preauthorized accounts. (It has DepositAuth enabled.)

-
-
-
- -
lsfDisableMaster: 1048576
-

Disallows use of the master key to sign transactions for this account.

-
-
-
- -
lsfDisallowIncomingCheck: 134217728
-

Disallow incoming Checks from other accounts.

-
-
-
- -
lsfDisallowIncomingNFTokenOffer: 67108864
-

Disallow incoming NFTOffers from other accounts.

-
-
-
- -
lsfDisallowIncomingPayChan: 268435456
-

Disallow incoming PayChannels from other accounts.

-
-
-
- -
lsfDisallowIncomingTrustline: 536870912
-

Disallow incoming Trustlines from other accounts.

-
-
-
- -
lsfDisallowXRP: 524288
-

Client applications should not send XRP to this account. Not enforced by rippled.

-
-
-
- -
lsfGlobalFreeze: 4194304
-

All assets issued by this address are frozen.

-
-
-
- -
lsfNoFreeze: 2097152
-

This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

-
-
-
- -
lsfPasswordSpent: 65536
-

The account has used its free SetRegularKey transaction.

-
-
-
- -
lsfRequireAuth: 262144
-

This account must individually approve other users for those users to hold this account's issued currencies.

-
-
-
- -
lsfRequireDestTag: 131072
-

Requires incoming payments to specify a Destination Tag.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
lsfDisableMaster: 1048576

Disallows use of the master key to sign transactions for this account.

+
lsfDisallowIncomingCheck: 134217728

Disallow incoming Checks from other accounts.

+
lsfDisallowIncomingNFTokenOffer: 67108864

Disallow incoming NFTOffers from other accounts.

+
lsfDisallowIncomingPayChan: 268435456

Disallow incoming PayChannels from other accounts.

+
lsfDisallowIncomingTrustline: 536870912

Disallow incoming Trustlines from other accounts.

+
lsfDisallowXRP: 524288

Client applications should not send XRP to this account. Not enforced by rippled.

+
lsfGlobalFreeze: 4194304

All assets issued by this address are frozen.

+
lsfNoFreeze: 2097152

This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

+
lsfPasswordSpent: 65536

The account has used its free SetRegularKey transaction.

+
lsfRequireAuth: 262144

This account must individually approve other users for those users to hold this account's issued currencies.

+
lsfRequireDestTag: 131072

Requires incoming payments to specify a Destination Tag.

+
diff --git a/docs/enums/LedgerEntry.OfferFlags.html b/docs/enums/LedgerEntry.OfferFlags.html index 5977657358..7d7502afed 100644 --- a/docs/enums/LedgerEntry.OfferFlags.html +++ b/docs/enums/LedgerEntry.OfferFlags.html @@ -1,416 +1,9 @@ -OfferFlags | xrpl
-
- -
-
-
-
- -

Enumeration OfferFlags

-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
lsfPassive: 65536
-
- -
lsfSell: 131072
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +OfferFlags | xrpl

Enumeration OfferFlags

Enumeration Members

Enumeration Members

lsfPassive: 65536
lsfSell: 131072
diff --git a/docs/enums/LedgerEntry.RippleStateFlags.html b/docs/enums/LedgerEntry.RippleStateFlags.html index 683e5fa610..66850b59ff 100644 --- a/docs/enums/LedgerEntry.RippleStateFlags.html +++ b/docs/enums/LedgerEntry.RippleStateFlags.html @@ -1,458 +1,18 @@ -RippleStateFlags | xrpl
-
- -
-
-
-
- -

Enumeration RippleStateFlags

-
-
-
- -
-
-

Enumeration Members

-
- -
lsfHighAuth: 524288
-
- -
lsfHighFreeze: 8388608
-
- -
lsfHighNoRipple: 2097152
-
- -
lsfHighReserve: 131072
-
- -
lsfLowAuth: 262144
-
- -
lsfLowFreeze: 4194304
-
- -
lsfLowNoRipple: 1048576
-
- -
lsfLowReserve: 65536
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +RippleStateFlags | xrpl

Enumeration RippleStateFlags

Enumeration Members

lsfAMMNode: 16777216
lsfHighAuth: 524288
lsfHighDeepFreeze: 67108864
lsfHighFreeze: 8388608
lsfHighNoRipple: 2097152
lsfHighReserve: 131072
lsfLowAuth: 262144
lsfLowDeepFreeze: 33554432
lsfLowFreeze: 4194304
lsfLowNoRipple: 1048576
lsfLowReserve: 65536
diff --git a/docs/enums/LedgerEntry.SignerListFlags.html b/docs/enums/LedgerEntry.SignerListFlags.html index 9d25a9f052..bcb89d3996 100644 --- a/docs/enums/LedgerEntry.SignerListFlags.html +++ b/docs/enums/LedgerEntry.SignerListFlags.html @@ -1,409 +1,8 @@ -SignerListFlags | xrpl
-
- -
-
-
-
- -

Enumeration SignerListFlags

-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
lsfOneOwnerCount: 65536
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +SignerListFlags | xrpl

Enumeration SignerListFlags

Enumeration Members

Enumeration Members

lsfOneOwnerCount: 65536
diff --git a/docs/enums/MPTokenAuthorizeFlags.html b/docs/enums/MPTokenAuthorizeFlags.html new file mode 100644 index 0000000000..c887742622 --- /dev/null +++ b/docs/enums/MPTokenAuthorizeFlags.html @@ -0,0 +1,15 @@ +MPTokenAuthorizeFlags | xrpl

Enumeration MPTokenAuthorizeFlags

Transaction Flags for an MPTokenAuthorize Transaction.

+

Enumeration Members

Enumeration Members

tfMPTUnauthorize: 1

If set and transaction is submitted by a holder, it indicates that the holder no +longer wants to hold the MPToken, which will be deleted as a result. If the the holder's +MPToken has non-zero balance while trying to set this flag, the transaction will fail. On +the other hand, if set and transaction is submitted by an issuer, it would mean that the +issuer wants to unauthorize the holder (only applicable for allow-listing), +which would unset the lsfMPTAuthorized flag on the MPToken.

+
diff --git a/docs/enums/MPTokenIssuanceCreateFlags.html b/docs/enums/MPTokenIssuanceCreateFlags.html new file mode 100644 index 0000000000..f5d573a3f1 --- /dev/null +++ b/docs/enums/MPTokenIssuanceCreateFlags.html @@ -0,0 +1,25 @@ +MPTokenIssuanceCreateFlags | xrpl

Enumeration MPTokenIssuanceCreateFlags

Transaction Flags for an MPTokenIssuanceCreate Transaction.

+

Enumeration Members

tfMPTCanClawback: 64

If set, indicates that the issuer may use the Clawback transaction +to clawback value from individual holders.

+
tfMPTCanEscrow: 8

If set, indicates that individual holders can place their balances into an escrow.

+
tfMPTCanLock: 2

If set, indicates that the MPT can be locked both individually and globally. +If not set, the MPT cannot be locked in any way.

+
tfMPTCanTrade: 16

If set, indicates that individual holders can trade their balances +using the XRP Ledger DEX or AMM.

+
tfMPTCanTransfer: 32

If set, indicates that tokens may be transferred to other accounts +that are not the issuer.

+
tfMPTRequireAuth: 4

If set, indicates that individual holders must be authorized. +This enables issuers to limit who can hold their assets.

+
diff --git a/docs/enums/MPTokenIssuanceSetFlags.html b/docs/enums/MPTokenIssuanceSetFlags.html new file mode 100644 index 0000000000..f12d1b6cf9 --- /dev/null +++ b/docs/enums/MPTokenIssuanceSetFlags.html @@ -0,0 +1,12 @@ +MPTokenIssuanceSetFlags | xrpl

Enumeration MPTokenIssuanceSetFlags

Transaction Flags for an MPTokenIssuanceSet Transaction.

+

Enumeration Members

Enumeration Members

tfMPTLock: 1

If set, indicates that issuer locks the MPT

+
tfMPTUnlock: 2

If set, indicates that issuer unlocks the MPT

+
diff --git a/docs/enums/NFTokenCreateOfferFlags.html b/docs/enums/NFTokenCreateOfferFlags.html index 0a62b71df5..19e8490ec5 100644 --- a/docs/enums/NFTokenCreateOfferFlags.html +++ b/docs/enums/NFTokenCreateOfferFlags.html @@ -1,376 +1,11 @@ -NFTokenCreateOfferFlags | xrpl
-
- -
-
-
-
- -

Enumeration NFTokenCreateOfferFlags

-
-

Transaction Flags for an NFTokenCreateOffer Transaction.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfSellNFToken: 1
-

If set, indicates that the offer is a sell offer. +NFTokenCreateOfferFlags | xrpl

Enumeration NFTokenCreateOfferFlags

Transaction Flags for an NFTokenCreateOffer Transaction.

+

Enumeration Members

Enumeration Members

tfSellNFToken: 1

If set, indicates that the offer is a sell offer. Otherwise, it is a buy offer.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
diff --git a/docs/enums/NFTokenMintFlags.html b/docs/enums/NFTokenMintFlags.html index 54a14d4d49..f3168ba94b 100644 --- a/docs/enums/NFTokenMintFlags.html +++ b/docs/enums/NFTokenMintFlags.html @@ -1,410 +1,23 @@ -NFTokenMintFlags | xrpl
-
- -
-
-
-
- -

Enumeration NFTokenMintFlags

-
-

Transaction Flags for an NFTokenMint Transaction.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfBurnable: 1
-

If set, indicates that the minted token may be burned by the issuer even +NFTokenMintFlags | xrpl

Enumeration NFTokenMintFlags

Transaction Flags for an NFTokenMint Transaction.

+

Enumeration Members

tfBurnable: 1

If set, indicates that the minted token may be burned by the issuer even if the issuer does not currently hold the token. The current holder of the token may always burn it.

-
-
-
- -
tfOnlyXRP: 2
-

If set, indicates that the token may only be offered or sold for XRP.

-
-
-
- -
tfTransferable: 8
-

If set, indicates that this NFT can be transferred. This flag has no +

tfMutable: 16

If set, indicates that this NFT's URI can be modified.

+
tfOnlyXRP: 2

If set, indicates that the token may only be offered or sold for XRP.

+
tfTransferable: 8

If set, indicates that this NFT can be transferred. This flag has no effect if the token is being transferred from the issuer or to the issuer.

-
-
-
- -
tfTrustLine: 4
-

If set, indicates that the issuer wants a trustline to be automatically +

tfTrustLine: 4

If set, indicates that the issuer wants a trustline to be automatically created.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
diff --git a/docs/enums/OfferCreateFlags.html b/docs/enums/OfferCreateFlags.html index 431d338b95..8ad947164b 100644 --- a/docs/enums/OfferCreateFlags.html +++ b/docs/enums/OfferCreateFlags.html @@ -1,417 +1,28 @@ -OfferCreateFlags | xrpl
-
- -
-
-
-
- -

Enumeration OfferCreateFlags

-
-

Transaction Flags for an OfferCreate Transaction.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfFillOrKill: 262144
-

Treat the offer as a Fill or Kill order . Only try to match existing +OfferCreateFlags | xrpl

Enumeration OfferCreateFlags

Transaction Flags for an OfferCreate Transaction.

+

Enumeration Members

tfFillOrKill: 262144

Treat the offer as a Fill or Kill order . Only try to match existing offers in the ledger, and only do so if the entire TakerPays quantity can be obtained. If the fix1578 amendment is enabled and the offer cannot be executed when placed, the transaction has the result code tecKILLED; otherwise, the transaction uses the result code tesSUCCESS even when it was killed without trading any currency.

-
-
-
- -
tfImmediateOrCancel: 131072
-

Treat the offer as an Immediate or Cancel order. If enabled, the offer +

tfImmediateOrCancel: 131072

Treat the offer as an Immediate or Cancel order. If enabled, the offer never becomes a ledger object: it only tries to match existing offers in the ledger. If the offer cannot match any offers immediately, it executes "successfully" without trading any currency. In this case, the transaction has the result code tesSUCCESS, but creates no Offer objects in the ledger.

-
-
-
- -
tfPassive: 65536
-

If enabled, the offer does not consume offers that exactly match it, and +

tfPassive: 65536

If enabled, the offer does not consume offers that exactly match it, and instead becomes an Offer object in the ledger. It still consumes offers that cross it.

-
-
-
- -
tfSell: 524288
-

Exchange the entire TakerGets amount, even if it means obtaining more than +

tfSell: 524288

Exchange the entire TakerGets amount, even if it means obtaining more than the TakerPays amount in exchange.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
diff --git a/docs/enums/PaymentChannelClaimFlags.html b/docs/enums/PaymentChannelClaimFlags.html index 842c295ad0..5bca833685 100644 --- a/docs/enums/PaymentChannelClaimFlags.html +++ b/docs/enums/PaymentChannelClaimFlags.html @@ -1,397 +1,24 @@ -PaymentChannelClaimFlags | xrpl
-
- -
-
-
-
- -

Enumeration PaymentChannelClaimFlags

-
-

Enum representing values for PaymentChannelClaim transaction flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfClose: 131072
-

Request to close the channel. Only the channel source and destination +PaymentChannelClaimFlags | xrpl

Enumeration PaymentChannelClaimFlags

Enum representing values for PaymentChannelClaim transaction flags.

+

Enumeration Members

Enumeration Members

tfClose: 131072

Request to close the channel. Only the channel source and destination addresses can use this flag. This flag closes the channel immediately if it has no more XRP allocated to it after processing the current claim, or if the destination address uses it. If the source address uses this flag when the channel still holds XRP, this schedules the channel to close after SettleDelay seconds have passed. (Specifically, this sets the Expiration of -the channel to the close time of the previous ledger plus the channel's +the channel to the close time of the previous ledger plus the channel's SettleDelay time, unless the channel already has an earlier Expiration time.) If the destination address uses this flag when the channel still holds XRP, any XRP that remains after processing the claim is returned to the source address.

-
-
-
- -
tfRenew: 65536
-

Clear the channel's Expiration time. (Expiration is different from the -channel's immutable CancelAfter time.) Only the source address of the +

tfRenew: 65536

Clear the channel's Expiration time. (Expiration is different from the +channel's immutable CancelAfter time.) Only the source address of the payment channel can use this flag.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
diff --git a/docs/enums/PaymentFlags.html b/docs/enums/PaymentFlags.html index 19767c79ce..12f8143076 100644 --- a/docs/enums/PaymentFlags.html +++ b/docs/enums/PaymentFlags.html @@ -1,401 +1,20 @@ -PaymentFlags | xrpl
-
- -
-
-
-
- -

Enumeration PaymentFlags

-
-

Enum representing values for Payment Transaction Flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfLimitQuality: 262144
-

Only take paths where all the conversions have an input:output ratio that +PaymentFlags | xrpl

Enumeration PaymentFlags

Enum representing values for Payment Transaction Flags.

+

Enumeration Members

tfLimitQuality: 262144

Only take paths where all the conversions have an input:output ratio that is equal or better than the ratio of Amount:SendMax. See Limit Quality for details.

-
-
-
- -
tfNoDirectRipple: 65536
-

Do not use the default path; only use paths included in the Paths field. +

tfNoRippleDirect: 65536

Do not use the default path; only use paths included in the Paths field. This is intended to force the transaction to take arbitrage opportunities. Most clients do not need this.

-
-
-
- -
tfPartialPayment: 131072
-

If the specified Amount cannot be sent without spending more than SendMax, +

tfPartialPayment: 131072

If the specified Amount cannot be sent without spending more than SendMax, reduce the received amount instead of failing outright. See Partial. Payments for more details.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
diff --git a/docs/enums/TrustSetFlags.html b/docs/enums/TrustSetFlags.html index 2fc33ea7c1..b3045cd321 100644 --- a/docs/enums/TrustSetFlags.html +++ b/docs/enums/TrustSetFlags.html @@ -1,417 +1,24 @@ -TrustSetFlags | xrpl
-
- -
-
-
-
- -

Enumeration TrustSetFlags

-
-

Enum representing values of TrustSet transaction flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
- -
tfClearFreeze: 2097152
-

Unfreeze the trust line.

-
-
-
- -
tfClearNoRipple: 262144
-

Disable the No Ripple flag, allowing rippling on this trust line.

-
-
-
- -
tfSetFreeze: 1048576
-

Freeze the trust line.

-
-
-
- -
tfSetNoRipple: 131072
-

Enable the No Ripple flag, which blocks rippling between two trust lines. -of the same currency if this flag is enabled on both.

-
-
-
- -
tfSetfAuth: 65536
-

Authorize the other party to hold currency issued by this account. (No +TrustSetFlags | xrpl

Enumeration TrustSetFlags

Enum representing values of TrustSet transaction flags.

+

Enumeration Members

tfClearDeepFreeze: 8388608

Clear a Deep-Frozen trustline

+
tfClearFreeze: 2097152

Unfreeze the trust line.

+
tfClearNoRipple: 262144

Disable the No Ripple flag, allowing rippling on this trust line.

+
tfSetDeepFreeze: 4194304

Allowed only if the trustline is already regularly frozen, or if tfSetFreeze is set in the same transaction.

+
tfSetfAuth: 65536

Authorize the other party to hold currency issued by this account. (No effect unless using the asfRequireAuth AccountSet flag.) Cannot be unset.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +
tfSetFreeze: 1048576

Freeze the trust line.

+
tfSetNoRipple: 131072

Enable the No Ripple flag, which blocks rippling between two trust lines. +of the same currency if this flag is enabled on both.

+
diff --git a/docs/enums/XChainModifyBridgeFlags.html b/docs/enums/XChainModifyBridgeFlags.html index 1d8745faee..31aa42cbd2 100644 --- a/docs/enums/XChainModifyBridgeFlags.html +++ b/docs/enums/XChainModifyBridgeFlags.html @@ -1,375 +1,10 @@ -XChainModifyBridgeFlags | xrpl
-
- -
-
-
-
- -

Enumeration XChainModifyBridgeFlags

-
-

Enum representing values of XChainModifyBridge transaction flags.

-
-
-
-
-
- -
-
-

Enumeration Members

-
-
-

Enumeration Members

-
- -
tfClearAccountCreateAmount: 65536
-

Clears the MinAccountCreateAmount of the bridge.

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +XChainModifyBridgeFlags | xrpl

Enumeration XChainModifyBridgeFlags

Enum representing values of XChainModifyBridge transaction flags.

+

Enumeration Members

Enumeration Members

tfClearAccountCreateAmount: 65536

Clears the MinAccountCreateAmount of the bridge.

+
diff --git a/docs/functions/classicAddressToXAddress.html b/docs/functions/classicAddressToXAddress.html index 7eaf5626a7..c88a3716f2 100644 --- a/docs/functions/classicAddressToXAddress.html +++ b/docs/functions/classicAddressToXAddress.html @@ -1,361 +1,7 @@ -classicAddressToXAddress | xrpl
-
- -
-
-
-
- -

Function classicAddressToXAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      classicAddress: string
    • -
    • -
      tag: number | false
    • -
    • -
      test: boolean
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +classicAddressToXAddress | xrpl

Function classicAddressToXAddress

  • Parameters

    • classicAddress: string
    • tag: number | false
    • test: boolean

    Returns string

diff --git a/docs/functions/convertHexToString.html b/docs/functions/convertHexToString.html index 642dc78472..f2ae847558 100644 --- a/docs/functions/convertHexToString.html +++ b/docs/functions/convertHexToString.html @@ -1,369 +1,12 @@ -convertHexToString | xrpl
-
- -
-
-
-
- -

Function convertHexToString

-
-
    - -
  • -

    Converts hex to its string equivalent. Useful to read the Domain field and some Memos.

    -
    -
    -

    Parameters

    -
      -
    • -
      hex: string
      -

      The hex to convert to a string.

      -
    • -
    • -
      encoding: string = 'utf8'
      -

      The encoding to use. Defaults to 'utf8' (UTF-8). 'ascii' is also allowed.

      -
    -

    Returns string

    The converted string.

    - -
    -

    Deprecated

    use @xrplf/isomorphic/utils's hexToString

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +convertHexToString | xrpl

Function convertHexToString

  • Converts hex to its string equivalent. Useful to read the Domain field and some Memos.

    +

    Parameters

    • hex: string

      The hex to convert to a string.

      +
    • encoding: string = 'utf8'

      The encoding to use. Defaults to 'utf8' (UTF-8). 'ascii' is also allowed.

      +

    Returns string

    The converted string.

    +

    use @xrplf/isomorphic/utils's hexToString

    +
diff --git a/docs/functions/convertStringToHex.html b/docs/functions/convertStringToHex.html index 3d5da765ec..6fc565af5f 100644 --- a/docs/functions/convertStringToHex.html +++ b/docs/functions/convertStringToHex.html @@ -1,365 +1,11 @@ -convertStringToHex | xrpl
-
- -
-
-
-
- -

Function convertStringToHex

-
-
    - -
  • -

    Converts a string to its hex equivalent. Useful for Memos.

    -
    -
    -

    Parameters

    -
      -
    • -
      string: string
      -

      The string to convert to Hex.

      -
    -

    Returns string

    The Hex equivalent of the string.

    - -
    -

    Deprecated

    use @xrplf/isomorphic/utils's stringToHex

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +convertStringToHex | xrpl

Function convertStringToHex

  • Converts a string to its hex equivalent. Useful for Memos.

    +

    Parameters

    • string: string

      The string to convert to Hex.

      +

    Returns string

    The Hex equivalent of the string.

    +

    use @xrplf/isomorphic/utils's stringToHex

    +
diff --git a/docs/functions/convertTxFlagsToNumber.html b/docs/functions/convertTxFlagsToNumber.html new file mode 100644 index 0000000000..1d295feb65 --- /dev/null +++ b/docs/functions/convertTxFlagsToNumber.html @@ -0,0 +1,10 @@ +convertTxFlagsToNumber | xrpl

Function convertTxFlagsToNumber

diff --git a/docs/functions/decimalToQuality.html b/docs/functions/decimalToQuality.html index 5dd8d04cb5..74d8285bbb 100644 --- a/docs/functions/decimalToQuality.html +++ b/docs/functions/decimalToQuality.html @@ -1,367 +1,13 @@ -decimalToQuality | xrpl
-
- -
-
-
-
- -

Function decimalToQuality

-
-
diff --git a/docs/functions/decimalToTransferRate.html b/docs/functions/decimalToTransferRate.html index e3e10c793f..d1bdfe71df 100644 --- a/docs/functions/decimalToTransferRate.html +++ b/docs/functions/decimalToTransferRate.html @@ -1,366 +1,12 @@ -decimalToTransferRate | xrpl
-
- -
-
-
-
- -

Function decimalToTransferRate

-
-
diff --git a/docs/functions/decode.html b/docs/functions/decode.html index d3e81d5d6f..3622ec68c9 100644 --- a/docs/functions/decode.html +++ b/docs/functions/decode.html @@ -1,363 +1,10 @@ -decode | xrpl
-
- -
-
-
-
- -

Function decode

-
-
    - -
  • -

    Decodes a hex string into a transaction | ledger entry

    -
    -
    -

    Parameters

    -
      -
    • -
      hex: string
      -

      hex string in the XRPL serialization format.

      -
    -

    Returns Record<string, unknown>

    The hex string decoded according to XRPL serialization format.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decode | xrpl

Function decode

  • Decodes a hex string into a transaction | ledger entry

    +

    Parameters

    • hex: string

      hex string in the XRPL serialization format.

      +

    Returns Record<string, unknown>

    The hex string decoded according to XRPL serialization format.

    +
diff --git a/docs/functions/decodeAccountID.html b/docs/functions/decodeAccountID.html index 461127cb0b..c170b55895 100644 --- a/docs/functions/decodeAccountID.html +++ b/docs/functions/decodeAccountID.html @@ -1,357 +1,7 @@ -decodeAccountID | xrpl
-
- -
-
-
-
- -

Function decodeAccountID

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      accountId: string
    -

    Returns Uint8Array

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decodeAccountID | xrpl

Function decodeAccountID

  • Parameters

    • accountId: string

    Returns Uint8Array

diff --git a/docs/functions/decodeAccountPublic.html b/docs/functions/decodeAccountPublic.html index 7a8d8c121b..0b26f2574e 100644 --- a/docs/functions/decodeAccountPublic.html +++ b/docs/functions/decodeAccountPublic.html @@ -1,357 +1,7 @@ -decodeAccountPublic | xrpl
-
- -
-
-
-
- -

Function decodeAccountPublic

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      base58string: string
    -

    Returns Uint8Array

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decodeAccountPublic | xrpl

Function decodeAccountPublic

  • Parameters

    • base58string: string

    Returns Uint8Array

diff --git a/docs/functions/decodeNodePublic.html b/docs/functions/decodeNodePublic.html index a251251fc0..4d445f22b0 100644 --- a/docs/functions/decodeNodePublic.html +++ b/docs/functions/decodeNodePublic.html @@ -1,357 +1,7 @@ -decodeNodePublic | xrpl
-
- -
-
-
-
- -

Function decodeNodePublic

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      base58string: string
    -

    Returns Uint8Array

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decodeNodePublic | xrpl

Function decodeNodePublic

  • Parameters

    • base58string: string

    Returns Uint8Array

diff --git a/docs/functions/decodeSeed.html b/docs/functions/decodeSeed.html index 322287a4ed..9fce063b74 100644 --- a/docs/functions/decodeSeed.html +++ b/docs/functions/decodeSeed.html @@ -1,373 +1,7 @@ -decodeSeed | xrpl
-
- -
-
-
-
- -

Function decodeSeed

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      seed: string
    • -
    • -
      Optional opts: {
      Β Β Β Β expectedLength: number;
      Β Β Β Β versionTypes: ["ed25519", "secp256k1"];
      Β Β Β Β versions: (number | number[])[];
      }
      Optional -
        -
      • -
        expectedLength: number
      • -
      • -
        versionTypes: ["ed25519", "secp256k1"]
      • -
      • -
        versions: (number | number[])[]
    -

    Returns {
    Β Β Β Β bytes: Uint8Array;
    Β Β Β Β type: "ed25519" | "secp256k1" | null;
    Β Β Β Β version: number[];
    }

    -
      -
    • -
      bytes: Uint8Array
    • -
    • -
      type: "ed25519" | "secp256k1" | null
    • -
    • -
      version: number[]
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decodeSeed | xrpl

Function decodeSeed

  • Parameters

    • seed: string
    • Optionalopts: {
      Β Β Β Β expectedLength: number;
      Β Β Β Β versions: (number | number[])[];
      Β Β Β Β versionTypes: ["ed25519", "secp256k1"];
      }

    Returns { bytes: Uint8Array; type: null | "ed25519" | "secp256k1"; version: number[] }

diff --git a/docs/functions/decodeXAddress.html b/docs/functions/decodeXAddress.html index f3109df295..a762e1b180 100644 --- a/docs/functions/decodeXAddress.html +++ b/docs/functions/decodeXAddress.html @@ -1,364 +1,7 @@ -decodeXAddress | xrpl
-
- -
-
-
-
- -

Function decodeXAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      xAddress: string
    -

    Returns {
    Β Β Β Β accountId: Uint8Array;
    Β Β Β Β tag: number | false;
    Β Β Β Β test: boolean;
    }

    -
      -
    • -
      accountId: Uint8Array
    • -
    • -
      tag: number | false
    • -
    • -
      test: boolean
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +decodeXAddress | xrpl

Function decodeXAddress

  • Parameters

    • xAddress: string

    Returns { accountId: Uint8Array; tag: number | false; test: boolean }

diff --git a/docs/functions/deriveAddress.html b/docs/functions/deriveAddress.html index 4044c387fa..b226972064 100644 --- a/docs/functions/deriveAddress.html +++ b/docs/functions/deriveAddress.html @@ -1,357 +1,7 @@ -deriveAddress | xrpl
-
- -
-
-
-
- -

Function deriveAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      publicKey: string
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +deriveAddress | xrpl

Function deriveAddress

  • Parameters

    • publicKey: string

    Returns string

diff --git a/docs/functions/deriveKeypair.html b/docs/functions/deriveKeypair.html index 447c64b4de..86d0d5aa82 100644 --- a/docs/functions/deriveKeypair.html +++ b/docs/functions/deriveKeypair.html @@ -1,366 +1,7 @@ -deriveKeypair | xrpl
-
- -
-
-
-
- -

Function deriveKeypair

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      seed: string
    • -
    • -
      Optional options: {
      Β Β Β Β accountIndex?: number;
      Β Β Β Β algorithm?: Algorithm;
      Β Β Β Β validator?: boolean;
      }
      Optional -
        -
      • -
        Optional accountIndex?: number
      • -
      • -
        Optional algorithm?: Algorithm
      • -
      • -
        Optional validator?: boolean
    -

    Returns KeyPair

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +deriveKeypair | xrpl

Function deriveKeypair

  • Parameters

    • seed: string
    • Optionaloptions: { accountIndex?: number; algorithm?: Algorithm; validator?: boolean }

    Returns KeyPair

diff --git a/docs/functions/deriveXAddress.html b/docs/functions/deriveXAddress.html index cb4171a305..772db46e11 100644 --- a/docs/functions/deriveXAddress.html +++ b/docs/functions/deriveXAddress.html @@ -1,379 +1,13 @@ -deriveXAddress | xrpl
-
- -
-
-
-
- -

Function deriveXAddress

-
-
    - -
  • -

    Derive an X-Address from a public key and a destination tag.

    -
    -
    -

    Parameters

    -
      -
    • -
      options: {
      Β Β Β Β publicKey: string;
      Β Β Β Β tag: number | false;
      Β Β Β Β test: boolean;
      }
      -

      Public key and destination tag to encode as an X-Address.

      -
      -
        -
      • -
        publicKey: string
        -

        The public key corresponding to an address.

        -
        -
      • -
      • -
        tag: number | false
        -

        A destination tag to encode into an X-address. False indicates no destination tag.

        -
        -
      • -
      • -
        test: boolean
        -

        Whether this address is for use in Testnet.

        -
        -
    -

    Returns string

    X-Address.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +deriveXAddress | xrpl

Function deriveXAddress

  • Derive an X-Address from a public key and a destination tag.

    +

    Parameters

    • options: { publicKey: string; tag: number | false; test: boolean }

      Public key and destination tag to encode as an X-Address.

      +
      • publicKey: string

        The public key corresponding to an address.

        +
      • tag: number | false

        A destination tag to encode into an X-address. False indicates no destination tag.

        +
      • test: boolean

        Whether this address is for use in Testnet.

        +

    Returns string

    X-Address.

    +
diff --git a/docs/functions/dropsToXrp.html b/docs/functions/dropsToXrp.html index daba9222bf..6412fe81c9 100644 --- a/docs/functions/dropsToXrp.html +++ b/docs/functions/dropsToXrp.html @@ -1,365 +1,11 @@ -dropsToXrp | xrpl
-
- -
-
-
-
- -

Function dropsToXrp

-
-
    - -
  • -

    Convert Drops to XRP.

    -
    -
    -

    Parameters

    -
      -
    • -
      dropsToConvert: Value
      -

      Drops to convert to XRP. This can be a string, number, or BigNumber.

      -
    -

    Returns number

    Amount in XRP.

    - -
    -

    Throws

    When drops amount is invalid.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +dropsToXrp | xrpl

Function dropsToXrp

  • Convert Drops to XRP.

    +

    Parameters

    • dropsToConvert: Value

      Drops to convert to XRP. This can be a string, number, or BigNumber.

      +

    Returns number

    Amount in XRP.

    +

    When drops amount is invalid.

    +
diff --git a/docs/functions/encode.html b/docs/functions/encode.html index a07d312d1b..d987ac69c2 100644 --- a/docs/functions/encode.html +++ b/docs/functions/encode.html @@ -1,363 +1,10 @@ -encode | xrpl
-
- -
-
-
-
- -

Function encode

-
-
    - -
  • -

    Encodes a LedgerEntry or Transaction into a hex string

    -
    -
    -

    Parameters

    -
    -

    Returns string

    A hex string representing the encoded object.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encode | xrpl

Function encode

diff --git a/docs/functions/encodeAccountID.html b/docs/functions/encodeAccountID.html index 67c67217ad..fc70606f15 100644 --- a/docs/functions/encodeAccountID.html +++ b/docs/functions/encodeAccountID.html @@ -1,357 +1,7 @@ -encodeAccountID | xrpl
-
- -
-
-
-
- -

Function encodeAccountID

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      bytes: ByteArray
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeAccountID | xrpl

Function encodeAccountID

  • Parameters

    • bytes: ByteArray

    Returns string

diff --git a/docs/functions/encodeAccountPublic.html b/docs/functions/encodeAccountPublic.html index f0ffb424ff..8894dafef1 100644 --- a/docs/functions/encodeAccountPublic.html +++ b/docs/functions/encodeAccountPublic.html @@ -1,357 +1,7 @@ -encodeAccountPublic | xrpl
-
- -
-
-
-
- -

Function encodeAccountPublic

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      bytes: ByteArray
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeAccountPublic | xrpl

Function encodeAccountPublic

  • Parameters

    • bytes: ByteArray

    Returns string

diff --git a/docs/functions/encodeForMultiSigning.html b/docs/functions/encodeForMultiSigning.html index 9d01b75de3..2159991cb5 100644 --- a/docs/functions/encodeForMultiSigning.html +++ b/docs/functions/encodeForMultiSigning.html @@ -1,367 +1,11 @@ -encodeForMultiSigning | xrpl
-
- -
-
-
-
- -

Function encodeForMultiSigning

-
-
    - -
  • -

    Encodes a Transaction for multi-signing

    -
    -
    -

    Parameters

    -
      -
    • -
      object: Transaction
      -

      Transaction in JSON format.

      -
    • -
    • -
      signer: string
      -

      The address of the account signing this transaction

      -
    -

    Returns string

    A hex string representing the encoded object.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeForMultiSigning | xrpl

Function encodeForMultiSigning

  • Encodes a Transaction for multi-signing

    +

    Parameters

    • object: Transaction

      Transaction in JSON format.

      +
    • signer: string

      The address of the account signing this transaction

      +

    Returns string

    A hex string representing the encoded object.

    +
diff --git a/docs/functions/encodeForSigning.html b/docs/functions/encodeForSigning.html index a42d60250a..874fdef125 100644 --- a/docs/functions/encodeForSigning.html +++ b/docs/functions/encodeForSigning.html @@ -1,363 +1,10 @@ -encodeForSigning | xrpl
-
- -
-
-
-
- -

Function encodeForSigning

-
-
    - -
  • -

    Encodes a Transaction for signing

    -
    -
    -

    Parameters

    -
      -
    • -
      object: Transaction
      -

      LedgerEntry in JSON or Transaction format.

      -
    -

    Returns string

    A hex string representing the encoded object.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeForSigning | xrpl

Function encodeForSigning

diff --git a/docs/functions/encodeForSigningClaim.html b/docs/functions/encodeForSigningClaim.html index 4c0a4a535c..519064f61e 100644 --- a/docs/functions/encodeForSigningClaim.html +++ b/docs/functions/encodeForSigningClaim.html @@ -1,363 +1,10 @@ -encodeForSigningClaim | xrpl
-
- -
-
-
-
- -

Function encodeForSigningClaim

-
-
    - -
  • -

    Encodes a PaymentChannelClaim for signing

    -
    -
    -

    Parameters

    -
    -

    Returns string

    A hex string representing the encoded object.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeForSigningClaim | xrpl

Function encodeForSigningClaim

diff --git a/docs/functions/encodeNodePublic.html b/docs/functions/encodeNodePublic.html index e389b3dc87..f8be837d83 100644 --- a/docs/functions/encodeNodePublic.html +++ b/docs/functions/encodeNodePublic.html @@ -1,357 +1,7 @@ -encodeNodePublic | xrpl
-
- -
-
-
-
- -

Function encodeNodePublic

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      bytes: ByteArray
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeNodePublic | xrpl

Function encodeNodePublic

  • Parameters

    • bytes: ByteArray

    Returns string

diff --git a/docs/functions/encodeSeed.html b/docs/functions/encodeSeed.html index 186f894f8b..ea4fe95644 100644 --- a/docs/functions/encodeSeed.html +++ b/docs/functions/encodeSeed.html @@ -1,359 +1,7 @@ -encodeSeed | xrpl
-
- -
-
-
-
- -

Function encodeSeed

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      entropy: ByteArray
    • -
    • -
      type: "ed25519" | "secp256k1"
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeSeed | xrpl

Function encodeSeed

  • Parameters

    • entropy: ByteArray
    • type: "ed25519" | "secp256k1"

    Returns string

diff --git a/docs/functions/encodeXAddress.html b/docs/functions/encodeXAddress.html index 0e64c4433d..d6295f835a 100644 --- a/docs/functions/encodeXAddress.html +++ b/docs/functions/encodeXAddress.html @@ -1,361 +1,7 @@ -encodeXAddress | xrpl
-
- -
-
-
-
- -

Function encodeXAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      accountId: Uint8Array
    • -
    • -
      tag: number | false
    • -
    • -
      test: boolean
    -

    Returns string

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +encodeXAddress | xrpl

Function encodeXAddress

  • Parameters

    • accountId: Uint8Array
    • tag: number | false
    • test: boolean

    Returns string

diff --git a/docs/functions/getBalanceChanges.html b/docs/functions/getBalanceChanges.html index be86549d51..f53c71c3b9 100644 --- a/docs/functions/getBalanceChanges.html +++ b/docs/functions/getBalanceChanges.html @@ -1,364 +1,11 @@ -getBalanceChanges | xrpl
-
- -
-
-
-
- -

Function getBalanceChanges

-
-
diff --git a/docs/functions/getNFTokenID.html b/docs/functions/getNFTokenID.html index 7531da9154..0dc2252936 100644 --- a/docs/functions/getNFTokenID.html +++ b/docs/functions/getNFTokenID.html @@ -1,365 +1,11 @@ -getNFTokenID | xrpl
-
- -
-
-
-
- -

Function getNFTokenID

-
-
    - -
  • -

    Gets the NFTokenID for an NFT recently minted with NFTokenMint.

    -
    -
    -

    Parameters

    -
      -
    • -
      meta: undefined | string | TransactionMetadata
      -

      Metadata from the response to submitting and waiting for an NFTokenMint transaction or from a tx method call.

      -
    -

    Returns string | undefined

    The NFTokenID for the minted NFT.

    - -
    -

    Throws

    if meta is not TransactionMetadata.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +getNFTokenID | xrpl

Function getNFTokenID

  • Gets the NFTokenID for an NFT recently minted with NFTokenMint.

    +

    Parameters

    • meta: undefined | string | TransactionMetadata

      Metadata from the response to submitting and waiting for an NFTokenMint transaction or from a tx method call.

      +

    Returns undefined | string

    The NFTokenID for the minted NFT.

    +

    if meta is not TransactionMetadata.

    +
diff --git a/docs/functions/getXChainClaimID.html b/docs/functions/getXChainClaimID.html index d242228cbb..5df9fc3dca 100644 --- a/docs/functions/getXChainClaimID.html +++ b/docs/functions/getXChainClaimID.html @@ -1,366 +1,12 @@ -getXChainClaimID | xrpl
-
- -
-
-
-
- -

Function getXChainClaimID

-
-
    - -
  • -

    Gets the XChainClaimID value from the metadata of an XChainCreateClaimID transaction.

    -
    -
    -

    Parameters

    -
      -
    • -
      meta: undefined | string | TransactionMetadata
      -

      Metadata from the response to submitting and waiting for an XChainCreateClaimID transaction - or from a tx method call.

      -
    -

    Returns string | undefined

    The XChainClaimID for the minted NFT.

    - -
    -

    Throws

    if meta is not TransactionMetadata.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +getXChainClaimID | xrpl

Function getXChainClaimID

  • Gets the XChainClaimID value from the metadata of an XChainCreateClaimID transaction.

    +

    Parameters

    • meta: undefined | string | TransactionMetadata

      Metadata from the response to submitting and waiting for an XChainCreateClaimID transaction +or from a tx method call.

      +

    Returns undefined | string

    The XChainClaimID for the minted NFT.

    +

    if meta is not TransactionMetadata.

    +
diff --git a/docs/functions/hasNextPage.html b/docs/functions/hasNextPage.html index 4bbe082dd2..19e867028c 100644 --- a/docs/functions/hasNextPage.html +++ b/docs/functions/hasNextPage.html @@ -1,366 +1,13 @@ -hasNextPage | xrpl
-
- -
-
-
-
- -

Function hasNextPage

-
-
diff --git a/docs/functions/isCreatedNode.html b/docs/functions/isCreatedNode.html index 2d65dd11fc..6b0fffdd07 100644 --- a/docs/functions/isCreatedNode.html +++ b/docs/functions/isCreatedNode.html @@ -1,363 +1,10 @@ -isCreatedNode | xrpl
-
- -
-
-
-
- -

Function isCreatedNode

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isCreatedNode | xrpl

Function isCreatedNode

diff --git a/docs/functions/isDeletedNode.html b/docs/functions/isDeletedNode.html index b7fc52d530..b42eb62d79 100644 --- a/docs/functions/isDeletedNode.html +++ b/docs/functions/isDeletedNode.html @@ -1,363 +1,10 @@ -isDeletedNode | xrpl
-
- -
-
-
-
- -

Function isDeletedNode

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isDeletedNode | xrpl

Function isDeletedNode

diff --git a/docs/functions/isMPTAmount.html b/docs/functions/isMPTAmount.html new file mode 100644 index 0000000000..41be8b7b3d --- /dev/null +++ b/docs/functions/isMPTAmount.html @@ -0,0 +1,10 @@ +isMPTAmount | xrpl

Function isMPTAmount

diff --git a/docs/functions/isModifiedNode.html b/docs/functions/isModifiedNode.html index 89a4acec31..6db4ee0e59 100644 --- a/docs/functions/isModifiedNode.html +++ b/docs/functions/isModifiedNode.html @@ -1,363 +1,10 @@ -isModifiedNode | xrpl
-
- -
-
-
-
- -

Function isModifiedNode

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isModifiedNode | xrpl

Function isModifiedNode

diff --git a/docs/functions/isValidAddress.html b/docs/functions/isValidAddress.html index 8db3c15735..0ceb1742da 100644 --- a/docs/functions/isValidAddress.html +++ b/docs/functions/isValidAddress.html @@ -1,364 +1,11 @@ -isValidAddress | xrpl
-
- -
-
-
-
- -

Function isValidAddress

-
-
diff --git a/docs/functions/isValidClassicAddress.html b/docs/functions/isValidClassicAddress.html index 9abd07269c..2e6b5de2d6 100644 --- a/docs/functions/isValidClassicAddress.html +++ b/docs/functions/isValidClassicAddress.html @@ -1,357 +1,7 @@ -isValidClassicAddress | xrpl
-
- -
-
-
-
- -

Function isValidClassicAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      address: string
    -

    Returns boolean

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isValidClassicAddress | xrpl

Function isValidClassicAddress

  • Parameters

    • address: string

    Returns boolean

diff --git a/docs/functions/isValidSecret.html b/docs/functions/isValidSecret.html index fe1284f894..9127bf4b61 100644 --- a/docs/functions/isValidSecret.html +++ b/docs/functions/isValidSecret.html @@ -1,363 +1,10 @@ -isValidSecret | xrpl
-
- -
-
-
-
- -

Function isValidSecret

-
-
    - -
  • -

    Check if a secret is valid.

    -
    -
    -

    Parameters

    -
      -
    • -
      secret: string
      -

      Secret to test for validity.

      -
    -

    Returns boolean

    True if secret can be derived into a keypair.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isValidSecret | xrpl

Function isValidSecret

  • Check if a secret is valid.

    +

    Parameters

    • secret: string

      Secret to test for validity.

      +

    Returns boolean

    True if secret can be derived into a keypair.

    +
diff --git a/docs/functions/isValidXAddress.html b/docs/functions/isValidXAddress.html index 96b789ac8e..60f1098952 100644 --- a/docs/functions/isValidXAddress.html +++ b/docs/functions/isValidXAddress.html @@ -1,357 +1,7 @@ -isValidXAddress | xrpl
-
- -
-
-
-
- -

Function isValidXAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      xAddress: string
    -

    Returns boolean

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isValidXAddress | xrpl

Function isValidXAddress

  • Parameters

    • xAddress: string

    Returns boolean

diff --git a/docs/functions/isoTimeToRippleTime.html b/docs/functions/isoTimeToRippleTime.html index 1b6c9488e6..3e63390543 100644 --- a/docs/functions/isoTimeToRippleTime.html +++ b/docs/functions/isoTimeToRippleTime.html @@ -1,363 +1,10 @@ -isoTimeToRippleTime | xrpl
-
- -
-
-
-
- -

Function isoTimeToRippleTime

-
-
    - -
  • -

    Convert an ISO8601 timestmap to a ripple timestamp.

    -
    -
    -

    Parameters

    -
      -
    • -
      iso8601: string | Date
      -

      International standard date format.

      -
    -

    Returns number

    Seconds since ripple epoch (1/1/2000 GMT).

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +isoTimeToRippleTime | xrpl

Function isoTimeToRippleTime

  • Convert an ISO8601 timestmap to a ripple timestamp.

    +

    Parameters

    • iso8601: string | Date

      International standard date format.

      +

    Returns number

    Seconds since ripple epoch (1/1/2000 GMT).

    +
diff --git a/docs/functions/keyToRFC1751Mnemonic.html b/docs/functions/keyToRFC1751Mnemonic.html index d421aa08cb..1a0c717e3c 100644 --- a/docs/functions/keyToRFC1751Mnemonic.html +++ b/docs/functions/keyToRFC1751Mnemonic.html @@ -1,363 +1,10 @@ -keyToRFC1751Mnemonic | xrpl
-
- -
-
-
-
- -

Function keyToRFC1751Mnemonic

-
-
    - -
  • -

    Generates a modified RFC1751 mnemonic in the same way rippled's wallet_propose does.

    -
    -
    -

    Parameters

    -
      -
    • -
      hex_key: string
      -

      An encoded secret in hex format.

      -
    -

    Returns string

    A mnemonic following rippled's modified RFC1751 mnemonic standard.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +keyToRFC1751Mnemonic | xrpl

Function keyToRFC1751Mnemonic

  • Generates a modified RFC1751 mnemonic in the same way rippled's wallet_propose does.

    +

    Parameters

    • hex_key: string

      An encoded secret in hex format.

      +

    Returns string

    A mnemonic following rippled's modified RFC1751 mnemonic standard.

    +
diff --git a/docs/functions/multisign.html b/docs/functions/multisign.html index 54a62806fb..bfdaa05452 100644 --- a/docs/functions/multisign.html +++ b/docs/functions/multisign.html @@ -1,371 +1,17 @@ -multisign | xrpl
-
- -
-
-
-
- -

Function multisign

-
-
diff --git a/docs/functions/parseAccountRootFlags.html b/docs/functions/parseAccountRootFlags.html index 905dfaa402..c825b702ee 100644 --- a/docs/functions/parseAccountRootFlags.html +++ b/docs/functions/parseAccountRootFlags.html @@ -1,363 +1,10 @@ -parseAccountRootFlags | xrpl
-
- -
-
-
-
- -

Function parseAccountRootFlags

-
-
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +parseAccountRootFlags | xrpl

Function parseAccountRootFlags

diff --git a/docs/functions/parseNFTokenID.html b/docs/functions/parseNFTokenID.html index fcb4f48b4e..e959e5c10c 100644 --- a/docs/functions/parseNFTokenID.html +++ b/docs/functions/parseNFTokenID.html @@ -1,31 +1,10 @@ -parseNFTokenID | xrpl
-
- -
-
-
-
- -

Function parseNFTokenID

-
-
diff --git a/docs/functions/parseTransactionFlags.html b/docs/functions/parseTransactionFlags.html new file mode 100644 index 0000000000..8daa38a202 --- /dev/null +++ b/docs/functions/parseTransactionFlags.html @@ -0,0 +1,10 @@ +parseTransactionFlags | xrpl

Function parseTransactionFlags

diff --git a/docs/functions/percentToQuality.html b/docs/functions/percentToQuality.html index 51a5af7162..4be4c50e2f 100644 --- a/docs/functions/percentToQuality.html +++ b/docs/functions/percentToQuality.html @@ -1,367 +1,13 @@ -percentToQuality | xrpl
-
- -
-
-
-
- -

Function percentToQuality

-
-
diff --git a/docs/functions/percentToTransferRate.html b/docs/functions/percentToTransferRate.html index 6e89490c62..9331f2c460 100644 --- a/docs/functions/percentToTransferRate.html +++ b/docs/functions/percentToTransferRate.html @@ -1,366 +1,12 @@ -percentToTransferRate | xrpl
-
- -
-
-
-
- -

Function percentToTransferRate

-
-
diff --git a/docs/functions/qualityToDecimal.html b/docs/functions/qualityToDecimal.html index 254c66233b..589b81e453 100644 --- a/docs/functions/qualityToDecimal.html +++ b/docs/functions/qualityToDecimal.html @@ -1,365 +1,11 @@ -qualityToDecimal | xrpl
-
- -
-
-
-
- -

Function qualityToDecimal

-
-
    - -
  • -

    Converts a quality in "billionths" format to a decimal.

    -
    -
    -

    Parameters

    -
      -
    • -
      quality: number
      -

      Quality to convert to decimal.

      -
    -

    Returns string

    decimal representation of quality.

    - -
    -

    Throws

    ValidationError when quality is not convertible to decimal format.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +qualityToDecimal | xrpl

Function qualityToDecimal

  • Converts a quality in "billionths" format to a decimal.

    +

    Parameters

    • quality: number

      Quality to convert to decimal.

      +

    Returns string

    decimal representation of quality.

    +

    ValidationError when quality is not convertible to decimal format.

    +
diff --git a/docs/functions/rfc1751MnemonicToKey.html b/docs/functions/rfc1751MnemonicToKey.html index 9267b4f9a0..f2b845693e 100644 --- a/docs/functions/rfc1751MnemonicToKey.html +++ b/docs/functions/rfc1751MnemonicToKey.html @@ -1,365 +1,11 @@ -rfc1751MnemonicToKey | xrpl
-
- -
-
-
-
- -

Function rfc1751MnemonicToKey

-
-
    - -
  • -

    Converts an english mnemonic following rippled's modified RFC1751 standard to an encoded hex secret.

    -
    -
    -

    Parameters

    -
      -
    • -
      english: string
      -

      A mnemonic generated using ripple's modified RFC1751 standard.

      -
    -

    Returns Uint8Array

    A Buffer containing an encoded secret.

    - -
    -

    Throws

    Error if the parity after decoding does not match.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +rfc1751MnemonicToKey | xrpl

Function rfc1751MnemonicToKey

  • Converts an english mnemonic following rippled's modified RFC1751 standard to an encoded hex secret.

    +

    Parameters

    • english: string

      A mnemonic generated using ripple's modified RFC1751 standard.

      +

    Returns Uint8Array

    A Buffer containing an encoded secret.

    +

    Error if the parity after decoding does not match.

    +
diff --git a/docs/functions/rippleTimeToISOTime.html b/docs/functions/rippleTimeToISOTime.html index 8d1bf237df..4a8a667dbe 100644 --- a/docs/functions/rippleTimeToISOTime.html +++ b/docs/functions/rippleTimeToISOTime.html @@ -1,363 +1,10 @@ -rippleTimeToISOTime | xrpl
-
- -
-
-
-
- -

Function rippleTimeToISOTime

-
-
    - -
  • -

    Convert a ripple timestamp to an Iso8601 timestamp.

    -
    -
    -

    Parameters

    -
      -
    • -
      rippleTime: number
      -

      Is the number of seconds since Ripple Epoch (1/1/2000 GMT).

      -
    -

    Returns string

    Iso8601 international standard date format.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +rippleTimeToISOTime | xrpl

Function rippleTimeToISOTime

  • Convert a ripple timestamp to an Iso8601 timestamp.

    +

    Parameters

    • rippleTime: number

      Is the number of seconds since Ripple Epoch (1/1/2000 GMT).

      +

    Returns string

    Iso8601 international standard date format.

    +
diff --git a/docs/functions/rippleTimeToUnixTime.html b/docs/functions/rippleTimeToUnixTime.html index 9b0b856c93..0e1b10249a 100644 --- a/docs/functions/rippleTimeToUnixTime.html +++ b/docs/functions/rippleTimeToUnixTime.html @@ -1,363 +1,10 @@ -rippleTimeToUnixTime | xrpl
-
- -
-
-
-
- -

Function rippleTimeToUnixTime

-
-
    - -
  • -

    Convert a ripple timestamp to a unix timestamp.

    -
    -
    -

    Parameters

    -
      -
    • -
      rpepoch: number
      -

      (seconds since 1/1/2000 GMT).

      -
    -

    Returns number

    Milliseconds since unix epoch.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +rippleTimeToUnixTime | xrpl

Function rippleTimeToUnixTime

  • Convert a ripple timestamp to a unix timestamp.

    +

    Parameters

    • rpepoch: number

      (seconds since 1/1/2000 GMT).

      +

    Returns number

    Milliseconds since unix epoch.

    +
diff --git a/docs/functions/setTransactionFlagsToNumber.html b/docs/functions/setTransactionFlagsToNumber.html index 93233f9089..1f433dc1f6 100644 --- a/docs/functions/setTransactionFlagsToNumber.html +++ b/docs/functions/setTransactionFlagsToNumber.html @@ -1,362 +1,11 @@ -setTransactionFlagsToNumber | xrpl
-
- -
-
-
-
- -

Function setTransactionFlagsToNumber

-
-
    - -
  • -

    Sets a transaction's flags to its numeric representation.

    -
    -
    -

    Parameters

    -
      -
    • -
      tx: Transaction
      -

      A transaction to set its flags to its numeric representation.

      -
    -

    Returns void

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +setTransactionFlagsToNumber | xrpl

Function setTransactionFlagsToNumber

  • Sets a transaction's flags to its numeric representation.

    +

    Parameters

    • tx: Transaction

      A transaction to set its flags to its numeric representation.

      +

    Returns void

    This utility function is deprecated. +Use convertTxFlagsToNumber() instead and use the returned value to modify the Transaction.Flags from the caller.

    +
diff --git a/docs/functions/signPaymentChannelClaim.html b/docs/functions/signPaymentChannelClaim.html index d304ac2d0d..0de9d82826 100644 --- a/docs/functions/signPaymentChannelClaim.html +++ b/docs/functions/signPaymentChannelClaim.html @@ -1,371 +1,12 @@ -signPaymentChannelClaim | xrpl
-
- -
-
-
-
- -

Function signPaymentChannelClaim

-
-
    - -
  • -

    Sign a payment channel claim.

    -
    -
    -

    Parameters

    -
      -
    • -
      channel: string
      -

      Channel identifier specified by the paymentChannelClaim.

      -
    • -
    • -
      xrpAmount: string
      -

      XRP Amount specified by the paymentChannelClaim.

      -
    • -
    • -
      privateKey: string
      -

      Private Key to sign paymentChannelClaim with.

      -
    -

    Returns string

    True if the channel is valid.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +signPaymentChannelClaim | xrpl

Function signPaymentChannelClaim

  • Sign a payment channel claim.

    +

    Parameters

    • channel: string

      Channel identifier specified by the paymentChannelClaim.

      +
    • xrpAmount: string

      XRP Amount specified by the paymentChannelClaim.

      +
    • privateKey: string

      Private Key to sign paymentChannelClaim with.

      +

    Returns string

    True if the channel is valid.

    +
diff --git a/docs/functions/transferRateToDecimal.html b/docs/functions/transferRateToDecimal.html index cdef366231..2e47cfed8e 100644 --- a/docs/functions/transferRateToDecimal.html +++ b/docs/functions/transferRateToDecimal.html @@ -1,365 +1,11 @@ -transferRateToDecimal | xrpl
-
- -
-
-
-
- -

Function transferRateToDecimal

-
-
    - -
  • -

    Converts a transfer rate in "billionths" format to a decimal.

    -
    -
    -

    Parameters

    -
      -
    • -
      rate: number
      -

      TransferRate to convert to decimal.

      -
    -

    Returns string

    decimal representation of transfer Rate.

    - -
    -

    Throws

    ValidationError when it cannot convert from billionths format.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +transferRateToDecimal | xrpl

Function transferRateToDecimal

  • Converts a transfer rate in "billionths" format to a decimal.

    +

    Parameters

    • rate: number

      TransferRate to convert to decimal.

      +

    Returns string

    decimal representation of transfer Rate.

    +

    ValidationError when it cannot convert from billionths format.

    +
diff --git a/docs/functions/unixTimeToRippleTime.html b/docs/functions/unixTimeToRippleTime.html index ec51245885..84f6f4df4b 100644 --- a/docs/functions/unixTimeToRippleTime.html +++ b/docs/functions/unixTimeToRippleTime.html @@ -1,363 +1,10 @@ -unixTimeToRippleTime | xrpl
-
- -
-
-
-
- -

Function unixTimeToRippleTime

-
-
    - -
  • -

    Convert a unix timestamp to a ripple timestamp.

    -
    -
    -

    Parameters

    -
      -
    • -
      timestamp: number
      -

      (ms since unix epoch).

      -
    -

    Returns number

    Seconds since Ripple Epoch (1/1/2000 GMT).

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +unixTimeToRippleTime | xrpl

Function unixTimeToRippleTime

  • Convert a unix timestamp to a ripple timestamp.

    +

    Parameters

    • timestamp: number

      (ms since unix epoch).

      +

    Returns number

    Seconds since Ripple Epoch (1/1/2000 GMT).

    +
diff --git a/docs/functions/validate.html b/docs/functions/validate.html index d5117b5d7a..6620e066f0 100644 --- a/docs/functions/validate.html +++ b/docs/functions/validate.html @@ -1,365 +1,11 @@ -validate | xrpl
-
- -
-
-
-
- -

Function validate

-
-
diff --git a/docs/functions/validateNFTokenModify.html b/docs/functions/validateNFTokenModify.html new file mode 100644 index 0000000000..4543dd63c4 --- /dev/null +++ b/docs/functions/validateNFTokenModify.html @@ -0,0 +1,10 @@ +validateNFTokenModify | xrpl

Function validateNFTokenModify

  • Verify the form and type of an NFTokenModify at runtime.

    +

    Parameters

    • tx: Record<string, unknown>

      An NFTokenModify Transaction.

      +

    Returns void

    When the NFTokenModify is Malformed.

    +
diff --git a/docs/functions/verifyKeypairSignature.html b/docs/functions/verifyKeypairSignature.html index 22559cc700..053642bf4d 100644 --- a/docs/functions/verifyKeypairSignature.html +++ b/docs/functions/verifyKeypairSignature.html @@ -1,361 +1,7 @@ -verifyKeypairSignature | xrpl
-
- -
-
-
-
- -

Function verifyKeypairSignature

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      messageHex: string
    • -
    • -
      signature: string
    • -
    • -
      publicKey: string
    -

    Returns boolean

-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +verifyKeypairSignature | xrpl

Function verifyKeypairSignature

  • Parameters

    • messageHex: string
    • signature: string
    • publicKey: string

    Returns boolean

diff --git a/docs/functions/verifyPaymentChannelClaim.html b/docs/functions/verifyPaymentChannelClaim.html index 1ea4e8440b..41b5d6a5ca 100644 --- a/docs/functions/verifyPaymentChannelClaim.html +++ b/docs/functions/verifyPaymentChannelClaim.html @@ -1,375 +1,13 @@ -verifyPaymentChannelClaim | xrpl
-
- -
-
-
-
- -

Function verifyPaymentChannelClaim

-
-
    - -
  • -

    Verify the signature of a payment channel claim.

    -
    -
    -

    Parameters

    -
      -
    • -
      channel: string
      -

      Channel identifier specified by the paymentChannelClaim.

      -
    • -
    • -
      xrpAmount: string
      -

      XRP Amount specified by the paymentChannelClaim.

      -
    • -
    • -
      signature: string
      -

      Signature produced from signing paymentChannelClaim.

      -
    • -
    • -
      publicKey: string
      -

      Public key that signed the paymentChannelClaim.

      -
    -

    Returns boolean

    True if the channel is valid.

    - -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +verifyPaymentChannelClaim | xrpl

Function verifyPaymentChannelClaim

  • Verify the signature of a payment channel claim.

    +

    Parameters

    • channel: string

      Channel identifier specified by the paymentChannelClaim.

      +
    • xrpAmount: string

      XRP Amount specified by the paymentChannelClaim.

      +
    • signature: string

      Signature produced from signing paymentChannelClaim.

      +
    • publicKey: string

      Public key that signed the paymentChannelClaim.

      +

    Returns boolean

    True if the channel is valid.

    +
diff --git a/docs/functions/verifySignature.html b/docs/functions/verifySignature.html index 77a166f3e6..987a6e0072 100644 --- a/docs/functions/verifySignature.html +++ b/docs/functions/verifySignature.html @@ -1,371 +1,13 @@ -verifySignature | xrpl
-
- -
-
-
-
- -

Function verifySignature

-
-
    - -
  • -

    Verifies that the given transaction has a valid signature based on public-key encryption.

    -
    -
    -

    Parameters

    -
      -
    • -
      tx: string | Transaction
      -

      A transaction to verify the signature of. (Can be in object or encoded string format).

      -
    • -
    • -
      Optional publicKey: string
      -

      Specific public key to use to verify. If not specified the SigningPublicKey of tx will be used.

      -
      Optional
    -

    Returns boolean

    Returns true if tx has a valid signature, and returns false otherwise.

    - -
    -

    Throws

    Error when transaction is missing TxnSignature

    - -

    Throws

    Error when publicKey is not provided and transaction is missing SigningPubKey

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +verifySignature | xrpl

Function verifySignature

  • Verifies that the given transaction has a valid signature based on public-key encryption.

    +

    Parameters

    • tx: string | Transaction

      A transaction to verify the signature of. (Can be in object or encoded string format).

      +
    • OptionalpublicKey: string

      Specific public key to use to verify. If not specified the SigningPublicKey of tx will be used.

      +

    Returns boolean

    Returns true if tx has a valid signature, and returns false otherwise.

    +

    Error when transaction is missing TxnSignature

    +

    Error when publicKey is not provided and transaction is missing SigningPubKey

    +
diff --git a/docs/functions/walletFromSecretNumbers.html b/docs/functions/walletFromSecretNumbers.html index 063dd7b571..3bf13301aa 100644 --- a/docs/functions/walletFromSecretNumbers.html +++ b/docs/functions/walletFromSecretNumbers.html @@ -1,383 +1,17 @@ -walletFromSecretNumbers | xrpl
-
- -
-
-
-
- -

Function walletFromSecretNumbers

-
-
diff --git a/docs/functions/xAddressToClassicAddress.html b/docs/functions/xAddressToClassicAddress.html index a0fd45f2f5..825af0fe4b 100644 --- a/docs/functions/xAddressToClassicAddress.html +++ b/docs/functions/xAddressToClassicAddress.html @@ -1,364 +1,7 @@ -xAddressToClassicAddress | xrpl
-
- -
-
-
-
- -

Function xAddressToClassicAddress

-
-
    - -
  • -
    -

    Parameters

    -
      -
    • -
      xAddress: string
    -

    Returns {
    Β Β Β Β classicAddress: string;
    Β Β Β Β tag: number | false;
    Β Β Β Β test: boolean;
    }

    -
      -
    • -
      classicAddress: string
    • -
    • -
      tag: number | false
    • -
    • -
      test: boolean
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +xAddressToClassicAddress | xrpl

Function xAddressToClassicAddress

  • Parameters

    • xAddress: string

    Returns { classicAddress: string; tag: number | false; test: boolean }

diff --git a/docs/functions/xrpToDrops.html b/docs/functions/xrpToDrops.html index eadaba46bf..87015dae08 100644 --- a/docs/functions/xrpToDrops.html +++ b/docs/functions/xrpToDrops.html @@ -1,365 +1,11 @@ -xrpToDrops | xrpl
-
- -
-
-
-
- -

Function xrpToDrops

-
-
    - -
  • -

    Convert an amount in XRP to an amount in drops.

    -
    -
    -

    Parameters

    -
      -
    • -
      xrpToConvert: Value
      -

      Amount in XRP.

      -
    -

    Returns string

    Amount in drops.

    - -
    -

    Throws

    When amount in xrp is invalid.

    -
-
- -
-
-

Generated using TypeDoc

-
\ No newline at end of file +xrpToDrops | xrpl

Function xrpToDrops

  • Convert an amount in XRP to an amount in drops.

    +

    Parameters

    • xrpToConvert: Value

      Amount in XRP.

      +

    Returns string

    Amount in drops.

    +

    When amount in xrp is invalid.

    +
diff --git a/docs/hierarchy.html b/docs/hierarchy.html new file mode 100644 index 0000000000..ae169a8035 --- /dev/null +++ b/docs/hierarchy.html @@ -0,0 +1,7 @@ +xrpl

xrpl

Hierarchy Summary

diff --git a/docs/index.html b/docs/index.html index 3d4cf043f5..dd45e1d984 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,48 +1,37 @@ -xrpl
-
- -
-
-
-
-

xrpl

-

xrpl.js

A JavaScript/TypeScript library for interacting with the XRP Ledger

+xrpl

xrpl

xrpl.js

A JavaScript/TypeScript library for interacting with the XRP Ledger

NPM npm bundle size

This is the recommended library for integrating a JavaScript/TypeScript app with the XRP Ledger, especially if you intend to use advanced functionality such as IOUs, payment paths, the decentralized exchange, account settings, payment channels, escrows, multi-signing, and more.

-

➑️ Reference Documentation

See the full reference documentation for all classes, methods, and utilities.

-

Features

    +

    See the full reference documentation for all classes, methods, and utilities.

    +
    1. Managing keys & creating test credentials (Wallet && Client.fundWallet())
    2. Submitting transactions to the XRP Ledger (Client.submit(...) & transaction types)
    3. Sending requests to observe the ledger (Client.request(...) using public API methods)
    4. Subscribing to changes in the ledger (Ex. ledger, transactions, & more...)
    5. Parsing ledger data into more convenient formats (xrpToDrops and rippleTimeToISOTime)
    -

    All of which works in Node.js (tested for v16+) & web browsers (tested for Chrome).

    -

    Quickstart

    Requirements

      -
    • Node.js v16 is recommended. We also support v18 and v20. Other versions may work but are not frequently tested.
    • +

      All of which works in Node.js (tested for v18+) & web browsers (tested for Chrome).

      +

      Quickstart

        +
      • Node.js v18 is recommended. We also support v20 and v22. Other versions may work but are not frequently tested.
      -

      Installing xrpl.js

      In an existing project (with package.json), install xrpl.js with:

      +

      In an existing project (with package.json), install xrpl.js with:

      $ npm install --save xrpl
       
      +

      Or with yarn:

      $ yarn add xrpl
       
      +

      Example usage:

      -
      const xrpl = require("xrpl");
      async function main() {
      const client = new xrpl.Client("wss://s.altnet.rippletest.net:51233");
      await client.connect();

      const response = await client.request({
      command: "account_info",
      account: "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
      ledger_index: "validated",
      });
      console.log(response);

      client.disconnect();
      }
      main(); -
      +
      const xrpl = require("xrpl");
      async function main() {
      const client = new xrpl.Client("wss://s.altnet.rippletest.net:51233");
      await client.connect();

      const response = await client.request({
      command: "account_info",
      account: "rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe",
      ledger_index: "validated",
      });
      console.log(response);

      await client.disconnect();
      }
      main(); +
      +

      For a more in-depth example, you can copy/forking this Code Sandbox template!
      https://codesandbox.io/s/xrpl-intro-pxgdjr?file=/src/App.js

      It goes through:

      @@ -51,7 +40,7 @@

      xrpl

  • Sending a payment transaction
  • And sending requests to see your account balance!
  • -

    Case by Case Setup Steps

    If you're using xrpl.js with React or Deno, you'll need to do a couple extra steps to set it up:

    +

    If you're using xrpl.js with React or Deno, you'll need to do a couple extra steps to set it up:

  • Using xrpl.js with Vite React
  • Using xrpl.js with Deno
  • -

    Documentation

    As you develop with xrpl.js, there's two sites you'll use extensively:

    +

    As you develop with xrpl.js, there's two sites you'll use extensively:

      -
    1. xrpl.org is the primary source for:
  • js.xrpl.org has the reference docs for this library
  • -

    Mailing Lists

    If you want to hear when we release new versions of xrpl.js, you can join our low-traffic mailing list (About 1 email per week):

    +

    If you want to hear when we release new versions of xrpl.js, you can join our low-traffic mailing list (About 1 email per week):

    -

    If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

    +

    If you're using the XRP Ledger in production, you should run a rippled server and subscribe to the ripple-server mailing list as well.

    -

    Asking for help

    One of the best spots to ask for help is in the XRPL Developer Discord - There's a channel for xrpl.js where other community members can help you figure out how to accomplish your goals.

    -

    You are also welcome to create an issue here and we'll do our best to respond within 3 days.

    -

    Key Links

  • xrpl-announce (The mailing list for new xrpl.js versions)
  • Applications that use xrpl.js (You can open a PR to add your project!)
  • -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMBid.html b/docs/interfaces/AMMBid.html index 4c9ca2416e..0617cae03c 100644 --- a/docs/interfaces/AMMBid.html +++ b/docs/interfaces/AMMBid.html @@ -1,602 +1,73 @@ -AMMBid | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMBid

    -
    -

    Bid on an Automated Market Maker's (AMM's) auction slot.

    +AMMBid | xrpl

    Interface AMMBid

    Bid on an Automated Market Maker's (AMM's) auction slot.

    If you win, you can trade against the AMM at a discounted fee until you are outbid or 24 hours have passed. If you are outbid before 24 hours have passed, you are refunded part of the cost of your bid based on how much time remains. -You bid using the AMM's LP Tokens; the amount of a winning bid is returned to the AMM, +You bid using the AMM's LP Tokens; the amount of a winning bid is returned to the AMM, decreasing the outstanding balance of LP Tokens.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface AMMBid {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Asset: Currency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β AuthAccounts?: AuthAccount[];
    Β Β Β Β BidMax?: IssuedCurrencyAmount;
    Β Β Β Β BidMin?: IssuedCurrencyAmount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AMMBid";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the assets in the AMM's pool.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset in the AMM's pool.

    -
    -
    -
    - -
    AuthAccounts?: AuthAccount[]
    -

    A list of up to 4 additional accounts that you allow to trade at the discounted fee. +

    Asset: Currency

    The definition for one of the assets in the AMM's pool.

    +
    Asset2: Currency

    The definition for the other asset in the AMM's pool.

    +
    AuthAccounts?: AuthAccount[]

    A list of up to 4 additional accounts that you allow to trade at the discounted fee. This cannot include the address of the transaction sender.

    -
    -
    -
    - - -

    Pay at most this LPToken amount for the slot. +

    Pay at most this LPToken amount for the slot. If the cost to win the bid is higher than this amount, the transaction fails. If omitted, pay as much as necessary to win the bid.

    -
    -
    -
    - - -

    Pay at least this LPToken amount for the slot. +

    Pay at least this LPToken amount for the slot. Setting this value higher makes it harder for others to outbid you. If omitted, pay the minimum necessary to win the bid.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AMMBid"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMBid"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMClawback.html b/docs/interfaces/AMMClawback.html new file mode 100644 index 0000000000..7007af1919 --- /dev/null +++ b/docs/interfaces/AMMClawback.html @@ -0,0 +1,72 @@ +AMMClawback | xrpl

    Interface AMMClawback

    Claw back tokens from a holder that has deposited your issued tokens into an AMM pool.

    +

    Clawback is disabled by default. To use clawback, you must send an AccountSet transaction to enable the +Allow Trust Line Clawback setting. An issuer with any existing tokens cannot enable clawback. You can +only enable Allow Trust Line Clawback if you have a completely empty owner directory, meaning you must +do so before you set up any trust lines, offers, escrows, payment channels, checks, or signer lists. +After you enable clawback, it cannot reverted: the account permanently gains the ability to claw back +issued assets on trust lines.

    +
    interface AMMClawback {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount?: IssuedCurrencyAmount;
    Β Β Β Β Asset: IssuedCurrency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β Holder: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AMMClawback";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +

    The maximum amount to claw back from the AMM account. The currency and issuer subfields should match +the Asset subfields. If this field isn't specified, or the value subfield exceeds the holder's available +tokens in the AMM, all of the holder's tokens will be clawed back.

    +

    Specifies the asset that the issuer wants to claw back from the AMM pool. +In JSON, this is an object with currency and issuer fields. The issuer field must match with Account.

    +
    Asset2: Currency

    Specifies the other asset in the AMM's pool. In JSON, this is an object with currency and +issuer fields (omit issuer for XRP).

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    Holder: string

    The account holding the asset to be clawed back.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "AMMClawback"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/AMMClawbackFlagsInterface.html b/docs/interfaces/AMMClawbackFlagsInterface.html new file mode 100644 index 0000000000..96ad22c5f2 --- /dev/null +++ b/docs/interfaces/AMMClawbackFlagsInterface.html @@ -0,0 +1,10 @@ +AMMClawbackFlagsInterface | xrpl

    Interface AMMClawbackFlagsInterface

    Map of flags to boolean values representing AMMClawback transaction +flags.

    +
    interface AMMClawbackFlagsInterface {
    Β Β Β Β tfClawTwoAssets?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • AMMClawbackFlagsInterface

    Properties

    Properties

    tfClawTwoAssets?: boolean
    diff --git a/docs/interfaces/AMMCreate.html b/docs/interfaces/AMMCreate.html index f15f381f7c..67fd2de5f6 100644 --- a/docs/interfaces/AMMCreate.html +++ b/docs/interfaces/AMMCreate.html @@ -1,28 +1,10 @@ -AMMCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMCreate

    -
    -

    Create a new Automated Market Maker (AMM) instance for trading a pair of assets (fungible tokens or XRP).

    +AMMCreate | xrpl

    Interface AMMCreate

    Create a new Automated Market Maker (AMM) instance for trading a pair of assets (fungible tokens or XRP).

    Creates both an AMM object and a special AccountRoot object to represent the AMM. Also transfers ownership of the starting balance of both assets from the sender to the created AccountRoot and issues an initial balance of liquidity provider tokens (LP Tokens) from the AMM account to the sender.

    @@ -30,554 +12,59 @@

    Interface AMMCreate

    Otherwise, other users can profit at your expense by trading with this AMM (performing arbitrage). The currency risk that liquidity providers take on increases with the volatility (potential for imbalance) of the asset pair. The higher the trading fee, the more it offsets this risk, -so it's best to set the trading fee based on the volatility of the asset pair.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +so it's best to set the trading fee based on the volatility of the asset pair.

    +
    interface AMMCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β Amount2: Amount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TradingFee: number;
    Β Β Β Β TransactionType: "AMMCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The first of the two assets to fund this AMM with. This must be a positive amount.

    -
    -
    -
    - -
    Amount2: Amount
    -

    The second of the two assets to fund this AMM with. This must be a positive amount.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Amount: Amount

    The first of the two assets to fund this AMM with. This must be a positive amount.

    +
    Amount2: Amount

    The second of the two assets to fund this AMM with. This must be a positive amount.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TradingFee: number
    -

    The fee to charge for trades against this AMM instance, in units of 1/100,000; a value of 1 is equivalent to 0.001%. +

    TradingFee: number

    The fee to charge for trades against this AMM instance, in units of 1/100,000; a value of 1 is equivalent to 0.001%. The maximum value is 1000, indicating a 1% fee. The minimum value is 0.

    -
    -
    -
    - -
    TransactionType: "AMMCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMDelete.html b/docs/interfaces/AMMDelete.html index 56c7c2006f..6332108079 100644 --- a/docs/interfaces/AMMDelete.html +++ b/docs/interfaces/AMMDelete.html @@ -1,570 +1,65 @@ -AMMDelete | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMDelete

    -
    -

    Delete an empty Automated Market Maker (AMM) instance that could not be fully deleted automatically.

    +AMMDelete | xrpl

    Interface AMMDelete

    Delete an empty Automated Market Maker (AMM) instance that could not be fully deleted automatically.

    Tip: The AMMWithdraw transaction automatically tries to delete an AMM, along with associated ledger -entries such as empty trust lines, if it withdrew all the assets from the AMM's pool. +entries such as empty trust lines, if it withdrew all the assets from the AMM's pool. However, if there are too many trust lines to the AMM account to remove in one transaction, it may stop before fully removing the AMM. Similarly, an AMMDelete transaction removes up to a maximum number of trust lines; in extreme cases, it may take several AMMDelete transactions to fully delete the trust lines and the associated AMM. In all cases, the AMM ledger entry and AMM account are deleted by the last such transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface AMMDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Asset: Currency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AMMDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the assets in the AMM's pool.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset in the AMM's pool.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Asset: Currency

    The definition for one of the assets in the AMM's pool.

    +
    Asset2: Currency

    The definition for the other asset in the AMM's pool.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AMMDelete"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMDeposit.html b/docs/interfaces/AMMDeposit.html index 9ba4c3f8fe..2e8e5f1b5d 100644 --- a/docs/interfaces/AMMDeposit.html +++ b/docs/interfaces/AMMDeposit.html @@ -1,608 +1,71 @@ -AMMDeposit | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMDeposit

    -
    -

    Deposit funds into an Automated Market Maker (AMM) instance -and receive the AMM's liquidity provider tokens (LP Tokens) in exchange.

    -

    You can deposit one or both of the assets in the AMM's pool. +AMMDeposit | xrpl

    Interface AMMDeposit

    Deposit funds into an Automated Market Maker (AMM) instance +and receive the AMM's liquidity provider tokens (LP Tokens) in exchange.

    +

    You can deposit one or both of the assets in the AMM's pool. If successful, this transaction creates a trust line to the AMM Account (limit 0) to hold the LP Tokens.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface AMMDeposit {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount?: Amount;
    Β Β Β Β Amount2?: Amount;
    Β Β Β Β Asset: Currency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β EPrice?: Amount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LPTokenOut?: IssuedCurrencyAmount;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AMMDeposit";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount?: Amount
    -

    The amount of one asset to deposit to the AMM. -If present, this must match the type of one of the assets (tokens or XRP) in the AMM's pool.

    -
    -
    -
    - -
    Amount2?: Amount
    -

    The amount of another asset to add to the AMM. -If present, this must match the type of the other asset in the AMM's pool and cannot be the same asset as Amount.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the assets in the AMM's pool.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset in the AMM's pool.

    -
    -
    -
    - -
    EPrice?: Amount
    -

    The maximum effective price, in the deposit asset, to pay for each LP Token received.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Amount?: Amount

    The amount of one asset to deposit to the AMM. +If present, this must match the type of one of the assets (tokens or XRP) in the AMM's pool.

    +
    Amount2?: Amount

    The amount of another asset to add to the AMM. +If present, this must match the type of the other asset in the AMM's pool and cannot be the same asset as Amount.

    +
    Asset: Currency

    The definition for one of the assets in the AMM's pool.

    +
    Asset2: Currency

    The definition for the other asset in the AMM's pool.

    +
    EPrice?: Amount

    The maximum effective price, in the deposit asset, to pay for each LP Token received.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - - -

    How many of the AMM's LP Tokens to buy.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    How many of the AMM's LP Tokens to buy.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AMMDeposit"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMDeposit"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMDepositFlagsInterface.html b/docs/interfaces/AMMDepositFlagsInterface.html index 3edf142fac..5ae6d95ef9 100644 --- a/docs/interfaces/AMMDepositFlagsInterface.html +++ b/docs/interfaces/AMMDepositFlagsInterface.html @@ -1,402 +1,13 @@ -AMMDepositFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMDepositFlagsInterface

    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • AMMDepositFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfLPToken?: boolean
    -
    - -
    tfLimitLPToken?: boolean
    -
    - -
    tfOneAssetLPToken?: boolean
    -
    - -
    tfSingleAsset?: boolean
    -
    - -
    tfTwoAsset?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AMMDepositFlagsInterface | xrpl

    Interface AMMDepositFlagsInterface

    interface AMMDepositFlagsInterface {
    Β Β Β Β tfLimitLPToken?: boolean;
    Β Β Β Β tfLPToken?: boolean;
    Β Β Β Β tfOneAssetLPToken?: boolean;
    Β Β Β Β tfSingleAsset?: boolean;
    Β Β Β Β tfTwoAsset?: boolean;
    Β Β Β Β tfTwoAssetIfEmpty?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • AMMDepositFlagsInterface

    Properties

    tfLimitLPToken?: boolean
    tfLPToken?: boolean
    tfOneAssetLPToken?: boolean
    tfSingleAsset?: boolean
    tfTwoAsset?: boolean
    tfTwoAssetIfEmpty?: boolean
    diff --git a/docs/interfaces/AMMInfoRequest.html b/docs/interfaces/AMMInfoRequest.html index 17bdaab118..2bf39d46de 100644 --- a/docs/interfaces/AMMInfoRequest.html +++ b/docs/interfaces/AMMInfoRequest.html @@ -1,437 +1,23 @@ -AMMInfoRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMInfoRequest

    -
    -

    The amm_info method gets information about an Automated Market Maker (AMM) instance. +AMMInfoRequest | xrpl

    Interface AMMInfoRequest

    The amm_info method gets information about an Automated Market Maker (AMM) instance. Returns an AMMInfoResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    amm_account?: string
    -

    The address of the AMM Account to look up.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    asset?: Currency
    -

    One of the assets of the AMM pool to look up.

    -
    -
    -
    - -
    asset2?: Currency
    -

    The other asset of the AMM pool.

    -
    -
    -
    - -
    command: "amm_info"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface AMMInfoRequest {
    Β Β Β Β amm_account?: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β asset?: Currency;
    Β Β Β Β asset2?: Currency;
    Β Β Β Β command: "amm_info";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    amm_account?: string

    The address of the AMM Account to look up.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    asset?: Currency

    One of the assets of the AMM pool to look up.

    +
    asset2?: Currency

    The other asset of the AMM pool.

    +
    command: "amm_info"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMInfoResponse.html b/docs/interfaces/AMMInfoResponse.html index 54f5d25b15..36b74848c1 100644 --- a/docs/interfaces/AMMInfoResponse.html +++ b/docs/interfaces/AMMInfoResponse.html @@ -1,547 +1,49 @@ -AMMInfoResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMInfoResponse

    -
    -

    Response expected from an AMMInfoRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β amm: {
    Β Β Β Β Β Β Β Β account: string;
    Β Β Β Β Β Β Β Β amount: Amount;
    Β Β Β Β Β Β Β Β amount2: Amount;
    Β Β Β Β Β Β Β Β asset2_frozen?: boolean;
    Β Β Β Β Β Β Β Β asset_frozen?: boolean;
    Β Β Β Β Β Β Β Β auction_slot?: {
    Β Β Β Β Β Β Β Β Β Β Β Β account: string;
    Β Β Β Β Β Β Β Β Β Β Β Β auth_accounts: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β account: string;
    Β Β Β Β Β Β Β Β Β Β Β Β }[];
    Β Β Β Β Β Β Β Β Β Β Β Β discounted_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
    Β Β Β Β Β Β Β Β Β Β Β Β price: IssuedCurrencyAmount;
    Β Β Β Β Β Β Β Β Β Β Β Β time_interval: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β lp_token: IssuedCurrencyAmount;
    Β Β Β Β Β Β Β Β trading_fee: number;
    Β Β Β Β Β Β Β Β vote_slots?: {
    Β Β Β Β Β Β Β Β Β Β Β Β account: string;
    Β Β Β Β Β Β Β Β Β Β Β Β trading_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β vote_weight: number;
    Β Β Β Β Β Β Β Β }[];
    Β Β Β Β };
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
      -
    • -
      amm: {
      Β Β Β Β account: string;
      Β Β Β Β amount: Amount;
      Β Β Β Β amount2: Amount;
      Β Β Β Β asset2_frozen?: boolean;
      Β Β Β Β asset_frozen?: boolean;
      Β Β Β Β auction_slot?: {
      Β Β Β Β Β Β Β Β account: string;
      Β Β Β Β Β Β Β Β auth_accounts: {
      Β Β Β Β Β Β Β Β Β Β Β Β account: string;
      Β Β Β Β Β Β Β Β }[];
      Β Β Β Β Β Β Β Β discounted_fee: number;
      Β Β Β Β Β Β Β Β expiration: string;
      Β Β Β Β Β Β Β Β price: IssuedCurrencyAmount;
      Β Β Β Β Β Β Β Β time_interval: number;
      Β Β Β Β };
      Β Β Β Β lp_token: IssuedCurrencyAmount;
      Β Β Β Β trading_fee: number;
      Β Β Β Β vote_slots?: {
      Β Β Β Β Β Β Β Β account: string;
      Β Β Β Β Β Β Β Β trading_fee: number;
      Β Β Β Β Β Β Β Β vote_weight: number;
      Β Β Β Β }[];
      }
      -
        -
      • -
        account: string
        -

        The address of the AMM Account.

        -
        -
      • -
      • -
        amount: Amount
        -

        The total amount of one asset in the AMM's pool. +AMMInfoResponse | xrpl

        Interface AMMInfoResponse

        Response expected from an AMMInfoRequest.

        +
        interface AMMInfoResponse {
        Β Β Β Β api_version?: number;
        Β Β Β Β forwarded?: boolean;
        Β Β Β Β id: string | number;
        Β Β Β Β result: {
        Β Β Β Β Β Β Β Β amm: {
        Β Β Β Β Β Β Β Β Β Β Β Β account: string;
        Β Β Β Β Β Β Β Β Β Β Β Β amount: Amount;
        Β Β Β Β Β Β Β Β Β Β Β Β amount2: Amount;
        Β Β Β Β Β Β Β Β Β Β Β Β asset_frozen?: boolean;
        Β Β Β Β Β Β Β Β Β Β Β Β asset2_frozen?: boolean;
        Β Β Β Β Β Β Β Β Β Β Β Β auction_slot?: {
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β account: string;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β auth_accounts: { account: string }[];
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β discounted_fee: number;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β price: IssuedCurrencyAmount;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β time_interval: number;
        Β Β Β Β Β Β Β Β Β Β Β Β };
        Β Β Β Β Β Β Β Β Β Β Β Β lp_token: IssuedCurrencyAmount;
        Β Β Β Β Β Β Β Β Β Β Β Β trading_fee: number;
        Β Β Β Β Β Β Β Β Β Β Β Β vote_slots?: {
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β account: string;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β trading_fee: number;
        Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β vote_weight: number;
        Β Β Β Β Β Β Β Β Β Β Β Β }[];
        Β Β Β Β Β Β Β Β };
        Β Β Β Β Β Β Β Β ledger_hash?: string;
        Β Β Β Β Β Β Β Β ledger_index?: number;
        Β Β Β Β Β Β Β Β validated?: boolean;
        Β Β Β Β };
        Β Β Β Β status?: string;
        Β Β Β Β type: string;
        Β Β Β Β warning?: "load";
        Β Β Β Β warnings?: ResponseWarning[];
        }

        Hierarchy (View Summary)

        Properties

        api_version?: number
        forwarded?: boolean
        id: string | number
        result: {
        Β Β Β Β amm: {
        Β Β Β Β Β Β Β Β account: string;
        Β Β Β Β Β Β Β Β amount: Amount;
        Β Β Β Β Β Β Β Β amount2: Amount;
        Β Β Β Β Β Β Β Β asset_frozen?: boolean;
        Β Β Β Β Β Β Β Β asset2_frozen?: boolean;
        Β Β Β Β Β Β Β Β auction_slot?: {
        Β Β Β Β Β Β Β Β Β Β Β Β account: string;
        Β Β Β Β Β Β Β Β Β Β Β Β auth_accounts: { account: string }[];
        Β Β Β Β Β Β Β Β Β Β Β Β discounted_fee: number;
        Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
        Β Β Β Β Β Β Β Β Β Β Β Β price: IssuedCurrencyAmount;
        Β Β Β Β Β Β Β Β Β Β Β Β time_interval: number;
        Β Β Β Β Β Β Β Β };
        Β Β Β Β Β Β Β Β lp_token: IssuedCurrencyAmount;
        Β Β Β Β Β Β Β Β trading_fee: number;
        Β Β Β Β Β Β Β Β vote_slots?: { account: string; trading_fee: number; vote_weight: number }[];
        Β Β Β Β };
        Β Β Β Β ledger_hash?: string;
        Β Β Β Β ledger_index?: number;
        Β Β Β Β validated?: boolean;
        }

        Type declaration

        • amm: {
          Β Β Β Β account: string;
          Β Β Β Β amount: Amount;
          Β Β Β Β amount2: Amount;
          Β Β Β Β asset_frozen?: boolean;
          Β Β Β Β asset2_frozen?: boolean;
          Β Β Β Β auction_slot?: {
          Β Β Β Β Β Β Β Β account: string;
          Β Β Β Β Β Β Β Β auth_accounts: { account: string }[];
          Β Β Β Β Β Β Β Β discounted_fee: number;
          Β Β Β Β Β Β Β Β expiration: string;
          Β Β Β Β Β Β Β Β price: IssuedCurrencyAmount;
          Β Β Β Β Β Β Β Β time_interval: number;
          Β Β Β Β };
          Β Β Β Β lp_token: IssuedCurrencyAmount;
          Β Β Β Β trading_fee: number;
          Β Β Β Β vote_slots?: { account: string; trading_fee: number; vote_weight: number }[];
          }
          • account: string

            The address of the AMM Account.

            +
          • amount: Amount

            The total amount of one asset in the AMM's pool. (Note: This could be asset or asset2 from the request)

            -
            -
          • -
          • -
            amount2: Amount
            -

            The total amount of the other asset in the AMM's pool. +

          • amount2: Amount

            The total amount of the other asset in the AMM's pool. (Note: This could be asset or asset2 from the request)

            -
            -
          • -
          • -
            Optional asset2_frozen?: boolean
            -

            (Omitted for XRP) If true, the amount currency is currently frozen for asset2.

            -
            -
          • -
          • -
            Optional asset_frozen?: boolean
            -

            (Omitted for XRP) If true, the amount currency is currently frozen for asset.

            -
            -
          • -
          • -
            Optional auction_slot?: {
            Β Β Β Β account: string;
            Β Β Β Β auth_accounts: {
            Β Β Β Β Β Β Β Β account: string;
            Β Β Β Β }[];
            Β Β Β Β discounted_fee: number;
            Β Β Β Β expiration: string;
            Β Β Β Β price: IssuedCurrencyAmount;
            Β Β Β Β time_interval: number;
            }
            -

            (May be omitted) An Auction Slot Object describing the current auction slot holder, if there is one.

            -
            -
            -
              -
            • -
              account: string
              -

              The address of the account that owns the auction slot.

              -
              -
            • -
            • -
              auth_accounts: {
              Β Β Β Β account: string;
              }[]
              -

              A list of additional accounts that the auction slot holder has designated as being eligible +

            • Optionalasset_frozen?: boolean

              (Omitted for XRP) If true, the amount currency is currently frozen for asset.

              +
            • Optionalasset2_frozen?: boolean

              (Omitted for XRP) If true, the amount currency is currently frozen for asset2.

              +
            • Optionalauction_slot?: {
              Β Β Β Β account: string;
              Β Β Β Β auth_accounts: { account: string }[];
              Β Β Β Β discounted_fee: number;
              Β Β Β Β expiration: string;
              Β Β Β Β price: IssuedCurrencyAmount;
              Β Β Β Β time_interval: number;
              }

              (May be omitted) An Auction Slot Object describing the current auction slot holder, if there is one.

              +
              • account: string

                The address of the account that owns the auction slot.

                +
              • auth_accounts: { account: string }[]

                A list of additional accounts that the auction slot holder has designated as being eligible of the discounted trading fee. Each member of this array is an object with one field, account, containing the address of the designated account.

                -
                -
              • -
              • -
                discounted_fee: number
                -

                The discounted trading fee that applies to the auction slot holder, and any eligible accounts +

              • discounted_fee: number

                The discounted trading fee that applies to the auction slot holder, and any eligible accounts when trading against this AMM. This is always 0.

                -
                -
              • -
              • -
                expiration: string
                -

                The ISO 8601 UTC timestamp after which this auction slot expires. +

              • expiration: string

                The ISO 8601 UTC timestamp after which this auction slot expires. After expired, the auction slot does not apply (but the data can remain in the ledger until another transaction replaces it or cleans it up).

                -
                -
              • -
              • -
                price: IssuedCurrencyAmount
                -

                The amount, in LP Tokens, that the auction slot holder paid to win the auction slot. +

              • price: IssuedCurrencyAmount

                The amount, in LP Tokens, that the auction slot holder paid to win the auction slot. This affects the price to outbid the current slot holder.

                -
                -
              • -
              • -
                time_interval: number
                -

                The current 72-minute time interval this auction slot is in, from 0 to 19. +

              • time_interval: number

                The current 72-minute time interval this auction slot is in, from 0 to 19. The auction slot expires after 24 hours (20 intervals of 72 minutes) and affects the cost to outbid the current holder and how much the current holder is refunded if someone outbids them.

                -
                -
            • -
            • -
              lp_token: IssuedCurrencyAmount
              -

              The total amount of this AMM's LP Tokens outstanding.

              -
              -
            • -
            • -
              trading_fee: number
              -

              The AMM's current trading fee, in units of 1/100,000; a value of 1 is equivalent to a 0.001% fee.

              -
              -
            • -
            • -
              Optional vote_slots?: {
              Β Β Β Β account: string;
              Β Β Β Β trading_fee: number;
              Β Β Β Β vote_weight: number;
              }[]
              -

              (May be omitted) The current votes for the AMM's trading fee, as Vote Slot Objects.

              -
              -
          • -
          • -
            Optional ledger_hash?: string
            -

            The identifying hash of the ledger that was used to generate this +

        • lp_token: IssuedCurrencyAmount

          The total amount of this AMM's LP Tokens outstanding.

          +
        • trading_fee: number

          The AMM's current trading fee, in units of 1/100,000; a value of 1 is equivalent to a 0.001% fee.

          +
        • Optionalvote_slots?: { account: string; trading_fee: number; vote_weight: number }[]

          (May be omitted) The current votes for the AMM's trading fee, as Vote Slot Objects.

          +
      • Optionalledger_hash?: string

        The identifying hash of the ledger that was used to generate this response.

        -
        -
      • -
      • -
        Optional ledger_index?: number
        -

        The ledger index of the ledger version that was used to generate this +

      • Optionalledger_index?: number

        The ledger index of the ledger version that was used to generate this response.

        -
        -
      • -
      • -
        Optional validated?: boolean
        -

        If included and set to true, the information in this response comes from +

      • Optionalvalidated?: boolean

        If included and set to true, the information in this response comes from a validated ledger version. Otherwise, the information is subject to change.

        -
        -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AMMVote.html b/docs/interfaces/AMMVote.html index 33f891753b..b36f9cee15 100644 --- a/docs/interfaces/AMMVote.html +++ b/docs/interfaces/AMMVote.html @@ -1,576 +1,63 @@ -AMMVote | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMVote

    -
    -

    Vote on the trading fee for an Automated Market Maker (AMM) instance.

    -

    Up to 8 accounts can vote in proportion to the amount of the AMM's LP Tokens they hold. -Each new vote re-calculates the AMM's trading fee based on a weighted average of the votes.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +AMMVote | xrpl

    Interface AMMVote

    Vote on the trading fee for an Automated Market Maker (AMM) instance.

    +

    Up to 8 accounts can vote in proportion to the amount of the AMM's LP Tokens they hold. +Each new vote re-calculates the AMM's trading fee based on a weighted average of the votes.

    +
    interface AMMVote {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Asset: Currency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TradingFee: number;
    Β Β Β Β TransactionType: "AMMVote";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the assets in the AMM's pool.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset in the AMM's pool.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Asset: Currency

    The definition for one of the assets in the AMM's pool.

    +
    Asset2: Currency

    The definition for the other asset in the AMM's pool.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TradingFee: number
    -

    The proposed fee to vote for, in units of 1/100,000; a value of 1 is equivalent to 0.001%. +

    TradingFee: number

    The proposed fee to vote for, in units of 1/100,000; a value of 1 is equivalent to 0.001%. The maximum value is 1000, indicating a 1% fee.

    -
    -
    -
    - -
    TransactionType: "AMMVote"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMVote"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMWithdraw.html b/docs/interfaces/AMMWithdraw.html index f47fd0ff1b..2f146bf92b 100644 --- a/docs/interfaces/AMMWithdraw.html +++ b/docs/interfaces/AMMWithdraw.html @@ -1,605 +1,68 @@ -AMMWithdraw | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMWithdraw

    -
    -

    Withdraw assets from an Automated Market Maker (AMM) instance by returning the AMM's liquidity provider tokens (LP Tokens).

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +AMMWithdraw | xrpl

    Interface AMMWithdraw

    Withdraw assets from an Automated Market Maker (AMM) instance by returning the AMM's liquidity provider tokens (LP Tokens).

    +
    interface AMMWithdraw {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount?: Amount;
    Β Β Β Β Amount2?: Amount;
    Β Β Β Β Asset: Currency;
    Β Β Β Β Asset2: Currency;
    Β Β Β Β EPrice?: Amount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LPTokenIn?: IssuedCurrencyAmount;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AMMWithdraw";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount?: Amount
    -

    The amount of one asset to withdraw from the AMM. -This must match the type of one of the assets (tokens or XRP) in the AMM's pool.

    -
    -
    -
    - -
    Amount2?: Amount
    -

    The amount of another asset to withdraw from the AMM. -If present, this must match the type of the other asset in the AMM's pool and cannot be the same type as Amount.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the assets in the AMM's pool.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset in the AMM's pool.

    -
    -
    -
    - -
    EPrice?: Amount
    -

    The minimum effective price, in LP Token returned, to pay per unit of the asset to withdraw.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Amount?: Amount

    The amount of one asset to withdraw from the AMM. +This must match the type of one of the assets (tokens or XRP) in the AMM's pool.

    +
    Amount2?: Amount

    The amount of another asset to withdraw from the AMM. +If present, this must match the type of the other asset in the AMM's pool and cannot be the same type as Amount.

    +
    Asset: Currency

    The definition for one of the assets in the AMM's pool.

    +
    Asset2: Currency

    The definition for the other asset in the AMM's pool.

    +
    EPrice?: Amount

    The minimum effective price, in LP Token returned, to pay per unit of the asset to withdraw.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - - -

    How many of the AMM's LP Tokens to redeem.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    How many of the AMM's LP Tokens to redeem.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AMMWithdraw"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AMMWithdraw"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AMMWithdrawFlagsInterface.html b/docs/interfaces/AMMWithdrawFlagsInterface.html index 073111d446..21fbc610b1 100644 --- a/docs/interfaces/AMMWithdrawFlagsInterface.html +++ b/docs/interfaces/AMMWithdrawFlagsInterface.html @@ -1,416 +1,14 @@ -AMMWithdrawFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMMWithdrawFlagsInterface

    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • AMMWithdrawFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfLPToken?: boolean
    -
    - -
    tfLimitLPToken?: boolean
    -
    - -
    tfOneAssetLPToken?: boolean
    -
    - -
    tfOneAssetWithdrawAll?: boolean
    -
    - -
    tfSingleAsset?: boolean
    -
    - -
    tfTwoAsset?: boolean
    -
    - -
    tfWithdrawAll?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AMMWithdrawFlagsInterface | xrpl

    Interface AMMWithdrawFlagsInterface

    interface AMMWithdrawFlagsInterface {
    Β Β Β Β tfLimitLPToken?: boolean;
    Β Β Β Β tfLPToken?: boolean;
    Β Β Β Β tfOneAssetLPToken?: boolean;
    Β Β Β Β tfOneAssetWithdrawAll?: boolean;
    Β Β Β Β tfSingleAsset?: boolean;
    Β Β Β Β tfTwoAsset?: boolean;
    Β Β Β Β tfWithdrawAll?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • AMMWithdrawFlagsInterface

    Properties

    tfLimitLPToken?: boolean
    tfLPToken?: boolean
    tfOneAssetLPToken?: boolean
    tfOneAssetWithdrawAll?: boolean
    tfSingleAsset?: boolean
    tfTwoAsset?: boolean
    tfWithdrawAll?: boolean
    diff --git a/docs/interfaces/AccountChannelsRequest.html b/docs/interfaces/AccountChannelsRequest.html index 1655810686..ce93c95adb 100644 --- a/docs/interfaces/AccountChannelsRequest.html +++ b/docs/interfaces/AccountChannelsRequest.html @@ -1,478 +1,37 @@ -AccountChannelsRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountChannelsRequest

    -
    -

    The account_channels method returns information about an account's Payment +AccountChannelsRequest | xrpl

    Interface AccountChannelsRequest

    The account_channels method returns information about an account's Payment Channels. This includes only channels where the specified account is the -channel's source, not the destination. (A channel's "source" and "owner" are +channel's source, not the destination. (A channel's "source" and "owner" are the same.) All information retrieved is relative to a particular version of the ledger. Returns an AccountChannelsResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountChannelsRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    The unique identifier of an account, typically the account's address. The -request returns channels where this account is the channel's owner/source.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_channels"
    -

    The name of the API method.

    -
    -
    -
    - -
    destination_account?: string
    -

    The unique identifier of an account, typically the account's address. If +

    interface AccountChannelsRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_channels";
    Β Β Β Β destination_account?: string;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    The unique identifier of an account, typically the account's address. The +request returns channels where this account is the channel's owner/source.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_channels"

    The name of the API method.

    +
    destination_account?: string

    The unique identifier of an account, typically the account's address. If provided, filter results to payment channels whose destination is this account.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    Limit the number of transactions to retrieve. Cannot be less than 10 or +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Limit the number of transactions to retrieve. Cannot be less than 10 or more than 400. The default is 200.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountChannelsResponse.html b/docs/interfaces/AccountChannelsResponse.html index 642e7630d0..36f2299aba 100644 --- a/docs/interfaces/AccountChannelsResponse.html +++ b/docs/interfaces/AccountChannelsResponse.html @@ -1,479 +1,29 @@ -AccountChannelsResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountChannelsResponse

    -
    -

    The expected response from an AccountChannelsRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β channels: Channel[];
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountCurrenciesRequest.html b/docs/interfaces/AccountCurrenciesRequest.html index d33f69b619..cd5fc6cd85 100644 --- a/docs/interfaces/AccountCurrenciesRequest.html +++ b/docs/interfaces/AccountCurrenciesRequest.html @@ -1,453 +1,28 @@ -AccountCurrenciesRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountCurrenciesRequest

    -
    -

    The account_currencies command retrieves a list of currencies that an +AccountCurrenciesRequest | xrpl

    Interface AccountCurrenciesRequest

    The account_currencies command retrieves a list of currencies that an account can send or receive, based on its trust lines. Expects an AccountCurrenciesResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountCurrenciesRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_currencies"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface AccountCurrenciesRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_currencies";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β strict?: boolean;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    • BaseRequest
    • LookupByLedgerRequest
      • AccountCurrenciesRequest

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_currencies"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    strict?: boolean
    -

    If true, then the account field only accepts a public key or XRP Ledger +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    strict?: boolean

    If true, then the account field only accepts a public key or XRP Ledger address. Otherwise, account can be a secret or passphrase (not recommended). The default is false.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountCurrenciesResponse.html b/docs/interfaces/AccountCurrenciesResponse.html index 1a13f50105..4c71c0cb40 100644 --- a/docs/interfaces/AccountCurrenciesResponse.html +++ b/docs/interfaces/AccountCurrenciesResponse.html @@ -1,464 +1,22 @@ -AccountCurrenciesResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountCurrenciesResponse

    -
    -

    The expected response from an AccountCurrenciesRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β receive_currencies: string[];
    Β Β Β Β send_currencies: string[];
    Β Β Β Β validated: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountDelete.html b/docs/interfaces/AccountDelete.html index 0756e22ea0..809d28ba1b 100644 --- a/docs/interfaces/AccountDelete.html +++ b/docs/interfaces/AccountDelete.html @@ -1,568 +1,67 @@ -AccountDelete | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountDelete

    -
    -

    An AccountDelete transaction deletes an account and any objects it owns in -the XRP Ledger, if possible, sending the account's remaining XRP to a +AccountDelete | xrpl

    Interface AccountDelete

    An AccountDelete transaction deletes an account and any objects it owns in +the XRP Ledger, if possible, sending the account's remaining XRP to a specified destination account.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface AccountDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β CredentialIDs?: string[];
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "AccountDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Destination: string
    -

    The address of an account to receive any leftover XRP after deleting the +

    CredentialIDs?: string[]

    Credentials associated with sender of this transaction. The credentials included +must not be expired. The list must not be empty when specified and cannot contain +more than 8 credentials.

    +
    Destination: string

    The address of an account to receive any leftover XRP after deleting the sending account. Must be a funded account in the ledger, and must not be. the sending account.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    Arbitrary destination tag that identifies a hosted recipient or other. -information for the recipient of the deleted account's leftover XRP.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    DestinationTag?: number

    Arbitrary destination tag that identifies a hosted recipient or other. +information for the recipient of the deleted account's leftover XRP.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AccountDelete"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AccountDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountInfoAccountFlags.html b/docs/interfaces/AccountInfoAccountFlags.html index c7eedb5158..2bdbc854ec 100644 --- a/docs/interfaces/AccountInfoAccountFlags.html +++ b/docs/interfaces/AccountInfoAccountFlags.html @@ -1,506 +1,36 @@ -AccountInfoAccountFlags | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountInfoAccountFlags

    -
    -

    Hierarchy

    -
      -
    • AccountInfoAccountFlags
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    allowTrustLineClawback: boolean
    -

    This address can claw back issued IOUs. Once enabled, cannot be disabled.

    -
    -
    -
    - -
    defaultRipple: boolean
    -

    Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

    -
    -
    -
    - -
    depositAuth: boolean
    -

    This account can only receive funds from transactions it sends, and from preauthorized accounts. +AccountInfoAccountFlags | xrpl

    Interface AccountInfoAccountFlags

    interface AccountInfoAccountFlags {
    Β Β Β Β allowTrustLineClawback: boolean;
    Β Β Β Β defaultRipple: boolean;
    Β Β Β Β depositAuth: boolean;
    Β Β Β Β disableMasterKey: boolean;
    Β Β Β Β disallowIncomingCheck?: boolean;
    Β Β Β Β disallowIncomingNFTokenOffer?: boolean;
    Β Β Β Β disallowIncomingPayChan?: boolean;
    Β Β Β Β disallowIncomingTrustline?: boolean;
    Β Β Β Β disallowIncomingXRP: boolean;
    Β Β Β Β globalFreeze: boolean;
    Β Β Β Β noFreeze: boolean;
    Β Β Β Β passwordSpent: boolean;
    Β Β Β Β requireAuthorization: boolean;
    Β Β Β Β requireDestinationTag: boolean;
    }

    Properties

    allowTrustLineClawback: boolean

    This address can claw back issued IOUs. Once enabled, cannot be disabled.

    +
    defaultRipple: boolean

    Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

    +
    depositAuth: boolean

    This account can only receive funds from transactions it sends, and from preauthorized accounts. (It has DepositAuth enabled.)

    -
    -
    -
    - -
    disableMasterKey: boolean
    -

    Disallows use of the master key to sign transactions for this account.

    -
    -
    -
    - -
    disallowIncomingCheck?: boolean
    -

    Disallow incoming Checks from other accounts.

    -
    -
    -
    - -
    disallowIncomingNFTokenOffer?: boolean
    -

    Disallow incoming NFTOffers from other accounts. Part of the DisallowIncoming amendment.

    -
    -
    -
    - -
    disallowIncomingPayChan?: boolean
    -

    Disallow incoming PayChannels from other accounts. Part of the DisallowIncoming amendment.

    -
    -
    -
    - -
    disallowIncomingTrustline?: boolean
    -

    Disallow incoming Trustlines from other accounts. Part of the DisallowIncoming amendment.

    -
    -
    -
    - -
    disallowIncomingXRP: boolean
    -

    Client applications should not send XRP to this account. Not enforced by rippled.

    -
    -
    -
    - -
    globalFreeze: boolean
    -

    All assets issued by this address are frozen.

    -
    -
    -
    - -
    noFreeze: boolean
    -

    This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

    -
    -
    -
    - -
    passwordSpent: boolean
    -

    The account has used its free SetRegularKey transaction.

    -
    -
    -
    - -
    requireAuthorization: boolean
    -

    This account must individually approve other users for those users to hold this account's issued currencies.

    -
    -
    -
    - -
    requireDestinationTag: boolean
    -

    Requires incoming payments to specify a Destination Tag.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    disableMasterKey: boolean

    Disallows use of the master key to sign transactions for this account.

    +
    disallowIncomingCheck?: boolean

    Disallow incoming Checks from other accounts.

    +
    disallowIncomingNFTokenOffer?: boolean

    Disallow incoming NFTOffers from other accounts. Part of the DisallowIncoming amendment.

    +
    disallowIncomingPayChan?: boolean

    Disallow incoming PayChannels from other accounts. Part of the DisallowIncoming amendment.

    +
    disallowIncomingTrustline?: boolean

    Disallow incoming Trustlines from other accounts. Part of the DisallowIncoming amendment.

    +
    disallowIncomingXRP: boolean

    Client applications should not send XRP to this account. Not enforced by rippled.

    +
    globalFreeze: boolean

    All assets issued by this address are frozen.

    +
    noFreeze: boolean

    This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

    +
    passwordSpent: boolean

    The account has used its free SetRegularKey transaction.

    +
    requireAuthorization: boolean

    This account must individually approve other users for those users to hold this account's issued currencies.

    +
    requireDestinationTag: boolean

    Requires incoming payments to specify a Destination Tag.

    +
    diff --git a/docs/interfaces/AccountInfoRequest.html b/docs/interfaces/AccountInfoRequest.html index 84bd44946b..459bdf62d1 100644 --- a/docs/interfaces/AccountInfoRequest.html +++ b/docs/interfaces/AccountInfoRequest.html @@ -1,475 +1,34 @@ -AccountInfoRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountInfoRequest

    -
    -

    The account_info command retrieves information about an account, its +AccountInfoRequest | xrpl

    Interface AccountInfoRequest

    The account_info command retrieves information about an account, its activity, and its XRP balance. All information retrieved is relative to a particular version of the ledger. Returns an AccountInfoResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountInfoRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_info"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface AccountInfoRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_info";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β queue?: boolean;
    Β Β Β Β signer_lists?: boolean;
    Β Β Β Β strict?: boolean;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_info"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    queue?: boolean
    -

    Whether to get info about this account's queued transactions. Can only be +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    queue?: boolean

    Whether to get info about this account's queued transactions. Can only be used when querying for the data from the current open ledger. Not available from servers in Reporting Mode.

    -
    -
    -
    - -
    signer_lists?: boolean
    -

    Request SignerList objects associated with this account.

    -
    -
    -
    - -
    strict?: boolean
    -

    If true, then the account field only accepts a public key or XRP Ledger +

    signer_lists?: boolean

    Request SignerList objects associated with this account.

    +
    strict?: boolean

    If true, then the account field only accepts a public key or XRP Ledger address. Otherwise, account can be a secret or passphrase (not recommended). The default is false.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountInfoResponse.html b/docs/interfaces/AccountInfoResponse.html index 1e146c04a8..200ab90fda 100644 --- a/docs/interfaces/AccountInfoResponse.html +++ b/docs/interfaces/AccountInfoResponse.html @@ -1,481 +1,34 @@ -AccountInfoResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountInfoResponse

    -
    -

    Response expected from an AccountInfoRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account_data: AccountRoot & {
    Β Β Β Β Β Β Β Β signer_lists?: SignerList[];
    Β Β Β Β };
    Β Β Β Β account_flags?: AccountInfoAccountFlags;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β queue_data?: AccountQueueData;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    • Optionalsigner_lists?: SignerList[]

      If requested, array of SignerList ledger objects associated with this account for Multi-Signing. +Since an account can own at most one SignerList, this array must have exactly one +member if it is present.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountInfoV1Response.html b/docs/interfaces/AccountInfoV1Response.html new file mode 100644 index 0000000000..4367342972 --- /dev/null +++ b/docs/interfaces/AccountInfoV1Response.html @@ -0,0 +1,37 @@ +AccountInfoV1Response | xrpl

    Interface AccountInfoV1Response

    Response expected from a AccountInfoRequest using API version 1.

    +
    interface AccountInfoV1Response {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β account_data: AccountRoot;
    Β Β Β Β Β Β Β Β account_flags?: AccountInfoAccountFlags;
    Β Β Β Β Β Β Β Β ledger_current_index?: number;
    Β Β Β Β Β Β Β Β ledger_index?: number;
    Β Β Β Β Β Β Β Β queue_data?: AccountQueueData;
    Β Β Β Β Β Β Β Β validated?: boolean;
    Β Β Β Β } & { account_data: AccountRoot & { signer_lists?: SignerList[] } };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy

    • BaseAccountInfoResponse
      • AccountInfoV1Response

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: {
    Β Β Β Β account_data: AccountRoot;
    Β Β Β Β account_flags?: AccountInfoAccountFlags;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β queue_data?: AccountQueueData;
    Β Β Β Β validated?: boolean;
    } & { account_data: AccountRoot & { signer_lists?: SignerList[] } }

    Type declaration

    • account_data: AccountRoot

      The AccountRoot ledger object with this account's information, as stored +in the ledger.

      +
    • Optionalaccount_flags?: AccountInfoAccountFlags

      A map of account flags parsed out. This will only be available for rippled nodes 1.11.0 and higher.

      +
    • Optionalledger_current_index?: number

      The ledger index of the current in-progress ledger, which was used when +retrieving this information.

      +
    • Optionalledger_index?: number

      The ledger index of the ledger version used when retrieving this +information. The information does not contain any changes from ledger +versions newer than this one.

      +
    • Optionalqueue_data?: AccountQueueData

      Information about queued transactions sent by this account. This +information describes the state of the local rippled server, which may be +different from other servers in the peer-to-peer XRP Ledger network. Some +fields may be omitted because the values are calculated "lazily" by the +queuing mechanism.

      +
    • Optionalvalidated?: boolean

      True if this data is from a validated ledger version; if omitted or set +to false, this data is not final.

      +
    • account_data: AccountRoot & { signer_lists?: SignerList[] }

      The AccountRoot ledger object with this account's information, as stored +in the ledger. +If requested, also includes Array of SignerList ledger objects +associated with this account for Multi-Signing. Since an account can own +at most one SignerList, this array must have exactly one member if it is +present.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountLinesRequest.html b/docs/interfaces/AccountLinesRequest.html index 19deaea724..a8df5dcffc 100644 --- a/docs/interfaces/AccountLinesRequest.html +++ b/docs/interfaces/AccountLinesRequest.html @@ -1,475 +1,34 @@ -AccountLinesRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountLinesRequest

    -
    -

    The account_lines method returns information about an account's trust lines, - including balances in all non-XRP currencies and assets. All information +AccountLinesRequest | xrpl

    Interface AccountLinesRequest

    The account_lines method returns information about an account's trust lines, +including balances in all non-XRP currencies and assets. All information retrieved is relative to a particular version of the ledger. Expects an AccountLinesResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountLinesRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's Address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_lines"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface AccountLinesRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_lines";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β peer?: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's Address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_lines"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    Limit the number of trust lines to retrieve. The server is not required to +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Limit the number of trust lines to retrieve. The server is not required to honor this value. Must be within the inclusive range 10 to 400.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - -
    peer?: string
    -

    The Address of a second account. If provided, show only lines of trust +

    peer?: string

    The Address of a second account. If provided, show only lines of trust connecting the two accounts.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountLinesResponse.html b/docs/interfaces/AccountLinesResponse.html index 8a0c306588..a61bb2100c 100644 --- a/docs/interfaces/AccountLinesResponse.html +++ b/docs/interfaces/AccountLinesResponse.html @@ -1,475 +1,29 @@ -AccountLinesResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountLinesResponse

    -
    -

    Response expected from an AccountLinesRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β lines: AccountLinesTrustline[];
    Β Β Β Β marker?: unknown;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountLinesTrustline.html b/docs/interfaces/AccountLinesTrustline.html index 13ea940003..c9d01dd542 100644 --- a/docs/interfaces/AccountLinesTrustline.html +++ b/docs/interfaces/AccountLinesTrustline.html @@ -1,514 +1,52 @@ -AccountLinesTrustline | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountLinesTrustline

    -
    -

    Hierarchy

    -
      -
    • AccountLinesTrustline
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    The unique Address of the counterparty to this trust line.

    -
    -
    -
    - -
    authorized?: boolean
    -

    If true, this account has authorized this trust line. The default is false.

    -
    -
    -
    - -
    balance: string
    -

    Representation of the numeric balance currently held against this line. A +AccountLinesTrustline | xrpl

    Interface AccountLinesTrustline

    interface AccountLinesTrustline {
    Β Β Β Β account: string;
    Β Β Β Β authorized?: boolean;
    Β Β Β Β balance: string;
    Β Β Β Β currency: string;
    Β Β Β Β freeze?: boolean;
    Β Β Β Β freeze_peer?: boolean;
    Β Β Β Β limit: string;
    Β Β Β Β limit_peer: string;
    Β Β Β Β no_ripple?: boolean;
    Β Β Β Β no_ripple_peer?: boolean;
    Β Β Β Β peer_authorized?: boolean;
    Β Β Β Β quality_in: number;
    Β Β Β Β quality_out: number;
    }

    Properties

    account: string

    The unique Address of the counterparty to this trust line.

    +
    authorized?: boolean

    If true, this account has authorized this trust line. The default is false.

    +
    balance: string

    Representation of the numeric balance currently held against this line. A positive balance means that the perspective account holds value; a negative Balance means that the perspective account owes value.

    -
    -
    -
    - -
    currency: string
    -

    A Currency Code identifying what currency this trust line can hold.

    -
    -
    -
    - -
    freeze?: boolean
    -

    If true, this account has frozen this trust line. The default is false.

    -
    -
    -
    - -
    freeze_peer?: boolean
    -

    If true, the peer account has frozen this trust line. The default is +

    currency: string

    A Currency Code identifying what currency this trust line can hold.

    +
    freeze?: boolean

    If true, this account has frozen this trust line. The default is false.

    +
    freeze_peer?: boolean

    If true, the peer account has frozen this trust line. The default is false.

    -
    -
    -
    - -
    limit: string
    -

    The maximum amount of the given currency that this account is willing to +

    limit: string

    The maximum amount of the given currency that this account is willing to owe the peer account.

    -
    -
    -
    - -
    limit_peer: string
    -

    The maximum amount of currency that the issuer account is willing to owe +

    limit_peer: string

    The maximum amount of currency that the issuer account is willing to owe the perspective account.

    -
    -
    -
    - -
    no_ripple?: boolean
    -

    If true, this account has enabled the No Ripple flag for this trust line. +

    no_ripple?: boolean

    If true, this account has enabled the No Ripple flag for this trust line. If present and false, this account has disabled the No Ripple flag, but, because the account also has the Default Ripple flag enabled, that is not considered the default state. If omitted, the account has the No Ripple flag disabled for this trust line and Default Ripple disabled.

    -
    -
    -
    - -
    no_ripple_peer?: boolean
    -

    If true, the peer account has enabled the No Ripple flag for this trust +

    no_ripple_peer?: boolean

    If true, the peer account has enabled the No Ripple flag for this trust line. If present and false, this account has disabled the No Ripple flag, but, because the account also has the Default Ripple flag enabled, that is not considered the default state. If omitted, the account has the No Ripple flag disabled for this trust line and Default Ripple disabled.

    -
    -
    -
    - -
    peer_authorized?: boolean
    -

    If true, the peer account has authorized this trust line. The default is false.

    -
    -
    -
    - -
    quality_in: number
    -

    Rate at which the account values incoming balances on this trust line, as +

    peer_authorized?: boolean

    If true, the peer account has authorized this trust line. The default is false.

    +
    quality_in: number

    Rate at which the account values incoming balances on this trust line, as a ratio of this value per 1 billion units. (For example, a value of 500 million represents a 0.5:1 ratio.) As a special case, 0 is treated as a 1:1 ratio.

    -
    -
    -
    - -
    quality_out: number
    -

    Rate at which the account values outgoing balances on this trust line, as +

    quality_out: number

    Rate at which the account values outgoing balances on this trust line, as a ratio of this value per 1 billion units. (For example, a value of 500 million represents a 0.5:1 ratio.) As a special case, 0 is treated as a 1:1 ratio.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountNFToken.html b/docs/interfaces/AccountNFToken.html index 9d77e5e77c..0f0c6ccd4a 100644 --- a/docs/interfaces/AccountNFToken.html +++ b/docs/interfaces/AccountNFToken.html @@ -1,411 +1,14 @@ -AccountNFToken | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountNFToken

    -
    -

    One NFToken that might be returned from an AccountNFTsRequest.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • AccountNFToken
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Flags: number
    -
    - -
    Issuer: string
    -
    - -
    NFTokenID: string
    -
    - -
    NFTokenTaxon: number
    -
    - -
    URI?: string
    -
    - -
    nft_serial: number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AccountNFToken | xrpl

    Interface AccountNFToken

    One NFToken that might be returned from an AccountNFTsRequest.

    +
    interface AccountNFToken {
    Β Β Β Β Flags: number;
    Β Β Β Β Issuer: string;
    Β Β Β Β nft_serial: number;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β NFTokenTaxon: number;
    Β Β Β Β URI?: string;
    }

    Properties

    Flags: number
    Issuer: string
    nft_serial: number
    NFTokenID: string
    NFTokenTaxon: number
    URI?: string
    diff --git a/docs/interfaces/AccountNFTsRequest.html b/docs/interfaces/AccountNFTsRequest.html index 52bf1680c9..fbe12b4241 100644 --- a/docs/interfaces/AccountNFTsRequest.html +++ b/docs/interfaces/AccountNFTsRequest.html @@ -1,462 +1,29 @@ -AccountNFTsRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountNFTsRequest

    -
    -

    The account_nfts method retrieves all of the NFTs currently owned by the +AccountNFTsRequest | xrpl

    Interface AccountNFTsRequest

    The account_nfts method retrieves all of the NFTs currently owned by the specified account.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountNFTsRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    The unique identifier of an account, typically the account's address. The +

    interface AccountNFTsRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_nfts";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    The unique identifier of an account, typically the account's address. The request returns NFTs owned by this account.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_nfts"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_nfts"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    Limit the number of NFTokens to retrieve.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Limit the number of NFTokens to retrieve.

    +
    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountNFTsResponse.html b/docs/interfaces/AccountNFTsResponse.html index a82f27f5dc..2916c22114 100644 --- a/docs/interfaces/AccountNFTsResponse.html +++ b/docs/interfaces/AccountNFTsResponse.html @@ -1,471 +1,25 @@ -AccountNFTsResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountNFTsResponse

    -
    -

    Response expected from an AccountNFTsRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β account_nfts: AccountNFToken[];
    Β Β Β Β ledger_current_index: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β validated: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountObjectsRequest.html b/docs/interfaces/AccountObjectsRequest.html index 39f30f8308..7e96a31364 100644 --- a/docs/interfaces/AccountObjectsRequest.html +++ b/docs/interfaces/AccountObjectsRequest.html @@ -1,485 +1,36 @@ -AccountObjectsRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountObjectsRequest

    -
    -

    The account_objects command returns the raw ledger format for all objects -owned by an account. For a higher-level view of an account's trust lines and +AccountObjectsRequest | xrpl

    Interface AccountObjectsRequest

    The account_objects command returns the raw ledger format for all objects +owned by an account. For a higher-level view of an account's trust lines and balances, see the account_lines method instead. Expects a response in the form of an AccountObjectsResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountObjectsRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_objects"
    -

    The name of the API method.

    -
    -
    -
    - -
    deletion_blockers_only?: boolean
    -

    If true, the response only includes objects that would block this account +

    interface AccountObjectsRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_objects";
    Β Β Β Β deletion_blockers_only?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β type?: AccountObjectType;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_objects"

    The name of the API method.

    +
    deletion_blockers_only?: boolean

    If true, the response only includes objects that would block this account from being deleted. The default is false.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    The maximum number of objects to include in the results. Must be within +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    The maximum number of objects to include in the results. Must be within the inclusive range 10 to 400 on non-admin connections. The default is 200.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - - -

    If included, filter results to include only this type of ledger object.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +

    If included, filter results to include only this type of ledger object.

    +
    diff --git a/docs/interfaces/AccountObjectsResponse.html b/docs/interfaces/AccountObjectsResponse.html index 233d1eafe7..22fb0fe149 100644 --- a/docs/interfaces/AccountObjectsResponse.html +++ b/docs/interfaces/AccountObjectsResponse.html @@ -1,486 +1,32 @@ -AccountObjectsResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountObjectsResponse

    -
    -

    Response expected from an AccountObjectsRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β account_objects: AccountObject[];
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: string;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountOffer.html b/docs/interfaces/AccountOffer.html index 0dfe75b67d..78b99bf869 100644 --- a/docs/interfaces/AccountOffer.html +++ b/docs/interfaces/AccountOffer.html @@ -1,429 +1,23 @@ -AccountOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountOffer

    -
    -

    Hierarchy

    -
      -
    • AccountOffer
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    expiration?: number
    -

    A time after which this offer is considered unfunded, as the number of +AccountOffer | xrpl

    Interface AccountOffer

    interface AccountOffer {
    Β Β Β Β expiration?: number;
    Β Β Β Β flags: number;
    Β Β Β Β quality: string;
    Β Β Β Β seq: number;
    Β Β Β Β taker_gets: Amount;
    Β Β Β Β taker_pays: Amount;
    }

    Properties

    expiration?: number

    A time after which this offer is considered unfunded, as the number of seconds since the Ripple Epoch. See also: Offer Expiration.

    -
    -
    -
    - -
    flags: number
    -

    Options set for this offer entry as bit-flags.

    -
    -
    -
    - -
    quality: string
    -

    The exchange rate of the Offer, as the ratio of the original taker_pays +

    flags: number

    Options set for this offer entry as bit-flags.

    +
    quality: string

    The exchange rate of the Offer, as the ratio of the original taker_pays divided by the original taker_gets. When executing offers, the offer with the most favorable (lowest) quality is consumed first; offers with the same quality are executed from oldest to newest.

    -
    -
    -
    - -
    seq: number
    -

    Sequence number of the transaction that created this entry.

    -
    -
    -
    - -
    taker_gets: Amount
    -

    The amount the account placing this Offer receives.

    -
    -
    -
    - -
    taker_pays: Amount
    -

    The amount the account placing this Offer pays.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    seq: number

    Sequence number of the transaction that created this entry.

    +
    taker_gets: Amount

    The amount the account placing this Offer receives.

    +
    taker_pays: Amount

    The amount the account placing this Offer pays.

    +
    diff --git a/docs/interfaces/AccountOffersRequest.html b/docs/interfaces/AccountOffersRequest.html index 8b209b969d..e319455d0a 100644 --- a/docs/interfaces/AccountOffersRequest.html +++ b/docs/interfaces/AccountOffersRequest.html @@ -1,475 +1,34 @@ -AccountOffersRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountOffersRequest

    -
    -

    The account_offers method retrieves a list of offers made by a given account +AccountOffersRequest | xrpl

    Interface AccountOffersRequest

    The account_offers method retrieves a list of offers made by a given account that are outstanding as of a particular ledger version. Expects a response in the form of a AccountOffersResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountOffersRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's Address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "account_offers"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface AccountOffersRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "account_offers";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β strict?: boolean;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's Address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "account_offers"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    Limit the number of transactions to retrieve. The server is not required +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Limit the number of transactions to retrieve. The server is not required to honor this value. Must be within the inclusive range 10 to 400.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - -
    strict?: boolean
    -

    If true, then the account field only accepts a public key or XRP Ledger +

    strict?: boolean

    If true, then the account field only accepts a public key or XRP Ledger address. Otherwise, account can be a secret or passphrase (not recommended). The default is false.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountOffersResponse.html b/docs/interfaces/AccountOffersResponse.html index 41a75740ca..8bf61b2de3 100644 --- a/docs/interfaces/AccountOffersResponse.html +++ b/docs/interfaces/AccountOffersResponse.html @@ -1,475 +1,29 @@ -AccountOffersResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountOffersResponse

    -
    -

    Response expected from an AccountOffersRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β offers?: AccountOffer[];
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/AccountQueueData.html b/docs/interfaces/AccountQueueData.html index e46cd415ef..aaff9bcfe1 100644 --- a/docs/interfaces/AccountQueueData.html +++ b/docs/interfaces/AccountQueueData.html @@ -1,429 +1,23 @@ -AccountQueueData | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountQueueData

    -
    -

    Hierarchy

    -
      -
    • AccountQueueData
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    auth_change_queued?: boolean
    -

    Whether a transaction in the queue changes this address's ways of +AccountQueueData | xrpl

    Interface AccountQueueData

    interface AccountQueueData {
    Β Β Β Β auth_change_queued?: boolean;
    Β Β Β Β highest_sequence?: number;
    Β Β Β Β lowest_sequence?: number;
    Β Β Β Β max_spend_drops_total?: string;
    Β Β Β Β transactions?: AccountQueueTransaction[];
    Β Β Β Β txn_count: number;
    }

    Properties

    auth_change_queued?: boolean

    Whether a transaction in the queue changes this address's ways of authorizing transactions. If true, this address can queue no further transactions until that transaction has been executed or dropped from the queue.

    -
    -
    -
    - -
    highest_sequence?: number
    -

    The highest Sequence Number among transactions queued by this address.

    -
    -
    -
    - -
    lowest_sequence?: number
    -

    The lowest Sequence Number among transactions queued by this address.

    -
    -
    -
    - -
    max_spend_drops_total?: string
    -

    Integer amount of drops of XRP that could be debited from this address if +

    highest_sequence?: number

    The highest Sequence Number among transactions queued by this address.

    +
    lowest_sequence?: number

    The lowest Sequence Number among transactions queued by this address.

    +
    max_spend_drops_total?: string

    Integer amount of drops of XRP that could be debited from this address if every transaction in the queue consumes the maximum amount of XRP possible.

    -
    -
    -
    - -
    transactions?: AccountQueueTransaction[]
    -

    Information about each queued transaction from this address.

    -
    -
    -
    - -
    txn_count: number
    -

    Number of queued transactions from this address.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    transactions?: AccountQueueTransaction[]

    Information about each queued transaction from this address.

    +
    txn_count: number

    Number of queued transactions from this address.

    +
    diff --git a/docs/interfaces/AccountQueueTransaction.html b/docs/interfaces/AccountQueueTransaction.html index 11a2de3a19..f9aca16744 100644 --- a/docs/interfaces/AccountQueueTransaction.html +++ b/docs/interfaces/AccountQueueTransaction.html @@ -1,417 +1,19 @@ -AccountQueueTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountQueueTransaction

    -
    -

    Hierarchy

    -
      -
    • AccountQueueTransaction
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    auth_change: boolean
    -

    Whether this transaction changes this address's ways of authorizing +AccountQueueTransaction | xrpl

    Interface AccountQueueTransaction

    interface AccountQueueTransaction {
    Β Β Β Β auth_change: boolean;
    Β Β Β Β fee: string;
    Β Β Β Β fee_level: string;
    Β Β Β Β max_spend_drops: string;
    Β Β Β Β seq: number;
    }

    Properties

    auth_change: boolean

    Whether this transaction changes this address's ways of authorizing transactions.

    -
    -
    -
    - -
    fee: string
    -

    The Transaction Cost of this transaction, in drops of XRP.

    -
    -
    -
    - -
    fee_level: string
    -

    The transaction cost of this transaction, relative to the minimum cost for +

    fee: string

    The Transaction Cost of this transaction, in drops of XRP.

    +
    fee_level: string

    The transaction cost of this transaction, relative to the minimum cost for this type of transaction, in fee levels.

    -
    -
    -
    - -
    max_spend_drops: string
    -

    The maximum amount of XRP, in drops, this transaction could send or destroy.

    -
    -
    -
    - -
    seq: number
    -

    The Sequence Number of this transaction.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    max_spend_drops: string

    The maximum amount of XRP, in drops, this transaction could send or destroy.

    +
    seq: number

    The Sequence Number of this transaction.

    +
    diff --git a/docs/interfaces/AccountSet.html b/docs/interfaces/AccountSet.html index fc32d9d996..ce5097eba0 100644 --- a/docs/interfaces/AccountSet.html +++ b/docs/interfaces/AccountSet.html @@ -1,630 +1,77 @@ -AccountSet | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountSet

    -
    -

    An AccountSet transaction modifies the properties of an account in the XRP +AccountSet | xrpl

    Interface AccountSet

    An AccountSet transaction modifies the properties of an account in the XRP Ledger.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface AccountSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β ClearFlag?: number;
    Β Β Β Β Domain?: string;
    Β Β Β Β EmailHash?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | AccountSetFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MessageKey?: string;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenMinter?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SetFlag?: AccountSetAsfFlags;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TickSize?: number;
    Β Β Β Β TransactionType: "AccountSet";
    Β Β Β Β TransferRate?: number;
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    ClearFlag?: number
    -

    Unique identifier of a flag to disable for this account.

    -
    -
    -
    - -
    Domain?: string
    -

    The domain that owns this account, as a string of hex representing the. +

    ClearFlag?: number

    Unique identifier of a flag to disable for this account.

    +
    Domain?: string

    The domain that owns this account, as a string of hex representing the. ASCII for the domain in lowercase.

    -
    -
    -
    - -
    EmailHash?: string
    -

    Hash of an email address to be used for generating an avatar image.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    EmailHash?: string

    Hash of an email address to be used for generating an avatar image.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | AccountSetFlagsInterface
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | AccountSetFlagsInterface

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    MessageKey?: string
    -

    Public key for sending encrypted messages to this account.

    -
    -
    -
    - -
    NFTokenMinter?: string
    -

    Sets an alternate account that is allowed to mint NFTokens on this -account's behalf using NFTokenMint's Issuer field.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MessageKey?: string

    Public key for sending encrypted messages to this account.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenMinter?: string

    Sets an alternate account that is allowed to mint NFTokens on this +account's behalf using NFTokenMint's Issuer field.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - - -

    Integer flag to enable for this account.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Integer flag to enable for this account.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TickSize?: number
    -

    Tick size to use for offers involving a currency issued by this address. +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TickSize?: number

    Tick size to use for offers involving a currency issued by this address. The exchange rates of those offers is rounded to this many significant digits. Valid values are 3 to 15 inclusive, or 0 to disable.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If -this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "AccountSet"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "AccountSet"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TransferRate?: number
    -

    The fee to charge when users transfer this account's issued currencies, +

    TransferRate?: number

    The fee to charge when users transfer this account's issued currencies, represented as billionths of a unit. Cannot be more than 2000000000 or less than 1000000000, except for the special case 0 meaning no fee.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AccountSetFlagsInterface.html b/docs/interfaces/AccountSetFlagsInterface.html index edc8b8f06c..9507a58f69 100644 --- a/docs/interfaces/AccountSetFlagsInterface.html +++ b/docs/interfaces/AccountSetFlagsInterface.html @@ -1,415 +1,18 @@ -AccountSetFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountSetFlagsInterface

    -
    -

    Map of flags to boolean values representing AccountSet transaction +AccountSetFlagsInterface | xrpl

    Interface AccountSetFlagsInterface

    Map of flags to boolean values representing AccountSet transaction flags.

    -
    -
    -

    Example

     const accountSetTx: AccountSet = {
    TransactionType: 'AccountSet',
    Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn',
    Flags: {
    tfOptionalDestTag: true,
    tfRequireAuth: true
    },
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(accountSetTx)
    console.log(autofilledTx)
    // {
    // TransactionType: 'AccountSet',
    // Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn',
    // Flags: 393216,
    // Sequence: 1,
    // Fee: '12',
    // LastLedgerSequence: 21971793
    // } -
    -
    -
    -

    Hierarchy

    -
      -
    • AccountSetFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfAllowXRP?: boolean
    -
    - -
    tfDisallowXRP?: boolean
    -
    - -
    tfOptionalAuth?: boolean
    -
    - -
    tfOptionalDestTag?: boolean
    -
    - -
    tfRequireAuth?: boolean
    -
    - -
    tfRequireDestTag?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
     const accountSetTx: AccountSet = {
    TransactionType: 'AccountSet',
    Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn',
    Flags: {
    tfOptionalDestTag: true,
    tfRequireAuth: true
    },
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(accountSetTx)
    console.log(autofilledTx)
    // {
    // TransactionType: 'AccountSet',
    // Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn',
    // Flags: 393216,
    // Sequence: 1,
    // Fee: '12',
    // LastLedgerSequence: 21971793
    // } +
    + +
    interface AccountSetFlagsInterface {
    Β Β Β Β tfAllowXRP?: boolean;
    Β Β Β Β tfDisallowXRP?: boolean;
    Β Β Β Β tfOptionalAuth?: boolean;
    Β Β Β Β tfOptionalDestTag?: boolean;
    Β Β Β Β tfRequireAuth?: boolean;
    Β Β Β Β tfRequireDestTag?: boolean;
    }

    Properties

    tfAllowXRP?: boolean
    tfDisallowXRP?: boolean
    tfOptionalAuth?: boolean
    tfOptionalDestTag?: boolean
    tfRequireAuth?: boolean
    tfRequireDestTag?: boolean
    diff --git a/docs/interfaces/AccountTxRequest.html b/docs/interfaces/AccountTxRequest.html index 4c9e0fbb6d..0acfd64738 100644 --- a/docs/interfaces/AccountTxRequest.html +++ b/docs/interfaces/AccountTxRequest.html @@ -1,509 +1,44 @@ -AccountTxRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountTxRequest

    -
    -

    The account_tx method retrieves a list of transactions that involved the -specified account. Expects a response in the form of a AccountTxResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • AccountTxRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If true, return transactions as hex strings instead of JSON. The default is +AccountTxRequest | xrpl

    Interface AccountTxRequest

    The account_tx method retrieves a list of transactions that involved the +specified account. Expects a response in the form of a AccountTxResponse.

    +
    interface AccountTxRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β command: "account_tx";
    Β Β Β Β forward?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β ledger_index_max?: number;
    Β Β Β Β ledger_index_min?: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If true, return transactions as hex strings instead of JSON. The default is false.

    -
    -
    -
    - -
    command: "account_tx"
    -

    The name of the API method.

    -
    -
    -
    - -
    forward?: boolean
    -

    If true, returns values indexed with the oldest ledger first. Otherwise, +

    command: "account_tx"

    The name of the API method.

    +
    forward?: boolean

    If true, returns values indexed with the oldest ledger first. Otherwise, the results are indexed with the newest ledger first.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    ledger_index_max?: number
    -

    Use to specify the most recent ledger to include transactions from. A +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    ledger_index_max?: number

    Use to specify the most recent ledger to include transactions from. A value of -1 instructs the server to use the most recent validated ledger version available.

    -
    -
    -
    - -
    ledger_index_min?: number
    -

    Use to specify the earliest ledger to include transactions from. A value +

    ledger_index_min?: number

    Use to specify the earliest ledger to include transactions from. A value of -1 instructs the server to use the earliest validated ledger version available.

    -
    -
    -
    - -
    limit?: number
    -

    Default varies. Limit the number of transactions to retrieve. The server +

    limit?: number

    Default varies. Limit the number of transactions to retrieve. The server is not required to honor this value.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off. This value is stable even if there is a change in -the server's range of available ledgers.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +the server's range of available ledgers.

    +
    diff --git a/docs/interfaces/AccountTxResponse.html b/docs/interfaces/AccountTxResponse.html deleted file mode 100644 index a659528e14..0000000000 --- a/docs/interfaces/AccountTxResponse.html +++ /dev/null @@ -1,479 +0,0 @@ -AccountTxResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountTxResponse

    -
    -

    Expected response from an AccountTxRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β ledger_index_max: number;
    Β Β Β Β ledger_index_min: number;
    Β Β Β Β limit: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β transactions: AccountTxTransaction[];
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
      -
    • -
      account: string
      -

      Unique Address identifying the related account.

      -
      -
    • -
    • -
      ledger_index_max: number
      -

      The ledger index of the most recent ledger actually searched for -transactions.

      -
      -
    • -
    • -
      ledger_index_min: number
      -

      The ledger index of the earliest ledger actually searched for -transactions.

      -
      -
    • -
    • -
      limit: number
      -

      The limit value used in the request.

      -
      -
    • -
    • -
      Optional marker?: unknown
      -

      Server-defined value indicating the response is paginated. Pass this -to the next call to resume where this call left off.

      -
      -
    • -
    • -
      transactions: AccountTxTransaction[]
      -

      Array of transactions matching the request's criteria, as explained -below.

      -
      -
    • -
    • -
      Optional validated?: boolean
      -

      If included and set to true, the information in this response comes from -a validated ledger version. Otherwise, the information is subject to -change.

      -
      -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file diff --git a/docs/interfaces/AccountTxTransaction.html b/docs/interfaces/AccountTxTransaction.html index b0e860752e..4336de83e7 100644 --- a/docs/interfaces/AccountTxTransaction.html +++ b/docs/interfaces/AccountTxTransaction.html @@ -1,417 +1,23 @@ -AccountTxTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountTxTransaction

    -
    -

    Hierarchy

    -
      -
    • AccountTxTransaction
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    ledger_index: number
    -

    The ledger index of the ledger version that included this transaction.

    -
    -
    -
    - -
    meta: string | TransactionMetadata
    -

    If binary is True, then this is a hex string of the transaction metadata. +AccountTxTransaction | xrpl

    Interface AccountTxTransaction<Version>

    interface AccountTxTransaction<
    Β Β Β Β Version extends APIVersion = typeof DEFAULT_API_VERSION,
    > {
    Β Β Β Β hash?: Version extends 2 ? string : never;
    Β Β Β Β ledger_index: number;
    Β Β Β Β meta: string | TransactionMetadata;
    Β Β Β Β tx?: Version extends 1 ? Transaction & ResponseOnlyTxInfo : never;
    Β Β Β Β tx_blob?: string;
    Β Β Β Β tx_json?: Version extends 2 ? Transaction & ResponseOnlyTxInfo : never;
    Β Β Β Β validated: boolean;
    }

    Type Parameters

    Properties

    hash?: Version extends 2 ? string : never

    The hash of the transaction.

    +
    ledger_index: number

    The ledger index of the ledger version that included this transaction.

    +
    meta: string | TransactionMetadata

    If binary is True, then this is a hex string of the transaction metadata. Otherwise, the transaction metadata is included in JSON format.

    -
    -
    -
    - -
    tx?: Object
    -

    JSON object defining the transaction.

    -
    -
    -
    - -
    tx_blob?: string
    -

    Unique hashed String representing the transaction.

    -
    -
    -
    - -
    validated: boolean
    -

    Whether or not the transaction is included in a validated ledger. Any +

    tx?: Version extends 1 ? Transaction & ResponseOnlyTxInfo : never

    JSON object defining the transaction in rippled API v1.

    +
    tx_blob?: string

    Unique hashed String representing the transaction.

    +
    tx_json?: Version extends 2 ? Transaction & ResponseOnlyTxInfo : never

    JSON object defining the transaction.

    +
    validated: boolean

    Whether or not the transaction is included in a validated ledger. Any transaction not yet in a validated ledger is subject to change.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/AuthAccount.html b/docs/interfaces/AuthAccount.html index 83dd7dcf68..57cf96dffd 100644 --- a/docs/interfaces/AuthAccount.html +++ b/docs/interfaces/AuthAccount.html @@ -1,377 +1,8 @@ -AuthAccount | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AuthAccount

    -
    -

    Hierarchy

    -
      -
    • AuthAccount
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    AuthAccount: {
    Β Β Β Β Account: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Account: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AuthAccount | xrpl

    Interface AuthAccount

    interface AuthAccount {
    Β Β Β Β AuthAccount: { Account: string };
    }

    Properties

    Properties

    AuthAccount: { Account: string }
    diff --git a/docs/interfaces/AuthorizeCredential.html b/docs/interfaces/AuthorizeCredential.html new file mode 100644 index 0000000000..7f02d9a6de --- /dev/null +++ b/docs/interfaces/AuthorizeCredential.html @@ -0,0 +1,10 @@ +AuthorizeCredential | xrpl

    Interface AuthorizeCredential

    interface AuthorizeCredential {
    Β Β Β Β Credential: { CredentialType: string; Issuer: string };
    }

    Properties

    Properties

    Credential: { CredentialType: string; Issuer: string }

    Type declaration

    • CredentialType: string

      A hex-encoded value to identify the type of credential from the issuer.

      +
    • Issuer: string

      The issuer of the credential.

      +
    diff --git a/docs/interfaces/Balance.html b/docs/interfaces/Balance.html index 5707a54b61..bd9ec223ac 100644 --- a/docs/interfaces/Balance.html +++ b/docs/interfaces/Balance.html @@ -1,386 +1,10 @@ -Balance | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Balance

    -
    -

    Hierarchy

    -
      -
    • Balance
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    issuer?: string
    -
    - -
    value: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Balance | xrpl

    Interface Balance

    interface Balance {
    Β Β Β Β currency: string;
    Β Β Β Β issuer?: string;
    Β Β Β Β value: string;
    }

    Properties

    Properties

    currency: string
    issuer?: string
    value: string
    diff --git a/docs/interfaces/BaseRequest.html b/docs/interfaces/BaseRequest.html index 953721e40a..c189c47eba 100644 --- a/docs/interfaces/BaseRequest.html +++ b/docs/interfaces/BaseRequest.html @@ -1,438 +1,15 @@ -BaseRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BaseRequest

    -
    -

    Hierarchy

    -
    -
    -

    Indexable

    -
    [x: string]: unknown
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: string
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +BaseRequest | xrpl

    Interface BaseRequest

    interface BaseRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: string;
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: string

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/BaseResponse.html b/docs/interfaces/BaseResponse.html index b5ec401830..ab24e402de 100644 --- a/docs/interfaces/BaseResponse.html +++ b/docs/interfaces/BaseResponse.html @@ -1,460 +1,15 @@ -BaseResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BaseResponse

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: unknown
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +BaseResponse | xrpl

    Interface BaseResponse

    interface BaseResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: unknown;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: unknown
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/BaseTransaction.html b/docs/interfaces/BaseTransaction.html index fcf14fbb71..6998b5d535 100644 --- a/docs/interfaces/BaseTransaction.html +++ b/docs/interfaces/BaseTransaction.html @@ -1,573 +1,54 @@ -BaseTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BaseTransaction

    -
    -

    Every transaction has the same set of common fields.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +BaseTransaction | xrpl

    Interface BaseTransaction

    Every transaction has the same set of common fields.

    +
    interface BaseTransaction {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: string;
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: string
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: string

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/BookOffer.html b/docs/interfaces/BookOffer.html index cc2e6dab7a..f6e22ab03c 100644 --- a/docs/interfaces/BookOffer.html +++ b/docs/interfaces/BookOffer.html @@ -1,557 +1,52 @@ -BookOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BookOffer

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The address of the account that placed this Offer.

    -
    -
    -
    - -
    BookDirectory: string
    -

    The ID of the Offer Directory that links to this Offer.

    -
    -
    -
    - -
    BookNode: string
    -

    A hint indicating which page of the Offer Directory links to this object, +BookOffer | xrpl

    Interface BookOffer

    interface BookOffer {
    Β Β Β Β Account: string;
    Β Β Β Β BookDirectory: string;
    Β Β Β Β BookNode: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Offer";
    Β Β Β Β owner_funds?: string;
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β quality?: string;
    Β Β Β Β Sequence: number;
    Β Β Β Β taker_gets_funded?: Amount;
    Β Β Β Β taker_pays_funded?: Amount;
    Β Β Β Β TakerGets: Amount;
    Β Β Β Β TakerPays: Amount;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The address of the account that placed this Offer.

    +
    BookDirectory: string

    The ID of the Offer Directory that links to this Offer.

    +
    BookNode: string

    A hint indicating which page of the Offer Directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    Expiration?: number
    -

    The time this Offer expires, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean flags enabled for this Offer.

    -
    -
    -
    - -
    LedgerEntryType: "Offer"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the Owner Directory links to this object, -in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this -object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently -modified this object.

    -
    -
    -
    - -
    Sequence: number
    -

    The Sequence value of the OfferCreate transaction that created this Offer -object. Used in combination with the Account to identify this Offer.

    -
    -
    -
    - -
    TakerGets: Amount
    -

    The remaining amount and type of currency being provided by the Offer -creator.

    -
    -
    -
    - -
    TakerPays: Amount
    -

    The remaining amount and type of currency requested by the Offer creator.

    -
    -
    -
    - -
    index: string
    -
    - -
    owner_funds?: string
    -

    Amount of the TakerGets currency the side placing the offer has available +

    Expiration?: number

    The time this Offer expires, in seconds since the Ripple Epoch.

    +
    Flags: number

    A bit-map of boolean flags enabled for this Offer.

    +
    index: string
    LedgerEntryType: "Offer"
    owner_funds?: string

    Amount of the TakerGets currency the side placing the offer has available to be traded. (XRP is represented as drops; any other currency is represented as a decimal value.) If a trader has multiple offers in the same book, only the highest-ranked offer includes this field.

    -
    -
    -
    - -
    quality?: string
    -

    The exchange rate, as the ratio taker_pays divided by taker_gets. For +

    OwnerNode: string

    A hint indicating which page of the Owner Directory links to this object, +in case the directory consists of multiple pages.

    +
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this +object.

    +
    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently +modified this object.

    +
    quality?: string

    The exchange rate, as the ratio taker_pays divided by taker_gets. For fairness, offers that have the same quality are automatically taken first-in, first-out.

    -
    -
    -
    - -
    taker_gets_funded?: Amount
    -

    The maximum amount of currency that the taker can get, given the funding +

    Sequence: number

    The Sequence value of the OfferCreate transaction that created this Offer +object. Used in combination with the Account to identify this Offer.

    +
    taker_gets_funded?: Amount

    The maximum amount of currency that the taker can get, given the funding status of the offer.

    -
    -
    -
    - -
    taker_pays_funded?: Amount
    -

    The maximum amount of currency that the taker would pay, given the funding +

    taker_pays_funded?: Amount

    The maximum amount of currency that the taker would pay, given the funding status of the offer.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    TakerGets: Amount

    The remaining amount and type of currency being provided by the Offer +creator.

    +
    TakerPays: Amount

    The remaining amount and type of currency requested by the Offer creator.

    +
    diff --git a/docs/interfaces/BookOfferCurrency.html b/docs/interfaces/BookOfferCurrency.html index 5a839048b6..243b0a5279 100644 --- a/docs/interfaces/BookOfferCurrency.html +++ b/docs/interfaces/BookOfferCurrency.html @@ -1,379 +1,9 @@ -BookOfferCurrency | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BookOfferCurrency

    -
    -

    Hierarchy

    -
      -
    • BookOfferCurrency
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    issuer?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +BookOfferCurrency | xrpl

    Interface BookOfferCurrency

    interface BookOfferCurrency {
    Β Β Β Β currency: string;
    Β Β Β Β issuer?: string;
    }

    Properties

    Properties

    currency: string
    issuer?: string
    diff --git a/docs/interfaces/BookOffersRequest.html b/docs/interfaces/BookOffersRequest.html index 840302ae47..5481019774 100644 --- a/docs/interfaces/BookOffersRequest.html +++ b/docs/interfaces/BookOffersRequest.html @@ -1,477 +1,36 @@ -BookOffersRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BookOffersRequest

    -
    -

    The book_offers method retrieves a list of offers, also known as the order. +BookOffersRequest | xrpl

    Interface BookOffersRequest

    The book_offers method retrieves a list of offers, also known as the order. Book, between two currencies. Returns an BookOffersResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • BookOffersRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "book_offers"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface BookOffersRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "book_offers";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β taker?: string;
    Β Β Β Β taker_gets: BookOfferCurrency;
    Β Β Β Β taker_pays: BookOfferCurrency;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "book_offers"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    If provided, the server does not provide more than this many offers in the +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    If provided, the server does not provide more than this many offers in the results. The total number of results returned may be fewer than the limit, because the server omits unfunded offers.

    -
    -
    -
    - -
    taker?: string
    -

    The Address of an account to use as a perspective. Unfunded offers placed +

    taker?: string

    The Address of an account to use as a perspective. Unfunded offers placed by this account are always included in the response.

    -
    -
    -
    - -
    taker_gets: BookOfferCurrency
    -

    Specification of which currency the account taking the offer would +

    taker_gets: BookOfferCurrency

    Specification of which currency the account taking the offer would receive, as an object with currency and issuer fields (omit issuer for XRP), like currency amounts.

    -
    -
    -
    - -
    taker_pays: BookOfferCurrency
    -

    Specification of which currency the account taking the offer would pay, as +

    taker_pays: BookOfferCurrency

    Specification of which currency the account taking the offer would pay, as an object with currency and issuer fields (omit issuer for XRP), like currency amounts.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/BookOffersResponse.html b/docs/interfaces/BookOffersResponse.html index f8fc576b15..dccf395bff 100644 --- a/docs/interfaces/BookOffersResponse.html +++ b/docs/interfaces/BookOffersResponse.html @@ -1,463 +1,23 @@ -BookOffersResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface BookOffersResponse

    -
    -

    Expected response from a BookOffersRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β offers: BookOffer[];
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/Channel.html b/docs/interfaces/Channel.html index dc2a9340d5..31968c1800 100644 --- a/docs/interfaces/Channel.html +++ b/docs/interfaces/Channel.html @@ -1,449 +1,49 @@ -Channel | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Channel

    -
    -

    Hierarchy

    -
      -
    • Channel
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -
    - -
    amount: string
    -
    - -
    balance: string
    -
    - -
    cancel_after?: number
    -
    - -
    channel_id: string
    -
    - -
    destination_account: string
    -
    - -
    destination_tag?: number
    -
    - -
    expiration?: number
    -
    - -
    public_key?: string
    -
    - -
    public_key_hex?: string
    -
    - -
    settle_delay: number
    -
    - -
    source_tab?: number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Channel | xrpl

    Interface Channel

    Represents a payment channel in the XRP Ledger.

    +
    interface Channel {
    Β Β Β Β account: string;
    Β Β Β Β amount: string;
    Β Β Β Β balance: string;
    Β Β Β Β cancel_after?: number;
    Β Β Β Β channel_id: string;
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_tag?: number;
    Β Β Β Β expiration?: number;
    Β Β Β Β public_key?: string;
    Β Β Β Β public_key_hex?: string;
    Β Β Β Β settle_delay: number;
    Β Β Β Β source_tag?: number;
    }

    Properties

    account: string

    The owner of the channel, as an Address.

    +
    amount: string

    The total amount of XRP, in drops allocated to this channel.

    +
    balance: string

    The total amount of XRP, in drops, paid out from this channel, +as of the ledger version used. (You can calculate the amount of +XRP left in the channel by subtracting balance from amount.)

    +
    cancel_after?: number

    Time, in seconds since the Ripple Epoch, of this channel's immutable expiration, +if one was specified at channel creation. If this is before the close time of the +most recent validated ledger, the channel is expired.

    +
    channel_id: string

    A unique ID for this channel, as a 64-character hexadecimal string. +This is also the ID of the channel object in the ledger's state data.

    +
    destination_account: string

    The destination account of the channel, as an Address. +Only this account can receive the XRP in the channel while it is open.

    +
    destination_tag?: number

    A 32-bit unsigned integer to use as a destination tag for payments through this channel, +if one was specified at channel creation. This indicates the payment channel's beneficiary +or other purpose at the destination account.

    +
    expiration?: number

    Time, in seconds since the Ripple Epoch, when this channel is set to expire. +This expiration date is mutable. If this is before the close time of the most +recent validated ledger, the channel is expired.

    +
    public_key?: string

    The public key for the payment channel in the XRP Ledger's base58 format. +Signed claims against this channel must be redeemed with the matching key pair.

    +
    public_key_hex?: string

    The public key for the payment channel in hexadecimal format, if one was +specified at channel creation. Signed claims against this channel must be +redeemed with the matching key pair.

    +
    settle_delay: number

    The number of seconds the payment channel must stay open after the owner +of the channel requests to close it.

    +
    source_tag?: number

    A 32-bit unsigned integer to use as a source tag for payments through this payment channel, +if one was specified at channel creation. This indicates the payment channel's originator or +other purpose at the source account. Conventionally, if you bounce payments from this channel, +you should specify this value in the DestinationTag of the return payment.

    +
    diff --git a/docs/interfaces/ChannelVerifyRequest.html b/docs/interfaces/ChannelVerifyRequest.html index d044a99ca1..07e165da9f 100644 --- a/docs/interfaces/ChannelVerifyRequest.html +++ b/docs/interfaces/ChannelVerifyRequest.html @@ -1,450 +1,28 @@ -ChannelVerifyRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ChannelVerifyRequest

    -
    -

    The channel_verify method checks the validity of a signature that can be +ChannelVerifyRequest | xrpl

    Interface ChannelVerifyRequest

    The channel_verify method checks the validity of a signature that can be used to redeem a specific amount of XRP from a payment channel. Expects a response in the form of a ChannelVerifyResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    amount: string
    -

    The amount of XRP, in drops, the provided signature authorizes.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    channel_id: string
    -

    The Channel ID of the channel that provides the XRP. This is a +

    interface ChannelVerifyRequest {
    Β Β Β Β amount: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β channel_id: string;
    Β Β Β Β command: "channel_verify";
    Β Β Β Β id?: string | number;
    Β Β Β Β public_key: string;
    Β Β Β Β signature: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    amount: string

    The amount of XRP, in drops, the provided signature authorizes.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    channel_id: string

    The Channel ID of the channel that provides the XRP. This is a 64-character hexadecimal string.

    -
    -
    -
    - -
    command: "channel_verify"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    command: "channel_verify"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    public_key: string
    -

    The public key of the channel and the key pair that was used to create the -signature, in hexadecimal or the XRP Ledger's base58 format.

    -
    -
    -
    - -
    signature: string
    -

    The signature to verify, in hexadecimal.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    public_key: string

    The public key of the channel and the key pair that was used to create the +signature, in hexadecimal or the XRP Ledger's base58 format.

    +
    signature: string

    The signature to verify, in hexadecimal.

    +
    diff --git a/docs/interfaces/ChannelVerifyResponse.html b/docs/interfaces/ChannelVerifyResponse.html index 7051ede29d..66e3782a47 100644 --- a/docs/interfaces/ChannelVerifyResponse.html +++ b/docs/interfaces/ChannelVerifyResponse.html @@ -1,444 +1,18 @@ -ChannelVerifyResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ChannelVerifyResponse

    -
    -

    Response expected from an ChannelVerifyRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β signature_verified: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/CheckCancel.html b/docs/interfaces/CheckCancel.html index 92a97ae8fc..f464fdcebb 100644 --- a/docs/interfaces/CheckCancel.html +++ b/docs/interfaces/CheckCancel.html @@ -1,557 +1,60 @@ -CheckCancel | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface CheckCancel

    -
    -

    Cancels an unredeemed Check, removing it from the ledger without sending any +CheckCancel | xrpl

    Interface CheckCancel

    Cancels an unredeemed Check, removing it from the ledger without sending any money. The source or the destination of the check can cancel a Check at any time using this transaction type. If the Check has expired, any address can cancel it.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface CheckCancel {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β CheckID: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CheckCancel";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    CheckID: string
    -

    The ID of the Check ledger object to cancel as a 64-character hexadecimal +

    CheckID: string

    The ID of the Check ledger object to cancel as a 64-character hexadecimal string.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "CheckCancel"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "CheckCancel"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/CheckCash.html b/docs/interfaces/CheckCash.html index cee83e87ac..be8f587b1c 100644 --- a/docs/interfaces/CheckCash.html +++ b/docs/interfaces/CheckCash.html @@ -1,580 +1,67 @@ -CheckCash | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface CheckCash

    -
    -

    Attempts to redeem a Check object in the ledger to receive up to the amount +CheckCash | xrpl

    Interface CheckCash

    Attempts to redeem a Check object in the ledger to receive up to the amount authorized by the corresponding CheckCreate transaction. Only the Destination address of a Check can cash it with a CheckCash transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface CheckCash {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount?: Amount;
    Β Β Β Β CheckID: string;
    Β Β Β Β DeliverMin?: Amount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CheckCash";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount?: Amount
    -

    Redeem the Check for exactly this amount, if possible. The currency must +

    Amount?: Amount

    Redeem the Check for exactly this amount, if possible. The currency must match that of the SendMax of the corresponding CheckCreate transaction. You. must provide either this field or DeliverMin.

    -
    -
    -
    - -
    CheckID: string
    -

    The ID of the Check ledger object to cash as a 64-character hexadecimal +

    CheckID: string

    The ID of the Check ledger object to cash as a 64-character hexadecimal string.

    -
    -
    -
    - -
    DeliverMin?: Amount
    -

    Redeem the Check for at least this amount and for as much as possible. The +

    DeliverMin?: Amount

    Redeem the Check for at least this amount and for as much as possible. The currency must match that of the SendMax of the corresponding CheckCreate. transaction. You must provide either this field or Amount.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "CheckCash"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "CheckCash"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/CheckCreate.html b/docs/interfaces/CheckCreate.html index bcb6212b2a..e519773c40 100644 --- a/docs/interfaces/CheckCreate.html +++ b/docs/interfaces/CheckCreate.html @@ -1,602 +1,73 @@ -CheckCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface CheckCreate

    -
    -

    Create a Check object in the ledger, which is a deferred payment that can be +CheckCreate | xrpl

    Interface CheckCreate

    Create a Check object in the ledger, which is a deferred payment that can be cashed by its intended destination. The sender of this transaction is the sender of the Check.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface CheckCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β InvoiceID?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β SendMax: Amount;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CheckCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Destination: string
    -

    The unique address of the account that can cash the Check.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    Arbitrary tag that identifies the reason for the Check, or a hosted. +

    Destination: string

    The unique address of the account that can cash the Check.

    +
    DestinationTag?: number

    Arbitrary tag that identifies the reason for the Check, or a hosted. recipient to pay.

    -
    -
    -
    - -
    Expiration?: number
    -

    Time after which the Check is no longer valid, in seconds since the Ripple. +

    Expiration?: number

    Time after which the Check is no longer valid, in seconds since the Ripple. Epoch.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    InvoiceID?: string
    -

    Arbitrary 256-bit hash representing a specific reason or identifier for. +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    InvoiceID?: string

    Arbitrary 256-bit hash representing a specific reason or identifier for. this Check.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    SendMax: Amount
    -

    Maximum amount of source currency the Check is allowed to debit the +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    SendMax: Amount

    Maximum amount of source currency the Check is allowed to debit the sender, including transfer fees on non-XRP currencies. The Check can only credit the destination with the same currency (from the same issuer, for non-XRP currencies). For non-XRP amounts, the nested field names MUST be. lower-case.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "CheckCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "CheckCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/Clawback.html b/docs/interfaces/Clawback.html index fdfca2bdf0..abba42a550 100644 --- a/docs/interfaces/Clawback.html +++ b/docs/interfaces/Clawback.html @@ -1,557 +1,63 @@ -Clawback | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Clawback

    -
    -

    The Clawback transaction is used by the token issuer to claw back +Clawback | xrpl

    Interface Clawback

    The Clawback transaction is used by the token issuer to claw back issued tokens from a holder.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    Indicates the AccountID that submitted this transaction. The account MUST -be the issuer of the currency.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface Clawback {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: IssuedCurrencyAmount | MPTAmount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β Holder?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "Clawback";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    Indicates the AccountID that submitted this transaction. The account MUST +be the issuer of the currency or MPT.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - - -

    The amount of currency to deliver, and it must be non-XRP. The nested field -names MUST be lower-case. The issuer field MUST be the holder's address, +

    The amount of currency or MPT to clawback, and it must be non-XRP. The nested field +names MUST be lower-case. If the amount is IOU, the issuer field MUST be the holder's address, whom to be clawed back.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    Holder?: string

    Indicates the AccountID that the issuer wants to clawback. This field is only valid for clawing back +MPTs.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "Clawback"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "Clawback"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ClientOptions.html b/docs/interfaces/ClientOptions.html index 0bea24918f..8de5aa533c 100644 --- a/docs/interfaces/ClientOptions.html +++ b/docs/interfaces/ClientOptions.html @@ -1,449 +1,20 @@ -ClientOptions | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ClientOptions

    -
    -

    Hierarchy

    -
      -
    • ConnectionUserOptions -
        -
      • ClientOptions
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    agent?: Agent
    -
    - -
    authorization?: string
    -
    - -
    connectionTimeout?: number
    -
    - -
    feeCushion?: number
    -
    - -
    headers?: {
    Β Β Β Β [key: string]: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      [key: string]: string
    -
    - -
    maxFeeXRP?: string
    -
    - -
    timeout?: number
    -
    - -
    trace?: boolean | ((id, message) => void)
    -
    -

    Type declaration

    -
      -
    • -
        -
      • (id, message): void
      • -
      • -
        -

        Parameters

        -
          -
        • -
          id: string
        • -
        • -
          message: string
        -

        Returns void

    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ClientOptions | xrpl

    Interface ClientOptions

    interface ClientOptions {
    Β Β Β Β agent?: Agent;
    Β Β Β Β authorization?: string;
    Β Β Β Β connectionTimeout?: number;
    Β Β Β Β feeCushion?: number;
    Β Β Β Β headers?: { [key: string]: string };
    Β Β Β Β maxFeeXRP?: string;
    Β Β Β Β timeout?: number;
    Β Β Β Β trace?: boolean | (id: string, message: string) => void;
    }

    Hierarchy

    • ConnectionUserOptions
      • ClientOptions

    Fee

    feeCushion?: number

    Multiplication 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?: string

    Maximum transaction cost to allow, in decimal XRP. Must be a string-encoded +number. Defaults to '2'.

    +

    Other

    agent?: Agent
    authorization?: string
    connectionTimeout?: number
    headers?: { [key: string]: string }
    timeout?: number

    Duration to wait for a request to timeout.

    +
    trace?: boolean | (id: string, message: string) => void
    diff --git a/docs/interfaces/ConsensusStream.html b/docs/interfaces/ConsensusStream.html index 2b5ae11c50..4c8a148d43 100644 --- a/docs/interfaces/ConsensusStream.html +++ b/docs/interfaces/ConsensusStream.html @@ -1,392 +1,14 @@ -ConsensusStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ConsensusStream

    -
    -

    The consensus stream sends consensusPhase messages when the consensus +ConsensusStream | xrpl

    Interface ConsensusStream

    The consensus stream sends consensusPhase messages when the consensus process changes phase. The message contains the new phase of consensus the server is in.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • ConsensusStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    consensus: "open" | "establish" | "accepted"
    -

    The new consensus phase the server is in. Possible values are open, +

    interface ConsensusStream {
    Β Β Β Β consensus: "open" | "establish" | "accepted";
    Β Β Β Β type: "consensusPhase";
    }

    Hierarchy

    • BaseStream
      • ConsensusStream

    Properties

    Properties

    consensus: "open" | "establish" | "accepted"

    The new consensus phase the server is in. Possible values are open, establish, and accepted.

    -
    -
    -
    - -
    type: "consensusPhase"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    type: "consensusPhase"
    diff --git a/docs/interfaces/CreatedNode.html b/docs/interfaces/CreatedNode.html index 09ac56a173..e732ca9939 100644 --- a/docs/interfaces/CreatedNode.html +++ b/docs/interfaces/CreatedNode.html @@ -1,384 +1,8 @@ -CreatedNode | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface CreatedNode

    -
    -

    Hierarchy

    -
      -
    • CreatedNode
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    CreatedNode: {
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    Β Β Β Β NewFields: {
    Β Β Β Β Β Β Β Β [field: string]: unknown;
    Β Β Β Β };
    }
    -
    -

    Type declaration

    -
      -
    • -
      LedgerEntryType: string
    • -
    • -
      LedgerIndex: string
    • -
    • -
      NewFields: {
      Β Β Β Β [field: string]: unknown;
      }
      -
        -
      • -
        [field: string]: unknown
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +CreatedNode | xrpl

    Interface CreatedNode

    interface CreatedNode {
    Β Β Β Β CreatedNode: {
    Β Β Β Β Β Β Β Β LedgerEntryType: string;
    Β Β Β Β Β Β Β Β LedgerIndex: string;
    Β Β Β Β Β Β Β Β NewFields: { [field: string]: unknown };
    Β Β Β Β };
    }

    Properties

    Properties

    CreatedNode: {
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    Β Β Β Β NewFields: { [field: string]: unknown };
    }
    diff --git a/docs/interfaces/CredentialAccept.html b/docs/interfaces/CredentialAccept.html new file mode 100644 index 0000000000..a755d8a533 --- /dev/null +++ b/docs/interfaces/CredentialAccept.html @@ -0,0 +1,61 @@ +CredentialAccept | xrpl

    Interface CredentialAccept

    Accepts a credential issued to the Account (i.e. the Account is the Subject of the Credential object). +Credentials are represented in hex. Whilst they are allowed a maximum length of 64 +bytes, every byte requires 2 hex characters for representation. +The credential is not considered valid until it has been transferred/accepted.

    +
    interface CredentialAccept {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β CredentialType: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β Issuer: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CredentialAccept";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The subject of the credential.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    CredentialType: string

    A hex-encoded value to identify the type of credential from the issuer.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    Issuer: string

    The issuer of the credential.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "CredentialAccept"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/CredentialCreate.html b/docs/interfaces/CredentialCreate.html new file mode 100644 index 0000000000..2e9d5f5601 --- /dev/null +++ b/docs/interfaces/CredentialCreate.html @@ -0,0 +1,62 @@ +CredentialCreate | xrpl

    Interface CredentialCreate

    Creates a Credential object. It must be sent by the issuer.

    +
    interface CredentialCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β CredentialType: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β Subject: string;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CredentialCreate";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β URI?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The issuer of the credential.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    CredentialType: string

    A hex-encoded value to identify the type of credential from the issuer.

    +
    Expiration?: number

    Credential expiration.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    Subject: string

    The subject of the credential.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "CredentialCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    URI?: string

    Additional data about the credential (such as a link to the VC document).

    +
    diff --git a/docs/interfaces/CredentialDelete.html b/docs/interfaces/CredentialDelete.html new file mode 100644 index 0000000000..c912438869 --- /dev/null +++ b/docs/interfaces/CredentialDelete.html @@ -0,0 +1,60 @@ +CredentialDelete | xrpl

    Interface CredentialDelete

    Deletes a Credential object.

    +
    interface CredentialDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β CredentialType: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β Issuer?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β Subject?: string;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "CredentialDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The transaction submitter.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    CredentialType: string

    A hex-encoded value to identify the type of credential from the issuer.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    Issuer?: string

    The issuer of the credential. If omitted, Account is assumed to be the issuer.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    Subject?: string

    The person that the credential is for. If omitted, Account is assumed to be the subject.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "CredentialDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/DIDDelete.html b/docs/interfaces/DIDDelete.html index bd3b2b81ce..592215dbb4 100644 --- a/docs/interfaces/DIDDelete.html +++ b/docs/interfaces/DIDDelete.html @@ -1,539 +1,53 @@ -DIDDelete | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DIDDelete

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +DIDDelete | xrpl

    Interface DIDDelete

    interface DIDDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "DIDDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "DIDDelete"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "DIDDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/DIDSet.html b/docs/interfaces/DIDSet.html index 28c748f16c..5ceccbe5e5 100644 --- a/docs/interfaces/DIDSet.html +++ b/docs/interfaces/DIDSet.html @@ -1,560 +1,56 @@ -DIDSet | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DIDSet

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +DIDSet | xrpl

    Interface DIDSet

    interface DIDSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Data?: string;
    Β Β Β Β DIDDocument?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "DIDSet";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β URI?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    DIDDocument?: string
    -
    - -
    Data?: string
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Data?: string
    DIDDocument?: string
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "DIDSet"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "DIDSet"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    URI?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    URI?: string
    diff --git a/docs/interfaces/DeletedNode.html b/docs/interfaces/DeletedNode.html index 763292a3fc..959a45f0bd 100644 --- a/docs/interfaces/DeletedNode.html +++ b/docs/interfaces/DeletedNode.html @@ -1,384 +1,8 @@ -DeletedNode | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DeletedNode

    -
    -

    Hierarchy

    -
      -
    • DeletedNode
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    DeletedNode: {
    Β Β Β Β FinalFields: {
    Β Β Β Β Β Β Β Β [field: string]: unknown;
    Β Β Β Β };
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      FinalFields: {
      Β Β Β Β [field: string]: unknown;
      }
      -
        -
      • -
        [field: string]: unknown
    • -
    • -
      LedgerEntryType: string
    • -
    • -
      LedgerIndex: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +DeletedNode | xrpl

    Interface DeletedNode

    interface DeletedNode {
    Β Β Β Β DeletedNode: {
    Β Β Β Β Β Β Β Β FinalFields: { [field: string]: unknown };
    Β Β Β Β Β Β Β Β LedgerEntryType: string;
    Β Β Β Β Β Β Β Β LedgerIndex: string;
    Β Β Β Β Β Β Β Β PreviousFields?: { [field: string]: unknown };
    Β Β Β Β };
    }

    Properties

    Properties

    DeletedNode: {
    Β Β Β Β FinalFields: { [field: string]: unknown };
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    Β Β Β Β PreviousFields?: { [field: string]: unknown };
    }
    diff --git a/docs/interfaces/DepositAuthorizedRequest.html b/docs/interfaces/DepositAuthorizedRequest.html index 0c3bc3799d..037e8d7a73 100644 --- a/docs/interfaces/DepositAuthorizedRequest.html +++ b/docs/interfaces/DepositAuthorizedRequest.html @@ -1,450 +1,29 @@ -DepositAuthorizedRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DepositAuthorizedRequest

    -
    -

    The deposit_authorized command indicates whether one account is authorized to +DepositAuthorizedRequest | xrpl

    Interface DepositAuthorizedRequest

    The deposit_authorized command indicates whether one account is authorized to send payments directly to another. Expects a response in the form of a DepositAuthorizedResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • DepositAuthorizedRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "deposit_authorized"
    -

    The name of the API method.

    -
    -
    -
    - -
    destination_account: string
    -

    The recipient of a possible payment.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface DepositAuthorizedRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "deposit_authorized";
    Β Β Β Β credentials?: string[];
    Β Β Β Β destination_account: string;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β source_account: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    • BaseRequest
    • LookupByLedgerRequest
      • DepositAuthorizedRequest

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "deposit_authorized"

    The name of the API method.

    +
    credentials?: string[]

    The object IDs of Credential objects. If this field is included, then the +credential will be taken into account when analyzing whether the sender can send +funds to the destination.

    +
    destination_account: string

    The recipient of a possible payment.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    source_account: string
    -

    The sender of a possible payment.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    source_account: string

    The sender of a possible payment.

    +
    diff --git a/docs/interfaces/DepositAuthorizedResponse.html b/docs/interfaces/DepositAuthorizedResponse.html index 672a717440..d494f8143e 100644 --- a/docs/interfaces/DepositAuthorizedResponse.html +++ b/docs/interfaces/DepositAuthorizedResponse.html @@ -1,479 +1,32 @@ -DepositAuthorizedResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DepositAuthorizedResponse

    -
    -

    Expected response from a DepositAuthorizedRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β deposit_authorized: boolean;
    Β Β Β Β destination_account: string;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β source_account: string;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/DepositPreauth.html b/docs/interfaces/DepositPreauth.html index fba690c170..a3ccd04b86 100644 --- a/docs/interfaces/DepositPreauth.html +++ b/docs/interfaces/DepositPreauth.html @@ -1,566 +1,65 @@ -DepositPreauth | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DepositPreauth

    -
    -

    A DepositPreauth transaction gives another account pre-approval to deliver +DepositPreauth | xrpl

    Interface DepositPreauth

    A DepositPreauth transaction gives another account pre-approval to deliver payments to the sender of this transaction. This is only useful if the sender of this transaction is using (or plans to use) Deposit Authorization.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface DepositPreauth {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Authorize?: string;
    Β Β Β Β AuthorizeCredentials?: AuthorizeCredential[];
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "DepositPreauth";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β Unauthorize?: string;
    Β Β Β Β UnauthorizeCredentials?: AuthorizeCredential[];
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Authorize?: string
    -

    The XRP Ledger address of the sender to preauthorize.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Authorize?: string

    The XRP Ledger address of the sender to preauthorize.

    +
    AuthorizeCredentials?: AuthorizeCredential[]

    The credential(s) to preauthorize.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "DepositPreauth"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "DepositPreauth"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    Unauthorize?: string
    -

    The XRP Ledger address of a sender whose preauthorization should be. +

    Unauthorize?: string

    The XRP Ledger address of a sender whose preauthorization should be. revoked.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    UnauthorizeCredentials?: AuthorizeCredential[]

    The credential(s) whose preauthorization should be revoked.

    +
    diff --git a/docs/interfaces/EnableAmendment.html b/docs/interfaces/EnableAmendment.html index fab8ec3be1..5a0478012f 100644 --- a/docs/interfaces/EnableAmendment.html +++ b/docs/interfaces/EnableAmendment.html @@ -1,563 +1,58 @@ -EnableAmendment | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface EnableAmendment

    -
    -

    Mark a change in the status of a proposed amendment when it gains majority, looses majority, or is enabled.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +EnableAmendment | xrpl

    Interface EnableAmendment

    Mark a change in the status of a proposed amendment when it gains majority, looses majority, or is enabled.

    +
    interface EnableAmendment {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amendment: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LedgerSequence: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "EnableAmendment";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amendment: string
    -

    A unique identifier for the amendment.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Amendment: string

    A unique identifier for the amendment.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    LedgerSequence: number
    -

    The ledger index where this pseudo-transaction appears.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    LedgerSequence: number

    The ledger index where this pseudo-transaction appears.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "EnableAmendment"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "EnableAmendment"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ErrorResponse.html b/docs/interfaces/ErrorResponse.html index cd9821116b..7a01dd9d70 100644 --- a/docs/interfaces/ErrorResponse.html +++ b/docs/interfaces/ErrorResponse.html @@ -1,426 +1,17 @@ -ErrorResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ErrorResponse

    -
    -

    The shape of an error response from rippled. xrpl.js handles rejections by +ErrorResponse | xrpl

    Interface ErrorResponse

    The shape of an error response from rippled. xrpl.js handles rejections by throwing, and allowing the user to handle in the catch block of a promise.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • ErrorResponse
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    error: string
    -
    - -
    error_code?: string
    -
    - -
    error_message?: string
    -
    - -
    id: string | number
    -
    - -
    request: Request
    -
    - -
    status: "error"
    -
    - -
    type: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface ErrorResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β error: string;
    Β Β Β Β error_code?: string;
    Β Β Β Β error_message?: string;
    Β Β Β Β id: string | number;
    Β Β Β Β request: Request;
    Β Β Β Β status: "error";
    Β Β Β Β type: string;
    }

    Properties

    api_version?: number
    error: string
    error_code?: string
    error_message?: string
    id: string | number
    request: Request
    status: "error"
    type: string
    diff --git a/docs/interfaces/EscrowCancel.html b/docs/interfaces/EscrowCancel.html index 56b4a9c562..a19b2b0d7d 100644 --- a/docs/interfaces/EscrowCancel.html +++ b/docs/interfaces/EscrowCancel.html @@ -1,564 +1,59 @@ -EscrowCancel | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface EscrowCancel

    -
    -

    Return escrowed XRP to the sender.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +EscrowCancel | xrpl

    Interface EscrowCancel

    Return escrowed XRP to the sender.

    +
    interface EscrowCancel {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OfferSequence: string | number;
    Β Β Β Β Owner: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "EscrowCancel";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OfferSequence: string | number
    -

    Transaction sequence (or Ticket number) of EscrowCreate transaction that. +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OfferSequence: string | number

    Transaction sequence (or Ticket number) of EscrowCreate transaction that. created the escrow to cancel.

    -
    -
    -
    - -
    Owner: string
    -

    Address of the source account that funded the escrow payment.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Owner: string

    Address of the source account that funded the escrow payment.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "EscrowCancel"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "EscrowCancel"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/EscrowCreate.html b/docs/interfaces/EscrowCreate.html index c2afa06a8a..bd28e3000d 100644 --- a/docs/interfaces/EscrowCreate.html +++ b/docs/interfaces/EscrowCreate.html @@ -1,611 +1,74 @@ -EscrowCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface EscrowCreate

    -
    -

    Sequester XRP until the escrow process either finishes or is canceled.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +EscrowCreate | xrpl

    Interface EscrowCreate

    Sequester XRP until the escrow process either finishes or is canceled.

    +
    interface EscrowCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: string;
    Β Β Β Β CancelAfter?: number;
    Β Β Β Β Condition?: string;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β FinishAfter?: number;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "EscrowCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: string
    -

    Amount of XRP, in drops, to deduct from the sender's balance and escrow. +

    Amount: string

    Amount of XRP, in drops, to deduct from the sender's balance and escrow. Once escrowed, the XRP can either go to the Destination address (after the. FinishAfter time) or returned to the sender (after the CancelAfter time).

    -
    -
    -
    - -
    CancelAfter?: number
    -

    The time, in seconds since the Ripple Epoch, when this escrow expires. +

    CancelAfter?: number

    The time, in seconds since the Ripple Epoch, when this escrow expires. This value is immutable; the funds can only be returned the sender after. this time.

    -
    -
    -
    - -
    Condition?: string
    -

    Hex value representing a PREIMAGE-SHA-256 crypto-condition . The funds can. +

    Condition?: string

    Hex value representing a PREIMAGE-SHA-256 crypto-condition . The funds can. only be delivered to the recipient if this condition is fulfilled.

    -
    -
    -
    - -
    Destination: string
    -

    Address to receive escrowed XRP.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    Arbitrary tag to further specify the destination for this escrowed. +

    Destination: string

    Address to receive escrowed XRP.

    +
    DestinationTag?: number

    Arbitrary tag to further specify the destination for this escrowed. payment, such as a hosted recipient at the destination address.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    FinishAfter?: number
    -

    The time, in seconds since the Ripple Epoch, when the escrowed XRP can be +

    FinishAfter?: number

    The time, in seconds since the Ripple Epoch, when the escrowed XRP can be released to the recipient. This value is immutable; the funds cannot move. until this time is reached.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "EscrowCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "EscrowCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/EscrowFinish.html b/docs/interfaces/EscrowFinish.html index 9737c68db1..8bad2fd4aa 100644 --- a/docs/interfaces/EscrowFinish.html +++ b/docs/interfaces/EscrowFinish.html @@ -1,586 +1,68 @@ -EscrowFinish | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface EscrowFinish

    -
    -

    Deliver XRP from a held payment to the recipient.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +EscrowFinish | xrpl

    Interface EscrowFinish

    Deliver XRP from a held payment to the recipient.

    +
    interface EscrowFinish {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Condition?: string;
    Β Β Β Β CredentialIDs?: string[];
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β Fulfillment?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OfferSequence: string | number;
    Β Β Β Β Owner: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "EscrowFinish";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Condition?: string
    -

    Hex value matching the previously-supplied PREIMAGE-SHA-256. +

    Condition?: string

    Hex value matching the previously-supplied PREIMAGE-SHA-256. crypto-condition of the held payment.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    CredentialIDs?: string[]

    Credentials associated with the sender of this transaction. +The credentials included must not be expired.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    Fulfillment?: string
    -

    Hex value of the PREIMAGE-SHA-256 crypto-condition fulfillment matching. -the held payment's Condition.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    Fulfillment?: string

    Hex value of the PREIMAGE-SHA-256 crypto-condition fulfillment matching. +the held payment's Condition.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OfferSequence: string | number
    -

    Transaction sequence of EscrowCreate transaction that created the held. +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OfferSequence: string | number

    Transaction sequence of EscrowCreate transaction that created the held. payment to finish.

    -
    -
    -
    - -
    Owner: string
    -

    Address of the source account that funded the held payment.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Owner: string

    Address of the source account that funded the held payment.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "EscrowFinish"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "EscrowFinish"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/FeeRequest.html b/docs/interfaces/FeeRequest.html index af5aa467ad..ff41f60966 100644 --- a/docs/interfaces/FeeRequest.html +++ b/docs/interfaces/FeeRequest.html @@ -1,411 +1,21 @@ -FeeRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FeeRequest

    -
    -

    The fee command reports the current state of the open-ledger requirements +FeeRequest | xrpl

    Interface FeeRequest

    The fee command reports the current state of the open-ledger requirements for the transaction cost. This requires the FeeEscalation amendment to be enabled. Expects a response in the form of a FeeResponse.

    -
    -
    -

    Example

    const feeRequest: FeeRequest = {
    command: 'fee'
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "fee"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    const feeRequest: FeeRequest = {
    command: 'fee'
    } +
    + +
    interface FeeRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "fee";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "fee"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/FeeResponse.html b/docs/interfaces/FeeResponse.html index 47a7c3810c..6453147a38 100644 --- a/docs/interfaces/FeeResponse.html +++ b/docs/interfaces/FeeResponse.html @@ -1,521 +1,41 @@ -FeeResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FeeResponse

    -
    -

    Response expected from a FeeRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β current_ledger_size: string;
    Β Β Β Β current_queue_size: string;
    Β Β Β Β drops: {
    Β Β Β Β Β Β Β Β base_fee: string;
    Β Β Β Β Β Β Β Β median_fee: string;
    Β Β Β Β Β Β Β Β minimum_fee: string;
    Β Β Β Β Β Β Β Β open_ledger_fee: string;
    Β Β Β Β };
    Β Β Β Β expected_ledger_size: string;
    Β Β Β Β ledger_current_index: number;
    Β Β Β Β levels: {
    Β Β Β Β Β Β Β Β median_level: string;
    Β Β Β Β Β Β Β Β minimum_level: string;
    Β Β Β Β Β Β Β Β open_ledger_level: string;
    Β Β Β Β Β Β Β Β reference_level: string;
    Β Β Β Β };
    Β Β Β Β max_queue_size: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      current_ledger_size: string
      -

      Number of transactions provisionally included in the in-progress ledger.

      -
      -
    • -
    • -
      current_queue_size: string
      -

      Number of transactions currently queued for the next ledger.

      -
      -
    • -
    • -
      drops: {
      Β Β Β Β base_fee: string;
      Β Β Β Β median_fee: string;
      Β Β Β Β minimum_fee: string;
      Β Β Β Β open_ledger_fee: string;
      }
      -
        -
      • -
        base_fee: string
        -

        The transaction cost required for a reference transaction to be +FeeResponse | xrpl

        Interface FeeResponse

        Response expected from a FeeRequest.

        +
        interface FeeResponse {
        Β Β Β Β api_version?: number;
        Β Β Β Β forwarded?: boolean;
        Β Β Β Β id: string | number;
        Β Β Β Β result: {
        Β Β Β Β Β Β Β Β current_ledger_size: string;
        Β Β Β Β Β Β Β Β current_queue_size: string;
        Β Β Β Β Β Β Β Β drops: {
        Β Β Β Β Β Β Β Β Β Β Β Β base_fee: string;
        Β Β Β Β Β Β Β Β Β Β Β Β median_fee: string;
        Β Β Β Β Β Β Β Β Β Β Β Β minimum_fee: string;
        Β Β Β Β Β Β Β Β Β Β Β Β open_ledger_fee: string;
        Β Β Β Β Β Β Β Β };
        Β Β Β Β Β Β Β Β expected_ledger_size: string;
        Β Β Β Β Β Β Β Β ledger_current_index: number;
        Β Β Β Β Β Β Β Β levels: {
        Β Β Β Β Β Β Β Β Β Β Β Β median_level: string;
        Β Β Β Β Β Β Β Β Β Β Β Β minimum_level: string;
        Β Β Β Β Β Β Β Β Β Β Β Β open_ledger_level: string;
        Β Β Β Β Β Β Β Β Β Β Β Β reference_level: string;
        Β Β Β Β Β Β Β Β };
        Β Β Β Β Β Β Β Β max_queue_size: string;
        Β Β Β Β };
        Β Β Β Β status?: string;
        Β Β Β Β type: string;
        Β Β Β Β warning?: "load";
        Β Β Β Β warnings?: ResponseWarning[];
        }

        Hierarchy (View Summary)

        Properties

        api_version?: number
        forwarded?: boolean
        id: string | number
        result: {
        Β Β Β Β current_ledger_size: string;
        Β Β Β Β current_queue_size: string;
        Β Β Β Β drops: {
        Β Β Β Β Β Β Β Β base_fee: string;
        Β Β Β Β Β Β Β Β median_fee: string;
        Β Β Β Β Β Β Β Β minimum_fee: string;
        Β Β Β Β Β Β Β Β open_ledger_fee: string;
        Β Β Β Β };
        Β Β Β Β expected_ledger_size: string;
        Β Β Β Β ledger_current_index: number;
        Β Β Β Β levels: {
        Β Β Β Β Β Β Β Β median_level: string;
        Β Β Β Β Β Β Β Β minimum_level: string;
        Β Β Β Β Β Β Β Β open_ledger_level: string;
        Β Β Β Β Β Β Β Β reference_level: string;
        Β Β Β Β };
        Β Β Β Β max_queue_size: string;
        }

        Type declaration

        • current_ledger_size: string

          Number of transactions provisionally included in the in-progress ledger.

          +
        • current_queue_size: string

          Number of transactions currently queued for the next ledger.

          +
        • drops: {
          Β Β Β Β base_fee: string;
          Β Β Β Β median_fee: string;
          Β Β Β Β minimum_fee: string;
          Β Β Β Β open_ledger_fee: string;
          }
          • base_fee: string

            The transaction cost required for a reference transaction to be included in a ledger under minimum load, represented in drops of XRP.

            -
            -
          • -
          • -
            median_fee: string
            -

            An approximation of the median transaction cost among transactions. +

          • median_fee: string

            An approximation of the median transaction cost among transactions. Included in the previous validated ledger, represented in drops of XRP.

            -
            -
          • -
          • -
            minimum_fee: string
            -

            The minimum transaction cost for a reference transaction to be queued +

          • minimum_fee: string

            The minimum transaction cost for a reference transaction to be queued for a later ledger, represented in drops of XRP. If greater than base_fee, the transaction queue is full.

            -
            -
          • -
          • -
            open_ledger_fee: string
            -

            The minimum transaction cost that a reference transaction must pay to +

          • open_ledger_fee: string

            The minimum transaction cost that a reference transaction must pay to be included in the current open ledger, represented in drops of XRP.

            -
            -
        • -
        • -
          expected_ledger_size: string
          -

          The approximate number of transactions expected to be included in the +

      • expected_ledger_size: string

        The approximate number of transactions expected to be included in the current ledger. This is based on the number of transactions in the previous ledger.

        -
        -
      • -
      • -
        ledger_current_index: number
        -

        The Ledger Index of the current open ledger these stats describe.

        -
        -
      • -
      • -
        levels: {
        Β Β Β Β median_level: string;
        Β Β Β Β minimum_level: string;
        Β Β Β Β open_ledger_level: string;
        Β Β Β Β reference_level: string;
        }
        -
          -
        • -
          median_level: string
          -

          The median transaction cost among transactions in the previous +

        • ledger_current_index: number

          The Ledger Index of the current open ledger these stats describe.

          +
        • levels: {
          Β Β Β Β median_level: string;
          Β Β Β Β minimum_level: string;
          Β Β Β Β open_ledger_level: string;
          Β Β Β Β reference_level: string;
          }
          • median_level: string

            The median transaction cost among transactions in the previous validated ledger, represented in fee levels.

            -
            -
          • -
          • -
            minimum_level: string
            -

            The minimum transaction cost required to be queued for a future +

          • minimum_level: string

            The minimum transaction cost required to be queued for a future ledger, represented in fee levels.

            -
            -
          • -
          • -
            open_ledger_level: string
            -

            The minimum transaction cost required to be included in the current +

          • open_ledger_level: string

            The minimum transaction cost required to be included in the current open ledger, represented in fee levels.

            -
            -
          • -
          • -
            reference_level: string
            -

            The equivalent of the minimum transaction cost, represented in fee +

          • reference_level: string

            The equivalent of the minimum transaction cost, represented in fee levels.

            -
            -
        • -
        • -
          max_queue_size: string
          -

          The maximum number of transactions that the transaction queue can +

      • max_queue_size: string

        The maximum number of transactions that the transaction queue can currently hold.

        -
        -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/FundingOptions.html b/docs/interfaces/FundingOptions.html index 0fa9664168..de8d8f5393 100644 --- a/docs/interfaces/FundingOptions.html +++ b/docs/interfaces/FundingOptions.html @@ -1,414 +1,24 @@ -FundingOptions | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FundingOptions

    -
    -

    Hierarchy

    -
      -
    • FundingOptions
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    amount?: string
    -

    A custom amount to fund, if undefined or null, the default amount will be 1000.

    -
    -
    -
    - -
    faucetHost?: string
    -

    A custom host for a faucet server. On devnet, testnet, AMM devnet, and HooksV3 testnet, fundWallet will +FundingOptions | xrpl

    Interface FundingOptions

    interface FundingOptions {
    Β Β Β Β amount?: string;
    Β Β Β Β faucetHost?: string;
    Β Β Β Β faucetPath?: string;
    Β Β Β Β usageContext?: string;
    }

    Properties

    amount?: string

    A custom amount to fund, if undefined or null, the default amount will be 1000.

    +
    faucetHost?: string

    A custom host for a faucet server. On devnet, testnet, AMM devnet, and HooksV3 testnet, fundWallet will attempt to determine the correct server automatically. In other environments, or if you would like to customize the faucet host in devnet or testnet, you should provide the host using this option.

    -
    -
    -
    - -
    faucetPath?: string
    -

    A custom path for a faucet server. On devnet, +

    faucetPath?: string

    A custom path for a faucet server. On devnet, testnet, AMM devnet, and HooksV3 testnet, fundWallet will attempt to determine the correct path automatically. In other environments, or if you would like to customize the faucet path in devnet or testnet, you should provide the path using this option. -Ex: client.fundWallet(null,{'faucet.altnet.rippletest.net', '/accounts'}) -specifies a request to 'faucet.altnet.rippletest.net/accounts' to fund a new wallet.

    -
    -
    -
    - -
    usageContext?: string
    -

    An optional field to indicate the use case context of the faucet transaction +Ex: client.fundWallet(null,{'faucet.altnet.rippletest.net', '/accounts'}) +specifies a request to 'faucet.altnet.rippletest.net/accounts' to fund a new wallet.

    +
    usageContext?: string

    An optional field to indicate the use case context of the faucet transaction Ex: integration test, code snippets.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/GatewayBalance.html b/docs/interfaces/GatewayBalance.html index 4b2d6900ae..d0f4fb75c4 100644 --- a/docs/interfaces/GatewayBalance.html +++ b/docs/interfaces/GatewayBalance.html @@ -1,379 +1,9 @@ -GatewayBalance | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface GatewayBalance

    -
    -

    Hierarchy

    -
      -
    • GatewayBalance
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    value: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +GatewayBalance | xrpl

    Interface GatewayBalance

    interface GatewayBalance {
    Β Β Β Β currency: string;
    Β Β Β Β value: string;
    }

    Properties

    Properties

    currency: string
    value: string
    diff --git a/docs/interfaces/GatewayBalancesRequest.html b/docs/interfaces/GatewayBalancesRequest.html index bbbb18788d..dbe58f26d4 100644 --- a/docs/interfaces/GatewayBalancesRequest.html +++ b/docs/interfaces/GatewayBalancesRequest.html @@ -1,466 +1,33 @@ -GatewayBalancesRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface GatewayBalancesRequest

    -
    -

    The gateway_balances command calculates the total balances issued by a given +GatewayBalancesRequest | xrpl

    Interface GatewayBalancesRequest

    The gateway_balances command calculates the total balances issued by a given account, optionally excluding amounts held by operational addresses. Expects a response in the form of a GatewayBalancesResponse.

    -
    -
    -

    Example

    const gatewayBalances: GatewayBalanceRequest = {
    "id": "example_gateway_balances_1",
    "command": "gateway_balances",
    "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
    "strict": true,
    "hotwallet": ["rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ","ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt"],
    "ledger_index": "validated"
    } -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • GatewayBalancesRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    The Address to check. This should be the issuing address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "gateway_balances"
    -

    The name of the API method.

    -
    -
    -
    - -
    hotwallet?: string | string[]
    -

    An operational address to exclude from the balances issued, or an array of +

    const gatewayBalances: GatewayBalanceRequest = {
    "id": "example_gateway_balances_1",
    "command": "gateway_balances",
    "account": "rMwjYedjc7qqtKYVLiAccJSmCwih4LnE2q",
    "strict": true,
    "hotwallet": ["rKm4uWpg9tfwbVSeATv4KxDe6mpE9yPkgJ","ra7JkEzrgeKHdzKgo4EUUVBnxggY4z37kt"],
    "ledger_index": "validated"
    } +
    + +
    interface GatewayBalancesRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "gateway_balances";
    Β Β Β Β hotwallet?: string | string[];
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β strict?: boolean;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    The Address to check. This should be the issuing address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "gateway_balances"

    The name of the API method.

    +
    hotwallet?: string | string[]

    An operational address to exclude from the balances issued, or an array of Such addresses.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    strict?: boolean
    -

    If true, only accept an address or public key for the account parameter. +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    strict?: boolean

    If true, only accept an address or public key for the account parameter. Defaults to false.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/GatewayBalancesResponse.html b/docs/interfaces/GatewayBalancesResponse.html index 2ecc28880b..f36f2871ce 100644 --- a/docs/interfaces/GatewayBalancesResponse.html +++ b/docs/interfaces/GatewayBalancesResponse.html @@ -1,488 +1,29 @@ -GatewayBalancesResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface GatewayBalancesResponse

    -
    -

    Expected response from a GatewayBalancesRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β account: string;
    Β Β Β Β assets?: {
    Β Β Β Β Β Β Β Β [address: string]: GatewayBalance[];
    Β Β Β Β };
    Β Β Β Β balances?: {
    Β Β Β Β Β Β Β Β [address: string]: GatewayBalance[];
    Β Β Β Β };
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β obligations?: {
    Β Β Β Β Β Β Β Β [currency: string]: string;
    Β Β Β Β };
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/GetAggregatePriceRequest.html b/docs/interfaces/GetAggregatePriceRequest.html new file mode 100644 index 0000000000..c69673881d --- /dev/null +++ b/docs/interfaces/GetAggregatePriceRequest.html @@ -0,0 +1,30 @@ +GetAggregatePriceRequest | xrpl

    Interface GetAggregatePriceRequest

    The get_aggregate_price method retrieves the aggregate price of specified Oracle objects, +returning three price statistics: mean, median, and trimmed mean. +Returns an GetAggregatePriceResponse.

    +
    interface GetAggregatePriceRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β base_asset: string;
    Β Β Β Β command: "get_aggregate_price";
    Β Β Β Β id?: string | number;
    Β Β Β Β oracles: { account: string; oracle_document_id: string | number }[];
    Β Β Β Β quote_asset: string;
    Β Β Β Β trim?: number;
    Β Β Β Β trim_threshold?: number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    base_asset: string

    The currency code of the asset to be priced.

    +
    command: "get_aggregate_price"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses +the same id field. This way, even if responses arrive out of order, you +know which request prompted which response.

    +
    oracles: { account: string; oracle_document_id: string | number }[]

    The oracle identifier.

    +

    Type declaration

    • account: string

      The XRPL account that controls the Oracle object.

      +
    • oracle_document_id: string | number

      A unique identifier of the price oracle for the Account

      +
    quote_asset: string

    The currency code of the asset to quote the price of the base asset.

    +
    trim?: number

    The percentage of outliers to trim. Valid trim range is 1-25. If included, the API returns statistics for the trimmed mean.

    +
    trim_threshold?: number

    Defines a time range in seconds for filtering out older price data. Default value is 0, which doesn't filter any data.

    +
    diff --git a/docs/interfaces/GetAggregatePriceResponse.html b/docs/interfaces/GetAggregatePriceResponse.html new file mode 100644 index 0000000000..2bf95dee6a --- /dev/null +++ b/docs/interfaces/GetAggregatePriceResponse.html @@ -0,0 +1,31 @@ +GetAggregatePriceResponse | xrpl

    Interface GetAggregatePriceResponse

    Response expected from an GetAggregatePriceRequest.

    +
    interface GetAggregatePriceResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β entire_set: { mean: string; size: number; standard_deviation: string };
    Β Β Β Β Β Β Β Β ledger_current_index: number;
    Β Β Β Β Β Β Β Β median: string;
    Β Β Β Β Β Β Β Β time: number;
    Β Β Β Β Β Β Β Β trimmed_set?: { mean: string; size: number; standard_deviation: string };
    Β Β Β Β Β Β Β Β validated: boolean;
    Β Β Β Β };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: {
    Β Β Β Β entire_set: { mean: string; size: number; standard_deviation: string };
    Β Β Β Β ledger_current_index: number;
    Β Β Β Β median: string;
    Β Β Β Β time: number;
    Β Β Β Β trimmed_set?: { mean: string; size: number; standard_deviation: string };
    Β Β Β Β validated: boolean;
    }

    Type declaration

    • entire_set: { mean: string; size: number; standard_deviation: string }

      The statistics from the collected oracle prices.

      +
      • mean: string

        The simple mean.

        +
      • size: number

        The size of the data set to calculate the mean.

        +
      • standard_deviation: string

        The standard deviation.

        +
    • ledger_current_index: number

      The ledger index of the ledger version that was used to generate this +response.

      +
    • median: string

      The median of the collected oracle prices.

      +
    • time: number

      The most recent timestamp out of all LastUpdateTime values.

      +
    • Optionaltrimmed_set?: { mean: string; size: number; standard_deviation: string }

      The trimmed statistics from the collected oracle prices. Only appears if the trim field was specified in the request.

      +
      • mean: string

        The simple mean of the trimmed data.

        +
      • size: number

        The size of the data to calculate the trimmed mean.

        +
      • standard_deviation: string

        The standard deviation of the trimmed data.

        +
    • validated: boolean

      If included and set to true, the information in this response comes from +a validated ledger version. Otherwise, the information is subject to +change.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/IssuedCurrency.html b/docs/interfaces/IssuedCurrency.html index 1952326d44..9f42982c81 100644 --- a/docs/interfaces/IssuedCurrency.html +++ b/docs/interfaces/IssuedCurrency.html @@ -1,381 +1,9 @@ -IssuedCurrency | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface IssuedCurrency

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    issuer: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +IssuedCurrency | xrpl

    Interface IssuedCurrency

    interface IssuedCurrency {
    Β Β Β Β currency: string;
    Β Β Β Β issuer: string;
    }

    Hierarchy (View Summary)

    Properties

    Properties

    currency: string
    issuer: string
    diff --git a/docs/interfaces/IssuedCurrencyAmount.html b/docs/interfaces/IssuedCurrencyAmount.html index 5d99955265..6e4554f5af 100644 --- a/docs/interfaces/IssuedCurrencyAmount.html +++ b/docs/interfaces/IssuedCurrencyAmount.html @@ -1,390 +1,10 @@ -IssuedCurrencyAmount | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface IssuedCurrencyAmount

    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    issuer: string
    -
    - -
    value: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +IssuedCurrencyAmount | xrpl

    Interface IssuedCurrencyAmount

    interface IssuedCurrencyAmount {
    Β Β Β Β currency: string;
    Β Β Β Β issuer: string;
    Β Β Β Β value: string;
    }

    Hierarchy (View Summary)

    Properties

    Properties

    currency: string
    issuer: string
    value: string
    diff --git a/docs/interfaces/JobType.html b/docs/interfaces/JobType.html index 35a40557ee..498eaefa12 100644 --- a/docs/interfaces/JobType.html +++ b/docs/interfaces/JobType.html @@ -1,400 +1,12 @@ -JobType | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface JobType

    -
    -

    Hierarchy

    -
      -
    • JobType
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    avg_time?: number
    -
    - -
    in_progress?: number
    -
    - -
    job_type: string
    -
    - -
    peak_time?: number
    -
    - -
    per_second: number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +JobType | xrpl

    Interface JobType

    interface JobType {
    Β Β Β Β avg_time?: number;
    Β Β Β Β in_progress?: number;
    Β Β Β Β job_type: string;
    Β Β Β Β peak_time?: number;
    Β Β Β Β per_second: number;
    }

    Properties

    avg_time?: number
    in_progress?: number
    job_type: string
    peak_time?: number
    per_second: number
    diff --git a/docs/interfaces/LedgerBinary.html b/docs/interfaces/LedgerBinary.html index 45f71e3b18..f62fa3fdf4 100644 --- a/docs/interfaces/LedgerBinary.html +++ b/docs/interfaces/LedgerBinary.html @@ -1,520 +1,42 @@ -LedgerBinary | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerBinary

    -
    -

    Hierarchy

    -
      -
    • Omit<Omit<Ledger, "transactions">, "accountState"> -
        -
      • LedgerBinary
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    accountState?: string[]
    -
    - -
    account_hash: string
    -

    The SHA-512Half of this ledger's state tree information.

    -
    -
    -
    - -
    close_flags: number
    -

    A bit-map of flags relating to the closing of this ledger.

    -
    -
    -
    - -
    close_time: number
    -

    The approximate time this ledger version closed, as the number of seconds +LedgerBinary | xrpl

    Interface LedgerBinary

    interface LedgerBinary {
    Β Β Β Β account_hash: string;
    Β Β Β Β accountState?: string[];
    Β Β Β Β close_flags: number;
    Β Β Β Β close_time: number;
    Β Β Β Β close_time_human: string;
    Β Β Β Β close_time_iso: string;
    Β Β Β Β close_time_resolution: number;
    Β Β Β Β closed: boolean;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β parent_close_time: number;
    Β Β Β Β parent_hash: string;
    Β Β Β Β total_coins: string;
    Β Β Β Β transaction_hash: string;
    Β Β Β Β transactions?: string[];
    }

    Hierarchy

    • Omit<Ledger, "transactions" | "accountState">
      • LedgerBinary

    Properties

    account_hash: string

    The SHA-512Half of this ledger's state tree information.

    +
    accountState?: string[]
    close_flags: number

    A bit-map of flags relating to the closing of this ledger.

    +
    close_time: number

    The approximate time this ledger version closed, as the number of seconds since the Ripple Epoch of 2000-01-01 00:00:00. This value is rounded based on the close_time_resolution.

    -
    -
    -
    - -
    close_time_human: string
    -

    The approximate time this ledger was closed, in human-readable format. +

    close_time_human: string

    The approximate time this ledger was closed, in human-readable format. Always uses the UTC time zone.

    -
    -
    -
    - -
    close_time_resolution: number
    -

    An integer in the range [2,120] indicating the maximum number of seconds +

    close_time_iso: string

    The approximate time this ledger was closed, in date time string format. +Always uses the UTC time zone.

    +
    close_time_resolution: number

    An integer in the range [2,120] indicating the maximum number of seconds by which the close_time could be rounded.

    -
    -
    -
    - -
    closed: boolean
    -

    Whether or not this ledger has been closed.

    -
    -
    -
    - -
    ledger_hash: string
    -

    The SHA-512Half of this ledger version. This serves as a unique identifier +

    closed: boolean

    Whether or not this ledger has been closed.

    +
    ledger_hash: string

    The SHA-512Half of this ledger version. This serves as a unique identifier for this ledger and all its contents.

    -
    -
    -
    - -
    ledger_index: string
    -

    The ledger index of the ledger. Some API methods display this as a quoted -integer; some display it as a native JSON number.

    -
    -
    -
    - -
    parent_close_time: number
    -

    The approximate time at which the previous ledger was closed.

    -
    -
    -
    - -
    parent_hash: string
    -

    Unique identifying hash of the ledger that came immediately before this +

    ledger_index: number

    The ledger index of the ledger. Represented as a number.

    +
    parent_close_time: number

    The approximate time at which the previous ledger was closed.

    +
    parent_hash: string

    Unique identifying hash of the ledger that came immediately before this one.

    -
    -
    -
    - -
    total_coins: string
    -

    Total number of XRP drops in the network, as a quoted integer.

    -
    -
    -
    - -
    transaction_hash: string
    -

    Hash of the transaction information included in this ledger, as hex.

    -
    -
    -
    - -
    transactions?: string[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    total_coins: string

    Total number of XRP drops in the network, as a quoted integer.

    +
    transaction_hash: string

    Hash of the transaction information included in this ledger, as hex.

    +
    transactions?: string[]
    diff --git a/docs/interfaces/LedgerClosedRequest.html b/docs/interfaces/LedgerClosedRequest.html index 2388098888..b368f36ff9 100644 --- a/docs/interfaces/LedgerClosedRequest.html +++ b/docs/interfaces/LedgerClosedRequest.html @@ -1,413 +1,23 @@ -LedgerClosedRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerClosedRequest

    -
    -

    The ledger_closed method returns the unique identifiers of the most recently +LedgerClosedRequest | xrpl

    Interface LedgerClosedRequest

    The ledger_closed method returns the unique identifiers of the most recently closed ledger. Expects a response in the form of a LedgerClosedResponse.

    -
    -
    -

    Example

      +
    -
    const ledgerClosed: LedgerClosedRequest = {
    "command": "ledger_closed"
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "ledger_closed"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    const ledgerClosed: LedgerClosedRequest = {
    "command": "ledger_closed"
    } +
    + +
    interface LedgerClosedRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "ledger_closed";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "ledger_closed"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerClosedResponse.html b/docs/interfaces/LedgerClosedResponse.html index 1f17fbf55d..02c9f3b818 100644 --- a/docs/interfaces/LedgerClosedResponse.html +++ b/docs/interfaces/LedgerClosedResponse.html @@ -1,442 +1,16 @@ -LedgerClosedResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerClosedResponse

    -
    -

    The response expected from a LedgerClosedRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      ledger_hash: string
    • -
    • -
      ledger_index: number
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerClosedResponse | xrpl

    Interface LedgerClosedResponse

    The response expected from a LedgerClosedRequest.

    +
    interface LedgerClosedResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { ledger_hash: string; ledger_index: number };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { ledger_hash: string; ledger_index: number }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/LedgerCurrentRequest.html b/docs/interfaces/LedgerCurrentRequest.html index a69b489274..eadc89896c 100644 --- a/docs/interfaces/LedgerCurrentRequest.html +++ b/docs/interfaces/LedgerCurrentRequest.html @@ -1,410 +1,20 @@ -LedgerCurrentRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerCurrentRequest

    -
    -

    The ledger_current method returns the unique identifiers of the current +LedgerCurrentRequest | xrpl

    Interface LedgerCurrentRequest

    The ledger_current method returns the unique identifiers of the current in-progress ledger. Expects a response in the form of a LedgerCurrentResponse.

    -
    -
    -

    Example

    const ledgerCurrent: LedgerCurrentRequest = {
    "command": "ledger_current"
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "ledger_current"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    const ledgerCurrent: LedgerCurrentRequest = {
    "command": "ledger_current"
    } +
    + +
    interface LedgerCurrentRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "ledger_current";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "ledger_current"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerCurrentResponse.html b/docs/interfaces/LedgerCurrentResponse.html index 9506b6e56d..e9b1f1828e 100644 --- a/docs/interfaces/LedgerCurrentResponse.html +++ b/docs/interfaces/LedgerCurrentResponse.html @@ -1,443 +1,17 @@ -LedgerCurrentResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerCurrentResponse

    -
    -

    Response expected from a LedgerCurrentRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_current_index: number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      ledger_current_index: number
      -

      The ledger index of this ledger version.

      -
      -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerCurrentResponse | xrpl

    Interface LedgerCurrentResponse

    Response expected from a LedgerCurrentRequest.

    +
    interface LedgerCurrentResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { ledger_current_index: number };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { ledger_current_index: number }

    Type declaration

    • ledger_current_index: number

      The ledger index of this ledger version.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/LedgerDataBinaryLedgerEntry.html b/docs/interfaces/LedgerDataBinaryLedgerEntry.html index 453fe1da80..6f85ea25fa 100644 --- a/docs/interfaces/LedgerDataBinaryLedgerEntry.html +++ b/docs/interfaces/LedgerDataBinaryLedgerEntry.html @@ -1,372 +1,8 @@ -LedgerDataBinaryLedgerEntry | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerDataBinaryLedgerEntry

    -
    -

    Hierarchy

    -
      -
    • LedgerDataBinaryLedgerEntry
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    data: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerDataBinaryLedgerEntry | xrpl

    Interface LedgerDataBinaryLedgerEntry

    interface LedgerDataBinaryLedgerEntry {
    Β Β Β Β data: string;
    }

    Properties

    Properties

    data: string
    diff --git a/docs/interfaces/LedgerDataRequest.html b/docs/interfaces/LedgerDataRequest.html index 7d15f6fdef..d9c6cbd170 100644 --- a/docs/interfaces/LedgerDataRequest.html +++ b/docs/interfaces/LedgerDataRequest.html @@ -1,477 +1,36 @@ -LedgerDataRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerDataRequest

    -
    -

    The ledger_data method retrieves contents of the specified ledger. You can +LedgerDataRequest | xrpl

    Interface LedgerDataRequest

    The ledger_data method retrieves contents of the specified ledger. You can iterate through several calls to retrieve the entire contents of a single ledger version.

    -
    -
    -

    Example

    const ledgerData: LedgerDataRequest = {
    "id": 2,
    "ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
    "command": "ledger_data",
    "limit": 5,
    "binary": true
    } -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • LedgerDataRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If set to true, return ledger objects as hashed hex strings instead of +

    const ledgerData: LedgerDataRequest = {
    "id": 2,
    "ledger_hash": "842B57C1CC0613299A686D3E9F310EC0422C84D3911E5056389AA7E5808A93C8",
    "command": "ledger_data",
    "limit": 5,
    "binary": true
    } +
    + +
    interface LedgerDataRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β command: "ledger_data";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β type?: LedgerEntryFilter;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If set to true, return ledger objects as hashed hex strings instead of JSON.

    -
    -
    -
    - -
    command: "ledger_data"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    command: "ledger_data"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    limit?: number
    -

    Limit the number of ledger objects to retrieve. The server is not required +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Limit the number of ledger objects to retrieve. The server is not required to honor this value.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off.

    -
    -
    -
    - - -

    If included, filter results to include only this type of ledger object.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +

    If included, filter results to include only this type of ledger object.

    +
    diff --git a/docs/interfaces/LedgerDataResponse.html b/docs/interfaces/LedgerDataResponse.html index 6d8c0c1f7f..5a5a2222bd 100644 --- a/docs/interfaces/LedgerDataResponse.html +++ b/docs/interfaces/LedgerDataResponse.html @@ -1,462 +1,22 @@ -LedgerDataResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerDataResponse

    -
    -

    The response expected from a LedgerDataRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β state: LedgerDataLedgerState[];
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/LedgerEntry.AMM.html b/docs/interfaces/LedgerEntry.AMM.html index dcdff7a1bf..6d95eacada 100644 --- a/docs/interfaces/LedgerEntry.AMM.html +++ b/docs/interfaces/LedgerEntry.AMM.html @@ -1,563 +1,44 @@ -AMM | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AMM

    -
    -

    The AMM object type describes a single Automated Market Maker (AMM) instance.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • MissingPreviousTxnID -
        -
      • AMM
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The address of the special account that holds this AMM's assets.

    -
    -
    -
    - -
    Asset: Currency
    -

    The definition for one of the two assets this AMM holds.

    -
    -
    -
    - -
    Asset2: Currency
    -

    The definition for the other asset this AMM holds.

    -
    -
    -
    - -
    AuctionSlot?: {
    Β Β Β Β Account: string;
    Β Β Β Β AuthAccounts?: AuthAccount[];
    Β Β Β Β DiscountedFee: number;
    Β Β Β Β Expiration: number;
    Β Β Β Β Price: IssuedCurrencyAmount;
    }
    -

    Details of the current owner of the auction slot.

    -
    -
    -

    Type declaration

    -
      -
    • -
      Account: string
      -

      The current owner of this auction slot.

      -
      -
    • -
    • -
      Optional AuthAccounts?: AuthAccount[]
      -

      A list of at most 4 additional accounts that are authorized to trade at the discounted fee for this AMM instance.

      -
      -
    • -
    • -
      DiscountedFee: number
      -

      The trading fee to be charged to the auction owner, in the same format as TradingFee. +AMM | xrpl

      Interface AMM

      The AMM object type describes a single Automated Market Maker (AMM) instance.

      +
      interface AMM {
      Β Β Β Β Account: string;
      Β Β Β Β Asset: Currency;
      Β Β Β Β Asset2: Currency;
      Β Β Β Β AuctionSlot?: {
      Β Β Β Β Β Β Β Β Account: string;
      Β Β Β Β Β Β Β Β AuthAccounts?: AuthAccount[];
      Β Β Β Β Β Β Β Β DiscountedFee: number;
      Β Β Β Β Β Β Β Β Expiration: number;
      Β Β Β Β Β Β Β Β Price: IssuedCurrencyAmount;
      Β Β Β Β };
      Β Β Β Β Flags: 0;
      Β Β Β Β index: string;
      Β Β Β Β LedgerEntryType: "AMM";
      Β Β Β Β LPTokenBalance: IssuedCurrencyAmount;
      Β Β Β Β PreviousTxnID?: string;
      Β Β Β Β PreviousTxnLgrSeq?: number;
      Β Β Β Β TradingFee: number;
      Β Β Β Β VoteSlots?: VoteSlot[];
      }

      Hierarchy

      • BaseLedgerEntry
      • HasOptionalPreviousTxnID
        • AMM

      Properties

      Account: string

      The address of the special account that holds this AMM's assets.

      +
      Asset: Currency

      The definition for one of the two assets this AMM holds.

      +
      Asset2: Currency

      The definition for the other asset this AMM holds.

      +
      AuctionSlot?: {
      Β Β Β Β Account: string;
      Β Β Β Β AuthAccounts?: AuthAccount[];
      Β Β Β Β DiscountedFee: number;
      Β Β Β Β Expiration: number;
      Β Β Β Β Price: IssuedCurrencyAmount;
      }

      Details of the current owner of the auction slot.

      +

      Type declaration

      • Account: string

        The current owner of this auction slot.

        +
      • OptionalAuthAccounts?: AuthAccount[]

        A list of at most 4 additional accounts that are authorized to trade at the discounted fee for this AMM instance.

        +
      • DiscountedFee: number

        The trading fee to be charged to the auction owner, in the same format as TradingFee. By default this is 0, meaning that the auction owner can trade at no fee instead of the standard fee for this AMM.

        -
        -
      • -
      • -
        Expiration: number
        -

        The time when this slot expires, in seconds since the Ripple Epoch.

        -
        -
      • -
      • -
        Price: IssuedCurrencyAmount
        -

        The amount the auction owner paid to win this slot, in LP Tokens.

        -
        -
      -
      -
      - -
      Flags: 0
      -

      A bit-map of boolean flags. No flags are defined for the AMM object +

    • Expiration: number

      The time when this slot expires, in seconds since the Ripple Epoch.

      +
    • Price: IssuedCurrencyAmount

      The amount the auction owner paid to win this slot, in LP Tokens.

      +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for the AMM object type, so this value is always 0.

    -
    -
    -
    - -
    LPTokenBalance: IssuedCurrencyAmount
    -

    The total outstanding balance of liquidity provider tokens from this AMM instance. -The holders of these tokens can vote on the AMM's trading fee in proportion to their holdings, -or redeem the tokens for a share of the AMM's assets which grows with the trading fees collected.

    -
    -
    -
    - -
    LedgerEntryType: "AMM"
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    TradingFee: number
    -

    The percentage fee to be charged for trades against this AMM instance, in units of 1/100,000. +

    index: string
    LedgerEntryType: "AMM"
    LPTokenBalance: IssuedCurrencyAmount

    The total outstanding balance of liquidity provider tokens from this AMM instance. +The holders of these tokens can vote on the AMM's trading fee in proportion to their holdings, +or redeem the tokens for a share of the AMM's assets which grows with the trading fees collected.

    +
    PreviousTxnID?: string

    The identifying hash of the transaction that most recently modified this +object. This field was added in the fixPreviousTxnID amendment, so it +may not be present in every object.

    +
    PreviousTxnLgrSeq?: number

    The index of the ledger that contains the transaction that most recently +modified this object. This field was added in the fixPreviousTxnID +amendment, so it may not be present in every object.

    +
    TradingFee: number

    The percentage fee to be charged for trades against this AMM instance, in units of 1/100,000. The maximum value is 1000, for a 1% fee.

    -
    -
    -
    - -
    VoteSlots?: VoteSlot[]
    -

    A list of vote objects, representing votes on the pool's trading fee.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    VoteSlots?: VoteSlot[]

    A list of vote objects, representing votes on the pool's trading fee.

    +
    diff --git a/docs/interfaces/LedgerEntry.AccountRoot.html b/docs/interfaces/LedgerEntry.AccountRoot.html index 19ed938af7..92a767a0bd 100644 --- a/docs/interfaces/LedgerEntry.AccountRoot.html +++ b/docs/interfaces/LedgerEntry.AccountRoot.html @@ -1,657 +1,69 @@ -AccountRoot | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountRoot

    -
    -

    The AccountRoot object type describes a single account, its settings, and +AccountRoot | xrpl

    Interface AccountRoot

    The AccountRoot object type describes a single account, its settings, and XRP balance.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • AccountRoot
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    AMMID?: string
    -

    The ledger entry ID of the corresponding AMM ledger entry. -Set during account creation; cannot be modified. -If present, indicates that this is a special AMM AccountRoot; always omitted on non-AMM accounts.

    -
    -
    -
    - -
    Account: string
    -

    The identifying (classic) address of this account.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    The identifying hash of the transaction most recently sent by this +

    interface AccountRoot {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β AMMID?: string;
    Β Β Β Β Balance: string;
    Β Β Β Β BurnedNFTokens?: number;
    Β Β Β Β Domain?: string;
    Β Β Β Β EmailHash?: string;
    Β Β Β Β FirstNFTSequence: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "AccountRoot";
    Β Β Β Β MessageKey?: string;
    Β Β Β Β MintedNFTokens?: number;
    Β Β Β Β NFTokenMinter?: string;
    Β Β Β Β OwnerCount: number;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β RegularKey?: string;
    Β Β Β Β Sequence: number;
    Β Β Β Β TicketCount?: number;
    Β Β Β Β TickSize?: number;
    Β Β Β Β TransferRate?: number;
    Β Β Β Β WalletLocator?: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • AccountRoot

    Properties

    Account: string

    The identifying (classic) address of this account.

    +
    AccountTxnID?: string

    The identifying hash of the transaction most recently sent by this account. This field must be enabled to use the AccountTxnID transaction field. To enable it, send an AccountSet transaction with the. asfAccountTxnID flag enabled.

    -
    -
    -
    - -
    Balance: string
    -

    The account's current XRP balance in drops, represented as a string.

    -
    -
    -
    - -
    BurnedNFTokens?: number
    -

    Total NFTokens this account's issued that have been burned. This number is always equal or less than MintedNFTokens.

    -
    -
    -
    - -
    Domain?: string
    -

    A domain associated with this account. In JSON, this is the hexadecimal +

    AMMID?: string

    The ledger entry ID of the corresponding AMM ledger entry. +Set during account creation; cannot be modified. +If present, indicates that this is a special AMM AccountRoot; always omitted on non-AMM accounts.

    +
    Balance: string

    The account's current XRP balance in drops, represented as a string.

    +
    BurnedNFTokens?: number

    Total NFTokens this account's issued that have been burned. This number is always equal or less than MintedNFTokens.

    +
    Domain?: string

    A domain associated with this account. In JSON, this is the hexadecimal for the ASCII representation of the domain.

    -
    -
    -
    - -
    EmailHash?: string
    -

    The md5 hash of an email address.

    -
    -
    -
    - -
    FirstNFTSequence: number
    -

    The sequence that the account first minted an NFToken

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean flags enabled for this account.

    -
    -
    -
    - -
    LedgerEntryType: "AccountRoot"
    -
    - -
    MessageKey?: string
    -

    A public key that may be used to send encrypted messages to this account +

    EmailHash?: string

    The md5 hash of an email address.

    +
    FirstNFTSequence: number

    The sequence that the account first minted an NFToken

    +
    Flags: number

    A bit-map of boolean flags enabled for this account.

    +
    index: string
    LedgerEntryType: "AccountRoot"
    MessageKey?: string

    A public key that may be used to send encrypted messages to this account in JSON, uses hexadecimal.

    -
    -
    -
    - -
    MintedNFTokens?: number
    -

    Total NFTokens have been minted by and on behalf of this account.

    -
    -
    -
    - -
    NFTokenMinter?: string
    -

    Another account that can mint NFTokens on behalf of this account.

    -
    -
    -
    - -
    OwnerCount: number
    -

    The number of objects this account owns in the ledger, which contributes +

    MintedNFTokens?: number

    Total NFTokens have been minted by and on behalf of this account.

    +
    NFTokenMinter?: string

    Another account that can mint NFTokens on behalf of this account.

    +
    OwnerCount: number

    The number of objects this account owns in the ledger, which contributes to its owner reserve.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    RegularKey?: string
    -

    The address of a key pair that can be used to sign transactions for this +

    RegularKey?: string

    The address of a key pair that can be used to sign transactions for this account instead of the master key. Use a SetRegularKey transaction to change this value.

    -
    -
    -
    - -
    Sequence: number
    -

    The sequence number of the next valid transaction for this account.

    -
    -
    -
    - -
    TickSize?: number
    -

    How many significant digits to use for exchange rates of Offers involving -currencies issued by this address. Valid values are 3 to 15, inclusive.

    -
    -
    -
    - -
    TicketCount?: number
    -

    How many Tickets this account owns in the ledger. This is updated +

    Sequence: number

    The sequence number of the next valid transaction for this account.

    +
    TicketCount?: number

    How many Tickets this account owns in the ledger. This is updated automatically to ensure that the account stays within the hard limit of 250. Tickets at a time.

    -
    -
    -
    - -
    TransferRate?: number
    -

    A transfer fee to charge other users for sending currency issued by this +

    TickSize?: number

    How many significant digits to use for exchange rates of Offers involving +currencies issued by this address. Valid values are 3 to 15, inclusive.

    +
    TransferRate?: number

    A transfer fee to charge other users for sending currency issued by this account to each other.

    -
    -
    -
    - -
    WalletLocator?: string
    -

    An arbitrary 256-bit value that users can set.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    WalletLocator?: string

    An arbitrary 256-bit value that users can set.

    +
    diff --git a/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html b/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html index 506b09c13d..8634e90381 100644 --- a/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html +++ b/docs/interfaces/LedgerEntry.AccountRootFlagsInterface.html @@ -1,562 +1,40 @@ -AccountRootFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface AccountRootFlagsInterface

    -
    -

    A boolean map of AccountRootFlags for simplified code checking AccountRoot settings. +AccountRootFlagsInterface | xrpl

    Interface AccountRootFlagsInterface

    A boolean map of AccountRootFlags for simplified code checking AccountRoot settings. For submitting settings flags to the ledger, use AccountRootFlags instead.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • AccountRootFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    lsfAMM?: boolean
    -

    This account is an Automated Market Maker (AMM) instance.

    -
    -
    -
    - -
    lsfAllowTrustLineClawback?: boolean
    -

    This address can claw back issued IOUs. Once enabled, cannot be disabled.

    -
    -
    -
    - -
    lsfDefaultRipple?: boolean
    -

    Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

    -
    -
    -
    - -
    lsfDepositAuth?: boolean
    -

    This account can only receive funds from transactions it sends, and from preauthorized accounts. +

    interface AccountRootFlagsInterface {
    Β Β Β Β lsfAllowTrustLineClawback?: boolean;
    Β Β Β Β lsfAMM?: boolean;
    Β Β Β Β lsfDefaultRipple?: boolean;
    Β Β Β Β lsfDepositAuth?: boolean;
    Β Β Β Β lsfDisableMaster?: boolean;
    Β Β Β Β lsfDisallowIncomingCheck?: boolean;
    Β Β Β Β lsfDisallowIncomingNFTokenOffer?: boolean;
    Β Β Β Β lsfDisallowIncomingPayChan?: boolean;
    Β Β Β Β lsfDisallowIncomingTrustline?: boolean;
    Β Β Β Β lsfDisallowXRP?: boolean;
    Β Β Β Β lsfGlobalFreeze?: boolean;
    Β Β Β Β lsfNoFreeze?: boolean;
    Β Β Β Β lsfPasswordSpent?: boolean;
    Β Β Β Β lsfRequireAuth?: boolean;
    Β Β Β Β lsfRequireDestTag?: boolean;
    }

    Properties

    lsfAllowTrustLineClawback?: boolean

    This address can claw back issued IOUs. Once enabled, cannot be disabled.

    +
    lsfAMM?: boolean

    This account is an Automated Market Maker (AMM) instance.

    +
    lsfDefaultRipple?: boolean

    Enable rippling on this address's trust lines by default. Required for issuing addresses; discouraged for others.

    +
    lsfDepositAuth?: boolean

    This account can only receive funds from transactions it sends, and from preauthorized accounts. (It has DepositAuth enabled.)

    -
    -
    -
    - -
    lsfDisableMaster?: boolean
    -

    Disallows use of the master key to sign transactions for this account.

    -
    -
    -
    - -
    lsfDisallowIncomingCheck?: boolean
    -

    Disallow incoming Checks from other accounts.

    -
    -
    -
    - -
    lsfDisallowIncomingNFTokenOffer?: boolean
    -

    Disallow incoming NFTOffers from other accounts.

    -
    -
    -
    - -
    lsfDisallowIncomingPayChan?: boolean
    -

    Disallow incoming PayChannels from other accounts.

    -
    -
    -
    - -
    lsfDisallowIncomingTrustline?: boolean
    -

    Disallow incoming Trustlines from other accounts.

    -
    -
    -
    - -
    lsfDisallowXRP?: boolean
    -

    Client applications should not send XRP to this account. Not enforced by rippled.

    -
    -
    -
    - -
    lsfGlobalFreeze?: boolean
    -

    All assets issued by this address are frozen.

    -
    -
    -
    - -
    lsfNoFreeze?: boolean
    -

    This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

    -
    -
    -
    - -
    lsfPasswordSpent?: boolean
    -

    The account has used its free SetRegularKey transaction.

    -
    -
    -
    - -
    lsfRequireAuth?: boolean
    -

    This account must individually approve other users for those users to hold this account's issued currencies.

    -
    -
    -
    - -
    lsfRequireDestTag?: boolean
    -

    Requires incoming payments to specify a Destination Tag.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    lsfDisableMaster?: boolean

    Disallows use of the master key to sign transactions for this account.

    +
    lsfDisallowIncomingCheck?: boolean

    Disallow incoming Checks from other accounts.

    +
    lsfDisallowIncomingNFTokenOffer?: boolean

    Disallow incoming NFTOffers from other accounts.

    +
    lsfDisallowIncomingPayChan?: boolean

    Disallow incoming PayChannels from other accounts.

    +
    lsfDisallowIncomingTrustline?: boolean

    Disallow incoming Trustlines from other accounts.

    +
    lsfDisallowXRP?: boolean

    Client applications should not send XRP to this account. Not enforced by rippled.

    +
    lsfGlobalFreeze?: boolean

    All assets issued by this address are frozen.

    +
    lsfNoFreeze?: boolean

    This address cannot freeze trust lines connected to it. Once enabled, cannot be disabled.

    +
    lsfPasswordSpent?: boolean

    The account has used its free SetRegularKey transaction.

    +
    lsfRequireAuth?: boolean

    This account must individually approve other users for those users to hold this account's issued currencies.

    +
    lsfRequireDestTag?: boolean

    Requires incoming payments to specify a Destination Tag.

    +
    diff --git a/docs/interfaces/LedgerEntry.Amendments.html b/docs/interfaces/LedgerEntry.Amendments.html index 0e899d64e6..e2fe64a5a9 100644 --- a/docs/interfaces/LedgerEntry.Amendments.html +++ b/docs/interfaces/LedgerEntry.Amendments.html @@ -1,485 +1,29 @@ -Amendments | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Amendments

    -
    -

    The Amendments object type contains a list of Amendments that are currently +Amendments | xrpl

    Interface Amendments

    The Amendments object type contains a list of Amendments that are currently active.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • MissingPreviousTxnID -
        -
      • Amendments
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Amendments?: string[]
    -

    Array of 256-bit amendment IDs for all currently-enabled amendments. If +

    interface Amendments {
    Β Β Β Β Amendments?: string[];
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Amendments";
    Β Β Β Β Majorities?: Majority[];
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasOptionalPreviousTxnID
      • Amendments

    Properties

    Amendments?: string[]

    Array of 256-bit amendment IDs for all currently-enabled amendments. If omitted, there are no enabled amendments.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for the Amendments object +

    Flags: 0

    A bit-map of boolean flags. No flags are defined for the Amendments object type, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "Amendments"
    -
    - -
    Majorities?: Majority[]
    -

    Array of objects describing the status of amendments that have majority +

    index: string
    LedgerEntryType: "Amendments"
    Majorities?: Majority[]

    Array of objects describing the status of amendments that have majority support but are not yet enabled. If omitted, there are no pending amendments with majority support.

    -
    -
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    PreviousTxnID?: string

    The identifying hash of the transaction that most recently modified this +object. This field was added in the fixPreviousTxnID amendment, so it +may not be present in every object.

    +
    PreviousTxnLgrSeq?: number

    The index of the ledger that contains the transaction that most recently +modified this object. This field was added in the fixPreviousTxnID +amendment, so it may not be present in every object.

    +
    diff --git a/docs/interfaces/LedgerEntry.Bridge.html b/docs/interfaces/LedgerEntry.Bridge.html index adec34b633..e8db01e7b8 100644 --- a/docs/interfaces/LedgerEntry.Bridge.html +++ b/docs/interfaces/LedgerEntry.Bridge.html @@ -1,140 +1,41 @@ -Bridge | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Bridge

    -
    -

    A Bridge objects represents a cross-chain bridge and includes information about +Bridge | xrpl

    Interface Bridge

    A Bridge objects represents a cross-chain bridge and includes information about the door accounts, assets, signature rewards, and the minimum account create amount.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • Bridge
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The door account that owns the bridge.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for Bridges, so this value +

    interface Bridge {
    Β Β Β Β Account: string;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Bridge";
    Β Β Β Β MinAccountCreateAmount?: string;
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β SignatureReward: Amount;
    Β Β Β Β XChainAccountClaimCount: string;
    Β Β Β Β XChainAccountCreateCount: string;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainClaimID: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Bridge

    Properties

    Account: string

    The door account that owns the bridge.

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for Bridges, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "Bridge"
    -
    - -
    MinAccountCreateAmount?: string
    -

    The minimum amount, in XRP, required for an XChainAccountCreateCommit -transaction. If this isn't present, the XChainAccountCreateCommit +

    index: string
    LedgerEntryType: "Bridge"
    MinAccountCreateAmount?: string

    The minimum amount, in XRP, required for an XChainAccountCreateCommit +transaction. If this isn't present, the XChainAccountCreateCommit transaction will fail. This field can only be present on XRP-XRP bridges.

    -
    -
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the sender's owner directory links to this +

    OwnerNode: string

    A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    SignatureReward: Amount
    -

    The total amount, in XRP, to be rewarded for providing a signature for +

    SignatureReward: Amount

    The total amount, in XRP, to be rewarded for providing a signature for cross-chain transfer or for signing for the cross-chain reward. This amount will be split among the signers.

    -
    -
    -
    - -
    XChainAccountClaimCount: string
    -

    A counter used to order the execution of account create transactions. It is +

    XChainAccountClaimCount: string

    A counter used to order the execution of account create transactions. It is incremented every time a XChainAccountCreateCommit transaction is "claimed" on the destination chain. When the "claim" transaction is run on the destination chain, the XChainAccountClaimCount must match the value that @@ -142,418 +43,9 @@

    -
    -
    - -
    XChainAccountCreateCount: string
    -

    A counter used to order the execution of account create transactions. It is +

    XChainAccountCreateCount: string

    A counter used to order the execution of account create transactions. It is incremented every time a successful XChainAccountCreateCommit transaction is run for the source chain.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The door accounts and assets of the bridge this object correlates to.

    -
    -
    -
    - -
    XChainClaimID: string
    -

    The value of the next XChainClaimID to be created.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainBridge: XChainBridge

    The door accounts and assets of the bridge this object correlates to.

    +
    XChainClaimID: string

    The value of the next XChainClaimID to be created.

    +
    diff --git a/docs/interfaces/LedgerEntry.Check.html b/docs/interfaces/LedgerEntry.Check.html index da0474d0ca..6d14d48971 100644 --- a/docs/interfaces/LedgerEntry.Check.html +++ b/docs/interfaces/LedgerEntry.Check.html @@ -1,572 +1,48 @@ -Check | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Check

    -
    -

    A Check object describes a check, similar to a paper personal check, which +Check | xrpl

    Interface Check

    A Check object describes a check, similar to a paper personal check, which can be cashed by its destination to get money from its sender.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • Check
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The sender of the Check. Cashing the Check debits this address's balance.

    -
    -
    -
    - -
    Destination: string
    -

    The intended recipient of the Check. Only this address can cash the Check, +

    interface Check {
    Β Β Β Β Account: string;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationNode?: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β InvoiceID?: string;
    Β Β Β Β LedgerEntryType: "Check";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β SendMax: Amount;
    Β Β Β Β Sequence: number;
    Β Β Β Β SourceTag?: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Check

    Properties

    Account: string

    The sender of the Check. Cashing the Check debits this address's balance.

    +
    Destination: string

    The intended recipient of the Check. Only this address can cash the Check, using a CheckCash transaction.

    -
    -
    -
    - -
    DestinationNode?: string
    -

    A hint indicating which page of the destination's owner directory links to +

    DestinationNode?: string

    A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    An arbitrary tag to further specify the destination for this Check, such +

    DestinationTag?: number

    An arbitrary tag to further specify the destination for this Check, such as a hosted recipient at the destination address.

    -
    -
    -
    - -
    Expiration?: number
    -

    Indicates the time after which this Check is considered expired.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for Checks, so this value +

    Expiration?: number

    Indicates the time after which this Check is considered expired.

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for Checks, so this value is always 0.

    -
    -
    -
    - -
    InvoiceID?: string
    -

    Arbitrary 256-bit hash provided by the sender as a specific reason or +

    index: string
    InvoiceID?: string

    Arbitrary 256-bit hash provided by the sender as a specific reason or identifier for this Check.

    -
    -
    -
    - -
    LedgerEntryType: "Check"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the sender's owner directory links to this +

    LedgerEntryType: "Check"
    OwnerNode: string

    A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    SendMax: Amount
    -

    The maximum amount of currency this Check can debit the sender. If the +

    SendMax: Amount

    The maximum amount of currency this Check can debit the sender. If the Check is successfully cashed, the destination is credited in the same currency for up to this amount.

    -
    -
    -
    - -
    Sequence: number
    -

    The sequence number of the CheckCreate transaction that created this check.

    -
    -
    -
    - -
    SourceTag?: number
    -

    An arbitrary tag to further specify the source for this Check, such as a -hosted recipient at the sender's address.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    Sequence: number

    The sequence number of the CheckCreate transaction that created this check.

    +
    SourceTag?: number

    An arbitrary tag to further specify the source for this Check, such as a +hosted recipient at the sender's address.

    +
    diff --git a/docs/interfaces/LedgerEntry.Credential.html b/docs/interfaces/LedgerEntry.Credential.html new file mode 100644 index 0000000000..c507638e8f --- /dev/null +++ b/docs/interfaces/LedgerEntry.Credential.html @@ -0,0 +1,35 @@ +Credential | xrpl

    Interface Credential

    A Credential object describes a credential, similar to a passport, which is an issuable identity verifier +that can be used as a prerequisite for other transactions

    +
    interface Credential {
    Β Β Β Β CredentialType: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Flags: number | CredentialFlags;
    Β Β Β Β index: string;
    Β Β Β Β Issuer: string;
    Β Β Β Β IssuerNode: string;
    Β Β Β Β LedgerEntryType: "Credential";
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β Subject: string;
    Β Β Β Β SubjectNode: string;
    Β Β Β Β URI?: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Credential

    Properties

    CredentialType: string

    A hex-encoded value to identify the type of credential from the issuer.

    +
    Expiration?: number

    Credential expiration.

    +
    Flags: number | CredentialFlags

    A bit-map of boolean flags

    +
    index: string
    Issuer: string

    The issuer of the credential.

    +
    IssuerNode: string

    A hint indicating which page of the issuer's owner directory links to this object, +in case the directory consists of multiple pages.

    +
    LedgerEntryType: "Credential"
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this +object.

    +
    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently +modified this object.

    +
    Subject: string

    The account that the credential is for.

    +
    SubjectNode: string

    A hint indicating which page of the subject's owner directory links to this object, +in case the directory consists of multiple pages.

    +
    URI?: string

    Additional data about the credential (such as a link to the VC document).

    +
    diff --git a/docs/interfaces/LedgerEntry.DID.html b/docs/interfaces/LedgerEntry.DID.html index c8ad91364a..1916f3614e 100644 --- a/docs/interfaces/LedgerEntry.DID.html +++ b/docs/interfaces/LedgerEntry.DID.html @@ -1,490 +1,21 @@ -DID | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DID

    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • DID
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -
    - -
    DIDDocument: string
    -
    - -
    Data: string
    -
    - -
    Flags: 0
    -
    - -
    LedgerEntryType: "DID"
    -
    - -
    OwnerNode: string
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +DID | xrpl

    Interface DID

    interface DID {
    Β Β Β Β Account: string;
    Β Β Β Β Data: string;
    Β Β Β Β DIDDocument: string;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "DID";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β URI: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • DID

    Properties

    Account: string
    Data: string
    DIDDocument: string
    Flags: 0
    index: string
    LedgerEntryType: "DID"
    OwnerNode: string
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    URI: string
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    URI: string
    diff --git a/docs/interfaces/LedgerEntry.DepositPreauth.html b/docs/interfaces/LedgerEntry.DepositPreauth.html index b4095b1835..1bef237d38 100644 --- a/docs/interfaces/LedgerEntry.DepositPreauth.html +++ b/docs/interfaces/LedgerEntry.DepositPreauth.html @@ -1,495 +1,29 @@ -DepositPreauth | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DepositPreauth

    -
    -

    A DepositPreauth object tracks a preauthorization from one account to +DepositPreauth | xrpl

    Interface DepositPreauth

    A DepositPreauth object tracks a preauthorization from one account to another. DepositPreauth transactions create these objects.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • DepositPreauth
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The account that granted the preauthorization.

    -
    -
    -
    - -
    Authorize: string
    -

    The account that received the preauthorization.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for DepositPreauth +

    interface DepositPreauth {
    Β Β Β Β Account: string;
    Β Β Β Β Authorize?: string;
    Β Β Β Β AuthorizeCredentials?: AuthorizeCredential[];
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "DepositPreauth";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • DepositPreauth

    Properties

    Account: string

    The account that granted the preauthorization.

    +
    Authorize?: string

    The account that received the preauthorization.

    +
    AuthorizeCredentials?: AuthorizeCredential[]

    The credential(s) that received the preauthorization.

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for DepositPreauth objects, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "DepositPreauth"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the sender's owner directory links to this +

    index: string
    LedgerEntryType: "DepositPreauth"
    OwnerNode: string

    A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.DirectoryNode.html b/docs/interfaces/LedgerEntry.DirectoryNode.html index 5dc1e95e81..6d12fbdddb 100644 --- a/docs/interfaces/LedgerEntry.DirectoryNode.html +++ b/docs/interfaces/LedgerEntry.DirectoryNode.html @@ -1,556 +1,44 @@ -DirectoryNode | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface DirectoryNode

    -
    -

    The DirectoryNode object type provides a list of links to other objects in -the ledger's state tree.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • MissingPreviousTxnID -
        -
      • DirectoryNode
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Flags: number
    -

    A bit-map of boolean flags enabled for this directory. Currently, the +DirectoryNode | xrpl

    Interface DirectoryNode

    The DirectoryNode object type provides a list of links to other objects in +the ledger's state tree.

    +
    interface DirectoryNode {
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β Indexes: string[];
    Β Β Β Β IndexNext?: number;
    Β Β Β Β IndexPrevious?: number;
    Β Β Β Β LedgerEntryType: "DirectoryNode";
    Β Β Β Β Owner?: string;
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    Β Β Β Β RootIndex: string;
    Β Β Β Β TakerGetsCurrency?: string;
    Β Β Β Β TakerGetsIssuer?: string;
    Β Β Β Β TakerPaysCurrency?: string;
    Β Β Β Β TakerPaysIssuer?: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasOptionalPreviousTxnID
      • DirectoryNode

    Properties

    Flags: number

    A bit-map of boolean flags enabled for this directory. Currently, the protocol defines no flags for DirectoryNode objects.

    -
    -
    -
    - -
    IndexNext?: number
    -

    If this Directory consists of multiple pages, this ID links to the next +

    index: string
    Indexes: string[]

    The contents of this Directory: an array of IDs of other objects.

    +
    IndexNext?: number

    If this Directory consists of multiple pages, this ID links to the next object in the chain, wrapping around at the end.

    -
    -
    -
    - -
    IndexPrevious?: number
    -

    If this Directory consists of multiple pages, this ID links to the +

    IndexPrevious?: number

    If this Directory consists of multiple pages, this ID links to the previous object in the chain, wrapping around at the beginning.

    -
    -
    -
    - -
    Indexes: string[]
    -

    The contents of this Directory: an array of IDs of other objects.

    -
    -
    -
    - -
    LedgerEntryType: "DirectoryNode"
    -
    - -
    Owner?: string
    -

    The address of the account that owns the objects in this directory.

    -
    -
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    RootIndex: string
    -

    The ID of root object for this directory.

    -
    -
    -
    - -
    TakerGetsCurrency?: string
    -

    The currency code of the TakerGets amount from the offers in this +

    LedgerEntryType: "DirectoryNode"
    Owner?: string

    The address of the account that owns the objects in this directory.

    +
    PreviousTxnID?: string

    The identifying hash of the transaction that most recently modified this +object. This field was added in the fixPreviousTxnID amendment, so it +may not be present in every object.

    +
    PreviousTxnLgrSeq?: number

    The index of the ledger that contains the transaction that most recently +modified this object. This field was added in the fixPreviousTxnID +amendment, so it may not be present in every object.

    +
    RootIndex: string

    The ID of root object for this directory.

    +
    TakerGetsCurrency?: string

    The currency code of the TakerGets amount from the offers in this directory.

    -
    -
    -
    - -
    TakerGetsIssuer?: string
    -

    The issuer of the TakerGets amount from the offers in this directory.

    -
    -
    -
    - -
    TakerPaysCurrency?: string
    -

    The currency code of the TakerPays amount from the offers in this +

    TakerGetsIssuer?: string

    The issuer of the TakerGets amount from the offers in this directory.

    +
    TakerPaysCurrency?: string

    The currency code of the TakerPays amount from the offers in this directory.

    -
    -
    -
    - -
    TakerPaysIssuer?: string
    -

    The issuer of the TakerPays amount from the offers in this directory.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    TakerPaysIssuer?: string

    The issuer of the TakerPays amount from the offers in this directory.

    +
    diff --git a/docs/interfaces/LedgerEntry.Escrow.html b/docs/interfaces/LedgerEntry.Escrow.html index 616e58e2b8..68d40a64d5 100644 --- a/docs/interfaces/LedgerEntry.Escrow.html +++ b/docs/interfaces/LedgerEntry.Escrow.html @@ -1,574 +1,50 @@ -Escrow | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Escrow

    -
    -

    The Escrow object type represents a held payment of XRP waiting to be +Escrow | xrpl

    Interface Escrow

    The Escrow object type represents a held payment of XRP waiting to be executed or canceled.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • Escrow
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The address of the owner (sender) of this held payment. This is the +

    interface Escrow {
    Β Β Β Β Account: string;
    Β Β Β Β Amount: string;
    Β Β Β Β CancelAfter?: number;
    Β Β Β Β Condition?: string;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationNode?: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β FinishAfter?: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Escrow";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β SourceTag?: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Escrow

    Properties

    Account: string

    The address of the owner (sender) of this held payment. This is the account that provided the XRP, and gets it back if the held payment is canceled.

    -
    -
    -
    - -
    Amount: string
    -

    The amount of XRP, in drops, to be delivered by the held payment.

    -
    -
    -
    - -
    CancelAfter?: number
    -

    The time after which this Escrow is considered expired.

    -
    -
    -
    - -
    Condition?: string
    -

    A PREIMAGE-SHA-256 crypto-condition, as hexadecimal. If present, the +

    Amount: string

    The amount of XRP, in drops, to be delivered by the held payment.

    +
    CancelAfter?: number

    The time after which this Escrow is considered expired.

    +
    Condition?: string

    A PREIMAGE-SHA-256 crypto-condition, as hexadecimal. If present, the EscrowFinish transaction must contain a fulfillment that satisfies this condition.

    -
    -
    -
    - -
    Destination: string
    -

    The destination address where the XRP is paid if the held payment is +

    Destination: string

    The destination address where the XRP is paid if the held payment is successful.

    -
    -
    -
    - -
    DestinationNode?: string
    -

    A hint indicating which page of the destination's owner directory links to +

    DestinationNode?: string

    A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    An arbitrary tag to further specify the destination for this held payment, +

    DestinationTag?: number

    An arbitrary tag to further specify the destination for this held payment, such as a hosted recipient at the destination address.

    -
    -
    -
    - -
    FinishAfter?: number
    -

    The time, in seconds, since the Ripple Epoch, after which this held payment +

    FinishAfter?: number

    The time, in seconds, since the Ripple Epoch, after which this held payment can be finished. Any EscrowFinish transaction before this time fails.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean flags. No flags are defined for the Escrow type, so +

    Flags: number

    A bit-map of boolean flags. No flags are defined for the Escrow type, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "Escrow"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the owner directory links to this object, +

    index: string
    LedgerEntryType: "Escrow"
    OwnerNode: string

    A hint indicating which page of the owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    SourceTag?: number
    -

    An arbitrary tag to further specify the source for this held payment, such -as a hosted recipient at the owner's address.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    SourceTag?: number

    An arbitrary tag to further specify the source for this held payment, such +as a hosted recipient at the owner's address.

    +
    diff --git a/docs/interfaces/LedgerEntry.FeeSettings.html b/docs/interfaces/LedgerEntry.FeeSettings.html index d31552f027..48553c95b1 100644 --- a/docs/interfaces/LedgerEntry.FeeSettings.html +++ b/docs/interfaces/LedgerEntry.FeeSettings.html @@ -1,460 +1,26 @@ -FeeSettings | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FeeSettings

    -
    -

    The FeeSettings object type contains the current base transaction cost and +FeeSettings | xrpl

    Interface FeeSettings

    The FeeSettings object type contains the current base transaction cost and reserve amounts as determined by fee voting.

    The fields will be based on the status of the XRPFees amendment.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • FeeSettings
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags for this object. No flags are defined for this type.

    -
    -
    -
    - -
    LedgerEntryType: "FeeSettings"
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface FeeSettings {
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "FeeSettings";
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    }

    Properties

    Flags: 0

    A bit-map of boolean flags for this object. No flags are defined for this type.

    +
    index: string
    LedgerEntryType: "FeeSettings"
    PreviousTxnID?: string

    The identifying hash of the transaction that most recently modified this +object. This field was added in the fixPreviousTxnID amendment, so it +may not be present in every object.

    +
    PreviousTxnLgrSeq?: number

    The index of the ledger that contains the transaction that most recently +modified this object. This field was added in the fixPreviousTxnID +amendment, so it may not be present in every object.

    +
    diff --git a/docs/interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html b/docs/interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html index 6f409c30e3..9c547f699b 100644 --- a/docs/interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html +++ b/docs/interfaces/LedgerEntry.FeeSettingsPostAmendmentFields.html @@ -1,436 +1,13 @@ -FeeSettingsPostAmendmentFields | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FeeSettingsPostAmendmentFields

    -
    -

    Hierarchy

    -
      -
    • FeeSettingsPostAmendmentFields
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    BaseFeeDrops: string
    -

    The transaction cost of the "reference transaction" in drops of XRP as hexadecimal.

    -
    -
    -
    - -
    ReserveBaseDrops: string
    -

    The base reserve for an account in the XRP Ledger, as drops of XRP.

    -
    -
    -
    - -
    ReserveIncrementDrops: string
    -

    The incremental owner reserve for owning objects, as drops of XRP.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +FeeSettingsPostAmendmentFields | xrpl

    Interface FeeSettingsPostAmendmentFields

    interface FeeSettingsPostAmendmentFields {
    Β Β Β Β BaseFeeDrops: string;
    Β Β Β Β ReserveBaseDrops: string;
    Β Β Β Β ReserveIncrementDrops: string;
    }

    Properties

    BaseFeeDrops: string

    The transaction cost of the "reference transaction" in drops of XRP as hexadecimal.

    +
    ReserveBaseDrops: string

    The base reserve for an account in the XRP Ledger, as drops of XRP.

    +
    ReserveIncrementDrops: string

    The incremental owner reserve for owning objects, as drops of XRP.

    +
    diff --git a/docs/interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html b/docs/interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html index ed57665e9b..0d31b038b9 100644 --- a/docs/interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html +++ b/docs/interfaces/LedgerEntry.FeeSettingsPreAmendmentFields.html @@ -1,446 +1,15 @@ -FeeSettingsPreAmendmentFields | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface FeeSettingsPreAmendmentFields

    -
    -

    Hierarchy

    -
      -
    • FeeSettingsPreAmendmentFields
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    BaseFee: string
    -

    The transaction cost of the "reference transaction" in drops of XRP as hexadecimal.

    -
    -
    -
    - -
    ReferenceFeeUnits: number
    -

    The BaseFee translated into "fee units".

    -
    -
    -
    - -
    ReserveBase: number
    -

    The base reserve for an account in the XRP Ledger, as drops of XRP.

    -
    -
    -
    - -
    ReserveIncrement: number
    -

    The incremental owner reserve for owning objects, as drops of XRP.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +FeeSettingsPreAmendmentFields | xrpl

    Interface FeeSettingsPreAmendmentFields

    interface FeeSettingsPreAmendmentFields {
    Β Β Β Β BaseFee: string;
    Β Β Β Β ReferenceFeeUnits: number;
    Β Β Β Β ReserveBase: number;
    Β Β Β Β ReserveIncrement: number;
    }

    Properties

    BaseFee: string

    The transaction cost of the "reference transaction" in drops of XRP as hexadecimal.

    +
    ReferenceFeeUnits: number

    The BaseFee translated into "fee units".

    +
    ReserveBase: number

    The base reserve for an account in the XRP Ledger, as drops of XRP.

    +
    ReserveIncrement: number

    The incremental owner reserve for owning objects, as drops of XRP.

    +
    diff --git a/docs/interfaces/LedgerEntry.Ledger.html b/docs/interfaces/LedgerEntry.Ledger.html index ad7fd4e808..a914d874c4 100644 --- a/docs/interfaces/LedgerEntry.Ledger.html +++ b/docs/interfaces/LedgerEntry.Ledger.html @@ -1,562 +1,50 @@ -Ledger | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Ledger

    -
    -

    A ledger is a block of transactions and shared state data. It has a unique +Ledger | xrpl

    Interface Ledger

    A ledger is a block of transactions and shared state data. It has a unique header that describes its contents using cryptographic hashes.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • Ledger
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    accountState?: LedgerEntry[]
    -

    All the state information in this ledger. Admin only.

    -
    -
    -
    - -
    account_hash: string
    -

    The SHA-512Half of this ledger's state tree information.

    -
    -
    -
    - -
    close_flags: number
    -

    A bit-map of flags relating to the closing of this ledger.

    -
    -
    -
    - -
    close_time: number
    -

    The approximate time this ledger version closed, as the number of seconds +

    interface Ledger {
    Β Β Β Β account_hash: string;
    Β Β Β Β accountState?: LedgerEntry.LedgerEntry[];
    Β Β Β Β close_flags: number;
    Β Β Β Β close_time: number;
    Β Β Β Β close_time_human: string;
    Β Β Β Β close_time_iso: string;
    Β Β Β Β close_time_resolution: number;
    Β Β Β Β closed: boolean;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β parent_close_time: number;
    Β Β Β Β parent_hash: string;
    Β Β Β Β total_coins: string;
    Β Β Β Β transaction_hash: string;
    Β Β Β Β transactions?: (
    Β Β Β Β Β Β Β Β Transaction & {
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β metaData?: TransactionMetadata | undefined;
    Β Β Β Β Β Β Β Β }
    Β Β Β Β )[];
    }

    Hierarchy

    • BaseLedger
      • Ledger

    Properties

    account_hash: string

    The SHA-512Half of this ledger's state tree information.

    +
    accountState?: LedgerEntry.LedgerEntry[]

    All the state information in this ledger. Admin only.

    +
    close_flags: number

    A bit-map of flags relating to the closing of this ledger.

    +
    close_time: number

    The approximate time this ledger version closed, as the number of seconds since the Ripple Epoch of 2000-01-01 00:00:00. This value is rounded based on the close_time_resolution.

    -
    -
    -
    - -
    close_time_human: string
    -

    The approximate time this ledger was closed, in human-readable format. +

    close_time_human: string

    The approximate time this ledger was closed, in human-readable format. Always uses the UTC time zone.

    -
    -
    -
    - -
    close_time_resolution: number
    -

    An integer in the range [2,120] indicating the maximum number of seconds +

    close_time_iso: string

    The approximate time this ledger was closed, in date time string format. +Always uses the UTC time zone.

    +
    close_time_resolution: number

    An integer in the range [2,120] indicating the maximum number of seconds by which the close_time could be rounded.

    -
    -
    -
    - -
    closed: boolean
    -

    Whether or not this ledger has been closed.

    -
    -
    -
    - -
    ledger_hash: string
    -

    The SHA-512Half of this ledger version. This serves as a unique identifier +

    closed: boolean

    Whether or not this ledger has been closed.

    +
    ledger_hash: string

    The SHA-512Half of this ledger version. This serves as a unique identifier for this ledger and all its contents.

    -
    -
    -
    - -
    ledger_index: string
    -

    The ledger index of the ledger. Some API methods display this as a quoted -integer; some display it as a native JSON number.

    -
    -
    -
    - -
    parent_close_time: number
    -

    The approximate time at which the previous ledger was closed.

    -
    -
    -
    - -
    parent_hash: string
    -

    Unique identifying hash of the ledger that came immediately before this +

    ledger_index: number

    The ledger index of the ledger. Represented as a number.

    +
    parent_close_time: number

    The approximate time at which the previous ledger was closed.

    +
    parent_hash: string

    Unique identifying hash of the ledger that came immediately before this one.

    -
    -
    -
    - -
    total_coins: string
    -

    Total number of XRP drops in the network, as a quoted integer.

    -
    -
    -
    - -
    transaction_hash: string
    -

    Hash of the transaction information included in this ledger, as hex.

    -
    -
    -
    - -
    transactions?: Object[]
    -

    Transactions applied in this ledger version. By default, members are the -transactions' identifying Hash strings. If the request specified expand as +

    total_coins: string

    Total number of XRP drops in the network, as a quoted integer.

    +
    transaction_hash: string

    Hash of the transaction information included in this ledger, as hex.

    +
    transactions?: (
    Β Β Β Β Transaction & {
    Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β metaData?: TransactionMetadata | undefined;
    Β Β Β Β }
    )[]

    Transactions applied in this ledger version. By default, members are the +transactions' identifying Hash strings. If the request specified expand as true, members are full representations of the transactions instead, in either JSON or binary depending on whether the request specified binary as true.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.LedgerHashes.html b/docs/interfaces/LedgerEntry.LedgerHashes.html index 1da66816bd..7370383ba2 100644 --- a/docs/interfaces/LedgerEntry.LedgerHashes.html +++ b/docs/interfaces/LedgerEntry.LedgerHashes.html @@ -1,484 +1,20 @@ -LedgerHashes | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerHashes

    -
    -

    The LedgerHashes objects exist to make it possible to look up a previous -ledger's hash with only the current ledger version and at most one lookup of +LedgerHashes | xrpl

    Interface LedgerHashes

    The LedgerHashes objects exist to make it possible to look up a previous +ledger's hash with only the current ledger version and at most one lookup of a previous ledger version.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • MissingPreviousTxnID -
        -
      • LedgerHashes
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Flags: number
    -

    A bit-map of boolean flags for this object. No flags are defined for this +

    interface LedgerHashes {
    Β Β Β Β Flags: number;
    Β Β Β Β Hashes: string[];
    Β Β Β Β index: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LedgerEntryType: "LedgerHashes";
    }

    Hierarchy

    • BaseLedgerEntry
      • LedgerHashes

    Properties

    Flags: number

    A bit-map of boolean flags for this object. No flags are defined for this type.

    -
    -
    -
    - -
    Hashes: string[]
    -

    An array of up to 256 ledger hashes. The contents depend on which sub-type +

    Hashes: string[]

    An array of up to 256 ledger hashes. The contents depend on which sub-type of LedgerHashes object this is.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    The Ledger Index of the last entry in this object's Hashes array.

    -
    -
    -
    - -
    LedgerEntryType: "LedgerHashes"
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    index: string
    LastLedgerSequence?: number

    The Ledger Index of the last entry in this object's Hashes array.

    +
    LedgerEntryType: "LedgerHashes"
    diff --git a/docs/interfaces/LedgerEntry.LedgerV1.html b/docs/interfaces/LedgerEntry.LedgerV1.html new file mode 100644 index 0000000000..44dfa9e44a --- /dev/null +++ b/docs/interfaces/LedgerEntry.LedgerV1.html @@ -0,0 +1,52 @@ +LedgerV1 | xrpl

    Interface LedgerV1

    A ledger is a block of transactions and shared state data. It has a unique +header that describes its contents using cryptographic hashes. This is used +in api_version 1.

    +
    interface LedgerV1 {
    Β Β Β Β account_hash: string;
    Β Β Β Β accountState?: LedgerEntry.LedgerEntry[];
    Β Β Β Β close_flags: number;
    Β Β Β Β close_time: number;
    Β Β Β Β close_time_human: string;
    Β Β Β Β close_time_iso: string;
    Β Β Β Β close_time_resolution: number;
    Β Β Β Β closed: boolean;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: string;
    Β Β Β Β parent_close_time: number;
    Β Β Β Β parent_hash: string;
    Β Β Β Β total_coins: string;
    Β Β Β Β transaction_hash: string;
    Β Β Β Β transactions?: (
    Β Β Β Β Β Β Β Β Transaction & {
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β metaData?: TransactionMetadata | undefined;
    Β Β Β Β Β Β Β Β }
    Β Β Β Β )[];
    }

    Hierarchy

    • BaseLedger
      • LedgerV1

    Properties

    account_hash: string

    The SHA-512Half of this ledger's state tree information.

    +
    accountState?: LedgerEntry.LedgerEntry[]

    All the state information in this ledger. Admin only.

    +
    close_flags: number

    A bit-map of flags relating to the closing of this ledger.

    +
    close_time: number

    The approximate time this ledger version closed, as the number of seconds +since the Ripple Epoch of 2000-01-01 00:00:00. This value is rounded based +on the close_time_resolution.

    +
    close_time_human: string

    The approximate time this ledger was closed, in human-readable format. +Always uses the UTC time zone.

    +
    close_time_iso: string

    The approximate time this ledger was closed, in date time string format. +Always uses the UTC time zone.

    +
    close_time_resolution: number

    An integer in the range [2,120] indicating the maximum number of seconds +by which the close_time could be rounded.

    +
    closed: boolean

    Whether or not this ledger has been closed.

    +
    ledger_hash: string

    The SHA-512Half of this ledger version. This serves as a unique identifier +for this ledger and all its contents.

    +
    ledger_index: string

    The ledger index of the ledger. Some API methods display this as a quoted +integer; some display it as a number.

    +
    parent_close_time: number

    The approximate time at which the previous ledger was closed.

    +
    parent_hash: string

    Unique identifying hash of the ledger that came immediately before this +one.

    +
    total_coins: string

    Total number of XRP drops in the network, as a quoted integer.

    +
    transaction_hash: string

    Hash of the transaction information included in this ledger, as hex.

    +
    transactions?: (
    Β Β Β Β Transaction & {
    Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β metaData?: TransactionMetadata | undefined;
    Β Β Β Β }
    )[]

    Transactions applied in this ledger version. By default, members are the +transactions' identifying Hash strings. If the request specified expand as +true, members are full representations of the transactions instead, in +either JSON or binary depending on whether the request specified binary +as true.

    +
    diff --git a/docs/interfaces/LedgerEntry.MPToken.html b/docs/interfaces/LedgerEntry.MPToken.html new file mode 100644 index 0000000000..faa437a21e --- /dev/null +++ b/docs/interfaces/LedgerEntry.MPToken.html @@ -0,0 +1,19 @@ +MPToken | xrpl

    Interface MPToken

    interface MPToken {
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "MPToken";
    Β Β Β Β MPTAmount?: MPTAmount;
    Β Β Β Β MPTokenIssuanceID: string;
    Β Β Β Β OwnerNode?: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • MPToken

    Properties

    Flags: number
    index: string
    LedgerEntryType: "MPToken"
    MPTAmount?: MPTAmount
    MPTokenIssuanceID: string
    OwnerNode?: string
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this +object.

    +
    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently +modified this object.

    +
    diff --git a/docs/interfaces/LedgerEntry.MPTokenIssuance.html b/docs/interfaces/LedgerEntry.MPTokenIssuance.html new file mode 100644 index 0000000000..2454287a83 --- /dev/null +++ b/docs/interfaces/LedgerEntry.MPTokenIssuance.html @@ -0,0 +1,23 @@ +MPTokenIssuance | xrpl

    Interface MPTokenIssuance

    interface MPTokenIssuance {
    Β Β Β Β AssetScale?: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β Issuer: string;
    Β Β Β Β LedgerEntryType: "MPTokenIssuance";
    Β Β Β Β MaximumAmount?: string;
    Β Β Β Β MPTokenMetadata?: string;
    Β Β Β Β OutstandingAmount: string;
    Β Β Β Β OwnerNode?: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β TransferFee?: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • MPTokenIssuance

    Properties

    AssetScale?: number
    Flags: number
    index: string
    Issuer: string
    LedgerEntryType: "MPTokenIssuance"
    MaximumAmount?: string
    MPTokenMetadata?: string
    OutstandingAmount: string
    OwnerNode?: string
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this +object.

    +
    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently +modified this object.

    +
    TransferFee?: number
    diff --git a/docs/interfaces/LedgerEntry.Majority.html b/docs/interfaces/LedgerEntry.Majority.html index 0fad4bd33d..dfbd59addb 100644 --- a/docs/interfaces/LedgerEntry.Majority.html +++ b/docs/interfaces/LedgerEntry.Majority.html @@ -1,427 +1,11 @@ -Majority | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Majority

    -
    -

    Hierarchy

    -
      -
    • Majority
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    Majority: {
    Β Β Β Β Amendment: string;
    Β Β Β Β CloseTime: number;
    }
    -
    -

    Type declaration

    -
    diff --git a/docs/interfaces/LedgerEntry.NFToken.html b/docs/interfaces/LedgerEntry.NFToken.html index dc48c8cb78..26f89727b1 100644 --- a/docs/interfaces/LedgerEntry.NFToken.html +++ b/docs/interfaces/LedgerEntry.NFToken.html @@ -1,426 +1,8 @@ -NFToken | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFToken

    -
    -

    Hierarchy

    -
      -
    • NFToken
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    NFToken: {
    Β Β Β Β Flags: number;
    Β Β Β Β Issuer: string;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β NFTokenTaxon: number;
    Β Β Β Β URI?: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Flags: number
    • -
    • -
      Issuer: string
    • -
    • -
      NFTokenID: string
    • -
    • -
      NFTokenTaxon: number
    • -
    • -
      Optional URI?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NFToken | xrpl

    Interface NFToken

    interface NFToken {
    Β Β Β Β NFToken: {
    Β Β Β Β Β Β Β Β Flags: number;
    Β Β Β Β Β Β Β Β Issuer: string;
    Β Β Β Β Β Β Β Β NFTokenID: string;
    Β Β Β Β Β Β Β Β NFTokenTaxon: number;
    Β Β Β Β Β Β Β Β URI?: string;
    Β Β Β Β };
    }

    Properties

    Properties

    NFToken: {
    Β Β Β Β Flags: number;
    Β Β Β Β Issuer: string;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β NFTokenTaxon: number;
    Β Β Β Β URI?: string;
    }
    diff --git a/docs/interfaces/LedgerEntry.NFTokenOffer.html b/docs/interfaces/LedgerEntry.NFTokenOffer.html index 8a33c98f04..8a4bd6287c 100644 --- a/docs/interfaces/LedgerEntry.NFTokenOffer.html +++ b/docs/interfaces/LedgerEntry.NFTokenOffer.html @@ -1,497 +1,22 @@ -NFTokenOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenOffer

    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • NFTokenOffer
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Amount: Amount
    -
    - -
    Destination?: string
    -
    - -
    Expiration: number
    -
    - -
    Flags: number
    -
    - -
    LedgerEntryType: "NFTokenOffer"
    -
    - -
    NFTokenOfferNode?: string
    -
    - -
    Owner: string
    -
    - -
    OwnerNode?: string
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +NFTokenOffer | xrpl

    Interface NFTokenOffer

    interface NFTokenOffer {
    Β Β Β Β Amount: Amount;
    Β Β Β Β Destination?: string;
    Β Β Β Β Expiration: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "NFTokenOffer";
    Β Β Β Β NFTokenOfferNode?: string;
    Β Β Β Β Owner: string;
    Β Β Β Β OwnerNode?: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • NFTokenOffer

    Properties

    Amount: Amount
    Destination?: string
    Expiration: number
    Flags: number
    index: string
    LedgerEntryType: "NFTokenOffer"
    NFTokenOfferNode?: string
    Owner: string
    OwnerNode?: string
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.NFTokenPage.html b/docs/interfaces/LedgerEntry.NFTokenPage.html index f8b59829f6..f234636eed 100644 --- a/docs/interfaces/LedgerEntry.NFTokenPage.html +++ b/docs/interfaces/LedgerEntry.NFTokenPage.html @@ -1,469 +1,18 @@ -NFTokenPage | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenPage

    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • NFTokenPage
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    LedgerEntryType: "NFTokenPage"
    -
    - -
    NFTokens: LedgerEntry.NFToken[]
    -
    - -
    NextPageMin?: string
    -
    - -
    PreviousPageMin?: string
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +NFTokenPage | xrpl

    Interface NFTokenPage

    interface NFTokenPage {
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "NFTokenPage";
    Β Β Β Β NextPageMin?: string;
    Β Β Β Β NFTokens: LedgerEntry.NFToken[];
    Β Β Β Β PreviousPageMin?: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • NFTokenPage

    Properties

    index: string
    LedgerEntryType: "NFTokenPage"
    NextPageMin?: string
    NFTokens: LedgerEntry.NFToken[]
    PreviousPageMin?: string
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.NegativeUNL.html b/docs/interfaces/LedgerEntry.NegativeUNL.html index 51f6d3d50a..d035908a05 100644 --- a/docs/interfaces/LedgerEntry.NegativeUNL.html +++ b/docs/interfaces/LedgerEntry.NegativeUNL.html @@ -1,490 +1,27 @@ -NegativeUNL | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NegativeUNL

    -
    -

    The NegativeUNL object type contains the current status of the Negative UNL, +NegativeUNL | xrpl

    Interface NegativeUNL

    The NegativeUNL object type contains the current status of the Negative UNL, a list of trusted validators currently believed to be offline.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • MissingPreviousTxnID -
        -
      • NegativeUNL
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    DisabledValidators?: {
    Β Β Β Β FirstLedgerSequence: number;
    Β Β Β Β PublicKey: string;
    }[]
    -

    A list of trusted validators that are currently disabled.

    -
    -
    -

    Type declaration

    -
      -
    • -
      FirstLedgerSequence: number
    • -
    • -
      PublicKey: string
    -
    -
    - -
    LedgerEntryType: "NegativeUNL"
    -
    - -
    PreviousTxnID: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: never
    -

    This field is missing on this object but is present on most other returned objects.

    -
    -
    -
    - -
    ValidatorToDisable?: string
    -

    The public key of a trusted validator that is scheduled to be disabled in +

    interface NegativeUNL {
    Β Β Β Β DisabledValidators?: { FirstLedgerSequence: number; PublicKey: string }[];
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "NegativeUNL";
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    Β Β Β Β ValidatorToDisable?: string;
    Β Β Β Β ValidatorToReEnable?: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasOptionalPreviousTxnID
      • NegativeUNL

    Properties

    DisabledValidators?: { FirstLedgerSequence: number; PublicKey: string }[]

    A list of trusted validators that are currently disabled.

    +
    index: string
    LedgerEntryType: "NegativeUNL"
    PreviousTxnID?: string

    The identifying hash of the transaction that most recently modified this +object. This field was added in the fixPreviousTxnID amendment, so it +may not be present in every object.

    +
    PreviousTxnLgrSeq?: number

    The index of the ledger that contains the transaction that most recently +modified this object. This field was added in the fixPreviousTxnID +amendment, so it may not be present in every object.

    +
    ValidatorToDisable?: string

    The public key of a trusted validator that is scheduled to be disabled in the next flag ledger.

    -
    -
    -
    - -
    ValidatorToReEnable?: string
    -

    The public key of a trusted validator in the Negative UNL that is +

    ValidatorToReEnable?: string

    The public key of a trusted validator in the Negative UNL that is scheduled to be re-enabled in the next flag ledger.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.Offer.html b/docs/interfaces/LedgerEntry.Offer.html index 2931ca4f8e..c50e712ee8 100644 --- a/docs/interfaces/LedgerEntry.Offer.html +++ b/docs/interfaces/LedgerEntry.Offer.html @@ -1,544 +1,37 @@ -Offer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Offer

    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The address of the account that placed this Offer.

    -
    -
    -
    - -
    BookDirectory: string
    -

    The ID of the Offer Directory that links to this Offer.

    -
    -
    -
    - -
    BookNode: string
    -

    A hint indicating which page of the Offer Directory links to this object, +Offer | xrpl

    Interface Offer

    interface Offer {
    Β Β Β Β Account: string;
    Β Β Β Β BookDirectory: string;
    Β Β Β Β BookNode: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Offer";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β Sequence: number;
    Β Β Β Β TakerGets: Amount;
    Β Β Β Β TakerPays: Amount;
    }

    Hierarchy (View Summary)

    • BaseLedgerEntry
    • HasPreviousTxnID

    Properties

    Account: string

    The address of the account that placed this Offer.

    +
    BookDirectory: string

    The ID of the Offer Directory that links to this Offer.

    +
    BookNode: string

    A hint indicating which page of the Offer Directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    Expiration?: number
    -

    The time this Offer expires, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean flags enabled for this Offer.

    -
    -
    -
    - -
    LedgerEntryType: "Offer"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the Owner Directory links to this object, +

    Expiration?: number

    The time this Offer expires, in seconds since the Ripple Epoch.

    +
    Flags: number

    A bit-map of boolean flags enabled for this Offer.

    +
    index: string
    LedgerEntryType: "Offer"
    OwnerNode: string

    A hint indicating which page of the Owner Directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    Sequence: number
    -

    The Sequence value of the OfferCreate transaction that created this Offer +

    Sequence: number

    The Sequence value of the OfferCreate transaction that created this Offer object. Used in combination with the Account to identify this Offer.

    -
    -
    -
    - -
    TakerGets: Amount
    -

    The remaining amount and type of currency being provided by the Offer +

    TakerGets: Amount

    The remaining amount and type of currency being provided by the Offer creator.

    -
    -
    -
    - -
    TakerPays: Amount
    -

    The remaining amount and type of currency requested by the Offer creator.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    TakerPays: Amount

    The remaining amount and type of currency requested by the Offer creator.

    +
    diff --git a/docs/interfaces/LedgerEntry.Oracle.html b/docs/interfaces/LedgerEntry.Oracle.html new file mode 100644 index 0000000000..1d6a5a71c5 --- /dev/null +++ b/docs/interfaces/LedgerEntry.Oracle.html @@ -0,0 +1,29 @@ +Oracle | xrpl

    Interface Oracle

    The Oracle object type describes a single Price Oracle instance.

    +
    interface Oracle {
    Β Β Β Β AssetClass: string;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LastUpdateTime: number;
    Β Β Β Β LedgerEntryType: "Oracle";
    Β Β Β Β Owner: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β PriceDataSeries: PriceData[];
    Β Β Β Β Provider: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Oracle

    Properties

    AssetClass: string

    Describes the type of asset, such as "currency", "commodity", or "index".

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for the Oracle object +type, so this value is always 0.

    +
    index: string
    LastUpdateTime: number

    The time the data was last updated, represented as a unix timestamp in seconds.

    +
    LedgerEntryType: "Oracle"
    Owner: string

    The XRPL account with update and delete privileges for the oracle.

    +
    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this +object.

    +
    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently +modified this object.

    +
    PriceDataSeries: PriceData[]

    An array of up to 10 PriceData objects.

    +
    Provider: string

    The oracle provider, such as Chainlink, Band, or DIA.

    +
    diff --git a/docs/interfaces/LedgerEntry.PayChannel.html b/docs/interfaces/LedgerEntry.PayChannel.html index 82554f6190..2e33be24bf 100644 --- a/docs/interfaces/LedgerEntry.PayChannel.html +++ b/docs/interfaces/LedgerEntry.PayChannel.html @@ -1,617 +1,77 @@ -PayChannel | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PayChannel

    -
    -

    The PayChannel object type represents a payment channel. Payment channels +PayChannel | xrpl

    Interface PayChannel

    The PayChannel object type represents a payment channel. Payment channels enable small, rapid off-ledger payments of XRP that can be later reconciled with the consensus ledger. A payment channel holds a balance of XRP that can only be paid out to a specific destination address until the channel is closed.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • PayChannel
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The source address that owns this payment channel. This comes from the +

    interface PayChannel {
    Β Β Β Β Account: string;
    Β Β Β Β Amount: string;
    Β Β Β Β Balance: string;
    Β Β Β Β CancelAfter?: number;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationNode?: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "PayChannel";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β PublicKey: string;
    Β Β Β Β SettleDelay: number;
    Β Β Β Β SourceTag?: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • PayChannel

    Properties

    Account: string

    The source address that owns this payment channel. This comes from the sending address of the transaction that created the channel.

    -
    -
    -
    - -
    Amount: string
    -

    Total XRP, in drops, that has been allocated to this channel. This +

    Amount: string

    Total XRP, in drops, that has been allocated to this channel. This includes XRP that has been paid to the destination address. This is initially set by the transaction that created the channel and can be increased if the source address sends a PaymentChannelFund transaction.

    -
    -
    -
    - -
    Balance: string
    -

    Total XRP, in drops, already paid out by the channel. The difference +

    Balance: string

    Total XRP, in drops, already paid out by the channel. The difference between this value and the Amount field is how much XRP can still be paid to the destination address with PaymentChannelClaim transactions. If the channel closes, the remaining difference is returned to the source address.

    -
    -
    -
    - -
    CancelAfter?: number
    -

    The immutable expiration time for this payment channel, in seconds since +

    CancelAfter?: number

    The immutable expiration time for this payment channel, in seconds since the Ripple Epoch. This channel is expired if this value is present and -smaller than the previous ledger's close_time field. This is optionally +smaller than the previous ledger's close_time field. This is optionally set by the transaction that created the channel, and cannot be changed.

    -
    -
    -
    - -
    Destination: string
    -

    The destination address for this payment channel. While the payment +

    Destination: string

    The destination address for this payment channel. While the payment channel is open, this address is the only one that can receive XRP from the channel. This comes from the Destination field of the transaction that created the channel.

    -
    -
    -
    - -
    DestinationNode?: string
    -

    A hint indicating which page of the destination's owner directory links to +

    DestinationNode?: string

    A hint indicating which page of the destination's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    An arbitrary tag to further specify the destination for this payment +

    DestinationTag?: number

    An arbitrary tag to further specify the destination for this payment channel, such as a hosted recipient at the destination address.

    -
    -
    -
    - -
    Expiration?: number
    -

    The mutable expiration time for this payment channel, in seconds since the +

    Expiration?: number

    The mutable expiration time for this payment channel, in seconds since the Ripple Epoch. The channel is expired if this value is present and smaller -than the previous ledger's close_time field. See Setting Channel Expiration +than the previous ledger's close_time field. See Setting Channel Expiration for more details.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean flags enabled for this payment channel. Currently, +

    Flags: number

    A bit-map of boolean flags enabled for this payment channel. Currently, the protocol defines no flags for PayChannel objects.

    -
    -
    -
    - -
    LedgerEntryType: "PayChannel"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the source address's owner directory links +

    index: string
    LedgerEntryType: "PayChannel"
    OwnerNode: string

    A hint indicating which page of the source address's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    PublicKey: string
    -

    Public key, in hexadecimal, of the key pair that can be used to sign +

    PublicKey: string

    Public key, in hexadecimal, of the key pair that can be used to sign claims against this channel. This can be any valid secp256k1 or Ed25519 public key. This is set by the transaction that created the channel and must match the public key used in claims against the channel. The channel source address can also send XRP from this channel to the destination without signed claims.

    -
    -
    -
    - -
    SettleDelay: number
    -

    Number of seconds the source address must wait to close the channel if +

    SettleDelay: number

    Number of seconds the source address must wait to close the channel if it still has any XRP in it. Smaller values mean that the destination address has less time to redeem any outstanding claims after the source address requests to close the channel. Can be any value that fits in a 32-bit unsigned integer (0 to 2^32-1). This is set by the transaction that creates the channel.

    -
    -
    -
    - -
    SourceTag?: number
    -

    An arbitrary tag to further specify the source for this payment channel -useful for specifying a hosted recipient at the owner's address.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    SourceTag?: number

    An arbitrary tag to further specify the source for this payment channel +useful for specifying a hosted recipient at the owner's address.

    +
    diff --git a/docs/interfaces/LedgerEntry.RippleState.html b/docs/interfaces/LedgerEntry.RippleState.html index 5a072aaec5..2e37cfa8e5 100644 --- a/docs/interfaces/LedgerEntry.RippleState.html +++ b/docs/interfaces/LedgerEntry.RippleState.html @@ -1,566 +1,50 @@ -RippleState | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RippleState

    -
    -

    The RippleState object type connects two accounts in a single currency.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • RippleState
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - - -

    The balance of the trust line, from the perspective of the low account. A +RippleState | xrpl

    Interface RippleState

    The RippleState object type connects two accounts in a single currency.

    +
    interface RippleState {
    Β Β Β Β Balance: IssuedCurrencyAmount;
    Β Β Β Β Flags: number;
    Β Β Β Β HighLimit: IssuedCurrencyAmount;
    Β Β Β Β HighNode?: string;
    Β Β Β Β HighQualityIn?: number;
    Β Β Β Β HighQualityOut?: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "RippleState";
    Β Β Β Β LowLimit: IssuedCurrencyAmount;
    Β Β Β Β LowNode?: string;
    Β Β Β Β LowQualityIn?: number;
    Β Β Β Β LowQualityOut?: number;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • RippleState

    Properties

    The balance of the trust line, from the perspective of the low account. A negative balance indicates that the low account has issued currency to the high account. The issuer is always the neutral value ACCOUNT_ONE.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of boolean options enabled for this object.

    -
    -
    -
    - - -

    The limit that the high account has set on the trust line. The issuer is +

    Flags: number

    A bit-map of boolean options enabled for this object.

    +

    The limit that the high account has set on the trust line. The issuer is the address of the high account that set this limit.

    -
    -
    -
    - -
    HighNode?: string
    -

    A hint indicating which page of the high account's owner directory links +

    HighNode?: string

    A hint indicating which page of the high account's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    HighQualityIn?: number
    -

    The inbound quality set by the high account, as an integer in the implied +

    HighQualityIn?: number

    The inbound quality set by the high account, as an integer in the implied ratio HighQualityIn:1,000,000,000. As a special case, the value 0 is equivalent to 1 billion, or face value.

    -
    -
    -
    - -
    HighQualityOut?: number
    -

    The outbound quality set by the high account, as an integer in the implied +

    HighQualityOut?: number

    The outbound quality set by the high account, as an integer in the implied ratio HighQualityOut:1,000,000,000. As a special case, the value 0 is equivalent to 1 billion, or face value.

    -
    -
    -
    - -
    LedgerEntryType: "RippleState"
    -
    - - -

    The limit that the low account has set on the trust line. The issuer is +

    index: string
    LedgerEntryType: "RippleState"

    The limit that the low account has set on the trust line. The issuer is the address of the low account that set this limit.

    -
    -
    -
    - -
    LowNode?: string
    -

    A hint indicating which page of the low account's owner directory links to +

    LowNode?: string

    A hint indicating which page of the low account's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    LowQualityIn?: number
    -

    The inbound quality set by the low account, as an integer in the implied +

    LowQualityIn?: number

    The inbound quality set by the low account, as an integer in the implied ratio LowQualityIn:1,000,000,000. As a special case, the value 0 is equivalent to 1 billion, or face value.

    -
    -
    -
    - -
    LowQualityOut?: number
    -

    The outbound quality set by the low account, as an integer in the implied +

    LowQualityOut?: number

    The outbound quality set by the low account, as an integer in the implied ratio LowQualityOut:1,000,000,000. As a special case, the value 0 is equivalent to 1 billion, or face value.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.SignerList.html b/docs/interfaces/LedgerEntry.SignerList.html index 3e1ad9904c..51fa853c46 100644 --- a/docs/interfaces/LedgerEntry.SignerList.html +++ b/docs/interfaces/LedgerEntry.SignerList.html @@ -1,511 +1,35 @@ -SignerList | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SignerList

    -
    -

    The SignerList object type represents a list of parties that, as a group, +SignerList | xrpl

    Interface SignerList

    The SignerList object type represents a list of parties that, as a group, are authorized to sign a transaction in place of an individual account. You can create, replace, or remove a signer list using a SignerListSet transaction.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • SignerList
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Flags: number
    -

    A bit-map of Boolean flags enabled for this signer list. For more +

    interface SignerList {
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "SignerList";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β SignerEntries: SignerEntry[];
    Β Β Β Β SignerListID: number;
    Β Β Β Β SignerQuorum: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • SignerList

    Properties

    Flags: number

    A bit-map of Boolean flags enabled for this signer list. For more information, see SignerList Flags.

    -
    -
    -
    - -
    LedgerEntryType: "SignerList"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the owner directory links to this object, +

    index: string
    LedgerEntryType: "SignerList"
    OwnerNode: string

    A hint indicating which page of the owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    SignerEntries: SignerEntry[]
    -

    An array of Signer Entry objects representing the parties who are part of +

    SignerEntries: SignerEntry[]

    An array of Signer Entry objects representing the parties who are part of this signer list.

    -
    -
    -
    - -
    SignerListID: number
    -

    An ID for this signer list. Currently always set to 0. If a future +

    SignerListID: number

    An ID for this signer list. Currently always set to 0. If a future amendment allows multiple signer lists for an account, this may change.

    -
    -
    -
    - -
    SignerQuorum: number
    -

    A target number for signer weights. To produce a valid signature for the +

    SignerQuorum: number

    A target number for signer weights. To produce a valid signature for the owner of this SignerList, the signers must provide valid signatures whose weights sum to this value or more.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntry.Ticket.html b/docs/interfaces/LedgerEntry.Ticket.html index 25b629b914..b065d02a8d 100644 --- a/docs/interfaces/LedgerEntry.Ticket.html +++ b/docs/interfaces/LedgerEntry.Ticket.html @@ -1,496 +1,28 @@ -Ticket | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Ticket

    -
    -

    The Ticket object type represents a Ticket, which tracks an account sequence +Ticket | xrpl

    Interface Ticket

    The Ticket object type represents a Ticket, which tracks an account sequence number that has been set aside for future use. You can create new tickets with a TicketCreate transaction.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • Ticket
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The account that owns this Ticket.

    -
    -
    -
    - -
    Flags: number
    -

    A bit-map of Boolean flags enabled for this Ticket. Currently, there are +

    interface Ticket {
    Β Β Β Β Account: string;
    Β Β Β Β Flags: number;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "Ticket";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β TicketSequence: number;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • Ticket

    Properties

    Account: string

    The account that owns this Ticket.

    +
    Flags: number

    A bit-map of Boolean flags enabled for this Ticket. Currently, there are no flags defined for Tickets.

    -
    -
    -
    - -
    LedgerEntryType: "Ticket"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the owner directory links to this object, +

    index: string
    LedgerEntryType: "Ticket"
    OwnerNode: string

    A hint indicating which page of the owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    TicketSequence: number
    -

    The Sequence Number this Ticket sets aside.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    TicketSequence: number

    The Sequence Number this Ticket sets aside.

    +
    diff --git a/docs/interfaces/LedgerEntry.VoteSlot.html b/docs/interfaces/LedgerEntry.VoteSlot.html index 5fca7a062f..768492b373 100644 --- a/docs/interfaces/LedgerEntry.VoteSlot.html +++ b/docs/interfaces/LedgerEntry.VoteSlot.html @@ -1,422 +1,8 @@ -VoteSlot | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface VoteSlot

    -
    -

    Hierarchy

    -
      -
    • VoteSlot
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    VoteEntry: {
    Β Β Β Β Account: string;
    Β Β Β Β TradingFee: number;
    Β Β Β Β VoteWeight: number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Account: string
    • -
    • -
      TradingFee: number
    • -
    • -
      VoteWeight: number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +VoteSlot | xrpl

    Interface VoteSlot

    interface VoteSlot {
    Β Β Β Β VoteEntry: { Account: string; TradingFee: number; VoteWeight: number };
    }

    Properties

    Properties

    VoteEntry: { Account: string; TradingFee: number; VoteWeight: number }
    diff --git a/docs/interfaces/LedgerEntry.XChainOwnedClaimID.html b/docs/interfaces/LedgerEntry.XChainOwnedClaimID.html index 00b0e7b1e9..0982bd9536 100644 --- a/docs/interfaces/LedgerEntry.XChainOwnedClaimID.html +++ b/docs/interfaces/LedgerEntry.XChainOwnedClaimID.html @@ -1,563 +1,45 @@ -XChainOwnedClaimID | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainOwnedClaimID

    -
    -

    An XChainOwnedClaimID object represents one cross-chain transfer of value +XChainOwnedClaimID | xrpl

    Interface XChainOwnedClaimID

    An XChainOwnedClaimID object represents one cross-chain transfer of value and includes information of the account on the source chain that locks or burns the funds on the source chain.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • XChainOwnedClaimID
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The account that checked out this unique claim ID value.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for XChainOwnedClaimIDs, +

    interface XChainOwnedClaimID {
    Β Β Β Β Account: string;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "XChainOwnedClaimID";
    Β Β Β Β OtherChainSource: string;
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β SignatureReward: string;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainClaimAttestations: {
    Β Β Β Β Β Β Β Β XChainClaimProofSig: {
    Β Β Β Β Β Β Β Β Β Β Β Β Amount: Amount;
    Β Β Β Β Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Destination?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β }[];
    Β Β Β Β XChainClaimID: string;
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • XChainOwnedClaimID

    Properties

    Account: string

    The account that checked out this unique claim ID value.

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for XChainOwnedClaimIDs, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "XChainOwnedClaimID"
    -
    - -
    OtherChainSource: string
    -

    The account that must send the corresponding XChainCommit on the +

    index: string
    LedgerEntryType: "XChainOwnedClaimID"
    OtherChainSource: string

    The account that must send the corresponding XChainCommit on the source chain. The destination may be specified in the XChainCommit -transaction, which means that if the OtherChainSource isn't specified, +transaction, which means that if the OtherChainSource isn't specified, another account can try to specify a different destination and steal the funds. This also allows tracking only a single set of signatures, since we know which account will send the XChainCommit transaction.

    -
    -
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the sender's owner directory links to this +

    OwnerNode: string

    A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    SignatureReward: string
    -

    The total amount to pay the witness servers for their signatures. It must be at +

    SignatureReward: string

    The total amount to pay the witness servers for their signatures. It must be at least the value of the SignatureReward in the Bridge ledger object.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The door accounts and assets of the bridge this object correlates to.

    -
    -
    -
    - -
    XChainClaimAttestations: {
    Β Β Β Β XChainClaimProofSig: {
    Β Β Β Β Β Β Β Β Amount: Amount;
    Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Destination?: string;
    Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β };
    }[]
    -

    Attestations collected from the witness servers. This includes the parameters +

    XChainBridge: XChainBridge

    The door accounts and assets of the bridge this object correlates to.

    +
    XChainClaimAttestations: {
    Β Β Β Β XChainClaimProofSig: {
    Β Β Β Β Β Β Β Β Amount: Amount;
    Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Destination?: string;
    Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β };
    }[]

    Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, which chain (locking or issuing), optional destination, and reward account for that signature.

    -
    -
    -

    Type declaration

    -
      -
    • -
      XChainClaimProofSig: {
      Β Β Β Β Amount: Amount;
      Β Β Β Β AttestationRewardAccount: string;
      Β Β Β Β AttestationSignerAccount: string;
      Β Β Β Β Destination?: string;
      Β Β Β Β PublicKey: string;
      Β Β Β Β WasLockingChainSend: 0 | 1;
      }
      -
        -
      • -
        Amount: Amount
      • -
      • -
        AttestationRewardAccount: string
      • -
      • -
        AttestationSignerAccount: string
      • -
      • -
        Optional Destination?: string
      • -
      • -
        PublicKey: string
      • -
      • -
        WasLockingChainSend: 0 | 1
    -
    -
    - -
    XChainClaimID: string
    -

    The unique sequence number for a cross-chain transfer.

    -
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainClaimID: string

    The unique sequence number for a cross-chain transfer.

    +
    diff --git a/docs/interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html b/docs/interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html index e8d210b17c..fdfa728019 100644 --- a/docs/interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html +++ b/docs/interfaces/LedgerEntry.XChainOwnedCreateAccountClaimID.html @@ -1,539 +1,37 @@ -XChainOwnedCreateAccountClaimID | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainOwnedCreateAccountClaimID

    -
    -

    The XChainOwnedCreateAccountClaimID ledger object is used to collect attestations +XChainOwnedCreateAccountClaimID | xrpl

    Interface XChainOwnedCreateAccountClaimID

    The XChainOwnedCreateAccountClaimID ledger object is used to collect attestations for creating an account via a cross-chain transfer.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseLedgerEntry
    • -
    • HasPreviousTxnID -
        -
      • XChainOwnedCreateAccountClaimID
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The account that owns this object.

    -
    -
    -
    - -
    Flags: 0
    -

    A bit-map of boolean flags. No flags are defined for, +

    interface XChainOwnedCreateAccountClaimID {
    Β Β Β Β Account: string;
    Β Β Β Β Flags: 0;
    Β Β Β Β index: string;
    Β Β Β Β LedgerEntryType: "XChainOwnedCreateAccountClaimID";
    Β Β Β Β OwnerNode: string;
    Β Β Β Β PreviousTxnID: string;
    Β Β Β Β PreviousTxnLgrSeq: number;
    Β Β Β Β XChainAccountCreateCount: number;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainCreateAccountAttestations: {
    Β Β Β Β Β Β Β Β XChainCreateAccountProofSig: {
    Β Β Β Β Β Β Β Β Β Β Β Β Amount: string;
    Β Β Β Β Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Destination: string;
    Β Β Β Β Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β }[];
    }

    Hierarchy

    • BaseLedgerEntry
    • HasPreviousTxnID
      • XChainOwnedCreateAccountClaimID

    Properties

    Account: string

    The account that owns this object.

    +
    Flags: 0

    A bit-map of boolean flags. No flags are defined for, XChainOwnedCreateAccountClaimIDs, so this value is always 0.

    -
    -
    -
    - -
    LedgerEntryType: "XChainOwnedCreateAccountClaimID"
    -
    - -
    OwnerNode: string
    -

    A hint indicating which page of the sender's owner directory links to this +

    index: string
    LedgerEntryType: "XChainOwnedCreateAccountClaimID"
    OwnerNode: string

    A hint indicating which page of the sender's owner directory links to this object, in case the directory consists of multiple pages.

    -
    -
    -
    - -
    PreviousTxnID: string
    -

    The identifying hash of the transaction that most recently modified this +

    PreviousTxnID: string

    The identifying hash of the transaction that most recently modified this object.

    -
    -
    -
    - -
    PreviousTxnLgrSeq: number
    -

    The index of the ledger that contains the transaction that most recently +

    PreviousTxnLgrSeq: number

    The index of the ledger that contains the transaction that most recently modified this object.

    -
    -
    -
    - -
    XChainAccountCreateCount: number
    -

    An integer that determines the order that accounts created through +

    XChainAccountCreateCount: number

    An integer that determines the order that accounts created through cross-chain transfers must be performed. Smaller numbers must execute before larger numbers.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The door accounts and assets of the bridge this object correlates to.

    -
    -
    -
    - -
    XChainCreateAccountAttestations: {
    Β Β Β Β XChainCreateAccountProofSig: {
    Β Β Β Β Β Β Β Β Amount: string;
    Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Destination: string;
    Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β };
    }[]
    -

    Attestations collected from the witness servers. This includes the parameters +

    XChainBridge: XChainBridge

    The door accounts and assets of the bridge this object correlates to.

    +
    XChainCreateAccountAttestations: {
    Β Β Β Β XChainCreateAccountProofSig: {
    Β Β Β Β Β Β Β Β Amount: string;
    Β Β Β Β Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Β Β Β Β Destination: string;
    Β Β Β Β Β Β Β Β PublicKey: string;
    Β Β Β Β Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β };
    }[]

    Attestations collected from the witness servers. This includes the parameters needed to recreate the message that was signed, including the amount, destination, signature reward amount, and reward account for that signature. With the exception of the reward account, all signatures must sign the message created with common parameters.

    -
    -
    -

    Type declaration

    -
      -
    • -
      XChainCreateAccountProofSig: {
      Β Β Β Β Amount: string;
      Β Β Β Β AttestationRewardAccount: string;
      Β Β Β Β AttestationSignerAccount: string;
      Β Β Β Β Destination: string;
      Β Β Β Β PublicKey: string;
      Β Β Β Β WasLockingChainSend: 0 | 1;
      }
      -
        -
      • -
        Amount: string
      • -
      • -
        AttestationRewardAccount: string
      • -
      • -
        AttestationSignerAccount: string
      • -
      • -
        Destination: string
      • -
      • -
        PublicKey: string
      • -
      • -
        WasLockingChainSend: 0 | 1
    -
    -
    - -
    index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerEntryRequest.html b/docs/interfaces/LedgerEntryRequest.html index 742272c282..cc6031973e 100644 --- a/docs/interfaces/LedgerEntryRequest.html +++ b/docs/interfaces/LedgerEntryRequest.html @@ -1,741 +1,99 @@ -LedgerEntryRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerEntryRequest

    -
    -

    The ledger_entry method returns a single ledger object from the XRP Ledger +LedgerEntryRequest | xrpl

    Interface LedgerEntryRequest

    The ledger_entry method returns a single ledger object from the XRP Ledger in its raw format. Expects a response in the form of a LedgerEntryResponse.

    -
    -
    -

    Example

    const ledgerEntry: LedgerEntryRequest = {
    command: "ledger_entry",
    ledger_index: 60102302,
    index: "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4"
    } -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • LedgerEntryRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account_root?: string
    -

    Retrieve an AccountRoot object by its address. This is roughly equivalent +

    const ledgerEntry: LedgerEntryRequest = {
    command: "ledger_entry",
    ledger_index: 60102302,
    index: "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4"
    } +
    + +
    interface LedgerEntryRequest {
    Β Β Β Β account_root?: string;
    Β Β Β Β amm?: {
    Β Β Β Β Β Β Β Β asset: { currency: string; issuer?: string };
    Β Β Β Β Β Β Β Β asset2: { currency: string; issuer?: string };
    Β Β Β Β };
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β bridge?: XChainBridge;
    Β Β Β Β bridge_account?: string;
    Β Β Β Β check?: string;
    Β Β Β Β command: "ledger_entry";
    Β Β Β Β credential?: | string
    Β Β Β Β | { credentialType: string; issuer: string; subject: string };
    Β Β Β Β deposit_preauth?: string | { authorized: string; owner: string };
    Β Β Β Β did?: string;
    Β Β Β Β directory?:
    Β Β Β Β Β Β Β Β | string
    Β Β Β Β Β Β Β Β | { dir_root?: string; owner?: string; sub_index?: number };
    Β Β Β Β escrow?: string | { owner: string; seq: number };
    Β Β Β Β id?: string | number;
    Β Β Β Β include_deleted?: boolean;
    Β Β Β Β index?: string;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β mpt_issuance?: string;
    Β Β Β Β mptoken?: string | { account: string; mpt_issuance_id: string };
    Β Β Β Β nft_page?: string;
    Β Β Β Β offer?: string | { account: string; seq: number };
    Β Β Β Β payment_channel?: string;
    Β Β Β Β ripple_state?: { accounts: string[]; currency: string };
    Β Β Β Β ticket?: string | { owner: string; ticket_sequence: number };
    Β Β Β Β xchain_owned_claim_id?:
    Β Β Β Β Β Β Β Β | string
    Β Β Β Β Β Β Β Β | {
    Β Β Β Β Β Β Β Β Β Β Β Β issuing_chain_door: string;
    Β Β Β Β Β Β Β Β Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β Β Β Β Β Β Β Β Β locking_chain_door: string;
    Β Β Β Β Β Β Β Β Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β Β Β Β Β Β Β Β Β xchain_owned_claim_id: string
    Β Β Β Β Β Β Β Β Β Β Β Β | number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β xchain_owned_create_account_claim_id?: | string
    Β Β Β Β | {
    Β Β Β Β Β Β Β Β issuing_chain_door: string;
    Β Β Β Β Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β Β Β Β Β locking_chain_door: string;
    Β Β Β Β Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β Β Β Β Β xchain_owned_create_account_claim_id: string
    Β Β Β Β Β Β Β Β | number;
    Β Β Β Β };
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account_root?: string

    Retrieve an AccountRoot object by its address. This is roughly equivalent to the an AccountInfoRequest.

    -
    -
    -
    - -
    amm?: {
    Β Β Β Β asset: {
    Β Β Β Β Β Β Β Β currency: string;
    Β Β Β Β Β Β Β Β issuer?: string;
    Β Β Β Β };
    Β Β Β Β asset2: {
    Β Β Β Β Β Β Β Β currency: string;
    Β Β Β Β Β Β Β Β issuer?: string;
    Β Β Β Β };
    }
    -

    Retrieve an Automated Market Maker (AMM) object from the ledger. +

    amm?: {
    Β Β Β Β asset: { currency: string; issuer?: string };
    Β Β Β Β asset2: { currency: string; issuer?: string };
    }

    Retrieve an Automated Market Maker (AMM) object from the ledger. This is similar to amm_info method, but the ledger_entry version returns only the ledger entry as stored.

    -
    -
    -

    Type declaration

    -
      -
    • -
      asset: {
      Β Β Β Β currency: string;
      Β Β Β Β issuer?: string;
      }
      -
        -
      • -
        currency: string
      • -
      • -
        Optional issuer?: string
    • -
    • -
      asset2: {
      Β Β Β Β currency: string;
      Β Β Β Β issuer?: string;
      }
      -
        -
      • -
        currency: string
      • -
      • -
        Optional issuer?: string
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If true, return the requested ledger object's contents as a hex string in -the XRP Ledger's binary format. Otherwise, return data in JSON format. The +

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If true, return the requested ledger object's contents as a hex string in +the XRP Ledger's binary format. Otherwise, return data in JSON format. The default is false.

    -
    -
    -
    - -
    bridge?: XChainBridge
    -
    - -
    bridge_account?: string
    -
    - -
    check?: string
    -

    The object ID of a Check object to retrieve.

    -
    -
    -
    - -
    command: "ledger_entry"
    -

    The name of the API method.

    -
    -
    -
    - -
    deposit_preauth?: string | {
    Β Β Β Β authorized: string;
    Β Β Β Β owner: string;
    }
    -

    Specify a DepositPreauth object to retrieve. If a string, must be the +

    bridge?: XChainBridge
    bridge_account?: string
    check?: string

    The object ID of a Check object to retrieve.

    +
    command: "ledger_entry"

    The name of the API method.

    +
    credential?:
    Β Β Β Β | string
    Β Β Β Β | { credentialType: string; issuer: string; subject: string }

    Type declaration

    • string
    • { credentialType: string; issuer: string; subject: string }
      • credentialType: string

        The type of the credential, as issued.

        +
      • issuer: string

        The account that issued the credential.

        +
      • subject: string

        The account that is the subject of the credential.

        +
    deposit_preauth?: string | { authorized: string; owner: string }

    Specify a DepositPreauth object to retrieve. If a string, must be the object ID of the DepositPreauth object, as hexadecimal. If an object, requires owner and authorized sub-fields.

    -
    -
    -

    Type declaration

    -
      -
    • -
      authorized: string
      -

      The account that received the preauthorization.

      -
      -
    • -
    • -
      owner: string
      -

      The account that provided the preauthorization.

      -
      -
    -
    -
    - -
    did?: string
    -

    Specify a DID object to retrieve. If a string, must be the +

    Type declaration

    • string
    • { authorized: string; owner: string }
      • authorized: string

        The account that received the preauthorization.

        +
      • owner: string

        The account that provided the preauthorization.

        +
    did?: string

    Specify a DID object to retrieve. If a string, must be the object ID of the DID object, as hexadecimal, or the account ID.

    -
    -
    -
    - -
    directory?: string | {
    Β Β Β Β dir_root?: string;
    Β Β Β Β owner?: string;
    Β Β Β Β sub_index?: number;
    }
    -

    The DirectoryNode to retrieve. If a string, must be the object ID of the +

    directory?: string | { dir_root?: string; owner?: string; sub_index?: number }

    The DirectoryNode to retrieve. If a string, must be the object ID of the directory, as hexadecimal. If an object, requires either dir_root o Owner as a sub-field, plus optionally a sub_index sub-field.

    -
    -
    -

    Type declaration

    -
      -
    • -
      Optional dir_root?: string
      -

      Unique index identifying the directory to retrieve, as a hex string.

      -
      -
    • -
    • -
      Optional owner?: string
      -

      Unique address of the account associated with this directory.

      -
      -
    • -
    • -
      Optional sub_index?: number
      -

      If provided, jumps to a later "page" of the DirectoryNode.

      -
      -
    -
    -
    - -
    escrow?: string | {
    Β Β Β Β owner: string;
    Β Β Β Β seq: number;
    }
    -

    The Escrow object to retrieve. If a string, must be the object ID of the +

    Type declaration

    • string
    • { dir_root?: string; owner?: string; sub_index?: number }
      • Optionaldir_root?: string

        Unique index identifying the directory to retrieve, as a hex string.

        +
      • Optionalowner?: string

        Unique address of the account associated with this directory.

        +
      • Optionalsub_index?: number

        If provided, jumps to a later "page" of the DirectoryNode.

        +
    escrow?: string | { owner: string; seq: number }

    The Escrow object to retrieve. If a string, must be the object ID of the escrow, as hexadecimal. If an object, requires owner and seq sub-fields.

    -
    -
    -

    Type declaration

    -
      -
    • -
      owner: string
      -

      The owner (sender) of the Escrow object.

      -
      -
    • -
    • -
      seq: number
      -

      Sequence Number of the transaction that created the Escrow object.

      -
      -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    Type declaration

    • string
    • { owner: string; seq: number }
      • owner: string

        The owner (sender) of the Escrow object.

        +
      • seq: number

        Sequence Number of the transaction that created the Escrow object.

        +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    index?: string
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    nft_page?: string
    -

    Must be the object ID of the NFToken page, as hexadecimal

    -
    -
    -
    - -
    offer?: string | {
    Β Β Β Β account: string;
    Β Β Β Β seq: number;
    }
    -

    The Offer object to retrieve. If a string, interpret as the unique object +

    include_deleted?: boolean

    (Optional) If set to true and the queried object has been deleted, +return its complete data prior to its deletion. +If set to false or not provided and the queried object has been deleted, +return objectNotFound (current behavior). +This parameter is supported only by Clio servers

    +
    index?: string
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    mpt_issuance?: string

    Retrieve a MPTokenIssuance object from the ledger.

    +
    mptoken?: string | { account: string; mpt_issuance_id: string }

    Retrieve a MPToken object from the ledger.

    +
    nft_page?: string

    Must be the object ID of the NFToken page, as hexadecimal

    +
    offer?: string | { account: string; seq: number }

    The Offer object to retrieve. If a string, interpret as the unique object ID to the Offer. If an object, requires the sub-fields account and seq to uniquely identify the offer.

    -
    -
    -

    Type declaration

    -
      -
    • -
      account: string
      -

      The account that placed the offer.

      -
      -
    • -
    • -
      seq: number
      -

      Sequence Number of the transaction that created the Offer object.

      -
      -
    -
    -
    - -
    payment_channel?: string
    -

    The object ID of a PayChannel object to retrieve.

    -
    -
    -
    - -
    ripple_state?: {
    Β Β Β Β accounts: string[];
    Β Β Β Β currency: string;
    }
    -

    Object specifying the RippleState (trust line) object to retrieve. The +

    Type declaration

    • string
    • { account: string; seq: number }
      • account: string

        The account that placed the offer.

        +
      • seq: number

        Sequence Number of the transaction that created the Offer object.

        +
    payment_channel?: string

    The object ID of a PayChannel object to retrieve.

    +
    ripple_state?: { accounts: string[]; currency: string }

    Object specifying the RippleState (trust line) object to retrieve. The accounts and currency sub-fields are required to uniquely specify the rippleState entry to retrieve.

    -
    -
    -

    Type declaration

    -
      -
    • -
      accounts: string[]
      -

      2-length array of account Addresses, defining the two accounts linked by +

      Type declaration

      • accounts: string[]

        2-length array of account Addresses, defining the two accounts linked by this RippleState object.

        -
        -
      • -
      • -
        currency: string
        -

        Currency Code of the RippleState object to retrieve.

        -
        -
      -
    -
    - -
    ticket?: string | {
    Β Β Β Β owner: string;
    Β Β Β Β ticket_sequence: number;
    }
    -

    The Ticket object to retrieve. If a string, must be the object ID of the +

  • currency: string

    Currency Code of the RippleState object to retrieve.

    +
  • ticket?: string | { owner: string; ticket_sequence: number }

    The Ticket object to retrieve. If a string, must be the object ID of the Ticket, as hexadecimal. If an object, the owner and ticket_sequence sub-fields are required to uniquely specify the Ticket entry.

    -
    -
    -

    Type declaration

    -
      -
    • -
      owner: string
      -

      The owner of the Ticket object.

      -
      -
    • -
    • -
      ticket_sequence: number
      -

      The Ticket Sequence number of the Ticket entry to retrieve.

      -
      -
    -
    -
    - -
    xchain_owned_claim_id?: string | {
    Β Β Β Β issuing_chain_door: string;
    Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β locking_chain_door: string;
    Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β xchain_owned_claim_id: string | number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      issuing_chain_door: string
    • -
    • -
      issuing_chain_issue: Currency
    • -
    • -
      locking_chain_door: string
    • -
    • -
      locking_chain_issue: Currency
    • -
    • -
      xchain_owned_claim_id: string | number
    -
    - -
    xchain_owned_create_account_claim_id?: string | {
    Β Β Β Β issuing_chain_door: string;
    Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β locking_chain_door: string;
    Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β xchain_owned_create_account_claim_id: string | number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      issuing_chain_door: string
    • -
    • -
      issuing_chain_issue: Currency
    • -
    • -
      locking_chain_door: string
    • -
    • -
      locking_chain_issue: Currency
    • -
    • -
      xchain_owned_create_account_claim_id: string | number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +

    Type declaration

    • string
    • { owner: string; ticket_sequence: number }
      • owner: string

        The owner of the Ticket object.

        +
      • ticket_sequence: number

        The Ticket Sequence number of the Ticket entry to retrieve.

        +
    xchain_owned_claim_id?:
    Β Β Β Β | string
    Β Β Β Β | {
    Β Β Β Β Β Β Β Β issuing_chain_door: string;
    Β Β Β Β Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β Β Β Β Β locking_chain_door: string;
    Β Β Β Β Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β Β Β Β Β xchain_owned_claim_id: string
    Β Β Β Β Β Β Β Β | number;
    Β Β Β Β }
    xchain_owned_create_account_claim_id?:
    Β Β Β Β | string
    Β Β Β Β | {
    Β Β Β Β Β Β Β Β issuing_chain_door: string;
    Β Β Β Β Β Β Β Β issuing_chain_issue: Currency;
    Β Β Β Β Β Β Β Β locking_chain_door: string;
    Β Β Β Β Β Β Β Β locking_chain_issue: Currency;
    Β Β Β Β Β Β Β Β xchain_owned_create_account_claim_id: string
    Β Β Β Β Β Β Β Β | number;
    Β Β Β Β }
    diff --git a/docs/interfaces/LedgerEntryResponse.html b/docs/interfaces/LedgerEntryResponse.html index 8e1f31ea7b..fdec85fee9 100644 --- a/docs/interfaces/LedgerEntryResponse.html +++ b/docs/interfaces/LedgerEntryResponse.html @@ -1,466 +1,22 @@ -LedgerEntryResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerEntryResponse<T>

    -
    -

    Response expected from a LedgerEntryRequest.

    -
    -
    -
    -

    Type Parameters

    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β index: string;
    Β Β Β Β ledger_current_index: number;
    Β Β Β Β node?: T;
    Β Β Β Β node_binary?: string;
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/LedgerModifiedOfferCreateTransaction.html b/docs/interfaces/LedgerModifiedOfferCreateTransaction.html index 4b1dd2c9c7..d3586369d9 100644 --- a/docs/interfaces/LedgerModifiedOfferCreateTransaction.html +++ b/docs/interfaces/LedgerModifiedOfferCreateTransaction.html @@ -1,383 +1,10 @@ -LedgerModifiedOfferCreateTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerModifiedOfferCreateTransaction

    -
    -

    Special case transaction definition when the request contains owner_funds: true.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • LedgerModifiedOfferCreateTransaction
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    metadata: Object
    -
    - -
    transaction: Transaction
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerModifiedOfferCreateTransaction | xrpl

    Interface LedgerModifiedOfferCreateTransaction

    Special case transaction definition when the request contains owner_funds: true.

    +
    interface LedgerModifiedOfferCreateTransaction {
    Β Β Β Β metadata: TransactionMetadata & { owner_funds: string };
    Β Β Β Β transaction: Transaction;
    }

    Properties

    Properties

    metadata: TransactionMetadata & { owner_funds: string }
    transaction: Transaction
    diff --git a/docs/interfaces/LedgerQueueData.html b/docs/interfaces/LedgerQueueData.html index 60d70bfb91..afec1f8580 100644 --- a/docs/interfaces/LedgerQueueData.html +++ b/docs/interfaces/LedgerQueueData.html @@ -1,433 +1,16 @@ -LedgerQueueData | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerQueueData

    -
    -

    Hierarchy

    -
      -
    • LedgerQueueData
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -
    - -
    auth_change?: boolean
    -
    - -
    fee?: string
    -
    - -
    fee_level?: string
    -
    - -
    last_result?: string
    -
    - -
    max_spend_drops?: string
    -
    - -
    preflight_result: string
    -
    - -
    retries_remaining: number
    -
    - -
    tx: LedgerModifiedOfferCreateTransaction | TransactionAndMetadata<Transaction> | {
    Β Β Β Β tx_blob: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      tx_blob: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerQueueData | xrpl

    Interface LedgerQueueData

    interface LedgerQueueData {
    Β Β Β Β account: string;
    Β Β Β Β auth_change?: boolean;
    Β Β Β Β fee?: string;
    Β Β Β Β fee_level?: string;
    Β Β Β Β last_result?: string;
    Β Β Β Β max_spend_drops?: string;
    Β Β Β Β preflight_result: string;
    Β Β Β Β retries_remaining: number;
    Β Β Β Β tx:
    Β Β Β Β Β Β Β Β | LedgerModifiedOfferCreateTransaction
    Β Β Β Β Β Β Β Β | TransactionAndMetadata<Transaction>
    Β Β Β Β Β Β Β Β | { tx_blob: string };
    }

    Properties

    account: string
    auth_change?: boolean
    fee?: string
    fee_level?: string
    last_result?: string
    max_spend_drops?: string
    preflight_result: string
    retries_remaining: number
    tx:
    Β Β Β Β | LedgerModifiedOfferCreateTransaction
    Β Β Β Β | TransactionAndMetadata<Transaction>
    Β Β Β Β | { tx_blob: string }
    diff --git a/docs/interfaces/LedgerRequest.html b/docs/interfaces/LedgerRequest.html index 89fb78c940..28eb222b75 100644 --- a/docs/interfaces/LedgerRequest.html +++ b/docs/interfaces/LedgerRequest.html @@ -1,524 +1,51 @@ -LedgerRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerRequest

    -
    -

    Retrieve information about the public ledger. Expects a response in the form +LedgerRequest | xrpl

    Interface LedgerRequest

    Retrieve information about the public ledger. Expects a response in the form of a LedgerResponse.

    -
    -
    -

    Example

    const ledger: LedgerRequest = {
    "id": 14,
    "command": "ledger",
    "ledger_index": "validated",
    "full": false,
    "accounts": false,
    "transactions": false,
    "expand": false,
    "owner_funds": false
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    accounts?: boolean
    -

    Admin required. If true, return information on accounts in the ledger. +

    const ledger: LedgerRequest = {
    "id": 14,
    "command": "ledger",
    "ledger_index": "validated",
    "full": false,
    "accounts": false,
    "transactions": false,
    "expand": false,
    "owner_funds": false
    } +
    + +
    interface LedgerRequest {
    Β Β Β Β accounts?: boolean;
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β command: "ledger";
    Β Β Β Β expand?: boolean;
    Β Β Β Β full?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β owner_funds?: boolean;
    Β Β Β Β queue?: boolean;
    Β Β Β Β transactions?: boolean;
    Β Β Β Β type?: LedgerEntryFilter;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    accounts?: boolean

    Admin required. If true, return information on accounts in the ledger. Ignored if you did not specify a ledger version. Defaults to false.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If true, and transactions and expand are both also true, return +

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If true, and transactions and expand are both also true, return transaction information in binary format (hexadecimal string) instead of JSON format.

    -
    -
    -
    - -
    command: "ledger"
    -

    The name of the API method.

    -
    -
    -
    - -
    expand?: boolean
    -

    Provide full JSON-formatted information for transaction/account +

    command: "ledger"

    The name of the API method.

    +
    expand?: boolean

    Provide full JSON-formatted information for transaction/account information instead of only hashes. Defaults to false. Ignored unless you request transactions, accounts, or both.

    -
    -
    -
    - -
    full?: boolean
    -

    Admin required If true, return full information on the entire ledger. +

    full?: boolean

    Admin required If true, return full information on the entire ledger. Ignored if you did not specify a ledger version. Defaults to false.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    owner_funds?: boolean
    -

    If true, include owner_funds field in the metadata of OfferCreate +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    owner_funds?: boolean

    If true, include owner_funds field in the metadata of OfferCreate transactions in the response. Defaults to false. Ignored unless transactions are included and expand is true.

    -
    -
    -
    - -
    queue?: boolean
    -

    If true, and the command is requesting the current ledger, includes an +

    queue?: boolean

    If true, and the command is requesting the current ledger, includes an array of queued transactions in the results.

    -
    -
    -
    - -
    transactions?: boolean
    -

    If true, return information on transactions in the specified ledger +

    transactions?: boolean

    If true, return information on transactions in the specified ledger version. Defaults to false. Ignored if you did not specify a ledger version.

    -
    -
    -
    - - -

    If included, filter results to include only this type of ledger object.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +

    If included, filter results to include only this type of ledger object.

    +
    diff --git a/docs/interfaces/LedgerResponse.html b/docs/interfaces/LedgerResponse.html index b80b2d678d..c9bbfef2ec 100644 --- a/docs/interfaces/LedgerResponse.html +++ b/docs/interfaces/LedgerResponse.html @@ -1,436 +1,17 @@ -LedgerResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerResponse

    -
    -

    Response expected from a LedgerRequest. +LedgerResponse | xrpl

    Interface LedgerResponse

    Response expected from a LedgerRequest. This is the default request response, triggered when expand and binary are both false.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: LedgerResponseResult
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface LedgerResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: LedgerResponseResult;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: LedgerResponseResult
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/LedgerStream.html b/docs/interfaces/LedgerStream.html index 6f199d38dd..41eaa297f4 100644 --- a/docs/interfaces/LedgerStream.html +++ b/docs/interfaces/LedgerStream.html @@ -1,480 +1,38 @@ -LedgerStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerStream

    -
    -

    The ledger stream only sends ledgerClosed messages when the consensus +LedgerStream | xrpl

    Interface LedgerStream

    The ledger stream only sends ledgerClosed messages when the consensus process declares a new validated ledger. The message identifies the ledger And provides some information about its contents.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • LedgerStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    fee_base: number
    -

    The reference transaction cost as of this ledger version, in drops of XRP. +

    interface LedgerStream {
    Β Β Β Β fee_base: number;
    Β Β Β Β fee_ref?: number;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β ledger_time: number;
    Β Β Β Β reserve_base: number;
    Β Β Β Β reserve_inc: number;
    Β Β Β Β txn_count: number;
    Β Β Β Β type: "ledgerClosed";
    Β Β Β Β validated_ledgers?: string;
    }

    Hierarchy

    • BaseStream
      • LedgerStream

    Properties

    fee_base: number

    The reference transaction cost as of this ledger version, in drops of XRP. If this ledger version includes a SetFee pseudo-transaction the new. Transaction cost applies starting with the following ledger version.

    -
    -
    -
    - -
    fee_ref?: number
    -

    The reference transaction cost in "fee units". This is not returned after the SetFees amendment is enabled.

    -
    -
    -
    - -
    ledger_hash: string
    -

    The identifying hash of the ledger version that was closed.

    -
    -
    -
    - -
    ledger_index: number
    -

    The ledger index of the ledger that was closed.

    -
    -
    -
    - -
    ledger_time: number
    -

    The time this ledger was closed, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    reserve_base: number
    -

    The minimum reserve, in drops of XRP, that is required for an account. If +

    fee_ref?: number

    The reference transaction cost in "fee units". This is not returned after the SetFees amendment is enabled.

    +
    ledger_hash: string

    The identifying hash of the ledger version that was closed.

    +
    ledger_index: number

    The ledger index of the ledger that was closed.

    +
    ledger_time: number

    The time this ledger was closed, in seconds since the Ripple Epoch.

    +
    reserve_base: number

    The minimum reserve, in drops of XRP, that is required for an account. If this ledger version includes a SetFee pseudo-transaction the new base reserve applies starting with the following ledger version.

    -
    -
    -
    - -
    reserve_inc: number
    -

    The owner reserve for each object an account owns in the ledger, in drops +

    reserve_inc: number

    The owner reserve for each object an account owns in the ledger, in drops of XRP. If the ledger includes a SetFee pseudo-transaction the new owner reserve applies after this ledger.

    -
    -
    -
    - -
    txn_count: number
    -

    Number of new transactions included in this ledger version.

    -
    -
    -
    - -
    type: "ledgerClosed"
    -
    - -
    validated_ledgers?: string
    -

    Range of ledgers that the server has available. This may be a disjoint +

    txn_count: number

    Number of new transactions included in this ledger version.

    +
    type: "ledgerClosed"
    validated_ledgers?: string

    Range of ledgers that the server has available. This may be a disjoint sequence such as 24900901-24900984,24901116-24901158. This field is not returned if the server is not connected to the network, or if it is connected but has not yet obtained a ledger from the network.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerStreamResponse.html b/docs/interfaces/LedgerStreamResponse.html index d9825633b3..2093964720 100644 --- a/docs/interfaces/LedgerStreamResponse.html +++ b/docs/interfaces/LedgerStreamResponse.html @@ -1,458 +1,33 @@ -LedgerStreamResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface LedgerStreamResponse

    -
    -

    This response mirrors the LedgerStream, except it does NOT include the 'type' nor 'txn_count' fields.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • LedgerStreamResponse
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    fee_base: number
    -

    The reference transaction cost as of this ledger version, in drops of XRP. +LedgerStreamResponse | xrpl

    Interface LedgerStreamResponse

    This response mirrors the LedgerStream, except it does NOT include the 'type' nor 'txn_count' fields.

    +
    interface LedgerStreamResponse {
    Β Β Β Β fee_base: number;
    Β Β Β Β fee_ref?: number;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β ledger_time: number;
    Β Β Β Β reserve_base: number;
    Β Β Β Β reserve_inc: number;
    Β Β Β Β validated_ledgers?: string;
    }

    Properties

    fee_base: number

    The reference transaction cost as of this ledger version, in drops of XRP. If this ledger version includes a SetFee pseudo-transaction the new. Transaction cost applies starting with the following ledger version.

    -
    -
    -
    - -
    fee_ref?: number
    -

    The reference transaction cost in "fee units". This is not returned after the SetFees amendment is enabled.

    -
    -
    -
    - -
    ledger_hash: string
    -

    The identifying hash of the ledger version that was closed.

    -
    -
    -
    - -
    ledger_index: number
    -

    The ledger index of the ledger that was closed.

    -
    -
    -
    - -
    ledger_time: number
    -

    The time this ledger was closed, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    reserve_base: number
    -

    The minimum reserve, in drops of XRP, that is required for an account. If +

    fee_ref?: number

    The reference transaction cost in "fee units". This is not returned after the SetFees amendment is enabled.

    +
    ledger_hash: string

    The identifying hash of the ledger version that was closed.

    +
    ledger_index: number

    The ledger index of the ledger that was closed.

    +
    ledger_time: number

    The time this ledger was closed, in seconds since the Ripple Epoch.

    +
    reserve_base: number

    The minimum reserve, in drops of XRP, that is required for an account. If this ledger version includes a SetFee pseudo-transaction the new base reserve applies starting with the following ledger version.

    -
    -
    -
    - -
    reserve_inc: number
    -

    The owner reserve for each object an account owns in the ledger, in drops +

    reserve_inc: number

    The owner reserve for each object an account owns in the ledger, in drops of XRP. If the ledger includes a SetFee pseudo-transaction the new owner reserve applies after this ledger.

    -
    -
    -
    - -
    validated_ledgers?: string
    -

    Range of ledgers that the server has available. This may be a disjoint +

    validated_ledgers?: string

    Range of ledgers that the server has available. This may be a disjoint sequence such as 24900901-24900984,24901116-24901158. This field is not returned if the server is not connected to the network, or if it is connected but has not yet obtained a ledger from the network.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/LedgerV1Response.html b/docs/interfaces/LedgerV1Response.html new file mode 100644 index 0000000000..c5773ed9b1 --- /dev/null +++ b/docs/interfaces/LedgerV1Response.html @@ -0,0 +1,18 @@ +LedgerV1Response | xrpl

    Interface LedgerV1Response

    Response expected from a LedgerRequest. +This is the default request response, triggered when expand and binary are both false. +This is the response for API version 1.

    +
    interface LedgerV1Response {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: LedgerV1ResponseResult;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: LedgerV1ResponseResult
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/MPTAmount.html b/docs/interfaces/MPTAmount.html new file mode 100644 index 0000000000..f92aea0013 --- /dev/null +++ b/docs/interfaces/MPTAmount.html @@ -0,0 +1,9 @@ +MPTAmount | xrpl

    Interface MPTAmount

    interface MPTAmount {
    Β Β Β Β mpt_issuance_id: string;
    Β Β Β Β value: string;
    }

    Properties

    Properties

    mpt_issuance_id: string
    value: string
    diff --git a/docs/interfaces/MPTokenAuthorize.html b/docs/interfaces/MPTokenAuthorize.html new file mode 100644 index 0000000000..6513011db7 --- /dev/null +++ b/docs/interfaces/MPTokenAuthorize.html @@ -0,0 +1,60 @@ +MPTokenAuthorize | xrpl

    Interface MPTokenAuthorize

    The MPTokenAuthorize transaction is used to globally lock/unlock a MPTokenIssuance, +or lock/unlock an individual's MPToken.

    +
    interface MPTokenAuthorize {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | MPTokenAuthorizeFlagsInterface;
    Β Β Β Β Holder?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MPTokenIssuanceID: string;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "MPTokenAuthorize";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +

    Set of bit-flags for this transaction.

    +
    Holder?: string

    An optional XRPL Address of an individual token holder balance to lock/unlock. +If omitted, this transaction will apply to all any accounts holding MPTs.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MPTokenIssuanceID: string

    Identifies the MPTokenIssuance

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "MPTokenAuthorize"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/MPTokenAuthorizeFlagsInterface.html b/docs/interfaces/MPTokenAuthorizeFlagsInterface.html new file mode 100644 index 0000000000..2e7b08b0e0 --- /dev/null +++ b/docs/interfaces/MPTokenAuthorizeFlagsInterface.html @@ -0,0 +1,10 @@ +MPTokenAuthorizeFlagsInterface | xrpl

    Interface MPTokenAuthorizeFlagsInterface

    Map of flags to boolean values representing MPTokenAuthorize transaction +flags.

    +
    interface MPTokenAuthorizeFlagsInterface {
    Β Β Β Β tfMPTUnauthorize?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • MPTokenAuthorizeFlagsInterface

    Properties

    Properties

    tfMPTUnauthorize?: boolean
    diff --git a/docs/interfaces/MPTokenIssuanceCreate.html b/docs/interfaces/MPTokenIssuanceCreate.html new file mode 100644 index 0000000000..1f3b43d66e --- /dev/null +++ b/docs/interfaces/MPTokenIssuanceCreate.html @@ -0,0 +1,80 @@ +MPTokenIssuanceCreate | xrpl

    Interface MPTokenIssuanceCreate

    The MPTokenIssuanceCreate transaction creates a MPTokenIssuance object +and adds it to the relevant directory node of the creator account. +This transaction is the only opportunity an issuer has to specify any token fields +that are defined as immutable (e.g., MPT Flags). If the transaction is successful, +the newly created token will be owned by the account (the creator account) which +executed the transaction.

    +
    interface MPTokenIssuanceCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β AssetScale?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | MPTokenIssuanceCreateFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β MaximumAmount?: string;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MPTokenMetadata?: null | string;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "MPTokenIssuanceCreate";
    Β Β Β Β TransferFee?: number;
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    AssetScale?: number

    An asset scale is the difference, in orders of magnitude, between a standard unit and +a corresponding fractional unit. More formally, the asset scale is a non-negative integer +(0, 1, 2, …) such that one standard unit equals 10^(-scale) of a corresponding +fractional unit. If the fractional unit equals the standard unit, then the asset scale is 0. +Note that this value is optional, and will default to 0 if not supplied.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    MaximumAmount?: string

    Specifies the maximum asset amount of this token that should ever be issued. +It is a non-negative integer string that can store a range of up to 63 bits. If not set, the max +amount will default to the largest unsigned 63-bit integer (0x7FFFFFFFFFFFFFFF or 9223372036854775807)

    +

    Example:

    +
    MaximumAmount: '9223372036854775807'
    +
    + +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MPTokenMetadata?: null | string

    Arbitrary metadata about this issuance, in hex format.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "MPTokenIssuanceCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TransferFee?: number

    Specifies the fee to charged by the issuer for secondary sales of the Token, +if such sales are allowed. Valid values for this field are between 0 and 50,000 inclusive, +allowing transfer rates of between 0.000% and 50.000% in increments of 0.001. +The field must NOT be present if the tfMPTCanTransfer flag is not set.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/MPTokenIssuanceCreateFlagsInterface.html b/docs/interfaces/MPTokenIssuanceCreateFlagsInterface.html new file mode 100644 index 0000000000..1b1732398f --- /dev/null +++ b/docs/interfaces/MPTokenIssuanceCreateFlagsInterface.html @@ -0,0 +1,15 @@ +MPTokenIssuanceCreateFlagsInterface | xrpl

    Interface MPTokenIssuanceCreateFlagsInterface

    Map of flags to boolean values representing MPTokenIssuanceCreate transaction +flags.

    +
    interface MPTokenIssuanceCreateFlagsInterface {
    Β Β Β Β tfMPTCanClawback?: boolean;
    Β Β Β Β tfMPTCanEscrow?: boolean;
    Β Β Β Β tfMPTCanLock?: boolean;
    Β Β Β Β tfMPTCanTrade?: boolean;
    Β Β Β Β tfMPTCanTransfer?: boolean;
    Β Β Β Β tfMPTRequireAuth?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • MPTokenIssuanceCreateFlagsInterface

    Properties

    tfMPTCanClawback?: boolean
    tfMPTCanEscrow?: boolean
    tfMPTCanLock?: boolean
    tfMPTCanTrade?: boolean
    tfMPTCanTransfer?: boolean
    tfMPTRequireAuth?: boolean
    diff --git a/docs/interfaces/MPTokenIssuanceDestroy.html b/docs/interfaces/MPTokenIssuanceDestroy.html new file mode 100644 index 0000000000..dd80576ec9 --- /dev/null +++ b/docs/interfaces/MPTokenIssuanceDestroy.html @@ -0,0 +1,60 @@ +MPTokenIssuanceDestroy | xrpl

    Interface MPTokenIssuanceDestroy

    The MPTokenIssuanceDestroy transaction is used to remove an MPTokenIssuance object +from the directory node in which it is being held, effectively removing the token +from the ledger. If this operation succeeds, the corresponding +MPTokenIssuance is removed and the owner’s reserve requirement is reduced by one. +This operation must fail if there are any holders who have non-zero balances.

    +
    interface MPTokenIssuanceDestroy {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MPTokenIssuanceID: string;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "MPTokenIssuanceDestroy";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MPTokenIssuanceID: string

    Identifies the MPTokenIssuance object to be removed by the transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "MPTokenIssuanceDestroy"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/MPTokenIssuanceSet.html b/docs/interfaces/MPTokenIssuanceSet.html new file mode 100644 index 0000000000..85f8c43b9f --- /dev/null +++ b/docs/interfaces/MPTokenIssuanceSet.html @@ -0,0 +1,60 @@ +MPTokenIssuanceSet | xrpl

    Interface MPTokenIssuanceSet

    The MPTokenIssuanceSet transaction is used to globally lock/unlock a MPTokenIssuance, +or lock/unlock an individual's MPToken.

    +
    interface MPTokenIssuanceSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | MPTokenIssuanceSetFlagsInterface;
    Β Β Β Β Holder?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MPTokenIssuanceID: string;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "MPTokenIssuanceSet";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +

    Set of bit-flags for this transaction.

    +
    Holder?: string

    An optional XRPL Address of an individual token holder balance to lock/unlock. +If omitted, this transaction will apply to all any accounts holding MPTs.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MPTokenIssuanceID: string

    Identifies the MPTokenIssuance

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "MPTokenIssuanceSet"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/MPTokenIssuanceSetFlagsInterface.html b/docs/interfaces/MPTokenIssuanceSetFlagsInterface.html new file mode 100644 index 0000000000..ff29f3ac23 --- /dev/null +++ b/docs/interfaces/MPTokenIssuanceSetFlagsInterface.html @@ -0,0 +1,11 @@ +MPTokenIssuanceSetFlagsInterface | xrpl

    Interface MPTokenIssuanceSetFlagsInterface

    Map of flags to boolean values representing MPTokenIssuanceSet transaction +flags.

    +
    interface MPTokenIssuanceSetFlagsInterface {
    Β Β Β Β tfMPTLock?: boolean;
    Β Β Β Β tfMPTUnlock?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • MPTokenIssuanceSetFlagsInterface

    Properties

    tfMPTLock?: boolean
    tfMPTUnlock?: boolean
    diff --git a/docs/interfaces/ManifestRequest.html b/docs/interfaces/ManifestRequest.html index 2b6a04f73a..e2dbdb12e4 100644 --- a/docs/interfaces/ManifestRequest.html +++ b/docs/interfaces/ManifestRequest.html @@ -1,422 +1,24 @@ -ManifestRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ManifestRequest

    -
    -

    The manifest method reports the current "manifest" information for a given +ManifestRequest | xrpl

    Interface ManifestRequest

    The manifest method reports the current "manifest" information for a given validator public key. The "manifest" is the public portion of that -validator's configured token. Expects a response in the form of a ManifestResponse.

    -
    -
    -

    Example

    const manifest: ManifestRequest = {
    "command": "manifest",
    "public_key": "nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p"
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "manifest"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +validator's configured token. Expects a response in the form of a ManifestResponse.

    +
    const manifest: ManifestRequest = {
    "command": "manifest",
    "public_key": "nHUFE9prPXPrHcG3SkwP1UzAQbSphqyQkQK9ATXLZsfkezhhda3p"
    } +
    + +
    interface ManifestRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "manifest";
    Β Β Β Β id?: string | number;
    Β Β Β Β public_key: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "manifest"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    public_key: string
    -

    The base58-encoded public key of the validator to look up. This can be the +

    public_key: string

    The base58-encoded public key of the validator to look up. This can be the master public key or ephemeral public key.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ManifestResponse.html b/docs/interfaces/ManifestResponse.html index c27965996e..dc9cdb1e4d 100644 --- a/docs/interfaces/ManifestResponse.html +++ b/docs/interfaces/ManifestResponse.html @@ -1,465 +1,22 @@ -ManifestResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ManifestResponse

    -
    -

    Response expected from a ManifestRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β details?: {
    Β Β Β Β Β Β Β Β domain: string;
    Β Β Β Β Β Β Β Β ephemeral_key: string;
    Β Β Β Β Β Β Β Β master_key: string;
    Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β };
    Β Β Β Β manifest?: string;
    Β Β Β Β requested: string;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/Memo.html b/docs/interfaces/Memo.html index 9178dc2712..59a95ed69c 100644 --- a/docs/interfaces/Memo.html +++ b/docs/interfaces/Memo.html @@ -1,381 +1,8 @@ -Memo | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Memo

    -
    -

    Hierarchy

    -
      -
    • Memo
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    Memo: {
    Β Β Β Β MemoData?: string;
    Β Β Β Β MemoFormat?: string;
    Β Β Β Β MemoType?: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Optional MemoData?: string
    • -
    • -
      Optional MemoFormat?: string
    • -
    • -
      Optional MemoType?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Memo | xrpl

    Interface Memo

    interface Memo {
    Β Β Β Β Memo: { MemoData?: string; MemoFormat?: string; MemoType?: string };
    }

    Properties

    Properties

    Memo: { MemoData?: string; MemoFormat?: string; MemoType?: string }
    diff --git a/docs/interfaces/ModifiedNode.html b/docs/interfaces/ModifiedNode.html index 78b618a59a..aefa7dae5e 100644 --- a/docs/interfaces/ModifiedNode.html +++ b/docs/interfaces/ModifiedNode.html @@ -1,393 +1,8 @@ -ModifiedNode | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ModifiedNode

    -
    -

    Hierarchy

    -
      -
    • ModifiedNode
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    ModifiedNode: {
    Β Β Β Β FinalFields?: {
    Β Β Β Β Β Β Β Β [field: string]: unknown;
    Β Β Β Β };
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    Β Β Β Β PreviousFields?: {
    Β Β Β Β Β Β Β Β [field: string]: unknown;
    Β Β Β Β };
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Optional FinalFields?: {
      Β Β Β Β [field: string]: unknown;
      }
      -
        -
      • -
        [field: string]: unknown
    • -
    • -
      LedgerEntryType: string
    • -
    • -
      LedgerIndex: string
    • -
    • -
      Optional PreviousFields?: {
      Β Β Β Β [field: string]: unknown;
      }
      -
        -
      • -
        [field: string]: unknown
    • -
    • -
      Optional PreviousTxnID?: string
    • -
    • -
      Optional PreviousTxnLgrSeq?: number
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ModifiedNode | xrpl

    Interface ModifiedNode

    interface ModifiedNode {
    Β Β Β Β ModifiedNode: {
    Β Β Β Β Β Β Β Β FinalFields?: { [field: string]: unknown };
    Β Β Β Β Β Β Β Β LedgerEntryType: string;
    Β Β Β Β Β Β Β Β LedgerIndex: string;
    Β Β Β Β Β Β Β Β PreviousFields?: { [field: string]: unknown };
    Β Β Β Β Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β Β Β Β Β PreviousTxnLgrSeq?: number;
    Β Β Β Β };
    }

    Properties

    Properties

    ModifiedNode: {
    Β Β Β Β FinalFields?: { [field: string]: unknown };
    Β Β Β Β LedgerEntryType: string;
    Β Β Β Β LedgerIndex: string;
    Β Β Β Β PreviousFields?: { [field: string]: unknown };
    Β Β Β Β PreviousTxnID?: string;
    Β Β Β Β PreviousTxnLgrSeq?: number;
    }
    diff --git a/docs/interfaces/NFTBuyOffersRequest.html b/docs/interfaces/NFTBuyOffersRequest.html index a4ca294ff2..484a5850e3 100644 --- a/docs/interfaces/NFTBuyOffersRequest.html +++ b/docs/interfaces/NFTBuyOffersRequest.html @@ -1,440 +1,23 @@ -NFTBuyOffersRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTBuyOffersRequest

    -
    -

    The nft_buy_offers method retrieves all of buy offers for the specified +NFTBuyOffersRequest | xrpl

    Interface NFTBuyOffersRequest

    The nft_buy_offers method retrieves all of buy offers for the specified NFToken.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • NFTBuyOffersRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "nft_buy_offers"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface NFTBuyOffersRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "nft_buy_offers";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β nft_id: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "nft_buy_offers"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    nft_id: string
    -

    The unique identifier of an NFToken. The request returns buy offers for this NFToken.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    nft_id: string

    The unique identifier of an NFToken. The request returns buy offers for this NFToken.

    +
    diff --git a/docs/interfaces/NFTBuyOffersResponse.html b/docs/interfaces/NFTBuyOffersResponse.html index aa755a3122..923a086407 100644 --- a/docs/interfaces/NFTBuyOffersResponse.html +++ b/docs/interfaces/NFTBuyOffersResponse.html @@ -1,448 +1,18 @@ -NFTBuyOffersResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTBuyOffersResponse

    -
    -

    Response expected from an NFTBuyOffersRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β nft_id: string;
    Β Β Β Β offers: NFTOffer[];
    }
    -
    -

    Type declaration

    -
      -
    • -
      nft_id: string
      -

      The token ID of the NFToken to which these offers pertain.

      -
      -
    • -
    • -
      offers: NFTOffer[]
      -

      A list of buy offers for the specified NFToken.

      -
      -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NFTBuyOffersResponse | xrpl

    Interface NFTBuyOffersResponse

    Response expected from an NFTBuyOffersRequest.

    +
    interface NFTBuyOffersResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { nft_id: string; offers: NFTOffer[] };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { nft_id: string; offers: NFTOffer[] }

    Type declaration

    • nft_id: string

      The token ID of the NFToken to which these offers pertain.

      +
    • offers: NFTOffer[]

      A list of buy offers for the specified NFToken.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/NFTHistoryRequest.html b/docs/interfaces/NFTHistoryRequest.html index 2a3f3804a5..2567054028 100644 --- a/docs/interfaces/NFTHistoryRequest.html +++ b/docs/interfaces/NFTHistoryRequest.html @@ -1,509 +1,44 @@ -NFTHistoryRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTHistoryRequest

    -
    -

    The nft_history method retrieves a list of transactions that involved the +NFTHistoryRequest | xrpl

    Interface NFTHistoryRequest

    The nft_history method retrieves a list of transactions that involved the specified NFToken. Expects a response in the form of a NFTHistoryResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • NFTHistoryRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If true, return transactions as hex strings instead of JSON. The default is +

    interface NFTHistoryRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β command: "nft_history";
    Β Β Β Β forward?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β ledger_index_max?: number;
    Β Β Β Β ledger_index_min?: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β nft_id: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If true, return transactions as hex strings instead of JSON. The default is false.

    -
    -
    -
    - -
    command: "nft_history"
    -

    The name of the API method.

    -
    -
    -
    - -
    forward?: boolean
    -

    If true, returns values indexed with the oldest ledger first. Otherwise, +

    command: "nft_history"

    The name of the API method.

    +
    forward?: boolean

    If true, returns values indexed with the oldest ledger first. Otherwise, the results are indexed with the newest ledger first.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    ledger_index_max?: number
    -

    Use to specify the most recent ledger to include transactions from. A +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    ledger_index_max?: number

    Use to specify the most recent ledger to include transactions from. A value of -1 instructs the server to use the most recent validated ledger version available.

    -
    -
    -
    - -
    ledger_index_min?: number
    -

    Use to specify the earliest ledger to include transactions from. A value +

    ledger_index_min?: number

    Use to specify the earliest ledger to include transactions from. A value of -1 instructs the server to use the earliest validated ledger version available.

    -
    -
    -
    - -
    limit?: number
    -

    Default varies. Limit the number of transactions to retrieve. The server +

    limit?: number

    Default varies. Limit the number of transactions to retrieve. The server is not required to honor this value.

    -
    -
    -
    - -
    marker?: unknown
    -

    Value from a previous paginated response. Resume retrieving data where +

    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where that response left off. This value is stable even if there is a change in -the server's range of available ledgers.

    -
    -
    -
    - -
    nft_id: string
    -

    The unique identifier of an NFToken.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +the server's range of available ledgers.

    +
    nft_id: string

    The unique identifier of an NFToken.

    +
    diff --git a/docs/interfaces/NFTHistoryResponse.html b/docs/interfaces/NFTHistoryResponse.html index 9e9fb8e3c6..2e36f8421c 100644 --- a/docs/interfaces/NFTHistoryResponse.html +++ b/docs/interfaces/NFTHistoryResponse.html @@ -1,479 +1,29 @@ -NFTHistoryResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTHistoryResponse

    -
    -

    Expected response from an NFTHistoryRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_index_max: number;
    Β Β Β Β ledger_index_min: number;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β nft_id: string;
    Β Β Β Β transactions: NFTHistoryTransaction[];
    Β Β Β Β validated?: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/NFTHistoryTransaction.html b/docs/interfaces/NFTHistoryTransaction.html index 52b7bab047..fc70106e80 100644 --- a/docs/interfaces/NFTHistoryTransaction.html +++ b/docs/interfaces/NFTHistoryTransaction.html @@ -1,417 +1,19 @@ -NFTHistoryTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTHistoryTransaction

    -
    -

    Hierarchy

    -
      -
    • NFTHistoryTransaction
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    ledger_index: number
    -

    The ledger index of the ledger version that included this transaction.

    -
    -
    -
    - -
    meta: string | TransactionMetadata
    -

    If binary is True, then this is a hex string of the transaction metadata. +NFTHistoryTransaction | xrpl

    Interface NFTHistoryTransaction

    interface NFTHistoryTransaction {
    Β Β Β Β ledger_index: number;
    Β Β Β Β meta: string | TransactionMetadata;
    Β Β Β Β tx?: Transaction & ResponseOnlyTxInfo;
    Β Β Β Β tx_blob?: string;
    Β Β Β Β validated: boolean;
    }

    Properties

    ledger_index: number

    The ledger index of the ledger version that included this transaction.

    +
    meta: string | TransactionMetadata

    If binary is True, then this is a hex string of the transaction metadata. Otherwise, the transaction metadata is included in JSON format.

    -
    -
    -
    - -
    tx?: Object
    -

    JSON object defining the transaction.

    -
    -
    -
    - -
    tx_blob?: string
    -

    Unique hashed String representing the transaction.

    -
    -
    -
    - -
    validated: boolean
    -

    Whether or not the transaction is included in a validated ledger. Any +

    tx?: Transaction & ResponseOnlyTxInfo

    JSON object defining the transaction.

    +
    tx_blob?: string

    Unique hashed String representing the transaction.

    +
    validated: boolean

    Whether or not the transaction is included in a validated ledger. Any transaction not yet in a validated ledger is subject to change.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTInfoRequest.html b/docs/interfaces/NFTInfoRequest.html index 5017ddf1e7..c2cb94f6e9 100644 --- a/docs/interfaces/NFTInfoRequest.html +++ b/docs/interfaces/NFTInfoRequest.html @@ -1,439 +1,22 @@ -NFTInfoRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTInfoRequest

    -
    -

    The nft_info method retrieves information about an NFToken.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "nft_info"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +NFTInfoRequest | xrpl

    Interface NFTInfoRequest

    The nft_info method retrieves information about an NFToken.

    +
    interface NFTInfoRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "nft_info";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β nft_id: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "nft_info"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    nft_id: string
    -

    The unique identifier of an NFToken.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    nft_id: string

    The unique identifier of an NFToken.

    +
    diff --git a/docs/interfaces/NFTInfoResponse.html b/docs/interfaces/NFTInfoResponse.html index a8bbc6221c..da22a7ea22 100644 --- a/docs/interfaces/NFTInfoResponse.html +++ b/docs/interfaces/NFTInfoResponse.html @@ -1,435 +1,16 @@ -NFTInfoResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTInfoResponse

    -
    -

    Response expected from an NFTInfoRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: NFToken
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NFTInfoResponse | xrpl

    Interface NFTInfoResponse

    Response expected from an NFTInfoRequest.

    +
    interface NFTInfoResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: NFToken;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: NFToken
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/NFTOffer.html b/docs/interfaces/NFTOffer.html index 8e30959f70..99376ec16c 100644 --- a/docs/interfaces/NFTOffer.html +++ b/docs/interfaces/NFTOffer.html @@ -1,412 +1,15 @@ -NFTOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTOffer

    -
    -

    One offer that might be returned from either an NFTBuyOffersRequest +NFTOffer | xrpl

    Interface NFTOffer

    One offer that might be returned from either an NFTBuyOffersRequest or an NFTSellOffersRequest.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • NFTOffer
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    amount: Amount
    -
    - -
    destination?: string
    -
    - -
    expiration?: number
    -
    - -
    flags: number
    -
    - -
    nft_offer_index: string
    -
    - -
    owner: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface NFTOffer {
    Β Β Β Β amount: Amount;
    Β Β Β Β destination?: string;
    Β Β Β Β expiration?: number;
    Β Β Β Β flags: number;
    Β Β Β Β nft_offer_index: string;
    Β Β Β Β owner: string;
    }

    Properties

    amount: Amount
    destination?: string
    expiration?: number
    flags: number
    nft_offer_index: string
    owner: string
    diff --git a/docs/interfaces/NFTSellOffersRequest.html b/docs/interfaces/NFTSellOffersRequest.html index 4ef9eafb04..b4e9f572ff 100644 --- a/docs/interfaces/NFTSellOffersRequest.html +++ b/docs/interfaces/NFTSellOffersRequest.html @@ -1,440 +1,23 @@ -NFTSellOffersRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTSellOffersRequest

    -
    -

    The nft_sell_offers method retrieves all of sell offers for the specified +NFTSellOffersRequest | xrpl

    Interface NFTSellOffersRequest

    The nft_sell_offers method retrieves all of sell offers for the specified NFToken.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • NFTSellOffersRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "nft_sell_offers"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface NFTSellOffersRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "nft_sell_offers";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β nft_id: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "nft_sell_offers"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    nft_id: string
    -

    The unique identifier of an NFToken. The request returns sell offers for this NFToken.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    nft_id: string

    The unique identifier of an NFToken. The request returns sell offers for this NFToken.

    +
    diff --git a/docs/interfaces/NFTSellOffersResponse.html b/docs/interfaces/NFTSellOffersResponse.html index efe0a6bb03..2b8de6c2d5 100644 --- a/docs/interfaces/NFTSellOffersResponse.html +++ b/docs/interfaces/NFTSellOffersResponse.html @@ -1,448 +1,18 @@ -NFTSellOffersResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTSellOffersResponse

    -
    -

    Response expected from an NFTSellOffersRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β nft_id: string;
    Β Β Β Β offers: NFTOffer[];
    }
    -
    -

    Type declaration

    -
      -
    • -
      nft_id: string
      -

      The token ID of the NFToken to which these offers pertain.

      -
      -
    • -
    • -
      offers: NFTOffer[]
      -

      A list of sell offers for the specified NFToken.

      -
      -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NFTSellOffersResponse | xrpl

    Interface NFTSellOffersResponse

    Response expected from an NFTSellOffersRequest.

    +
    interface NFTSellOffersResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { nft_id: string; offers: NFTOffer[] };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { nft_id: string; offers: NFTOffer[] }

    Type declaration

    • nft_id: string

      The token ID of the NFToken to which these offers pertain.

      +
    • offers: NFTOffer[]

      A list of sell offers for the specified NFToken.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/NFToken.html b/docs/interfaces/NFToken.html index 35aab1f3c6..391f3bb05b 100644 --- a/docs/interfaces/NFToken.html +++ b/docs/interfaces/NFToken.html @@ -1,439 +1,18 @@ -NFToken | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFToken

    -
    -

    One NFToken that might be returned from an NFTInfoResponse

    -
    -
    -
    -

    Hierarchy

    -
      -
    • NFToken
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    flags: number
    -
    - -
    is_burned: boolean
    -
    - -
    issuer: string
    -
    - -
    ledger_index: number
    -
    - -
    nft_id: string
    -
    - -
    nft_serial: number
    -
    - -
    nft_taxon: number
    -
    - -
    owner: string
    -
    - -
    transfer_fee: number
    -
    - -
    uri: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NFToken | xrpl

    Interface NFToken

    One NFToken that might be returned from an NFTInfoResponse

    +
    interface NFToken {
    Β Β Β Β flags: number;
    Β Β Β Β is_burned: boolean;
    Β Β Β Β issuer: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β nft_id: string;
    Β Β Β Β nft_serial: number;
    Β Β Β Β nft_taxon: number;
    Β Β Β Β owner: string;
    Β Β Β Β transfer_fee: number;
    Β Β Β Β uri: string;
    }

    Properties

    flags: number
    is_burned: boolean
    issuer: string
    ledger_index: number
    nft_id: string
    nft_serial: number
    nft_taxon: number
    owner: string
    transfer_fee: number
    uri: string
    diff --git a/docs/interfaces/NFTokenAcceptOffer.html b/docs/interfaces/NFTokenAcceptOffer.html index 8193352b2c..668f3f3797 100644 --- a/docs/interfaces/NFTokenAcceptOffer.html +++ b/docs/interfaces/NFTokenAcceptOffer.html @@ -1,29 +1,11 @@ -NFTokenAcceptOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenAcceptOffer

    -
    -

    The NFTokenOfferAccept transaction is used to accept offers - to buy or sell an NFToken. It can either:

    +NFTokenAcceptOffer | xrpl

    Interface NFTokenAcceptOffer

    The NFTokenOfferAccept transaction is used to accept offers +to buy or sell an NFToken. It can either:

    1. Allow one offer to be accepted. This is called direct mode.
    2. @@ -32,111 +14,41 @@

      Interface NFTokenAcceptOffer

    NFToken, to be accepted in an atomic fashion. This is called brokered mode. -

    To indicate direct mode, use either the sell_offer or - buy_offer fields, but not both. To indicate brokered mode, - use both the sell_offer and buy_offer fields. If you use - neither sell_offer nor buy_offer, the transaction is invalid.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    To indicate direct mode, use either the sell_offer or +buy_offer fields, but not both. To indicate brokered mode, +use both the sell_offer and buy_offer fields. If you use +neither sell_offer nor buy_offer, the transaction is invalid.

    +
    interface NFTokenAcceptOffer {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenBrokerFee?: Amount;
    Β Β Β Β NFTokenBuyOffer?: string;
    Β Β Β Β NFTokenSellOffer?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenAcceptOffer";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NFTokenBrokerFee?: Amount
    -

    This field is only valid in brokered mode. It specifies the +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenBrokerFee?: Amount

    This field is only valid in brokered mode. It specifies the amount that the broker will keep as part of their fee for bringing the two offers together; the remaining amount will be sent to the seller of the NFToken being bought. If @@ -152,456 +64,31 @@

    -
    -
    - -
    NFTokenBuyOffer?: string
    -

    Identifies the NFTokenOffer that offers to buy the NFToken.

    +
    NFTokenBuyOffer?: string

    Identifies the NFTokenOffer that offers to buy the NFToken.

    In direct mode this field is optional, but either NFTokenSellOffer or NFTokenBuyOffer must be specified. In brokered mode, both NFTokenSellOffer and NFTokenBuyOffer must be specified.

    -
    -
    -
    - -
    NFTokenSellOffer?: string
    -

    Identifies the NFTokenOffer that offers to sell the NFToken.

    -

    In direct mode this field is optional, but either NFTokenSellOffer or - NFTokenBuyOffer must be specified. In brokered mode, both NFTokenSellOffer - and NFTokenBuyOffer must be specified.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    NFTokenSellOffer?: string

    Identifies the NFTokenOffer that offers to sell the NFToken.

    +

    In direct mode this field is optional, but either NFTokenSellOffer or +NFTokenBuyOffer must be specified. In brokered mode, both NFTokenSellOffer +and NFTokenBuyOffer must be specified.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "NFTokenAcceptOffer"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "NFTokenAcceptOffer"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTokenBurn.html b/docs/interfaces/NFTokenBurn.html index d07e0f720a..df6f082219 100644 --- a/docs/interfaces/NFTokenBurn.html +++ b/docs/interfaces/NFTokenBurn.html @@ -1,574 +1,69 @@ -NFTokenBurn | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenBurn

    -
    -

    The NFTokenBurn transaction is used to remove an NFToken object from the +NFTokenBurn | xrpl

    Interface NFTokenBurn

    The NFTokenBurn transaction is used to remove an NFToken object from the NFTokenPage in which it is being held, effectively removing the token from the ledger ("burning" it).

    If this operation succeeds, the corresponding NFToken is removed. If this operation empties the NFTokenPage holding the NFToken or results in the consolidation, thus removing an NFTokenPage, the owner’s reserve requirement is reduced by one.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    Indicates the AccountID that submitted this transaction. The account MUST +

    interface NFTokenBurn {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β Owner?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenBurn";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    Indicates the AccountID that submitted this transaction. The account MUST be either the present owner of the token or, if the lsfBurnable flag is set in the NFToken, either the issuer account or an account authorized by the issuer, i.e. MintAccount.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NFTokenID: string
    -

    Identifies the NFToken object to be removed by the transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Owner?: string
    -

    Indicates which account currently owns the token if it is different than +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenID: string

    Identifies the NFToken object to be removed by the transaction.

    +
    Owner?: string

    Indicates which account currently owns the token if it is different than Account. Only used to burn tokens which have the lsfBurnable flag enabled and are not owned by the signing account.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "NFTokenBurn"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "NFTokenBurn"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTokenCancelOffer.html b/docs/interfaces/NFTokenCancelOffer.html index 833755c4b6..e6e6c52178 100644 --- a/docs/interfaces/NFTokenCancelOffer.html +++ b/docs/interfaces/NFTokenCancelOffer.html @@ -1,564 +1,67 @@ -NFTokenCancelOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenCancelOffer

    -
    -

    The NFTokenCancelOffer transaction deletes existing NFTokenOffer objects. +NFTokenCancelOffer | xrpl

    Interface NFTokenCancelOffer

    The NFTokenCancelOffer transaction deletes existing NFTokenOffer objects. It is useful if you want to free up space on your account to lower your reserve requirement.

    The transaction can be executed by the account that originally created the NFTokenOffer, the account in the Recipient field of the NFTokenOffer (if present), or any account if the NFTokenOffer has an Expiration and the NFTokenOffer has already expired.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface NFTokenCancelOffer {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenOffers: string[];
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenCancelOffer";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NFTokenOffers: string[]
    -

    An array of identifiers of NFTokenOffer objects that should be cancelled +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenOffers: string[]

    An array of identifiers of NFTokenOffer objects that should be cancelled by this transaction.

    It is an error if an entry in this list points to an object that is not an NFTokenOffer object. It is not an error if an entry in this list points to an object that does not exist. This field is required.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "NFTokenCancelOffer"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "NFTokenCancelOffer"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTokenCreateOffer.html b/docs/interfaces/NFTokenCreateOffer.html index fbffd6fbaa..417d261381 100644 --- a/docs/interfaces/NFTokenCreateOffer.html +++ b/docs/interfaces/NFTokenCreateOffer.html @@ -1,612 +1,83 @@ -NFTokenCreateOffer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenCreateOffer

    -
    -

    The NFTokenCreateOffer transaction creates either an offer to buy an +NFTokenCreateOffer | xrpl

    Interface NFTokenCreateOffer

    The NFTokenCreateOffer transaction creates either an offer to buy an NFT the submitting account does not own, or an offer to sell an NFT the submitting account does own.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface NFTokenCreateOffer {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β Destination?: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | NFTokenCreateOfferFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β Owner?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenCreateOffer";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    Indicates the amount expected or offered for the Token.

    +
    Amount: Amount

    Indicates the amount expected or offered for the Token.

    The amount must be non-zero, except when this is a sell offer and the asset is XRP. This would indicate that the current owner of the token is giving it away free, either to anyone at all, or to the account identified by the Destination field.

    -
    -
    -
    - -
    Destination?: string
    -

    If present, indicates that this offer may only be +

    Destination?: string

    If present, indicates that this offer may only be accepted by the specified account. Attempts by other accounts to accept this offer MUST fail.

    -
    -
    -
    - -
    Expiration?: number
    -

    Indicates the time after which the offer will no longer +

    Expiration?: number

    Indicates the time after which the offer will no longer be valid. The value is the number of seconds since the Ripple Epoch.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - - -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NFTokenID: string
    -

    Identifies the NFTokenID of the NFToken object that the +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenID: string

    Identifies the NFTokenID of the NFToken object that the offer references.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Owner?: string
    -

    Indicates the AccountID of the account that owns the +

    Owner?: string

    Indicates the AccountID of the account that owns the corresponding NFToken.

    If the offer is to buy a token, this field must be present and it must be different than Account (since an offer to buy a token one already holds is meaningless).

    If the offer is to sell a token, this field must not be present, as the owner is, implicitly, the same as Account -(since an offer to sell a token one doesn't already hold +(since an offer to sell a token one doesn't already hold is meaningless).

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "NFTokenCreateOffer"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "NFTokenCreateOffer"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTokenCreateOfferFlagsInterface.html b/docs/interfaces/NFTokenCreateOfferFlagsInterface.html index 6cc17af9a0..450397e1c5 100644 --- a/docs/interfaces/NFTokenCreateOfferFlagsInterface.html +++ b/docs/interfaces/NFTokenCreateOfferFlagsInterface.html @@ -1,379 +1,10 @@ -NFTokenCreateOfferFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenCreateOfferFlagsInterface

    -
    -

    Map of flags to boolean values representing NFTokenCreateOffer transaction +NFTokenCreateOfferFlagsInterface | xrpl

    Interface NFTokenCreateOfferFlagsInterface

    Map of flags to boolean values representing NFTokenCreateOffer transaction flags.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • NFTokenCreateOfferFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    tfSellNFToken?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface NFTokenCreateOfferFlagsInterface {
    Β Β Β Β tfSellNFToken?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • NFTokenCreateOfferFlagsInterface

    Properties

    Properties

    tfSellNFToken?: boolean
    diff --git a/docs/interfaces/NFTokenMint.html b/docs/interfaces/NFTokenMint.html index e12177c09e..d6739b9504 100644 --- a/docs/interfaces/NFTokenMint.html +++ b/docs/interfaces/NFTokenMint.html @@ -1,253 +1,79 @@ -NFTokenMint | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenMint

    -
    -

    The NFTokenMint transaction creates an NFToken object and adds it to the +NFTokenMint | xrpl

    Interface NFTokenMint

    The NFTokenMint transaction creates an NFToken object and adds it to the relevant NFTokenPage object of the minter. If the transaction is successful, the newly minted token will be owned by the minter account specified by the transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface NFTokenMint {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | NFTokenMintFlagsInterface;
    Β Β Β Β Issuer?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenTaxon: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenMint";
    Β Β Β Β TransferFee?: number;
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β URI?: null | string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | NFTokenMintFlagsInterface
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    Issuer?: string
    -

    Indicates the account that should be the issuer of this token. This value +

    Flags?: number | NFTokenMintFlagsInterface

    Set of bit-flags for this transaction.

    +
    Issuer?: string

    Indicates the account that should be the issuer of this token. This value is optional and should only be specified if the account executing the transaction is not the Issuer of the NFToken object. If it is present, the MintAccount field in the AccountRoot of the Issuer field must match the Account, otherwise the transaction will fail.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NFTokenTaxon: number
    -

    Indicates the taxon associated with this token. The taxon is generally a +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenTaxon: number

    Indicates the taxon associated with this token. The taxon is generally a value chosen by the minter of the token and a given taxon may be used for multiple tokens. The implementation reserves taxon identifiers greater than or equal to 2147483648 (0x80000000). If you have no use for this field, set it to 0.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "NFTokenMint"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "NFTokenMint"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TransferFee?: number
    -

    Specifies the fee charged by the issuer for secondary sales of the Token, +

    TransferFee?: number

    Specifies the fee charged by the issuer for secondary sales of the Token, if such sales are allowed. Valid values for this field are between 0 and 50000 inclusive, allowing transfer rates between 0.000% and 50.000% in increments of 0.001%. This field must NOT be present if the tfTransferable flag is not set.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    URI?: null | string
    -

    URI that points to the data and/or metadata associated with the NFT. +

    URI?: null | string

    URI that points to the data and/or metadata associated with the NFT. This field need not be an HTTP or HTTPS URL; it could be an IPFS URI, a magnet link, immediate data encoded as an RFC2379 "data" URL, or even an opaque issuer-specific encoding. The URI is NOT checked for validity, but @@ -256,351 +82,4 @@

    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NFTokenMintFlagsInterface.html b/docs/interfaces/NFTokenMintFlagsInterface.html index 3f1aba3718..247c1d7b49 100644 --- a/docs/interfaces/NFTokenMintFlagsInterface.html +++ b/docs/interfaces/NFTokenMintFlagsInterface.html @@ -1,400 +1,14 @@ -NFTokenMintFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NFTokenMintFlagsInterface

    -
    -

    Map of flags to boolean values representing NFTokenMint transaction +NFTokenMintFlagsInterface | xrpl

    Interface NFTokenMintFlagsInterface

    Map of flags to boolean values representing NFTokenMint transaction flags.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • NFTokenMintFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfBurnable?: boolean
    -
    - -
    tfOnlyXRP?: boolean
    -
    - -
    tfTransferable?: boolean
    -
    - -
    tfTrustLine?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface NFTokenMintFlagsInterface {
    Β Β Β Β tfBurnable?: boolean;
    Β Β Β Β tfMutable?: boolean;
    Β Β Β Β tfOnlyXRP?: boolean;
    Β Β Β Β tfTransferable?: boolean;
    Β Β Β Β tfTrustLine?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • NFTokenMintFlagsInterface

    Properties

    tfBurnable?: boolean
    tfMutable?: boolean
    tfOnlyXRP?: boolean
    tfTransferable?: boolean
    tfTrustLine?: boolean
    diff --git a/docs/interfaces/NFTokenModify.html b/docs/interfaces/NFTokenModify.html new file mode 100644 index 0000000000..6b07fc231c --- /dev/null +++ b/docs/interfaces/NFTokenModify.html @@ -0,0 +1,71 @@ +NFTokenModify | xrpl

    Interface NFTokenModify

    The NFTokenModify transaction modifies an NFToken's URI +if its tfMutable is set to true.

    +
    interface NFTokenModify {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β NFTokenID: string;
    Β Β Β Β Owner?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "NFTokenModify";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β URI?: null | string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    NFTokenID: string

    Identifies the NFTokenID of the NFToken object that the +offer references.

    +
    Owner?: string

    Indicates the AccountID of the account that owns the corresponding NFToken. +Can be omitted if the owner is the account submitting this transaction

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "NFTokenModify"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    URI?: null | string

    URI that points to the data and/or metadata associated with the NFT. +This field need not be an HTTP or HTTPS URL; it could be an IPFS URI, a +magnet link, immediate data encoded as an RFC2379 "data" URL, or even an +opaque issuer-specific encoding. The URI is NOT checked for validity, but +the field is limited to a maximum length of 256 bytes.

    +

    This field must be hex-encoded. You can use convertStringToHex to +convert this field to the proper encoding.

    +

    This field must not be an empty string. Omit it from the transaction or +set to null if you do not use it.

    +
    diff --git a/docs/interfaces/NFTsByIssuerRequest.html b/docs/interfaces/NFTsByIssuerRequest.html new file mode 100644 index 0000000000..d8199bb305 --- /dev/null +++ b/docs/interfaces/NFTsByIssuerRequest.html @@ -0,0 +1,33 @@ +NFTsByIssuerRequest | xrpl

    Interface NFTsByIssuerRequest

    The nfts_by_issuer method returns a list of NFTokens issued by the account. +The order of the NFTs is not associated with the date the NFTs were minted. +Expects a response in the form of a NFTsByIssuerResponse.

    +
    interface NFTsByIssuerRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "nfts_by_issuer";
    Β Β Β Β id?: string | number;
    Β Β Β Β issuer: string;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β nft_taxon?: number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "nfts_by_issuer"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses +the same id field. This way, even if responses arrive out of order, you +know which request prompted which response.

    +
    issuer: string

    A unique identifier for the account, most commonly the account's address

    +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    limit?: number

    Default varies. Limit the number of transactions to retrieve. The server +is not required to honor this value.

    +
    marker?: unknown

    Value from a previous paginated response. Resume retrieving data where +that response left off. This value is stable even if there is a change in +the server's range of available ledgers.

    +
    nft_taxon?: number

    Filter NFTs issued by this issuer that have this taxon.

    +
    diff --git a/docs/interfaces/NFTsByIssuerResponse.html b/docs/interfaces/NFTsByIssuerResponse.html new file mode 100644 index 0000000000..1d5d69877f --- /dev/null +++ b/docs/interfaces/NFTsByIssuerResponse.html @@ -0,0 +1,23 @@ +NFTsByIssuerResponse | xrpl

    Interface NFTsByIssuerResponse

    Expected response from an NFTsByIssuerRequest.

    +
    interface NFTsByIssuerResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β issuer: string;
    Β Β Β Β Β Β Β Β limit?: number;
    Β Β Β Β Β Β Β Β marker?: unknown;
    Β Β Β Β Β Β Β Β nft_taxon?: number;
    Β Β Β Β Β Β Β Β nfts: NFToken[];
    Β Β Β Β };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: {
    Β Β Β Β issuer: string;
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    Β Β Β Β nft_taxon?: number;
    Β Β Β Β nfts: NFToken[];
    }

    Type declaration

    • issuer: string

      The unique identifier for the account, most commonly the account's address

      +
    • Optionallimit?: number

      The limit value used in the request.

      +
    • Optionalmarker?: unknown

      Server-defined value indicating the response is paginated. Pass this +to the next call to resume where this call left off.

      +
    • Optionalnft_taxon?: number

      Use to filter NFTs issued by this issuer that have this taxon.

      +
    • nfts: NFToken[]

      A list of NFTs issued by the account. +The order of the NFTs is not associated with the date the NFTs were minted.

      +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/NoRippleCheckRequest.html b/docs/interfaces/NoRippleCheckRequest.html index 2437e1ba4b..11c39392e4 100644 --- a/docs/interfaces/NoRippleCheckRequest.html +++ b/docs/interfaces/NoRippleCheckRequest.html @@ -1,478 +1,40 @@ -NoRippleCheckRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NoRippleCheckRequest

    -
    -

    The noripple_check command provides a quick way to check the status of th +NoRippleCheckRequest | xrpl

    Interface NoRippleCheckRequest

    The noripple_check command provides a quick way to check the status of th default ripple field for an account and the No Ripple flag of its trust lines, compared with the recommended settings. Expects a response in the form of an NoRippleCheckResponse.

    -
    -
    -

    Example

    const noRipple: NoRippleCheckRequest = {
    "id": 0,
    "command": "noripple_check",
    "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
    "role": "gateway",
    "ledger_index": "current",
    "limit": 2,
    "transactions": true
    } -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    account: string
    -

    A unique identifier for the account, most commonly the account's address.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "noripple_check"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    const noRipple: NoRippleCheckRequest = {
    "id": 0,
    "command": "noripple_check",
    "account": "r9cZA1mLK5R5Am25ArfXFmqgNwjZgnfk59",
    "role": "gateway",
    "ledger_index": "current",
    "limit": 2,
    "transactions": true
    } +
    + +
    interface NoRippleCheckRequest {
    Β Β Β Β account: string;
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "noripple_check";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β limit?: number;
    Β Β Β Β role: "user" | "gateway";
    Β Β Β Β transactions?: boolean;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    account: string

    A unique identifier for the account, most commonly the account's address.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "noripple_check"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string to choose a +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string to choose a ledger automatically.

    -
    -
    -
    - -
    limit?: number
    -

    The maximum number of trust line problems to include in the results. +

    limit?: number

    The maximum number of trust line problems to include in the results. Defaults to 300.

    -
    -
    -
    - -
    role: "user" | "gateway"
    -

    Whether the address refers to a gateway or user. Recommendations depend on +

    role: "user" | "gateway"

    Whether the address refers to a gateway or user. Recommendations depend on the role of the account. Issuers must have Default Ripple enabled and must disable No Ripple on all trust lines. Users should have Default Ripple disabled, and should enable No Ripple on all trust lines.

    -
    -
    -
    - -
    transactions?: boolean
    -

    If true, include an array of suggested transactions, as JSON objects, +

    transactions?: boolean

    If true, include an array of suggested transactions, as JSON objects, that you can sign and submit to fix the problems. Defaults to false.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/NoRippleCheckResponse.html b/docs/interfaces/NoRippleCheckResponse.html index c6a1ede8fd..a5b9a371f6 100644 --- a/docs/interfaces/NoRippleCheckResponse.html +++ b/docs/interfaces/NoRippleCheckResponse.html @@ -1,460 +1,26 @@ -NoRippleCheckResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface NoRippleCheckResponse

    -
    -

    Response expected by a NoRippleCheckRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_current_index: number;
    Β Β Β Β problems: string[];
    Β Β Β Β transactions: Object[];
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/OfferCancel.html b/docs/interfaces/OfferCancel.html index a160b01946..6a0e8df99f 100644 --- a/docs/interfaces/OfferCancel.html +++ b/docs/interfaces/OfferCancel.html @@ -1,556 +1,59 @@ -OfferCancel | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface OfferCancel

    -
    -

    An OfferCancel transaction removes an Offer object from the XRP Ledger.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +OfferCancel | xrpl

    Interface OfferCancel

    An OfferCancel transaction removes an Offer object from the XRP Ledger.

    +
    interface OfferCancel {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OfferSequence: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "OfferCancel";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OfferSequence: number
    -

    The sequence number (or Ticket number) of a previous OfferCreate +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OfferSequence: number

    The sequence number (or Ticket number) of a previous OfferCreate transaction. If specified, cancel any offer object in the ledger that was created by that transaction. It is not considered an error if the offer. specified does not exist.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "OfferCancel"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "OfferCancel"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/OfferCreate.html b/docs/interfaces/OfferCreate.html index 9dc251e8fb..835243c51a 100644 --- a/docs/interfaces/OfferCreate.html +++ b/docs/interfaces/OfferCreate.html @@ -1,586 +1,65 @@ -OfferCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface OfferCreate

    -
    -

    An OfferCreate transaction is effectively a limit order . It defines an +OfferCreate | xrpl

    Interface OfferCreate

    An OfferCreate transaction is effectively a limit order . It defines an intent to exchange currencies, and creates an Offer object if not completely. Fulfilled when placed. Offers can be partially fulfilled.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface OfferCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | OfferCreateFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OfferSequence?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TakerGets: Amount;
    Β Β Β Β TakerPays: Amount;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "OfferCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Expiration?: number
    -

    Time after which the offer is no longer active, in seconds since the. +

    Expiration?: number

    Time after which the offer is no longer active, in seconds since the. Ripple Epoch.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | OfferCreateFlagsInterface
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | OfferCreateFlagsInterface

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OfferSequence?: number
    -

    An offer to delete first, specified in the same way as OfferCancel.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OfferSequence?: number

    An offer to delete first, specified in the same way as OfferCancel.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TakerGets: Amount
    -

    The amount and type of currency being provided by the offer creator.

    -
    -
    -
    - -
    TakerPays: Amount
    -

    The amount and type of currency being requested by the offer creator.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TakerGets: Amount

    The amount and type of currency being provided by the offer creator.

    +
    TakerPays: Amount

    The amount and type of currency being requested by the offer creator.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "OfferCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "OfferCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/OfferCreateFlagsInterface.html b/docs/interfaces/OfferCreateFlagsInterface.html index eb2029aa2b..d45195cb06 100644 --- a/docs/interfaces/OfferCreateFlagsInterface.html +++ b/docs/interfaces/OfferCreateFlagsInterface.html @@ -1,403 +1,16 @@ -OfferCreateFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface OfferCreateFlagsInterface

    -
    -

    Map of flags to boolean values representing OfferCreate transaction +OfferCreateFlagsInterface | xrpl

    Interface OfferCreateFlagsInterface

    Map of flags to boolean values representing OfferCreate transaction flags.

    -
    -
    -

    Example

    const tx: OfferCreate = {
    Account: 'rhFcpWDHLqpBmX4ezWiA5VLSS4e1BHqhHd',
    TakerGets: '43000.51',
    TakerPays: '12928290425',
    TransactionType: 'OfferCreate',
    Flags: {
    tfPassive: true,
    tfFillOrKill: true,
    },
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(tx)
    console.log(autofilledTx)
    // {
    // Account: 'rhFcpWDHLqpBmX4ezWiA5VLSS4e1BHqhHd',
    // TakerGets: '43000.51',
    // TakerPays: '12928290425',
    // TransactionType: 'OfferCreate',
    // Flags: 327680,
    // Sequence: 21970384,
    // Fee: '12',
    // LastLedgerSequence: 21970404
    // } -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • OfferCreateFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfFillOrKill?: boolean
    -
    - -
    tfImmediateOrCancel?: boolean
    -
    - -
    tfPassive?: boolean
    -
    - -
    tfSell?: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    const tx: OfferCreate = {
    Account: 'rhFcpWDHLqpBmX4ezWiA5VLSS4e1BHqhHd',
    TakerGets: '43000.51',
    TakerPays: '12928290425',
    TransactionType: 'OfferCreate',
    Flags: {
    tfPassive: true,
    tfFillOrKill: true,
    },
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(tx)
    console.log(autofilledTx)
    // {
    // Account: 'rhFcpWDHLqpBmX4ezWiA5VLSS4e1BHqhHd',
    // TakerGets: '43000.51',
    // TakerPays: '12928290425',
    // TransactionType: 'OfferCreate',
    // Flags: 327680,
    // Sequence: 21970384,
    // Fee: '12',
    // LastLedgerSequence: 21970404
    // } +
    + +
    interface OfferCreateFlagsInterface {
    Β Β Β Β tfFillOrKill?: boolean;
    Β Β Β Β tfImmediateOrCancel?: boolean;
    Β Β Β Β tfPassive?: boolean;
    Β Β Β Β tfSell?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • OfferCreateFlagsInterface

    Properties

    tfFillOrKill?: boolean
    tfImmediateOrCancel?: boolean
    tfPassive?: boolean
    tfSell?: boolean
    diff --git a/docs/interfaces/OracleDelete.html b/docs/interfaces/OracleDelete.html new file mode 100644 index 0000000000..12d6715fca --- /dev/null +++ b/docs/interfaces/OracleDelete.html @@ -0,0 +1,56 @@ +OracleDelete | xrpl

    Interface OracleDelete

    Delete an Oracle ledger entry.

    +
    interface OracleDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OracleDocumentID: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "OracleDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OracleDocumentID: number

    A unique identifier of the price oracle for the Account.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "OracleDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/OracleSet.html b/docs/interfaces/OracleSet.html new file mode 100644 index 0000000000..6b3fc80b61 --- /dev/null +++ b/docs/interfaces/OracleSet.html @@ -0,0 +1,77 @@ +OracleSet | xrpl

    Interface OracleSet

    Creates a new Oracle ledger entry or updates the fields of an existing one, using the Oracle ID.

    +

    The oracle provider must complete these steps before submitting this transaction:

    +
      +
    1. Create or own the XRPL account in the Owner field and have enough XRP to meet the reserve and transaction fee requirements.
    2. +
    3. Publish the XRPL account public key, so it can be used for verification by dApps.
    4. +
    5. Publish a registry of available price oracles with their unique OracleDocumentID.
    6. +
    +
    interface OracleSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β AssetClass?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LastUpdateTime: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OracleDocumentID: number;
    Β Β Β Β PriceDataSeries: PriceData[];
    Β Β Β Β Provider?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "OracleSet";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β URI?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    AssetClass?: string

    Describes the type of asset, such as "currency", "commodity", or "index". This field is a string, up to 16 ASCII +hex encoded characters (0x20-0x7E). This field is required when creating a new Oracle ledger entry, but is optional +for updates.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    LastUpdateTime: number

    The time the data was last updated, represented as a unix timestamp in seconds.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OracleDocumentID: number

    A unique identifier of the price oracle for the Account.

    +
    PriceDataSeries: PriceData[]

    An array of up to 10 PriceData objects, each representing the price information +for a token pair. More than five PriceData objects require two owner reserves.

    +
    Provider?: string

    An arbitrary value that identifies an oracle provider, such as Chainlink, Band, +or DIA. This field is a string, up to 256 ASCII hex encoded characters (0x20-0x7E). +This field is required when creating a new Oracle ledger entry, but is optional for updates.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "OracleSet"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    URI?: string

    An optional Universal Resource Identifier to reference price data off-chain. This field is limited to 256 bytes.

    +
    diff --git a/docs/interfaces/OrderBookStream.html b/docs/interfaces/OrderBookStream.html index 92c1e38309..aba9a47a03 100644 --- a/docs/interfaces/OrderBookStream.html +++ b/docs/interfaces/OrderBookStream.html @@ -1,452 +1,25 @@ -OrderBookStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface OrderBookStream

    -
    -

    When you subscribe to one or more order books with the books field, you +OrderBookStream | xrpl

    Interface OrderBookStream

    When you subscribe to one or more order books with the books field, you get back any transactions that affect those order books. Has the same format -as a TransactionStream but the transaction can have a owner_funds +as a TransactionStream but the transaction can have a owner_funds field.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • OrderBookStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    engine_result: string
    -
    - -
    engine_result_code: number
    -
    - -
    engine_result_message: string
    -
    - -
    ledger_current_index?: number
    -
    - -
    ledger_hash?: string
    -
    - -
    ledger_index?: number
    -
    - -
    -
    - -
    status: string
    -
    - -
    transaction: Object
    -
    - -
    type: "transaction"
    -
    - -
    validated: boolean
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface OrderBookStream {
    Β Β Β Β engine_result: string;
    Β Β Β Β engine_result_code: number;
    Β Β Β Β engine_result_message: string;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β meta: TransactionMetadata;
    Β Β Β Β status: string;
    Β Β Β Β transaction: (Transaction | ModifiedOfferCreateTransaction) & {
    Β Β Β Β Β Β Β Β date?: number;
    Β Β Β Β Β Β Β Β hash?: string;
    Β Β Β Β };
    Β Β Β Β type: "transaction";
    Β Β Β Β validated: boolean;
    }

    Hierarchy

    • BaseStream
      • OrderBookStream

    Properties

    engine_result: string
    engine_result_code: number
    engine_result_message: string
    ledger_current_index?: number
    ledger_hash?: string
    ledger_index?: number
    status: string
    transaction: (Transaction | ModifiedOfferCreateTransaction) & {
    Β Β Β Β date?: number;
    Β Β Β Β hash?: string;
    }

    Type declaration

    • Optionaldate?: number

      This number measures the number of seconds since the "Ripple Epoch" of January 1, 2000 (00:00 UTC)

      +
    • Optionalhash?: string

      Every signed transaction has a unique "hash" that identifies it. +The transaction hash can be used to look up its final status, which may serve as a "proof of payment"

      +
    type: "transaction"
    validated: boolean
    diff --git a/docs/interfaces/PathFindCloseRequest.html b/docs/interfaces/PathFindCloseRequest.html index 6e1d8b0a79..d8a068dd7c 100644 --- a/docs/interfaces/PathFindCloseRequest.html +++ b/docs/interfaces/PathFindCloseRequest.html @@ -1,411 +1,17 @@ -PathFindCloseRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindCloseRequest

    -
    -

    Stop sending pathfinding information.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BasePathFindRequest -
        -
      • PathFindCloseRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "path_find"
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +PathFindCloseRequest | xrpl

    Interface PathFindCloseRequest

    Stop sending pathfinding information.

    +
    interface PathFindCloseRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "path_find";
    Β Β Β Β id?: string | number;
    Β Β Β Β subcommand: "close";
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy

    • BasePathFindRequest
      • PathFindCloseRequest

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "path_find"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    subcommand: "close"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    subcommand: "close"
    diff --git a/docs/interfaces/PathFindCreateRequest.html b/docs/interfaces/PathFindCreateRequest.html index 3d00c619cf..0d31dce13e 100644 --- a/docs/interfaces/PathFindCreateRequest.html +++ b/docs/interfaces/PathFindCreateRequest.html @@ -1,465 +1,31 @@ -PathFindCreateRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindCreateRequest

    -
    -

    Start sending pathfinding information.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BasePathFindRequest -
        -
      • PathFindCreateRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "path_find"
    -
    - -
    destination_account: string
    -

    Unique address of the account to find a path to.

    -
    -
    -
    - -
    destination_amount: Amount
    -

    Currency Amount that the destination account would receive in a +PathFindCreateRequest | xrpl

    Interface PathFindCreateRequest

    Start sending pathfinding information.

    +
    interface PathFindCreateRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "path_find";
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_amount: Amount;
    Β Β Β Β id?: string | number;
    Β Β Β Β paths?: Path[];
    Β Β Β Β send_max?: Amount;
    Β Β Β Β source_account: string;
    Β Β Β Β subcommand: "create";
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy

    • BasePathFindRequest
      • PathFindCreateRequest

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "path_find"

    The name of the API method.

    +
    destination_account: string

    Unique address of the account to find a path to.

    +
    destination_amount: Amount

    Currency Amount that the destination account would receive in a transaction.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    paths?: Path[]
    -

    Array of arrays of objects, representing payment paths to check. You can +

    paths?: Path[]

    Array of arrays of objects, representing payment paths to check. You can use this to keep updated on changes to particular paths you already know about, or to check the overall cost to make a payment along a certain path.

    -
    -
    -
    - -
    send_max?: Amount
    -

    Currency amount that would be spent in the transaction.

    -
    -
    -
    - -
    source_account: string
    -

    Unique address of the account to find a path from. In other words, the. +

    send_max?: Amount

    Currency amount that would be spent in the transaction.

    +
    source_account: string

    Unique address of the account to find a path from. In other words, the. Account that would be sending a payment.

    -
    -
    -
    - -
    subcommand: "create"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    subcommand: "create"
    diff --git a/docs/interfaces/PathFindPathOption.html b/docs/interfaces/PathFindPathOption.html index 6e845c7c74..2678844f0a 100644 --- a/docs/interfaces/PathFindPathOption.html +++ b/docs/interfaces/PathFindPathOption.html @@ -1,397 +1,15 @@ -PathFindPathOption | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindPathOption

    -
    -

    Hierarchy

    -
      -
    • PathFindPathOption
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    destination_amount?: Amount
    -

    Destination Amount that the destination would receive along this path. +PathFindPathOption | xrpl

    Interface PathFindPathOption

    interface PathFindPathOption {
    Β Β Β Β destination_amount?: Amount;
    Β Β Β Β paths_computed: Path[];
    Β Β Β Β source_amount: Amount;
    }

    Properties

    destination_amount?: Amount

    Destination Amount that the destination would receive along this path. If the send_max field is set, this field will be set.

    -
    -
    -
    - -
    paths_computed: Path[]
    -

    Array of arrays of objects defining payment paths.

    -
    -
    -
    - -
    source_amount: Amount
    -

    Currency Amount that the source would have to send along this path for the. +

    paths_computed: Path[]

    Array of arrays of objects defining payment paths.

    +
    source_amount: Amount

    Currency Amount that the source would have to send along this path for the. Destination to receive the desired amount.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PathFindResponse.html b/docs/interfaces/PathFindResponse.html index fa64ecf681..06dc6191b0 100644 --- a/docs/interfaces/PathFindResponse.html +++ b/docs/interfaces/PathFindResponse.html @@ -1,487 +1,33 @@ -PathFindResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindResponse

    -
    -

    Response expected from a PathFindRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β alternatives: PathFindPathOption[];
    Β Β Β Β closed?: true;
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_amount: Amount;
    Β Β Β Β full_reply: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β source_account: string;
    Β Β Β Β status?: true;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/PathFindStatusRequest.html b/docs/interfaces/PathFindStatusRequest.html index 70cea66792..4e55100b4d 100644 --- a/docs/interfaces/PathFindStatusRequest.html +++ b/docs/interfaces/PathFindStatusRequest.html @@ -1,411 +1,17 @@ -PathFindStatusRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindStatusRequest

    -
    -

    Get the information of the currently-open pathfinding request.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BasePathFindRequest -
        -
      • PathFindStatusRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "path_find"
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +PathFindStatusRequest | xrpl

    Interface PathFindStatusRequest

    Get the information of the currently-open pathfinding request.

    +
    interface PathFindStatusRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "path_find";
    Β Β Β Β id?: string | number;
    Β Β Β Β subcommand: "status";
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy

    • BasePathFindRequest
      • PathFindStatusRequest

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "path_find"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    subcommand: "status"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    subcommand: "status"
    diff --git a/docs/interfaces/PathFindStream.html b/docs/interfaces/PathFindStream.html index 0ecb574169..5a40a8da8e 100644 --- a/docs/interfaces/PathFindStream.html +++ b/docs/interfaces/PathFindStream.html @@ -1,463 +1,30 @@ -PathFindStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathFindStream

    -
    -

    The path_find method searches for a path along which a transaction can +PathFindStream | xrpl

    Interface PathFindStream

    The path_find method searches for a path along which a transaction can possibly be made, and periodically sends updates when the path changes over time.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • PathFindStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    alternatives: [] | {
    Β Β Β Β paths_computed: Path[];
    Β Β Β Β source_amount: Amount;
    }
    -

    Array of objects with suggested paths to take. If empty, then no paths +

    interface PathFindStream {
    Β Β Β Β alternatives: [] | { paths_computed: Path[]; source_amount: Amount };
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_amount: Amount;
    Β Β Β Β full_reply: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β send_max?: Amount;
    Β Β Β Β source_account: string;
    Β Β Β Β type: "path_find";
    }

    Hierarchy

    • BaseStream
      • PathFindStream

    Properties

    alternatives: [] | { paths_computed: Path[]; source_amount: Amount }

    Array of objects with suggested paths to take. If empty, then no paths were found connecting the source and destination accounts.

    -
    -
    -

    Type declaration

    -
      -
    • -
      paths_computed: Path[]
    • -
    • -
      source_amount: Amount
    -
    -
    - -
    destination_account: string
    -

    Unique address of the account that would receive a transaction.

    -
    -
    -
    - -
    destination_amount: Amount
    -

    Currency Amount that the destination would receive in a transaction.

    -
    -
    -
    - -
    full_reply: boolean
    -

    If false, this is the result of an incomplete search. A later reply may +

    destination_account: string

    Unique address of the account that would receive a transaction.

    +
    destination_amount: Amount

    Currency Amount that the destination would receive in a transaction.

    +
    full_reply: boolean

    If false, this is the result of an incomplete search. A later reply may have a better path. If true, then this is the best path found. (It is still -theoretically possible that a better path could exist, but rippled won't +theoretically possible that a better path could exist, but rippled won't find it.) Until you close the pathfinding request, rippled continues to send updates each time a new ledger closes.

    -
    -
    -
    - -
    id: string | number
    -

    The ID provided in the WebSocket request is included again at this level.

    -
    -
    -
    - -
    send_max?: Amount
    -

    Currency Amount that would be spent in the transaction.

    -
    -
    -
    - -
    source_account: string
    -

    Unique address that would send a transaction.

    -
    -
    -
    - -
    type: "path_find"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    id: string | number

    The ID provided in the WebSocket request is included again at this level.

    +
    send_max?: Amount

    Currency Amount that would be spent in the transaction.

    +
    source_account: string

    Unique address that would send a transaction.

    +
    type: "path_find"
    diff --git a/docs/interfaces/PathStep.html b/docs/interfaces/PathStep.html index 7111ca6755..f166374409 100644 --- a/docs/interfaces/PathStep.html +++ b/docs/interfaces/PathStep.html @@ -1,386 +1,10 @@ -PathStep | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PathStep

    -
    -

    Hierarchy

    -
      -
    • PathStep
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    account?: string
    -
    - -
    currency?: string
    -
    - -
    issuer?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +PathStep | xrpl

    Interface PathStep

    interface PathStep {
    Β Β Β Β account?: string;
    Β Β Β Β currency?: string;
    Β Β Β Β issuer?: string;
    }

    Properties

    Properties

    account?: string
    currency?: string
    issuer?: string
    diff --git a/docs/interfaces/Payment.html b/docs/interfaces/Payment.html index 7fc56fa113..6f026381bd 100644 --- a/docs/interfaces/Payment.html +++ b/docs/interfaces/Payment.html @@ -1,626 +1,84 @@ -Payment | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Payment

    -
    -

    A Payment transaction represents a transfer of value from one account to +Payment | xrpl

    Interface Payment

    A Payment transaction represents a transfer of value from one account to another.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface Payment {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: MPTAmount | Amount;
    Β Β Β Β CredentialIDs?: string[];
    Β Β Β Β DeliverMin?: MPTAmount | Amount;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | PaymentFlagsInterface;
    Β Β Β Β InvoiceID?: string;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Paths?: Path[];
    Β Β Β Β SendMax?: MPTAmount | Amount;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "Payment";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The amount of currency to deliver. For non-XRP amounts, the nested field +

    Amount: MPTAmount | Amount

    The amount of currency to deliver. For non-XRP amounts, the nested field names MUST be lower-case. If the tfPartialPayment flag is set, deliver up to this amount instead.

    -
    -
    -
    - -
    DeliverMin?: Amount
    -

    Minimum amount of destination currency this transaction should deliver. +

    CredentialIDs?: string[]

    Credentials associated with the sender of this transaction. +The credentials included must not be expired.

    +
    DeliverMin?: MPTAmount | Amount

    Minimum amount of destination currency this transaction should deliver. Only valid if this is a partial payment. For non-XRP amounts, the nested field names are lower-case.

    -
    -
    -
    - -
    Destination: string
    -

    The unique address of the account receiving the payment.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    Arbitrary tag that identifies the reason for the payment to the +

    Destination: string

    The unique address of the account receiving the payment.

    +
    DestinationTag?: number

    Arbitrary tag that identifies the reason for the payment to the destination, or a hosted recipient to pay.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | PaymentFlagsInterface
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    InvoiceID?: string
    -

    Arbitrary 256-bit hash representing a specific reason or identifier for +

    Flags?: number | PaymentFlagsInterface

    Set of bit-flags for this transaction.

    +
    InvoiceID?: string

    Arbitrary 256-bit hash representing a specific reason or identifier for this payment.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Paths?: Path[]
    -

    Array of payment paths to be used for this transaction. Must be omitted +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Paths?: Path[]

    Array of payment paths to be used for this transaction. Must be omitted for XRP-to-XRP transactions.

    -
    -
    -
    - -
    SendMax?: Amount
    -

    Highest amount of source currency this transaction is allowed to cost, +

    SendMax?: MPTAmount | Amount

    Highest amount of source currency this transaction is allowed to cost, including transfer fees, exchange rates, and slippage . Does not include the XRP destroyed as a cost for submitting the transaction. For non-XRP amounts, the nested field names MUST be lower-case. Must be supplied for cross-currency/cross-issue payments. Must be omitted for XRP-to-XRP Payments.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "Payment"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "Payment"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PaymentChannelClaim.html b/docs/interfaces/PaymentChannelClaim.html index 077020201e..f863a28e92 100644 --- a/docs/interfaces/PaymentChannelClaim.html +++ b/docs/interfaces/PaymentChannelClaim.html @@ -1,604 +1,78 @@ -PaymentChannelClaim | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PaymentChannelClaim

    -
    -

    Claim XRP from a payment channel, adjust the payment channel's expiration, +PaymentChannelClaim | xrpl

    Interface PaymentChannelClaim

    Claim XRP from a payment channel, adjust the payment channel's expiration, or both.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface PaymentChannelClaim {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount?: string;
    Β Β Β Β Balance?: string;
    Β Β Β Β Channel: string;
    Β Β Β Β CredentialIDs?: string[];
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | PaymentChannelClaimFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β PublicKey?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signature?: string;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "PaymentChannelClaim";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount?: string
    -

    The amount of XRP, in drops, authorized by the Signature. This must match +

    Amount?: string

    The amount of XRP, in drops, authorized by the Signature. This must match the amount in the signed message. This is the cumulative amount of XRP that can be dispensed by the channel, including XRP previously redeemed.

    -
    -
    -
    - -
    Balance?: string
    -

    Total amount of XRP, in drops, delivered by this channel after processing +

    Balance?: string

    Total amount of XRP, in drops, delivered by this channel after processing this claim. Required to deliver XRP. Must be more than the total amount delivered by the channel so far, but not greater than the Amount of the signed claim. Must be provided except when closing the channel.

    -
    -
    -
    - -
    Channel: string
    -

    The unique ID of the channel as a 64-character hexadecimal string.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Channel: string

    The unique ID of the channel as a 64-character hexadecimal string.

    +
    CredentialIDs?: string[]

    Credentials associated with the sender of this transaction. +The credentials included must not be expired.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - - -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    PublicKey?: string
    -

    The public key used for the signature, as hexadecimal. This must match the +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    PublicKey?: string

    The public key used for the signature, as hexadecimal. This must match the PublicKey stored in the ledger for the channel. Required unless the sender of the transaction is the source address of the channel and the Signature field is omitted.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signature?: string
    -

    The signature of this claim, as hexadecimal. The signed message contains +

    Signature?: string

    The signature of this claim, as hexadecimal. The signed message contains the channel ID and the amount of the claim. Required unless the sender of the transaction is the source address of the channel.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "PaymentChannelClaim"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "PaymentChannelClaim"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PaymentChannelClaimFlagsInterface.html b/docs/interfaces/PaymentChannelClaimFlagsInterface.html index 4263b85003..bcb29137da 100644 --- a/docs/interfaces/PaymentChannelClaimFlagsInterface.html +++ b/docs/interfaces/PaymentChannelClaimFlagsInterface.html @@ -1,407 +1,28 @@ -PaymentChannelClaimFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PaymentChannelClaimFlagsInterface

    -
    -

    Map of flags to boolean values representing PaymentChannelClaim +PaymentChannelClaimFlagsInterface | xrpl

    Interface PaymentChannelClaimFlagsInterface

    Map of flags to boolean values representing PaymentChannelClaim transaction flags.

    -
    -
    -

    Example

    const paymentChannelClaim: PaymentChannelClaim = {
    Account: 'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj,
    TransactionType: 'PaymentChannelClaim',
    Channel: hashes.hashPaymentChannel(
    'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj',
    'rQGYqiyH5Ue9J96p4E6Qt6AvqxK4sDhnS5',
    21970712,
    ),
    Amount: '100',
    Flags: {
    tfClose: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(paymentChannelClaim)
    console.log(autofilledTx)
    // {
    // Account: 'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj',
    // TransactionType: 'PaymentChannelClaim',
    // Channel: 'FC14BF9245D731DC1749EE0F070765E4EB4E993F8ECEE3D00F7E6E26D6EF98CF',
    // Amount: '100',
    // Flags: 131072,
    // Sequence: 21970713,
    // Fee: '12',
    // LastLedgerSequence: 21970658
    // } -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • PaymentChannelClaimFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    tfClose?: boolean
    -

    Request to close the channel. Only the channel source and destination +

    const paymentChannelClaim: PaymentChannelClaim = {
    Account: 'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj,
    TransactionType: 'PaymentChannelClaim',
    Channel: hashes.hashPaymentChannel(
    'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj',
    'rQGYqiyH5Ue9J96p4E6Qt6AvqxK4sDhnS5',
    21970712,
    ),
    Amount: '100',
    Flags: {
    tfClose: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(paymentChannelClaim)
    console.log(autofilledTx)
    // {
    // Account: 'rMpxZpuy5RBSP47oK2hDWUtk3B5BNQHfGj',
    // TransactionType: 'PaymentChannelClaim',
    // Channel: 'FC14BF9245D731DC1749EE0F070765E4EB4E993F8ECEE3D00F7E6E26D6EF98CF',
    // Amount: '100',
    // Flags: 131072,
    // Sequence: 21970713,
    // Fee: '12',
    // LastLedgerSequence: 21970658
    // } +
    + +
    interface PaymentChannelClaimFlagsInterface {
    Β Β Β Β tfClose?: boolean;
    Β Β Β Β tfRenew?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • PaymentChannelClaimFlagsInterface

    Properties

    Properties

    tfClose?: boolean

    Request to close the channel. Only the channel source and destination addresses can use this flag. This flag closes the channel immediately if it has no more XRP allocated to it after processing the current claim, or if the destination address uses it. If the source address uses this flag when the channel still holds XRP, this schedules the channel to close after SettleDelay seconds have passed. (Specifically, this sets the Expiration of -the channel to the close time of the previous ledger plus the channel's +the channel to the close time of the previous ledger plus the channel's SettleDelay time, unless the channel already has an earlier Expiration time.) If the destination address uses this flag when the channel still holds XRP, any XRP that remains after processing the claim is returned to the source address.

    -
    -
    -
    - -
    tfRenew?: boolean
    -

    Clear the channel's Expiration time. (Expiration is different from the -channel's immutable CancelAfter time.) Only the source address of the +

    tfRenew?: boolean

    Clear the channel's Expiration time. (Expiration is different from the +channel's immutable CancelAfter time.) Only the source address of the payment channel can use this flag.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PaymentChannelCreate.html b/docs/interfaces/PaymentChannelCreate.html index 9c2c2176d8..ca9b4b9e54 100644 --- a/docs/interfaces/PaymentChannelCreate.html +++ b/docs/interfaces/PaymentChannelCreate.html @@ -1,616 +1,79 @@ -PaymentChannelCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PaymentChannelCreate

    -
    -

    Create a unidirectional channel and fund it with XRP. The address sending +PaymentChannelCreate | xrpl

    Interface PaymentChannelCreate

    Create a unidirectional channel and fund it with XRP. The address sending this transaction becomes the "source address" of the payment channel.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface PaymentChannelCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: string;
    Β Β Β Β CancelAfter?: number;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β PublicKey: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SettleDelay: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "PaymentChannelCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: string
    -

    Amount of XRP, in drops, to deduct from the sender's balance and set aside +

    Amount: string

    Amount of XRP, in drops, to deduct from the sender's balance and set aside in this channel. While the channel is open, the XRP can only go to the Destination address. When the channel closes, any unclaimed XRP is returned -to the source address's balance.

    -
    -
    -
    - -
    CancelAfter?: number
    -

    The time, in seconds since the Ripple Epoch, when this channel expires. +to the source address's balance.

    +
    CancelAfter?: number

    The time, in seconds since the Ripple Epoch, when this channel expires. Any transaction that would modify the channel after this time closes the channel without otherwise affecting it. This value is immutable; the channel can be closed earlier than this time but cannot remain open after this time.

    -
    -
    -
    - -
    Destination: string
    -

    Address to receive XRP claims against this channel. This is also known as +

    Destination: string

    Address to receive XRP claims against this channel. This is also known as the "destination address" for the channel.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    Arbitrary tag to further specify the destination for this payment channel, +

    DestinationTag?: number

    Arbitrary tag to further specify the destination for this payment channel, such as a hosted recipient at the destination address.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    PublicKey: string
    -

    The public key of the key pair the source will use to sign claims against +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    PublicKey: string

    The public key of the key pair the source will use to sign claims against this channel in hexadecimal. This can be any secp256k1 or ed25519 public key.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SettleDelay: number
    -

    Amount of time the source address must wait before closing the channel if +

    SettleDelay: number

    Amount of time the source address must wait before closing the channel if it has unclaimed XRP.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "PaymentChannelCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "PaymentChannelCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PaymentChannelFund.html b/docs/interfaces/PaymentChannelFund.html index b88dd2cc67..78753426e1 100644 --- a/docs/interfaces/PaymentChannelFund.html +++ b/docs/interfaces/PaymentChannelFund.html @@ -1,584 +1,71 @@ -PaymentChannelFund | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PaymentChannelFund

    -
    -

    Add additional XRP to an open payment channel, and optionally update the +PaymentChannelFund | xrpl

    Interface PaymentChannelFund

    Add additional XRP to an open payment channel, and optionally update the expiration time of the channel. Only the source address of the channel can use this transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface PaymentChannelFund {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: string;
    Β Β Β Β Channel: string;
    Β Β Β Β Expiration?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "PaymentChannelFund";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: string
    -

    Amount of XRP in drops to add to the channel. Must be a positive amount +

    Amount: string

    Amount of XRP in drops to add to the channel. Must be a positive amount of XRP.

    -
    -
    -
    - -
    Channel: string
    -

    The unique ID of the channel to fund as a 64-character hexadecimal +

    Channel: string

    The unique ID of the channel to fund as a 64-character hexadecimal string.

    -
    -
    -
    - -
    Expiration?: number
    -

    New Expiration time to set for the channel in seconds since the Ripple +

    Expiration?: number

    New Expiration time to set for the channel in seconds since the Ripple Epoch. This must be later than either the current time plus the SettleDelay of the channel, or the existing Expiration of the channel. After the Expiration time, any transaction that would access the channel closes the channel without taking its normal action. Any unspent XRP is returned to the source address when the channel closes. (Expiration is separate from -the channel's immutable CancelAfter time.) For more information, see the +the channel's immutable CancelAfter time.) For more information, see the PayChannel ledger object type.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "PaymentChannelFund"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "PaymentChannelFund"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PaymentFlagsInterface.html b/docs/interfaces/PaymentFlagsInterface.html index db63bd0104..44aa90f8c6 100644 --- a/docs/interfaces/PaymentFlagsInterface.html +++ b/docs/interfaces/PaymentFlagsInterface.html @@ -1,411 +1,24 @@ -PaymentFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PaymentFlagsInterface

    -
    -

    Map of flags to boolean values representing Payment transaction +PaymentFlagsInterface | xrpl

    Interface PaymentFlagsInterface

    Map of flags to boolean values representing Payment transaction flags.

    -
    -
    -

    Example

    const partialPayment: Payment = {
    TransactionType: 'Payment',
    Account: 'rM9WCfJU6udpFkvKThRaFHDMsp7L8rpgN',
    Amount: {
    currency: 'FOO',
    value: '4000',
    issuer: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    },
    Destination: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    Flags: {
    tfPartialPayment: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(partialPayment)
    console.log(autofilledTx)
    // {
    // TransactionType: 'Payment',
    // Account: 'rM9WCfJU6udpFkvKThRaFHDMsp7L8rpgN',
    // Amount: {
    // currency: 'FOO',
    // value: '4000',
    // issuer: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz'
    // },
    // Destination: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    // Flags: 131072,
    // Sequence: 21970996,
    // Fee: '12',
    // LastLedgerSequence: 21971016
    // } -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • PaymentFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfLimitQuality?: boolean
    -

    Only take paths where all the conversions have an input:output ratio that +

    const partialPayment: Payment = {
    TransactionType: 'Payment',
    Account: 'rM9WCfJU6udpFkvKThRaFHDMsp7L8rpgN',
    Amount: {
    currency: 'FOO',
    value: '4000',
    issuer: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    },
    Destination: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    Flags: {
    tfPartialPayment: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(partialPayment)
    console.log(autofilledTx)
    // {
    // TransactionType: 'Payment',
    // Account: 'rM9WCfJU6udpFkvKThRaFHDMsp7L8rpgN',
    // Amount: {
    // currency: 'FOO',
    // value: '4000',
    // issuer: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz'
    // },
    // Destination: 'rPzwM2JfCSDjhbesdTCqFjWWdK7eFtTwZz',
    // Flags: 131072,
    // Sequence: 21970996,
    // Fee: '12',
    // LastLedgerSequence: 21971016
    // } +
    + +
    interface PaymentFlagsInterface {
    Β Β Β Β tfLimitQuality?: boolean;
    Β Β Β Β tfNoRippleDirect?: boolean;
    Β Β Β Β tfPartialPayment?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • PaymentFlagsInterface

    Properties

    tfLimitQuality?: boolean

    Only take paths where all the conversions have an input:output ratio that is equal or better than the ratio of Amount:SendMax. See Limit Quality for details.

    -
    -
    -
    - -
    tfNoDirectRipple?: boolean
    -

    Do not use the default path; only use paths included in the Paths field. +

    tfNoRippleDirect?: boolean

    Do not use the default path; only use paths included in the Paths field. This is intended to force the transaction to take arbitrage opportunities. Most clients do not need this.

    -
    -
    -
    - -
    tfPartialPayment?: boolean
    -

    If the specified Amount cannot be sent without spending more than SendMax, +

    tfPartialPayment?: boolean

    If the specified Amount cannot be sent without spending more than SendMax, reduce the received amount instead of failing outright. See Partial. Payments for more details.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PeerStatusStream.html b/docs/interfaces/PeerStatusStream.html index d9febd6610..3d64af7936 100644 --- a/docs/interfaces/PeerStatusStream.html +++ b/docs/interfaces/PeerStatusStream.html @@ -1,442 +1,24 @@ -PeerStatusStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PeerStatusStream

    -
    -

    The admin-only peer_status stream reports a large amount of information on +PeerStatusStream | xrpl

    Interface PeerStatusStream

    The admin-only peer_status stream reports a large amount of information on the activities of other rippled servers to which this server is connected, in particular their status in the consensus process.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • PeerStatusStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    action: "CLOSING_LEDGER" | "ACCEPTED_LEDGER" | "SWITCHED_LEDGER" | "LOST_SYNC"
    -

    The type of event that prompted this message. See Peer Status Events for +

    interface PeerStatusStream {
    Β Β Β Β action:
    Β Β Β Β Β Β Β Β | "CLOSING_LEDGER"
    Β Β Β Β Β Β Β Β | "ACCEPTED_LEDGER"
    Β Β Β Β Β Β Β Β | "SWITCHED_LEDGER"
    Β Β Β Β Β Β Β Β | "LOST_SYNC";
    Β Β Β Β date: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β ledger_index_max?: number;
    Β Β Β Β ledger_index_min?: number;
    Β Β Β Β type: "peerStatusChange";
    }

    Hierarchy

    • BaseStream
      • PeerStatusStream

    Properties

    action: "CLOSING_LEDGER" | "ACCEPTED_LEDGER" | "SWITCHED_LEDGER" | "LOST_SYNC"

    The type of event that prompted this message. See Peer Status Events for possible values.

    -
    -
    -
    - -
    date: number
    -

    The time this event occurred, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    The identifying Hash of a ledger version to which this message pertains.

    -
    -
    -
    - -
    ledger_index?: number
    -

    The Ledger Index of a ledger version to which this message pertains.

    -
    -
    -
    - -
    ledger_index_max?: number
    -

    The largest Ledger Index the peer has currently available.

    -
    -
    -
    - -
    ledger_index_min?: number
    -

    The smallest Ledger Index the peer has currently available.

    -
    -
    -
    - -
    type: "peerStatusChange"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    date: number

    The time this event occurred, in seconds since the Ripple Epoch.

    +
    ledger_hash?: string

    The identifying Hash of a ledger version to which this message pertains.

    +
    ledger_index?: number

    The Ledger Index of a ledger version to which this message pertains.

    +
    ledger_index_max?: number

    The largest Ledger Index the peer has currently available.

    +
    ledger_index_min?: number

    The smallest Ledger Index the peer has currently available.

    +
    type: "peerStatusChange"
    diff --git a/docs/interfaces/PermissionedDomainDelete.html b/docs/interfaces/PermissionedDomainDelete.html new file mode 100644 index 0000000000..8907d65052 --- /dev/null +++ b/docs/interfaces/PermissionedDomainDelete.html @@ -0,0 +1,55 @@ +PermissionedDomainDelete | xrpl

    Interface PermissionedDomainDelete

    Every transaction has the same set of common fields.

    +
    interface PermissionedDomainDelete {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β DomainID: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "PermissionedDomainDelete";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    DomainID: string
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "PermissionedDomainDelete"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/PermissionedDomainSet.html b/docs/interfaces/PermissionedDomainSet.html new file mode 100644 index 0000000000..c2675e6ba6 --- /dev/null +++ b/docs/interfaces/PermissionedDomainSet.html @@ -0,0 +1,56 @@ +PermissionedDomainSet | xrpl

    Interface PermissionedDomainSet

    Every transaction has the same set of common fields.

    +
    interface PermissionedDomainSet {
    Β Β Β Β AcceptedCredentials: AuthorizeCredential[];
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β DomainID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "PermissionedDomainSet";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    AcceptedCredentials: AuthorizeCredential[]
    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches +the provided hash.

    +
    DomainID?: string
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for +distributing this transaction to the network. Some transaction types have +different minimum requirements.

    +
    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field +places a strict upper limit on how long the transaction can wait to be +validated or rejected.

    +
    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction +is only valid if the Sequence number is exactly 1 greater than the previous +transaction from the same account. The special case 0 means the transaction +is using a Ticket instead.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this +transaction.

    +
    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key +used to sign this transaction. If an empty string, indicates a +multi-signature is present in the Signers field instead.

    +
    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender +on whose behalf this transaction is made. Conventionally, a refund should +specify the initial payment's SourceTag as the refund payment's +DestinationTag.

    +
    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If +this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    +
    TransactionType: "PermissionedDomainSet"

    The type of transaction. Valid types include: Payment, OfferCreate, +TrustSet, and many others.

    +
    TxnSignature?: string

    The signature that verifies this transaction as originating from the +account it says it is from.

    +
    diff --git a/docs/interfaces/PingRequest.html b/docs/interfaces/PingRequest.html index cbf615d71e..1d61385535 100644 --- a/docs/interfaces/PingRequest.html +++ b/docs/interfaces/PingRequest.html @@ -1,407 +1,17 @@ -PingRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PingRequest

    -
    -

    The ping command returns an acknowledgement, so that clients can test the +PingRequest | xrpl

    Interface PingRequest

    The ping command returns an acknowledgement, so that clients can test the connection status and latency. Expects a response in the form of a PingResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "ping"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface PingRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "ping";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "ping"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/PingResponse.html b/docs/interfaces/PingResponse.html index fafc2bb068..7934140c38 100644 --- a/docs/interfaces/PingResponse.html +++ b/docs/interfaces/PingResponse.html @@ -1,442 +1,16 @@ -PingResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface PingResponse

    -
    -

    Response expected from a PingRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β role?: string;
    Β Β Β Β unlimited?: boolean;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Optional role?: string
    • -
    • -
      Optional unlimited?: boolean
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +PingResponse | xrpl

    Interface PingResponse

    Response expected from a PingRequest.

    +
    interface PingResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { role?: string; unlimited?: boolean };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { role?: string; unlimited?: boolean }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/PriceData.html b/docs/interfaces/PriceData.html new file mode 100644 index 0000000000..0416460e90 --- /dev/null +++ b/docs/interfaces/PriceData.html @@ -0,0 +1,18 @@ +PriceData | xrpl

    Interface PriceData

    A PriceData object represents the price information for a token pair.

    +
    interface PriceData {
    Β Β Β Β PriceData: {
    Β Β Β Β Β Β Β Β AssetPrice?: string | number;
    Β Β Β Β Β Β Β Β BaseAsset: string;
    Β Β Β Β Β Β Β Β QuoteAsset: string;
    Β Β Β Β Β Β Β Β Scale?: number;
    Β Β Β Β };
    }

    Properties

    Properties

    PriceData: {
    Β Β Β Β AssetPrice?: string | number;
    Β Β Β Β BaseAsset: string;
    Β Β Β Β QuoteAsset: string;
    Β Β Β Β Scale?: number;
    }

    Type declaration

    • OptionalAssetPrice?: string | number

      The asset price after applying the Scale precision level. It's not included if the last update transaction didn't include +the BaseAsset/QuoteAsset pair.

      +
    • BaseAsset: string

      The primary asset in a trading pair. Any valid identifier, such as a stock symbol, bond CUSIP, or currency code is allowed. +For example, in the BTC/USD pair, BTC is the base asset; in 912810RR9/BTC, 912810RR9 is the base asset.

      +
    • QuoteAsset: string

      The quote asset in a trading pair. The quote asset denotes the price of one unit of the base asset. For example, in the +BTC/USD pair,BTC is the base asset; in 912810RR9/BTC, 912810RR9 is the base asset.

      +
    • OptionalScale?: number

      The scaling factor to apply to an asset price. For example, if Scale is 6 and original price is 0.155, then the scaled +price is 155000. Valid scale ranges are 0-10. It's not included if the last update transaction didn't include the +BaseAsset/QuoteAsset pair.

      +
    diff --git a/docs/interfaces/RandomRequest.html b/docs/interfaces/RandomRequest.html index e62c25c373..ecc22ab107 100644 --- a/docs/interfaces/RandomRequest.html +++ b/docs/interfaces/RandomRequest.html @@ -1,408 +1,18 @@ -RandomRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RandomRequest

    -
    -

    The random command provides a random number to be used as a source of +RandomRequest | xrpl

    Interface RandomRequest

    The random command provides a random number to be used as a source of entropy for random number generation by clients. Expects a response in the form of a RandomResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "random"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface RandomRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "random";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "random"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/RandomResponse.html b/docs/interfaces/RandomResponse.html index 4fade95d98..3186bb855e 100644 --- a/docs/interfaces/RandomResponse.html +++ b/docs/interfaces/RandomResponse.html @@ -1,440 +1,16 @@ -RandomResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RandomResponse

    -
    -

    Response expected from a RandomRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β random: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      random: string
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RandomResponse | xrpl

    Interface RandomResponse

    Response expected from a RandomRequest.

    +
    interface RandomResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { random: string };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { random: string }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/ResponseOnlyTxInfo.html b/docs/interfaces/ResponseOnlyTxInfo.html index 4b19a42a37..71ee065634 100644 --- a/docs/interfaces/ResponseOnlyTxInfo.html +++ b/docs/interfaces/ResponseOnlyTxInfo.html @@ -1,411 +1,20 @@ -ResponseOnlyTxInfo | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ResponseOnlyTxInfo

    -
    -

    This information is added to Transactions in request responses, but is not part +ResponseOnlyTxInfo | xrpl

    Interface ResponseOnlyTxInfo

    This information is added to Transactions in request responses, but is not part of the canonical Transaction information on ledger. These fields are denoted with lowercase letters to indicate this in the rippled responses.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • ResponseOnlyTxInfo
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    date?: number
    -

    The date/time when this transaction was included in a validated ledger.

    -
    -
    -
    - -
    hash?: string
    -

    An identifying hash value unique to this transaction, as a hex string.

    -
    -
    -
    - -
    inLedger?: number
    -
    -

    Deprecated

    Alias for ledger_index.

    -
    -
    - -
    ledger_index?: number
    -

    The sequence number of the ledger that included this transaction.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface ResponseOnlyTxInfo {
    Β Β Β Β date?: number;
    Β Β Β Β hash?: string;
    Β Β Β Β inLedger?: number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: number;
    }

    Properties

    date?: number

    The date/time when this transaction was included in a validated ledger.

    +
    hash?: string

    An identifying hash value unique to this transaction, as a hex string.

    +
    inLedger?: number

    Alias for ledger_index.

    +
    ledger_hash?: string

    The hash of the ledger included this transaction.

    +
    ledger_index?: number

    The sequence number of the ledger that included this transaction.

    +
    diff --git a/docs/interfaces/ResponseWarning.html b/docs/interfaces/ResponseWarning.html index ae70726ad9..d1c4461d7b 100644 --- a/docs/interfaces/ResponseWarning.html +++ b/docs/interfaces/ResponseWarning.html @@ -1,391 +1,10 @@ -ResponseWarning | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ResponseWarning

    -
    -

    Hierarchy

    -
      -
    • ResponseWarning
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    details?: {
    Β Β Β Β [key: string]: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      [key: string]: string
    -
    - -
    id: number
    -
    - -
    message: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ResponseWarning | xrpl

    Interface ResponseWarning

    interface ResponseWarning {
    Β Β Β Β details?: { [key: string]: string };
    Β Β Β Β id: number;
    Β Β Β Β message: string;
    }

    Properties

    Properties

    details?: { [key: string]: string }
    id: number
    message: string
    diff --git a/docs/interfaces/RipplePathFindPathOption.html b/docs/interfaces/RipplePathFindPathOption.html index 07e1ecb5ad..1f433aa892 100644 --- a/docs/interfaces/RipplePathFindPathOption.html +++ b/docs/interfaces/RipplePathFindPathOption.html @@ -1,386 +1,12 @@ -RipplePathFindPathOption | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RipplePathFindPathOption

    -
    -

    Hierarchy

    -
      -
    • RipplePathFindPathOption
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    paths_computed: Path[]
    -

    Array of arrays of objects defining payment paths.

    -
    -
    -
    - -
    source_amount: Amount
    -

    Currency amount that the source would have to send along this path for the +RipplePathFindPathOption | xrpl

    Interface RipplePathFindPathOption

    interface RipplePathFindPathOption {
    Β Β Β Β paths_computed: Path[];
    Β Β Β Β source_amount: Amount;
    }

    Properties

    paths_computed: Path[]

    Array of arrays of objects defining payment paths.

    +
    source_amount: Amount

    Currency amount that the source would have to send along this path for the destination to receive the desired amount.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/RipplePathFindRequest.html b/docs/interfaces/RipplePathFindRequest.html index 6e3677d28b..01fb8dccf7 100644 --- a/docs/interfaces/RipplePathFindRequest.html +++ b/docs/interfaces/RipplePathFindRequest.html @@ -1,485 +1,36 @@ -RipplePathFindRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RipplePathFindRequest

    -
    -

    The ripple_path_find method is a simplified version of the path_find method +RipplePathFindRequest | xrpl

    Interface RipplePathFindRequest

    The ripple_path_find method is a simplified version of the path_find method that provides a single response with a payment path you can use right away. Expects a response in the form of a RipplePathFindResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • RipplePathFindRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "ripple_path_find"
    -

    The name of the API method.

    -
    -
    -
    - -
    destination_account: string
    -

    Unique address of the account that would receive funds in a transaction.

    -
    -
    -
    - -
    destination_amount: Amount
    -

    Currency Amount that the destination account would receive in a +

    interface RipplePathFindRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "ripple_path_find";
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_amount: Amount;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β send_max?: Amount;
    Β Β Β Β source_account: string;
    Β Β Β Β source_currencies?: SourceCurrencyAmount[];
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "ripple_path_find"

    The name of the API method.

    +
    destination_account: string

    Unique address of the account that would receive funds in a transaction.

    +
    destination_amount: Amount

    Currency Amount that the destination account would receive in a transaction.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    send_max?: Amount
    -

    Currency Amount that would be spent in the transaction. Cannot be used +

    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    send_max?: Amount

    Currency Amount that would be spent in the transaction. Cannot be used with source_currencies.

    -
    -
    -
    - -
    source_account: string
    -

    Unique address of the account that would send funds in a transaction.

    -
    -
    -
    - -
    source_currencies?: SourceCurrencyAmount[]
    -

    Array of currencies that the source account might want to spend. Each +

    source_account: string

    Unique address of the account that would send funds in a transaction.

    +
    source_currencies?: SourceCurrencyAmount[]

    Array of currencies that the source account might want to spend. Each entry in the array should be a JSON object with a mandatory currency field and optional issuer field, like how currency amounts are specified.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/RipplePathFindResponse.html b/docs/interfaces/RipplePathFindResponse.html index 759cb92a6e..e3e1eac3ba 100644 --- a/docs/interfaces/RipplePathFindResponse.html +++ b/docs/interfaces/RipplePathFindResponse.html @@ -1,469 +1,23 @@ -RipplePathFindResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface RipplePathFindResponse

    -
    -

    Response expected from a RipplePathFindRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β alternatives: RipplePathFindPathOption[];
    Β Β Β Β destination_account: string;
    Β Β Β Β destination_amount: Amount;
    Β Β Β Β destination_currencies: string[];
    Β Β Β Β full_reply?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_current_index?: number;
    Β Β Β Β source_account: string;
    Β Β Β Β validated: boolean;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/ServerDefinitionsRequest.html b/docs/interfaces/ServerDefinitionsRequest.html index 134f016097..f5bc786efc 100644 --- a/docs/interfaces/ServerDefinitionsRequest.html +++ b/docs/interfaces/ServerDefinitionsRequest.html @@ -1,418 +1,20 @@ -ServerDefinitionsRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerDefinitionsRequest

    -
    -

    The server_definitions method retrieves information about the definition +ServerDefinitionsRequest | xrpl

    Interface ServerDefinitionsRequest

    The server_definitions method retrieves information about the definition enums available in this rippled node. Expects a response in the form of a ServerDefinitionsResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "server_definitions"
    -

    The name of the API method.

    -
    -
    -
    - -
    hash?: string
    -

    The hash of a server_definitions response.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface ServerDefinitionsRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "server_definitions";
    Β Β Β Β hash?: string;
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "server_definitions"

    The name of the API method.

    +
    hash?: string

    The hash of a server_definitions response.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ServerDefinitionsResponse.html b/docs/interfaces/ServerDefinitionsResponse.html index 1fff77f4b1..e0e712cb7f 100644 --- a/docs/interfaces/ServerDefinitionsResponse.html +++ b/docs/interfaces/ServerDefinitionsResponse.html @@ -1,435 +1,16 @@ -ServerDefinitionsResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerDefinitionsResponse

    -
    -

    Response expected from an ServerDefinitionsRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: Object
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ServerDefinitionsResponse | xrpl

    Interface ServerDefinitionsResponse

    Response expected from an ServerDefinitionsRequest.

    +
    interface ServerDefinitionsResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: { hash: string } & (
    Β Β Β Β Β Β Β Β | {
    Β Β Β Β Β Β Β Β Β Β Β Β FIELDS: [
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β string,
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isSerialized: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isSigningField: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isVLEncoded: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β nth: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β type: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β },
    Β Β Β Β Β Β Β Β Β Β Β Β ][];
    Β Β Β Β Β Β Β Β Β Β Β Β LEDGER_ENTRY_TYPES: Record<string, number>;
    Β Β Β Β Β Β Β Β Β Β Β Β TRANSACTION_RESULTS: Record<string, number>;
    Β Β Β Β Β Β Β Β Β Β Β Β TRANSACTION_TYPES: Record<string, number>;
    Β Β Β Β Β Β Β Β Β Β Β Β TYPES: Record<string, number>;
    Β Β Β Β Β Β Β Β }
    Β Β Β Β Β Β Β Β | {
    Β Β Β Β Β Β Β Β Β Β Β Β FIELDS?: undefined;
    Β Β Β Β Β Β Β Β Β Β Β Β LEDGER_ENTRY_TYPES?: undefined;
    Β Β Β Β Β Β Β Β Β Β Β Β TRANSACTION_RESULTS?: undefined;
    Β Β Β Β Β Β Β Β Β Β Β Β TRANSACTION_TYPES?: undefined;
    Β Β Β Β Β Β Β Β Β Β Β Β TYPES?: undefined;
    Β Β Β Β Β Β Β Β }
    Β Β Β Β );
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: { hash: string } & (
    Β Β Β Β | {
    Β Β Β Β Β Β Β Β FIELDS: [
    Β Β Β Β Β Β Β Β Β Β Β Β string,
    Β Β Β Β Β Β Β Β Β Β Β Β {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isSerialized: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isSigningField: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β isVLEncoded: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β nth: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β type: string;
    Β Β Β Β Β Β Β Β Β Β Β Β },
    Β Β Β Β Β Β Β Β ][];
    Β Β Β Β Β Β Β Β LEDGER_ENTRY_TYPES: Record<string, number>;
    Β Β Β Β Β Β Β Β TRANSACTION_RESULTS: Record<string, number>;
    Β Β Β Β Β Β Β Β TRANSACTION_TYPES: Record<string, number>;
    Β Β Β Β Β Β Β Β TYPES: Record<string, number>;
    Β Β Β Β }
    Β Β Β Β | {
    Β Β Β Β Β Β Β Β FIELDS?: undefined;
    Β Β Β Β Β Β Β Β LEDGER_ENTRY_TYPES?: undefined;
    Β Β Β Β Β Β Β Β TRANSACTION_RESULTS?: undefined;
    Β Β Β Β Β Β Β Β TRANSACTION_TYPES?: undefined;
    Β Β Β Β Β Β Β Β TYPES?: undefined;
    Β Β Β Β }
    )
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/ServerInfoRequest.html b/docs/interfaces/ServerInfoRequest.html index a4009452f0..9e633ec139 100644 --- a/docs/interfaces/ServerInfoRequest.html +++ b/docs/interfaces/ServerInfoRequest.html @@ -1,408 +1,18 @@ -ServerInfoRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerInfoRequest

    -
    -

    The server_info command asks the server for a human-readable version of +ServerInfoRequest | xrpl

    Interface ServerInfoRequest

    The server_info command asks the server for a human-readable version of various information about the rippled server being queried. Expects a response in the form of a ServerInfoResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "server_info"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface ServerInfoRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "server_info";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "server_info"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ServerInfoResponse.html b/docs/interfaces/ServerInfoResponse.html index 62e478209d..5c31fbedf5 100644 --- a/docs/interfaces/ServerInfoResponse.html +++ b/docs/interfaces/ServerInfoResponse.html @@ -1,721 +1,16 @@ -ServerInfoResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerInfoResponse

    -
    -

    Response expected from a ServerInfoRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β info: {
    Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β hostid: string;
    Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β last_close: {
    Β Β Β Β Β Β Β Β Β Β Β Β converge_time_s: number;
    Β Β Β Β Β Β Β Β Β Β Β Β proposers: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β load?: {
    Β Β Β Β Β Β Β Β Β Β Β Β job_types: JobType[];
    Β Β Β Β Β Β Β Β Β Β Β Β threads: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β load_factor?: number;
    Β Β Β Β Β Β Β Β load_factor_cluster?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β load_factor_local?: number;
    Β Β Β Β Β Β Β Β load_factor_net?: number;
    Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β network_id?: number;
    Β Β Β Β Β Β Β Β network_ledger?: "waiting";
    Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β ports: ServerPort[];
    Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β validator_list?: {
    Β Β Β Β Β Β Β Β Β Β Β Β count: number;
    Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
    Β Β Β Β Β Β Β Β Β Β Β Β status: "active" | "expired" | "unknown";
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validator_list_expires?: string;
    Β Β Β Β };
    }
    -
    -

    Type declaration

    -
      -
    • -
      info: {
      Β Β Β Β amendment_blocked?: boolean;
      Β Β Β Β build_version: string;
      Β Β Β Β closed_ledger?: {
      Β Β Β Β Β Β Β Β age: number;
      Β Β Β Β Β Β Β Β base_fee_xrp: number;
      Β Β Β Β Β Β Β Β hash: string;
      Β Β Β Β Β Β Β Β reserve_base_xrp: number;
      Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
      Β Β Β Β Β Β Β Β seq: number;
      Β Β Β Β };
      Β Β Β Β complete_ledgers: string;
      Β Β Β Β hostid: string;
      Β Β Β Β io_latency_ms: number;
      Β Β Β Β jq_trans_overflow: string;
      Β Β Β Β last_close: {
      Β Β Β Β Β Β Β Β converge_time_s: number;
      Β Β Β Β Β Β Β Β proposers: number;
      Β Β Β Β };
      Β Β Β Β load?: {
      Β Β Β Β Β Β Β Β job_types: JobType[];
      Β Β Β Β Β Β Β Β threads: number;
      Β Β Β Β };
      Β Β Β Β load_factor?: number;
      Β Β Β Β load_factor_cluster?: number;
      Β Β Β Β load_factor_fee_escalation?: number;
      Β Β Β Β load_factor_fee_queue?: number;
      Β Β Β Β load_factor_local?: number;
      Β Β Β Β load_factor_net?: number;
      Β Β Β Β load_factor_server?: number;
      Β Β Β Β network_id?: number;
      Β Β Β Β network_ledger?: "waiting";
      Β Β Β Β peer_disconnects?: string;
      Β Β Β Β peer_disconnects_resources?: string;
      Β Β Β Β peers: number;
      Β Β Β Β ports: ServerPort[];
      Β Β Β Β pubkey_node: string;
      Β Β Β Β pubkey_validator?: string;
      Β Β Β Β server_state: ServerState;
      Β Β Β Β server_state_duration_us: string;
      Β Β Β Β state_accounting: StateAccountingFinal;
      Β Β Β Β time: string;
      Β Β Β Β uptime: number;
      Β Β Β Β validated_ledger?: {
      Β Β Β Β Β Β Β Β age: number;
      Β Β Β Β Β Β Β Β base_fee_xrp: number;
      Β Β Β Β Β Β Β Β hash: string;
      Β Β Β Β Β Β Β Β reserve_base_xrp: number;
      Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
      Β Β Β Β Β Β Β Β seq: number;
      Β Β Β Β };
      Β Β Β Β validation_quorum: number;
      Β Β Β Β validator_list?: {
      Β Β Β Β Β Β Β Β count: number;
      Β Β Β Β Β Β Β Β expiration: string;
      Β Β Β Β Β Β Β Β status: "active" | "expired" | "unknown";
      Β Β Β Β };
      Β Β Β Β validator_list_expires?: string;
      }
      -
        -
      • -
        Optional amendment_blocked?: boolean
        -

        If true, this server is amendment blocked. If the server is not -amendment blocked, the response omits this field.

        -
        -
      • -
      • -
        build_version: string
        -

        The version number of the running rippled version.

        -
        -
      • -
      • -
        Optional closed_ledger?: {
        Β Β Β Β age: number;
        Β Β Β Β base_fee_xrp: number;
        Β Β Β Β hash: string;
        Β Β Β Β reserve_base_xrp: number;
        Β Β Β Β reserve_inc_xrp: number;
        Β Β Β Β seq: number;
        }
        -

        Information on the most recently closed ledger that has not been -validated by consensus. If the most recently validated ledger is -available, the response omits this field and includes -validated_ledger instead. The member fields are the same as the. -validated_ledger field.

        -
        -
        -
          -
        • -
          age: number
        • -
        • -
          base_fee_xrp: number
        • -
        • -
          hash: string
        • -
        • -
          reserve_base_xrp: number
        • -
        • -
          reserve_inc_xrp: number
        • -
        • -
          seq: number
      • -
      • -
        complete_ledgers: string
        -

        Range expression indicating the sequence numbers of the ledger -versions the local rippled has in its database.

        -
        -
      • -
      • -
        hostid: string
        -

        On an admin request, returns the hostname of the server running the -rippled instance; otherwise, returns a single RFC-1751 word based on -the node public key.

        -
        -
      • -
      • -
        io_latency_ms: number
        -

        Amount of time spent waiting for I/O operations, in milliseconds. If -this number is not very, very low, then the rippled server is probably -having serious load issues.

        -
        -
      • -
      • -
        jq_trans_overflow: string
        -

        The number of times (since starting up) that this server has had over -250 transactions waiting to be processed at once. A large number here -may mean that your server is unable to handle the transaction load of -the XRP Ledger network.

        -
        -
      • -
      • -
        last_close: {
        Β Β Β Β converge_time_s: number;
        Β Β Β Β proposers: number;
        }
        -

        Information about the last time the server closed a ledger, including -the amount of time it took to reach a consensus and the number of -trusted validators participating.

        -
        -
        -
          -
        • -
          converge_time_s: number
          -

          The amount of time it took to reach a consensus on the most recently -validated ledger version, in seconds.

          -
          -
        • -
        • -
          proposers: number
          -

          How many trusted validators the server considered (including itself, -if configured as a validator) in the consensus process for the most -recently validated ledger version.

          -
          -
      • -
      • -
        Optional load?: {
        Β Β Β Β job_types: JobType[];
        Β Β Β Β threads: number;
        }
        -

        (Admin only) Detailed information about the current load state of the -server.

        -
        -
        -
          -
        • -
          job_types: JobType[]
          -

          (Admin only) Information about the rate of different types of jobs -the server is doing and how much time it spends on each.

          -
          -
        • -
        • -
          threads: number
          -

          (Admin only) The number of threads in the server's main job pool.

          -
          -
      • -
      • -
        Optional load_factor?: number
        -

        The load-scaled open ledger transaction cost the server is currently -enforcing, as a multiplier on the base transaction cost. For example, -at 1000 load factor and a reference transaction cost of 10 drops of -XRP, the load-scaled transaction cost is 10,000 drops (0.01 XRP). The -load factor is determined by the highest of the individual server's -load factor, the cluster's load factor, the open ledger cost and the -overall network's load factor.

        -
        -
      • -
      • -
        Optional load_factor_cluster?: number
        -

        Current multiplier to the transaction cost based on load to servers -in this cluster.

        -
        -
      • -
      • -
        Optional load_factor_fee_escalation?: number
        -

        The current multiplier to the transaction cost that a transaction must -pay to get into the open ledger.

        -
        -
      • -
      • -
        Optional load_factor_fee_queue?: number
        -

        The current multiplier to the transaction cost that a transaction must -pay to get into the queue, if the queue is full.

        -
        -
      • -
      • -
        Optional load_factor_local?: number
        -

        Current multiplier to the transaction cost based on -load to this server.

        -
        -
      • -
      • -
        Optional load_factor_net?: number
        -

        Current multiplier to the transaction cost being used by the rest of -the network.

        -
        -
      • -
      • -
        Optional load_factor_server?: number
        -

        The load factor the server is enforcing, not including the open ledger -cost.

        -
        -
      • -
      • -
        Optional network_id?: number
        -

        The network id of the server.

        -
        -
      • -
      • -
        Optional network_ledger?: "waiting"
      • -
      • -
        Optional peer_disconnects?: string
        -

        The number of peer connections which were severed.

        -
        -
      • -
      • -
        Optional peer_disconnects_resources?: string
        -

        The number of peer connections which were severed due to excess resource consumption.

        -
        -
      • -
      • -
        peers: number
        -

        How many other rippled servers this one is currently connected to.

        -
        -
      • -
      • -
        ports: ServerPort[]
        -

        What Websocket/RPC ports rippled is listening on. This allows crawlers to build a richer topology without needing to -port-scan nodes. For non-admin users (including peers), info about admin ports is excluded.

        -
        -
      • -
      • -
        pubkey_node: string
        -

        Public key used to verify this server for peer-to-peer communications. -This node key pair is automatically generated by the server the first -time it starts up. (If deleted, the server can create a new pair of -Keys.).

        -
        -
      • -
      • -
        Optional pubkey_validator?: string
        -

        Public key used by this node to sign ledger validations.

        -
        -
      • -
      • -
        server_state: ServerState
        -

        A string indicating to what extent the server is participating in the -network.

        -
        -
      • -
      • -
        server_state_duration_us: string
        -

        The number of consecutive microseconds the server has been in the -current state.

        -
        -
      • -
      • -
        state_accounting: StateAccountingFinal
        -

        A map of various server states with information about the time the -server spends in each. This can be useful for tracking the long-term -health of your server's connectivity to the network.

        -
        -
      • -
      • -
        time: string
        -

        The current time in UTC, according to the server's clock.

        -
        -
      • -
      • -
        uptime: number
        -

        Number of consecutive seconds that the server has been operational.

        -
        -
      • -
      • -
        Optional validated_ledger?: {
        Β Β Β Β age: number;
        Β Β Β Β base_fee_xrp: number;
        Β Β Β Β hash: string;
        Β Β Β Β reserve_base_xrp: number;
        Β Β Β Β reserve_inc_xrp: number;
        Β Β Β Β seq: number;
        }
        -

        Information about the most recent fully-validated ledger.

        -
        -
        -
          -
        • -
          age: number
          -

          The time since the ledger was closed, in seconds.

          -
          -
        • -
        • -
          base_fee_xrp: number
          -

          Base fee, in XRP. This may be represented in scientific notation. -Such as 1e-05 for 0.00005.

          -
          -
        • -
        • -
          hash: string
          -

          Unique hash for the ledger, as hexadecimal.

          -
          -
        • -
        • -
          reserve_base_xrp: number
          -

          Minimum amount of XRP (not drops) necessary for every account to. -Keep in reserve .

          -
          -
        • -
        • -
          reserve_inc_xrp: number
          -

          Amount of XRP (not drops) added to the account reserve for each -object an account owns in the ledger.

          -
          -
        • -
        • -
          seq: number
          -

          The ledger index of the latest validated ledger.

          -
          -
      • -
      • -
        validation_quorum: number
        -

        Minimum number of trusted validations required to validate a ledger -version. Some circumstances may cause the server to require more -validations.

        -
        -
      • -
      • -
        Optional validator_list?: {
        Β Β Β Β count: number;
        Β Β Β Β expiration: string;
        Β Β Β Β status: "active" | "expired" | "unknown";
        }
        -
          -
        • -
          count: number
        • -
        • -
          expiration: string
        • -
        • -
          status: "active" | "expired" | "unknown"
      • -
      • -
        Optional validator_list_expires?: string
        -

        Either the human readable time, in UTC, when the current validator -list will expire, the string unknown if the server has yet to load a -published validator list or the string never if the server uses a -static validator list.

        -
        -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ServerInfoResponse | xrpl

    Interface ServerInfoResponse

    Response expected from a ServerInfoRequest.

    +
    interface ServerInfoResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β info: {
    Β Β Β Β Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β Β Β Β Β hostid: string;
    Β Β Β Β Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β Β Β Β Β last_close: { converge_time_s: number; proposers: number };
    Β Β Β Β Β Β Β Β Β Β Β Β load?: { job_types: JobType[]; threads: number };
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_cluster?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_local?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_net?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β network_id?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β network_ledger?: "waiting";
    Β Β Β Β Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β Β Β Β Β ports: ServerPort[];
    Β Β Β Β Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β Β Β Β Β validator_list?: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β count: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β status: "active"
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | "expired"
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β | "unknown";
    Β Β Β Β Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β Β Β Β Β validator_list_expires?: string;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: {
    Β Β Β Β info: {
    Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β hostid: string;
    Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β last_close: { converge_time_s: number; proposers: number };
    Β Β Β Β Β Β Β Β load?: { job_types: JobType[]; threads: number };
    Β Β Β Β Β Β Β Β load_factor?: number;
    Β Β Β Β Β Β Β Β load_factor_cluster?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β load_factor_local?: number;
    Β Β Β Β Β Β Β Β load_factor_net?: number;
    Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β network_id?: number;
    Β Β Β Β Β Β Β Β network_ledger?: "waiting";
    Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β ports: ServerPort[];
    Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc_xrp: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β validator_list?: {
    Β Β Β Β Β Β Β Β Β Β Β Β count: number;
    Β Β Β Β Β Β Β Β Β Β Β Β expiration: string;
    Β Β Β Β Β Β Β Β Β Β Β Β status: "active"
    Β Β Β Β Β Β Β Β Β Β Β Β | "expired"
    Β Β Β Β Β Β Β Β Β Β Β Β | "unknown";
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validator_list_expires?: string;
    Β Β Β Β };
    }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/ServerStateRequest.html b/docs/interfaces/ServerStateRequest.html index 38778c30d0..56d44d8881 100644 --- a/docs/interfaces/ServerStateRequest.html +++ b/docs/interfaces/ServerStateRequest.html @@ -1,409 +1,19 @@ -ServerStateRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerStateRequest

    -
    -

    The server_state command asks the server for various machine-readable -information about the rippled server's current state. The response is almost +ServerStateRequest | xrpl

    Interface ServerStateRequest

    The server_state command asks the server for various machine-readable +information about the rippled server's current state. The response is almost the same as the server_info method, but uses units that are easier to process instead of easier to read.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "server_state"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface ServerStateRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "server_state";
    Β Β Β Β id?: string | number;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "server_state"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/ServerStateResponse.html b/docs/interfaces/ServerStateResponse.html index 38c0d538f7..dafe3cbd98 100644 --- a/docs/interfaces/ServerStateResponse.html +++ b/docs/interfaces/ServerStateResponse.html @@ -1,533 +1,16 @@ -ServerStateResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ServerStateResponse

    -
    -

    Response expected from a ServerStateRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β state: {
    Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β last_close: {
    Β Β Β Β Β Β Β Β Β Β Β Β converge_time: number;
    Β Β Β Β Β Β Β Β Β Β Β Β proposers: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β load?: {
    Β Β Β Β Β Β Β Β Β Β Β Β job_types: JobType[];
    Β Β Β Β Β Β Β Β Β Β Β Β threads: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β load_base: number;
    Β Β Β Β Β Β Β Β load_factor: number;
    Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_reference?: number;
    Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β close_time: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β validator_list_expires?: number;
    Β Β Β Β };
    }
    -
    -

    Type declaration

    -
      -
    • -
      state: {
      Β Β Β Β amendment_blocked?: boolean;
      Β Β Β Β build_version: string;
      Β Β Β Β closed_ledger?: {
      Β Β Β Β Β Β Β Β age: number;
      Β Β Β Β Β Β Β Β base_fee: number;
      Β Β Β Β Β Β Β Β hash: string;
      Β Β Β Β Β Β Β Β reserve_base: number;
      Β Β Β Β Β Β Β Β reserve_inc: number;
      Β Β Β Β Β Β Β Β seq: number;
      Β Β Β Β };
      Β Β Β Β complete_ledgers: string;
      Β Β Β Β io_latency_ms: number;
      Β Β Β Β jq_trans_overflow: string;
      Β Β Β Β last_close: {
      Β Β Β Β Β Β Β Β converge_time: number;
      Β Β Β Β Β Β Β Β proposers: number;
      Β Β Β Β };
      Β Β Β Β load?: {
      Β Β Β Β Β Β Β Β job_types: JobType[];
      Β Β Β Β Β Β Β Β threads: number;
      Β Β Β Β };
      Β Β Β Β load_base: number;
      Β Β Β Β load_factor: number;
      Β Β Β Β load_factor_fee_escalation?: number;
      Β Β Β Β load_factor_fee_queue?: number;
      Β Β Β Β load_factor_fee_reference?: number;
      Β Β Β Β load_factor_server?: number;
      Β Β Β Β peer_disconnects?: string;
      Β Β Β Β peer_disconnects_resources?: string;
      Β Β Β Β peers: number;
      Β Β Β Β pubkey_node: string;
      Β Β Β Β pubkey_validator?: string;
      Β Β Β Β server_state: ServerState;
      Β Β Β Β server_state_duration_us: string;
      Β Β Β Β state_accounting: StateAccountingFinal;
      Β Β Β Β time: string;
      Β Β Β Β uptime: number;
      Β Β Β Β validated_ledger?: {
      Β Β Β Β Β Β Β Β age?: number;
      Β Β Β Β Β Β Β Β base_fee: number;
      Β Β Β Β Β Β Β Β close_time: number;
      Β Β Β Β Β Β Β Β hash: string;
      Β Β Β Β Β Β Β Β reserve_base: number;
      Β Β Β Β Β Β Β Β reserve_inc: number;
      Β Β Β Β Β Β Β Β seq: number;
      Β Β Β Β };
      Β Β Β Β validation_quorum: number;
      Β Β Β Β validator_list_expires?: number;
      }
      -
        -
      • -
        Optional amendment_blocked?: boolean
      • -
      • -
        build_version: string
      • -
      • -
        Optional closed_ledger?: {
        Β Β Β Β age: number;
        Β Β Β Β base_fee: number;
        Β Β Β Β hash: string;
        Β Β Β Β reserve_base: number;
        Β Β Β Β reserve_inc: number;
        Β Β Β Β seq: number;
        }
        -
          -
        • -
          age: number
        • -
        • -
          base_fee: number
        • -
        • -
          hash: string
        • -
        • -
          reserve_base: number
        • -
        • -
          reserve_inc: number
        • -
        • -
          seq: number
      • -
      • -
        complete_ledgers: string
      • -
      • -
        io_latency_ms: number
      • -
      • -
        jq_trans_overflow: string
      • -
      • -
        last_close: {
        Β Β Β Β converge_time: number;
        Β Β Β Β proposers: number;
        }
        -
          -
        • -
          converge_time: number
        • -
        • -
          proposers: number
      • -
      • -
        Optional load?: {
        Β Β Β Β job_types: JobType[];
        Β Β Β Β threads: number;
        }
        -
          -
        • -
          job_types: JobType[]
        • -
        • -
          threads: number
      • -
      • -
        load_base: number
      • -
      • -
        load_factor: number
      • -
      • -
        Optional load_factor_fee_escalation?: number
      • -
      • -
        Optional load_factor_fee_queue?: number
      • -
      • -
        Optional load_factor_fee_reference?: number
      • -
      • -
        Optional load_factor_server?: number
      • -
      • -
        Optional peer_disconnects?: string
      • -
      • -
        Optional peer_disconnects_resources?: string
      • -
      • -
        peers: number
      • -
      • -
        pubkey_node: string
      • -
      • -
        Optional pubkey_validator?: string
      • -
      • -
        server_state: ServerState
      • -
      • -
        server_state_duration_us: string
      • -
      • -
        state_accounting: StateAccountingFinal
      • -
      • -
        time: string
      • -
      • -
        uptime: number
      • -
      • -
        Optional validated_ledger?: {
        Β Β Β Β age?: number;
        Β Β Β Β base_fee: number;
        Β Β Β Β close_time: number;
        Β Β Β Β hash: string;
        Β Β Β Β reserve_base: number;
        Β Β Β Β reserve_inc: number;
        Β Β Β Β seq: number;
        }
        -
          -
        • -
          Optional age?: number
        • -
        • -
          base_fee: number
        • -
        • -
          close_time: number
        • -
        • -
          hash: string
        • -
        • -
          reserve_base: number
        • -
        • -
          reserve_inc: number
        • -
        • -
          seq: number
      • -
      • -
        validation_quorum: number
      • -
      • -
        Optional validator_list_expires?: number
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ServerStateResponse | xrpl

    Interface ServerStateResponse

    Response expected from a ServerStateRequest.

    +
    interface ServerStateResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β state: {
    Β Β Β Β Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β Β Β Β Β last_close: { converge_time: number; proposers: number };
    Β Β Β Β Β Β Β Β Β Β Β Β load?: { job_types: JobType[]; threads: number };
    Β Β Β Β Β Β Β Β Β Β Β Β load_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_fee_reference?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β network_id: number;
    Β Β Β Β Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β age?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β close_time: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β Β Β Β Β validator_list_expires?: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: {
    Β Β Β Β state: {
    Β Β Β Β Β Β Β Β amendment_blocked?: boolean;
    Β Β Β Β Β Β Β Β build_version: string;
    Β Β Β Β Β Β Β Β closed_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β complete_ledgers: string;
    Β Β Β Β Β Β Β Β io_latency_ms: number;
    Β Β Β Β Β Β Β Β jq_trans_overflow: string;
    Β Β Β Β Β Β Β Β last_close: { converge_time: number; proposers: number };
    Β Β Β Β Β Β Β Β load?: { job_types: JobType[]; threads: number };
    Β Β Β Β Β Β Β Β load_base: number;
    Β Β Β Β Β Β Β Β load_factor: number;
    Β Β Β Β Β Β Β Β load_factor_fee_escalation?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_queue?: number;
    Β Β Β Β Β Β Β Β load_factor_fee_reference?: number;
    Β Β Β Β Β Β Β Β load_factor_server?: number;
    Β Β Β Β Β Β Β Β network_id: number;
    Β Β Β Β Β Β Β Β peer_disconnects?: string;
    Β Β Β Β Β Β Β Β peer_disconnects_resources?: string;
    Β Β Β Β Β Β Β Β peers: number;
    Β Β Β Β Β Β Β Β pubkey_node: string;
    Β Β Β Β Β Β Β Β pubkey_validator?: string;
    Β Β Β Β Β Β Β Β server_state: ServerState;
    Β Β Β Β Β Β Β Β server_state_duration_us: string;
    Β Β Β Β Β Β Β Β state_accounting: StateAccountingFinal;
    Β Β Β Β Β Β Β Β time: string;
    Β Β Β Β Β Β Β Β uptime: number;
    Β Β Β Β Β Β Β Β validated_ledger?: {
    Β Β Β Β Β Β Β Β Β Β Β Β age?: number;
    Β Β Β Β Β Β Β Β Β Β Β Β base_fee: number;
    Β Β Β Β Β Β Β Β Β Β Β Β close_time: number;
    Β Β Β Β Β Β Β Β Β Β Β Β hash: string;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_base: number;
    Β Β Β Β Β Β Β Β Β Β Β Β reserve_inc: number;
    Β Β Β Β Β Β Β Β Β Β Β Β seq: number;
    Β Β Β Β Β Β Β Β };
    Β Β Β Β Β Β Β Β validation_quorum: number;
    Β Β Β Β Β Β Β Β validator_list_expires?: number;
    Β Β Β Β };
    }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/SetFeePostAmendment.html b/docs/interfaces/SetFeePostAmendment.html index df9b3e765b..17319874d1 100644 --- a/docs/interfaces/SetFeePostAmendment.html +++ b/docs/interfaces/SetFeePostAmendment.html @@ -1,573 +1,60 @@ -SetFeePostAmendment | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SetFeePostAmendment

    -
    -

    Every transaction has the same set of common fields.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +SetFeePostAmendment | xrpl

    Interface SetFeePostAmendment

    Every transaction has the same set of common fields.

    +
    interface SetFeePostAmendment {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β BaseFeeDrops: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β ReserveBaseDrops: string;
    Β Β Β Β ReserveIncrementDrops: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: string;
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    BaseFeeDrops: string
    -

    The charge, in drops of XRP, for the reference transaction. (This is the transaction cost before scaling for load.)

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    BaseFeeDrops: string

    The charge, in drops of XRP, for the reference transaction. (This is the transaction cost before scaling for load.)

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    ReserveBaseDrops: string
    -

    The base reserve, in drops

    -
    -
    -
    - -
    ReserveIncrementDrops: string
    -

    The incremental reserve, in drops

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    ReserveBaseDrops: string

    The base reserve, in drops

    +
    ReserveIncrementDrops: string

    The incremental reserve, in drops

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: string
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: string

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/SetFeePreAmendment.html b/docs/interfaces/SetFeePreAmendment.html index 10c40e4f92..7884056a08 100644 --- a/docs/interfaces/SetFeePreAmendment.html +++ b/docs/interfaces/SetFeePreAmendment.html @@ -1,583 +1,62 @@ -SetFeePreAmendment | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SetFeePreAmendment

    -
    -

    Every transaction has the same set of common fields.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +SetFeePreAmendment | xrpl

    Interface SetFeePreAmendment

    Every transaction has the same set of common fields.

    +
    interface SetFeePreAmendment {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β BaseFee: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β ReferenceFeeUnits: number;
    Β Β Β Β ReserveBase: number;
    Β Β Β Β ReserveIncrement: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: string;
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    BaseFee: string
    -

    The charge, in drops of XRP, for the reference transaction, as hex. (This is the transaction cost before scaling for load.)

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    BaseFee: string

    The charge, in drops of XRP, for the reference transaction, as hex. (This is the transaction cost before scaling for load.)

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    ReferenceFeeUnits: number
    -

    The cost, in fee units, of the reference transaction

    -
    -
    -
    - -
    ReserveBase: number
    -

    The base reserve, in drops

    -
    -
    -
    - -
    ReserveIncrement: number
    -

    The incremental reserve, in drops

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    ReferenceFeeUnits: number

    The cost, in fee units, of the reference transaction

    +
    ReserveBase: number

    The base reserve, in drops

    +
    ReserveIncrement: number

    The incremental reserve, in drops

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: string
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: string

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/SetRegularKey.html b/docs/interfaces/SetRegularKey.html index 87afefe32d..a9dcc2866b 100644 --- a/docs/interfaces/SetRegularKey.html +++ b/docs/interfaces/SetRegularKey.html @@ -1,556 +1,59 @@ -SetRegularKey | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SetRegularKey

    -
    -

    A SetRegularKey transaction assigns, changes, or removes the regular key +SetRegularKey | xrpl

    Interface SetRegularKey

    A SetRegularKey transaction assigns, changes, or removes the regular key pair associated with an account.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface SetRegularKey {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β RegularKey?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "SetRegularKey";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    RegularKey?: string
    -

    A base-58-encoded Address that indicates the regular key pair to be +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    RegularKey?: string

    A base-58-encoded Address that indicates the regular key pair to be assigned to the account. If omitted, removes any existing regular key pair. from the account. Must not match the master key pair for the address.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "SetRegularKey"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "SetRegularKey"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/Signer.html b/docs/interfaces/Signer.html index 7abc93bf3e..7251506698 100644 --- a/docs/interfaces/Signer.html +++ b/docs/interfaces/Signer.html @@ -1,381 +1,8 @@ -Signer | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface Signer

    -
    -

    Hierarchy

    -
      -
    • Signer
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    Signer: {
    Β Β Β Β Account: string;
    Β Β Β Β SigningPubKey: string;
    Β Β Β Β TxnSignature: string;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Account: string
    • -
    • -
      SigningPubKey: string
    • -
    • -
      TxnSignature: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Signer | xrpl

    Interface Signer

    interface Signer {
    Β Β Β Β Signer: { Account: string; SigningPubKey: string; TxnSignature: string };
    }

    Properties

    Properties

    Signer: { Account: string; SigningPubKey: string; TxnSignature: string }
    diff --git a/docs/interfaces/SignerEntry.html b/docs/interfaces/SignerEntry.html index 3d30a9e7a6..5ee124f918 100644 --- a/docs/interfaces/SignerEntry.html +++ b/docs/interfaces/SignerEntry.html @@ -1,402 +1,18 @@ -SignerEntry | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SignerEntry

    -
    -

    The object that describes the signer in SignerEntries.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • SignerEntry
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    SignerEntry: {
    Β Β Β Β Account: string;
    Β Β Β Β SignerWeight: number;
    Β Β Β Β WalletLocator?: string;
    }
    -

    The object that describes the signer in SignerEntries.

    -
    -
    -

    Type declaration

    -
    diff --git a/docs/interfaces/SignerListSet.html b/docs/interfaces/SignerListSet.html index 2879b7fd6d..1649f82227 100644 --- a/docs/interfaces/SignerListSet.html +++ b/docs/interfaces/SignerListSet.html @@ -1,569 +1,64 @@ -SignerListSet | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SignerListSet

    -
    -

    The SignerListSet transaction creates, replaces, or removes a list of +SignerListSet | xrpl

    Interface SignerListSet

    The SignerListSet transaction creates, replaces, or removes a list of signers that can be used to multi-sign a transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface SignerListSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SignerEntries?: SignerEntry[];
    Β Β Β Β SignerQuorum: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "SignerListSet";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SignerEntries?: SignerEntry[]
    -

    Array of SignerEntry objects, indicating the addresses and weights of +

    SignerEntries?: SignerEntry[]

    Array of SignerEntry objects, indicating the addresses and weights of signers in this list. This signer list must have at least 1 member and no more than 32 members. No address may appear more than once in the list, nor may the Account submitting the transaction appear in the list.

    -
    -
    -
    - -
    SignerQuorum: number
    -

    A target number for the signer weights. A multi-signature from this list +

    SignerQuorum: number

    A target number for the signer weights. A multi-signature from this list is valid only if the sum weights of the signatures provided is greater than or equal to this value. To delete a signer list, use the value 0.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "SignerListSet"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "SignerListSet"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/SourceCurrencyAmount.html b/docs/interfaces/SourceCurrencyAmount.html index 5e30aad2e4..b3142d0ece 100644 --- a/docs/interfaces/SourceCurrencyAmount.html +++ b/docs/interfaces/SourceCurrencyAmount.html @@ -1,379 +1,9 @@ -SourceCurrencyAmount | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SourceCurrencyAmount

    -
    -

    Hierarchy

    -
      -
    • SourceCurrencyAmount
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: string
    -
    - -
    issuer?: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +SourceCurrencyAmount | xrpl

    Interface SourceCurrencyAmount

    interface SourceCurrencyAmount {
    Β Β Β Β currency: string;
    Β Β Β Β issuer?: string;
    }

    Properties

    Properties

    currency: string
    issuer?: string
    diff --git a/docs/interfaces/StateAccounting.html b/docs/interfaces/StateAccounting.html index 4a247e387d..8b80d28704 100644 --- a/docs/interfaces/StateAccounting.html +++ b/docs/interfaces/StateAccounting.html @@ -1,379 +1,9 @@ -StateAccounting | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface StateAccounting

    -
    -

    Hierarchy

    -
      -
    • StateAccounting
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    duration_us: string
    -
    - -
    transitions: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +StateAccounting | xrpl

    Interface StateAccounting

    interface StateAccounting {
    Β Β Β Β duration_us: string;
    Β Β Β Β transitions: string;
    }

    Properties

    duration_us: string
    transitions: string
    diff --git a/docs/interfaces/SubmitMultisignedRequest.html b/docs/interfaces/SubmitMultisignedRequest.html index 2f62c99a2a..6f421a7916 100644 --- a/docs/interfaces/SubmitMultisignedRequest.html +++ b/docs/interfaces/SubmitMultisignedRequest.html @@ -1,431 +1,25 @@ -SubmitMultisignedRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubmitMultisignedRequest

    -
    -

    The submit_multisigned command applies a multi-signed transaction and sends +SubmitMultisignedRequest | xrpl

    Interface SubmitMultisignedRequest

    The submit_multisigned command applies a multi-signed transaction and sends it to the network to be included in future ledgers. Expects a response in the form of a SubmitMultisignedRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "submit_multisigned"
    -

    The name of the API method.

    -
    -
    -
    - -
    fail_hard?: boolean
    -

    If true, and the transaction fails locally, do not retry or relay the +

    interface SubmitMultisignedRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "submit_multisigned";
    Β Β Β Β fail_hard?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β tx_json: Transaction;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "submit_multisigned"

    The name of the API method.

    +
    fail_hard?: boolean

    If true, and the transaction fails locally, do not retry or relay the transaction to other servers.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    tx_json: Transaction
    -

    Transaction in JSON format with an array of Signers. To be successful, the +

    tx_json: Transaction

    Transaction in JSON format with an array of Signers. To be successful, the weights of the signatures must be equal or higher than the quorum of the. Type/SignerList.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/SubmitMultisignedResponse.html b/docs/interfaces/SubmitMultisignedResponse.html index d8a4ac099f..fb2cc1a43c 100644 --- a/docs/interfaces/SubmitMultisignedResponse.html +++ b/docs/interfaces/SubmitMultisignedResponse.html @@ -1,465 +1,16 @@ -SubmitMultisignedResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubmitMultisignedResponse

    -
    -

    Response expected from a SubmitMultisignedRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β engine_result: string;
    Β Β Β Β engine_result_code: number;
    Β Β Β Β engine_result_message: string;
    Β Β Β Β tx_blob: string;
    Β Β Β Β tx_json: Object;
    }
    -
    -

    Type declaration

    -
      -
    • -
      engine_result: string
      -

      Code indicating the preliminary result of the transaction, for example. -tesSUCCESS .

      -
      -
    • -
    • -
      engine_result_code: number
      -

      Numeric code indicating the preliminary result of the transaction, -directly correlated to engine_result.

      -
      -
    • -
    • -
      engine_result_message: string
      -

      Human-readable explanation of the preliminary transaction result.

      -
      -
    • -
    • -
      tx_blob: string
      -

      The complete transaction in hex string format.

      -
      -
    • -
    • -
      tx_json: Object
      -

      The complete transaction in JSON format.

      -
      -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +SubmitMultisignedResponse | xrpl

    Interface SubmitMultisignedResponse

    Response expected from a SubmitMultisignedRequest.

    +
    interface SubmitMultisignedResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: BaseSubmitMultisignedResult & { hash?: string };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: BaseSubmitMultisignedResult & { hash?: string }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/SubmitMultisignedV1Response.html b/docs/interfaces/SubmitMultisignedV1Response.html new file mode 100644 index 0000000000..e302bf26b1 --- /dev/null +++ b/docs/interfaces/SubmitMultisignedV1Response.html @@ -0,0 +1,16 @@ +SubmitMultisignedV1Response | xrpl

    Interface SubmitMultisignedV1Response

    Response expected from a SubmitMultisignedRequest using api_version 1.

    +
    interface SubmitMultisignedV1Response {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: BaseSubmitMultisignedResult & {
    Β Β Β Β Β Β Β Β tx_json: Transaction & { hash?: string };
    Β Β Β Β };
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: BaseSubmitMultisignedResult & {
    Β Β Β Β tx_json: Transaction & { hash?: string };
    }
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/SubmitRequest.html b/docs/interfaces/SubmitRequest.html index 5028ed1722..458718425d 100644 --- a/docs/interfaces/SubmitRequest.html +++ b/docs/interfaces/SubmitRequest.html @@ -1,429 +1,23 @@ -SubmitRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubmitRequest

    -
    -

    The submit method applies a transaction and sends it to the network to be +SubmitRequest | xrpl

    Interface SubmitRequest

    The submit method applies a transaction and sends it to the network to be confirmed and included in future ledgers. Expects a response in the form of a SubmitResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "submit"
    -

    The name of the API method.

    -
    -
    -
    - -
    fail_hard?: boolean
    -

    If true, and the transaction fails locally, do not retry or relay the +

    interface SubmitRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "submit";
    Β Β Β Β fail_hard?: boolean;
    Β Β Β Β id?: string | number;
    Β Β Β Β tx_blob: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "submit"

    The name of the API method.

    +
    fail_hard?: boolean

    If true, and the transaction fails locally, do not retry or relay the transaction to other servers. The default is false.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    tx_blob: string
    -

    The complete transaction in hex string format.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    tx_blob: string

    The complete transaction in hex string format.

    +
    diff --git a/docs/interfaces/SubmitResponse.html b/docs/interfaces/SubmitResponse.html index 0bcda76037..5166703c5d 100644 --- a/docs/interfaces/SubmitResponse.html +++ b/docs/interfaces/SubmitResponse.html @@ -1,523 +1,45 @@ -SubmitResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubmitResponse

    -
    -

    Response expected from a SubmitRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β accepted: boolean;
    Β Β Β Β account_sequence_available: number;
    Β Β Β Β account_sequence_next: number;
    Β Β Β Β applied: boolean;
    Β Β Β Β broadcast: boolean;
    Β Β Β Β engine_result: string;
    Β Β Β Β engine_result_code: number;
    Β Β Β Β engine_result_message: string;
    Β Β Β Β kept: boolean;
    Β Β Β Β open_ledger_cost: string;
    Β Β Β Β queued: boolean;
    Β Β Β Β tx_blob: string;
    Β Β Β Β tx_json: Object;
    Β Β Β Β validated_ledger_index: number;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/SubscribeBook.html b/docs/interfaces/SubscribeBook.html index 7e801558bc..a2fd62db09 100644 --- a/docs/interfaces/SubscribeBook.html +++ b/docs/interfaces/SubscribeBook.html @@ -1,419 +1,21 @@ -SubscribeBook | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubscribeBook

    -
    -

    Hierarchy

    -
      -
    • SubscribeBook
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    both?: boolean
    -

    If true, return both sides of the order book. The default is false.

    -
    -
    -
    - -
    snapshot?: boolean
    -

    If true, return the current state of the order book once when you +SubscribeBook | xrpl

    Interface SubscribeBook

    interface SubscribeBook {
    Β Β Β Β both?: boolean;
    Β Β Β Β snapshot?: boolean;
    Β Β Β Β taker: string;
    Β Β Β Β taker_gets: Currency;
    Β Β Β Β taker_pays: Currency;
    }

    Properties

    both?: boolean

    If true, return both sides of the order book. The default is false.

    +
    snapshot?: boolean

    If true, return the current state of the order book once when you subscribe before sending updates. The default is false.

    -
    -
    -
    - -
    taker: string
    -

    Unique account address to use as a perspective for viewing offers, in the. -XRP Ledger's base58 format.

    -
    -
    -
    - -
    taker_gets: Currency
    -

    Specification of which currency the account taking the Offer would +

    taker: string

    Unique account address to use as a perspective for viewing offers, in the. +XRP Ledger's base58 format.

    +
    taker_gets: Currency

    Specification of which currency the account taking the Offer would receive, as a currency object with no amount.

    -
    -
    -
    - -
    taker_pays: Currency
    -

    Specification of which currency the account taking the Offer would pay, as +

    taker_pays: Currency

    Specification of which currency the account taking the Offer would pay, as a currency object with no amount.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/SubscribeRequest.html b/docs/interfaces/SubscribeRequest.html index f5666b77dc..bcba89ba4f 100644 --- a/docs/interfaces/SubscribeRequest.html +++ b/docs/interfaces/SubscribeRequest.html @@ -1,483 +1,37 @@ -SubscribeRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubscribeRequest

    -
    -

    The subscribe method requests periodic notifications from the server when +SubscribeRequest | xrpl

    Interface SubscribeRequest

    The subscribe method requests periodic notifications from the server when certain events happen. Expects a response in the form of a SubscribeResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    accounts?: string[]
    -

    Array with the unique addresses of accounts to monitor for validated -transactions. The addresses must be in the XRP Ledger's base58 format. +

    interface SubscribeRequest {
    Β Β Β Β accounts?: string[];
    Β Β Β Β accounts_proposed?: string[];
    Β Β Β Β api_version?: number;
    Β Β Β Β books?: SubscribeBook[];
    Β Β Β Β command: "subscribe";
    Β Β Β Β id?: string | number;
    Β Β Β Β streams?: StreamType[];
    Β Β Β Β url?: string;
    Β Β Β Β url_password?: string;
    Β Β Β Β url_username?: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    accounts?: string[]

    Array with the unique addresses of accounts to monitor for validated +transactions. The addresses must be in the XRP Ledger's base58 format. The server sends a notification for any transaction that affects at least one of these accounts.

    -
    -
    -
    - -
    accounts_proposed?: string[]
    -

    Like accounts, but include transactions that are not yet finalized.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    books?: SubscribeBook[]
    -

    Array of objects defining order books to monitor for updates, as detailed +

    accounts_proposed?: string[]

    Like accounts, but include transactions that are not yet finalized.

    +
    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    books?: SubscribeBook[]

    Array of objects defining order books to monitor for updates, as detailed Below.

    -
    -
    -
    - -
    command: "subscribe"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    command: "subscribe"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    streams?: StreamType[]
    -

    Array of string names of generic streams to subscribe to.

    -
    -
    -
    - -
    url?: string
    -

    URL where the server sends a JSON-RPC callbacks for each event. +

    streams?: StreamType[]

    Array of string names of generic streams to subscribe to.

    +
    url?: string

    URL where the server sends a JSON-RPC callbacks for each event. Admin-only.

    -
    -
    -
    - -
    url_password?: string
    -

    Password to provide for basic authentication at the callback URL.

    -
    -
    -
    - -
    url_username?: string
    -

    Username to provide for basic authentication at the callback URL.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    url_password?: string

    Password to provide for basic authentication at the callback URL.

    +
    url_username?: string

    Username to provide for basic authentication at the callback URL.

    +
    diff --git a/docs/interfaces/SubscribeResponse.html b/docs/interfaces/SubscribeResponse.html index ea525e45e1..c8bd0c9c95 100644 --- a/docs/interfaces/SubscribeResponse.html +++ b/docs/interfaces/SubscribeResponse.html @@ -1,435 +1,16 @@ -SubscribeResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface SubscribeResponse

    -
    -

    Response expected from a SubscribeRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: Record<string, never> | LedgerStreamResponse | BooksSnapshot
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +SubscribeResponse | xrpl

    Interface SubscribeResponse

    Response expected from a SubscribeRequest.

    +
    interface SubscribeResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: Record<string, never> | LedgerStreamResponse | BooksSnapshot;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: Record<string, never> | LedgerStreamResponse | BooksSnapshot
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/TicketCreate.html b/docs/interfaces/TicketCreate.html index bea84ddf1e..59936c8724 100644 --- a/docs/interfaces/TicketCreate.html +++ b/docs/interfaces/TicketCreate.html @@ -1,556 +1,59 @@ -TicketCreate | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TicketCreate

    -
    -

    A TicketCreate transaction sets aside one or more sequence numbers as +TicketCreate | xrpl

    Interface TicketCreate

    A TicketCreate transaction sets aside one or more sequence numbers as Tickets.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface TicketCreate {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketCount: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "TicketCreate";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketCount: number
    -

    How many Tickets to create. This must be a positive number and cannot +

    TicketCount: number

    How many Tickets to create. This must be a positive number and cannot cause the account to own more than 250 Tickets after executing this transaction.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "TicketCreate"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "TicketCreate"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/TransactionAndMetadata.html b/docs/interfaces/TransactionAndMetadata.html index ddb1baf945..aef884c199 100644 --- a/docs/interfaces/TransactionAndMetadata.html +++ b/docs/interfaces/TransactionAndMetadata.html @@ -1,384 +1,9 @@ -TransactionAndMetadata | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TransactionAndMetadata<T>

    -
    -

    Type Parameters

    -
    -
    -

    Hierarchy

    -
      -
    • TransactionAndMetadata
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    metadata: TransactionMetadata<T>
    -
    - -
    transaction: T
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TransactionAndMetadata | xrpl

    Interface TransactionAndMetadata<T>

    interface TransactionAndMetadata<T extends BaseTransaction = Transaction> {
    Β Β Β Β metadata: TransactionMetadata<T>;
    Β Β Β Β transaction: T;
    }

    Type Parameters

    Properties

    Properties

    transaction: T
    diff --git a/docs/interfaces/TransactionEntryRequest.html b/docs/interfaces/TransactionEntryRequest.html index 64c5fee9fb..25837cc0a8 100644 --- a/docs/interfaces/TransactionEntryRequest.html +++ b/docs/interfaces/TransactionEntryRequest.html @@ -1,441 +1,24 @@ -TransactionEntryRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TransactionEntryRequest

    -
    -

    The transaction_entry method retrieves information on a single transaction +TransactionEntryRequest | xrpl

    Interface TransactionEntryRequest

    The transaction_entry method retrieves information on a single transaction from a specific ledger version. Expects a response in the form of a TransactionEntryResponse.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseRequest
    • -
    • LookupByLedgerRequest -
        -
      • TransactionEntryRequest
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    command: "transaction_entry"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    interface TransactionEntryRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β command: "transaction_entry";
    Β Β Β Β id?: string | number;
    Β Β Β Β ledger_hash?: string;
    Β Β Β Β ledger_index?: LedgerIndex;
    Β Β Β Β tx_hash: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    • BaseRequest
    • LookupByLedgerRequest
      • TransactionEntryRequest

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    command: "transaction_entry"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    A 20-byte hex string for the ledger version to use.

    -
    -
    -
    - -
    ledger_index?: LedgerIndex
    -

    The ledger index of the ledger to use, or a shortcut string.

    -
    -
    -
    - -
    tx_hash: string
    -

    Unique hash of the transaction you are looking up.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    ledger_hash?: string

    A 20-byte hex string for the ledger version to use.

    +
    ledger_index?: LedgerIndex

    The ledger index of the ledger to use, or a shortcut string.

    +
    tx_hash: string

    Unique hash of the transaction you are looking up.

    +
    diff --git a/docs/interfaces/TransactionEntryResponse.html b/docs/interfaces/TransactionEntryResponse.html index 54d50b9d80..2c652abc8d 100644 --- a/docs/interfaces/TransactionEntryResponse.html +++ b/docs/interfaces/TransactionEntryResponse.html @@ -1,461 +1,23 @@ -TransactionEntryResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TransactionEntryResponse

    -
    -

    Response expected from a TransactionEntryRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: number;
    Β Β Β Β metadata: TransactionMetadata;
    Β Β Β Β tx_json: Object;
    }
    -
    -

    Type declaration

    -
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/TransactionMetadataBase.html b/docs/interfaces/TransactionMetadataBase.html index a257eeb278..0114062f0c 100644 --- a/docs/interfaces/TransactionMetadataBase.html +++ b/docs/interfaces/TransactionMetadataBase.html @@ -1,400 +1,12 @@ -TransactionMetadataBase | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TransactionMetadataBase

    -
    -

    Hierarchy

    -
      -
    • TransactionMetadataBase
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    AffectedNodes: Node[]
    -
    - -
    DeliveredAmount?: Amount
    -
    - -
    TransactionIndex: number
    -
    - -
    TransactionResult: string
    -
    - -
    delivered_amount?: Amount
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TransactionMetadataBase | xrpl

    Interface TransactionMetadataBase

    interface TransactionMetadataBase {
    Β Β Β Β AffectedNodes: Node[];
    Β Β Β Β delivered_amount?: MPTAmount | Amount;
    Β Β Β Β DeliveredAmount?: MPTAmount | Amount;
    Β Β Β Β TransactionIndex: number;
    Β Β Β Β TransactionResult: string;
    }

    Properties

    AffectedNodes: Node[]
    delivered_amount?: MPTAmount | Amount
    DeliveredAmount?: MPTAmount | Amount
    TransactionIndex: number
    TransactionResult: string
    diff --git a/docs/interfaces/TransactionStream.html b/docs/interfaces/TransactionStream.html deleted file mode 100644 index 88043b8a17..0000000000 --- a/docs/interfaces/TransactionStream.html +++ /dev/null @@ -1,494 +0,0 @@ -TransactionStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TransactionStream

    -
    -

    Many subscriptions result in messages about transactions.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • TransactionStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    engine_result: string
    -

    String Transaction result code.

    -
    -
    -
    - -
    engine_result_code: number
    -

    Numeric transaction response code, if applicable.

    -
    -
    -
    - -
    engine_result_message: string
    -

    Human-readable explanation for the transaction response.

    -
    -
    -
    - -
    ledger_current_index?: number
    -

    The ledger index of the current in-progress ledger version for which this -transaction is currently proposed.

    -
    -
    -
    - -
    ledger_hash?: string
    -

    The identifying hash of the ledger version that includes this transaction.

    -
    -
    -
    - -
    ledger_index?: number
    -

    The ledger index of the ledger version that includes this transaction.

    -
    -
    -
    - - -

    The transaction metadata, which shows the exact outcome of the transaction -in detail.

    -
    -
    -
    - -
    status: string
    -
    - -
    transaction: Object
    -

    The definition of the transaction in JSON format.

    -
    -
    -
    - -
    type: "transaction"
    -
    - -
    validated?: boolean
    -

    If true, this transaction is included in a validated ledger and its -outcome is final. Responses from the transaction stream should always be -validated.

    -
    -
    -
    - -
    warnings?: {
    Β Β Β Β id: number;
    Β Β Β Β message: string;
    }[]
    -
    -

    Type declaration

    -
      -
    • -
      id: number
    • -
    • -
      message: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file diff --git a/docs/interfaces/TrustSet.html b/docs/interfaces/TrustSet.html index a02e7fb2fe..b3b13e71fb 100644 --- a/docs/interfaces/TrustSet.html +++ b/docs/interfaces/TrustSet.html @@ -1,578 +1,65 @@ -TrustSet | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TrustSet

    -
    -

    Create or modify a trust line linking two accounts.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +TrustSet | xrpl

    Interface TrustSet

    Create or modify a trust line linking two accounts.

    +
    interface TrustSet {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | TrustSetFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LimitAmount: IssuedCurrencyAmount;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β QualityIn?: number;
    Β Β Β Β QualityOut?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "TrustSet";
    Β Β Β Β TxnSignature?: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | TrustSetFlagsInterface
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | TrustSetFlagsInterface

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - - -

    Object defining the trust line to create or modify, in the format of a +

    Object defining the trust line to create or modify, in the format of a Currency Amount.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    QualityIn?: number
    -

    Value incoming balances on this trust line at the ratio of this number per +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    QualityIn?: number

    Value incoming balances on this trust line at the ratio of this number per 1,000,000,000 units. A value of 0 is shorthand for treating balances at face value.

    -
    -
    -
    - -
    QualityOut?: number
    -

    Value outgoing balances on this trust line at the ratio of this number per +

    QualityOut?: number

    Value outgoing balances on this trust line at the ratio of this number per 1,000,000,000 units. A value of 0 is shorthand for treating balances at face value.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "TrustSet"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "TrustSet"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/TrustSetFlagsInterface.html b/docs/interfaces/TrustSetFlagsInterface.html index c2a3b1f18c..c65b7ff442 100644 --- a/docs/interfaces/TrustSetFlagsInterface.html +++ b/docs/interfaces/TrustSetFlagsInterface.html @@ -1,427 +1,28 @@ -TrustSetFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TrustSetFlagsInterface

    -
    -

    Map of flags to boolean values representing TrustSet transaction +TrustSetFlagsInterface | xrpl

    Interface TrustSetFlagsInterface

    Map of flags to boolean values representing TrustSet transaction flags.

    -
    -
    -

    Example


    const trustSetTx: TrustSet = {
    TransactionType: 'TrustSet',
    Account: wallet2.getClassicAddress(),
    LimitAmount: {
    currency: 'FOO',
    issuer: wallet1.getClassicAddress(),
    value: '10000000000',
    },
    Flags: {
    tfSetNoRipple: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(trustSetTx)
    console.log(autofilledTx)
    // {
    // TransactionType: 'TrustSet',
    // Account: 'r9dAdQQCBcGajVSeC9CqW3LCugjPDnAkEb',
    // LimitAmount: {
    // currency: 'FOO',
    // issuer: 'rWZzUjo5xGiAoRBqzsndyzonXz47UV8u1',
    // value: '10000000000'
    // },
    // Flags: 131072,
    // Sequence: 21971483,
    // Fee: '12',
    // LastLedgerSequence: 21971503
    // } -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • TrustSetFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    tfClearFreeze?: boolean
    -

    Unfreeze the trust line.

    -
    -
    -
    - -
    tfClearNoRipple?: boolean
    -

    Disable the No Ripple flag, allowing rippling on this trust line.

    -
    -
    -
    - -
    tfSetFreeze?: boolean
    -

    Freeze the trust line.

    -
    -
    -
    - -
    tfSetNoRipple?: boolean
    -

    Enable the No Ripple flag, which blocks rippling between two trust lines -of the same currency if this flag is enabled on both.

    -
    -
    -
    - -
    tfSetfAuth?: boolean
    -

    Authorize the other party to hold currency issued by this account. (No +


    const trustSetTx: TrustSet = {
    TransactionType: 'TrustSet',
    Account: wallet2.getClassicAddress(),
    LimitAmount: {
    currency: 'FOO',
    issuer: wallet1.getClassicAddress(),
    value: '10000000000',
    },
    Flags: {
    tfSetNoRipple: true
    }
    }

    // Autofill the tx to see how flags actually look compared to the interface usage.
    const autofilledTx = await client.autofill(trustSetTx)
    console.log(autofilledTx)
    // {
    // TransactionType: 'TrustSet',
    // Account: 'r9dAdQQCBcGajVSeC9CqW3LCugjPDnAkEb',
    // LimitAmount: {
    // currency: 'FOO',
    // issuer: 'rWZzUjo5xGiAoRBqzsndyzonXz47UV8u1',
    // value: '10000000000'
    // },
    // Flags: 131072,
    // Sequence: 21971483,
    // Fee: '12',
    // LastLedgerSequence: 21971503
    // } +
    + +
    interface TrustSetFlagsInterface {
    Β Β Β Β tfClearDeepFreeze?: boolean;
    Β Β Β Β tfClearFreeze?: boolean;
    Β Β Β Β tfClearNoRipple?: boolean;
    Β Β Β Β tfSetDeepFreeze?: boolean;
    Β Β Β Β tfSetfAuth?: boolean;
    Β Β Β Β tfSetFreeze?: boolean;
    Β Β Β Β tfSetNoRipple?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • TrustSetFlagsInterface

    Properties

    tfClearDeepFreeze?: boolean

    Clear a Deep-Frozen trust line

    +
    tfClearFreeze?: boolean

    Unfreeze the trust line.

    +
    tfClearNoRipple?: boolean

    Disable the No Ripple flag, allowing rippling on this trust line.

    +
    tfSetDeepFreeze?: boolean

    Allowed only if the trustline is already regularly frozen, or if tfSetFreeze is set in the same transaction.

    +
    tfSetfAuth?: boolean

    Authorize the other party to hold currency issued by this account. (No effect unless using the asfRequireAuth AccountSet flag.) Cannot be unset.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    tfSetFreeze?: boolean

    Freeze the trust line.

    +
    tfSetNoRipple?: boolean

    Enable the No Ripple flag, which blocks rippling between two trust lines +of the same currency if this flag is enabled on both.

    +
    diff --git a/docs/interfaces/TxRequest.html b/docs/interfaces/TxRequest.html index c914206e65..79841e2699 100644 --- a/docs/interfaces/TxRequest.html +++ b/docs/interfaces/TxRequest.html @@ -1,465 +1,35 @@ -TxRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TxRequest

    -
    -

    The tx method retrieves information on a single transaction, by its +TxRequest | xrpl

    Interface TxRequest

    The tx method retrieves information on a single transaction, by its identifying hash. Expects a response in the form of a TxResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    binary?: boolean
    -

    If true, return transaction data and metadata as binary serialized to +

    interface TxRequest {
    Β Β Β Β api_version?: number;
    Β Β Β Β binary?: boolean;
    Β Β Β Β command: "tx";
    Β Β Β Β ctid?: string;
    Β Β Β Β id?: string | number;
    Β Β Β Β max_ledger?: number;
    Β Β Β Β min_ledger?: number;
    Β Β Β Β transaction?: string;
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    binary?: boolean

    If true, return transaction data and metadata as binary serialized to hexadecimal strings. If false, return transaction data and metadata as. JSON. The default is false.

    -
    -
    -
    - -
    command: "tx"
    -

    The name of the API method.

    -
    -
    -
    - -
    ctid?: string
    -

    The Concise Transaction ID to look up. Exactly one of transaction or ctid must be specified for a TxRequest.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    command: "tx"

    The name of the API method.

    +
    ctid?: string

    The Concise Transaction ID to look up. Exactly one of transaction or ctid must be specified for a TxRequest.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    max_ledger?: number
    -

    Use this with min_ledger to specify a range of up to 1000 ledger indexes, +

    max_ledger?: number

    Use this with min_ledger to specify a range of up to 1000 ledger indexes, ending with this ledger (inclusive). If the server cannot find the transaction, it confirms whether it was able to search all the ledgers in the requested range.

    -
    -
    -
    - -
    min_ledger?: number
    -

    Use this with max_ledger to specify a range of up to 1000 ledger indexes, +

    min_ledger?: number

    Use this with max_ledger to specify a range of up to 1000 ledger indexes, starting with this ledger (inclusive). If the server cannot find the transaction, it confirms whether it was able to search all the ledgers in this range.

    -
    -
    -
    - -
    transaction?: string
    -

    The transaction hash to look up. Exactly one of transaction or ctid must be specified for a TxRequest.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    transaction?: string

    The transaction hash to look up. Exactly one of transaction or ctid must be specified for a TxRequest.

    +
    diff --git a/docs/interfaces/TxResponse.html b/docs/interfaces/TxResponse.html index c6b3d57d03..1f94077eeb 100644 --- a/docs/interfaces/TxResponse.html +++ b/docs/interfaces/TxResponse.html @@ -1,488 +1,21 @@ -TxResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface TxResponse<T>

    -
    -

    Response expected from a TxRequest.

    -
    -
    -
    -

    Type Parameters

    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: {
    Β Β Β Β ctid?: string;
    Β Β Β Β date?: number;
    Β Β Β Β hash: string;
    Β Β Β Β ledger_index?: number;
    Β Β Β Β meta?: string | TransactionMetadata<T>;
    Β Β Β Β validated?: boolean;
    } & T
    -
    -

    Type declaration

    -
      -
    • -
      Optional ctid?: string
      -

      The Concise Transaction Identifier of the transaction (16-byte hex string)

      -
      -
    • -
    • -
      Optional date?: number
      -

      This number measures the number of seconds since the "Ripple Epoch" of January 1, 2000 (00:00 UTC)

      -
      -
    • -
    • -
      hash: string
      -

      The SHA-512 hash of the transaction.

      -
      -
    • -
    • -
      Optional ledger_index?: number
      -

      The ledger index of the ledger that includes this transaction.

      -
      -
    • -
    • -
      Optional meta?: string | TransactionMetadata<T>
      -

      Transaction metadata, which describes the results of the transaction. - Can be undefined if a transaction has not been validated yet.

      -
      -
    • -
    • -
      Optional validated?: boolean
      -

      If true, this data comes from a validated ledger version; if omitted or. -Set to false, this data is not final.

      -
      -
    -
    - -
    searched_all?: boolean
    -

    If true, the server was able to search all of the specified ledger +TxResponse | xrpl

    Interface TxResponse<T>

    Response expected from a TxRequest.

    +
    interface TxResponse<T extends BaseTransaction = Transaction> {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: BaseTxResult<2, T> & { tx_json: T };
    Β Β Β Β searched_all?: boolean;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Type Parameters

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: BaseTxResult<2, T> & { tx_json: T }
    searched_all?: boolean

    If true, the server was able to search all of the specified ledger versions, and the transaction was in none of them. If false, the server did not have all of the specified ledger versions available, so it is not sure. If one of them might contain the transaction.

    -
    -
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/TxV1Response.html b/docs/interfaces/TxV1Response.html new file mode 100644 index 0000000000..027183b681 --- /dev/null +++ b/docs/interfaces/TxV1Response.html @@ -0,0 +1,21 @@ +TxV1Response | xrpl

    Interface TxV1Response<T>

    Response expected from a TxRequest using API version 1.

    +
    interface TxV1Response<T extends BaseTransaction = Transaction> {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: BaseTxResult<1, T> & T;
    Β Β Β Β searched_all?: boolean;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Type Parameters

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: BaseTxResult<1, T> & T
    searched_all?: boolean

    If true, the server was able to search all of the specified ledger +versions, and the transaction was in none of them. If false, the server did +not have all of the specified ledger versions available, so it is not sure. +If one of them might contain the transaction.

    +
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/UNLModify.html b/docs/interfaces/UNLModify.html index 8e4a2e40ed..978be7fc69 100644 --- a/docs/interfaces/UNLModify.html +++ b/docs/interfaces/UNLModify.html @@ -1,575 +1,62 @@ -UNLModify | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface UNLModify

    -
    -

    Mark a change to the Negative UNL.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +UNLModify | xrpl

    Interface UNLModify

    Mark a change to the Negative UNL.

    +
    interface UNLModify {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β LedgerSequence: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "UNLModify";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β UNLModifyDisabling: 0 | 1;
    Β Β Β Β UNLModifyValidator: string;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    LedgerSequence: number
    -

    The ledger index where this pseudo-transaction appears. +

    LedgerSequence: number

    The ledger index where this pseudo-transaction appears. This distinguishes the pseudo-transaction from other occurrences of the same change.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "UNLModify"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "UNLModify"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    UNLModifyDisabling: 0 | 1
    -

    If 0, this change represents removing a validator from the Negative UNL. +

    UNLModifyDisabling: 0 | 1

    If 0, this change represents removing a validator from the Negative UNL. If 1, this change represents adding a validator to the Negative UNL.

    -
    -
    -
    - -
    UNLModifyValidator: string
    -

    The validator to add or remove, as identified by its master public key.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    UNLModifyValidator: string

    The validator to add or remove, as identified by its master public key.

    +
    diff --git a/docs/interfaces/UnsubscribeBook.html b/docs/interfaces/UnsubscribeBook.html index 8222551580..f96f87fd23 100644 --- a/docs/interfaces/UnsubscribeBook.html +++ b/docs/interfaces/UnsubscribeBook.html @@ -1,386 +1,10 @@ -UnsubscribeBook | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface UnsubscribeBook

    -
    -

    Hierarchy

    -
      -
    • UnsubscribeBook
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    both?: boolean
    -
    - -
    taker_gets: Currency
    -
    - -
    taker_pays: Currency
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +UnsubscribeBook | xrpl

    Interface UnsubscribeBook

    interface UnsubscribeBook {
    Β Β Β Β both?: boolean;
    Β Β Β Β taker_gets: Currency;
    Β Β Β Β taker_pays: Currency;
    }

    Properties

    both?: boolean
    taker_gets: Currency
    taker_pays: Currency
    diff --git a/docs/interfaces/UnsubscribeRequest.html b/docs/interfaces/UnsubscribeRequest.html index b600033f97..2e1378731f 100644 --- a/docs/interfaces/UnsubscribeRequest.html +++ b/docs/interfaces/UnsubscribeRequest.html @@ -1,452 +1,30 @@ -UnsubscribeRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface UnsubscribeRequest

    -
    -

    The unsubscribe command tells the server to stop sending messages for a +UnsubscribeRequest | xrpl

    Interface UnsubscribeRequest

    The unsubscribe command tells the server to stop sending messages for a particular subscription or set of subscriptions. Expects a response in the form of an UnsubscribeResponse.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    accounts?: string[]
    -

    Array of unique account addresses to stop receiving updates for, in the. -XRP Ledger's base58 format.

    -
    -
    -
    - -
    accounts_proposed?: string[]
    -

    Like accounts, but for accounts_proposed subscriptions that included +

    interface UnsubscribeRequest {
    Β Β Β Β accounts?: string[];
    Β Β Β Β accounts_proposed?: string[];
    Β Β Β Β api_version?: number;
    Β Β Β Β books?: UnsubscribeBook[];
    Β Β Β Β command: "unsubscribe";
    Β Β Β Β id?: string | number;
    Β Β Β Β streams?: StreamType[];
    Β Β Β Β [x: string]: unknown;
    }

    Hierarchy (View Summary)

    Indexable

    • [x: string]: unknown

    Properties

    accounts?: string[]

    Array of unique account addresses to stop receiving updates for, in the. +XRP Ledger's base58 format.

    +
    accounts_proposed?: string[]

    Like accounts, but for accounts_proposed subscriptions that included not-yet-validated transactions.

    -
    -
    -
    - -
    api_version?: number
    -

    The API version to use. If omitted, use version 1.

    -
    -
    -
    - -
    books?: UnsubscribeBook[]
    -

    Array of objects defining order books to unsubscribe from, as explained +

    api_version?: number

    The API version to use. If omitted, use version 1.

    +
    books?: UnsubscribeBook[]

    Array of objects defining order books to unsubscribe from, as explained below.

    -
    -
    -
    - -
    command: "unsubscribe"
    -

    The name of the API method.

    -
    -
    -
    - -
    id?: string | number
    -

    A unique value to identify this request. The response to this request uses +

    command: "unsubscribe"

    The name of the API method.

    +
    id?: string | number

    A unique value to identify this request. The response to this request uses the same id field. This way, even if responses arrive out of order, you know which request prompted which response.

    -
    -
    -
    - -
    streams?: StreamType[]
    -

    Array of string names of generic streams to unsubscribe from, including. +

    streams?: StreamType[]

    Array of string names of generic streams to unsubscribe from, including. Ledger, server, transactions, and transactions_proposed.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/UnsubscribeResponse.html b/docs/interfaces/UnsubscribeResponse.html index 1f3cd54c73..0bf6dd9e17 100644 --- a/docs/interfaces/UnsubscribeResponse.html +++ b/docs/interfaces/UnsubscribeResponse.html @@ -1,435 +1,16 @@ -UnsubscribeResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface UnsubscribeResponse

    -
    -

    Response expected from a UnsubscribeRequest.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    api_version?: number
    -
    - -
    forwarded?: boolean
    -
    - -
    id: string | number
    -
    - -
    result: Record<string, never>
    -
    - -
    status?: string
    -
    - -
    type: string
    -
    - -
    warning?: "load"
    -
    - -
    warnings?: ResponseWarning[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +UnsubscribeResponse | xrpl

    Interface UnsubscribeResponse

    Response expected from a UnsubscribeRequest.

    +
    interface UnsubscribeResponse {
    Β Β Β Β api_version?: number;
    Β Β Β Β forwarded?: boolean;
    Β Β Β Β id: string | number;
    Β Β Β Β result: Record<string, never>;
    Β Β Β Β status?: string;
    Β Β Β Β type: string;
    Β Β Β Β warning?: "load";
    Β Β Β Β warnings?: ResponseWarning[];
    }

    Hierarchy (View Summary)

    Properties

    api_version?: number
    forwarded?: boolean
    id: string | number
    result: Record<string, never>
    status?: string
    type: string
    warning?: "load"
    warnings?: ResponseWarning[]
    diff --git a/docs/interfaces/ValidationStream.html b/docs/interfaces/ValidationStream.html index 6e10fc26ac..f81b0ffee4 100644 --- a/docs/interfaces/ValidationStream.html +++ b/docs/interfaces/ValidationStream.html @@ -1,551 +1,61 @@ -ValidationStream | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface ValidationStream

    -
    -

    The validations stream sends messages whenever it receives validation +ValidationStream | xrpl

    Interface ValidationStream

    The validations stream sends messages whenever it receives validation messages, also called validation votes, regardless of whether or not the validation message is from a trusted validator.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • BaseStream -
        -
      • ValidationStream
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    amendments?: string[]
    -

    The value validationReceived indicates this is from the validations +

    interface ValidationStream {
    Β Β Β Β amendments?: string[];
    Β Β Β Β base_fee?: number;
    Β Β Β Β cookie?: string;
    Β Β Β Β data?: string;
    Β Β Β Β flags: number;
    Β Β Β Β full: boolean;
    Β Β Β Β ledger_hash: string;
    Β Β Β Β ledger_index: string;
    Β Β Β Β load_fee?: number;
    Β Β Β Β master_key?: string;
    Β Β Β Β reserve_base?: number;
    Β Β Β Β reserve_inc?: number;
    Β Β Β Β signature: string;
    Β Β Β Β signing_time: number;
    Β Β Β Β type: "validationReceived";
    Β Β Β Β validation_public_key: string;
    }

    Hierarchy

    • BaseStream
      • ValidationStream

    Properties

    amendments?: string[]

    The value validationReceived indicates this is from the validations Stream.

    -
    -
    -
    - -
    base_fee?: number
    -

    The amendments this server wants to be added to the protocol.

    -
    -
    -
    - -
    cookie?: string
    -

    An arbitrary value chosen by the server at startup.

    +
    base_fee?: number

    The amendments this server wants to be added to the protocol.

    +
    cookie?: string

    An arbitrary value chosen by the server at startup.

    If the same validation key pair signs validations with different cookies concurrently, that usually indicates that multiple servers are incorrectly configured to use the same validation key pair.

    -
    -
    -
    - -
    data?: string
    -

    The contents of the validation message in its canonical binary form

    -
    -
    -
    - -
    flags: number
    -

    The unscaled transaction cost (reference_fee value) this server wants to +

    data?: string

    The contents of the validation message in its canonical binary form

    +
    flags: number

    The unscaled transaction cost (reference_fee value) this server wants to set by Fee voting.

    -
    -
    -
    - -
    full: boolean
    -

    Bit-mask of flags added to this validation message. The flag 0x80000000 +

    full: boolean

    Bit-mask of flags added to this validation message. The flag 0x80000000 indicates that the validation signature is fully-canonical. The flag -0x00000001 indicates that this is a full validation; otherwise it's a +0x00000001 indicates that this is a full validation; otherwise it's a partial validation. Partial validations are not meant to vote for any particular ledger. A partial validation indicates that the validator is still online but not keeping up with consensus.

    -
    -
    -
    - -
    ledger_hash: string
    -

    If true, this is a full validation. Otherwise, this is a partial +

    ledger_hash: string

    If true, this is a full validation. Otherwise, this is a partial validation. Partial validations are not meant to vote for any particular ledger. A partial validation indicates that the validator is still online but not keeping up with consensus.

    -
    -
    -
    - -
    ledger_index: string
    -

    The ledger index of the proposed ledger.

    -
    -
    -
    - -
    load_fee?: number
    -

    The local load-scaled transaction cost this validator is currently +

    ledger_index: string

    The ledger index of the proposed ledger.

    +
    load_fee?: number

    The local load-scaled transaction cost this validator is currently enforcing, in fee units.

    -
    -
    -
    - -
    master_key?: string
    -

    The validator's master public key, if the validator is using a validator -token, in the XRP Ledger's base58 format.

    -
    -
    -
    - -
    reserve_base?: number
    -

    The minimum reserve requirement (account_reserve value) this validator +

    master_key?: string

    The validator's master public key, if the validator is using a validator +token, in the XRP Ledger's base58 format.

    +
    reserve_base?: number

    The minimum reserve requirement (account_reserve value) this validator wants to set by fee voting.

    -
    -
    -
    - -
    reserve_inc?: number
    -

    The increment in the reserve requirement (owner_reserve value) this +

    reserve_inc?: number

    The increment in the reserve requirement (owner_reserve value) this validator wants to set by fee voting.

    -
    -
    -
    - -
    signature: string
    -

    The signature that the validator used to sign its vote for this ledger.

    -
    -
    -
    - -
    signing_time: number
    -

    When this validation vote was signed, in seconds since the Ripple Epoch.

    -
    -
    -
    - -
    type: "validationReceived"
    -
    - -
    validation_public_key: string
    -

    The public key from the key-pair that the validator used to sign the -message, in the XRP Ledger's base58 format. This identifies the validator +

    signature: string

    The signature that the validator used to sign its vote for this ledger.

    +
    signing_time: number

    When this validation vote was signed, in seconds since the Ripple Epoch.

    +
    type: "validationReceived"
    validation_public_key: string

    The public key from the key-pair that the validator used to sign the +message, in the XRP Ledger's base58 format. This identifies the validator sending the message and can also be used to verify the signature. If the validator is using a token, this is an ephemeral public key.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/XChainAccountCreateCommit.html b/docs/interfaces/XChainAccountCreateCommit.html index 1a5ecdc8ff..ee5dbfd4c1 100644 --- a/docs/interfaces/XChainAccountCreateCommit.html +++ b/docs/interfaces/XChainAccountCreateCommit.html @@ -1,591 +1,70 @@ -XChainAccountCreateCommit | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainAccountCreateCommit

    -
    -

    The XChainAccountCreateCommit transaction creates a new account on one of the +XChainAccountCreateCommit | xrpl

    Interface XChainAccountCreateCommit

    The XChainAccountCreateCommit transaction creates a new account on one of the chains a bridge connects, which serves as the bridge entrance for that chain.

    WARNING: This transaction should only be executed if the witness attestations -will be reliably delivered to the destination chain. If the signatures aren't +will be reliably delivered to the destination chain. If the signatures aren't delivered, then account creation will be blocked until attestations are received. This can be used maliciously; to disable this transaction on XRP-XRP bridges, -the bridge's MinAccountCreateAmount shouldn't be present.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +the bridge's MinAccountCreateAmount shouldn't be present.

    +
    interface XChainAccountCreateCommit {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β Destination: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SignatureReward: Amount;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainAccountCreateCommit";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The amount, in XRP, to use for account creation. This must be greater than or +

    Amount: Amount

    The amount, in XRP, to use for account creation. This must be greater than or equal to the MinAccountCreateAmount specified in the Bridge ledger object.

    -
    -
    -
    - -
    Destination: string
    -

    The destination account on the destination chain.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Destination: string

    The destination account on the destination chain.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SignatureReward: Amount
    -

    The amount, in XRP, to be used to reward the witness servers for providing +

    SignatureReward: Amount

    The amount, in XRP, to be used to reward the witness servers for providing signatures. This must match the amount on the Bridge ledger object.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainAccountCreateCommit"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainAccountCreateCommit"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to create accounts for.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainBridge: XChainBridge

    The bridge to create accounts for.

    +
    diff --git a/docs/interfaces/XChainAddAccountCreateAttestation.html b/docs/interfaces/XChainAddAccountCreateAttestation.html index e36055fe54..07b951bea5 100644 --- a/docs/interfaces/XChainAddAccountCreateAttestation.html +++ b/docs/interfaces/XChainAddAccountCreateAttestation.html @@ -1,657 +1,80 @@ -XChainAddAccountCreateAttestation | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainAddAccountCreateAttestation

    -
    -

    The XChainAddAccountCreateAttestation transaction provides an attestation +XChainAddAccountCreateAttestation | xrpl

    Interface XChainAddAccountCreateAttestation

    The XChainAddAccountCreateAttestation transaction provides an attestation from a witness server that a XChainAccountCreateCommit transaction occurred on the other chain.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainAddAccountCreateAttestation {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Destination: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OtherChainSource: string;
    Β Β Β Β PublicKey: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signature: string;
    Β Β Β Β SignatureReward: Amount;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainAddAccountCreateAttestation";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β XChainAccountCreateCount: string | number;
    Β Β Β Β XChainBridge: XChainBridge;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The amount committed by the XChainAccountCreateCommit transaction +

    Amount: Amount

    The amount committed by the XChainAccountCreateCommit transaction on the source chain.

    -
    -
    -
    - -
    AttestationRewardAccount: string
    -

    The account that should receive this signer's share of the SignatureReward.

    -
    -
    -
    - -
    AttestationSignerAccount: string
    -

    The account on the door account's signer list that is signing the transaction.

    -
    -
    -
    - -
    Destination: string
    -

    The destination account for the funds on the destination chain.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    AttestationRewardAccount: string

    The account that should receive this signer's share of the SignatureReward.

    +
    AttestationSignerAccount: string

    The account on the door account's signer list that is signing the transaction.

    +
    Destination: string

    The destination account for the funds on the destination chain.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OtherChainSource: string
    -

    The account on the source chain that submitted the XChainAccountCreateCommit +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OtherChainSource: string

    The account on the source chain that submitted the XChainAccountCreateCommit transaction that triggered the event associated with the attestation.

    -
    -
    -
    - -
    PublicKey: string
    -

    The public key used to verify the signature.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    PublicKey: string

    The public key used to verify the signature.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signature: string
    -

    The signature attesting to the event on the other chain.

    -
    -
    -
    - -
    SignatureReward: Amount
    -

    The signature reward paid in the XChainAccountCreateCommit transaction.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signature: string

    The signature attesting to the event on the other chain.

    +
    SignatureReward: Amount

    The signature reward paid in the XChainAccountCreateCommit transaction.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainAddAccountCreateAttestation"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainAddAccountCreateAttestation"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    WasLockingChainSend: 0 | 1
    -

    A boolean representing the chain where the event occurred.

    -
    -
    -
    - -
    XChainAccountCreateCount: string | number
    -

    The counter that represents the order that the claims must be processed in.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge associated with the attestation.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    WasLockingChainSend: 0 | 1

    A boolean representing the chain where the event occurred.

    +
    XChainAccountCreateCount: string | number

    The counter that represents the order that the claims must be processed in.

    +
    XChainBridge: XChainBridge

    The bridge associated with the attestation.

    +
    diff --git a/docs/interfaces/XChainAddClaimAttestation.html b/docs/interfaces/XChainAddClaimAttestation.html index 67502526b9..da9b8b730b 100644 --- a/docs/interfaces/XChainAddClaimAttestation.html +++ b/docs/interfaces/XChainAddClaimAttestation.html @@ -1,647 +1,78 @@ -XChainAddClaimAttestation | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainAddClaimAttestation

    -
    -

    The XChainAddClaimAttestation transaction provides proof from a witness server, +XChainAddClaimAttestation | xrpl

    Interface XChainAddClaimAttestation

    The XChainAddClaimAttestation transaction provides proof from a witness server, attesting to an XChainCommit transaction.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainAddClaimAttestation {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β AttestationRewardAccount: string;
    Β Β Β Β AttestationSignerAccount: string;
    Β Β Β Β Destination?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OtherChainSource: string;
    Β Β Β Β PublicKey: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signature: string;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainAddClaimAttestation";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β WasLockingChainSend: 0 | 1;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainClaimID: string | number;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The amount committed by the XChainCommit transaction on the source chain.

    -
    -
    -
    - -
    AttestationRewardAccount: string
    -

    The account that should receive this signer's share of the SignatureReward.

    -
    -
    -
    - -
    AttestationSignerAccount: string
    -

    The account on the door account's signer list that is signing the transaction.

    -
    -
    -
    - -
    Destination?: string
    -

    The destination account for the funds on the destination chain (taken from +

    Amount: Amount

    The amount committed by the XChainCommit transaction on the source chain.

    +
    AttestationRewardAccount: string

    The account that should receive this signer's share of the SignatureReward.

    +
    AttestationSignerAccount: string

    The account on the door account's signer list that is signing the transaction.

    +
    Destination?: string

    The destination account for the funds on the destination chain (taken from the XChainCommit transaction).

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OtherChainSource: string
    -

    The account on the source chain that submitted the XChainCommit +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OtherChainSource: string

    The account on the source chain that submitted the XChainCommit transaction that triggered the event associated with the attestation.

    -
    -
    -
    - -
    PublicKey: string
    -

    The public key used to verify the attestation signature.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    PublicKey: string

    The public key used to verify the attestation signature.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signature: string
    -

    The signature attesting to the event on the other chain.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signature: string

    The signature attesting to the event on the other chain.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainAddClaimAttestation"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainAddClaimAttestation"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    WasLockingChainSend: 0 | 1
    -

    A boolean representing the chain where the event occurred.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to use to transfer funds.

    -
    -
    -
    - -
    XChainClaimID: string | number
    -

    The XChainClaimID associated with the transfer, which was included in the +

    WasLockingChainSend: 0 | 1

    A boolean representing the chain where the event occurred.

    +
    XChainBridge: XChainBridge

    The bridge to use to transfer funds.

    +
    XChainClaimID: string | number

    The XChainClaimID associated with the transfer, which was included in the XChainCommit transaction.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/XChainBridge.html b/docs/interfaces/XChainBridge.html index 210ea3444b..93b565ece9 100644 --- a/docs/interfaces/XChainBridge.html +++ b/docs/interfaces/XChainBridge.html @@ -1,393 +1,11 @@ -XChainBridge | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainBridge

    -
    -

    Hierarchy

    -
      -
    • XChainBridge
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    IssuingChainDoor: string
    -
    - -
    IssuingChainIssue: Currency
    -
    - -
    LockingChainDoor: string
    -
    - -
    LockingChainIssue: Currency
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +XChainBridge | xrpl

    Interface XChainBridge

    interface XChainBridge {
    Β Β Β Β IssuingChainDoor: string;
    Β Β Β Β IssuingChainIssue: Currency;
    Β Β Β Β LockingChainDoor: string;
    Β Β Β Β LockingChainIssue: Currency;
    }

    Properties

    IssuingChainDoor: string
    IssuingChainIssue: Currency
    LockingChainDoor: string
    LockingChainIssue: Currency
    diff --git a/docs/interfaces/XChainClaim.html b/docs/interfaces/XChainClaim.html index 0e2d535e29..fe9e1d592b 100644 --- a/docs/interfaces/XChainClaim.html +++ b/docs/interfaces/XChainClaim.html @@ -1,600 +1,71 @@ -XChainClaim | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainClaim

    -
    -

    The XChainClaim transaction completes a cross-chain transfer of value. It +XChainClaim | xrpl

    Interface XChainClaim

    The XChainClaim transaction completes a cross-chain transfer of value. It allows a user to claim the value on the destination chain - the equivalent of the value locked on the source chain.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainClaim {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β Destination: string;
    Β Β Β Β DestinationTag?: number;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainClaim";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainClaimID: string | number;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The amount to claim on the destination chain. This must match the amount +

    Amount: Amount

    The amount to claim on the destination chain. This must match the amount attested to on the attestations associated with this XChainClaimID.

    -
    -
    -
    - -
    Destination: string
    -

    The destination account on the destination chain. It must exist or the +

    Destination: string

    The destination account on the destination chain. It must exist or the transaction will fail. However, if the transaction fails in this case, the -sequence number and collected signatures won't be destroyed, and the +sequence number and collected signatures won't be destroyed, and the transaction can be rerun with a different destination.

    -
    -
    -
    - -
    DestinationTag?: number
    -

    An integer destination tag.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    DestinationTag?: number

    An integer destination tag.

    +
    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainClaim"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainClaim"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to use for the transfer.

    -
    -
    -
    - -
    XChainClaimID: string | number
    -

    The unique integer ID for the cross-chain transfer that was referenced in the +

    XChainBridge: XChainBridge

    The bridge to use for the transfer.

    +
    XChainClaimID: string | number

    The unique integer ID for the cross-chain transfer that was referenced in the corresponding XChainCommit transaction.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/XChainCommit.html b/docs/interfaces/XChainCommit.html index 9ea16a70cf..7dc02fe06f 100644 --- a/docs/interfaces/XChainCommit.html +++ b/docs/interfaces/XChainCommit.html @@ -1,594 +1,73 @@ -XChainCommit | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainCommit

    -
    -

    The XChainCommit is the second step in a cross-chain transfer. It puts assets +XChainCommit | xrpl

    Interface XChainCommit

    The XChainCommit is the second step in a cross-chain transfer. It puts assets into trust on the locking chain so that they can be wrapped on the issuing chain, or burns wrapped assets on the issuing chain so that they can be returned on the locking chain.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainCommit {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Amount: Amount;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OtherChainDestination?: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainCommit";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    Β Β Β Β XChainClaimID: string | number;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Amount: Amount
    -

    The asset to commit, and the quantity. This must match the door account's -LockingChainIssue (if on the locking chain) or the door account's +

    Amount: Amount

    The asset to commit, and the quantity. This must match the door account's +LockingChainIssue (if on the locking chain) or the door account's IssuingChainIssue (if on the issuing chain).

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OtherChainDestination?: string
    -

    The destination account on the destination chain. If this is not specified, +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OtherChainDestination?: string

    The destination account on the destination chain. If this is not specified, the account that submitted the XChainCreateClaimID transaction on the destination chain will need to submit a XChainClaim transaction to claim the funds.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainCommit"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainCommit"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to use to transfer funds.

    -
    -
    -
    - -
    XChainClaimID: string | number
    -

    The unique integer ID for a cross-chain transfer. This must be acquired on +

    XChainBridge: XChainBridge

    The bridge to use to transfer funds.

    +
    XChainClaimID: string | number

    The unique integer ID for a cross-chain transfer. This must be acquired on the destination chain (via a XChainCreateClaimID transaction) and checked from a validated ledger before submitting this transaction. If an incorrect sequence number is specified, the funds will be lost.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/interfaces/XChainCreateBridge.html b/docs/interfaces/XChainCreateBridge.html index 77aeb5bd18..7a8d6569f6 100644 --- a/docs/interfaces/XChainCreateBridge.html +++ b/docs/interfaces/XChainCreateBridge.html @@ -1,579 +1,66 @@ -XChainCreateBridge | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainCreateBridge

    -
    -

    The XChainCreateBridge transaction creates a new Bridge ledger object +XChainCreateBridge | xrpl

    Interface XChainCreateBridge

    The XChainCreateBridge transaction creates a new Bridge ledger object and defines a new cross-chain bridge entrance on the chain that the transaction is submitted on. It includes information about door accounts and assets for the bridge.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainCreateBridge {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MinAccountCreateAmount?: Amount;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SignatureReward: Amount;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainCreateBridge";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    MinAccountCreateAmount?: Amount
    -

    The minimum amount, in XRP, required for a XChainAccountCreateCommit -transaction. If this isn't present, the XChainAccountCreateCommit +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MinAccountCreateAmount?: Amount

    The minimum amount, in XRP, required for a XChainAccountCreateCommit +transaction. If this isn't present, the XChainAccountCreateCommit transaction will fail. This field can only be present on XRP-XRP bridges.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SignatureReward: Amount
    -

    The total amount to pay the witness servers for their signatures. This amount +

    SignatureReward: Amount

    The total amount to pay the witness servers for their signatures. This amount will be split among the signers.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainCreateBridge"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainCreateBridge"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge (door accounts and assets) to create.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainBridge: XChainBridge

    The bridge (door accounts and assets) to create.

    +
    diff --git a/docs/interfaces/XChainCreateClaimID.html b/docs/interfaces/XChainCreateClaimID.html index e55a111fbc..a518e3e23b 100644 --- a/docs/interfaces/XChainCreateClaimID.html +++ b/docs/interfaces/XChainCreateClaimID.html @@ -1,576 +1,63 @@ -XChainCreateClaimID | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainCreateClaimID

    -
    -

    The XChainCreateClaimID transaction creates a new cross-chain claim ID that is +XChainCreateClaimID | xrpl

    Interface XChainCreateClaimID

    The XChainCreateClaimID transaction creates a new cross-chain claim ID that is used for a cross-chain transfer. A cross-chain claim ID represents one cross-chain transfer of value.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainCreateClaimID {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | GlobalFlags;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β NetworkID?: number;
    Β Β Β Β OtherChainSource: string;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SignatureReward: Amount;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainCreateClaimID";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - -
    Flags?: number | GlobalFlags
    -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Flags?: number | GlobalFlags

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    OtherChainSource: string
    -

    The account that must send the XChainCommit transaction on the source chain.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    NetworkID?: number

    The network id of the transaction.

    +
    OtherChainSource: string

    The account that must send the XChainCommit transaction on the source chain.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SignatureReward: Amount
    -

    The amount, in XRP, to reward the witness servers for providing signatures. +

    SignatureReward: Amount

    The amount, in XRP, to reward the witness servers for providing signatures. This must match the amount on the Bridge ledger object.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainCreateClaimID"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainCreateClaimID"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to create the claim ID for.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainBridge: XChainBridge

    The bridge to create the claim ID for.

    +
    diff --git a/docs/interfaces/XChainModifyBridge.html b/docs/interfaces/XChainModifyBridge.html index 421296c25f..042bdc680f 100644 --- a/docs/interfaces/XChainModifyBridge.html +++ b/docs/interfaces/XChainModifyBridge.html @@ -1,576 +1,63 @@ -XChainModifyBridge | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainModifyBridge

    -
    -

    The XChainModifyBridge transaction allows bridge managers to modify the parameters +XChainModifyBridge | xrpl

    Interface XChainModifyBridge

    The XChainModifyBridge transaction allows bridge managers to modify the parameters of the bridge.

    -
    -
    -
    -

    Hierarchy

    -
    -
    -
    -
    - -
    -
    -

    Properties

    -
    - -
    Account: string
    -

    The unique address of the transaction sender.

    -
    -
    -
    - -
    AccountTxnID?: string
    -

    Hash value identifying another transaction. If provided, this transaction -is only valid if the sending account's previously-sent transaction matches +

    interface XChainModifyBridge {
    Β Β Β Β Account: string;
    Β Β Β Β AccountTxnID?: string;
    Β Β Β Β Fee?: string;
    Β Β Β Β Flags?: number | XChainModifyBridgeFlagsInterface;
    Β Β Β Β LastLedgerSequence?: number;
    Β Β Β Β Memos?: Memo[];
    Β Β Β Β MinAccountCreateAmount?: Amount;
    Β Β Β Β NetworkID?: number;
    Β Β Β Β Sequence?: number;
    Β Β Β Β SignatureReward?: Amount;
    Β Β Β Β Signers?: Signer[];
    Β Β Β Β SigningPubKey?: string;
    Β Β Β Β SourceTag?: number;
    Β Β Β Β TicketSequence?: number;
    Β Β Β Β TransactionType: "XChainModifyBridge";
    Β Β Β Β TxnSignature?: string;
    Β Β Β Β XChainBridge: XChainBridge;
    }

    Hierarchy (View Summary)

    Properties

    Account: string

    The unique address of the transaction sender.

    +
    AccountTxnID?: string

    Hash value identifying another transaction. If provided, this transaction +is only valid if the sending account's previously-sent transaction matches the provided hash.

    -
    -
    -
    - -
    Fee?: string
    -

    Integer amount of XRP, in drops, to be destroyed as a cost for +

    Fee?: string

    Integer amount of XRP, in drops, to be destroyed as a cost for distributing this transaction to the network. Some transaction types have different minimum requirements.

    -
    -
    -
    - - -

    Set of bit-flags for this transaction.

    -
    -
    -
    - -
    LastLedgerSequence?: number
    -

    Highest ledger index this transaction can appear in. Specifying this field +

    Set of bit-flags for this transaction.

    +
    LastLedgerSequence?: number

    Highest ledger index this transaction can appear in. Specifying this field places a strict upper limit on how long the transaction can wait to be validated or rejected.

    -
    -
    -
    - -
    Memos?: Memo[]
    -

    Additional arbitrary information used to identify this transaction.

    -
    -
    -
    - -
    MinAccountCreateAmount?: Amount
    -

    The minimum amount, in XRP, required for a XChainAccountCreateCommit +

    Memos?: Memo[]

    Additional arbitrary information used to identify this transaction.

    +
    MinAccountCreateAmount?: Amount

    The minimum amount, in XRP, required for a XChainAccountCreateCommit transaction. If this is not present, the XChainAccountCreateCommit transaction will fail. This field can only be present on XRP-XRP bridges.

    -
    -
    -
    - -
    NetworkID?: number
    -

    The network id of the transaction.

    -
    -
    -
    - -
    Sequence?: number
    -

    The sequence number of the account sending the transaction. A transaction +

    NetworkID?: number

    The network id of the transaction.

    +
    Sequence?: number

    The sequence number of the account sending the transaction. A transaction is only valid if the Sequence number is exactly 1 greater than the previous transaction from the same account. The special case 0 means the transaction is using a Ticket instead.

    -
    -
    -
    - -
    SignatureReward?: Amount
    -

    The signature reward split between the witnesses for submitting attestations.

    -
    -
    -
    - -
    Signers?: Signer[]
    -

    Array of objects that represent a multi-signature which authorizes this +

    SignatureReward?: Amount

    The signature reward split between the witnesses for submitting attestations.

    +
    Signers?: Signer[]

    Array of objects that represent a multi-signature which authorizes this transaction.

    -
    -
    -
    - -
    SigningPubKey?: string
    -

    Hex representation of the public key that corresponds to the private key +

    SigningPubKey?: string

    Hex representation of the public key that corresponds to the private key used to sign this transaction. If an empty string, indicates a multi-signature is present in the Signers field instead.

    -
    -
    -
    - -
    SourceTag?: number
    -

    Arbitrary integer used to identify the reason for this payment, or a sender +

    SourceTag?: number

    Arbitrary integer used to identify the reason for this payment, or a sender on whose behalf this transaction is made. Conventionally, a refund should -specify the initial payment's SourceTag as the refund payment's +specify the initial payment's SourceTag as the refund payment's DestinationTag.

    -
    -
    -
    - -
    TicketSequence?: number
    -

    The sequence number of the ticket to use in place of a Sequence number. If +

    TicketSequence?: number

    The sequence number of the ticket to use in place of a Sequence number. If this is provided, Sequence must be 0. Cannot be used with AccountTxnID.

    -
    -
    -
    - -
    TransactionType: "XChainModifyBridge"
    -

    The type of transaction. Valid types include: Payment, OfferCreate, +

    TransactionType: "XChainModifyBridge"

    The type of transaction. Valid types include: Payment, OfferCreate, TrustSet, and many others.

    -
    -
    -
    - -
    TxnSignature?: string
    -

    The signature that verifies this transaction as originating from the +

    TxnSignature?: string

    The signature that verifies this transaction as originating from the account it says it is from.

    -
    -
    -
    - -
    XChainBridge: XChainBridge
    -

    The bridge to modify.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    XChainBridge: XChainBridge

    The bridge to modify.

    +
    diff --git a/docs/interfaces/XChainModifyBridgeFlagsInterface.html b/docs/interfaces/XChainModifyBridgeFlagsInterface.html index 6f41b82486..e5170977cb 100644 --- a/docs/interfaces/XChainModifyBridgeFlagsInterface.html +++ b/docs/interfaces/XChainModifyBridgeFlagsInterface.html @@ -1,382 +1,11 @@ -XChainModifyBridgeFlagsInterface | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XChainModifyBridgeFlagsInterface

    -
    -

    Map of flags to boolean values representing XChainModifyBridge transaction +XChainModifyBridgeFlagsInterface | xrpl

    Interface XChainModifyBridgeFlagsInterface

    Map of flags to boolean values representing XChainModifyBridge transaction flags.

    -
    -
    -
    -

    Hierarchy

    -
      -
    • GlobalFlags -
        -
      • XChainModifyBridgeFlagsInterface
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    tfClearAccountCreateAmount?: boolean
    -

    Clears the MinAccountCreateAmount of the bridge.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    interface XChainModifyBridgeFlagsInterface {
    Β Β Β Β tfClearAccountCreateAmount?: boolean;
    }

    Hierarchy

    • GlobalFlags
      • XChainModifyBridgeFlagsInterface

    Properties

    tfClearAccountCreateAmount?: boolean

    Clears the MinAccountCreateAmount of the bridge.

    +
    diff --git a/docs/interfaces/XRP.html b/docs/interfaces/XRP.html index 8d7ab06338..4211606383 100644 --- a/docs/interfaces/XRP.html +++ b/docs/interfaces/XRP.html @@ -1,379 +1,9 @@ -XRP | xrpl
    -
    - -
    -
    -
    -
    - -

    Interface XRP

    -
    -

    Hierarchy

    -
      -
    • XRP
    -
    -
    -
    - -
    -
    -

    Properties

    -
    -
    -

    Properties

    -
    - -
    currency: "XRP"
    -
    - -
    issuer?: undefined
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +XRP | xrpl

    Interface XRP

    interface XRP {
    Β Β Β Β currency: "XRP";
    Β Β Β Β issuer?: undefined;
    }

    Properties

    Properties

    currency: "XRP"
    issuer?: undefined
    diff --git a/docs/modules.html b/docs/modules.html index a44647c87f..981c872a45 100644 --- a/docs/modules.html +++ b/docs/modules.html @@ -1,679 +1,7 @@ -xrpl
    -
    - -
    -
    -
    -
    -

    xrpl

    -
    -
    -

    Index

    -
    -

    Clients

    -
    -
    -

    Signing

    -
    -
    -

    Transaction Models

    -
    -
    -

    Transaction Flags

    -
    -
    -

    Utilities

    -
    -
    -

    Requests

    -
    -
    -

    Responses

    -
    -
    -

    Streams

    -
    -
    -

    Errors

    -
    -
    -

    Other

    -
    LedgerEntry -ECDSA -AMMBid -AMMCreate -AMMDelete -AMMDeposit -AMMDepositFlagsInterface -AMMVote -AMMWithdraw -AMMWithdrawFlagsInterface -AccountInfoAccountFlags -AccountLinesTrustline -AccountOffer -AccountQueueData -AccountQueueTransaction -AccountTxTransaction -AuthAccount -Balance -BaseRequest -BaseResponse -BaseTransaction -BookOffer -BookOfferCurrency -Channel -Clawback -ClientOptions -CreatedNode -DeletedNode -FundingOptions -GatewayBalance -IssuedCurrency -IssuedCurrencyAmount -JobType -LedgerBinary -LedgerDataBinaryLedgerEntry -LedgerModifiedOfferCreateTransaction -LedgerQueueData -LedgerStreamResponse -Memo -ModifiedNode -NFTHistoryTransaction -NFTokenAcceptOffer -NFTokenBurn -NFTokenCancelOffer -NFTokenCreateOffer -NFTokenMint -PathFindCloseRequest -PathFindCreateRequest -PathFindPathOption -PathFindStatusRequest -PathStep -ResponseOnlyTxInfo -ResponseWarning -RipplePathFindPathOption -SetFeePostAmendment -SetFeePreAmendment -Signer -SignerEntry -SourceCurrencyAmount -StateAccounting -SubscribeBook -TransactionMetadataBase -UnsubscribeBook -XChainBridge -XRP -AccountObject -AccountObjectType -Amount -BooksSnapshot -Currency -LedgerDataLabeledLedgerEntry -LedgerDataLedgerState -LedgerIndex -MarkerRequest -MarkerResponse -Node -Path -RequestAllResponseMap -RequestResponseMap -ServerState -StateAccountingFinal -StreamType -TransactionMetadata -classicAddressToXAddress -decode -decodeAccountID -decodeAccountPublic -decodeNodePublic -decodeSeed -decodeXAddress -deriveAddress -deriveKeypair -encode -encodeAccountID -encodeAccountPublic -encodeForMultiSigning -encodeForSigning -encodeForSigningClaim -encodeNodePublic -encodeSeed -encodeXAddress -getNFTokenID -getXChainClaimID -isCreatedNode -isDeletedNode -isModifiedNode -isValidClassicAddress -isValidXAddress -keyToRFC1751Mnemonic -parseAccountRootFlags -parseNFTokenID -rfc1751MnemonicToKey -setTransactionFlagsToNumber -verifyKeypairSignature -walletFromSecretNumbers -xAddressToClassicAddress -
    -
    -

    Pseudo Transaction Models

    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +xrpl

    xrpl

    Clients

    Client

    Signing

    Wallet
    multisign

    Transaction Models

    AccountDelete
    AccountSet
    CheckCancel
    CheckCash
    CheckCreate
    CredentialAccept
    CredentialCreate
    CredentialDelete
    DepositPreauth
    DIDDelete
    DIDSet
    EscrowCancel
    EscrowCreate
    EscrowFinish
    OfferCancel
    OfferCreate
    OracleDelete
    OracleSet
    Payment
    PaymentChannelClaim
    PaymentChannelCreate
    PaymentChannelFund
    SetRegularKey
    SignerListSet
    TicketCreate
    TransactionAndMetadata
    TrustSet
    XChainAccountCreateCommit
    XChainAddAccountCreateAttestation
    XChainAddClaimAttestation
    XChainClaim
    XChainCommit
    XChainCreateBridge
    XChainCreateClaimID
    XChainModifyBridge
    PseudoTransaction
    SubmittableTransaction
    Transaction

    Transaction Flags

    AccountSetAsfFlags
    AccountSetTfFlags
    AMMClawbackFlags
    AMMDepositFlags
    AMMWithdrawFlags
    EnableAmendmentFlags
    MPTokenAuthorizeFlags
    MPTokenIssuanceCreateFlags
    MPTokenIssuanceSetFlags
    NFTokenCreateOfferFlags
    NFTokenMintFlags
    OfferCreateFlags
    PaymentChannelClaimFlags
    PaymentFlags
    TrustSetFlags
    XChainModifyBridgeFlags
    AccountSetFlagsInterface
    AMMClawbackFlagsInterface
    MPTokenAuthorizeFlagsInterface
    MPTokenIssuanceCreateFlagsInterface
    MPTokenIssuanceSetFlagsInterface
    NFTokenCreateOfferFlagsInterface
    NFTokenMintFlagsInterface
    OfferCreateFlagsInterface
    PaymentChannelClaimFlagsInterface
    PaymentFlagsInterface
    TrustSetFlagsInterface
    XChainModifyBridgeFlagsInterface

    Utilities

    hashes
    convertHexToString
    convertStringToHex
    decimalToQuality
    decimalToTransferRate
    deriveXAddress
    dropsToXrp
    getBalanceChanges
    hasNextPage
    isoTimeToRippleTime
    isValidAddress
    isValidSecret
    percentToQuality
    percentToTransferRate
    qualityToDecimal
    rippleTimeToISOTime
    rippleTimeToUnixTime
    signPaymentChannelClaim
    transferRateToDecimal
    unixTimeToRippleTime
    validate
    verifyPaymentChannelClaim
    verifySignature
    xrpToDrops

    Requests

    AccountChannelsRequest
    AccountCurrenciesRequest
    AccountInfoRequest
    AccountLinesRequest
    AccountNFTsRequest
    AccountObjectsRequest
    AccountOffersRequest
    AccountTxRequest
    AMMInfoRequest
    BookOffersRequest
    ChannelVerifyRequest
    DepositAuthorizedRequest
    FeeRequest
    GatewayBalancesRequest
    GetAggregatePriceRequest
    LedgerClosedRequest
    LedgerCurrentRequest
    LedgerDataRequest
    LedgerEntryRequest
    LedgerRequest
    ManifestRequest
    NFTBuyOffersRequest
    NFTHistoryRequest
    NFTInfoRequest
    NFTsByIssuerRequest
    NFTSellOffersRequest
    NoRippleCheckRequest
    PingRequest
    RandomRequest
    RipplePathFindRequest
    ServerDefinitionsRequest
    ServerInfoRequest
    ServerStateRequest
    SubmitMultisignedRequest
    SubmitRequest
    SubscribeRequest
    TransactionEntryRequest
    TxRequest
    UnsubscribeRequest
    FeatureRequest
    PathFindRequest
    Request
    SimulateRequest

    Responses

    AccountChannelsResponse
    AccountCurrenciesResponse
    AccountInfoResponse
    AccountLinesResponse
    AccountNFToken
    AccountNFTsResponse
    AccountObjectsResponse
    AccountOffersResponse
    AMMInfoResponse
    BookOffersResponse
    ChannelVerifyResponse
    DepositAuthorizedResponse
    ErrorResponse
    FeeResponse
    GatewayBalancesResponse
    GetAggregatePriceResponse
    LedgerClosedResponse
    LedgerCurrentResponse
    LedgerDataResponse
    LedgerEntryResponse
    LedgerResponse
    ManifestResponse
    NFTBuyOffersResponse
    NFTHistoryResponse
    NFTInfoResponse
    NFTOffer
    NFToken
    NFTsByIssuerResponse
    NFTSellOffersResponse
    NoRippleCheckResponse
    PathFindResponse
    PingResponse
    RandomResponse
    RipplePathFindResponse
    ServerDefinitionsResponse
    ServerInfoResponse
    ServerStateResponse
    SubmitMultisignedResponse
    SubmitResponse
    SubscribeResponse
    TransactionEntryResponse
    TxResponse
    UnsubscribeResponse
    AccountTxResponse
    FeatureResponse
    Response
    SimulateResponse

    Streams

    ConsensusStream
    LedgerStream
    OrderBookStream
    PathFindStream
    PeerStatusStream
    ValidationStream
    Stream
    TransactionStream
    TransactionV1Stream

    Errors

    ConnectionError
    DisconnectedError
    NotConnectedError
    NotFoundError
    ResponseFormatError
    RippledError
    RippledNotInitializedError
    TimeoutError
    UnexpectedError
    ValidationError
    XrplError
    XRPLFaucetError

    Other

    LedgerEntry
    ECDSA
    AccountInfoAccountFlags
    AccountLinesTrustline
    AccountOffer
    AccountQueueData
    AccountQueueTransaction
    AccountTxTransaction
    AMMBid
    AMMClawback
    AMMCreate
    AMMDelete
    AMMDeposit
    AMMDepositFlagsInterface
    AMMVote
    AMMWithdraw
    AMMWithdrawFlagsInterface
    AuthAccount
    AuthorizeCredential
    Balance
    BaseRequest
    BaseResponse
    BaseTransaction
    BookOffer
    BookOfferCurrency
    Channel
    Clawback
    ClientOptions
    CreatedNode
    DeletedNode
    FundingOptions
    GatewayBalance
    IssuedCurrency
    IssuedCurrencyAmount
    JobType
    LedgerBinary
    LedgerDataBinaryLedgerEntry
    LedgerModifiedOfferCreateTransaction
    LedgerQueueData
    LedgerStreamResponse
    Memo
    ModifiedNode
    MPTAmount
    MPTokenAuthorize
    MPTokenIssuanceCreate
    MPTokenIssuanceDestroy
    MPTokenIssuanceSet
    NFTHistoryTransaction
    NFTokenAcceptOffer
    NFTokenBurn
    NFTokenCancelOffer
    NFTokenCreateOffer
    NFTokenMint
    NFTokenModify
    PathFindCloseRequest
    PathFindCreateRequest
    PathFindPathOption
    PathFindStatusRequest
    PathStep
    PermissionedDomainDelete
    PermissionedDomainSet
    PriceData
    ResponseOnlyTxInfo
    ResponseWarning
    RipplePathFindPathOption
    SetFeePostAmendment
    SetFeePreAmendment
    Signer
    SignerEntry
    SourceCurrencyAmount
    StateAccounting
    SubscribeBook
    TransactionMetadataBase
    UnsubscribeBook
    XChainBridge
    XRP
    AccountObject
    AccountObjectType
    Amount
    APIVersion
    BooksSnapshot
    Currency
    LedgerDataLabeledLedgerEntry
    LedgerDataLedgerState
    LedgerIndex
    MarkerRequest
    MarkerResponse
    Node
    Path
    RequestAllResponseMap
    RequestResponseMap
    ServerState
    StateAccountingFinal
    StreamType
    TransactionMetadata
    DEFAULT_API_VERSION
    RIPPLED_API_V1
    RIPPLED_API_V2
    classicAddressToXAddress
    convertTxFlagsToNumber
    decode
    decodeAccountID
    decodeAccountPublic
    decodeNodePublic
    decodeSeed
    decodeXAddress
    deriveAddress
    deriveKeypair
    encode
    encodeAccountID
    encodeAccountPublic
    encodeForMultiSigning
    encodeForSigning
    encodeForSigningClaim
    encodeNodePublic
    encodeSeed
    encodeXAddress
    getNFTokenID
    getXChainClaimID
    isCreatedNode
    isDeletedNode
    isModifiedNode
    isMPTAmount
    isValidClassicAddress
    isValidXAddress
    keyToRFC1751Mnemonic
    parseAccountRootFlags
    parseNFTokenID
    parseTransactionFlags
    rfc1751MnemonicToKey
    setTransactionFlagsToNumber
    validateNFTokenModify
    verifyKeypairSignature
    walletFromSecretNumbers
    xAddressToClassicAddress

    Pseudo Transaction Models

    EnableAmendment
    UNLModify
    SetFee

    ResponsesV1

    AccountInfoV1Response
    LedgerV1Response
    SubmitMultisignedV1Response
    TxV1Response
    AccountTxV1Response
    diff --git a/docs/modules/LedgerEntry.html b/docs/modules/LedgerEntry.html index 6ef28423f0..6291eb18e7 100644 --- a/docs/modules/LedgerEntry.html +++ b/docs/modules/LedgerEntry.html @@ -1,442 +1,13 @@ -LedgerEntry | xrpl
    -
    - -
    -
    -
    -
    - -

    Namespace LedgerEntry

    -
    -

    LedgerEntry type definitions are exported in their own namespace to prevent +LedgerEntry | xrpl

    Namespace LedgerEntry

    LedgerEntry type definitions are exported in their own namespace to prevent collisions of the DepositPreauth SLE and Transaction. LedgerEntries are used by the client less often, and in most scenarios, like when parsing a -response, the client won't need to import the type. If it is required to use +response, the client won't need to import the type. If it is required to use a Ledger Entry, import LedgerEntry, and access individual ledger entry types on the LedgerEntry namespace.

    -
    -
    -
    -
    -

    Index

    -
    -

    Ledger Entries

    -
    -
    -

    Other

    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +

    Ledger Entries

    AccountRoot
    Amendments
    AMM
    Bridge
    Check
    Credential
    DepositPreauth
    DID
    DirectoryNode
    Escrow
    FeeSettings
    Ledger
    LedgerHashes
    LedgerV1
    NegativeUNL
    Oracle
    PayChannel
    RippleState
    SignerList
    Ticket
    XChainOwnedClaimID
    XChainOwnedCreateAccountClaimID

    Other

    AccountRootFlags
    OfferFlags
    RippleStateFlags
    SignerListFlags
    AccountRootFlagsInterface
    FeeSettingsPostAmendmentFields
    FeeSettingsPreAmendmentFields
    Majority
    MPToken
    MPTokenIssuance
    NFToken
    NFTokenOffer
    NFTokenPage
    Offer
    VoteSlot
    LedgerEntry
    LedgerEntryFilter
    AMENDMENTS_ID
    FEE_SETTINGS_ID
    NEGATIVE_UNL_ID
    diff --git a/docs/types/APIVersion.html b/docs/types/APIVersion.html new file mode 100644 index 0000000000..5c0cf63cd2 --- /dev/null +++ b/docs/types/APIVersion.html @@ -0,0 +1,7 @@ +APIVersion | xrpl

    Type Alias APIVersion

    APIVersion: typeof RIPPLED_API_V1 | typeof RIPPLED_API_V2
    diff --git a/docs/types/AccountObject.html b/docs/types/AccountObject.html index 75ca7da55a..26fb59b293 100644 --- a/docs/types/AccountObject.html +++ b/docs/types/AccountObject.html @@ -1,352 +1,9 @@ -AccountObject | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias AccountObject

    -
    AccountObject: Exclude<LedgerEntry, Amendments | FeeSettings | LedgerHashes>
    -

    Account Objects can be a Check, a DepositPreauth, an Escrow, an Offer, a +AccountObject | xrpl

    Type Alias AccountObject

    AccountObject: Exclude<
    Β Β Β Β LedgerEntry.LedgerEntry,
    Β Β Β Β Amendments
    Β Β Β Β | FeeSettings
    Β Β Β Β | LedgerHashes,
    >

    Account Objects can be a Check, a DepositPreauth, an Escrow, an Offer, a PayChannel, a SignerList, a Ticket, or a RippleState.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/types/AccountObjectType.html b/docs/types/AccountObjectType.html index 04cce0b4b0..d13fd8ecd9 100644 --- a/docs/types/AccountObjectType.html +++ b/docs/types/AccountObjectType.html @@ -1,348 +1,7 @@ -AccountObjectType | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias AccountObjectType

    -
    AccountObjectType: Exclude<LedgerEntryFilter, "amendments" | "fee" | "hashes">
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AccountObjectType | xrpl

    Type Alias AccountObjectType

    AccountObjectType: Exclude<LedgerEntryFilter, "amendments" | "fee" | "hashes">
    diff --git a/docs/types/AccountTxResponse.html b/docs/types/AccountTxResponse.html new file mode 100644 index 0000000000..15a07143a8 --- /dev/null +++ b/docs/types/AccountTxResponse.html @@ -0,0 +1,8 @@ +AccountTxResponse | xrpl

    Type Alias AccountTxResponse

    AccountTxResponse: AccountTxResponseBase

    Expected response from an AccountTxRequest.

    +
    diff --git a/docs/types/AccountTxV1Response.html b/docs/types/AccountTxV1Response.html new file mode 100644 index 0000000000..3ecb5a44e5 --- /dev/null +++ b/docs/types/AccountTxV1Response.html @@ -0,0 +1,8 @@ +AccountTxV1Response | xrpl

    Type Alias AccountTxV1Response

    AccountTxV1Response: AccountTxResponseBase<typeof RIPPLED_API_V1>

    Expected response from an AccountTxRequest with api_version set to 1.

    +
    diff --git a/docs/types/Amount.html b/docs/types/Amount.html index 7519035e85..e5c0ff39a6 100644 --- a/docs/types/Amount.html +++ b/docs/types/Amount.html @@ -1,348 +1,7 @@ -Amount | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias Amount

    -
    Amount: IssuedCurrencyAmount | string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Amount | xrpl
    diff --git a/docs/types/BooksSnapshot.html b/docs/types/BooksSnapshot.html index f412c644d0..1bb3cbbea6 100644 --- a/docs/types/BooksSnapshot.html +++ b/docs/types/BooksSnapshot.html @@ -1,348 +1,7 @@ -BooksSnapshot | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias BooksSnapshot

    -
    BooksSnapshot: Offer[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +BooksSnapshot | xrpl

    Type Alias BooksSnapshot

    BooksSnapshot: Offer[]
    diff --git a/docs/types/Currency.html b/docs/types/Currency.html index c8a1e829d7..7b26b80042 100644 --- a/docs/types/Currency.html +++ b/docs/types/Currency.html @@ -1,348 +1,7 @@ -Currency | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias Currency

    -
    Currency: IssuedCurrency | XRP
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Currency | xrpl
    diff --git a/docs/types/FeatureRequest.html b/docs/types/FeatureRequest.html new file mode 100644 index 0000000000..8eb22c90aa --- /dev/null +++ b/docs/types/FeatureRequest.html @@ -0,0 +1,9 @@ +FeatureRequest | xrpl

    Type Alias FeatureRequest

    FeatureRequest: FeatureAllRequest | FeatureOneRequest

    The feature command returns information about amendments this server knows about, including whether they are enabled. +Returns an FeatureResponse.

    +
    diff --git a/docs/types/FeatureResponse.html b/docs/types/FeatureResponse.html new file mode 100644 index 0000000000..a8ee26ff31 --- /dev/null +++ b/docs/types/FeatureResponse.html @@ -0,0 +1,8 @@ +FeatureResponse | xrpl

    Type Alias FeatureResponse

    FeatureResponse: FeatureAllResponse | FeatureOneResponse

    Response expected from an FeatureRequest.

    +
    diff --git a/docs/types/LedgerDataLabeledLedgerEntry.html b/docs/types/LedgerDataLabeledLedgerEntry.html index ab2dd89fa5..fb2f261e22 100644 --- a/docs/types/LedgerDataLabeledLedgerEntry.html +++ b/docs/types/LedgerDataLabeledLedgerEntry.html @@ -1,353 +1,7 @@ -LedgerDataLabeledLedgerEntry | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias LedgerDataLabeledLedgerEntry

    -
    LedgerDataLabeledLedgerEntry: {
    Β Β Β Β ledgerEntryType: string;
    } & LedgerEntry
    -
    -

    Type declaration

    -
      -
    • -
      ledgerEntryType: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerDataLabeledLedgerEntry | xrpl

    Type Alias LedgerDataLabeledLedgerEntry

    LedgerDataLabeledLedgerEntry: { ledgerEntryType: string } & LedgerEntry.LedgerEntry
    diff --git a/docs/types/LedgerDataLedgerState.html b/docs/types/LedgerDataLedgerState.html index 5926b7c1f2..e327a057ea 100644 --- a/docs/types/LedgerDataLedgerState.html +++ b/docs/types/LedgerDataLedgerState.html @@ -1,353 +1,7 @@ -LedgerDataLedgerState | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias LedgerDataLedgerState

    -
    LedgerDataLedgerState: {
    Β Β Β Β index: string;
    } & (LedgerDataBinaryLedgerEntry | LedgerDataLabeledLedgerEntry)
    -
    -

    Type declaration

    -
      -
    • -
      index: string
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerDataLedgerState | xrpl

    Type Alias LedgerDataLedgerState

    LedgerDataLedgerState: { index: string } & (
    Β Β Β Β LedgerDataBinaryLedgerEntry
    Β Β Β Β | LedgerDataLabeledLedgerEntry
    )
    diff --git a/docs/types/LedgerEntry.LedgerEntry.html b/docs/types/LedgerEntry.LedgerEntry.html index 4bff36392a..f6924a6109 100644 --- a/docs/types/LedgerEntry.LedgerEntry.html +++ b/docs/types/LedgerEntry.LedgerEntry.html @@ -1,389 +1,7 @@ -LedgerEntry | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerEntry | xrpl

    Type Alias LedgerEntry

    LedgerEntry:
    Β Β Β Β | AccountRoot
    Β Β Β Β | Amendments
    Β Β Β Β | AMM
    Β Β Β Β | Bridge
    Β Β Β Β | Check
    Β Β Β Β | Credential
    Β Β Β Β | LedgerEntry.DepositPreauth
    Β Β Β Β | DirectoryNode
    Β Β Β Β | Escrow
    Β Β Β Β | FeeSettings
    Β Β Β Β | LedgerHashes
    Β Β Β Β | NegativeUNL
    Β Β Β Β | Offer
    Β Β Β Β | Oracle
    Β Β Β Β | PayChannel
    Β Β Β Β | PermissionedDomain
    Β Β Β Β | RippleState
    Β Β Β Β | SignerList
    Β Β Β Β | Ticket
    Β Β Β Β | XChainOwnedClaimID
    Β Β Β Β | XChainOwnedCreateAccountClaimID
    diff --git a/docs/types/LedgerEntry.LedgerEntryFilter.html b/docs/types/LedgerEntry.LedgerEntryFilter.html index 6b68301e34..dd91fdec70 100644 --- a/docs/types/LedgerEntry.LedgerEntryFilter.html +++ b/docs/types/LedgerEntry.LedgerEntryFilter.html @@ -1,389 +1,7 @@ -LedgerEntryFilter | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias LedgerEntryFilter

    -
    LedgerEntryFilter: "account" | "amendments" | "amm" | "bridge" | "check" | "deposit_preauth" | "did" | "directory" | "escrow" | "fee" | "hashes" | "nft_offer" | "nft_page" | "offer" | "payment_channel" | "signer_list" | "state" | "ticket" | "xchain_owned_create_account_claim_id" | "xchain_owned_claim_id"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerEntryFilter | xrpl

    Type Alias LedgerEntryFilter

    LedgerEntryFilter:
    Β Β Β Β | "account"
    Β Β Β Β | "amendments"
    Β Β Β Β | "amm"
    Β Β Β Β | "bridge"
    Β Β Β Β | "check"
    Β Β Β Β | "credential"
    Β Β Β Β | "deposit_preauth"
    Β Β Β Β | "did"
    Β Β Β Β | "directory"
    Β Β Β Β | "escrow"
    Β Β Β Β | "fee"
    Β Β Β Β | "hashes"
    Β Β Β Β | "mpt_issuance"
    Β Β Β Β | "mptoken"
    Β Β Β Β | "nft_offer"
    Β Β Β Β | "nft_page"
    Β Β Β Β | "offer"
    Β Β Β Β | "oracle"
    Β Β Β Β | "payment_channel"
    Β Β Β Β | "permissioned_domain"
    Β Β Β Β | "signer_list"
    Β Β Β Β | "state"
    Β Β Β Β | "ticket"
    Β Β Β Β | "xchain_owned_create_account_claim_id"
    Β Β Β Β | "xchain_owned_claim_id"
    diff --git a/docs/types/LedgerIndex.html b/docs/types/LedgerIndex.html index 3d0d06c152..65272c523c 100644 --- a/docs/types/LedgerIndex.html +++ b/docs/types/LedgerIndex.html @@ -1,348 +1,7 @@ -LedgerIndex | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias LedgerIndex

    -
    LedgerIndex: number | "validated" | "closed" | "current"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +LedgerIndex | xrpl

    Type Alias LedgerIndex

    LedgerIndex: number | "validated" | "closed" | "current"
    diff --git a/docs/types/MarkerRequest.html b/docs/types/MarkerRequest.html index d0bdbab85b..dc09186bf4 100644 --- a/docs/types/MarkerRequest.html +++ b/docs/types/MarkerRequest.html @@ -1,355 +1,7 @@ -MarkerRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias MarkerRequest

    -
    MarkerRequest: Request & {
    Β Β Β Β limit?: number;
    Β Β Β Β marker?: unknown;
    }
    -
    -

    Type declaration

    -
      -
    • -
      Optional limit?: number
    • -
    • -
      Optional marker?: unknown
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +MarkerRequest | xrpl

    Type Alias MarkerRequest

    MarkerRequest: Request & { limit?: number; marker?: unknown }
    diff --git a/docs/types/MarkerResponse.html b/docs/types/MarkerResponse.html index b01f74280e..686a2cf913 100644 --- a/docs/types/MarkerResponse.html +++ b/docs/types/MarkerResponse.html @@ -1,356 +1,7 @@ -MarkerResponse | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias MarkerResponse

    -
    MarkerResponse: Response & {
    Β Β Β Β result: {
    Β Β Β Β Β Β Β Β marker?: unknown;
    Β Β Β Β };
    }
    -
    -

    Type declaration

    -
      -
    • -
      result: {
      Β Β Β Β marker?: unknown;
      }
      -
        -
      • -
        Optional marker?: unknown
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +MarkerResponse | xrpl

    Type Alias MarkerResponse<Version>

    MarkerResponse: Response<Version> & { result: { marker?: unknown } }

    Type Parameters

    diff --git a/docs/types/Node.html b/docs/types/Node.html index fd02005bb5..eab80b8e4e 100644 --- a/docs/types/Node.html +++ b/docs/types/Node.html @@ -1,348 +1,7 @@ -Node | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Node | xrpl
    diff --git a/docs/types/Path.html b/docs/types/Path.html index a025770c21..3dfde59130 100644 --- a/docs/types/Path.html +++ b/docs/types/Path.html @@ -1,348 +1,7 @@ -Path | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias Path

    -
    Path: PathStep[]
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Path | xrpl
    diff --git a/docs/types/PathFindRequest.html b/docs/types/PathFindRequest.html index 9c6b4ad7f8..e525206243 100644 --- a/docs/types/PathFindRequest.html +++ b/docs/types/PathFindRequest.html @@ -1,354 +1,11 @@ -PathFindRequest | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias PathFindRequest

    - -

    The path_find method searches for a path along which a transaction can +PathFindRequest | xrpl

    Type Alias PathFindRequest

    PathFindRequest:
    Β Β Β Β | PathFindCreateRequest
    Β Β Β Β | PathFindCloseRequest
    Β Β Β Β | PathFindStatusRequest

    The path_find method searches for a path along which a transaction can possibly be made, and periodically sends updates when the path changes over time. For a simpler version that is supported by JSON-RPC, see the ripple_path_find method.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/types/PseudoTransaction.html b/docs/types/PseudoTransaction.html index 0de9dc14db..719eb16e42 100644 --- a/docs/types/PseudoTransaction.html +++ b/docs/types/PseudoTransaction.html @@ -1,351 +1,8 @@ -PseudoTransaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias PseudoTransaction

    -
    PseudoTransaction: EnableAmendment | SetFee | UNLModify
    -

    Transactions that can only be created by validators.

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +PseudoTransaction | xrpl

    Type Alias PseudoTransaction

    PseudoTransaction: EnableAmendment | SetFee | UNLModify

    Transactions that can only be created by validators.

    +
    diff --git a/docs/types/Request.html b/docs/types/Request.html index 95ed628880..fa5af2f1f0 100644 --- a/docs/types/Request.html +++ b/docs/types/Request.html @@ -1,349 +1,7 @@ -Request | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Request | xrpl

    Type Alias Request

    Request:
    Β Β Β Β | AccountChannelsRequest
    Β Β Β Β | AccountCurrenciesRequest
    Β Β Β Β | AccountInfoRequest
    Β Β Β Β | AccountLinesRequest
    Β Β Β Β | AccountNFTsRequest
    Β Β Β Β | AccountObjectsRequest
    Β Β Β Β | AccountOffersRequest
    Β Β Β Β | AccountTxRequest
    Β Β Β Β | GatewayBalancesRequest
    Β Β Β Β | NoRippleCheckRequest
    Β Β Β Β | LedgerRequest
    Β Β Β Β | LedgerClosedRequest
    Β Β Β Β | LedgerCurrentRequest
    Β Β Β Β | LedgerDataRequest
    Β Β Β Β | LedgerEntryRequest
    Β Β Β Β | SimulateRequest
    Β Β Β Β | SubmitRequest
    Β Β Β Β | SubmitMultisignedRequest
    Β Β Β Β | TransactionEntryRequest
    Β Β Β Β | TxRequest
    Β Β Β Β | BookOffersRequest
    Β Β Β Β | DepositAuthorizedRequest
    Β Β Β Β | PathFindRequest
    Β Β Β Β | RipplePathFindRequest
    Β Β Β Β | ChannelVerifyRequest
    Β Β Β Β | SubscribeRequest
    Β Β Β Β | UnsubscribeRequest
    Β Β Β Β | FeeRequest
    Β Β Β Β | ManifestRequest
    Β Β Β Β | ServerDefinitionsRequest
    Β Β Β Β | ServerInfoRequest
    Β Β Β Β | ServerStateRequest
    Β Β Β Β | FeatureRequest
    Β Β Β Β | PingRequest
    Β Β Β Β | RandomRequest
    Β Β Β Β | NFTBuyOffersRequest
    Β Β Β Β | NFTSellOffersRequest
    Β Β Β Β | NFTInfoRequest
    Β Β Β Β | NFTHistoryRequest
    Β Β Β Β | NFTsByIssuerRequest
    Β Β Β Β | AMMInfoRequest
    Β Β Β Β | GetAggregatePriceRequest
    diff --git a/docs/types/RequestAllResponseMap.html b/docs/types/RequestAllResponseMap.html index 19e2fc80a1..ab2db58036 100644 --- a/docs/types/RequestAllResponseMap.html +++ b/docs/types/RequestAllResponseMap.html @@ -1,353 +1,7 @@ -RequestAllResponseMap | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias RequestAllResponseMap<T>

    -
    RequestAllResponseMap<T>: T extends AccountChannelsRequest
    Β Β Β Β ? AccountChannelsResponse
    Β Β Β Β : T extends AccountLinesRequest
    Β Β Β Β Β Β Β Β ? AccountLinesResponse
    Β Β Β Β Β Β Β Β : T extends AccountObjectsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β ? AccountObjectsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountTxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountTxResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerDataRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerDataResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountTxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountTxResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends BookOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? BookOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : MarkerResponse
    -
    -

    Type Parameters

    -
      -
    • -

      T

    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RequestAllResponseMap | xrpl

    Type Alias RequestAllResponseMap<T, Version>

    RequestAllResponseMap: T extends AccountChannelsRequest
    Β Β Β Β ? AccountChannelsResponse
    Β Β Β Β : T extends AccountLinesRequest
    Β Β Β Β Β Β Β Β ? AccountLinesResponse
    Β Β Β Β Β Β Β Β : T extends AccountObjectsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β ? AccountObjectsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountTxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountTxVersionResponseMap<Version>
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerDataRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerDataResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends BookOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? BookOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : MarkerResponse<Version>

    Type Parameters

    diff --git a/docs/types/RequestResponseMap.html b/docs/types/RequestResponseMap.html index 342b087a00..445234154f 100644 --- a/docs/types/RequestResponseMap.html +++ b/docs/types/RequestResponseMap.html @@ -1,353 +1,7 @@ -RequestResponseMap | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias RequestResponseMap<T>

    -
    RequestResponseMap<T>: T extends AccountChannelsRequest
    Β Β Β Β ? AccountChannelsResponse
    Β Β Β Β : T extends AccountCurrenciesRequest
    Β Β Β Β Β Β Β Β ? AccountCurrenciesResponse
    Β Β Β Β Β Β Β Β : T extends AccountInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β ? AccountInfoResponse
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountLinesRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountLinesResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountNFTsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountNFTsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountObjectsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountObjectsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountTxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountTxResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AMMInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AMMInfoResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends GatewayBalancesRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? GatewayBalancesResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NoRippleCheckRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NoRippleCheckResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerRequestExpandedTransactionsBinary
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerRequestExpandedAccountsAndTransactions
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerResponseExpanded
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerRequestExpandedTransactionsOnly
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerResponseExpanded
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerRequestExpandedAccountsOnly
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerResponseExpanded
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerClosedRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerClosedResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerCurrentRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerCurrentResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerDataRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerDataResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends LedgerEntryRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? LedgerEntryResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends SubmitRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? SubmitResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends SubmitMultisignedRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? SubmitMultisignedResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends TransactionEntryRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? TransactionEntryResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends TxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? TxResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends BookOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? BookOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends DepositAuthorizedRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? DepositAuthorizedResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends PathFindRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? PathFindResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends RipplePathFindRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? RipplePathFindResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends ChannelVerifyRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? ChannelVerifyResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends SubscribeRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? SubscribeResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends UnsubscribeRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? UnsubscribeResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends FeeRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? FeeResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends ManifestRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? ManifestResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends ServerInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? ServerInfoResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends ServerStateRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? ServerStateResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends ServerDefinitionsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? ServerDefinitionsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends PingRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? PingResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends RandomRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? RandomResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTBuyOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTBuyOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTSellOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTSellOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTInfoResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTHistoryRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTHistoryResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : Response
    -
    -

    Type Parameters

    -
      -
    • -

      T

    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +RequestResponseMap | xrpl

    Type Alias RequestResponseMap<T, Version>

    RequestResponseMap: T extends AccountChannelsRequest
    Β Β Β Β ? AccountChannelsResponse
    Β Β Β Β : T extends AccountCurrenciesRequest
    Β Β Β Β Β Β Β Β ? AccountCurrenciesResponse
    Β Β Β Β Β Β Β Β : T extends AccountInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β ? AccountInfoVersionResponseMap<Version>
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountLinesRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountLinesResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountNFTsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountNFTsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountObjectsRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountObjectsResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountOffersRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountOffersResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AccountTxRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AccountTxVersionResponseMap<Version>
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends AMMInfoRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? AMMInfoResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends GatewayBalancesRequest
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? GatewayBalancesResponse
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : (...) extends (...) ? (...) : (...)

    Type Parameters

    diff --git a/docs/types/Response.html b/docs/types/Response.html index c8e44561f0..84eb153a3c 100644 --- a/docs/types/Response.html +++ b/docs/types/Response.html @@ -1,349 +1,7 @@ -Response | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Response | xrpl

    Type Alias Response<Version>

    Response:
    Β Β Β Β | AccountChannelsResponse
    Β Β Β Β | AccountCurrenciesResponse
    Β Β Β Β | AccountInfoVersionResponseMap<Version>
    Β Β Β Β | AccountLinesResponse
    Β Β Β Β | AccountNFTsResponse
    Β Β Β Β | AccountObjectsResponse
    Β Β Β Β | AccountOffersResponse
    Β Β Β Β | AccountTxVersionResponseMap<Version>
    Β Β Β Β | GatewayBalancesResponse
    Β Β Β Β | NoRippleCheckResponse
    Β Β Β Β | LedgerVersionResponseMap<Version>
    Β Β Β Β | LedgerClosedResponse
    Β Β Β Β | LedgerCurrentResponse
    Β Β Β Β | LedgerDataResponse
    Β Β Β Β | LedgerEntryResponse
    Β Β Β Β | SimulateResponse
    Β Β Β Β | SubmitResponse
    Β Β Β Β | SubmitMultisignedVersionResponseMap<Version>
    Β Β Β Β | TransactionEntryResponse
    Β Β Β Β | TxResponse
    Β Β Β Β | BookOffersResponse
    Β Β Β Β | DepositAuthorizedResponse
    Β Β Β Β | PathFindResponse
    Β Β Β Β | RipplePathFindResponse
    Β Β Β Β | ChannelVerifyResponse
    Β Β Β Β | SubscribeResponse
    Β Β Β Β | UnsubscribeResponse
    Β Β Β Β | FeeResponse
    Β Β Β Β | ManifestResponse
    Β Β Β Β | ServerDefinitionsResponse
    Β Β Β Β | ServerInfoResponse
    Β Β Β Β | ServerStateResponse
    Β Β Β Β | FeatureResponse
    Β Β Β Β | PingResponse
    Β Β Β Β | RandomResponse
    Β Β Β Β | NFTBuyOffersResponse
    Β Β Β Β | NFTSellOffersResponse
    Β Β Β Β | NFTInfoResponse
    Β Β Β Β | NFTHistoryResponse
    Β Β Β Β | NFTsByIssuerResponse
    Β Β Β Β | AMMInfoResponse
    Β Β Β Β | GetAggregatePriceResponse

    Type Parameters

    diff --git a/docs/types/ServerState.html b/docs/types/ServerState.html index 9bd4e3e02c..3b0455206b 100644 --- a/docs/types/ServerState.html +++ b/docs/types/ServerState.html @@ -1,348 +1,7 @@ -ServerState | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias ServerState

    -
    ServerState: "disconnected" | "connected" | "syncing" | "tracking" | "full" | "validating" | "proposing"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +ServerState | xrpl

    Type Alias ServerState

    ServerState:
    Β Β Β Β | "disconnected"
    Β Β Β Β | "connected"
    Β Β Β Β | "syncing"
    Β Β Β Β | "tracking"
    Β Β Β Β | "full"
    Β Β Β Β | "validating"
    Β Β Β Β | "proposing"
    diff --git a/docs/types/SetFee.html b/docs/types/SetFee.html index d7de855b63..4c065b5c6e 100644 --- a/docs/types/SetFee.html +++ b/docs/types/SetFee.html @@ -1,361 +1,13 @@ -SetFee | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias SetFee

    -
    SetFee: {
    Β Β Β Β TransactionType: "SetFee";
    } & (SetFeePreAmendment | SetFeePostAmendment)
    -

    Marks a change in transaction cost or reserve requirements as a result of Fee Voting.

    +SetFee | xrpl

    Type Alias SetFee

    SetFee: { TransactionType: "SetFee" } & (
    Β Β Β Β SetFeePreAmendment
    Β Β Β Β | SetFeePostAmendment
    )

    Marks a change in transaction cost or reserve requirements as a result of Fee Voting.

    The output will be based on the status of the XRPFees amendment at the time of this transaction.

    -
    -
    -

    Type declaration

    -
      -
    • -
      TransactionType: "SetFee"
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +
    diff --git a/docs/types/SimulateRequest.html b/docs/types/SimulateRequest.html new file mode 100644 index 0000000000..6c9474c481 --- /dev/null +++ b/docs/types/SimulateRequest.html @@ -0,0 +1,9 @@ +SimulateRequest | xrpl

    Type Alias SimulateRequest

    SimulateRequest: BaseRequest & { binary?: boolean; command: "simulate" } & (
    Β Β Β Β | { tx_blob: string; tx_json?: never }
    Β Β Β Β | { tx_blob?: never; tx_json: Transaction }
    )

    The simulate method simulates a transaction without submitting it to the network. +Returns a SimulateResponse.

    +
    diff --git a/docs/types/SimulateResponse.html b/docs/types/SimulateResponse.html new file mode 100644 index 0000000000..d3d62f29be --- /dev/null +++ b/docs/types/SimulateResponse.html @@ -0,0 +1,8 @@ +SimulateResponse | xrpl

    Type Alias SimulateResponse

    SimulateResponse: SimulateJsonResponse | SimulateBinaryResponse

    Response expected from an SimulateRequest.

    +
    diff --git a/docs/types/StateAccountingFinal.html b/docs/types/StateAccountingFinal.html index 6de618b58f..085ba6a8b0 100644 --- a/docs/types/StateAccountingFinal.html +++ b/docs/types/StateAccountingFinal.html @@ -1,348 +1,7 @@ -StateAccountingFinal | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias StateAccountingFinal

    -
    StateAccountingFinal: Record<Exclude<ServerState, "validating" | "proposing">, StateAccounting>
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +StateAccountingFinal | xrpl

    Type Alias StateAccountingFinal

    StateAccountingFinal: Record<
    Β Β Β Β Exclude<ServerState, "validating" | "proposing">,
    Β Β Β Β StateAccounting,
    >
    diff --git a/docs/types/Stream.html b/docs/types/Stream.html index 8001834c62..0a06853cf8 100644 --- a/docs/types/Stream.html +++ b/docs/types/Stream.html @@ -1,349 +1,7 @@ -Stream | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Stream | xrpl

    Type Alias Stream

    Stream:
    Β Β Β Β | LedgerStream
    Β Β Β Β | ValidationStream
    Β Β Β Β | TransactionStream
    Β Β Β Β | PathFindStream
    Β Β Β Β | PeerStatusStream
    Β Β Β Β | OrderBookStream
    Β Β Β Β | ConsensusStream
    diff --git a/docs/types/StreamType.html b/docs/types/StreamType.html index 12f510a028..fecd3f0a41 100644 --- a/docs/types/StreamType.html +++ b/docs/types/StreamType.html @@ -1,348 +1,7 @@ -StreamType | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias StreamType

    -
    StreamType: "consensus" | "ledger" | "manifests" | "peer_status" | "transactions" | "transactions_proposed" | "server" | "validations"
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +StreamType | xrpl

    Type Alias StreamType

    StreamType:
    Β Β Β Β | "consensus"
    Β Β Β Β | "ledger"
    Β Β Β Β | "manifests"
    Β Β Β Β | "peer_status"
    Β Β Β Β | "transactions"
    Β Β Β Β | "transactions_proposed"
    Β Β Β Β | "server"
    Β Β Β Β | "validations"
    diff --git a/docs/types/SubmittableTransaction.html b/docs/types/SubmittableTransaction.html index 3c03ed45d5..ba5d917a25 100644 --- a/docs/types/SubmittableTransaction.html +++ b/docs/types/SubmittableTransaction.html @@ -1,351 +1,8 @@ -SubmittableTransaction | xrpl
    -
    - -
    -
    - -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +SubmittableTransaction | xrpl

    Type Alias SubmittableTransaction

    SubmittableTransaction:
    Β Β Β Β | AMMBid
    Β Β Β Β | AMMClawback
    Β Β Β Β | AMMCreate
    Β Β Β Β | AMMDelete
    Β Β Β Β | AMMDeposit
    Β Β Β Β | AMMVote
    Β Β Β Β | AMMWithdraw
    Β Β Β Β | AccountDelete
    Β Β Β Β | AccountSet
    Β Β Β Β | CheckCancel
    Β Β Β Β | CheckCash
    Β Β Β Β | CheckCreate
    Β Β Β Β | Clawback
    Β Β Β Β | CredentialAccept
    Β Β Β Β | CredentialCreate
    Β Β Β Β | CredentialDelete
    Β Β Β Β | DIDDelete
    Β Β Β Β | DIDSet
    Β Β Β Β | DepositPreauth
    Β Β Β Β | EscrowCancel
    Β Β Β Β | EscrowCreate
    Β Β Β Β | EscrowFinish
    Β Β Β Β | MPTokenAuthorize
    Β Β Β Β | MPTokenIssuanceCreate
    Β Β Β Β | MPTokenIssuanceDestroy
    Β Β Β Β | MPTokenIssuanceSet
    Β Β Β Β | NFTokenAcceptOffer
    Β Β Β Β | NFTokenBurn
    Β Β Β Β | NFTokenCancelOffer
    Β Β Β Β | NFTokenCreateOffer
    Β Β Β Β | NFTokenMint
    Β Β Β Β | NFTokenModify
    Β Β Β Β | OfferCancel
    Β Β Β Β | OfferCreate
    Β Β Β Β | OracleDelete
    Β Β Β Β | OracleSet
    Β Β Β Β | Payment
    Β Β Β Β | PaymentChannelClaim
    Β Β Β Β | PaymentChannelCreate
    Β Β Β Β | PaymentChannelFund
    Β Β Β Β | PermissionedDomainSet
    Β Β Β Β | PermissionedDomainDelete
    Β Β Β Β | SetRegularKey
    Β Β Β Β | SignerListSet
    Β Β Β Β | TicketCreate
    Β Β Β Β | TrustSet
    Β Β Β Β | XChainAccountCreateCommit
    Β Β Β Β | XChainAddAccountCreateAttestation
    Β Β Β Β | XChainAddClaimAttestation
    Β Β Β Β | XChainClaim
    Β Β Β Β | XChainCommit
    Β Β Β Β | XChainCreateBridge
    Β Β Β Β | XChainCreateClaimID
    Β Β Β Β | XChainModifyBridge

    Transactions that can be submitted by clients

    +
    diff --git a/docs/types/Transaction.html b/docs/types/Transaction.html index 9ef0107ee1..eb35d1fe33 100644 --- a/docs/types/Transaction.html +++ b/docs/types/Transaction.html @@ -1,351 +1,8 @@ -Transaction | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias Transaction

    - -

    All transactions that can live on the XRPL

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +Transaction | xrpl

    Type Alias Transaction

    All transactions that can live on the XRPL

    +
    diff --git a/docs/types/TransactionMetadata.html b/docs/types/TransactionMetadata.html index e332e621d8..cc5caa1adb 100644 --- a/docs/types/TransactionMetadata.html +++ b/docs/types/TransactionMetadata.html @@ -1,353 +1,7 @@ -TransactionMetadata | xrpl
    -
    - -
    -
    -
    -
    - -

    Type alias TransactionMetadata<T>

    -
    TransactionMetadata<T>: T extends Payment
    Β Β Β Β ? PaymentMetadata
    Β Β Β Β : T extends NFTokenMint
    Β Β Β Β Β Β Β Β ? NFTokenMintMetadata
    Β Β Β Β Β Β Β Β : T extends NFTokenCreateOffer
    Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenCreateOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTokenAcceptOffer
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenAcceptOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTokenCancelOffer
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenCancelOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : TransactionMetadataBase
    -
    -

    Type Parameters

    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +TransactionMetadata | xrpl

    Type Alias TransactionMetadata<T>

    TransactionMetadata: T extends Payment
    Β Β Β Β ? PaymentMetadata
    Β Β Β Β : T extends NFTokenMint
    Β Β Β Β Β Β Β Β ? NFTokenMintMetadata
    Β Β Β Β Β Β Β Β : T extends NFTokenCreateOffer
    Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenCreateOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTokenAcceptOffer
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenAcceptOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends NFTokenCancelOffer
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? NFTokenCancelOfferMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : T extends MPTokenIssuanceCreate
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β ? MPTokenIssuanceCreateMetadata
    Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β Β : TransactionMetadataBase

    Type Parameters

    diff --git a/docs/types/TransactionStream.html b/docs/types/TransactionStream.html new file mode 100644 index 0000000000..b80d8ee571 --- /dev/null +++ b/docs/types/TransactionStream.html @@ -0,0 +1,8 @@ +TransactionStream | xrpl

    Type Alias TransactionStream

    TransactionStream: TransactionStreamBase

    Expected response from an AccountTxRequest.

    +
    diff --git a/docs/types/TransactionV1Stream.html b/docs/types/TransactionV1Stream.html new file mode 100644 index 0000000000..60b5939ada --- /dev/null +++ b/docs/types/TransactionV1Stream.html @@ -0,0 +1,8 @@ +TransactionV1Stream | xrpl

    Type Alias TransactionV1Stream

    TransactionV1Stream: TransactionStreamBase<typeof RIPPLED_API_V1>

    Expected response from an AccountTxRequest with api_version set to 1.

    +
    diff --git a/docs/variables/DEFAULT_API_VERSION.html b/docs/variables/DEFAULT_API_VERSION.html new file mode 100644 index 0000000000..170c819791 --- /dev/null +++ b/docs/variables/DEFAULT_API_VERSION.html @@ -0,0 +1,7 @@ +DEFAULT_API_VERSION | xrpl

    Variable DEFAULT_API_VERSIONConst

    DEFAULT_API_VERSION: 2 = RIPPLED_API_V2
    diff --git a/docs/variables/LedgerEntry.AMENDMENTS_ID.html b/docs/variables/LedgerEntry.AMENDMENTS_ID.html index b7787342e7..e6c7a7a4ec 100644 --- a/docs/variables/LedgerEntry.AMENDMENTS_ID.html +++ b/docs/variables/LedgerEntry.AMENDMENTS_ID.html @@ -1,392 +1,8 @@ -AMENDMENTS_ID | xrpl
    -
    - -
    -
    -
    -
    - -

    Variable AMENDMENTS_IDConst

    -
    AMENDMENTS_ID: "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4" = '7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4'
    -

    The unique id for the Amendments object https://xrpl.org/amendments-object.html#amendments-id-format

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +AMENDMENTS_ID | xrpl

    Variable AMENDMENTS_IDConst

    AMENDMENTS_ID: "7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4" = '7DB0788C020F02780A673DC74757F23823FA3014C1866E72CC4CD8B226CD6EF4'

    The unique id for the Amendments object https://xrpl.org/amendments-object.html#amendments-id-format

    +
    diff --git a/docs/variables/LedgerEntry.FEE_SETTINGS_ID.html b/docs/variables/LedgerEntry.FEE_SETTINGS_ID.html index 9a629fc495..775faf3fbe 100644 --- a/docs/variables/LedgerEntry.FEE_SETTINGS_ID.html +++ b/docs/variables/LedgerEntry.FEE_SETTINGS_ID.html @@ -1,392 +1,8 @@ -FEE_SETTINGS_ID | xrpl
    -
    - -
    -
    -
    -
    - -

    Variable FEE_SETTINGS_IDConst

    -
    FEE_SETTINGS_ID: "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651" = '4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651'
    -

    The unique id for the FeeSettings object https://xrpl.org/feesettings.html#feesettings-id-format

    -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +FEE_SETTINGS_ID | xrpl

    Variable FEE_SETTINGS_IDConst

    FEE_SETTINGS_ID: "4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651" = '4BC50C9B0D8515D3EAAE1E74B29A95804346C491EE1A95BF25E4AAB854A6A651'

    The unique id for the FeeSettings object https://xrpl.org/feesettings.html#feesettings-id-format

    +
    diff --git a/docs/variables/LedgerEntry.NEGATIVE_UNL_ID.html b/docs/variables/LedgerEntry.NEGATIVE_UNL_ID.html index 9e51a47a4f..536ae512b6 100644 --- a/docs/variables/LedgerEntry.NEGATIVE_UNL_ID.html +++ b/docs/variables/LedgerEntry.NEGATIVE_UNL_ID.html @@ -1,392 +1,8 @@ -NEGATIVE_UNL_ID | xrpl
    -
    - -
    -
    -
    -
    - -

    Variable NEGATIVE_UNL_IDConst

    -
    NEGATIVE_UNL_ID: "2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244" = '2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244'
    - -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +NEGATIVE_UNL_ID | xrpl

    Variable NEGATIVE_UNL_IDConst

    NEGATIVE_UNL_ID: "2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244" = '2E8A59AA9D3B5B186B0B9E0F62E6C02587CA74A4D778938E957B6357D364B244'
    diff --git a/docs/variables/RIPPLED_API_V1.html b/docs/variables/RIPPLED_API_V1.html new file mode 100644 index 0000000000..dc9519749f --- /dev/null +++ b/docs/variables/RIPPLED_API_V1.html @@ -0,0 +1,7 @@ +RIPPLED_API_V1 | xrpl

    Variable RIPPLED_API_V1Const

    RIPPLED_API_V1: 1
    diff --git a/docs/variables/RIPPLED_API_V2.html b/docs/variables/RIPPLED_API_V2.html new file mode 100644 index 0000000000..037da01e75 --- /dev/null +++ b/docs/variables/RIPPLED_API_V2.html @@ -0,0 +1,7 @@ +RIPPLED_API_V2 | xrpl

    Variable RIPPLED_API_V2Const

    RIPPLED_API_V2: 2
    diff --git a/docs/variables/hashes.html b/docs/variables/hashes.html index 14cdf4c092..4ea827cae0 100644 --- a/docs/variables/hashes.html +++ b/docs/variables/hashes.html @@ -1,636 +1,7 @@ -hashes | xrpl
    -
    - -
    -
    -
    -
    - -

    Variable hashesConst

    -
    hashes: {
    Β Β Β Β hashAccountRoot: ((address) => string);
    Β Β Β Β hashEscrow: ((address, sequence) => string);
    Β Β Β Β hashLedger: ((ledger, options?) => string);
    Β Β Β Β hashLedgerHeader: ((ledgerHeader) => string);
    Β Β Β Β hashOfferId: ((address, sequence) => string);
    Β Β Β Β hashPaymentChannel: ((address, dstAddress, sequence) => string);
    Β Β Β Β hashSignedTx: ((tx) => string);
    Β Β Β Β hashSignerListId: ((address) => string);
    Β Β Β Β hashStateTree: ((entries) => string);
    Β Β Β Β hashTrustline: ((address1, address2, currency) => string);
    Β Β Β Β hashTx: ((txBlobHex) => string);
    Β Β Β Β hashTxTree: ((transactions) => string);
    } = ...
    -
    -

    Type declaration

    -
      -
    • -
      hashAccountRoot: ((address) => string)
      -
        -
      • -
          -
        • (address): string
        • -
        • -

          Compute AccountRoot Ledger Object Index.

          -

          All objects in a ledger's state tree have a unique Index. -The AccountRoot Ledger Object Index is derived by hashing the -address with a namespace identifier. This ensures every -Index is unique.

          -

          See Ledger Object Indexes.

          -
          -
          -

          Parameters

          -
            -
          • -
            address: string
            -

            The classic account address.

            -
          -

          Returns string

          The Ledger Object Index for the account.

          - -
    • -
    • -
      hashEscrow: ((address, sequence) => string)
      -
        -
      • -
          -
        • (address, sequence): string
        • -
        • -

          Compute the Hash of an Escrow LedgerEntry.

          -
          -
          -

          Parameters

          -
            -
          • -
            address: string
            -

            Address of the Escrow.

            -
          • -
          • -
            sequence: number
            -

            OfferSequence of the Escrow.

            -
          -

          Returns string

          The hash of the Escrow LedgerEntry.

          - -
    • -
    • -
      hashLedger: ((ledger, options?) => string)
      -
        -
      • -
          -
        • (ledger, options?): string
        • -
        • -

          Compute the hash of a ledger.

          -
          -
          -

          Parameters

          -
            -
          • -
            ledger: Ledger
            -

            Ledger to compute the hash for.

            -
          • -
          • -
            options: {
            Β Β Β Β computeTreeHashes?: boolean;
            } = {}
            -

            Allow client to recompute Transaction and State Hashes.

            -
            -
              -
            • -
              Optional computeTreeHashes?: boolean
              -

              Whether to recompute the Transaction and State Hashes.

              -
              -
          -

          Returns string

          The has of ledger.

          - -
    • -
    • -
      hashLedgerHeader: ((ledgerHeader) => string)
      -
        -
      • -
          -
        • (ledgerHeader): string
        • -
        • -

          Compute the hash of a ledger.

          -
          -
          -

          Parameters

          -
            -
          • -
            ledgerHeader: Ledger
            -

            Ledger to compute the hash of.

            -
          -

          Returns string

          The hash of the ledger.

          - -
    • -
    • -
      hashOfferId: ((address, sequence) => string)
      -
        -
      • -
          -
        • (address, sequence): string
        • -
        • -

          Offer Index Format.

          -

          The Index of a Offer object is the SHA-512Half of the following values, concatenated in order:

          -
            -
          • The Offer space key (0x006F)
          • -
          • The AccountID of the account placing the offer
          • -
          • The Sequence number of the OfferCreate transaction that created the offer.
          • -
          -

          This method computes an Offer Index.

          -
          -
          -

          Parameters

          -
            -
          • -
            address: string
            -

            The classic account address of the SignerList owner (starting with r).

            -
          • -
          • -
            sequence: number
            -

            Sequence of the Offer.

            -
          -

          Returns string

          The Index of the account's Offer object.

          - -
    • -
    • -
      hashPaymentChannel: ((address, dstAddress, sequence) => string)
      -
        -
      • -
          -
        • (address, dstAddress, sequence): string
        • -
        • -

          Compute the hash of a Payment Channel.

          -
          -
          -

          Parameters

          -
            -
          • -
            address: string
            -

            Account of the Payment Channel.

            -
          • -
          • -
            dstAddress: string
            -

            Destination Account of the Payment Channel.

            -
          • -
          • -
            sequence: number
            -

            Sequence number of the Transaction that created the Payment Channel.

            -
          -

          Returns string

          Hash of the Payment Channel.

          - -
    • -
    • -
      hashSignedTx: ((tx) => string)
      -
        -
      • -
          -
        • (tx): string
        • -
        • -

          Hashes the Transaction object as the ledger does. Throws if the transaction is unsigned.

          -
          -
          -

          Parameters

          -
            -
          • -
            tx: string | Transaction
            -

            A transaction to hash. Tx may be in binary blob form. Tx must be signed.

            -
          -

          Returns string

          A hash of tx.

          - -
          -

          Throws

          ValidationError if the Transaction is unsigned.\

          -
    • -
    • -
      hashSignerListId: ((address) => string)
      -
        -
      • -
          -
        • (address): string
        • -
        • -

          SignerList Index Format.

          -

          The Index of a SignerList object is the SHA-512Half of the following values, concatenated in order:

          -
            -
          • The RippleState space key (0x0053)
          • -
          • The AccountID of the owner of the SignerList
          • -
          • The SignerListID (currently always 0).
          • -
          -

          This method computes a SignerList Ledger Object Index.

          -
          -
          -

          Parameters

          -
            -
          • -
            address: string
            -

            The classic account address of the SignerList owner (starting with r).

            -
          -

          Returns string

          The Index of the account's SignerList object.

          - -
    • -
    • -
      hashStateTree: ((entries) => string)
      -
        -
      • -
          -
        • (entries): string
        • -
        • -

          Compute the state hash of a list of LedgerEntries.

          -
          -
          -

          Parameters

          -
          -

          Returns string

          Hash of SHAMap that consists of all entries.

          - -
    • -
    • -
      hashTrustline: ((address1, address2, currency) => string)
      -
        -
      • -
          -
        • (address1, address2, currency): string
        • -
        • -

          Compute the hash of a Trustline.

          -
          -
          -

          Parameters

          -
            -
          • -
            address1: string
            -

            One of the addresses in the Trustline.

            -
          • -
          • -
            address2: string
            -

            The other address in the Trustline.

            -
          • -
          • -
            currency: string
            -

            Currency in the Trustline.

            -
          -

          Returns string

          The hash of the Trustline.

          - -
    • -
    • -
      hashTx: ((txBlobHex) => string)
      -
        -
      • -
          -
        • (txBlobHex): string
        • -
        • -

          Hash the given binary transaction data with the single-signing prefix.

          -

          See Serialization Format.

          -
          -
          -

          Parameters

          -
            -
          • -
            txBlobHex: string
            -

            The binary transaction blob as a hexadecimal string.

            -
          -

          Returns string

          The hash to sign.

          - -
    • -
    • -
      hashTxTree: ((transactions) => string)
      -
        -
      • -
          -
        • (transactions): string
        • -
        • -

          Compute the root hash of the SHAMap containing all transactions.

          -
          -
          -

          Parameters

          -
            -
          • -
            transactions: Object[]
            -

            List of Transactions.

            -
          -

          Returns string

          The root hash of the SHAMap.

          - -
    -
    -
    - -
    -
    -

    Generated using TypeDoc

    -
    \ No newline at end of file +hashes | xrpl

    Variable hashesConst

    hashes: {
    Β Β Β Β hashAccountRoot: (address: string) => string;
    Β Β Β Β hashEscrow: (address: string, sequence: number) => string;
    Β Β Β Β hashLedger: (
    Β Β Β Β Β Β Β Β ledger: LedgerVersionMap<APIVersion>,
    Β Β Β Β Β Β Β Β options?: { computeTreeHashes?: boolean },
    Β Β Β Β ) => string;
    Β Β Β Β hashLedgerHeader: (ledgerHeader: LedgerVersionMap<APIVersion>) => string;
    Β Β Β Β hashOfferId: (address: string, sequence: number) => string;
    Β Β Β Β hashPaymentChannel: (
    Β Β Β Β Β Β Β Β address: string,
    Β Β Β Β Β Β Β Β dstAddress: string,
    Β Β Β Β Β Β Β Β sequence: number,
    Β Β Β Β ) => string;
    Β Β Β Β hashSignedTx: (tx: string | Transaction) => string;
    Β Β Β Β hashSignerListId: (address: string) => string;
    Β Β Β Β hashStateTree: (entries: LedgerEntry.LedgerEntry[]) => string;
    Β Β Β Β hashTrustline: (
    Β Β Β Β Β Β Β Β address1: string,
    Β Β Β Β Β Β Β Β address2: string,
    Β Β Β Β Β Β Β Β currency: string,
    Β Β Β Β ) => string;
    Β Β Β Β hashTx: (txBlobHex: string) => string;
    Β Β Β Β hashTxTree: (
    Β Β Β Β Β Β Β Β transactions: (
    Β Β Β Β Β Β Β Β Β Β Β Β Transaction & { metaData?: TransactionMetadata | undefined }
    Β Β Β Β Β Β Β Β )[],
    Β Β Β Β ) => string;
    } = ...

    Type declaration

    • hashAccountRoot: (address: string) => string
    • hashEscrow: (address: string, sequence: number) => string
    • hashLedger: (
      Β Β Β Β ledger: LedgerVersionMap<APIVersion>,
      Β Β Β Β options?: { computeTreeHashes?: boolean },
      ) => string
    • hashLedgerHeader: (ledgerHeader: LedgerVersionMap<APIVersion>) => string
    • hashOfferId: (address: string, sequence: number) => string
    • hashPaymentChannel: (address: string, dstAddress: string, sequence: number) => string
    • hashSignedTx: (tx: string | Transaction) => string
    • hashSignerListId: (address: string) => string
    • hashStateTree: (entries: LedgerEntry.LedgerEntry[]) => string
    • hashTrustline: (address1: string, address2: string, currency: string) => string
    • hashTx: (txBlobHex: string) => string
    • hashTxTree: (
      Β Β Β Β transactions: (
      Β Β Β Β Β Β Β Β Transaction & { metaData?: TransactionMetadata | undefined }
      Β Β Β Β )[],
      ) => string
    diff --git a/jest.config.base.js b/jest.config.base.js index aac588b656..21d202494b 100644 --- a/jest.config.base.js +++ b/jest.config.base.js @@ -4,11 +4,16 @@ module.exports = { roots: ["/src"], transform: { "^.+\\.ts$": "ts-jest", + "node_modules/chai/.+\\.js$": "ts-jest", }, + transformIgnorePatterns: [ + "/node_modules/(?!(chai)/)", + ], moduleFileExtensions: ["ts", "tsx", "js", "jsx", "json", "node"], collectCoverage: true, verbose: true, testEnvironment: "node", + coverageReporters: [["text", { skipFull: true }], "text-summary"], globals: { TextDecoder: TextDecoder, TextEncoder: TextEncoder, diff --git a/lerna.json b/lerna.json index ed313e5722..e127f42786 100644 --- a/lerna.json +++ b/lerna.json @@ -1,5 +1,13 @@ { "version": "independent", - "useWorkspaces": true, - "npmClient": "npm" + "packages": [ + "packages/xrpl", + "packages/ripple-binary-codec", + "packages/ripple-keypairs", + "packages/ripple-address-codec", + "packages/isomorphic", + "packages/secret-numbers" + ], + "npmClient": "npm", + "$schema": "node_modules/lerna/schemas/lerna-schema.json" } diff --git a/package-lock.json b/package-lock.json index 9a32dfacff..b97bf74873 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,33 +17,34 @@ "xrpl": "file:packages/xrpl" }, "devDependencies": { + "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", + "@eslint/js": "^9.32.0", "@types/chai": "^4.2.21", "@types/jest": "^29.2.2", "@types/lodash": "^4.14.136", "@types/node": "^18.19.29", "@types/ws": "^8.2.0", - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", - "@xrplf/eslint-config": "^1.9.1", + "@xrplf/eslint-config": "^3.0.0", "@xrplf/prettier-config": "^1.9.1", - "chai": "^4.3.4", + "chai": "^6.2.2", "copyfiles": "^2.4.1", - "eslint": "^8.18.0", - "eslint-plugin-array-func": "^3.1.7", - "eslint-plugin-consistent-default-export-name": "^0.0.15", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.3", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-tsdoc": "^0.2.16", - "expect": "^29.3.1", + "eslint": "^9.32.0", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-array-func": "^5.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^52.0.4", + "eslint-plugin-n": "^17.21.3", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-tsdoc": "^0.5.0", + "expect": "^30.2.0", + "globals": "^16.3.0", "jest": "^29.3.1", - "jest-mock": "^29.3.1", - "lerna": "^4.0.0", + "jest-mock": "^30.2.0", + "lerna": "^9.0.4", "lodash": "^4.17.21", "npm-run-all": "^4.1.5", - "prettier": "^2.3.2", + "prettier": "^3.6.2", "process": "^0.11.10", "source-map-loader": "^5.0.0", "source-map-support": "^0.5.16", @@ -51,113 +52,43 @@ "ts-loader": "^9.2.5", "ts-node": "^10.2.1", "typescript": "^5.1.6", + "typescript-eslint": "^8.52.0", "webpack": "^5.81.0", - "webpack-bundle-analyzer": "^4.1.0", - "webpack-cli": "^5.0.1" + "webpack-bundle-analyzer": "^5.1.1", + "webpack-cli": "^6.0.1" }, "engines": { "node": ">=18.0.0", - "npm": ">=7.10.0 < 10.0.0" - } - }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "npm": ">=7.10.0" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", + "version": "2.3.0", "dev": true, "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@babel/code-frame": { - "version": "7.22.13", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/highlight": "^7.22.13", - "chalk": "^2.4.2" + "@babel/helper-validator-identifier": "^7.27.1", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/compat-data": { - "version": "7.22.9", + "version": "7.28.0", "dev": true, "license": "MIT", "engines": { @@ -165,21 +96,21 @@ } }, "node_modules/@babel/core": { - "version": "7.22.11", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.22.10", - "@babel/generator": "^7.22.10", - "@babel/helper-compilation-targets": "^7.22.10", - "@babel/helper-module-transforms": "^7.22.9", - "@babel/helpers": "^7.22.11", - "@babel/parser": "^7.22.11", - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11", - "convert-source-map": "^1.7.0", + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-compilation-targets": "^7.27.2", + "@babel/helper-module-transforms": "^7.27.3", + "@babel/helpers": "^7.27.6", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/traverse": "^7.28.0", + "@babel/types": "^7.28.0", + "convert-source-map": "^2.0.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", "json5": "^2.2.3", @@ -193,11 +124,6 @@ "url": "https://opencollective.com/babel" } }, - "node_modules/@babel/core/node_modules/convert-source-map": { - "version": "1.9.0", - "dev": true, - "license": "MIT" - }, "node_modules/@babel/core/node_modules/semver": { "version": "6.3.1", "dev": true, @@ -207,27 +133,28 @@ } }, "node_modules/@babel/generator": { - "version": "7.23.0", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.23.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" + "@babel/parser": "^7.28.0", + "@babel/types": "^7.28.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.22.10", + "version": "7.27.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.22.9", - "@babel/helper-validator-option": "^7.22.5", - "browserslist": "^4.21.9", + "@babel/compat-data": "^7.27.2", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", "lru-cache": "^5.1.1", "semver": "^6.3.1" }, @@ -243,58 +170,34 @@ "semver": "bin/semver.js" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.22.20", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.23.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.15", - "@babel/types": "^7.23.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.22.5", + "node_modules/@babel/helper-globals": { + "version": "7.28.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-imports": { - "version": "7.22.5", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.22.5" + "@babel/traverse": "^7.27.1", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.22.9", + "version": "7.27.3", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-environment-visitor": "^7.22.5", - "@babel/helper-module-imports": "^7.22.5", - "@babel/helper-simple-access": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/helper-validator-identifier": "^7.22.5" + "@babel/helper-module-imports": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1", + "@babel/traverse": "^7.27.3" }, "engines": { "node": ">=6.9.0" @@ -304,37 +207,15 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.22.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.22.6", + "version": "7.27.1", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.22.5" - }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-string-parser": { - "version": "7.22.5", + "version": "7.27.1", "dev": true, "license": "MIT", "engines": { @@ -342,7 +223,7 @@ } }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", + "version": "7.27.1", "dev": true, "license": "MIT", "engines": { @@ -350,7 +231,7 @@ } }, "node_modules/@babel/helper-validator-option": { - "version": "7.22.5", + "version": "7.27.1", "dev": true, "license": "MIT", "engines": { @@ -358,99 +239,24 @@ } }, "node_modules/@babel/helpers": { - "version": "7.22.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/template": "^7.22.5", - "@babel/traverse": "^7.22.11", - "@babel/types": "^7.22.11" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.22.20", + "version": "7.28.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", - "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.2" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/highlight/node_modules/has-flag": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/@babel/parser": { + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@babel/types": "^7.28.0" }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/parser": { - "version": "7.23.0", - "dev": true, - "license": "MIT", "bin": { "parser": "bin/babel-parser.js" }, @@ -491,6 +297,34 @@ "@babel/core": "^7.0.0-0" } }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.27.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-plugin-utils": "^7.27.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, "node_modules/@babel/plugin-syntax-import-meta": { "version": "7.10.4", "dev": true, @@ -514,11 +348,11 @@ } }, "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.22.5", + "version": "7.27.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -593,7 +427,7 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-top-level-await": { + "node_modules/@babel/plugin-syntax-private-property-in-object": { "version": "7.14.5", "dev": true, "license": "MIT", @@ -607,12 +441,12 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/plugin-syntax-typescript": { - "version": "7.22.5", + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-plugin-utils": "^7.22.5" + "@babel/helper-plugin-utils": "^7.14.5" }, "engines": { "node": ">=6.9.0" @@ -621,67 +455,57 @@ "@babel/core": "^7.0.0-0" } }, - "node_modules/@babel/runtime": { - "version": "7.22.11", + "node_modules/@babel/plugin-syntax-typescript": { + "version": "7.27.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "regenerator-runtime": "^0.14.0" + "@babel/helper-plugin-utils": "^7.27.1" }, "engines": { "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" } }, "node_modules/@babel/template": { - "version": "7.22.15", + "version": "7.27.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/parser": "^7.22.15", - "@babel/types": "^7.22.15" + "@babel/code-frame": "^7.27.1", + "@babel/parser": "^7.27.2", + "@babel/types": "^7.27.1" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.2", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.22.13", - "@babel/generator": "^7.23.0", - "@babel/helper-environment-visitor": "^7.22.20", - "@babel/helper-function-name": "^7.23.0", - "@babel/helper-hoist-variables": "^7.22.5", - "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.0", - "@babel/types": "^7.23.0", - "debug": "^4.1.0", - "globals": "^11.1.0" + "@babel/code-frame": "^7.27.1", + "@babel/generator": "^7.28.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.28.0", + "@babel/template": "^7.27.2", + "@babel/types": "^7.28.0", + "debug": "^4.3.1" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/traverse/node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/types": { - "version": "7.23.0", + "version": "7.28.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-string-parser": "^7.22.5", - "@babel/helper-validator-identifier": "^7.22.20", - "to-fast-properties": "^2.0.0" + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.27.1" }, "engines": { "node": ">=6.9.0" @@ -728,339 +552,1073 @@ "node": ">=10.0.0" } }, - "node_modules/@es-joy/jsdoccomment": { - "version": "0.36.1", + "node_modules/@emnapi/core": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "dev": true, "license": "MIT", "dependencies": { - "comment-parser": "1.3.1", - "esquery": "^1.4.0", - "jsdoc-type-pratt-parser": "~3.1.0" - }, - "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "@emnapi/wasi-threads": "1.1.0", + "tslib": "^2.4.0" } }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", + "node_modules/@emnapi/runtime": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + "tslib": "^2.4.0" } }, - "node_modules/@eslint-community/regexpp": { - "version": "4.8.0", + "node_modules/@emnapi/wasi-threads": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.1.0.tgz", + "integrity": "sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@es-joy/jsdoccomment": { + "version": "0.52.0", "dev": true, "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.8", + "@typescript-eslint/types": "^8.34.1", + "comment-parser": "1.4.1", + "esquery": "^1.6.0", + "jsdoc-type-pratt-parser": "~4.1.0" + }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=20.11.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", + "node_modules/@eslint-community/eslint-plugin-eslint-comments": { + "version": "4.5.0", "dev": true, "license": "MIT", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "escape-string-regexp": "^4.0.0", + "ignore": "^5.2.4" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.1.tgz", - "integrity": "sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==", + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.9.1.tgz", + "integrity": "sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==", "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, - "node_modules/@gar/promisify": { - "version": "1.1.3", + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz", + "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.13.0.tgz", - "integrity": "sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==", - "deprecated": "Use @eslint/config-array instead", + "node_modules/@eslint/config-array": { + "version": "0.21.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.21.1.tgz", + "integrity": "sha512-aw1gNayWpdI/jSYVgzN5pL0cfzU02GT3NBpeT/DXbx1/1x7ZKxFPd9bwrzygx/qiwIQiJ1sw/zD8qY/kRvlGHA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", + "@eslint/object-schema": "^2.1.7", "debug": "^4.3.1", - "minimatch": "^3.0.5" + "minimatch": "^3.1.2" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", - "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", - "deprecated": "Use @eslint/object-schema instead", - "dev": true - }, - "node_modules/@hutson/parse-repository-url": { - "version": "3.0.2", + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=6.9.0" + "node": "*" } }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", + "node_modules/@eslint/config-helpers": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.4.2.tgz", + "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" + "@eslint/core": "^0.17.0" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", + "node_modules/@eslint/core": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.17.0.tgz", + "integrity": "sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "sprintf-js": "~1.0.2" + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", + "node_modules/@eslint/eslintrc": { + "version": "3.3.1", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", "dependencies": { - "p-locate": "^4.1.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/@eslint/js": { + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://eslint.org/donate" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/@eslint/object-schema": { + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.7.tgz", + "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/plugin-kit": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.4.1.tgz", + "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "p-limit": "^2.2.0" + "@eslint/core": "^0.17.0", + "levn": "^0.4.1" }, "engines": { - "node": ">=8" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { - "version": "5.0.0", + "node_modules/@gar/promise-retry": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@gar/promise-retry/-/promise-retry-1.0.2.tgz", + "integrity": "sha512-Lm/ZLhDZcBECta3TmCQSngiQykFdfw+QtI1/GYMsZd4l3nG+P8WLB16XuS7WaBGLQ+9E+cOcWQsth9cayuGt8g==", "dev": true, "license": "MIT", + "dependencies": { + "retry": "^0.13.1" + }, "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", + "node_modules/@gar/promise-retry/node_modules/retry": { + "version": "0.13.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", + "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/@jest/console": { - "version": "29.7.0", + "node_modules/@gerrit0/mini-shiki": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.19.0.tgz", + "integrity": "sha512-ZSlWfLvr8Nl0T4iA3FF/8VH8HivYF82xQts2DY0tJxZd4wtXJ8AA0nmdW9lmO4hlrh3f9xNwEPtOgqETPqKwDA==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@types/node": "*", - "chalk": "^4.0.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0", - "slash": "^3.0.0" - }, + "@shikijs/engine-oniguruma": "^3.19.0", + "@shikijs/langs": "^3.19.0", + "@shikijs/themes": "^3.19.0", + "@shikijs/types": "^3.19.0", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" } }, - "node_modules/@jest/core": { - "version": "29.7.0", + "node_modules/@humanfs/node": { + "version": "0.16.6", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@jest/console": "^29.7.0", - "@jest/reporters": "^29.7.0", - "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "ansi-escapes": "^4.2.1", - "chalk": "^4.0.0", - "ci-info": "^3.2.0", - "exit": "^0.1.2", - "graceful-fs": "^4.2.9", - "jest-changed-files": "^29.7.0", - "jest-config": "^29.7.0", - "jest-haste-map": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-resolve": "^29.7.0", - "jest-resolve-dependencies": "^29.7.0", - "jest-runner": "^29.7.0", - "jest-runtime": "^29.7.0", - "jest-snapshot": "^29.7.0", - "jest-util": "^29.7.0", - "jest-validate": "^29.7.0", - "jest-watcher": "^29.7.0", - "micromatch": "^4.0.4", - "pretty-format": "^29.7.0", - "slash": "^3.0.0", - "strip-ansi": "^6.0.0" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@jest/environment": { - "version": "29.7.0", + "node_modules/@humanwhocodes/retry": { + "version": "0.4.3", "dev": true, - "license": "MIT", - "dependencies": { - "@jest/fake-timers": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/node": "*", - "jest-mock": "^29.7.0" + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=6.9.0" } }, - "node_modules/@jest/expect": { - "version": "29.7.0", + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@inquirer/ansi/-/ansi-1.0.2.tgz", + "integrity": "sha512-S8qNSZiYzFd0wAcyG5AXCvUHC5Sr7xpZ9wZ2py9XR88jUz8wooStVx5M6dRzczbBWjic9NP7+rY0Xi7qqK/aMQ==", "dev": true, "license": "MIT", - "dependencies": { - "expect": "^29.7.0", - "jest-snapshot": "^29.7.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" } }, - "node_modules/@jest/expect-utils": { - "version": "29.7.0", + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.3.2.tgz", + "integrity": "sha512-VXukHf0RR1doGe6Sm4F0Em7SWYLTHSsbGfJdS9Ja2bX5/D5uwVOEjr07cncLROdBvmnvCATYEWlHqYmXv2IlQA==", "dev": true, "license": "MIT", "dependencies": { - "jest-get-type": "^29.6.3" + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/fake-timers": { - "version": "29.7.0", + "node_modules/@inquirer/confirm": { + "version": "5.1.21", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.21.tgz", + "integrity": "sha512-KR8edRkIsUayMXV+o3Gv+q4jlhENF9nMYUZs9PA2HzrXeHI8M5uDag70U7RJn9yyiMZSbtF5/UexBtAVtZGSbQ==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", - "@sinonjs/fake-timers": "^10.0.2", - "@types/node": "*", - "jest-message-util": "^29.7.0", - "jest-mock": "^29.7.0", - "jest-util": "^29.7.0" + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, - "node_modules/@jest/globals": { - "version": "29.7.0", + "node_modules/@inquirer/core": { + "version": "10.3.2", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.3.2.tgz", + "integrity": "sha512-43RTuEbfP8MbKzedNqBrlhhNKVwoK//vUFNW3Q3vZ88BLcrs4kYpGg+B2mm5p2K/HfygoCxuKwJJiv8PbGmE0A==", "dev": true, "license": "MIT", "dependencies": { - "@jest/environment": "^29.7.0", + "@inquirer/ansi": "^1.0.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "cli-width": "^4.1.0", + "mute-stream": "^2.0.0", + "signal-exit": "^4.1.0", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/core/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.23.tgz", + "integrity": "sha512-aLSROkEwirotxZ1pBaP8tugXRFCxW94gwrQLxXfrZsKkfjOYC1aRvAZuhpJOb5cu4IBTJdsCigUlf2iCOu4ZDQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.23.tgz", + "integrity": "sha512-nRzdOyFYnpeYTTR2qFwEVmIWypzdAx/sIkCMeTNTcflFOovfqUk+HcFhQQVBftAh9gmGrpFj6QcGEqrDMDOiew==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@inquirer/external-editor/-/external-editor-1.0.3.tgz", + "integrity": "sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==", + "dev": true, + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/external-editor/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.15.tgz", + "integrity": "sha512-t2IEY+unGHOzAaVM5Xx6DEWKeXlDDcNPeDyUpsRc6CUhBfU3VQOEl+Vssh7VNp1dR8MdUJBWhuObjXCsVpjN5g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.3.1.tgz", + "integrity": "sha512-kN0pAM4yPrLjJ1XJBjDxyfDduXOuQHrBB8aLDMueuwUGn+vNpF7Gq7TvyVxx8u4SHlFFj4trmj+a2cbpG4Jn1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.23.tgz", + "integrity": "sha512-5Smv0OK7K0KUzUfYUXDXQc9jrf8OHo4ktlEayFlelCjwMXz0299Y8OrI+lj7i4gCBY15UObk76q0QtxjzFcFcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.23.tgz", + "integrity": "sha512-zREJHjhT5vJBMZX/IUbyI9zVtVfOLiTO66MrF/3GFZYZ7T4YILW5MSkEYHceSii/KtRk+4i3RE7E1CUXA2jHcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.10.1.tgz", + "integrity": "sha512-Dx/y9bCQcXLI5ooQ5KyvA4FTgeo2jYj/7plWfV5Ak5wDPKQZgudKez2ixyfz7tKXzcJciTxqLeK7R9HItwiByg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/checkbox": "^4.3.2", + "@inquirer/confirm": "^5.1.21", + "@inquirer/editor": "^4.2.23", + "@inquirer/expand": "^4.0.23", + "@inquirer/input": "^4.3.1", + "@inquirer/number": "^3.0.23", + "@inquirer/password": "^4.0.23", + "@inquirer/rawlist": "^4.1.11", + "@inquirer/search": "^3.2.2", + "@inquirer/select": "^4.4.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.1.11.tgz", + "integrity": "sha512-+LLQB8XGr3I5LZN/GuAHo+GpDJegQwuPARLChlMICNdwW7OwV2izlCSCxN6cqpL0sMXmbKbFcItJgdQq5EBXTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.2.2.tgz", + "integrity": "sha512-p2bvRfENXCZdWF/U2BXvnSI9h+tuA8iNqtUKb9UWbmLYCRQxd8WkvwWvYn+3NgYaNwdUkHytJMGG4MMLucI1kA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/select": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.4.2.tgz", + "integrity": "sha512-l4xMuJo55MAe+N7Qr4rX90vypFwCajSakx59qe/tMaC1aEHWLyw68wF4o0A4SLAY4E0nd+Vt+EyskeDIqu1M6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/type": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.10.tgz", + "integrity": "sha512-BvziSRxfz5Ov8ch0z/n3oijRSEcEsHnhggm4xFZe93DHcUCTlutlq9Ox4SVENAfcRD22UQq7T/atg9Wr3k09eA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@isaacs/cliui": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-9.0.0.tgz", + "integrity": "sha512-AokJm4tuBHillT+FpMtxQ60n8ObyXBatq7jD2/JA9dxbDDokKQm8KMht5ibGzLVU9IJDIKK4TPKgMHEYMn3lMg==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@isaacs/string-locale-compare": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@isaacs/string-locale-compare/-/string-locale-compare-1.1.0.tgz", + "integrity": "sha512-SQ7Kzhh9+D+ZW9MA0zkYv3VXhIDNx+LzM6EJ+/65I3QY+enU6Itte7E5XX7EWrqLW2FN4n06GWzBnPoC3th2aQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/load-nyc-config/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/console": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/core": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/console": "^29.7.0", + "@jest/reporters": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "ansi-escapes": "^4.2.1", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "exit": "^0.1.2", + "graceful-fs": "^4.2.9", + "jest-changed-files": "^29.7.0", + "jest-config": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-resolve": "^29.7.0", + "jest-resolve-dependencies": "^29.7.0", + "jest-runner": "^29.7.0", + "jest-runtime": "^29.7.0", + "jest-snapshot": "^29.7.0", + "jest-util": "^29.7.0", + "jest-validate": "^29.7.0", + "jest-watcher": "^29.7.0", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/diff-sequences": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/diff-sequences/-/diff-sequences-30.0.1.tgz", + "integrity": "sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.7.0", + "jest-snapshot": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect-utils": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-get-type": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/expect/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/get-type": { + "version": "30.1.0", + "resolved": "https://registry.npmjs.org/@jest/get-type/-/get-type-30.1.0.tgz", + "integrity": "sha512-eMbZE2hUnx1WV0pmURZY9XoXPkUYjpc55mb0CrhtdWLtzMQPFvu/rZkTLZFTsdaVQa+Tr4eWAteqcUzoawq/uA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/globals": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/environment": "^29.7.0", "@jest/expect": "^29.7.0", "@jest/types": "^29.6.3", "jest-mock": "^29.7.0" @@ -1069,1650 +1627,2136 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@jest/reporters": { + "node_modules/@jest/globals/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/pattern": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/@jest/pattern/-/pattern-30.0.1.tgz", + "integrity": "sha512-gWp7NfQW27LaBQz3TITS8L7ZCQ0TLvtmI//4OwlQRx4rnWxcPNIYjxZpDcN4+UlGxgm3jS5QPz8IPTCkb59wZA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "jest-regex-util": "30.0.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/pattern/node_modules/jest-regex-util": { + "version": "30.0.1", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-30.0.1.tgz", + "integrity": "sha512-jHEQgBXAgc+Gh4g0p3bCevgRCVRkB4VB70zhoAE48gxeSr1hfUOsM/C2WoJgVL7Eyg//hudYENbm3Ne+/dRVVA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/@jest/reporters": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@jest/console": "^29.7.0", + "@jest/test-result": "^29.7.0", + "@jest/transform": "^29.7.0", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/node": "*", + "chalk": "^4.0.0", + "collect-v8-coverage": "^1.0.0", + "exit": "^0.1.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-instrument": "^6.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.1.3", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "slash": "^3.0.0", + "string-length": "^4.0.1", + "strip-ansi": "^6.0.0", + "v8-to-istanbul": "^9.0.1" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/source-map": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.18", + "callsites": "^3.0.0", + "graceful-fs": "^4.2.9" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-result": { "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "@bcoe/v8-coverage": "^0.2.3", "@jest/console": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "collect-v8-coverage": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/test-sequencer": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { "@jest/test-result": "^29.7.0", - "@jest/transform": "^29.7.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/core": "^7.11.6", "@jest/types": "^29.6.3", "@jridgewell/trace-mapping": "^0.3.18", - "@types/node": "*", + "babel-plugin-istanbul": "^6.1.1", "chalk": "^4.0.0", - "collect-v8-coverage": "^1.0.0", - "exit": "^0.1.2", - "glob": "^7.1.3", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", "graceful-fs": "^4.2.9", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-instrument": "^6.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.1.3", - "jest-message-util": "^29.7.0", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", "jest-util": "^29.7.0", - "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", "slash": "^3.0.0", - "string-length": "^4.0.1", - "strip-ansi": "^6.0.0", - "v8-to-istanbul": "^9.0.1" + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" }, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.12", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.4", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.29", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@lerna/create": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/@lerna/create/-/create-9.0.5.tgz", + "integrity": "sha512-Gwd6ooSqXMdkdhiCGvHAfLRstj7W3ttr72WQB3Jf9HPP1A6mWtw0O80D0X+T/2hakqfe7lNLuKrEid4f7C0qbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@npmcli/arborist": "9.1.6", + "@npmcli/package-json": "7.0.2", + "@npmcli/run-script": "10.0.3", + "@nx/devkit": ">=21.5.2 < 23.0.0", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "20.1.2", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "has-unicode": "2.0.1", + "ini": "^1.3.8", + "init-package-json": "8.2.2", + "inquirer": "12.9.6", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "js-yaml": "4.1.1", + "libnpmpublish": "11.1.2", + "load-json-file": "6.2.0", + "make-dir": "4.0.0", + "make-fetch-happen": "15.0.2", + "minimatch": "3.1.4", + "multimatch": "5.0.0", + "npm-package-arg": "13.0.1", + "npm-packlist": "10.0.3", + "npm-registry-fetch": "19.1.0", + "nx": ">=21.5.3 < 23.0.0", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-queue": "6.6.2", + "p-reduce": "^2.1.0", + "pacote": "21.0.1", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^6.1.2", + "semver": "7.7.2", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "^3.0.0", + "ssri": "12.0.0", + "string-width": "^4.2.3", + "tar": "7.5.8", + "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", + "upath": "2.0.1", + "uuid": "^11.1.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "6.0.2", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/@lerna/create/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@lerna/create/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@lerna/create/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + "babel-plugin-macros": "^3.1.0" }, "peerDependenciesMeta": { - "node-notifier": { + "babel-plugin-macros": { "optional": true } } }, - "node_modules/@jest/reporters/node_modules/istanbul-lib-instrument": { - "version": "6.0.1", + "node_modules/@lerna/create/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@babel/core": "^7.12.3", - "@babel/parser": "^7.14.7", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.2.0", - "semver": "^7.5.4" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@lerna/create/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/@lerna/create/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@jest/schemas": { - "version": "29.6.3", + "node_modules/@lerna/create/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@lerna/create/node_modules/glob/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@lerna/create/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/minimatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@sinclair/typebox": "^0.27.8" + "brace-expansion": "^1.1.7" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "*" } }, - "node_modules/@jest/source-map": { - "version": "29.6.3", + "node_modules/@lerna/create/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.18", - "callsites": "^3.0.0", - "graceful-fs": "^4.2.9" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@jest/test-result": { - "version": "29.7.0", + "node_modules/@lerna/create/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", - "dependencies": { - "@jest/console": "^29.7.0", - "@jest/types": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "collect-v8-coverage": "^1.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/@jest/test-sequencer": { - "version": "29.7.0", + "node_modules/@lerna/create/node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@jest/test-result": "^29.7.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "slash": "^3.0.0" + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jest/transform": { - "version": "29.7.0", + "node_modules/@lerna/create/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.11.6", - "@jest/types": "^29.6.3", - "@jridgewell/trace-mapping": "^0.3.18", - "babel-plugin-istanbul": "^6.1.1", - "chalk": "^4.0.0", - "convert-source-map": "^2.0.0", - "fast-json-stable-stringify": "^2.1.0", - "graceful-fs": "^4.2.9", - "jest-haste-map": "^29.7.0", - "jest-regex-util": "^29.6.3", - "jest-util": "^29.7.0", - "micromatch": "^4.0.4", - "pirates": "^4.0.4", - "slash": "^3.0.0", - "write-file-atomic": "^4.0.2" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/@jest/types": { - "version": "29.6.3", + "node_modules/@lerna/create/node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "dev": true, "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "@types/istanbul-lib-coverage": "^2.0.0", - "@types/istanbul-reports": "^3.0.0", - "@types/node": "*", - "@types/yargs": "^17.0.8", - "chalk": "^4.0.0" + "fdir": "^6.4.3", + "picomatch": "^4.0.2" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", + "node_modules/@lerna/create/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">=6.0.0" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", + "node_modules/@lerna/create/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=6.0.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", + "node_modules/@lerna/create/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">=6.0.0" + "node": ">=12" } }, - "node_modules/@jridgewell/source-map": { - "version": "0.3.5", + "node_modules/@lerna/create/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "license": "ISC", + "engines": { + "node": ">=12" } }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.15", + "node_modules/@microsoft/tsdoc": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc/-/tsdoc-0.16.0.tgz", + "integrity": "sha512-xgAyonlVVS+q7Vc7qLW0UrJU7rSFcETRWsqdXZtjzRU8dF+6CkozTK4V4y1LwOX7j8r/vHphjDeMeGI4tNGeGA==", "dev": true, "license": "MIT" }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", + "node_modules/@microsoft/tsdoc-config": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@microsoft/tsdoc-config/-/tsdoc-config-0.18.0.tgz", + "integrity": "sha512-8N/vClYyfOH+l4fLkkr9+myAoR6M7akc8ntBJ4DJdWH2b09uVfr71+LTMpNyG19fNqWDg8KEDZhx5wxuqHyGjw==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "@microsoft/tsdoc": "0.16.0", + "ajv": "~8.12.0", + "jju": "~1.4.0", + "resolve": "~1.22.2" } }, - "node_modules/@lerna/add": { - "version": "4.0.0", + "node_modules/@microsoft/tsdoc-config/node_modules/ajv": { + "version": "8.12.0", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", + "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/bootstrap": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "npm-package-arg": "^8.1.0", - "p-map": "^4.0.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 10.18.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@lerna/add/node_modules/dedent": { - "version": "0.7.0", + "node_modules/@microsoft/tsdoc-config/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, "license": "MIT" }, - "node_modules/@lerna/bootstrap": { - "version": "4.0.0", + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.12.tgz", + "integrity": "sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==", "dev": true, "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.3", + "@emnapi/runtime": "^1.4.3", + "@tybys/wasm-util": "^0.10.0" + } + }, + "node_modules/@noble/curves": { + "version": "1.8.1", + "license": "MIT", "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/has-npm-version": "4.0.0", - "@lerna/npm-install": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "get-port": "^5.1.1", - "multimatch": "^5.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1", - "read-package-tree": "^5.3.1", - "semver": "^7.3.4" + "@noble/hashes": "1.7.1" }, "engines": { - "node": ">= 10.18.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@lerna/bootstrap/node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@lerna/changed": { - "version": "4.0.0", - "dev": true, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.7.1", "license": "MIT", - "dependencies": { - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" + "engines": { + "node": "^14.21.3 || >=16" }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.8.0", + "license": "MIT", "engines": { - "node": ">= 10.18.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@lerna/check-working-tree": { - "version": "4.0.0", + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/collect-uncommitted": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/validation-error": "4.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">= 10.18.0" + "node": ">= 8" } }, - "node_modules/@lerna/child-process": { - "version": "4.0.0", + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "execa": "^5.0.0", - "strong-log-transformer": "^2.1.0" - }, "engines": { - "node": ">= 10.18.0" + "node": ">= 8" } }, - "node_modules/@lerna/clean": { - "version": "4.0.0", + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/rimraf-dir": "4.0.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0", - "p-waterfall": "^2.1.1" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">= 10.18.0" + "node": ">= 8" } }, - "node_modules/@lerna/cli": { + "node_modules/@npmcli/agent": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/agent/-/agent-4.0.0.tgz", + "integrity": "sha512-kAQTcEN9E8ERLVg5AsGwLNoFb+oEG6engbqAU2P43gD4JEIkNGMHdVQ096FsOAAYpZPB0RSt0zgInKIAS1l5QA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/global-options": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2", - "yargs": "^16.2.0" + "agent-base": "^7.1.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.1", + "lru-cache": "^11.2.1", + "socks-proxy-agent": "^8.0.3" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/cli/node_modules/dedent": { - "version": "0.7.0", + "node_modules/@npmcli/agent/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/@lerna/collect-uncommitted": { - "version": "4.0.0", + "node_modules/@npmcli/arborist": { + "version": "9.1.6", + "resolved": "https://registry.npmjs.org/@npmcli/arborist/-/arborist-9.1.6.tgz", + "integrity": "sha512-c5Pr3EG8UP5ollkJy2x+UdEQC5sEHe3H9whYn6hb2HJimAKS4zmoJkx5acCiR/g4P38RnCSMlsYQyyHnKYeLvQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "chalk": "^4.1.0", - "npmlog": "^4.1.2" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/fs": "^4.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/map-workspaces": "^5.0.0", + "@npmcli/metavuln-calculator": "^9.0.2", + "@npmcli/name-from-folder": "^3.0.0", + "@npmcli/node-gyp": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/query": "^4.0.0", + "@npmcli/redact": "^3.0.0", + "@npmcli/run-script": "^10.0.0", + "bin-links": "^5.0.0", + "cacache": "^20.0.1", + "common-ancestor-path": "^1.0.1", + "hosted-git-info": "^9.0.0", + "json-stringify-nice": "^1.1.4", + "lru-cache": "^11.2.1", + "minimatch": "^10.0.3", + "nopt": "^8.0.0", + "npm-install-checks": "^7.1.0", + "npm-package-arg": "^13.0.0", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "pacote": "^21.0.2", + "parse-conflict-json": "^4.0.0", + "proc-log": "^5.0.0", + "proggy": "^3.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^3.0.1", + "semver": "^7.3.7", + "ssri": "^12.0.0", + "treeverse": "^3.0.0", + "walk-up-path": "^4.0.0" + }, + "bin": { + "arborist": "bin/index.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/collect-updates": { - "version": "4.0.0", + "node_modules/@npmcli/arborist/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "slash": "^3.0.0" - }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/command": { - "version": "4.0.0", + "node_modules/@npmcli/arborist/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/project": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/write-log-file": "4.0.0", - "clone-deep": "^4.0.1", - "dedent": "^0.7.0", - "execa": "^5.0.0", - "is-ci": "^2.0.0", - "npmlog": "^4.1.2" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/command/node_modules/dedent": { - "version": "0.7.0", + "node_modules/@npmcli/arborist/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } }, - "node_modules/@lerna/conventional-commits": { - "version": "4.0.0", + "node_modules/@npmcli/arborist/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@lerna/validation-error": "4.0.0", - "conventional-changelog-angular": "^5.0.12", - "conventional-changelog-core": "^4.2.2", - "conventional-recommended-bump": "^6.1.0", - "fs-extra": "^9.1.0", - "get-stream": "^6.0.0", - "lodash.template": "^4.5.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "semver": "^7.3.4" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/create": { - "version": "4.0.0", + "node_modules/@npmcli/arborist/node_modules/npm-bundled": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-5.0.0.tgz", + "integrity": "sha512-JLSpbzh6UUXIEoqPsYBvVNVmyrjVZ1fzEFbqxKkTJQkWBO3xFzFT+KDnSKQWwOQNbuWRwt5LSD6HOTLGIWzfrw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "globby": "^11.0.2", - "init-package-json": "^2.0.2", - "npm-package-arg": "^8.1.0", - "p-reduce": "^2.1.0", - "pacote": "^11.2.6", - "pify": "^5.0.0", - "semver": "^7.3.4", - "slash": "^3.0.0", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0", - "whatwg-url": "^8.4.0", - "yargs-parser": "20.2.4" + "npm-normalize-package-bin": "^5.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/create-symlink": { + "node_modules/@npmcli/arborist/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/pacote": { + "version": "21.4.0", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.4.0.tgz", + "integrity": "sha512-DR7mn7HUOomAX1BORnpYy678qVIidbvOojkBscqy27dRKN+s/hLeQT1MeYYrx1Cxh62jyKjiWiDV7RTTqB+ZEQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promise-retry": "^1.0.0", + "@npmcli/git": "^7.0.0", + "@npmcli/installed-package-contents": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^11.0.1", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^6.0.0", + "sigstore": "^4.0.0", + "ssri": "^13.0.0", + "tar": "^7.4.3" + }, + "bin": { + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/@npmcli/installed-package-contents": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-4.0.0.tgz", + "integrity": "sha512-yNyAdkBxB72gtZ4GrwXCM0ZUedo9nIbOMKfGjt6Cu6DXf0p8y1PViZAKDC8q8kv/fufx0WTjRBdSlyrvnP7hmA==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "cmd-shim": "^4.1.0", - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2" + "npm-bundled": "^5.0.0", + "npm-normalize-package-bin": "^5.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/create/node_modules/dedent": { - "version": "0.7.0", + "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, - "node_modules/@lerna/describe-ref": { - "version": "4.0.0", + "node_modules/@npmcli/arborist/node_modules/pacote/node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/diff": { + "node_modules/@npmcli/fs": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-4.0.0.tgz", + "integrity": "sha512-/xGlezI6xfGO9NwuJlnwz/K14qD1kCSAGtacBHnGzeAIuJGazcp45KP5NuyARXoKb7cwulAGWVsbeSxdG/cb0Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npmlog": "^4.1.2" + "semver": "^7.3.5" }, "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/exec": { - "version": "4.0.0", + "node_modules/@npmcli/git": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-7.0.2.tgz", + "integrity": "sha512-oeolHDjExNAJAnlYP2qzNjMX/Xi9bmu78C9dIGr4xjobrSKbuMYCph8lTzn4vnW3NjIqVmw/f8BCfouqyJXlRg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "ini": "^6.0.0", + "lru-cache": "^11.2.1", + "npm-pick-manifest": "^11.0.1", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "which": "^6.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/filter-options": { - "version": "4.0.0", + "node_modules/@npmcli/git/node_modules/ini": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-6.0.0.tgz", + "integrity": "sha512-IBTdIkzZNOpqm7q3dRqJvMaldXjDHWkEDfrwGEQTs5eaQMWV+djAhR+wahyNNMAa+qpbDUhBMVt4ZKNwpPm7xQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/collect-updates": "4.0.0", - "@lerna/filter-packages": "4.0.0", - "dedent": "^0.7.0", - "npmlog": "^4.1.2" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/filter-options/node_modules/dedent": { - "version": "0.7.0", + "node_modules/@npmcli/git/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "MIT" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" + } }, - "node_modules/@lerna/filter-packages": { - "version": "4.0.0", + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/validation-error": "4.0.0", - "multimatch": "^5.0.0", - "npmlog": "^4.1.2" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 10.18.0" + "node": "20 || >=22" } }, - "node_modules/@lerna/get-npm-exec-opts": { - "version": "4.0.0", + "node_modules/@npmcli/git/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT", - "dependencies": { - "npmlog": "^4.1.2" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/get-packed": { - "version": "4.0.0", + "node_modules/@npmcli/git/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fs-extra": "^9.1.0", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/github-client": { - "version": "4.0.0", + "node_modules/@npmcli/installed-package-contents": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/installed-package-contents/-/installed-package-contents-3.0.0.tgz", + "integrity": "sha512-fkxoPuFGvxyrH+OQzyTkX2LUEamrF4jZSmxjAtPPHHGO0dqsQ8tTKjnIS8SAnPHdk2I03BDtSMR5K/4loKg79Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/child-process": "4.0.0", - "@octokit/plugin-enterprise-rest": "^6.0.1", - "@octokit/rest": "^18.1.0", - "git-url-parse": "^11.4.4", - "npmlog": "^4.1.2" + "npm-bundled": "^4.0.0", + "npm-normalize-package-bin": "^4.0.0" + }, + "bin": { + "installed-package-contents": "bin/index.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/gitlab-client": { - "version": "4.0.0", + "node_modules/@npmcli/map-workspaces": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/map-workspaces/-/map-workspaces-5.0.3.tgz", + "integrity": "sha512-o2grssXo1e774E5OtEwwrgoszYRh0lqkJH+Pb9r78UcqdGJRDRfhpM8DvZPjzNLLNYeD/rNbjOKM3Ss5UABROw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "node-fetch": "^2.6.1", - "npmlog": "^4.1.2", - "whatwg-url": "^8.4.0" + "@npmcli/name-from-folder": "^4.0.0", + "@npmcli/package-json": "^7.0.0", + "glob": "^13.0.0", + "minimatch": "^10.0.3" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/global-options": { + "node_modules/@npmcli/map-workspaces/node_modules/@npmcli/name-from-folder": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-4.0.0.tgz", + "integrity": "sha512-qfrhVlOSqmKM8i6rkNdZzABj8MKEITGFAY+4teqBziksCQAOLutiAxM1wY2BKEd8KjUSpWmWCYxvXr0y4VTlPg==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/has-npm-version": { - "version": "4.0.0", + "node_modules/@npmcli/map-workspaces/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/child-process": "4.0.0", - "semver": "^7.3.4" - }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/import": { - "version": "4.0.0", + "node_modules/@npmcli/map-workspaces/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/validation-error": "4.0.0", - "dedent": "^0.7.0", - "fs-extra": "^9.1.0", - "p-map-series": "^2.1.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/import/node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@lerna/info": { - "version": "4.0.0", + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "13.0.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.6.tgz", + "integrity": "sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/output": "4.0.0", - "envinfo": "^7.7.4" + "minimatch": "^10.2.2", + "minipass": "^7.1.3", + "path-scurry": "^2.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/init": { - "version": "4.0.0", + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/command": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "write-json-file": "^4.3.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/link": { - "version": "4.0.0", + "node_modules/@npmcli/metavuln-calculator": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/metavuln-calculator/-/metavuln-calculator-9.0.3.tgz", + "integrity": "sha512-94GLSYhLXF2t2LAC7pDwLaM4uCARzxShyAQKsirmlNcpidH89VA4/+K1LbJmRMgz5gy65E/QBBWQdUvGLe2Frg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/package-graph": "4.0.0", - "@lerna/symlink-dependencies": "4.0.0", - "p-map": "^4.0.0", - "slash": "^3.0.0" + "cacache": "^20.0.0", + "json-parse-even-better-errors": "^5.0.0", + "pacote": "^21.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/list": { - "version": "4.0.0", + "node_modules/@npmcli/metavuln-calculator/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/listable": "4.0.0", - "@lerna/output": "4.0.0" - }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/listable": { - "version": "4.0.0", + "node_modules/@npmcli/metavuln-calculator/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/query-graph": "4.0.0", - "chalk": "^4.1.0", - "columnify": "^1.5.4" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/log-packed": { - "version": "4.0.0", + "node_modules/@npmcli/name-from-folder": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/name-from-folder/-/name-from-folder-3.0.0.tgz", + "integrity": "sha512-61cDL8LUc9y80fXn+lir+iVt8IS0xHqEKwPu/5jCjxQTVoSCmkXvw4vbMrzAMtmghz3/AkiBjhHkDKUH+kf7kA==", "dev": true, - "license": "MIT", - "dependencies": { - "byte-size": "^7.0.0", - "columnify": "^1.5.4", - "has-unicode": "^2.0.1", - "npmlog": "^4.1.2" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/npm-conf": { + "node_modules/@npmcli/node-gyp": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-4.0.0.tgz", + "integrity": "sha512-+t5DZ6mO/QFh78PByMq1fGSAub/agLJZDRfJRMeOSNCt8s9YVlTjmGpIPwPhvXTGUIJk+WszlT0rQa1W33yzNA==", "dev": true, - "license": "MIT", - "dependencies": { - "config-chain": "^1.1.12", - "pify": "^5.0.0" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/npm-dist-tag": { - "version": "4.0.0", + "node_modules/@npmcli/package-json": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@npmcli/package-json/-/package-json-7.0.2.tgz", + "integrity": "sha512-0ylN3U5htO1SJTmy2YI78PZZjLkKUGg7EKgukb2CRi0kzyoDr0cfjHAzi7kozVhj2V3SxN1oyKqZ2NSo40z00g==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/otplease": "4.0.0", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2" + "@npmcli/git": "^7.0.0", + "glob": "^11.0.3", + "hosted-git-info": "^9.0.0", + "json-parse-even-better-errors": "^5.0.0", + "proc-log": "^6.0.0", + "semver": "^7.5.3", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/npm-install": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "fs-extra": "^9.1.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "signal-exit": "^3.0.3", - "write-pkg": "^4.0.0" - }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/npm-publish": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/otplease": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmpublish": "^4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "pify": "^5.0.0", - "read-package-json": "^3.0.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/npm-run-script": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/glob": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-11.1.0.tgz", + "integrity": "sha512-vuNwKSaKiqm7g0THUBu2x7ckSs3XJLXE+2ssL7/MfTGPLLcrJQ/4Uq1CjPTtO5cCIiRxqvN6Twy1qOwhL0Xjcw==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@lerna/child-process": "4.0.0", - "@lerna/get-npm-exec-opts": "4.0.0", - "npmlog": "^4.1.2" + "foreground-child": "^3.3.1", + "jackspeak": "^4.1.1", + "minimatch": "^10.1.1", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^2.0.0" + }, + "bin": { + "glob": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 10.18.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/otplease": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/json-parse-even-better-errors": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-5.0.0.tgz", + "integrity": "sha512-ZF1nxZ28VhQouRWhUcVlUIN3qwSgPuswK05s/HIaoetAoE/9tngVmCHjSxmSQPav1nd+lPtTL0YZ/2AFdR/iYQ==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/prompt": "4.0.0" - }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/output": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "npmlog": "^4.1.2" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/pack-directory": { - "version": "4.0.0", + "node_modules/@npmcli/package-json/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/get-packed": "4.0.0", - "@lerna/package": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "npm-packlist": "^2.1.4", - "npmlog": "^4.1.2", - "tar": "^6.1.0", - "temp-write": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/package": { - "version": "4.0.0", + "node_modules/@npmcli/promise-spawn": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-9.0.1.tgz", + "integrity": "sha512-OLUaoqBuyxeTqUvjA3FZFiXUfYC1alp3Sa99gW3EUDz3tZ3CbXDdcZ7qWKBzicrJleIgucoWamWH1saAmH/l2Q==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "load-json-file": "^6.2.0", - "npm-package-arg": "^8.1.0", - "write-pkg": "^4.0.0" + "which": "^6.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/package-graph": { + "node_modules/@npmcli/promise-spawn/node_modules/isexe": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/validation-error": "4.0.0", - "npm-package-arg": "^8.1.0", - "npmlog": "^4.1.2", - "semver": "^7.3.4" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 10.18.0" + "node": ">=20" } }, - "node_modules/@lerna/prerelease-id-from-version": { - "version": "4.0.0", + "node_modules/@npmcli/promise-spawn/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "semver": "^7.3.4" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/profiler": { - "version": "4.0.0", + "node_modules/@npmcli/query": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@npmcli/query/-/query-4.0.1.tgz", + "integrity": "sha512-4OIPFb4weUUwkDXJf4Hh1inAn8neBGq3xsH4ZsAaN6FK3ldrFkH7jSpCc7N9xesi0Sp+EBXJ9eGMDrEww2Ztqw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "upath": "^2.0.1" + "postcss-selector-parser": "^7.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/project": { - "version": "4.0.0", + "node_modules/@npmcli/redact": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@npmcli/redact/-/redact-3.2.2.tgz", + "integrity": "sha512-7VmYAmk4csGv08QzrDKScdzn11jHPFGyqJW39FyPgPuAp3zIaUmuCo1yxw9aGs+NEJuTGQ9Gwqpt93vtJubucg==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/package": "4.0.0", - "@lerna/validation-error": "4.0.0", - "cosmiconfig": "^7.0.0", - "dedent": "^0.7.0", - "dot-prop": "^6.0.1", - "glob-parent": "^5.1.1", - "globby": "^11.0.2", - "load-json-file": "^6.2.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "resolve-from": "^5.0.0", - "write-json-file": "^4.3.0" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@lerna/project/node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@lerna/project/node_modules/glob-parent": { - "version": "5.1.2", + "node_modules/@npmcli/run-script": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/run-script/-/run-script-10.0.3.tgz", + "integrity": "sha512-ER2N6itRkzWbbtVmZ9WKaWxVlKlOeBFF1/7xx+KA5J1xKa4JjUwBdb6tDpk0v1qA+d+VDwHI9qmLcXSWcmi+Rw==", "dev": true, "license": "ISC", "dependencies": { - "is-glob": "^4.0.1" + "@npmcli/node-gyp": "^5.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^9.0.0", + "node-gyp": "^12.1.0", + "proc-log": "^6.0.0", + "which": "^6.0.0" }, "engines": { - "node": ">= 6" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/project/node_modules/resolve-from": { + "node_modules/@npmcli/run-script/node_modules/@npmcli/node-gyp": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/node-gyp/-/node-gyp-5.0.0.tgz", + "integrity": "sha512-uuG5HZFXLfyFKqg8QypsmgLQW7smiRjVc45bqD/ofZZcR/uxEjgQU8qDPv0s9TEeMUiAAU/GC5bR6++UdTirIQ==", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=8" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/prompt": { + "node_modules/@npmcli/run-script/node_modules/isexe": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "MIT", - "dependencies": { - "inquirer": "^7.3.3", - "npmlog": "^4.1.2" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">= 10.18.0" + "node": ">=20" } }, - "node_modules/@lerna/publish": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/describe-ref": "4.0.0", - "@lerna/log-packed": "4.0.0", - "@lerna/npm-conf": "4.0.0", - "@lerna/npm-dist-tag": "4.0.0", - "@lerna/npm-publish": "4.0.0", - "@lerna/otplease": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/pack-directory": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/pulse-till-done": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "@lerna/version": "4.0.0", - "fs-extra": "^9.1.0", - "libnpmaccess": "^4.0.1", - "npm-package-arg": "^8.1.0", - "npm-registry-fetch": "^9.0.0", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "pacote": "^11.2.6", - "semver": "^7.3.4" - }, - "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/pulse-till-done": { - "version": "4.0.0", + "node_modules/@npmcli/run-script/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "license": "MIT", - "dependencies": { - "npmlog": "^4.1.2" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/query-graph": { - "version": "4.0.0", + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@lerna/package-graph": "4.0.0" + "isexe": "^4.0.0" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 10.18.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@lerna/resolve-symlink": { - "version": "4.0.0", + "node_modules/@nx/devkit": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/devkit/-/devkit-22.5.3.tgz", + "integrity": "sha512-zhRNTFsi4pbwg7L/zhBHtTOSevlgwm1iKlhPlQWoOv2PR6b+3JvjL8o4P1MbkIkut3Lsn+oTuJJ1LUPlr5vprg==", "dev": true, "license": "MIT", "dependencies": { - "fs-extra": "^9.1.0", - "npmlog": "^4.1.2", - "read-cmd-shim": "^2.0.0" + "@zkochan/js-yaml": "0.0.7", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "minimatch": "10.2.1", + "semver": "^7.6.3", + "tslib": "^2.3.0", + "yargs-parser": "21.1.1" }, - "engines": { - "node": ">= 10.18.0" + "peerDependencies": { + "nx": ">= 21 <= 23 || ^22.0.0-0" } }, - "node_modules/@lerna/rimraf-dir": { - "version": "4.0.0", + "node_modules/@nx/devkit/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/child-process": "4.0.0", - "npmlog": "^4.1.2", - "path-exists": "^4.0.0", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/run": { - "version": "4.0.0", + "node_modules/@nx/devkit/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/command": "4.0.0", - "@lerna/filter-options": "4.0.0", - "@lerna/npm-run-script": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/profiler": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/timer": "4.0.0", - "@lerna/validation-error": "4.0.0", - "p-map": "^4.0.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "18 || 20 || >=22" } }, - "node_modules/@lerna/run-lifecycle": { - "version": "4.0.0", + "node_modules/@nx/devkit/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "@lerna/npm-conf": "4.0.0", - "npm-lifecycle": "^3.1.5", - "npmlog": "^4.1.2" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">= 10.18.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@lerna/run-topologically": { - "version": "4.0.0", + "node_modules/@nx/devkit/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/query-graph": "4.0.0", - "p-queue": "^6.6.2" - }, + "license": "ISC", "engines": { - "node": ">= 10.18.0" + "node": ">=12" } }, - "node_modules/@lerna/symlink-binary": { - "version": "4.0.0", + "node_modules/@nx/nx-darwin-arm64": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-arm64/-/nx-darwin-arm64-22.5.3.tgz", + "integrity": "sha512-cKXBq5bJanXp8uv6+wPvx/G4q4oFpOxMSPGaeFOVhbul2QHGGq+XMcSo+D8aYJCsk1YnbyAnnQ8r8RH/kTK5Mw==", + "cpu": [ + "arm64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@lerna/create-symlink": "4.0.0", - "@lerna/package": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0" - }, - "engines": { - "node": ">= 10.18.0" - } + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@nx/nx-darwin-x64": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-darwin-x64/-/nx-darwin-x64-22.5.3.tgz", + "integrity": "sha512-mToS41o8I+8CfxYVRMTISkgT7I1cnazgwMf7U9DoLqKOwOZzj9WD3NmsWc1h69QNJPltbeRPS8y/wnhu7RHzRA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@nx/nx-freebsd-x64": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-freebsd-x64/-/nx-freebsd-x64-22.5.3.tgz", + "integrity": "sha512-CAWysdFSZVbTfdjNXojd9TgXbZiK9i0k3njROeV+jORsDWw4Eth3PDmK94Wk916b3n2hS0UjyI6RZaMy2GEqzA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@nx/nx-linux-arm-gnueabihf": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-22.5.3.tgz", + "integrity": "sha512-PRjPrijQQbdrvYwNuA3xQ3VXEQ4zfhnPjy+S2ZlQZqhFI4mlP22xfhOH1bQ7pIfzCNC2f/J9UMNYOrq/bEFjBg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-arm64-gnu": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-22.5.3.tgz", + "integrity": "sha512-dmDBio/5z4Zch2VlRMdgBPm53d8xwq1l7xLj1dFMKjfE7ByfPukjPM7ZEYBiPckfiQfJBRh6HKDN7uEkA/y8CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-arm64-musl": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-22.5.3.tgz", + "integrity": "sha512-E81ET/MnnKfuLhKiovF5ueJirHOMjhC1eK0MDM2Do9wdPyusZzfGSVFQ9DOHtg7L37dAE95NNd1lCVO8gJ96vg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-x64-gnu": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-22.5.3.tgz", + "integrity": "sha512-AgXCsPCzC0sAu2VRclMjs7LrvPQfqS3sFiehlXWTbNHQitPZLuAmQGb2l4T8lbMOs0Xn3EIrg6BF6/ntTTp6Xg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-linux-x64-musl": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-22.5.3.tgz", + "integrity": "sha512-sKs4bFQRu8Btxf5rMYKPsRVNxkQ2ey8sqoCyhJj8fwJF05DayK2ErJAR/rhtBK0c1NV7kQiKJA8nWBV3jnCdsg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@nx/nx-win32-arm64-msvc": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-22.5.3.tgz", + "integrity": "sha512-KOCQLakSO5vl4D6et9qPytOAmkgq2IIuhI8A/g0xbD1LqrIlRPa+bdkZqOGpODYAk3NyKAk7hWHsqfXKHwwX6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@lerna/symlink-dependencies": { - "version": "4.0.0", + "node_modules/@nx/nx-win32-x64-msvc": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-22.5.3.tgz", + "integrity": "sha512-a6ZB2La82RIHcz4nrt3H6RZaOa+xkC2IPzhU9hMo2gbkLdIxn8wyof8uGA0frncmIVHuLc3nFAhpBOgf4j6tMA==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "@lerna/create-symlink": "4.0.0", - "@lerna/resolve-symlink": "4.0.0", - "@lerna/symlink-binary": "4.0.0", - "fs-extra": "^9.1.0", - "p-map": "^4.0.0", - "p-map-series": "^2.1.0" - }, - "engines": { - "node": ">= 10.18.0" - } + "optional": true, + "os": [ + "win32" + ] }, - "node_modules/@lerna/timer": { + "node_modules/@octokit/auth-token": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", + "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", "dev": true, "license": "MIT", "engines": { - "node": ">= 10.18.0" + "node": ">= 18" } }, - "node_modules/@lerna/validation-error": { - "version": "4.0.0", + "node_modules/@octokit/core": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.2.2.tgz", + "integrity": "sha512-/g2d4sW9nUDJOMz3mabVQvOGhVa4e/BN/Um7yca9Bb2XTzPPnfTWHWQg+IsEYO7M3Vx+EXvaM/I2pJWIMun1bg==", "dev": true, "license": "MIT", "dependencies": { - "npmlog": "^4.1.2" + "@octokit/auth-token": "^4.0.0", + "@octokit/graphql": "^7.1.0", + "@octokit/request": "^8.4.1", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": ">= 18" } }, - "node_modules/@lerna/version": { - "version": "4.0.0", + "node_modules/@octokit/endpoint": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", + "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", "dev": true, "license": "MIT", "dependencies": { - "@lerna/check-working-tree": "4.0.0", - "@lerna/child-process": "4.0.0", - "@lerna/collect-updates": "4.0.0", - "@lerna/command": "4.0.0", - "@lerna/conventional-commits": "4.0.0", - "@lerna/github-client": "4.0.0", - "@lerna/gitlab-client": "4.0.0", - "@lerna/output": "4.0.0", - "@lerna/prerelease-id-from-version": "4.0.0", - "@lerna/prompt": "4.0.0", - "@lerna/run-lifecycle": "4.0.0", - "@lerna/run-topologically": "4.0.0", - "@lerna/validation-error": "4.0.0", - "chalk": "^4.1.0", - "dedent": "^0.7.0", - "load-json-file": "^6.2.0", - "minimatch": "^3.0.4", - "npmlog": "^4.1.2", - "p-map": "^4.0.0", - "p-pipe": "^3.1.0", - "p-reduce": "^2.1.0", - "p-waterfall": "^2.1.1", - "semver": "^7.3.4", - "slash": "^3.0.0", - "temp-write": "^4.0.0", - "write-json-file": "^4.3.0" + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 10.18.0" + "node": ">= 18" } }, - "node_modules/@lerna/version/node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@lerna/write-log-file": { - "version": "4.0.0", + "node_modules/@octokit/graphql": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.1.1.tgz", + "integrity": "sha512-3mkDltSfcDUoa176nlGoA32RGjeWjl3K7F/BwHwRMJUW/IteSa4bnSV8p2ThNkcIcZU2umkZWxwETSSCJf2Q7g==", "dev": true, "license": "MIT", "dependencies": { - "npmlog": "^4.1.2", - "write-file-atomic": "^3.0.3" + "@octokit/request": "^8.4.1", + "@octokit/types": "^13.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">= 10.18.0" - } - }, - "node_modules/@lerna/write-log-file/node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "node": ">= 18" } }, - "node_modules/@microsoft/tsdoc": { - "version": "0.14.2", + "node_modules/@octokit/openapi-types": { + "version": "24.2.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-24.2.0.tgz", + "integrity": "sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg==", "dev": true, "license": "MIT" }, - "node_modules/@microsoft/tsdoc-config": { - "version": "0.16.2", + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", "dev": true, - "license": "MIT", - "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "ajv": "~6.12.6", - "jju": "~1.4.0", - "resolve": "~1.19.0" - } + "license": "MIT" }, - "node_modules/@microsoft/tsdoc-config/node_modules/resolve": { - "version": "1.19.0", + "node_modules/@octokit/plugin-paginate-rest": { + "version": "11.4.4-cjs.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.4-cjs.2.tgz", + "integrity": "sha512-2dK6z8fhs8lla5PaOTgqfCGBxgAv/le+EhPs27KklPhm1bKObpu6lXzwfUEQ16ajXzqNrKMujsFyo9K2eaoISw==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.1.0", - "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/@noble/curves": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.6.0.tgz", - "integrity": "sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==", - "dependencies": { - "@noble/hashes": "1.5.0" + "@octokit/types": "^13.7.0" }, "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 18" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@octokit/core": "5" } }, - "node_modules/@noble/hashes": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz", - "integrity": "sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==", + "node_modules/@octokit/plugin-request-log": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-4.0.1.tgz", + "integrity": "sha512-GihNqNpGHorUrO7Qa9JbAl0dbLnqJVrV8OXe2Zm5/Y4wFkZQDfTreBzVmiRfJVfE4mClXdihHnbpyyO9FSX4HA==", + "dev": true, + "license": "MIT", "engines": { - "node": "^14.21.3 || >=16" + "node": ">= 18" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "peerDependencies": { + "@octokit/core": "5" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "13.3.2-cjs.1", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.2-cjs.1.tgz", + "integrity": "sha512-VUjIjOOvF2oELQmiFpWA1aOPdawpyaCUqcEBc/UOUnj3Xp6DJGrJ1+bjUIIDzdHjnFNO6q57ODMfdEZnoBkCwQ==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@octokit/types": "^13.8.0" }, "engines": { - "node": ">= 8" + "node": ">= 18" + }, + "peerDependencies": { + "@octokit/core": "^5" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", + "node_modules/@octokit/request": { + "version": "8.4.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", + "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", "dev": true, "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^9.0.6", + "@octokit/request-error": "^5.1.1", + "@octokit/types": "^13.1.0", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": ">= 8" + "node": ">= 18" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", + "node_modules/@octokit/request-error": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", + "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", "dev": true, "license": "MIT", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@octokit/types": "^13.1.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@npmcli/ci-detect": { - "version": "1.4.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/fs": { - "version": "1.1.1", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.0.1", - "semver": "^7.3.5" - } - }, - "node_modules/@npmcli/git": { - "version": "2.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/promise-spawn": "^1.3.2", - "lru-cache": "^6.0.0", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^6.1.1", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" + "node": ">= 18" } }, - "node_modules/@npmcli/git/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/@octokit/rest": { + "version": "20.1.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-20.1.2.tgz", + "integrity": "sha512-GmYiltypkHHtihFwPRxlaorG5R9VAHuk/vbszVoRTGXnAsY60wYLkh/E2XiFmdZmqrisw+9FaazS1i5SbdWYgA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "@octokit/core": "^5.0.2", + "@octokit/plugin-paginate-rest": "11.4.4-cjs.2", + "@octokit/plugin-request-log": "^4.0.0", + "@octokit/plugin-rest-endpoint-methods": "13.3.2-cjs.1" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, - "node_modules/@npmcli/git/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", + "node_modules/@octokit/types": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.10.0.tgz", + "integrity": "sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "installed-package-contents": "index.js" - }, - "engines": { - "node": ">= 10" + "@octokit/openapi-types": "^24.2.0" } }, - "node_modules/@npmcli/move-file": { - "version": "1.1.2", + "node_modules/@pkgr/core": { + "version": "0.2.9", "dev": true, "license": "MIT", - "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/pkgr" } }, - "node_modules/@npmcli/node-gyp": { - "version": "1.0.3", + "node_modules/@polka/url": { + "version": "1.0.0-next.29", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/@npmcli/promise-spawn": { - "version": "1.3.2", + "node_modules/@rtsao/scc": { + "version": "1.1.0", "dev": true, - "license": "ISC", - "dependencies": { - "infer-owner": "^1.0.4" + "license": "MIT" + }, + "node_modules/@scure/base": { + "version": "1.2.6", + "license": "MIT", + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@npmcli/run-script": { - "version": "1.8.6", - "dev": true, - "license": "ISC", + "node_modules/@scure/bip32": { + "version": "1.7.0", + "license": "MIT", "dependencies": { - "@npmcli/node-gyp": "^1.0.2", - "@npmcli/promise-spawn": "^1.3.2", - "node-gyp": "^7.1.0", - "read-package-json-fast": "^2.0.1" + "@noble/curves": "~1.9.0", + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@npmcli/run-script/node_modules/node-gyp": { - "version": "7.1.2", - "dev": true, + "node_modules/@scure/bip32/node_modules/@noble/curves": { + "version": "1.9.6", "license": "MIT", "dependencies": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.3", - "nopt": "^5.0.0", - "npmlog": "^4.1.2", - "request": "^2.88.2", - "rimraf": "^3.0.2", - "semver": "^7.3.2", - "tar": "^6.0.2", - "which": "^2.0.2" - }, - "bin": { - "node-gyp": "bin/node-gyp.js" + "@noble/hashes": "1.8.0" }, "engines": { - "node": ">= 10.12.0" + "node": "^14.21.3 || >=16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@npmcli/run-script/node_modules/nopt": { - "version": "5.0.0", - "dev": true, - "license": "ISC", + "node_modules/@scure/bip39": { + "version": "1.6.0", + "license": "MIT", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "@noble/hashes": "~1.8.0", + "@scure/base": "~1.2.5" }, - "engines": { - "node": ">=6" + "funding": { + "url": "https://paulmillr.com/funding/" } }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.19.0.tgz", + "integrity": "sha512-1hRxtYIJfJSZeM5ivbUXv9hcJP3PWRo5prG/V2sWwiubUKTa+7P62d2qxCW8jiVFX4pgRHhnHNp+qeR7Xl+6kg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^6.0.3" + "@shikijs/types": "3.19.0", + "@shikijs/vscode-textmate": "^10.0.2" } }, - "node_modules/@octokit/core": { - "version": "3.6.0", + "node_modules/@shikijs/langs": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.19.0.tgz", + "integrity": "sha512-dBMFzzg1QiXqCVQ5ONc0z2ebyoi5BKz+MtfByLm0o5/nbUu3Iz8uaTCa5uzGiscQKm7lVShfZHU1+OG3t5hgwg==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@shikijs/types": "3.19.0" } }, - "node_modules/@octokit/endpoint": { - "version": "6.0.12", + "node_modules/@shikijs/themes": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.19.0.tgz", + "integrity": "sha512-H36qw+oh91Y0s6OlFfdSuQ0Ld+5CgB/VE6gNPK+Hk4VRbVG/XQgkjnt4KzfnnoO6tZPtKJKHPjwebOCfjd6F8A==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^6.0.3", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" + "@shikijs/types": "3.19.0" } }, - "node_modules/@octokit/graphql": { - "version": "4.8.0", + "node_modules/@shikijs/types": { + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.19.0.tgz", + "integrity": "sha512-Z2hdeEQlzuntf/BZpFG8a+Fsw9UVXdML7w0o3TgSXV3yNESGon+bs9ITkQb3Ki7zxoXOOu5oJWqZ2uto06V9iQ==", "dev": true, "license": "MIT", "dependencies": { - "@octokit/request": "^5.6.0", - "@octokit/types": "^6.0.3", - "universal-user-agent": "^6.0.0" + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" } }, - "node_modules/@octokit/openapi-types": { - "version": "12.11.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", "dev": true, "license": "MIT" }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "2.21.3", + "node_modules/@sigstore/bundle": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/@sigstore/bundle/-/bundle-4.0.0.tgz", + "integrity": "sha512-NwCl5Y0V6Di0NexvkTqdoVfmjTaQwoLM236r89KEojGmq/jMls8S+zb7yOwAPdXvbwfKDlP+lmXgAL4vKSQT+A==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@octokit/types": "^6.40.0" + "@sigstore/protobuf-specs": "^0.5.0" }, - "peerDependencies": { - "@octokit/core": ">=2" - } - }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "peerDependencies": { - "@octokit/core": ">=3" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "5.16.2", + "node_modules/@sigstore/core": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/core/-/core-3.1.0.tgz", + "integrity": "sha512-o5cw1QYhNQ9IroioJxpzexmPjfCe7gzafd2RY3qnMpxr4ZEja+Jad/U8sgFpaue6bOaF+z7RVkyKVV44FN+N8A==", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/types": "^6.39.0", - "deprecation": "^2.3.1" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "license": "Apache-2.0", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@octokit/request": { - "version": "5.6.3", + "node_modules/@sigstore/protobuf-specs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@sigstore/protobuf-specs/-/protobuf-specs-0.5.0.tgz", + "integrity": "sha512-MM8XIwUjN2bwvCg1QvrMtbBmpcSHrkhFSCu1D11NyPvDQ25HEc4oG5/OcQfd/Tlf/OxmKWERDj0zGE23jQaMwA==", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/endpoint": "^6.0.1", - "@octokit/request-error": "^2.1.0", - "@octokit/types": "^6.16.1", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" + "license": "Apache-2.0", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/@octokit/request-error": { - "version": "2.1.0", + "node_modules/@sigstore/sign": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/sign/-/sign-4.1.0.tgz", + "integrity": "sha512-Vx1RmLxLGnSUqx/o5/VsCjkuN5L7y+vxEEwawvc7u+6WtX2W4GNa7b9HEjmcRWohw/d6BpATXmvOwc78m+Swdg==", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@octokit/types": "^6.0.3", - "deprecation": "^2.0.0", - "once": "^1.4.0" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "make-fetch-happen": "^15.0.3", + "proc-log": "^6.1.0", + "promise-retry": "^2.0.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@octokit/rest": { - "version": "18.12.0", + "node_modules/@sigstore/sign/node_modules/iconv-lite": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.2.tgz", + "integrity": "sha512-im9DjEDQ55s9fL4EYzOAv0yMqmMBSZp6G0VvFyTMPKWxiSBHUj9NW/qqLmXUwXrrM7AvqSlTCfvqRb0cM8yYqw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@octokit/core": "^3.5.1", - "@octokit/plugin-paginate-rest": "^2.16.8", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, - "node_modules/@octokit/types": { - "version": "6.41.0", + "node_modules/@sigstore/sign/node_modules/make-fetch-happen": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.4.tgz", + "integrity": "sha512-vM2sG+wbVeVGYcCm16mM3d5fuem9oC28n436HjsGO3LcxoTI8LNVa4rwZDn3f76+cWyT4GGJDxjTYU1I2nr6zw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@octokit/openapi-types": "^12.11.0" + "@gar/promise-retry": "^1.0.0", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^5.0.0", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^6.0.0", + "ssri": "^13.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.21", + "node_modules/@sigstore/sign/node_modules/minipass-fetch": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-5.0.2.tgz", + "integrity": "sha512-2d0q2a8eCi2IRg/IGubCNRJoYbA1+YPXAzQVRFmB45gdGZafyivnZ5YSEfo3JikbjGxOdntGFvBQGqaSMXlAFQ==", "dev": true, - "license": "MIT" - }, - "node_modules/@rtsao/scc": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@rtsao/scc/-/scc-1.1.0.tgz", - "integrity": "sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==", - "dev": true - }, - "node_modules/@scure/base": { - "version": "1.1.9", - "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.9.tgz", - "integrity": "sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==", - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip32": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.5.0.tgz", - "integrity": "sha512-8EnFYkqEQdnkuGBVpCzKxyIwDCBLDVj3oiX0EKUFre/tOjL/Hqba1D6n/8RcmaQy4f95qQFrO2A8Sr6ybh4NRw==", + "license": "MIT", "dependencies": { - "@noble/curves": "~1.6.0", - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.7" + "minipass": "^7.0.3", + "minipass-sized": "^2.0.0", + "minizlib": "^3.0.1" }, - "funding": { - "url": "https://paulmillr.com/funding/" + "engines": { + "node": "^20.17.0 || >=22.9.0" + }, + "optionalDependencies": { + "iconv-lite": "^0.7.2" } }, - "node_modules/@scure/bip39": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.4.0.tgz", - "integrity": "sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==", + "node_modules/@sigstore/sign/node_modules/minipass-sized": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-2.0.0.tgz", + "integrity": "sha512-zSsHhto5BcUVM2m1LurnXY6M//cGhVaegT71OfOXoprxT6o780GZd792ea6FfrQkuU4usHZIUczAQMRUE2plzA==", + "dev": true, + "license": "ISC", "dependencies": { - "@noble/hashes": "~1.5.0", - "@scure/base": "~1.1.8" + "minipass": "^7.1.2" }, - "funding": { - "url": "https://paulmillr.com/funding/" - } - }, - "node_modules/@scure/bip39/node_modules/@noble/hashes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.4.0.tgz", - "integrity": "sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==", "engines": { - "node": ">= 16" - }, - "funding": { - "url": "https://paulmillr.com/funding/" + "node": ">=8" } }, - "node_modules/@shikijs/core": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.19.0.tgz", - "integrity": "sha512-314J5MPdS1wzfjuD856MXvbAI2wN03ofMnUGkZ5ZDBOza/d38paLwd+YVyuKrrjxJ4hfPMjc4tRmPkXd6UDMPQ==", + "node_modules/@sigstore/sign/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, - "dependencies": { - "@shikijs/engine-javascript": "1.19.0", - "@shikijs/engine-oniguruma": "1.19.0", - "@shikijs/types": "1.19.0", - "@shikijs/vscode-textmate": "^9.2.2", - "@types/hast": "^3.0.4", - "hast-util-to-html": "^9.0.3" + "license": "ISC", + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@shikijs/engine-javascript": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-javascript/-/engine-javascript-1.19.0.tgz", - "integrity": "sha512-D1sioU61n7fLWfDzTC9JNS19zEYZMr7qxkSVzv6ziEWDxnwzy2PvYoKPedJV4qUf+2VnrYPSaArDz2W0XgGB7A==", + "node_modules/@sigstore/sign/node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", "dev": true, + "license": "ISC", "dependencies": { - "@shikijs/types": "1.19.0", - "@shikijs/vscode-textmate": "^9.2.2", - "oniguruma-to-js": "0.4.3" + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@shikijs/engine-oniguruma": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-1.19.0.tgz", - "integrity": "sha512-/JxwIefNVLGB4EmpB8i6P4JB/oVYRuzSixbqvx7m6iPW0lQ1T97c/0wmA+JlKbngEiExckSuPwa48fajlShB7A==", + "node_modules/@sigstore/tuf": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@sigstore/tuf/-/tuf-4.0.1.tgz", + "integrity": "sha512-OPZBg8y5Vc9yZjmWCHrlWPMBqW5yd8+wFNl+thMdtcWz3vjVSoJQutF8YkrzI0SLGnkuFof4HSsWUhXrf219Lw==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@shikijs/types": "1.19.0", - "@shikijs/vscode-textmate": "^9.2.2" + "@sigstore/protobuf-specs": "^0.5.0", + "tuf-js": "^4.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@shikijs/types": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-1.19.0.tgz", - "integrity": "sha512-NZvVp3k1bP4MTRUbmnkGhYzPdoNMjNLSAwczMRUbtUl4oj2LlNRNbwERyeIyJt56Ac9fvPVZ2nn13OXk86E5UQ==", + "node_modules/@sigstore/verify": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sigstore/verify/-/verify-3.1.0.tgz", + "integrity": "sha512-mNe0Iigql08YupSOGv197YdHpPPr+EzDZmfCgMc7RPNaZTw5aLN01nBl6CHJOh3BGtnMIj83EeN4butBchc8Ag==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "@shikijs/vscode-textmate": "^9.2.2", - "@types/hast": "^3.0.4" + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/@shikijs/vscode-textmate": { - "version": "9.2.2", - "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-9.2.2.tgz", - "integrity": "sha512-TMp15K+GGYrWlZM8+Lnj9EaHEFmOen0WJBrfa17hF7taDOYthuPPV0GWzfd/9iMij0akS/8Yw2ikquH7uVi/fg==", - "dev": true - }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "dev": true, "license": "MIT" }, "node_modules/@sinonjs/commons": { - "version": "3.0.0", + "version": "3.0.1", "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" } }, + "node_modules/@sinonjs/commons/node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/@sinonjs/fake-timers": { "version": "10.3.0", "dev": true, @@ -2722,20 +3766,12 @@ } }, "node_modules/@socket.io/component-emitter": { - "version": "3.1.0", + "version": "3.1.2", "dev": true, "license": "MIT" }, - "node_modules/@tootallnate/once": { - "version": "1.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6" - } - }, "node_modules/@tsconfig/node10": { - "version": "1.0.9", + "version": "1.0.11", "dev": true, "license": "MIT" }, @@ -2754,8 +3790,82 @@ "dev": true, "license": "MIT" }, + "node_modules/@tufjs/canonical-json": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@tufjs/canonical-json/-/canonical-json-2.0.0.tgz", + "integrity": "sha512-yVtV8zsdo8qFHe+/3kw81dSLyF7D576A5cCFCi4X7B39tWT7SekaEFUnvnWJHz+9qO7qJTah1JbrDjWKqFtdWA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/@tufjs/models": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@tufjs/models/-/models-4.1.0.tgz", + "integrity": "sha512-Y8cK9aggNRsqJVaKUlEYs4s7CvQ1b1ta2DVPyAimb0I2qhzjNk+A+mxvll/klL0RlfuIUei8BF7YWiua4kQqww==", + "dev": true, + "license": "MIT", + "dependencies": { + "@tufjs/canonical-json": "2.0.0", + "minimatch": "^10.1.1" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/@tufjs/models/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@tufjs/models/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/@tufjs/models/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@tybys/wasm-util": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.10.1.tgz", + "integrity": "sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@types/babel__core": { - "version": "7.20.2", + "version": "7.20.5", "dev": true, "license": "MIT", "dependencies": { @@ -2767,7 +3877,7 @@ } }, "node_modules/@types/babel__generator": { - "version": "7.6.5", + "version": "7.27.0", "dev": true, "license": "MIT", "dependencies": { @@ -2775,7 +3885,7 @@ } }, "node_modules/@types/babel__template": { - "version": "7.4.2", + "version": "7.4.4", "dev": true, "license": "MIT", "dependencies": { @@ -2784,39 +3894,51 @@ } }, "node_modules/@types/babel__traverse": { - "version": "7.20.2", + "version": "7.28.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.20.7" + "@babel/types": "^7.28.2" } }, "node_modules/@types/chai": { - "version": "4.3.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/cookie": { - "version": "0.4.1", + "version": "4.3.20", "dev": true, "license": "MIT" }, "node_modules/@types/cors": { - "version": "2.8.13", + "version": "2.8.19", "dev": true, "license": "MIT", "dependencies": { "@types/node": "*" } }, + "node_modules/@types/eslint": { + "version": "9.6.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/eslint-scope": { + "version": "3.7.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint": "*", + "@types/estree": "*" + } + }, "node_modules/@types/estree": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", - "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", - "dev": true + "version": "1.0.8", + "dev": true, + "license": "MIT" }, "node_modules/@types/graceful-fs": { - "version": "4.1.7", + "version": "4.1.9", "dev": true, "license": "MIT", "dependencies": { @@ -2828,17 +3950,18 @@ "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/unist": "*" } }, "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.4", + "version": "2.0.6", "dev": true, "license": "MIT" }, "node_modules/@types/istanbul-lib-report": { - "version": "3.0.0", + "version": "3.0.3", "dev": true, "license": "MIT", "dependencies": { @@ -2846,7 +3969,7 @@ } }, "node_modules/@types/istanbul-reports": { - "version": "3.0.1", + "version": "3.0.4", "dev": true, "license": "MIT", "dependencies": { @@ -2854,7 +3977,7 @@ } }, "node_modules/@types/jest": { - "version": "29.5.12", + "version": "29.5.14", "dev": true, "license": "MIT", "dependencies": { @@ -2862,8 +3985,25 @@ "pretty-format": "^29.0.0" } }, + "node_modules/@types/jest/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/@types/json-schema": { - "version": "7.0.12", + "version": "7.0.15", "dev": true, "license": "MIT" }, @@ -2873,56 +4013,43 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.12", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.12.tgz", - "integrity": "sha512-sviUmCE8AYdaF/KIHLDJBQgeYzPBI0vf/17NaYehBJfYD1j6/L95Slh07NlyK2iNyBNaEkb3En2jRt+a8y3xZQ==", - "dev": true - }, - "node_modules/@types/mdast": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/@types/mdast/-/mdast-4.0.4.tgz", - "integrity": "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", "dev": true, - "dependencies": { - "@types/unist": "*" - } + "license": "MIT" }, "node_modules/@types/minimatch": { "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true, "license": "MIT" }, "node_modules/@types/minimist": { - "version": "1.2.2", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", "dev": true, "license": "MIT" }, "node_modules/@types/node": { - "version": "18.19.39", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.19.39.tgz", - "integrity": "sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ==", + "version": "18.19.121", "dev": true, + "license": "MIT", "dependencies": { "undici-types": "~5.26.4" } }, "node_modules/@types/normalize-package-data": { - "version": "2.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.4", + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", + "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true, "license": "MIT" }, "node_modules/@types/stack-utils": { - "version": "2.0.1", + "version": "2.0.3", "dev": true, "license": "MIT" }, @@ -2930,10 +4057,11 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/ws": { - "version": "8.5.10", + "version": "8.18.1", "dev": true, "license": "MIT", "dependencies": { @@ -2941,7 +4069,7 @@ } }, "node_modules/@types/yargs": { - "version": "17.0.24", + "version": "17.0.33", "dev": true, "license": "MIT", "dependencies": { @@ -2949,117 +4077,164 @@ } }, "node_modules/@types/yargs-parser": { - "version": "21.0.0", + "version": "21.0.3", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.52.0.tgz", + "integrity": "sha512-okqtOgqu2qmZJ5iN4TWlgfF171dZmx2FzdOv2K/ixL2LZWDStL8+JgQerI2sa8eAEfoydG9+0V96m7V+P8yE1Q==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/type-utils": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@typescript-eslint/parser": "^8.52.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/eslint-plugin/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" } }, "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.52.0.tgz", + "integrity": "sha512-iIACsx8pxRnguSYhHiMn2PvhvfpopO9FXHyn1mG5txZIsAaB6F0KwbFnUQN3KCiG3Jcuad/Cao2FAs1Wp7vAyg==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/@typescript-eslint/project-service": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.52.0.tgz", + "integrity": "sha512-xD0MfdSdEmeFa3OmVqonHi+Cciab96ls1UhIF/qX/O/gPu5KXD0bY9lu33jj04fjzrXHcuvjBcBC+D3SNSadaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/tsconfig-utils": "^8.52.0", + "@typescript-eslint/types": "^8.52.0", + "debug": "^4.4.3" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.52.0.tgz", + "integrity": "sha512-ixxqmmCcc1Nf8S0mS0TkJ/3LKcC8mruYJPOU6Ia2F/zUUR4pApW7LzrpU3JmtePbRUTes9bEqRc1Gg4iyRnDzA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.52.0.tgz", + "integrity": "sha512-jl+8fzr/SdzdxWJznq5nvoI7qn2tNYV/ZBAEcaFMVXf+K6jmXvAFrgo/+5rxgnL152f//pDEAYAhhBAZGrVfwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.52.0.tgz", + "integrity": "sha512-JD3wKBRWglYRQkAtsyGz1AewDu3mTc7NtRjR/ceTyGoPqmdS5oCdx/oZMWD5Zuqmo6/MpsYs0wp6axNt88/2EQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0", + "debug": "^4.4.3", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.52.0.tgz", + "integrity": "sha512-LWQV1V4q9V4cT4H5JCIx3481iIFxH1UkVk+ZkGGAV1ZGcjGI9IoFOfg3O6ywz8QqCDEp7Inlg6kovMofsNRaGg==", "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3067,129 +4242,407 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.52.0.tgz", + "integrity": "sha512-XP3LClsCc0FsTK5/frGjolyADTh3QmsLp6nKd476xNI9CsSsLnmn4f0jrzNoAulmxlmNIpeXuHYeEQv61Q6qeQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "@typescript-eslint/project-service": "8.52.0", + "@typescript-eslint/tsconfig-utils": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/visitor-keys": "8.52.0", + "debug": "^4.4.3", + "minimatch": "^9.0.5", + "semver": "^7.7.3", + "tinyglobby": "^0.2.15", + "ts-api-utils": "^2.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.52.0.tgz", + "integrity": "sha512-wYndVMWkweqHpEpwPhwqE2lnD2DxC6WVLupU/DOt/0/v+/+iQbbzO3jOHjmBMnhu0DgLULvOaU4h4pwHYi2oRQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "@eslint-community/eslint-utils": "^4.9.1", + "@typescript-eslint/scope-manager": "8.52.0", + "@typescript-eslint/types": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.52.0.tgz", + "integrity": "sha512-ink3/Zofus34nmBsPjow63FP5M7IGff0RKAgqR6+CFpdk22M7aLwC9gOcLGYqr7MczLPzZVERW9hRog3O4n1sQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "8.52.0", + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, - "license": "ISC" + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-android-arm-eabi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm-eabi/-/resolver-binding-android-arm-eabi-1.11.1.tgz", + "integrity": "sha512-ppLRUgHVaGRWUx0R0Ut06Mjo9gBaBkg3v/8AxusGLhsIotbBLuRk51rAzqLC8gq6NyyAojEXglNjzf6R948DNw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-android-arm64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-android-arm64/-/resolver-binding-android-arm64-1.11.1.tgz", + "integrity": "sha512-lCxkVtb4wp1v+EoN+HjIG9cIIzPkX5OtM03pQYkG+U5O/wL53LC4QbIeazgiKqluGeVEeBlZahHalCaBvU1a2g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.11.1", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.11.1.tgz", + "integrity": "sha512-cFzP7rWKd3lZaCsDze07QX1SC24lO8mPty9vdP+YVa3MGdVgPmFc59317b2ioXtgCMKGiCLxJ4HQs62oz6GfRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.11.1.tgz", + "integrity": "sha512-fqtGgak3zX4DCB6PFpsH5+Kmt/8CIi4Bry4rb1ho6Av2QHTREM+47y282Uqiu3ZRF5IQioJQ5qWRV6jduA+iGw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.11.1.tgz", + "integrity": "sha512-u92mvlcYtp9MRKmP+ZvMmtPN34+/3lMHlyMj7wXJDeXxuM0Vgzz0+PPJNsro1m3IZPYChIkn944wW8TYgGKFHw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.11.1.tgz", + "integrity": "sha512-cINaoY2z7LVCrfHkIcmvj7osTOtm6VVT16b5oQdS4beibX2SYBwgYLmqhBjA1t51CarSaBuX5YNsWLjsqfW5Cw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.11.1.tgz", + "integrity": "sha512-34gw7PjDGB9JgePJEmhEqBhWvCiiWCuXsL9hYphDF7crW7UgI05gyBAi6MF58uGcMOiOqSJ2ybEeCvHcq0BCmQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.11.1.tgz", + "integrity": "sha512-RyMIx6Uf53hhOtJDIamSbTskA99sPHS96wxVE/bJtePJJtpdKGXO1wY90oRdXuYOGOTuqjT8ACccMc4K6QmT3w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.11.1.tgz", + "integrity": "sha512-D8Vae74A4/a+mZH0FbOkFJL9DSK2R6TFPC9M+jCWYia/q2einCubX10pecpDiTmkJVUH+y8K3BZClycD8nCShA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-gnu/-/resolver-binding-linux-riscv64-gnu-1.11.1.tgz", + "integrity": "sha512-frxL4OrzOWVVsOc96+V3aqTIQl1O2TjgExV4EKgRY09AJ9leZpEg8Ak9phadbuX0BA4k8U5qtvMSQQGGmaJqcQ==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-riscv64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-riscv64-musl/-/resolver-binding-linux-riscv64-musl-1.11.1.tgz", + "integrity": "sha512-mJ5vuDaIZ+l/acv01sHoXfpnyrNKOk/3aDoEdLO/Xtn9HuZlDD6jKxHlkN8ZhWyLJsRBxfv9GYM2utQ1SChKew==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.11.1.tgz", + "integrity": "sha512-kELo8ebBVtb9sA7rMe1Cph4QHreByhaZ2QEADd9NzIQsYNQpt9UkM9iqr2lhGr5afh885d/cB5QeTXSbZHTYPg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.11.1.tgz", + "integrity": "sha512-C3ZAHugKgovV5YvAMsxhq0gtXuwESUKc5MhEtjBpLoHPLYM+iuwSj3lflFwK3DPm68660rZ7G8BMcwSro7hD5w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.11.1.tgz", + "integrity": "sha512-rV0YSoyhK2nZ4vEswT/QwqzqQXw5I6CjoaYMOX0TqBlWhojUf8P94mvI7nuJTeaCkkds3QE4+zS8Ko+GdXuZtA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.11.1.tgz", + "integrity": "sha512-5u4RkfxJm+Ng7IWgkzi3qrFOvLvQYnPBmjmZQ8+szTK/b31fQCnleNl1GgEt7nIsZRIf5PLhPwT0WM+q45x/UQ==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.11" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.11.1.tgz", + "integrity": "sha512-nRcz5Il4ln0kMhfL8S3hLkxI85BXs3o8EYoattsJNdsX4YUU89iOkVn7g0VHSRxFuVMdM4Q1jEpIId1Ihim/Uw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.11.1.tgz", + "integrity": "sha512-DCEI6t5i1NmAZp6pFonpD5m7i6aFrpofcp4LA2i8IIq60Jyo28hamKBxNrZcyOwVOZkgsRp9O2sXWBWP8MnvIQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.11.1.tgz", + "integrity": "sha512-lrW200hZdbfRtztbygyaq/6jP6AKE8qQN2KvPcJ+x7wiD038YtnYtZ82IMNJ69GJibV7bwL3y9FgK+5w/pYt6g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, "node_modules/@webassemblyjs/ast": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "@webassemblyjs/helper-numbers": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2" } }, "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/floating-point-hex-parser": "1.13.2", + "@webassemblyjs/helper-api-error": "1.13.2", "@xtuc/long": "4.2.2" } }, "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/wasm-gen": "1.14.1" } }, "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT", "dependencies": { @@ -3197,7 +4650,7 @@ } }, "node_modules/@webassemblyjs/leb128": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -3205,104 +4658,104 @@ } }, "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", + "version": "1.13.2", "dev": true, "license": "MIT" }, "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-opt": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1", - "@webassemblyjs/wast-printer": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/helper-wasm-section": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-opt": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1", + "@webassemblyjs/wast-printer": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-buffer": "1.12.1", - "@webassemblyjs/wasm-gen": "1.12.1", - "@webassemblyjs/wasm-parser": "1.12.1" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-buffer": "1.14.1", + "@webassemblyjs/wasm-gen": "1.14.1", + "@webassemblyjs/wasm-parser": "1.14.1" } }, "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "@webassemblyjs/ast": "1.14.1", + "@webassemblyjs/helper-api-error": "1.13.2", + "@webassemblyjs/helper-wasm-bytecode": "1.13.2", + "@webassemblyjs/ieee754": "1.13.2", + "@webassemblyjs/leb128": "1.13.2", + "@webassemblyjs/utf8": "1.13.2" } }, "node_modules/@webassemblyjs/wast-printer": { - "version": "1.12.1", + "version": "1.14.1", "dev": true, "license": "MIT", "dependencies": { - "@webassemblyjs/ast": "1.12.1", + "@webassemblyjs/ast": "1.14.1", "@xtuc/long": "4.2.2" } }, "node_modules/@webpack-cli/configtest": { - "version": "2.1.1", + "version": "3.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/info": { - "version": "2.0.2", + "version": "3.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" } }, "node_modules/@webpack-cli/serve": { - "version": "2.0.5", + "version": "3.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "peerDependencies": { - "webpack": "5.x.x", - "webpack-cli": "5.x.x" + "webpack": "^5.82.0", + "webpack-cli": "6.x.x" }, "peerDependenciesMeta": { "webpack-dev-server": { @@ -3311,27 +4764,38 @@ } }, "node_modules/@xrplf/eslint-config": { - "version": "1.10.1", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@xrplf/eslint-config/-/eslint-config-3.0.0.tgz", + "integrity": "sha512-bLeLS2RYrnu3tcY7YYPXJ4fPkS308waojnvzOnI/gB1ysw+BdOSBL/7CexD3tb+En8dvxn9wI5OAiUzoaQcOqw==", "dev": true, "license": "ISC", "dependencies": { - "confusing-browser-globals": "^1.0.11", - "eslint-config-airbnb": "^19.0.4", - "eslint-config-prettier": "^8.8.0" + "confusing-browser-globals": "^1.0.11" + }, + "engines": { + "node": "^20.11.0 || >=21.1.0", + "npm": ">= 8.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", - "eslint": "^8.18.0", - "eslint-plugin-array-func": "^3.1.7", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.3 || ^40.0.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.0.0", - "eslint-plugin-tsdoc": "^0.2.16", - "prettier": "^2.7.1", - "typescript": "^3.9.10 || ^4.0.0 || ^5.0.0" + "@eslint-community/eslint-plugin-eslint-comments": "^4.0.0", + "@eslint/eslintrc": "^3.0.0", + "@eslint/js": "^9.0.0", + "eslint": "^9.0.0", + "eslint-config-prettier": "^10.0.0", + "eslint-import-resolver-typescript": "^4.0.0", + "eslint-plugin-array-func": "^5.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^52.0.0", + "eslint-plugin-jsx-a11y": "^6.0.0", + "eslint-plugin-n": "^17.0.0", + "eslint-plugin-prettier": "^5.0.0", + "eslint-plugin-react": "^7.0.0", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-tsdoc": "^0.5.0", + "globals": "^16.0.0", + "prettier": "^3.0.0", + "typescript": ">=4.8.4", + "typescript-eslint": "^8.0.0" } }, "node_modules/@xrplf/isomorphic": { @@ -3340,6 +4804,8 @@ }, "node_modules/@xrplf/prettier-config": { "version": "1.9.1", + "resolved": "https://registry.npmjs.org/@xrplf/prettier-config/-/prettier-config-1.9.1.tgz", + "integrity": "sha512-1k4WCTstvGiTJQYUNTZhz4BM2DI/kVBRXh1Dw5fVaVDiGVb4YOuzxFNgipOWX/EllrjRTN5NNGLJEDk0nsMFEg==", "dev": true, "license": "ISC" }, @@ -3357,10 +4823,73 @@ "dev": true, "license": "Apache-2.0" }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/@yarnpkg/parsers": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@yarnpkg/parsers/-/parsers-3.0.2.tgz", + "integrity": "sha512-/HcYgtUSiJiot/XWGLOlGxPYUG65+/31V8oqk17vZLW1xlCoR4PampyePljOxY2n8/3jz9+tIFzICsyGujJZoA==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" + }, + "engines": { + "node": ">=18.12.0" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@zkochan/js-yaml": { + "version": "0.0.7", + "resolved": "https://registry.npmjs.org/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz", + "integrity": "sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/abbrev": { - "version": "1.1.1", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-3.0.1.tgz", + "integrity": "sha512-AO2ac6pjRB3SJmGJo+v5/aK6Omggp6fsLrs6wN9bd35ulu4cCwaAU9+7ZhXjeqHVkaHThLuzH0nZr0YpCDhygg==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, "node_modules/accepts": { "version": "1.3.8", @@ -3374,8 +4903,16 @@ "node": ">= 0.6" } }, + "node_modules/accepts/node_modules/negotiator": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, "node_modules/acorn": { - "version": "8.10.0", + "version": "8.15.0", "dev": true, "license": "MIT", "bin": { @@ -3385,13 +4922,15 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-import-attributes": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.5.tgz", - "integrity": "sha512-n02Vykv5uA3eHGM/Z2dQrcD56kL8TyDb2p1+0P83PClMnC/nc+anbQRhIOWnSq4Ke/KvDPrY3C9hDtC/A3eHnQ==", + "node_modules/acorn-import-phases": { + "version": "1.0.4", "dev": true, + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, "peerDependencies": { - "acorn": "^8" + "acorn": "^8.14.0" } }, "node_modules/acorn-jsx": { @@ -3403,42 +4942,37 @@ } }, "node_modules/acorn-walk": { - "version": "8.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/add-stream": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/agent-base": { - "version": "6.0.2", + "version": "8.3.4", "dev": true, "license": "MIT", "dependencies": { - "debug": "4" + "acorn": "^8.11.0" }, "engines": { - "node": ">= 6.0.0" + "node": ">=0.4.0" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", "dev": true, "license": "MIT", - "dependencies": { - "humanize-ms": "^1.2.1" - }, "engines": { - "node": ">= 8.0.0" + "node": ">= 14" } }, "node_modules/aggregate-error": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", "dev": true, "license": "MIT", "dependencies": { @@ -3464,34 +4998,67 @@ "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ajv-keywords": { - "version": "3.5.2", + "node_modules/ajv-formats": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ajv-formats/-/ajv-formats-2.1.1.tgz", + "integrity": "sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==", "dev": true, "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, "peerDependencies": { - "ajv": "^6.9.1" + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } } }, - "node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/ajv-formats/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/ansi-escapes/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/ajv-formats/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT" + }, + "node_modules/ansi-colors": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.3.tgz", + "integrity": "sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3533,48 +5100,17 @@ }, "node_modules/aproba": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", "dev": true, "license": "ISC" }, - "node_modules/are-we-there-yet": { - "version": "1.1.7", - "dev": true, - "license": "ISC", - "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^2.0.6" - } - }, - "node_modules/are-we-there-yet/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/are-we-there-yet/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/are-we-there-yet/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/are-we-there-yet/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/are-docs-informative": { + "version": "0.0.2", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=14" } }, "node_modules/arg": { @@ -3588,22 +5124,21 @@ "license": "Python-2.0" }, "node_modules/aria-query": { - "version": "5.3.0", + "version": "5.3.2", "dev": true, "license": "Apache-2.0", "peer": true, - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/array-buffer-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz", - "integrity": "sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "is-array-buffer": "^3.0.4" + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" }, "engines": { "node": ">= 0.4" @@ -3614,6 +5149,8 @@ }, "node_modules/array-differ": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", "dev": true, "license": "MIT", "engines": { @@ -3622,21 +5159,24 @@ }, "node_modules/array-ify": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", "dev": true, "license": "MIT" }, "node_modules/array-includes": { - "version": "3.1.8", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.8.tgz", - "integrity": "sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==", + "version": "3.1.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.2", - "es-object-atoms": "^1.0.0", - "get-intrinsic": "^1.2.4", - "is-string": "^1.0.7" + "es-abstract": "^1.24.0", + "es-object-atoms": "^1.1.1", + "get-intrinsic": "^1.3.0", + "is-string": "^1.1.1", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3647,17 +5187,19 @@ }, "node_modules/array-union": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { + "node_modules/array.prototype.findlast": { "version": "1.2.5", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz", - "integrity": "sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -3673,15 +5215,18 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", + "node_modules/array.prototype.findlastindex": { + "version": "1.2.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-shim-unscopables": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3690,15 +5235,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "node_modules/array.prototype.flat": { + "version": "1.3.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3707,16 +5252,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array.prototype.reduce": { - "version": "1.0.6", + "node_modules/array.prototype.flatmap": { + "version": "1.3.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -3726,32 +5270,33 @@ } }, "node_modules/array.prototype.tosorted": { - "version": "1.1.1", + "version": "1.1.4", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -3762,80 +5307,46 @@ }, "node_modules/arrify": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/asap": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/asn1": { - "version": "0.2.6", - "dev": true, - "license": "MIT", - "dependencies": { - "safer-buffer": "~2.1.0" - } - }, - "node_modules/assert-plus": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/ast-types-flow": { - "version": "0.0.7", + "version": "0.0.8", "dev": true, - "license": "ISC", + "license": "MIT", "peer": true }, "node_modules/async": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", - "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", - "dev": true + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.6.tgz", + "integrity": "sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==", + "dev": true, + "license": "MIT" }, - "node_modules/asynciterator.prototype": { + "node_modules/async-function": { "version": "1.0.0", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "has-symbols": "^1.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/asynckit": { "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, "license": "MIT" }, - "node_modules/at-least-node": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/available-typed-arrays": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", - "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", "dev": true, + "license": "MIT", "dependencies": { "possible-typed-array-names": "^1.0.0" }, @@ -3846,21 +5357,8 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/aws-sign2": { - "version": "0.7.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "*" - } - }, - "node_modules/aws4": { - "version": "1.12.0", - "dev": true, - "license": "MIT" - }, "node_modules/axe-core": { - "version": "4.7.2", + "version": "4.10.3", "dev": true, "license": "MPL-2.0", "peer": true, @@ -3868,13 +5366,25 @@ "node": ">=4" } }, + "node_modules/axios": { + "version": "1.13.6", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.6.tgz", + "integrity": "sha512-ChTCHMouEe2kn713WHbQGcuYrr6fXTBiu460OTwWrWob16g1bXn4vtz07Ope7ewMozJAnEquLk5lWQWtBig9DQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.11", + "form-data": "^4.0.5", + "proxy-from-env": "^1.1.0" + } + }, "node_modules/axobject-query": { - "version": "3.2.1", + "version": "4.1.0", "dev": true, "license": "Apache-2.0", "peer": true, - "dependencies": { - "dequal": "^2.0.3" + "engines": { + "node": ">= 0.4" } }, "node_modules/babel-jest": { @@ -3950,25 +5460,28 @@ } }, "node_modules/babel-preset-current-node-syntax": { - "version": "1.0.1", + "version": "1.2.0", "dev": true, "license": "MIT", "dependencies": { "@babel/plugin-syntax-async-generators": "^7.8.4", "@babel/plugin-syntax-bigint": "^7.8.3", - "@babel/plugin-syntax-class-properties": "^7.8.3", - "@babel/plugin-syntax-import-meta": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", "@babel/plugin-syntax-json-strings": "^7.8.3", - "@babel/plugin-syntax-logical-assignment-operators": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", - "@babel/plugin-syntax-numeric-separator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", "@babel/plugin-syntax-optional-chaining": "^7.8.3", - "@babel/plugin-syntax-top-level-await": "^7.8.3" + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" }, "peerDependencies": { - "@babel/core": "^7.0.0" + "@babel/core": "^7.0.0 || ^8.0.0-0" } }, "node_modules/babel-preset-jest": { @@ -3991,6 +5504,27 @@ "dev": true, "license": "MIT" }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, "node_modules/base64id": { "version": "2.0.0", "dev": true, @@ -3999,36 +5533,121 @@ "node": "^4.5.0 || >= 5.9" } }, - "node_modules/bcrypt-pbkdf": { - "version": "1.0.2", + "node_modules/baseline-browser-mapping": { + "version": "2.9.12", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.12.tgz", + "integrity": "sha512-Mij6Lij93pTAIsSYy5cyBQ975Qh9uLEc5rwGTpomiZeXZL9yIS6uORJakb3ScHgfs0serMMfIbXzokPMuEiRyw==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "tweetnacl": "^0.14.3" + "license": "Apache-2.0", + "bin": { + "baseline-browser-mapping": "dist/cli.js" } }, "node_modules/before-after-hook": { "version": "2.2.3", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", + "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==", "dev": true, "license": "Apache-2.0" }, "node_modules/bignumber.js": { - "version": "9.1.2", + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.3.0.tgz", + "integrity": "sha512-EM7aMFTXbptt/wZdMlBv2t8IViwQL+h6SLHosp8Yf0dqJMTnY6iL32opnAB6kAdL0SZPuvcAzFr31o0c/R3/RA==", "license": "MIT", "engines": { - "node": "*" + "node": "*" + } + }, + "node_modules/bin-links": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/bin-links/-/bin-links-5.0.0.tgz", + "integrity": "sha512-sdleLVfCjBtgO5cNjA2HVRvWBJAHs4zwenaCPMNJAJU0yNxpzj80IpjOIimkpkr+mhlA+how5poQtt53PygbHA==", + "dev": true, + "license": "ISC", + "dependencies": { + "cmd-shim": "^7.0.0", + "npm-normalize-package-bin": "^4.0.0", + "proc-log": "^5.0.0", + "read-cmd-shim": "^5.0.0", + "write-file-atomic": "^6.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/bin-links/node_modules/cmd-shim": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-7.0.0.tgz", + "integrity": "sha512-rtpaCbr164TPPh+zFdkWpCyZuKkjpAzODfaZCf/SVJZzJN+4bHQb/LP3Jzq5/+84um3XXY8r548XiWKSborwVw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/bin-links/node_modules/read-cmd-shim": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-5.0.0.tgz", + "integrity": "sha512-SEbJV7tohp3DAAILbEMPXavBjAnMN0tVnh4+9G8ihV4Pq3HYF9h8QNez9zkJ1ILkv9G2BjdzwctznGZXgu/HGw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/bin-links/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/bin-links/node_modules/write-file-atomic": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-6.0.0.tgz", + "integrity": "sha512-GmqrO8WJ1NuzJ2DrziEI2o57jKAVIQNf8a18W3nCYU3H7PNWqCCVTeH6/NQE93CIllIgQS98rrmVkYgTX9fFJQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/binary-extensions": { - "version": "2.2.0", + "version": "2.3.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, "node_modules/body-parser": { - "version": "1.20.2", + "version": "1.20.3", "dev": true, "license": "MIT", "dependencies": { @@ -4040,7 +5659,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -4064,11 +5683,11 @@ "license": "MIT" }, "node_modules/body-parser/node_modules/qs": { - "version": "6.11.0", + "version": "6.13.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -4078,27 +5697,28 @@ } }, "node_modules/brace-expansion": { - "version": "1.1.11", + "version": "2.0.2", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "balanced-match": "^1.0.0" } }, "node_modules/braces": { - "version": "3.0.2", + "version": "3.0.3", "dev": true, "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.3", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -4116,10 +5736,11 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", + "node-releases": "^2.0.27", + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -4147,30 +5768,44 @@ "node-int64": "^0.4.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", + "node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", "dev": true, - "license": "MIT" + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } }, - "node_modules/builtins": { - "version": "1.0.3", + "node_modules/buffer-from": { + "version": "1.1.2", "dev": true, "license": "MIT" }, - "node_modules/byline": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/byte-size": { - "version": "7.0.1", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/byte-size/-/byte-size-8.1.1.tgz", + "integrity": "sha512-tUkzZWK0M/qdoLEqikxBWe4kumyuwjl3HO6zHTr4yEI23EojPtLYXdG1+AQY7MN0cGyNDvEaJ8wiYQm6P2bPxg==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12.17" } }, "node_modules/bytes": { @@ -4182,60 +5817,173 @@ } }, "node_modules/cacache": { - "version": "15.3.0", + "version": "20.0.3", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-20.0.3.tgz", + "integrity": "sha512-3pUp4e8hv07k1QlijZu6Kn7c9+ZpWWk4j3F8N3xPuCExULobqJydKYOTj1FTq58srkJsXvO7LbGAH4C0ZU3WGw==", "dev": true, "license": "ISC", "dependencies": { - "@npmcli/fs": "^1.0.0", - "@npmcli/move-file": "^1.0.1", - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "glob": "^7.1.4", - "infer-owner": "^1.0.4", - "lru-cache": "^6.0.0", - "minipass": "^3.1.1", - "minipass-collect": "^1.0.2", + "@npmcli/fs": "^5.0.0", + "fs-minipass": "^3.0.0", + "glob": "^13.0.0", + "lru-cache": "^11.1.0", + "minipass": "^7.0.3", + "minipass-collect": "^2.0.1", "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.2", - "mkdirp": "^1.0.3", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.0.2", - "unique-filename": "^1.1.1" + "minipass-pipeline": "^1.2.4", + "p-map": "^7.0.2", + "ssri": "^13.0.0", + "unique-filename": "^5.0.0" }, "engines": { - "node": ">= 10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cacache/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/cacache/node_modules/@npmcli/fs": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@npmcli/fs/-/fs-5.0.0.tgz", + "integrity": "sha512-7OsC1gNORBEawOa5+j2pXN9vsicaIOH5cPXxoR6fJOmH6/EXpJB2CajXOu1fPRFun2m1lktEFX11+P89hqO/og==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/cacache/node_modules/yallist": { - "version": "4.0.0", + "node_modules/cacache/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", "dev": true, - "license": "ISC" + "license": "MIT", + "dependencies": { + "jackspeak": "^4.2.3" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/glob": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", + "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": "20 || >=22" + } + }, + "node_modules/cacache/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/cacache/node_modules/p-map": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-7.0.4.tgz", + "integrity": "sha512-tkAQEw8ysMzmkhgw8k+1U/iPhWNhykKnSk4Rd5zLoPJCuJaGRPo6YposrZgaxHKzDHdDWWZvE/Sk7hsL2X/CpQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cacache/node_modules/ssri": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-13.0.1.tgz", + "integrity": "sha512-QUiRf1+u9wPTL/76GTYlKttDEBWV1ga9ZXW8BG6kfdeyyM8LGPix9gROyg9V2+P0xNyF3X2Go526xKFdMZrHSQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "minipass": "^7.0.3" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -4262,6 +6010,8 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "license": "MIT", "dependencies": { @@ -4277,7 +6027,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001581", + "version": "1.0.30001762", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001762.tgz", + "integrity": "sha512-PxZwGNvH7Ak8WX5iXzoK1KPZttBXNPuaOvI2ZYU7NrlM+d9Ov+TUvlLOBNGzVXAntMSMMlJPd+jY6ovrVjSmUw==", "dev": true, "funding": [ { @@ -4295,36 +6047,14 @@ ], "license": "CC-BY-4.0" }, - "node_modules/caseless": { - "version": "0.12.0", - "dev": true, - "license": "Apache-2.0" - }, - "node_modules/ccount": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/ccount/-/ccount-2.0.1.tgz", - "integrity": "sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chai": { - "version": "4.4.1", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/chai/-/chai-6.2.2.tgz", + "integrity": "sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==", "dev": true, "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" - }, "engines": { - "node": ">=4" + "node": ">=18" } }, "node_modules/chalk": { @@ -4350,51 +6080,16 @@ "node": ">=10" } }, - "node_modules/character-entities-html4": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-2.1.0.tgz", - "integrity": "sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/character-entities-legacy": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-3.0.0.tgz", - "integrity": "sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/chardet": { - "version": "0.7.0", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/chardet/-/chardet-2.1.1.tgz", + "integrity": "sha512-PsezH1rqdV9VvyNhxxOW32/d75r01NY7TQCmOqomRo15ZSOKbpTFVsfjghxo6JloQUCGnH4k1LGu0R4yCLlWQQ==", "dev": true, "license": "MIT" }, - "node_modules/check-error": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, "node_modules/chokidar": { - "version": "3.5.3", + "version": "3.6.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", "dependencies": { "anymatch": "~3.1.2", @@ -4408,6 +6103,9 @@ "engines": { "node": ">= 8.10.0" }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, "optionalDependencies": { "fsevents": "~2.3.2" } @@ -4424,15 +6122,17 @@ } }, "node_modules/chownr": { - "version": "2.0.0", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": ">=18" } }, "node_modules/chrome-trace-event": { - "version": "1.0.3", + "version": "1.0.4", "dev": true, "license": "MIT", "engines": { @@ -4440,7 +6140,7 @@ } }, "node_modules/ci-info": { - "version": "3.8.0", + "version": "3.9.0", "dev": true, "funding": [ { @@ -4454,12 +6154,14 @@ } }, "node_modules/cjs-module-lexer": { - "version": "1.2.3", + "version": "1.4.3", "dev": true, "license": "MIT" }, "node_modules/clean-stack": { "version": "2.2.0", + "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", "dev": true, "license": "MIT", "engines": { @@ -4468,6 +6170,8 @@ }, "node_modules/cli-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "license": "MIT", "dependencies": { @@ -4477,12 +6181,27 @@ "node": ">=8" } }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/cli-width": { - "version": "3.0.0", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cli-width/-/cli-width-4.1.0.tgz", + "integrity": "sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==", "dev": true, "license": "ISC", "engines": { - "node": ">= 10" + "node": ">= 12" } }, "node_modules/cliui": { @@ -4497,6 +6216,8 @@ }, "node_modules/clone": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", "dev": true, "license": "MIT", "engines": { @@ -4528,14 +6249,13 @@ } }, "node_modules/cmd-shim": { - "version": "4.1.0", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/cmd-shim/-/cmd-shim-6.0.3.tgz", + "integrity": "sha512-FMabTRlc5t5zjdenF6mS0MBeFZm0XqHqeOkcskKFb/LYCcRQ5fVgLOHVc4Lq9CqABd9zhjwPjMBCJvMCziSVtA==", "dev": true, "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" - }, "engines": { - "node": ">=10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/co": { @@ -4547,14 +6267,6 @@ "node": ">= 0.12.0" } }, - "node_modules/code-point-at": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/collect-v8-coverage": { "version": "1.0.2", "dev": true, @@ -4576,6 +6288,16 @@ "dev": true, "license": "MIT" }, + "node_modules/color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true, + "license": "ISC", + "bin": { + "color-support": "bin.js" + } + }, "node_modules/colorette": { "version": "2.0.20", "dev": true, @@ -4583,6 +6305,8 @@ }, "node_modules/columnify": { "version": "1.6.0", + "resolved": "https://registry.npmjs.org/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", "dev": true, "license": "MIT", "dependencies": { @@ -4595,6 +6319,8 @@ }, "node_modules/combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", "dev": true, "license": "MIT", "dependencies": { @@ -4604,31 +6330,32 @@ "node": ">= 0.8" } }, - "node_modules/comma-separated-tokens": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-2.0.3.tgz", - "integrity": "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/commander": { "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true, "license": "MIT" }, "node_modules/comment-parser": { - "version": "1.3.1", + "version": "1.4.1", "dev": true, "license": "MIT", "engines": { "node": ">= 12.0.0" } }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/common-ancestor-path/-/common-ancestor-path-1.0.1.tgz", + "integrity": "sha512-L3sHRo1pXXEqX8VU28kfgUY+YGsk09hPqZiZmLacNib6XNTCM8ubYeT7ryXQw8asB1sKgcU5lkB7ONug08aB8w==", + "dev": true, + "license": "ISC" + }, "node_modules/compare-func": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "license": "MIT", "dependencies": { @@ -4636,17 +6363,6 @@ "dot-prop": "^5.1.0" } }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/concat-map": { "version": "0.0.1", "dev": true, @@ -4654,6 +6370,8 @@ }, "node_modules/concat-stream": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "dev": true, "engines": [ "node >= 6.0" @@ -4666,15 +6384,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, "node_modules/confusing-browser-globals": { "version": "1.0.11", "dev": true, @@ -4709,6 +6418,8 @@ }, "node_modules/console-control-strings": { "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true, "license": "ISC" }, @@ -4721,153 +6432,126 @@ } }, "node_modules/conventional-changelog-angular": { - "version": "5.0.13", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-7.0.0.tgz", + "integrity": "sha512-ROjNchA9LgfNMTTFSIWPzebCwOGFdgkEq45EnvvrmSLvCtAw0HSmrCs7/ty+wAeYUZyNay0YMUNYFTRL72PkBQ==", "dev": true, "license": "ISC", "dependencies": { - "compare-func": "^2.0.0", - "q": "^1.5.1" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/conventional-changelog-core": { - "version": "4.2.4", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-core/-/conventional-changelog-core-5.0.1.tgz", + "integrity": "sha512-Rvi5pH+LvgsqGwZPZ3Cq/tz4ty7mjijhr3qR4m9IBXNbxGGYgTVVO+duXzz9aArmHxFtwZ+LRkrNIMDQzgoY4A==", "dev": true, "license": "MIT", "dependencies": { "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", + "conventional-changelog-writer": "^6.0.0", + "conventional-commits-parser": "^4.0.0", + "dateformat": "^3.0.3", + "get-pkg-repo": "^4.2.1", + "git-raw-commits": "^3.0.0", "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", + "git-semver-tags": "^5.0.0", + "normalize-package-data": "^3.0.3", "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "read-pkg-up": "^3.0.0" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-core/node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" + "node": ">=14" } }, "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-3.0.0.tgz", + "integrity": "sha512-qy9XbdSLmVnwnvzEisjxdDiLA4OmV3o8db+Zdg4WiFw14fP3B6XNz98X0swPPpkTd/pc1K7+adKgEDM1JCUMiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/conventional-changelog-writer": { - "version": "5.0.1", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-6.0.1.tgz", + "integrity": "sha512-359t9aHorPw+U+nHzUXHS5ZnPBOizRxfQsWT5ZDHBfvfxQOAik+yfuhKXG66CN5LEWPpMNnIMHUTCKeYNprvHQ==", "dev": true, "license": "MIT", "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "dateformat": "^3.0.3", "handlebars": "^4.7.7", "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" + "meow": "^8.1.2", + "semver": "^7.0.0", + "split": "^1.0.1" }, "bin": { "conventional-changelog-writer": "cli.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/conventional-changelog-writer/node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" + "node": ">=14" } }, "node_modules/conventional-commits-filter": { - "version": "2.0.7", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-3.0.0.tgz", + "integrity": "sha512-1ymej8b5LouPx9Ox0Dw/qAO2dVdfpRFq28e5Y0jJEU8ZrLdy0vOSkkIInwmxErFGhg6SALro60ZrwYFVTUDo4Q==", "dev": true, "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" + "modify-values": "^1.0.1" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/conventional-commits-parser": { - "version": "3.2.4", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz", + "integrity": "sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==", "dev": true, "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" }, "bin": { "conventional-commits-parser": "cli.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/conventional-commits-parser/node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" + "node": ">=14" } }, "node_modules/conventional-recommended-bump": { - "version": "6.1.0", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/conventional-recommended-bump/-/conventional-recommended-bump-7.0.1.tgz", + "integrity": "sha512-Ft79FF4SlOFvX4PkwFDRnaNiIVX7YbmqGU0RwccUaiGvgp3S0a8ipR2/Qxk31vclDNM+GSdJOVs2KrsUCjblVA==", "dev": true, "license": "MIT", "dependencies": { "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" + "conventional-changelog-preset-loader": "^3.0.0", + "conventional-commits-filter": "^3.0.0", + "conventional-commits-parser": "^4.0.0", + "git-raw-commits": "^3.0.0", + "git-semver-tags": "^5.0.0", + "meow": "^8.1.2" }, "bin": { "conventional-recommended-bump": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=14" } }, "node_modules/convert-source-map": { @@ -4876,7 +6560,7 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.4.2", + "version": "0.7.2", "dev": true, "license": "MIT", "engines": { @@ -4901,6 +6585,28 @@ "copyup": "copyfiles" } }, + "node_modules/copyfiles/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/copyfiles/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/core-util-is": { "version": "1.0.2", "dev": true, @@ -4919,18 +6625,30 @@ } }, "node_modules/cosmiconfig": { - "version": "7.1.0", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "license": "MIT", "dependencies": { - "@types/parse-json": "^4.0.0", - "import-fresh": "^3.2.1", - "parse-json": "^5.0.0", - "path-type": "^4.0.0", - "yaml": "^1.10.0" + "env-paths": "^2.2.1", + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/create-jest": { @@ -4959,7 +6677,7 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.3", + "version": "7.0.6", "dev": true, "license": "MIT", "dependencies": { @@ -4971,6 +6689,19 @@ "node": ">= 8" } }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "license": "MIT", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/custom-event": { "version": "1.0.1", "dev": true, @@ -4984,32 +6715,22 @@ }, "node_modules/dargs": { "version": "7.0.0", + "resolved": "https://registry.npmjs.org/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/dashdash": { - "version": "1.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0" - }, - "engines": { - "node": ">=0.10" - } - }, "node_modules/data-view-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.1.tgz", - "integrity": "sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -5019,29 +6740,27 @@ } }, "node_modules/data-view-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz", - "integrity": "sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" + "is-data-view": "^1.0.2" }, "engines": { "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/inspect-js" } }, "node_modules/data-view-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz", - "integrity": "sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==", + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", "is-data-view": "^1.0.1" }, @@ -5062,6 +6781,8 @@ }, "node_modules/dateformat": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, "license": "MIT", "engines": { @@ -5074,11 +6795,13 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.4", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", "dev": true, "license": "MIT", "dependencies": { - "ms": "2.1.2" + "ms": "^2.1.3" }, "engines": { "node": ">=6.0" @@ -5089,16 +6812,10 @@ } } }, - "node_modules/debuglog": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/decamelize": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", "dev": true, "license": "MIT", "engines": { @@ -5107,6 +6824,8 @@ }, "node_modules/decamelize-keys": { "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "dev": true, "license": "MIT", "dependencies": { @@ -5122,22 +6841,16 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/decode-uri-component": { - "version": "0.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10" - } - }, "node_modules/dedent": { - "version": "1.5.1", + "version": "1.6.0", "dev": true, "license": "MIT", "peerDependencies": { @@ -5149,17 +6862,6 @@ } } }, - "node_modules/deep-eql": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/deep-is": { "version": "0.1.4", "dev": true, @@ -5175,6 +6877,8 @@ }, "node_modules/defaults": { "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "license": "MIT", "dependencies": { @@ -5186,9 +6890,8 @@ }, "node_modules/define-data-property": { "version": "1.1.4", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", - "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0", "es-errors": "^1.3.0", @@ -5201,11 +6904,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz", + "integrity": "sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/define-properties": { "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.0.1", "has-property-descriptors": "^1.0.0", @@ -5220,17 +6932,14 @@ }, "node_modules/delayed-stream": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.4.0" } }, - "node_modules/delegates": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/depd": { "version": "2.0.0", "dev": true, @@ -5241,17 +6950,11 @@ }, "node_modules/deprecation": { "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true, "license": "ISC" }, - "node_modules/dequal": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/destroy": { "version": "1.2.0", "dev": true, @@ -5262,11 +6965,13 @@ } }, "node_modules/detect-indent": { - "version": "6.1.0", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/detect-newline": { @@ -5277,28 +6982,6 @@ "node": ">=8" } }, - "node_modules/devlop": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/devlop/-/devlop-1.1.0.tgz", - "integrity": "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==", - "dev": true, - "dependencies": { - "dequal": "^2.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/dezalgo": { - "version": "1.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" - } - }, "node_modules/di": { "version": "0.0.1", "dev": true, @@ -5320,26 +7003,15 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { - "version": "3.0.0", + "version": "2.1.0", "dev": true, "license": "Apache-2.0", "dependencies": { "esutils": "^2.0.2" }, "engines": { - "node": ">=6.0.0" + "node": ">=0.10.0" } }, "node_modules/dom-serialize": { @@ -5354,31 +7026,58 @@ } }, "node_modules/dot-prop": { - "version": "6.0.1", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "16.4.7", + "resolved": "https://registry.npmjs.org/dotenv/-/dotenv-16.4.7.tgz", + "integrity": "sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://dotenvx.com" } }, - "node_modules/duplexer": { - "version": "0.1.2", + "node_modules/dotenv-expand": { + "version": "11.0.7", + "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-11.0.7.tgz", + "integrity": "sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA==", "dev": true, - "license": "MIT" + "license": "BSD-2-Clause", + "dependencies": { + "dotenv": "^16.4.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } }, - "node_modules/ecc-jsbn": { - "version": "0.1.2", + "node_modules/dunder-proto": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/ee-first": { @@ -5391,6 +7090,7 @@ "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "jake": "^10.8.5" }, @@ -5402,7 +7102,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.648", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -5433,6 +7135,8 @@ }, "node_modules/encoding": { "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", "dev": true, "license": "MIT", "optional": true, @@ -5442,6 +7146,8 @@ }, "node_modules/encoding/node_modules/iconv-lite": { "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", "dev": true, "license": "MIT", "optional": true, @@ -5452,36 +7158,61 @@ "node": ">=0.10.0" } }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "dev": true, + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, "node_modules/engine.io": { - "version": "6.5.2", + "version": "6.6.4", "dev": true, "license": "MIT", "dependencies": { - "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "engines": { "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.2.1", + "version": "5.2.3", "dev": true, "license": "MIT", "engines": { "node": ">=10.0.0" } }, + "node_modules/engine.io/node_modules/debug": { + "version": "4.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, "node_modules/engine.io/node_modules/ws": { - "version": "8.11.0", + "version": "8.17.1", "dev": true, "license": "MIT", "engines": { @@ -5489,7 +7220,7 @@ }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -5500,29 +7231,54 @@ } } }, - "node_modules/enhanced-resolve": { - "version": "5.17.1", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", - "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/ent": { + "version": "2.2.2", "dev": true, + "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "punycode": "^1.4.1", + "safe-regex-test": "^1.1.0" }, "engines": { - "node": ">=10.13.0" + "node": ">= 0.4" } }, - "node_modules/ent": { - "version": "2.2.0", + "node_modules/ent/node_modules/punycode": { + "version": "1.4.1", "dev": true, "license": "MIT" }, "node_modules/entities": { "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true, + "license": "BSD-2-Clause", "engines": { "node": ">=0.12" }, @@ -5532,6 +7288,8 @@ }, "node_modules/env-paths": { "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", "dev": true, "license": "MIT", "engines": { @@ -5539,7 +7297,7 @@ } }, "node_modules/envinfo": { - "version": "7.10.0", + "version": "7.14.0", "dev": true, "license": "MIT", "bin": { @@ -5551,6 +7309,8 @@ }, "node_modules/err-code": { "version": "2.0.3", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", "dev": true, "license": "MIT" }, @@ -5563,57 +7323,64 @@ } }, "node_modules/es-abstract": { - "version": "1.23.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.3.tgz", - "integrity": "sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==", + "version": "1.24.0", "dev": true, + "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "data-view-buffer": "^1.0.1", - "data-view-byte-length": "^1.0.1", - "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0", - "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", - "get-symbol-description": "^1.0.2", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", - "is-array-buffer": "^3.0.4", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", "object-keys": "^1.1.1", - "object.assign": "^4.1.5", - "regexp.prototype.flags": "^1.5.2", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", - "typed-array-buffer": "^1.0.2", - "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" }, "engines": { "node": ">= 0.4" @@ -5622,64 +7389,60 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.4" - }, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-errors": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", - "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, "node_modules/es-iterator-helpers": { - "version": "1.0.14", + "version": "1.2.1", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "asynciterator.prototype": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-set-tostringtag": "^2.0.1", - "function-bind": "^1.1.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "iterator.prototype": "^1.1.0", - "safe-array-concat": "^1.0.0" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.6", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "iterator.prototype": "^1.1.4", + "safe-array-concat": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-module-lexer": { - "version": "1.3.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/es-module-lexer/-/es-module-lexer-2.0.0.tgz", + "integrity": "sha512-5POEcUuZybH7IdmGsD8wlf0AI55wMecM9rVBTI/qEAy2c1kTOm3DjFYjrBdI2K3BaJjJYfYFeRtM0t9ssnRuxw==", "dev": true, "license": "MIT" }, "node_modules/es-object-atoms": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.0.0.tgz", - "integrity": "sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==", + "version": "1.1.1", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0" }, @@ -5688,36 +7451,38 @@ } }, "node_modules/es-set-tostringtag": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", - "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", + "version": "2.1.0", "dev": true, + "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.4", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", "has-tostringtag": "^1.0.2", - "hasown": "^2.0.1" + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" } }, "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" } }, "node_modules/es-to-primitive": { - "version": "1.2.1", + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5727,7 +7492,7 @@ } }, "node_modules/escalade": { - "version": "3.1.1", + "version": "3.2.0", "dev": true, "license": "MIT", "engines": { @@ -5751,115 +7516,114 @@ } }, "node_modules/eslint": { - "version": "8.57.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", - "integrity": "sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.21.1", + "@eslint/config-helpers": "^0.4.2", + "@eslint/core": "^0.17.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.39.2", + "@eslint/plugin-kit": "^0.4.1", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", + "eslint-scope": "^8.4.0", + "eslint-visitor-keys": "^4.2.1", + "espree": "^10.4.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, - "node_modules/eslint-config-airbnb": { - "version": "19.0.4", + "node_modules/eslint-compat-utils": { + "version": "0.5.1", "dev": true, "license": "MIT", "dependencies": { - "eslint-config-airbnb-base": "^15.0.0", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5" + "semver": "^7.5.4" }, "engines": { - "node": "^10.12.0 || ^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.3", - "eslint-plugin-jsx-a11y": "^6.5.1", - "eslint-plugin-react": "^7.28.0", - "eslint-plugin-react-hooks": "^4.3.0" + "eslint": ">=6.0.0" } }, - "node_modules/eslint-config-airbnb-base": { - "version": "15.0.0", + "node_modules/eslint-config-prettier": { + "version": "10.1.8", "dev": true, "license": "MIT", - "dependencies": { - "confusing-browser-globals": "^1.0.10", - "object.assign": "^4.1.2", - "object.entries": "^1.1.5", - "semver": "^6.3.0" + "bin": { + "eslint-config-prettier": "bin/cli.js" }, - "engines": { - "node": "^10.12.0 || >=12.0.0" + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" }, "peerDependencies": { - "eslint": "^7.32.0 || ^8.2.0", - "eslint-plugin-import": "^2.25.2" - } - }, - "node_modules/eslint-config-airbnb-base/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", + "node_modules/eslint-import-context": { + "version": "0.1.9", "dev": true, "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "dependencies": { + "get-tsconfig": "^4.10.1", + "stable-hash-x": "^0.2.0" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-context" }, "peerDependencies": { - "eslint": ">=7.0.0" + "unrs-resolver": "^1.0.0" + }, + "peerDependenciesMeta": { + "unrs-resolver": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { @@ -5880,11 +7644,43 @@ "ms": "^2.1.1" } }, + "node_modules/eslint-import-resolver-typescript": { + "version": "4.4.4", + "dev": true, + "license": "ISC", + "dependencies": { + "debug": "^4.4.1", + "eslint-import-context": "^0.1.8", + "get-tsconfig": "^4.10.1", + "is-bun-module": "^2.0.0", + "stable-hash-x": "^0.2.0", + "tinyglobby": "^0.2.14", + "unrs-resolver": "^1.7.11" + }, + "engines": { + "node": "^16.17.0 || >=18.6.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-import-resolver-typescript" + }, + "peerDependencies": { + "eslint": "*", + "eslint-plugin-import": "*", + "eslint-plugin-import-x": "*" + }, + "peerDependenciesMeta": { + "eslint-plugin-import": { + "optional": true + }, + "eslint-plugin-import-x": { + "optional": true + } + } + }, "node_modules/eslint-module-utils": { - "version": "2.12.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz", - "integrity": "sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==", + "version": "2.12.1", "dev": true, + "license": "MIT", "dependencies": { "debug": "^3.2.7" }, @@ -5899,104 +7695,68 @@ }, "node_modules/eslint-module-utils/node_modules/debug": { "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, + "license": "MIT", "dependencies": { "ms": "^2.1.1" } }, "node_modules/eslint-plugin-array-func": { - "version": "3.1.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 6.8.0" - }, - "peerDependencies": { - "eslint": ">=3.0.0" - } - }, - "node_modules/eslint-plugin-consistent-default-export-name": { - "version": "0.0.15", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash": "^4.17.21", - "pkg-dir": "^5.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-es": { - "version": "3.0.1", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-5.1.0.tgz", + "integrity": "sha512-+OULB0IQdENBmBf8pHMPPObgV6QyfeXFin483jPonOaiurI9UFmc8UydWriK5f5Gel8xBhQLA6NzMwbck1BUJw==", "dev": true, "license": "MIT", - "dependencies": { - "eslint-utils": "^2.0.0", - "regexpp": "^3.0.0" - }, "engines": { - "node": ">=8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=4.19.1" + "eslint": ">=8.51.0" } }, - "node_modules/eslint-plugin-eslint-comments": { - "version": "3.2.0", + "node_modules/eslint-plugin-es-x": { + "version": "7.8.0", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5", - "ignore": "^5.0.5" + "@eslint-community/eslint-utils": "^4.1.2", + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { - "node": ">=6.5.0" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" + "node": "^14.18.0 || >=16.0.0" }, "peerDependencies": { - "eslint": ">=4.19.1" - } - }, - "node_modules/eslint-plugin-eslint-comments/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" + "eslint": ">=8" } }, "node_modules/eslint-plugin-import": { - "version": "2.31.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz", - "integrity": "sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==", + "version": "2.32.0", "dev": true, + "license": "MIT", "dependencies": { "@rtsao/scc": "^1.1.0", - "array-includes": "^3.1.8", - "array.prototype.findlastindex": "^1.2.5", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", + "array-includes": "^3.1.9", + "array.prototype.findlastindex": "^1.2.6", + "array.prototype.flat": "^1.3.3", + "array.prototype.flatmap": "^1.3.3", "debug": "^3.2.7", "doctrine": "^2.1.0", "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.12.0", + "eslint-module-utils": "^2.12.1", "hasown": "^2.0.2", - "is-core-module": "^2.15.1", + "is-core-module": "^2.16.1", "is-glob": "^4.0.3", "minimatch": "^3.1.2", "object.fromentries": "^2.0.8", "object.groupby": "^1.0.3", - "object.values": "^1.2.0", + "object.values": "^1.2.1", "semver": "^6.3.1", - "string.prototype.trimend": "^1.0.8", + "string.prototype.trimend": "^1.0.9", "tsconfig-paths": "^3.15.0" }, "engines": { @@ -6006,6 +7766,15 @@ "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9" } }, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, "node_modules/eslint-plugin-import/node_modules/debug": { "version": "3.2.7", "dev": true, @@ -6014,15 +7783,17 @@ "ms": "^2.1.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, "node_modules/eslint-plugin-import/node_modules/semver": { @@ -6034,143 +7805,182 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "39.9.1", + "version": "52.0.4", "dev": true, "license": "BSD-3-Clause", "dependencies": { - "@es-joy/jsdoccomment": "~0.36.1", - "comment-parser": "1.3.1", - "debug": "^4.3.4", + "@es-joy/jsdoccomment": "~0.52.0", + "are-docs-informative": "^0.0.2", + "comment-parser": "1.4.1", + "debug": "^4.4.1", "escape-string-regexp": "^4.0.0", - "esquery": "^1.4.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" + "espree": "^10.4.0", + "esquery": "^1.6.0", + "parse-imports-exports": "^0.2.4", + "semver": "^7.7.2", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "node": ">=20.11.0" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-jsx-a11y": { - "version": "6.7.1", + "version": "6.10.2", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "@babel/runtime": "^7.20.7", - "aria-query": "^5.1.3", - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "ast-types-flow": "^0.0.7", - "axe-core": "^4.6.2", - "axobject-query": "^3.1.1", + "aria-query": "^5.3.2", + "array-includes": "^3.1.8", + "array.prototype.flatmap": "^1.3.2", + "ast-types-flow": "^0.0.8", + "axe-core": "^4.10.0", + "axobject-query": "^4.1.0", "damerau-levenshtein": "^1.0.8", "emoji-regex": "^9.2.2", - "has": "^1.0.3", - "jsx-ast-utils": "^3.3.3", - "language-tags": "=1.0.5", + "hasown": "^2.0.2", + "jsx-ast-utils": "^3.3.5", + "language-tags": "^1.0.9", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "semver": "^6.3.0" + "object.fromentries": "^2.0.8", + "safe-regex-test": "^1.0.3", + "string.prototype.includes": "^2.0.1" }, "engines": { "node": ">=4.0" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9" } }, - "node_modules/eslint-plugin-jsx-a11y/node_modules/semver": { - "version": "6.3.1", + "node_modules/eslint-plugin-jsx-a11y/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-jsx-a11y/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, "license": "ISC", "peer": true, - "bin": { - "semver": "bin/semver.js" + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" } }, - "node_modules/eslint-plugin-node": { - "version": "11.1.0", + "node_modules/eslint-plugin-n": { + "version": "17.23.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.23.1.tgz", + "integrity": "sha512-68PealUpYoHOBh332JLLD9Sj7OQUDkFpmcfqt8R9sySfFSeuGJjMTJQvCRRB96zO3A/PELRLkPrzsHmzEFQQ5A==", "dev": true, "license": "MIT", "dependencies": { - "eslint-plugin-es": "^3.0.0", - "eslint-utils": "^2.0.0", - "ignore": "^5.1.1", - "minimatch": "^3.0.4", - "resolve": "^1.10.1", - "semver": "^6.1.0" + "@eslint-community/eslint-utils": "^4.5.0", + "enhanced-resolve": "^5.17.1", + "eslint-plugin-es-x": "^7.8.0", + "get-tsconfig": "^4.8.1", + "globals": "^15.11.0", + "globrex": "^0.1.2", + "ignore": "^5.3.2", + "semver": "^7.6.3", + "ts-declaration-location": "^1.0.6" }, "engines": { - "node": ">=8.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "eslint": ">=5.16.0" + "eslint": ">=8.23.0" } }, - "node_modules/eslint-plugin-node/node_modules/semver": { - "version": "6.3.1", + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.15.0", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-prettier": { - "version": "4.2.1", + "version": "5.5.4", "dev": true, "license": "MIT", "dependencies": { - "prettier-linter-helpers": "^1.0.0" + "prettier-linter-helpers": "^1.0.0", + "synckit": "^0.11.7" }, "engines": { - "node": ">=12.0.0" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" }, "peerDependencies": { - "eslint": ">=7.28.0", - "prettier": ">=2.0.0" + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" }, "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, "eslint-config-prettier": { "optional": true } } }, "node_modules/eslint-plugin-react": { - "version": "7.33.2", + "version": "7.37.5", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "array-includes": "^3.1.6", - "array.prototype.flatmap": "^1.3.1", - "array.prototype.tosorted": "^1.1.1", + "array-includes": "^3.1.8", + "array.prototype.findlast": "^1.2.5", + "array.prototype.flatmap": "^1.3.3", + "array.prototype.tosorted": "^1.1.4", "doctrine": "^2.1.0", - "es-iterator-helpers": "^1.0.12", + "es-iterator-helpers": "^1.2.1", "estraverse": "^5.3.0", + "hasown": "^2.0.2", "jsx-ast-utils": "^2.4.1 || ^3.0.0", "minimatch": "^3.1.2", - "object.entries": "^1.1.6", - "object.fromentries": "^2.0.6", - "object.hasown": "^1.1.2", - "object.values": "^1.1.6", + "object.entries": "^1.1.9", + "object.fromentries": "^2.0.8", + "object.values": "^1.2.1", "prop-types": "^15.8.1", - "resolve": "^2.0.0-next.4", + "resolve": "^2.0.0-next.5", "semver": "^6.3.1", - "string.prototype.matchall": "^4.0.8" + "string.prototype.matchall": "^4.0.12", + "string.prototype.repeat": "^1.0.0" }, "engines": { "node": ">=4" }, "peerDependencies": { - "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8" + "eslint": "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7" } }, "node_modules/eslint-plugin-react-hooks": { - "version": "4.6.0", + "version": "5.2.0", "dev": true, "license": "MIT", "peer": true, @@ -6178,28 +7988,40 @@ "node": ">=10" }, "peerDependencies": { - "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0" + "eslint": "^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0" } }, - "node_modules/eslint-plugin-react/node_modules/doctrine": { - "version": "2.1.0", + "node_modules/eslint-plugin-react/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "peer": true, "dependencies": { - "esutils": "^2.0.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint-plugin-react/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, "node_modules/eslint-plugin-react/node_modules/resolve": { - "version": "2.0.0-next.4", + "version": "2.0.0-next.5", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "is-core-module": "^2.9.0", + "is-core-module": "^2.13.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -6220,75 +8042,191 @@ } }, "node_modules/eslint-plugin-tsdoc": { - "version": "0.2.17", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-tsdoc/-/eslint-plugin-tsdoc-0.5.0.tgz", + "integrity": "sha512-ush8ehCwub2rgE16OIgQPFyj/o0k3T8kL++9IrAI4knsmupNo8gvfO2ERgDHWWgTC5MglbwLVRswU93HyXqNpw==", "dev": true, "license": "MIT", "dependencies": { - "@microsoft/tsdoc": "0.14.2", - "@microsoft/tsdoc-config": "0.16.2" + "@microsoft/tsdoc": "0.16.0", + "@microsoft/tsdoc-config": "0.18.0", + "@typescript-eslint/utils": "~8.46.0" } }, - "node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/project-service": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", + "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "@typescript-eslint/tsconfig-utils": "^8.46.4", + "@typescript-eslint/types": "^8.46.4", + "debug": "^4.3.4" }, "engines": { - "node": ">=8.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/eslint-scope/node_modules/estraverse": { - "version": "4.3.0", + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/scope-manager": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", + "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4" + }, "engines": { - "node": ">=4.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/eslint-utils": { - "version": "2.1.0", + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/tsconfig-utils": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", + "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" + } + }, + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/types": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", + "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/typescript-estree": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", + "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", "dev": true, "license": "MIT", "dependencies": { - "eslint-visitor-keys": "^1.1.0" + "@typescript-eslint/project-service": "8.46.4", + "@typescript-eslint/tsconfig-utils": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/visitor-keys": "8.46.4", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.1.0" }, "engines": { - "node": ">=6" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { - "version": "1.3.0", + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/utils": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", + "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", "dev": true, - "license": "Apache-2.0", + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.7.0", + "@typescript-eslint/scope-manager": "8.46.4", + "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/typescript-estree": "8.46.4" + }, "engines": { - "node": ">=4" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" } }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", + "node_modules/eslint-plugin-tsdoc/node_modules/@typescript-eslint/visitor-keys": { + "version": "8.46.4", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", + "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.46.4", + "eslint-visitor-keys": "^4.2.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/eslint-plugin-tsdoc/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz", + "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==", "dev": true, "license": "Apache-2.0", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", + "node_modules/eslint-scope": { + "version": "8.4.0", "dev": true, "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, @@ -6296,17 +8234,61 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/espree": { - "version": "9.6.1", + "version": "10.4.0", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.15.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.2.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -6325,7 +8307,7 @@ } }, "node_modules/esquery": { - "version": "1.5.0", + "version": "1.6.0", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -6363,7 +8345,8 @@ } }, "node_modules/eventemitter3": { - "version": "5.0.1", + "version": "4.0.7", + "dev": true, "license": "MIT" }, "node_modules/events": { @@ -6404,55 +8387,213 @@ } }, "node_modules/expect": { - "version": "29.7.0", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-30.2.0.tgz", + "integrity": "sha512-u/feCi0GPsI+988gU2FLcsHyAHTU0MX1Wg68NhAnN7z/+C5wqG+CY8J53N9ioe8RXgaoz0nBR/TYMf3AycUuPw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/expect-utils": "^29.7.0", - "jest-get-type": "^29.6.3", - "jest-matcher-utils": "^29.7.0", - "jest-message-util": "^29.7.0", - "jest-util": "^29.7.0" + "@jest/expect-utils": "30.2.0", + "@jest/get-type": "30.1.0", + "jest-matcher-utils": "30.2.0", + "jest-message-util": "30.2.0", + "jest-mock": "30.2.0", + "jest-util": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/extend": { - "version": "3.0.2", + "node_modules/expect/node_modules/@jest/expect-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/expect-utils/-/expect-utils-30.2.0.tgz", + "integrity": "sha512-1JnRfhqpD8HGpOmQp180Fo9Zt69zNtC+9lR+kT7NVL05tNXIi+QC8Csz7lfidMoVLPD3FnOtcmp0CEFnxExGEA==", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } }, - "node_modules/external-editor": { - "version": "3.1.0", + "node_modules/expect/node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", + "node_modules/expect/node_modules/@jest/types": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", "dev": true, "license": "MIT", "dependencies": { - "os-tmpdir": "~1.0.2" + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" }, "engines": { - "node": ">=0.6.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/extsprintf": { - "version": "1.3.0", + "node_modules/expect/node_modules/@sinclair/typebox": { + "version": "0.34.41", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.41.tgz", + "integrity": "sha512-6gS8pZzSXdyRHTIqoqSVknxolr1kzfy4/CeDnrzsVz8TTIWUbOBr6gnzOmTYJ3eXQNh4IYHIGi5aIL7sOZ2G/g==", "dev": true, - "engines": [ - "node >=0.6.0" + "license": "MIT" + }, + "node_modules/expect/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/expect/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/expect/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/jest-matcher-utils": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-matcher-utils/-/jest-matcher-utils-30.2.0.tgz", + "integrity": "sha512-dQ94Nq4dbzmUWkQ0ANAWS9tBRfqCrn0bV9AMYdOi/MHW726xn7eQmMeRTpX2ViC00bpNaWXq+7o4lIQ3AX13Hg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "jest-diff": "30.2.0", + "pretty-format": "30.2.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/jest-message-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-30.2.0.tgz", + "integrity": "sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/code-frame": "^7.27.1", + "@jest/types": "30.2.0", + "@types/stack-utils": "^2.0.3", + "chalk": "^4.1.2", + "graceful-fs": "^4.2.11", + "micromatch": "^4.0.8", + "pretty-format": "30.2.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.6" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/jest-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/expect/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/expect/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/extend": { + "version": "3.0.2", + "dev": true, "license": "MIT" }, "node_modules/fast-deep-equal": { @@ -6466,7 +8607,9 @@ "license": "Apache-2.0" }, "node_modules/fast-glob": { - "version": "3.3.1", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -6474,7 +8617,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -6482,6 +8625,8 @@ }, "node_modules/fast-glob/node_modules/glob-parent": { "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", "dev": true, "license": "ISC", "dependencies": { @@ -6493,7 +8638,6 @@ }, "node_modules/fast-json-stable-stringify": { "version": "2.1.0", - "dev": true, "license": "MIT" }, "node_modules/fast-levenshtein": { @@ -6501,6 +8645,23 @@ "dev": true, "license": "MIT" }, + "node_modules/fast-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.0.tgz", + "integrity": "sha512-iPeeDKJSWf4IEOasVVrknXpaBV0IApz/gp7S2bb7Z4Lljbl2MGJRqInZiUrQwV16cpzw/D3S5j5Julj/gT52AA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "dev": true, @@ -6510,7 +8671,9 @@ } }, "node_modules/fastq": { - "version": "1.15.0", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", "dev": true, "license": "ISC", "dependencies": { @@ -6527,6 +8690,8 @@ }, "node_modules/figures": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "license": "MIT", "dependencies": { @@ -6541,6 +8706,8 @@ }, "node_modules/figures/node_modules/escape-string-regexp": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", "dev": true, "license": "MIT", "engines": { @@ -6548,39 +8715,32 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", + "version": "8.0.0", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", - "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", - "dev": true, - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.6.tgz", + "integrity": "sha512-5giy2PkLYY1cP39p17Ech+2xlpTRL9HLspOfEgm0L6CwBXBTgsK5ou0JtzYuepxkaQ/tvhCFIJ5uXo0OrM2DxA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "balanced-match": "^1.0.0" + "minimatch": "^5.0.1" } }, "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.9.tgz", + "integrity": "sha512-7o1wEA2RyMP7Iu7GNba9vc0RWWGACJOCZBJX2GJWip0ikV+wcOsgVuY9uE8CPiyQhkGFSlhuSkZPavN7u1c2Fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6589,7 +8749,7 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", + "version": "7.1.1", "dev": true, "license": "MIT", "dependencies": { @@ -6599,14 +8759,6 @@ "node": ">=8" } }, - "node_modules/filter-obj": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/finalhandler": { "version": "1.1.2", "dev": true, @@ -6663,26 +8815,33 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, "node_modules/flat-cache": { - "version": "3.1.0", + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.7", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "flatted": "^3.2.9", + "keyv": "^4.5.4" }, "engines": { - "node": ">=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.7", + "version": "3.3.3", "dev": true, "license": "ISC" }, "node_modules/follow-redirects": { - "version": "1.15.6", + "version": "1.15.11", "dev": true, "funding": [ { @@ -6701,57 +8860,133 @@ } }, "node_modules/for-each": { - "version": "0.3.3", + "version": "0.3.5", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.3" + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/forever-agent": { - "version": "0.6.1", + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, "engines": { - "node": "*" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/foreground-child/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/form-data": { - "version": "2.3.3", + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" + } + }, + "node_modules/front-matter": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/front-matter/-/front-matter-4.0.2.tgz", + "integrity": "sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg==", + "dev": true, + "license": "MIT", + "dependencies": { + "js-yaml": "^3.13.1" + } + }, + "node_modules/front-matter/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/front-matter/node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" } }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true, + "license": "MIT" + }, "node_modules/fs-extra": { - "version": "9.1.0", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "dev": true, "license": "MIT", "dependencies": { - "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", "universalify": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=14.14" } }, "node_modules/fs-minipass": { - "version": "2.1.0", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-3.0.3.tgz", + "integrity": "sha512-XUBA9XClHbnJWSfBzjkm6RvPsyg3sryZt06BEQoXcF7EK/xpGaQYJgQKDJSUH5SGZ76Y7pFx1QBnXz09rU5Fbw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/fs.realpath": { @@ -6780,14 +9015,16 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", + "version": "1.1.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6804,69 +9041,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "2.7.4", - "dev": true, - "license": "ISC", - "dependencies": { - "aproba": "^1.0.3", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.0", - "object-assign": "^4.1.0", - "signal-exit": "^3.0.0", - "string-width": "^1.0.1", - "strip-ansi": "^3.0.1", - "wide-align": "^1.1.0" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/aproba": { - "version": "1.2.0", - "dev": true, - "license": "ISC" - }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "number-is-nan": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/string-width": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "code-point-at": "^1.0.0", - "is-fullwidth-code-point": "^1.0.0", - "strip-ansi": "^3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "dev": true, @@ -6883,25 +9057,21 @@ "node": "6.* || 8.* || >= 10.*" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", "dev": true, + "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -6920,6 +9090,8 @@ }, "node_modules/get-pkg-repo": { "version": "4.2.1", + "resolved": "https://registry.npmjs.org/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", "dev": true, "license": "MIT", "dependencies": { @@ -6935,8 +9107,43 @@ "node": ">=6.9.0" } }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/get-port": { "version": "5.1.1", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", "dev": true, "license": "MIT", "engines": { @@ -6946,6 +9153,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-stream": { "version": "6.0.1", "dev": true, @@ -6958,14 +9177,13 @@ } }, "node_modules/get-symbol-description": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.2.tgz", - "integrity": "sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4" + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6974,42 +9192,39 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/getpass": { - "version": "0.1.7", + "node_modules/get-tsconfig": { + "version": "4.10.1", "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0" + "resolve-pkg-maps": "^1.0.0" + }, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" } }, "node_modules/git-raw-commits": { - "version": "2.0.11", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/git-raw-commits/-/git-raw-commits-3.0.0.tgz", + "integrity": "sha512-b5OHmZ3vAgGrDn/X0kS+9qCfNKWe4K/jFnhwzVWWg0/k5eLa3060tZShrRg8Dja5kPc+YjS0Gc6y7cRr44Lpjw==", "dev": true, "license": "MIT", "dependencies": { "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" + "meow": "^8.1.2", + "split2": "^3.2.2" }, "bin": { "git-raw-commits": "cli.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/git-raw-commits/node_modules/through2": { - "version": "4.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" + "node": ">=14" } }, "node_modules/git-remote-origin-url": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", "dev": true, "license": "MIT", "dependencies": { @@ -7022,6 +9237,8 @@ }, "node_modules/git-remote-origin-url/node_modules/pify": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", "dev": true, "license": "MIT", "engines": { @@ -7029,47 +9246,47 @@ } }, "node_modules/git-semver-tags": { - "version": "4.1.1", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/git-semver-tags/-/git-semver-tags-5.0.1.tgz", + "integrity": "sha512-hIvOeZwRbQ+7YEUmCkHqo8FOLQZCEn18yevLHADlFPZY02KJGsu5FZt9YW/lybfK2uhWFI7Qg/07LekJiTv7iA==", "dev": true, "license": "MIT", "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" + "meow": "^8.1.2", + "semver": "^7.0.0" }, "bin": { "git-semver-tags": "cli.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=14" } }, "node_modules/git-up": { - "version": "4.0.5", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-7.0.0.tgz", + "integrity": "sha512-ONdIrbBCFusq1Oy0sC71F5azx8bVkvtZtMJAsv+a6lz5YAmbNnLD6HAB4gptHZVLPR8S2/kVN6Gab7lryq5+lQ==", "dev": true, "license": "MIT", "dependencies": { - "is-ssh": "^1.3.0", - "parse-url": "^6.0.0" + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, "node_modules/git-url-parse": { - "version": "11.6.0", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-14.0.0.tgz", + "integrity": "sha512-NnLweV+2A4nCvn4U/m2AoYu0pPKlsmhK9cknG7IMwsjFY1S2jxM+mAhsDxyxfCIGfGaD+dozsyX4b6vkYc83yQ==", "dev": true, "license": "MIT", "dependencies": { - "git-up": "^4.0.0" + "git-up": "^7.0.0" } }, "node_modules/gitconfiglocal": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", "dev": true, "license": "BSD", "dependencies": { @@ -7111,88 +9328,75 @@ "dev": true, "license": "BSD-2-Clause" }, - "node_modules/globals": { - "version": "13.23.0", + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "define-properties": "^1.1.3" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/globby": { - "version": "11.1.0", + "node_modules/globals": { + "version": "16.3.0", "dev": true, "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/globalthis": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", + "node_modules/globrex": { + "version": "0.1.2", "dev": true, "license": "MIT" }, - "node_modules/gzip-size": { - "version": "6.0.0", + "node_modules/gopd": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "duplexer": "^0.1.2" - }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, "node_modules/handlebars": { "version": "4.7.8", "dev": true, @@ -7213,50 +9417,23 @@ "uglify-js": "^3.1.4" } }, - "node_modules/har-schema": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=4" - } - }, - "node_modules/har-validator": { - "version": "5.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.3", - "har-schema": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/has": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, "node_modules/has-bigints": { - "version": "1.0.2", + "version": "1.1.0", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -7271,9 +9448,8 @@ }, "node_modules/has-property-descriptors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", - "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dev": true, + "license": "MIT", "dependencies": { "es-define-property": "^1.0.0" }, @@ -7282,10 +9458,12 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -7294,7 +9472,7 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { @@ -7306,9 +9484,8 @@ }, "node_modules/has-tostringtag": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", - "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", "dev": true, + "license": "MIT", "dependencies": { "has-symbols": "^1.0.3" }, @@ -7321,14 +9498,15 @@ }, "node_modules/has-unicode": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true, "license": "ISC" }, "node_modules/hasown": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", "dev": true, + "license": "MIT", "dependencies": { "function-bind": "^1.1.2" }, @@ -7336,86 +9514,38 @@ "node": ">= 0.4" } }, - "node_modules/hast-util-to-html": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-9.0.3.tgz", - "integrity": "sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==", - "dev": true, - "dependencies": { - "@types/hast": "^3.0.0", - "@types/unist": "^3.0.0", - "ccount": "^2.0.0", - "comma-separated-tokens": "^2.0.0", - "hast-util-whitespace": "^3.0.0", - "html-void-elements": "^3.0.0", - "mdast-util-to-hast": "^13.0.0", - "property-information": "^6.0.0", - "space-separated-tokens": "^2.0.0", - "stringify-entities": "^4.0.0", - "zwitch": "^2.0.4" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/hast-util-whitespace": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", - "integrity": "sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==", - "dev": true, - "dependencies": { - "@types/hast": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/hosted-git-info": { - "version": "4.1.0", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-9.0.2.tgz", + "integrity": "sha512-M422h7o/BR3rmCQ8UHi7cyyMqKltdP9Uo+J2fXK+RSAY+wTcKOIRyhTuKv4qn+DJf3g+PL890AzId5KZpX+CBg==", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^11.1.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=10" + "node": "20 || >=22" } }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/html-escaper": { "version": "2.0.2", "dev": true, "license": "MIT" }, - "node_modules/html-void-elements": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-3.0.0.tgz", - "integrity": "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/http-cache-semantics": { - "version": "4.1.1", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.2.0.tgz", + "integrity": "sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==", "dev": true, "license": "BSD-2-Clause" }, @@ -7456,47 +9586,31 @@ } }, "node_modules/http-proxy-agent": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@tootallnate/once": "1", - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/http-proxy/node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/http-signature": { - "version": "1.2.0", + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", + "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", "dev": true, "license": "MIT", "dependencies": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" + "agent-base": "^7.1.0", + "debug": "^4.3.4" }, "engines": { - "node": ">=0.8", - "npm": ">=1.3.7" + "node": ">= 14" } }, "node_modules/https-proxy-agent": { - "version": "5.0.1", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { - "node": ">= 6" + "node": ">= 14" } }, "node_modules/human-signals": { @@ -7507,14 +9621,6 @@ "node": ">=10.17.0" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ms": "^2.0.0" - } - }, "node_modules/iconv-lite": { "version": "0.4.24", "dev": true, @@ -7526,8 +9632,29 @@ "node": ">=0.10.0" } }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, "node_modules/ignore": { - "version": "5.2.4", + "version": "5.3.2", "dev": true, "license": "MIT", "engines": { @@ -7535,75 +9662,64 @@ } }, "node_modules/ignore-walk": { - "version": "3.0.4", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-8.0.0.tgz", + "integrity": "sha512-FCeMZT4NiRQGh+YkeKMtWrOmBgWjHjMJ26WQWrRQyoyzqevdaGSakUaJW5xQYmjLlUVk2qUnCjYVBax9EKKg8A==", "dev": true, "license": "ISC", "dependencies": { - "minimatch": "^3.0.4" - } - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" + "minimatch": "^10.0.3" }, "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/ignore-walk/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", - "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "18 || 20 || >=22" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", + "node_modules/ignore-walk/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "balanced-match": "^4.0.2" }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" } }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "p-locate": "^4.1.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/import-fresh": { + "version": "3.3.1", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { "node": ">=6" @@ -7612,26 +9728,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/import-local": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" + "bin": { + "import-local-fixture": "fixtures/cli.js" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/imurmurhash": { @@ -7644,17 +9756,14 @@ }, "node_modules/indent-string": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, - "license": "ISC" - }, "node_modules/inflight": { "version": "1.0.6", "dev": true, @@ -7671,72 +9780,65 @@ }, "node_modules/ini": { "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true, "license": "ISC" }, "node_modules/init-package-json": { - "version": "2.0.5", + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/init-package-json/-/init-package-json-8.2.2.tgz", + "integrity": "sha512-pXVMn67Jdw2hPKLCuJZj62NC9B2OIDd1R3JwZXTHXuEnfN3Uq5kJbKOSld6YEU+KOGfMD82EzxFTYz5o0SSJoA==", "dev": true, "license": "ISC", "dependencies": { - "npm-package-arg": "^8.1.5", - "promzard": "^0.3.0", - "read": "~1.0.1", - "read-package-json": "^4.1.1", - "semver": "^7.3.5", + "@npmcli/package-json": "^7.0.0", + "npm-package-arg": "^13.0.0", + "promzard": "^2.0.0", + "read": "^4.0.0", + "semver": "^7.7.2", "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^3.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/init-package-json/node_modules/read-package-json": { - "version": "4.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" + "validate-npm-package-name": "^6.0.2" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/inquirer": { - "version": "7.3.3", + "version": "12.9.6", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.9.6.tgz", + "integrity": "sha512-603xXOgyfxhuis4nfnWaZrMaotNT0Km9XwwBNWUKbIDqeCY89jGr2F9YPEMiNhU6XjIP4VoWISMBFfcc5NgrTw==", "dev": true, "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.19", - "mute-stream": "0.0.8", - "run-async": "^2.4.0", - "rxjs": "^6.6.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6" + "@inquirer/ansi": "^1.0.0", + "@inquirer/core": "^10.2.2", + "@inquirer/prompts": "^7.8.6", + "@inquirer/type": "^3.0.8", + "mute-stream": "^2.0.0", + "run-async": "^4.0.5", + "rxjs": "^7.8.2" }, "engines": { - "node": ">=8.0.0" + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7750,19 +9852,24 @@ "node": ">=10.13.0" } }, - "node_modules/ip": { - "version": "2.0.1", + "node_modules/ip-address": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/ip-address/-/ip-address-10.1.0.tgz", + "integrity": "sha512-XXADHxXmvT9+CRxhXg56LJovE+bmWnEWB78LB83VZTprKTmaC5QfruXocxzTZ2Kl0DNwKuBdlIhjL8LeY8Sf8Q==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">= 12" + } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -7777,12 +9884,15 @@ "license": "MIT" }, "node_modules/is-async-function": { - "version": "2.0.0", + "version": "2.1.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7792,11 +9902,14 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7814,12 +9927,12 @@ } }, "node_modules/is-boolean-object": { - "version": "1.1.2", + "version": "1.2.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7828,6 +9941,14 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-bun-module": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "semver": "^7.7.1" + } + }, "node_modules/is-callable": { "version": "1.2.7", "dev": true, @@ -7840,26 +9961,22 @@ } }, "node_modules/is-ci": { - "version": "2.0.0", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-3.0.1.tgz", + "integrity": "sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==", "dev": true, "license": "MIT", "dependencies": { - "ci-info": "^2.0.0" + "ci-info": "^3.2.0" }, "bin": { "is-ci": "bin.js" } }, - "node_modules/is-ci/node_modules/ci-info": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.1", "dev": true, + "license": "MIT", "dependencies": { "hasown": "^2.0.2" }, @@ -7871,11 +9988,12 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", "dev": true, + "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -7886,11 +10004,12 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7899,6 +10018,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/is-extglob": { "version": "2.1.1", "dev": true, @@ -7908,12 +10043,14 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", + "version": "1.1.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7936,12 +10073,14 @@ } }, "node_modules/is-generator-function": { - "version": "1.0.10", + "version": "1.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "get-proto": "^1.0.0", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7961,25 +10100,31 @@ "node": ">=0.10.0" } }, - "node_modules/is-lambda": { - "version": "1.0.1", + "node_modules/is-interactive": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/is-map": { - "version": "2.0.2", + "version": "2.0.3", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-negative-zero": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", - "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -7996,11 +10141,12 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8011,14 +10157,8 @@ }, "node_modules/is-obj": { "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, "license": "MIT", "engines": { @@ -8027,14 +10167,8 @@ }, "node_modules/is-plain-obj": { "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", "dev": true, "license": "MIT", "engines": { @@ -8042,12 +10176,14 @@ } }, "node_modules/is-regex": { - "version": "1.1.4", + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8057,21 +10193,22 @@ } }, "node_modules/is-set": { - "version": "2.0.2", + "version": "2.0.3", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", - "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -8081,7 +10218,9 @@ } }, "node_modules/is-ssh": { - "version": "1.4.0", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.4.1.tgz", + "integrity": "sha512-JNeu1wQsHjyHgn9NcWTaXq6zWSR6hqE0++zhfZlkFBbScNkyvxCdeV8sRkSBaeLKxmbpR21brail63ACNxJ0Tg==", "dev": true, "license": "MIT", "dependencies": { @@ -8100,11 +10239,12 @@ } }, "node_modules/is-string": { - "version": "1.0.7", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -8114,11 +10254,13 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -8129,6 +10271,8 @@ }, "node_modules/is-text-path": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", "dev": true, "license": "MIT", "dependencies": { @@ -8139,12 +10283,11 @@ } }, "node_modules/is-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.13.tgz", - "integrity": "sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==", + "version": "1.1.15", "dev": true, + "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.14" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -8153,44 +10296,72 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/is-weakmap": { - "version": "2.0.1", + "version": "2.0.2", "dev": true, "license": "MIT", - "peer": true, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakref": { - "version": "1.0.2", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-weakset": { - "version": "2.0.2", + "version": "2.0.4", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, "node_modules/isarray": { "version": "2.0.5", "dev": true, @@ -8220,19 +10391,29 @@ "node": ">=0.10.0" } }, - "node_modules/isstream": { - "version": "0.1.2", - "dev": true, - "license": "MIT" - }, "node_modules/istanbul-lib-coverage": { - "version": "3.2.0", + "version": "3.2.2", "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=8" } }, + "node_modules/istanbul-lib-instrument": { + "version": "6.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@babel/core": "^7.23.9", + "@babel/parser": "^7.23.9", + "@istanbuljs/schema": "^0.1.3", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^7.5.4" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/istanbul-lib-report": { "version": "3.0.1", "dev": true, @@ -8260,7 +10441,7 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", + "version": "3.1.7", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -8272,27 +10453,48 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.1", + "version": "1.1.5", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "define-properties": "^1.2.0", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.3" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "get-proto": "^1.0.0", + "has-symbols": "^1.1.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/jackspeak": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.2.3.tgz", + "integrity": "sha512-ykkVRwrYvFm1nb2AJfKKYPr0emF6IiXDYUaFx4Zn9ZuIH7MrzEZ3sD5RlqGXNRpHtvUHJyOnCEFxOlNDtGo7wg==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^9.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/jake": { - "version": "10.9.1", - "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", - "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "version": "10.9.4", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.4.tgz", + "integrity": "sha512-wpHYzhxiVQL+IV05BLE2Xn34zW1S223hvjtqk0+gsPrwd/8JNLXJgZZM/iPFsYc1xyphF+6M6EvdE5E9MBGkDA==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", + "async": "^3.2.6", "filelist": "^1.0.4", - "minimatch": "^3.1.2" + "picocolors": "^1.1.1" }, "bin": { "jake": "bin/cli.js" @@ -8302,7 +10504,7 @@ } }, "node_modules/jasmine-core": { - "version": "4.6.0", + "version": "4.6.1", "dev": true, "license": "MIT" }, @@ -8544,6 +10746,21 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-environment-node/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-get-type": { "version": "29.6.3", "dev": true, @@ -8622,16 +10839,104 @@ } }, "node_modules/jest-mock": { - "version": "29.7.0", + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-30.2.0.tgz", + "integrity": "sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==", "dev": true, "license": "MIT", "dependencies": { - "@jest/types": "^29.6.3", + "@jest/types": "30.2.0", "@types/node": "*", - "jest-util": "^29.7.0" + "jest-util": "30.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@jest/types": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-30.2.0.tgz", + "integrity": "sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/pattern": "30.0.1", + "@jest/schemas": "30.0.5", + "@types/istanbul-lib-coverage": "^2.0.6", + "@types/istanbul-reports": "^3.0.4", + "@types/node": "*", + "@types/yargs": "^17.0.33", + "chalk": "^4.1.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/@sinclair/typebox": { + "version": "0.34.47", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.47.tgz", + "integrity": "sha512-ZGIBQ+XDvO5JQku9wmwtabcVTHJsgSWAHYtVuM9pBNNR5E88v6Jcj/llpmsjivig5X8A8HHOb4/mbEKPS5EvAw==", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-mock/node_modules/ci-info": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.3.1.tgz", + "integrity": "sha512-Wdy2Igu8OcBpI2pZePZ5oWjPC38tmDVx5WKUXKwlLYkA0ozo85sLsLvkBbBn/sZaSCMFOGZJ14fvW9t5/d7kdA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/jest-mock/node_modules/jest-util": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-30.2.0.tgz", + "integrity": "sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "30.2.0", + "@types/node": "*", + "chalk": "^4.1.2", + "ci-info": "^4.2.0", + "graceful-fs": "^4.2.11", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/jest-mock/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/jest-pnp-resolver": { @@ -8761,6 +11066,21 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-runtime/node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-snapshot": { "version": "29.7.0", "dev": true, @@ -8791,6 +11111,23 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/jest-snapshot/node_modules/expect": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", + "integrity": "sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/expect-utils": "^29.7.0", + "jest-get-type": "^29.6.3", + "jest-matcher-utils": "^29.7.0", + "jest-message-util": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, "node_modules/jest-util": { "version": "29.7.0", "dev": true, @@ -8882,6 +11219,8 @@ }, "node_modules/jju": { "version": "1.4.0", + "resolved": "https://registry.npmjs.org/jju/-/jju-1.4.0.tgz", + "integrity": "sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==", "dev": true, "license": "MIT" }, @@ -8891,7 +11230,9 @@ "license": "MIT" }, "node_modules/js-yaml": { - "version": "4.1.0", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.1.tgz", + "integrity": "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA==", "dev": true, "license": "MIT", "dependencies": { @@ -8901,13 +11242,8 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsbn": { - "version": "0.1.1", - "dev": true, - "license": "MIT" - }, "node_modules/jsdoc-type-pratt-parser": { - "version": "3.1.0", + "version": "4.1.0", "dev": true, "license": "MIT", "engines": { @@ -8915,14 +11251,14 @@ } }, "node_modules/jsesc": { - "version": "2.5.2", + "version": "3.1.0", "dev": true, "license": "MIT", "bin": { "jsesc": "bin/jsesc" }, "engines": { - "node": ">=4" + "node": ">=6" } }, "node_modules/json-buffer": { @@ -8940,11 +11276,6 @@ "dev": true, "license": "MIT" }, - "node_modules/json-schema": { - "version": "0.4.0", - "dev": true, - "license": "(AFL-2.1 OR BSD-3-Clause)" - }, "node_modules/json-schema-traverse": { "version": "0.4.1", "dev": true, @@ -8955,8 +11286,20 @@ "dev": true, "license": "MIT" }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/json-stringify-nice/-/json-stringify-nice-1.1.4.tgz", + "integrity": "sha512-5Z5RFW63yxReJ7vANgW6eZFGWaQvnPE3WNmZoOJrSkGju2etKA2L5rrOa1sm877TVTFt57A80BH1bArcmlLfPw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, "node_modules/json-stringify-safe": { "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", "dev": true, "license": "ISC" }, @@ -8971,8 +11314,17 @@ "node": ">=6" } }, + "node_modules/jsonc-parser": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", + "dev": true, + "license": "MIT" + }, "node_modules/jsonfile": { - "version": "6.1.0", + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", "dev": true, "license": "MIT", "dependencies": { @@ -8984,6 +11336,8 @@ }, "node_modules/jsonparse": { "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true, "engines": [ "node >= 0.2.0" @@ -8992,6 +11346,8 @@ }, "node_modules/JSONStream": { "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "license": "(MIT OR Apache-2.0)", "dependencies": { @@ -9005,20 +11361,6 @@ "node": "*" } }, - "node_modules/jsprim": { - "version": "1.4.2", - "dev": true, - "license": "MIT", - "dependencies": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.4.0", - "verror": "1.10.0" - }, - "engines": { - "node": ">=0.6.0" - } - }, "node_modules/jsx-ast-utils": { "version": "3.3.5", "dev": true, @@ -9034,8 +11376,22 @@ "node": ">=4.0" } }, + "node_modules/just-diff": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/just-diff/-/just-diff-6.0.2.tgz", + "integrity": "sha512-S59eriX5u3/QhMNq3v/gm8Kd0w8OS6Tz2FS1NG4blv+z0MuQcBRJyFWjdovM0Rad4/P4aUPFtnkNjMjyMlMSYA==", + "dev": true, + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/just-diff-apply/-/just-diff-apply-5.5.0.tgz", + "integrity": "sha512-OYTthRfSh55WOItVqwpefPtNt2VdKsq5AnAK6apdtR6yCH8pr0CmSr710J0Mf+WdQy7K/OzMy7K2MgAfdQURDw==", + "dev": true, + "license": "MIT" + }, "node_modules/karma": { - "version": "6.4.3", + "version": "6.4.4", "dev": true, "license": "MIT", "dependencies": { @@ -9104,335 +11460,706 @@ "karma": "^6.0.0" } }, - "node_modules/karma-webpack": { - "version": "5.0.1", + "node_modules/karma-webpack": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^7.1.3", + "minimatch": "^9.0.3", + "webpack-merge": "^4.1.5" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "webpack": "^5.0.0" + } + }, + "node_modules/karma-webpack/node_modules/webpack-merge": { + "version": "4.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/karma/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/karma/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/karma/node_modules/mkdirp": { + "version": "0.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kind-of": { + "version": "6.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/language-subtag-registry": { + "version": "0.3.23", + "dev": true, + "license": "CC0-1.0", + "peer": true + }, + "node_modules/language-tags": { + "version": "1.0.9", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "language-subtag-registry": "^0.3.20" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/lerna": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/lerna/-/lerna-9.0.5.tgz", + "integrity": "sha512-LtwZu2wINHlKpjRCxrEdK3QopyeUpFuUS4v6uzLYdg/uxnAKqDHrGY/mDPxdxDR3YAXJzpWXBdz49AHNIKZaSg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@lerna/create": "9.0.5", + "@npmcli/arborist": "9.1.6", + "@npmcli/package-json": "7.0.2", + "@npmcli/run-script": "10.0.3", + "@nx/devkit": ">=21.5.2 < 23.0.0", + "@octokit/plugin-enterprise-rest": "6.0.1", + "@octokit/rest": "20.1.2", + "aproba": "2.0.0", + "byte-size": "8.1.1", + "chalk": "4.1.0", + "cmd-shim": "6.0.3", + "color-support": "1.1.3", + "columnify": "1.6.0", + "console-control-strings": "^1.1.0", + "conventional-changelog-angular": "7.0.0", + "conventional-changelog-core": "5.0.1", + "conventional-recommended-bump": "7.0.1", + "cosmiconfig": "9.0.0", + "dedent": "1.5.3", + "envinfo": "7.13.0", + "execa": "5.0.0", + "fs-extra": "^11.2.0", + "get-port": "5.1.1", + "get-stream": "6.0.0", + "git-url-parse": "14.0.0", + "glob-parent": "6.0.2", + "has-unicode": "2.0.1", + "import-local": "3.1.0", + "ini": "^1.3.8", + "init-package-json": "8.2.2", + "inquirer": "12.9.6", + "is-ci": "3.0.1", + "is-stream": "2.0.0", + "jest-diff": ">=30.0.0 < 31", + "js-yaml": "4.1.1", + "libnpmaccess": "10.0.3", + "libnpmpublish": "11.1.2", + "load-json-file": "6.2.0", + "make-dir": "4.0.0", + "make-fetch-happen": "15.0.2", + "minimatch": "3.1.4", + "multimatch": "5.0.0", + "npm-package-arg": "13.0.1", + "npm-packlist": "10.0.3", + "npm-registry-fetch": "19.1.0", + "nx": ">=21.5.3 < 23.0.0", + "p-map": "4.0.0", + "p-map-series": "2.1.0", + "p-pipe": "3.1.0", + "p-queue": "6.6.2", + "p-reduce": "2.1.0", + "p-waterfall": "2.1.1", + "pacote": "21.0.1", + "pify": "5.0.0", + "read-cmd-shim": "4.0.0", + "resolve-from": "5.0.0", + "rimraf": "^6.1.2", + "semver": "7.7.2", + "set-blocking": "^2.0.0", + "signal-exit": "3.0.7", + "slash": "3.0.0", + "ssri": "12.0.0", + "string-width": "^4.2.3", + "tar": "7.5.8", + "temp-dir": "1.0.0", + "through": "2.3.8", + "tinyglobby": "0.2.12", + "typescript": ">=3 < 6", + "upath": "2.0.1", + "uuid": "^11.1.0", + "validate-npm-package-license": "3.0.4", + "validate-npm-package-name": "6.0.2", + "wide-align": "1.1.5", + "write-file-atomic": "5.0.1", + "write-pkg": "4.0.0", + "yargs": "17.7.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "lerna": "dist/cli.js" + }, + "engines": { + "node": "^20.19.0 || ^22.12.0 || >=24.0.0" + } + }, + "node_modules/lerna/node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@sinclair/typebox": "^0.34.0" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + } + }, + "node_modules/lerna/node_modules/@sinclair/typebox": { + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lerna/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/lerna/node_modules/chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/lerna/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/lerna/node_modules/dedent": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.5.3.tgz", + "integrity": "sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "babel-plugin-macros": "^3.1.0" + }, + "peerDependenciesMeta": { + "babel-plugin-macros": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/envinfo": { + "version": "7.13.0", + "resolved": "https://registry.npmjs.org/envinfo/-/envinfo-7.13.0.tgz", + "integrity": "sha512-cvcaMr7KqXVh4nyzGTVqTum+gAiL265x5jUWQIDLq//zOGbW+gSW/C+OWLleY/rs9Qole6AZLMXPbtIFQbqu+Q==", + "dev": true, + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lerna/node_modules/execa": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-5.0.0.tgz", + "integrity": "sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/lerna/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/lerna/node_modules/get-stream": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.0.tgz", + "integrity": "sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lerna/node_modules/glob": { + "version": "13.0.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-13.0.5.tgz", + "integrity": "sha512-BzXxZg24Ibra1pbQ/zE7Kys4Ua1ks7Bn6pKLkVPZ9FZe4JQS6/Q7ef3LG1H+k7lUf5l4T3PLSyYyYJVYUvfgTw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "minimatch": "^10.2.1", + "minipass": "^7.1.2", + "path-scurry": "^2.0.0" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/lerna/node_modules/glob/node_modules/balanced-match": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.2.tgz", + "integrity": "sha512-x0K50QvKQ97fdEz2kPehIerj+YTeptKF9hyYkKf6egnwmMWAkADiO0QCzSp0R5xN8FTZgYaBfSaue46Ej62nMg==", "dev": true, "license": "MIT", "dependencies": { - "glob": "^7.1.3", - "minimatch": "^9.0.3", - "webpack-merge": "^4.1.5" + "jackspeak": "^4.2.3" }, "engines": { - "node": ">= 18" - }, - "peerDependencies": { - "webpack": "^5.0.0" + "node": "20 || >=22" } }, - "node_modules/karma-webpack/node_modules/brace-expansion": { - "version": "2.0.1", + "node_modules/lerna/node_modules/glob/node_modules/brace-expansion": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.2.tgz", + "integrity": "sha512-Pdk8c9poy+YhOgVWw1JNN22/HcivgKWwpxKq04M/jTmHyCZn12WPJebZxdjSa5TmBqISrUSgNYU3eRORljfCCw==", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0" + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "20 || >=22" } }, - "node_modules/karma-webpack/node_modules/minimatch": { - "version": "9.0.3", + "node_modules/lerna/node_modules/glob/node_modules/minimatch": { + "version": "10.2.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz", + "integrity": "sha512-oRjTw/97aTBN0RHbYCdtF1MQfvusSIBQM0IZEgzl6426+8jSC0nF1a/GmnVLpfB9yyr6g6FTqWqiZVbxrtaCIg==", "dev": true, - "license": "ISC", + "license": "BlueOak-1.0.0", "dependencies": { - "brace-expansion": "^2.0.1" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=16 || 14 >=14.17" + "node": "18 || 20 || >=22" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/karma-webpack/node_modules/webpack-merge": { - "version": "4.2.2", + "node_modules/lerna/node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", "dev": true, "license": "MIT", "dependencies": { - "lodash": "^4.17.15" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/karma/node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/lerna/node_modules/is-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", "dev": true, "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "engines": { + "node": ">=8" } }, - "node_modules/karma/node_modules/tmp": { - "version": "0.2.1", + "node_modules/lerna/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { - "rimraf": "^3.0.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=8.17.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/keyv": { - "version": "4.5.3", + "node_modules/lerna/node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "license": "MIT", "dependencies": { - "json-buffer": "3.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/kind-of": { - "version": "6.0.3", + "node_modules/lerna/node_modules/minimatch": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.4.tgz", + "integrity": "sha512-twmL+S8+7yIsE9wsqgzU3E8/LumN3M3QELrBZ20OdmQ9jB2JvW5oZtBEmft84k/Gs5CG9mqtWc6Y9vW+JEzGxw==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=0.10.0" + "node": "*" } }, - "node_modules/kleur": { - "version": "3.0.3", + "node_modules/lerna/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/language-subtag-registry": { - "version": "0.3.22", - "dev": true, - "license": "CC0-1.0", - "peer": true - }, - "node_modules/language-tags": { - "version": "1.0.5", + "node_modules/lerna/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "language-subtag-registry": "~0.3.2" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/lerna": { - "version": "4.0.0", + "node_modules/lerna/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", - "dependencies": { - "@lerna/add": "4.0.0", - "@lerna/bootstrap": "4.0.0", - "@lerna/changed": "4.0.0", - "@lerna/clean": "4.0.0", - "@lerna/cli": "4.0.0", - "@lerna/create": "4.0.0", - "@lerna/diff": "4.0.0", - "@lerna/exec": "4.0.0", - "@lerna/import": "4.0.0", - "@lerna/info": "4.0.0", - "@lerna/init": "4.0.0", - "@lerna/link": "4.0.0", - "@lerna/list": "4.0.0", - "@lerna/publish": "4.0.0", - "@lerna/run": "4.0.0", - "@lerna/version": "4.0.0", - "import-local": "^3.0.2", - "npmlog": "^4.1.2" - }, - "bin": { - "lerna": "cli.js" - }, "engines": { - "node": ">= 10.18.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/lerna/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/lerna/node_modules/rimraf": { + "version": "6.1.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.1.3.tgz", + "integrity": "sha512-LKg+Cr2ZF61fkcaK1UdkH2yEBBKnYjTyWzTJT6KNPcSPaiT7HSdhtMXQuN5wkTX0Xu72KQ1l8S42rlmexS2hSA==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" }, "engines": { - "node": ">= 0.8.0" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/libnpmaccess": { - "version": "4.0.3", + "node_modules/lerna/node_modules/semver": { + "version": "7.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.2.tgz", + "integrity": "sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==", "dev": true, "license": "ISC", - "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/libnpmaccess/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/lerna/node_modules/tinyglobby": { + "version": "0.2.12", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", + "integrity": "sha512-qkf4trmKSIiMTs/E63cxH+ojC2unam7rJ0WrauAzpT3ECNTxGRMlaXxVbfxMUC/w0LaYk6jQ4y/nGR9uBO3tww==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "fdir": "^6.4.3", + "picomatch": "^4.0.2" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" } }, - "node_modules/libnpmaccess/node_modules/make-fetch-happen": { - "version": "9.1.0", + "node_modules/lerna/node_modules/write-file-atomic": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz", + "integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^4.0.1" }, "engines": { - "node": ">= 10" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/libnpmaccess/node_modules/npm-registry-fetch": { - "version": "11.0.0", + "node_modules/lerna/node_modules/write-file-atomic/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", "dev": true, "license": "ISC", - "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" - }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/libnpmaccess/node_modules/socks-proxy-agent": { - "version": "6.2.1", + "node_modules/lerna/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">= 10" + "node": ">=12" } }, - "node_modules/libnpmaccess/node_modules/yallist": { - "version": "4.0.0", + "node_modules/lerna/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": ">=12" + } }, - "node_modules/libnpmpublish": { - "version": "4.0.2", + "node_modules/leven": { + "version": "3.1.0", "dev": true, - "license": "ISC", - "dependencies": { - "normalize-package-data": "^3.0.2", - "npm-package-arg": "^8.1.2", - "npm-registry-fetch": "^11.0.0", - "semver": "^7.1.3", - "ssri": "^8.0.1" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/libnpmpublish/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/levn": { + "version": "0.4.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/libnpmpublish/node_modules/make-fetch-happen": { - "version": "9.1.0", + "node_modules/libnpmaccess": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/libnpmaccess/-/libnpmaccess-10.0.3.tgz", + "integrity": "sha512-JPHTfWJxIK+NVPdNMNGnkz4XGX56iijPbe0qFWbdt68HL+kIvSzh+euBL8npLZvl2fpaxo+1eZSdoG15f5YdIQ==", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0" }, "engines": { - "node": ">= 10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/libnpmpublish/node_modules/npm-registry-fetch": { - "version": "11.0.0", + "node_modules/libnpmpublish": { + "version": "11.1.2", + "resolved": "https://registry.npmjs.org/libnpmpublish/-/libnpmpublish-11.1.2.tgz", + "integrity": "sha512-tNcU3cLH7toloAzhOOrBDhjzgbxpyuYvkf+BPPnnJCdc5EIcdJ8JcT+SglvCQKKyZ6m9dVXtCVlJcA6csxKdEA==", "dev": true, "license": "ISC", "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "@npmcli/package-json": "^7.0.0", + "ci-info": "^4.0.0", + "npm-package-arg": "^13.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.7", + "sigstore": "^4.0.0", + "ssri": "^12.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/libnpmpublish/node_modules/socks-proxy-agent": { - "version": "6.2.1", + "node_modules/libnpmpublish/node_modules/ci-info": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.4.0.tgz", + "integrity": "sha512-77PSwercCZU2Fc4sX94eF8k8Pxte6JAwL4/ICZLFjJLqegs7kCuAsqqj/70NQF6TvDpgFjkubQB2FW2ZZddvQg==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", - "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" - }, "engines": { - "node": ">= 10" + "node": ">=8" } }, - "node_modules/libnpmpublish/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/lines-and-columns": { "version": "1.2.4", "dev": true, @@ -9440,15 +12167,16 @@ }, "node_modules/linkify-it": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", - "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", "dev": true, + "license": "MIT", "dependencies": { "uc.micro": "^2.0.0" } }, "node_modules/load-json-file": { "version": "6.2.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", "dev": true, "license": "MIT", "dependencies": { @@ -9463,6 +12191,8 @@ }, "node_modules/load-json-file/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9470,11 +12200,17 @@ } }, "node_modules/loader-runner": { - "version": "4.3.0", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/loader-runner/-/loader-runner-4.3.1.tgz", + "integrity": "sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==", "dev": true, "license": "MIT", "engines": { "node": ">=6.11.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, "node_modules/locate-path": { @@ -9492,17 +12228,16 @@ } }, "node_modules/lodash": { - "version": "4.17.21", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash._reinterpolate": { - "version": "3.0.0", + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", "dev": true, "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", "dev": true, "license": "MIT" }, @@ -9516,21 +12251,21 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.template": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lodash._reinterpolate": "^3.0.0", - "lodash.templatesettings": "^4.0.0" - } - }, - "node_modules/lodash.templatesettings": { - "version": "4.2.0", + "node_modules/log-symbols": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "dev": true, "license": "MIT", "dependencies": { - "lodash._reinterpolate": "^3.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/log4js": { @@ -9552,6 +12287,7 @@ "version": "1.4.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { "js-tokens": "^3.0.0 || ^4.0.0" }, @@ -9559,14 +12295,6 @@ "loose-envify": "cli.js" } }, - "node_modules/loupe": { - "version": "2.3.6", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.0" - } - }, "node_modules/lru-cache": { "version": "5.1.1", "dev": true, @@ -9600,46 +12328,28 @@ "license": "ISC" }, "node_modules/make-fetch-happen": { - "version": "8.0.14", + "version": "15.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-15.0.2.tgz", + "integrity": "sha512-sI1NY4lWlXBAfjmCtVWIIpBypbBdhHtcjnwnv+gtCnsaOffyFil3aidszGC8hgzJe+fT1qix05sWxmD/Bmf/oQ==", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.0.5", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", + "@npmcli/agent": "^4.0.0", + "cacache": "^20.0.1", + "http-cache-semantics": "^4.1.1", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", "minipass-flush": "^1.0.5", "minipass-pipeline": "^1.2.4", + "negotiator": "^1.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "socks-proxy-agent": "^5.0.0", - "ssri": "^8.0.0" - }, - "engines": { - "node": ">= 10" - } - }, - "node_modules/make-fetch-happen/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "ssri": "^12.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/make-fetch-happen/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/makeerror": { "version": "1.0.12", "dev": true, @@ -9650,6 +12360,8 @@ }, "node_modules/map-obj": { "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, "license": "MIT", "engines": { @@ -9661,9 +12373,8 @@ }, "node_modules/markdown-it": { "version": "14.1.0", - "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", - "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1", "entities": "^4.4.0", @@ -9676,32 +12387,18 @@ "markdown-it": "bin/markdown-it.mjs" } }, - "node_modules/mdast-util-to-hast": { - "version": "13.2.0", - "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-13.2.0.tgz", - "integrity": "sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==", + "node_modules/math-intrinsics": { + "version": "1.1.0", "dev": true, - "dependencies": { - "@types/hast": "^3.0.0", - "@types/mdast": "^4.0.0", - "@ungap/structured-clone": "^1.0.0", - "devlop": "^1.0.0", - "micromark-util-sanitize-uri": "^2.0.0", - "trim-lines": "^3.0.0", - "unist-util-position": "^5.0.0", - "unist-util-visit": "^5.0.0", - "vfile": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, "node_modules/mdurl": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", - "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/media-typer": { "version": "0.3.0", @@ -9720,6 +12417,8 @@ }, "node_modules/meow": { "version": "8.1.2", + "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9744,6 +12443,8 @@ }, "node_modules/meow/node_modules/find-up": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", "dev": true, "license": "MIT", "dependencies": { @@ -9756,11 +12457,15 @@ }, "node_modules/meow/node_modules/hosted-git-info": { "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true, "license": "ISC" }, "node_modules/meow/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { @@ -9772,6 +12477,8 @@ }, "node_modules/meow/node_modules/p-limit": { "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "license": "MIT", "dependencies": { @@ -9786,6 +12493,8 @@ }, "node_modules/meow/node_modules/p-locate": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", "dev": true, "license": "MIT", "dependencies": { @@ -9797,6 +12506,8 @@ }, "node_modules/meow/node_modules/read-pkg": { "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "license": "MIT", "dependencies": { @@ -9811,6 +12522,8 @@ }, "node_modules/meow/node_modules/read-pkg-up": { "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "license": "MIT", "dependencies": { @@ -9827,6 +12540,8 @@ }, "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9835,6 +12550,8 @@ }, "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -9846,6 +12563,8 @@ }, "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9854,6 +12573,8 @@ }, "node_modules/meow/node_modules/semver": { "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { @@ -9862,6 +12583,8 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -9878,107 +12601,20 @@ }, "node_modules/merge2": { "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", "dev": true, "license": "MIT", "engines": { "node": ">= 8" } }, - "node_modules/micromark-util-character": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/micromark-util-character/-/micromark-util-character-2.1.0.tgz", - "integrity": "sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-symbol": "^2.0.0", - "micromark-util-types": "^2.0.0" - } - }, - "node_modules/micromark-util-encode": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-encode/-/micromark-util-encode-2.0.0.tgz", - "integrity": "sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-sanitize-uri": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-sanitize-uri/-/micromark-util-sanitize-uri-2.0.0.tgz", - "integrity": "sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ], - "dependencies": { - "micromark-util-character": "^2.0.0", - "micromark-util-encode": "^2.0.0", - "micromark-util-symbol": "^2.0.0" - } - }, - "node_modules/micromark-util-symbol": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-symbol/-/micromark-util-symbol-2.0.0.tgz", - "integrity": "sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, - "node_modules/micromark-util-types": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/micromark-util-types/-/micromark-util-types-2.0.0.tgz", - "integrity": "sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==", - "dev": true, - "funding": [ - { - "type": "GitHub Sponsors", - "url": "https://github.com/sponsors/unifiedjs" - }, - { - "type": "OpenCollective", - "url": "https://opencollective.com/unified" - } - ] - }, "node_modules/micromatch": { - "version": "4.0.5", + "version": "4.0.8", "dev": true, "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -10025,6 +12661,8 @@ }, "node_modules/min-indent": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, "license": "MIT", "engines": { @@ -10032,14 +12670,19 @@ } }, "node_modules/minimatch": { - "version": "3.1.2", + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.9.tgz", + "integrity": "sha512-OBwBN9AL4dqmETlpS2zasx+vTeWclWzkblfZk7KTA5j3jeOONz/tRCnZomUyvNg83wL5Zv9Ss6HMJXAgL8R2Yg==", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "brace-expansion": "^2.0.2" }, "engines": { - "node": "*" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/minimist": { @@ -10052,6 +12695,8 @@ }, "node_modules/minimist-options": { "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "license": "MIT", "dependencies": { @@ -10064,45 +12709,50 @@ } }, "node_modules/minipass": { - "version": "3.3.6", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.3.tgz", + "integrity": "sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==", "dev": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-collect": { - "version": "1.0.2", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/minipass-collect/-/minipass-collect-2.0.1.tgz", + "integrity": "sha512-D7V8PO9oaz7PWGLbCACuI1qEOsq7UKfLotx/C0Aet43fCUB/wfQ7DYeq2oR/svFJGYDHPr38SHATeaj/ZoKHKw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "minipass": "^7.0.3" }, "engines": { - "node": ">= 8" + "node": ">=16 || 14 >=14.17" } }, "node_modules/minipass-fetch": { - "version": "1.4.1", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/minipass-fetch/-/minipass-fetch-4.0.1.tgz", + "integrity": "sha512-j7U11C5HXigVuutxebFadoYBbd7VSdZWggSe64NVdvWNBqGAiXPL2QVCehjmw7lY1oF9gOllYbORh+hiNgfPgQ==", "dev": true, "license": "MIT", "dependencies": { - "minipass": "^3.1.0", + "minipass": "^7.0.3", "minipass-sized": "^1.0.3", - "minizlib": "^2.0.0" + "minizlib": "^3.0.1" }, "engines": { - "node": ">=8" + "node": "^18.17.0 || >=20.5.0" }, "optionalDependencies": { - "encoding": "^0.1.12" + "encoding": "^0.1.13" } }, "node_modules/minipass-flush": { "version": "1.0.5", + "resolved": "https://registry.npmjs.org/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", "dev": true, "license": "ISC", "dependencies": { @@ -10112,17 +12762,30 @@ "node": ">= 8" } }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, "node_modules/minipass-pipeline": { "version": "1.2.4", + "resolved": "https://registry.npmjs.org/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", "dev": true, "license": "ISC", "dependencies": { @@ -10132,58 +12795,78 @@ "node": ">=8" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/minipass/node_modules/yallist": { + "node_modules/minipass-pipeline/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, - "node_modules/minizlib": { - "version": "2.1.2", + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.3.6", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.3.6.tgz", + "integrity": "sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==", + "dev": true, + "license": "ISC", "dependencies": { - "minipass": "^3.0.0", "yallist": "^4.0.0" }, "engines": { - "node": ">= 8" + "node": ">=8" } }, - "node_modules/minizlib/node_modules/yallist": { + "node_modules/minipass-sized/node_modules/yallist": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true, "license": "ISC" }, - "node_modules/mkdirp": { - "version": "1.0.4", + "node_modules/minizlib": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.1.0.tgz", + "integrity": "sha512-KZxYo1BUkWD2TVFLr0MQoM8vUUigWD3LlD83a/75BqC+4qE0Hb1Vo5v1FgcfaNXvfXzr+5EhQ6ing/CaBijTlw==", "dev": true, "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "dependencies": { + "minipass": "^7.1.2" }, "engines": { - "node": ">=10" + "node": ">= 18" } }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", + "node_modules/mkdirp": { + "version": "1.0.4", "dev": true, - "license": "ISC", - "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" }, "engines": { "node": ">=10" @@ -10191,6 +12874,8 @@ }, "node_modules/modify-values": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, "license": "MIT", "engines": { @@ -10198,7 +12883,7 @@ } }, "node_modules/mrmime": { - "version": "1.0.1", + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { @@ -10206,12 +12891,14 @@ } }, "node_modules/ms": { - "version": "2.1.2", + "version": "2.1.3", "dev": true, "license": "MIT" }, "node_modules/multimatch": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", "dev": true, "license": "MIT", "dependencies": { @@ -10230,29 +12917,71 @@ }, "node_modules/multimatch/node_modules/arrify": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/multimatch/node_modules/brace-expansion": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.12.tgz", + "integrity": "sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/mute-stream": { - "version": "0.0.8", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, - "license": "ISC" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/natural-compare": { - "version": "1.4.0", + "node_modules/napi-postinstall": { + "version": "0.3.2", "dev": true, - "license": "MIT" + "license": "MIT", + "bin": { + "napi-postinstall": "lib/cli.js" + }, + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/napi-postinstall" + } }, - "node_modules/natural-compare-lite": { + "node_modules/natural-compare": { "version": "1.4.0", "dev": true, "license": "MIT" }, "node_modules/negotiator": { - "version": "0.6.3", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", "dev": true, "license": "MIT", "engines": { @@ -10269,154 +12998,91 @@ "dev": true, "license": "MIT" }, - "node_modules/node-fetch": { - "version": "2.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "whatwg-url": "^5.0.0" - }, - "engines": { - "node": "4.x || >=6.0.0" - }, - "peerDependencies": { - "encoding": "^0.1.0" - }, - "peerDependenciesMeta": { - "encoding": { - "optional": true - } - } - }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-gyp": { - "version": "5.1.1", + "version": "12.2.0", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-12.2.0.tgz", + "integrity": "sha512-q23WdzrQv48KozXlr0U1v9dwO/k59NHeSzn6loGcasyf0UnSrtzs8kRxM+mfwJSf0DkX0s43hcqgnSO4/VNthQ==", "dev": true, "license": "MIT", "dependencies": { "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.2", - "mkdirp": "^0.5.1", - "nopt": "^4.0.1", - "npmlog": "^4.1.2", - "request": "^2.88.0", - "rimraf": "^2.6.3", - "semver": "^5.7.1", - "tar": "^4.4.12", - "which": "^1.3.1" + "exponential-backoff": "^3.1.1", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^15.0.0", + "nopt": "^9.0.0", + "proc-log": "^6.0.0", + "semver": "^7.3.5", + "tar": "^7.5.4", + "tinyglobby": "^0.2.12", + "which": "^6.0.0" }, "bin": { "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/node-gyp/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC" - }, - "node_modules/node-gyp/node_modules/fs-minipass": { - "version": "1.2.7", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^2.6.0" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/minipass": { - "version": "2.9.0", + "node_modules/node-gyp/node_modules/abbrev": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-4.0.0.tgz", + "integrity": "sha512-a1wflyaL0tHtJSmLSOVybYhy22vRih4eduhhrkcjgrWGnRfrZtovJ2FRjxuTtkkj47O/baf0R86QU5OuYpz8fA==", "dev": true, "license": "ISC", - "dependencies": { - "safe-buffer": "^5.1.2", - "yallist": "^3.0.0" - } - }, - "node_modules/node-gyp/node_modules/minizlib": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "minipass": "^2.9.0" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/mkdirp": { - "version": "0.5.6", + "node_modules/node-gyp/node_modules/isexe": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-4.0.0.tgz", + "integrity": "sha512-FFUtZMpoZ8RqHS3XeXEmHWLA4thH+ZxCv2lOiPIn1Xc7CxrqhWzNSDzD+/chS/zbYezmiwWLdQC09JdQKmthOw==", "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=20" } }, - "node_modules/node-gyp/node_modules/rimraf": { - "version": "2.7.1", + "node_modules/node-gyp/node_modules/nopt": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-9.0.0.tgz", + "integrity": "sha512-Zhq3a+yFKrYwSBluL4H9XP3m3y5uvQkB/09CwDruCiRmR/UJYnn9W4R48ry0uGC70aeTPKLynBtscP9efFFcPw==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.3" + "abbrev": "^4.0.0" }, "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/node-gyp/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/node-gyp/node_modules/tar": { - "version": "4.4.19", + "node_modules/node-gyp/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", - "dependencies": { - "chownr": "^1.1.4", - "fs-minipass": "^1.2.7", - "minipass": "^2.9.0", - "minizlib": "^1.3.3", - "mkdirp": "^0.5.5", - "safe-buffer": "^5.2.1", - "yallist": "^3.1.1" - }, "engines": { - "node": ">=4.5" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/node-gyp/node_modules/which": { - "version": "1.3.1", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/which/-/which-6.0.1.tgz", + "integrity": "sha512-oGLe46MIrCRqX7ytPUf66EAYvdeMIZYn3WaocqqKZAxrBpkqHfL/qvTyJ/bTk5+AqHCjXmrv3CEWgy368zhRUg==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "isexe": "^4.0.0" }, "bin": { - "which": "bin/which" + "node-which": "bin/which.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/node-int64": { @@ -10424,8 +13090,17 @@ "dev": true, "license": "MIT" }, + "node_modules/node-machine-id": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/node-machine-id/-/node-machine-id-1.1.12.tgz", + "integrity": "sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==", + "dev": true, + "license": "MIT" + }, "node_modules/node-releases": { - "version": "2.0.14", + "version": "2.0.27", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.27.tgz", + "integrity": "sha512-nmh3lCkYZ3grZvqcCH+fjmQ7X+H0OeZgP40OierEaAptX4XofMh5kwNbWh7lBduUzCcV/8kZ+NDLCwm2iorIlA==", "dev": true, "license": "MIT" }, @@ -10460,19 +13135,25 @@ "license": "MIT" }, "node_modules/nopt": { - "version": "4.0.3", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-8.1.0.tgz", + "integrity": "sha512-ieGu42u/Qsa4TFktmaKEwM6MQH0pOWnaB3htzh0JRtx84+Mebc0cbZYN5bC+6WTZ4+77xrL9Pn5m7CV6VIkV7A==", "dev": true, "license": "ISC", "dependencies": { - "abbrev": "1", - "osenv": "^0.1.4" + "abbrev": "^3.0.0" }, "bin": { "nopt": "bin/nopt.js" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/normalize-package-data": { "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -10485,149 +13166,181 @@ "node": ">=10" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/normalize-package-data/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^6.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/normalize-url": { - "version": "6.1.0", + "node_modules/normalize-package-data/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/normalize-package-data/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true, + "license": "ISC" + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, "node_modules/npm-bundled": { - "version": "1.1.2", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-4.0.0.tgz", + "integrity": "sha512-IxaQZDMsqfQ2Lz37VvyyEtKLe8FsRZuysmedy/N06TU1RyVppYKXrO4xIhR0F+7ubIBox6Q7nir6fQI3ej39iA==", "dev": true, "license": "ISC", "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "npm-normalize-package-bin": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/npm-install-checks": { - "version": "4.0.0", + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-7.1.2.tgz", + "integrity": "sha512-z9HJBCYw9Zr8BqXcllKIs5nI+QggAImbBdHphOzVYrz2CB4iQ6FzWyKmlqDZua+51nAu7FcemlbTc9VgQN5XDQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-lifecycle": { - "version": "3.1.5", + "node_modules/npm-normalize-package-bin": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-4.0.0.tgz", + "integrity": "sha512-TZKxPvItzai9kN9H/TkmCtx/ZN/hvr3vUycjlfmH0ootY9yFBzNOpiXAdIn1Iteqsvk4lQn6B5PTrt+n6h8k/w==", "dev": true, - "license": "Artistic-2.0", - "dependencies": { - "byline": "^5.0.0", - "graceful-fs": "^4.1.15", - "node-gyp": "^5.0.2", - "resolve-from": "^4.0.0", - "slide": "^1.1.6", - "uid-number": "0.0.6", - "umask": "^1.1.0", - "which": "^1.3.1" + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/npm-lifecycle/node_modules/which": { - "version": "1.3.1", + "node_modules/npm-package-arg": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-13.0.1.tgz", + "integrity": "sha512-6zqls5xFvJbgFjB1B2U6yITtyGBjDBORB7suI4zA4T/sZ1OmkMFlaQSNB/4K0LtXNA1t4OprAFxPisadK5O2ag==", "dev": true, "license": "ISC", "dependencies": { - "isexe": "^2.0.0" + "hosted-git-info": "^9.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/npm-package-arg": { - "version": "8.1.5", + "node_modules/npm-packlist": { + "version": "10.0.3", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-10.0.3.tgz", + "integrity": "sha512-zPukTwJMOu5X5uvm0fztwS5Zxyvmk38H/LfidkOMt3gbZVCyro2cD/ETzwzVPcWZA3JOyPznfUN/nkyFiyUbxg==", "dev": true, "license": "ISC", "dependencies": { - "hosted-git-info": "^4.0.1", - "semver": "^7.3.4", - "validate-npm-package-name": "^3.0.0" + "ignore-walk": "^8.0.0", + "proc-log": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-packlist": { - "version": "2.2.2", + "node_modules/npm-packlist/node_modules/proc-log": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-6.1.0.tgz", + "integrity": "sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==", "dev": true, "license": "ISC", - "dependencies": { - "glob": "^7.1.6", - "ignore-walk": "^3.0.3", - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" - }, - "bin": { - "npm-packlist": "bin/index.js" - }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/npm-pick-manifest": { - "version": "6.1.1", + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-11.0.3.tgz", + "integrity": "sha512-buzyCfeoGY/PxKqmBqn1IUJrZnUi1VVJTdSSRPGI60tJdUhUoSQFhs0zycJokDdOznQentgrpf8LayEHyyYlqQ==", "dev": true, "license": "ISC", "dependencies": { - "npm-install-checks": "^4.0.0", - "npm-normalize-package-bin": "^1.0.1", - "npm-package-arg": "^8.1.2", - "semver": "^7.3.4" + "npm-install-checks": "^8.0.0", + "npm-normalize-package-bin": "^5.0.0", + "npm-package-arg": "^13.0.0", + "semver": "^7.3.5" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch": { - "version": "9.0.0", + "node_modules/npm-pick-manifest/node_modules/npm-install-checks": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/npm-install-checks/-/npm-install-checks-8.0.0.tgz", + "integrity": "sha512-ScAUdMpyzkbpxoNekQ3tNRdFI8SJ86wgKZSQZdUxT+bj0wVFpsEMWnkXP0twVe1gJyNF5apBWDJhhIbgrIViRA==", "dev": true, - "license": "ISC", + "license": "BSD-2-Clause", "dependencies": { - "@npmcli/ci-detect": "^1.0.0", - "lru-cache": "^6.0.0", - "make-fetch-happen": "^8.0.9", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "semver": "^7.1.1" }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-5.0.0.tgz", + "integrity": "sha512-CJi3OS4JLsNMmr2u07OJlhcrPxCeOeP/4xq67aWNai6TNWWbTrlNDgl8NcFKVlcBKp18GPj+EzbNIgrBfZhsag==", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, "engines": { - "node": ">=10" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/npm-registry-fetch/node_modules/yallist": { - "version": "4.0.0", + "node_modules/npm-registry-fetch": { + "version": "19.1.0", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-19.1.0.tgz", + "integrity": "sha512-xyZLfs7TxPu/WKjHUs0jZOPinzBAI32kEUel6za0vH+JUTnFZ5zbHI1ZoGZRDm6oMjADtrli6FxtMlk/5ABPNw==", "dev": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "@npmcli/redact": "^3.0.0", + "jsonparse": "^1.3.1", + "make-fetch-happen": "^15.0.0", + "minipass": "^7.0.2", + "minipass-fetch": "^4.0.0", + "minizlib": "^3.0.1", + "npm-package-arg": "^13.0.0", + "proc-log": "^5.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } }, "node_modules/npm-run-all": { "version": "4.1.5", @@ -10660,160 +13373,443 @@ "dependencies": { "color-convert": "^1.9.0" }, - "engines": { - "node": ">=4" + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm-run-all/node_modules/chalk": { + "version": "2.4.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/color-convert": { + "version": "1.9.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/npm-run-all/node_modules/color-name": { + "version": "1.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/npm-run-all/node_modules/cross-spawn": { + "version": "6.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/npm-run-all/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/npm-run-all/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/npm-run-all/node_modules/path-key": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/npm-run-all/node_modules/shebang-command": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/shebang-regex": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/npm-run-all/node_modules/supports-color": { + "version": "5.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-run-all/node_modules/which": { + "version": "1.3.1", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/npm-run-path": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/nx": { + "version": "22.5.3", + "resolved": "https://registry.npmjs.org/nx/-/nx-22.5.3.tgz", + "integrity": "sha512-IaEPqdgaFBIr0Bfmnt6WAcX3t660sOuDXQ71lpoS8GgpD8cqX1LIW2ZyzEAdOvCP1iD6HCZehpofcVvaaL1GNQ==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@napi-rs/wasm-runtime": "0.2.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "3.0.2", + "@zkochan/js-yaml": "0.0.7", + "axios": "^1.12.0", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^8.0.1", + "dotenv": "~16.4.5", + "dotenv-expand": "~11.0.6", + "ejs": "^3.1.7", + "enquirer": "~2.3.6", + "figures": "3.2.0", + "flat": "^5.0.2", + "front-matter": "^4.0.2", + "ignore": "^7.0.5", + "jest-diff": "^30.0.2", + "jsonc-parser": "3.2.0", + "lines-and-columns": "2.0.3", + "minimatch": "10.2.1", + "node-machine-id": "1.1.12", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "ora": "5.3.0", + "picocolors": "^1.1.0", + "resolve.exports": "2.0.3", + "semver": "^7.6.3", + "string-width": "^4.2.3", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tree-kill": "^1.2.2", + "tsconfig-paths": "^4.1.2", + "tslib": "^2.3.0", + "yaml": "^2.6.0", + "yargs": "^17.6.2", + "yargs-parser": "21.1.1" + }, + "bin": { + "nx": "bin/nx.js", + "nx-cloud": "bin/nx-cloud.js" + }, + "optionalDependencies": { + "@nx/nx-darwin-arm64": "22.5.3", + "@nx/nx-darwin-x64": "22.5.3", + "@nx/nx-freebsd-x64": "22.5.3", + "@nx/nx-linux-arm-gnueabihf": "22.5.3", + "@nx/nx-linux-arm64-gnu": "22.5.3", + "@nx/nx-linux-arm64-musl": "22.5.3", + "@nx/nx-linux-x64-gnu": "22.5.3", + "@nx/nx-linux-x64-musl": "22.5.3", + "@nx/nx-win32-arm64-msvc": "22.5.3", + "@nx/nx-win32-x64-msvc": "22.5.3" + }, + "peerDependencies": { + "@swc-node/register": "^1.11.1", + "@swc/core": "^1.15.8" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/npm-run-all/node_modules/chalk": { - "version": "2.4.2", + "node_modules/nx/node_modules/@jest/schemas": { + "version": "30.0.5", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-30.0.5.tgz", + "integrity": "sha512-DmdYgtezMkh3cpU8/1uyXakv3tJRcmcXxBOcO0tbaozPwpmh4YMsnWrQm9ZmZMfa5ocbxzbFk6O4bDPEc/iAnA==", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@sinclair/typebox": "^0.34.0" }, "engines": { - "node": ">=4" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/npm-run-all/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/nx/node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz", + "integrity": "sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==", "dev": true, "license": "MIT", "dependencies": { - "color-name": "1.1.3" + "@emnapi/core": "^1.1.0", + "@emnapi/runtime": "^1.1.0", + "@tybys/wasm-util": "^0.9.0" } }, - "node_modules/npm-run-all/node_modules/color-name": { - "version": "1.1.3", + "node_modules/nx/node_modules/@sinclair/typebox": { + "version": "0.34.48", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.34.48.tgz", + "integrity": "sha512-kKJTNuK3AQOrgjjotVxMrCn1sUJwM76wMszfq1kdU4uYVJjvEWuFQ6HgvLt4Xz3fSmZlTOxJ/Ie13KnIcWQXFA==", "dev": true, "license": "MIT" }, - "node_modules/npm-run-all/node_modules/cross-spawn": { - "version": "6.0.5", + "node_modules/nx/node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, "license": "MIT", "dependencies": { - "nice-try": "^1.0.4", - "path-key": "^2.0.1", - "semver": "^5.5.0", - "shebang-command": "^1.2.0", - "which": "^1.2.9" - }, - "engines": { - "node": ">=4.8" + "tslib": "^2.4.0" } }, - "node_modules/npm-run-all/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/nx/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm-run-all/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/nx/node_modules/balanced-match": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-4.0.4.tgz", + "integrity": "sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": "18 || 20 || >=22" } }, - "node_modules/npm-run-all/node_modules/path-key": { - "version": "2.0.1", + "node_modules/nx/node_modules/brace-expansion": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-5.0.4.tgz", + "integrity": "sha512-h+DEnpVvxmfVefa4jFbCf5HdH5YMDXRsmKflpf1pILZWRFlTbJpxeU55nJl4Smt5HQaGzg1o6RHFPJaOqnmBDg==", "dev": true, "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, "engines": { - "node": ">=4" + "node": "18 || 20 || >=22" } }, - "node_modules/npm-run-all/node_modules/semver": { - "version": "5.7.2", + "node_modules/nx/node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver" + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, - "node_modules/npm-run-all/node_modules/shebang-command": { - "version": "1.2.0", + "node_modules/nx/node_modules/ignore": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz", + "integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/nx/node_modules/jest-diff": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/jest-diff/-/jest-diff-30.2.0.tgz", + "integrity": "sha512-dQHFo3Pt4/NLlG5z4PxZ/3yZTZ1C7s9hveiOj+GCN+uT109NC2QgsoVZsVOAvbJ3RgKkvyLGXZV9+piDpWbm6A==", "dev": true, "license": "MIT", "dependencies": { - "shebang-regex": "^1.0.0" + "@jest/diff-sequences": "30.0.1", + "@jest/get-type": "30.1.0", + "chalk": "^4.1.2", + "pretty-format": "30.2.0" }, "engines": { - "node": ">=0.10.0" + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/npm-run-all/node_modules/shebang-regex": { - "version": "1.0.0", + "node_modules/nx/node_modules/lines-and-columns": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-2.0.3.tgz", + "integrity": "sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/npm-run-all/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/nx/node_modules/minimatch": { + "version": "10.2.1", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.2.1.tgz", + "integrity": "sha512-MClCe8IL5nRRmawL6ib/eT4oLyeKMGCghibcDWK+J0hh0Q8kqSdia6BvbRMVk6mPa6WqUa5uR2oxt6C5jd533A==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "dependencies": { - "has-flag": "^3.0.0" + "brace-expansion": "^5.0.2" }, "engines": { - "node": ">=4" + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/npm-run-all/node_modules/which": { - "version": "1.3.1", + "node_modules/nx/node_modules/pretty-format": { + "version": "30.2.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-30.2.0.tgz", + "integrity": "sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" + "@jest/schemas": "30.0.5", + "ansi-styles": "^5.2.0", + "react-is": "^18.3.1" }, - "bin": { - "which": "bin/which" + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/nx/node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", "dev": true, "license": "MIT", - "dependencies": { - "path-key": "^3.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/npmlog": { - "version": "4.1.2", + "node_modules/nx/node_modules/tsconfig-paths": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz", + "integrity": "sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "are-we-there-yet": "~1.1.2", - "console-control-strings": "~1.1.0", - "gauge": "~2.7.3", - "set-blocking": "~2.0.0" + "json5": "^2.2.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=6" } }, - "node_modules/number-is-nan": { - "version": "1.0.1", + "node_modules/nx/node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "license": "MIT", + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/oauth-sign": { - "version": "0.9.0", + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "engines": { - "node": "*" + "node": ">=12" } }, "node_modules/object-assign": { @@ -10825,9 +13821,12 @@ } }, "node_modules/object-inspect": { - "version": "1.13.1", + "version": "1.13.4", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10841,14 +13840,15 @@ } }, "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", + "version": "4.1.7", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", "object-keys": "^1.1.1" }, "engines": { @@ -10859,13 +13859,15 @@ } }, "node_modules/object.entries": { - "version": "1.1.7", + "version": "1.1.9", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.1" }, "engines": { "node": ">= 0.4" @@ -10873,9 +13875,8 @@ }, "node_modules/object.fromentries": { "version": "2.0.8", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.8.tgz", - "integrity": "sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10889,29 +13890,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/object.getownpropertydescriptors": { - "version": "2.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "array.prototype.reduce": "^1.0.6", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "safe-array-concat": "^1.0.0" - }, - "engines": { - "node": ">= 0.8" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.groupby": { "version": "1.0.3", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.3.tgz", - "integrity": "sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -10921,26 +13903,13 @@ "node": ">= 0.4" } }, - "node_modules/object.hasown": { - "version": "1.1.3", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/object.values": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.2.0.tgz", - "integrity": "sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ==", + "version": "1.2.1", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, @@ -10984,16 +13953,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/oniguruma-to-js": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/oniguruma-to-js/-/oniguruma-to-js-0.4.3.tgz", - "integrity": "sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==", + "node_modules/open": { + "version": "8.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-8.4.2.tgz", + "integrity": "sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==", "dev": true, + "license": "MIT", "dependencies": { - "regex": "^4.3.2" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/opener": { @@ -11005,48 +13980,64 @@ } }, "node_modules/optionator": { - "version": "0.9.3", + "version": "0.9.4", "dev": true, "license": "MIT", "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" } }, - "node_modules/os-homedir": { - "version": "1.0.2", + "node_modules/ora": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.3.0.tgz", + "integrity": "sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==", "dev": true, "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "log-symbols": "^4.0.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", + "node_modules/own-keys": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/osenv": { - "version": "0.1.5", - "dev": true, - "license": "ISC", "dependencies": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/p-finally": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", "dev": true, "license": "MIT", "engines": { @@ -11083,6 +14074,8 @@ }, "node_modules/p-map": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11097,6 +14090,8 @@ }, "node_modules/p-map-series": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", "dev": true, "license": "MIT", "engines": { @@ -11105,6 +14100,8 @@ }, "node_modules/p-pipe": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", "dev": true, "license": "MIT", "engines": { @@ -11116,6 +14113,8 @@ }, "node_modules/p-queue": { "version": "6.6.2", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11129,13 +14128,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue/node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, "node_modules/p-reduce": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, "license": "MIT", "engines": { @@ -11144,6 +14140,8 @@ }, "node_modules/p-timeout": { "version": "3.2.0", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", "dev": true, "license": "MIT", "dependencies": { @@ -11163,6 +14161,8 @@ }, "node_modules/p-waterfall": { "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", "dev": true, "license": "MIT", "dependencies": { @@ -11175,118 +14175,208 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true, + "license": "BlueOak-1.0.0" + }, "node_modules/pacote": { - "version": "11.3.5", - "dev": true, - "license": "ISC", - "dependencies": { - "@npmcli/git": "^2.1.0", - "@npmcli/installed-package-contents": "^1.0.6", - "@npmcli/promise-spawn": "^1.2.0", - "@npmcli/run-script": "^1.8.2", - "cacache": "^15.0.5", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.3", - "mkdirp": "^1.0.3", - "npm-package-arg": "^8.0.1", - "npm-packlist": "^2.1.4", - "npm-pick-manifest": "^6.0.0", - "npm-registry-fetch": "^11.0.0", + "version": "21.0.1", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-21.0.1.tgz", + "integrity": "sha512-LHGIUQUrcDIJUej53KJz1BPvUuHrItrR2yrnN0Kl9657cJ0ZT6QJHk9wWPBnQZhYT5KLyZWrk9jaYc2aKDu4yw==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/git": "^6.0.0", + "@npmcli/installed-package-contents": "^3.0.0", + "@npmcli/package-json": "^7.0.0", + "@npmcli/promise-spawn": "^8.0.0", + "@npmcli/run-script": "^10.0.0", + "cacache": "^20.0.0", + "fs-minipass": "^3.0.0", + "minipass": "^7.0.2", + "npm-package-arg": "^13.0.0", + "npm-packlist": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "npm-registry-fetch": "^19.0.0", + "proc-log": "^5.0.0", "promise-retry": "^2.0.1", - "read-package-json-fast": "^2.0.1", - "rimraf": "^3.0.2", - "ssri": "^8.0.1", - "tar": "^6.1.0" + "sigstore": "^4.0.0", + "ssri": "^12.0.0", + "tar": "^7.4.3" }, "bin": { - "pacote": "lib/bin.js" + "pacote": "bin/index.js" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, + "node_modules/pacote/node_modules/@npmcli/git": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/git/-/git-6.0.3.tgz", + "integrity": "sha512-GUYESQlxZRAdhs3UhbB6pVRNUELQOHXwK9ruDkwmCv2aZ5y0SApQzUJCg02p3A7Ue2J5hxvlk1YI53c00NmRyQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^8.0.0", + "ini": "^5.0.0", + "lru-cache": "^10.0.1", + "npm-pick-manifest": "^10.0.0", + "proc-log": "^5.0.0", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/pacote/node_modules/@npmcli/promise-spawn": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/@npmcli/promise-spawn/-/promise-spawn-8.0.3.tgz", + "integrity": "sha512-Yb00SWaL4F8w+K8YGhQ55+xE4RUNdMHV43WZGsiTM92gS+lC0mGsn7I4hLug7pbao035S6bj3Y3w0cUNGLfmkg==", + "dev": true, + "license": "ISC", + "dependencies": { + "which": "^5.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-8.1.0.tgz", + "integrity": "sha512-Rw/B2DNQaPBICNXEm8balFz9a6WpZrkCGpcWFpy7nCj+NyhSdqXipmfvtmWt9xGfp0wZnBxB+iVpLmQMYt47Tw==", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/pacote/node_modules/ini": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ini/-/ini-5.0.0.tgz", + "integrity": "sha512-+N0ngpO3e7cRUWOJAS7qw0IZIVc6XPrW4MlFBdD066F2L4k1L6ker3hLqSq7iXxU5tgS4WGkIUElWn5vogAEnw==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/pacote/node_modules/isexe": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-3.1.5.tgz", + "integrity": "sha512-6B3tLtFqtQS4ekarvLVMZ+X+VlvQekbe4taUkf/rhVO3d/h0M2rfARm/pXLcPEsjjMsFgrFgSrhQIxcSVrBz8w==", + "dev": true, + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/pacote/node_modules/npm-pick-manifest": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-10.0.0.tgz", + "integrity": "sha512-r4fFa4FqYY8xaM7fHecQ9Z2nE9hgNfJR+EmoKv0+chvzWkBcORX3r0FpTByP+CbOVJDladMXnPQGVN8PBLGuTQ==", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-install-checks": "^7.1.0", + "npm-normalize-package-bin": "^4.0.0", + "npm-package-arg": "^12.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pacote/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/pacote/node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/npm-package-arg/-/npm-package-arg-12.0.2.tgz", + "integrity": "sha512-f1NpFjNI9O4VbKMOlA5QoBq/vSQPORHcTZ2feJpFkTHJ9eQkdlmZEKSjcAhxTGInC7RlEyScT9ui67NaOsjFWA==", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "hosted-git-info": "^8.0.0", + "proc-log": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-name": "^6.0.0" }, "engines": { - "node": ">=10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pacote/node_modules/make-fetch-happen": { - "version": "9.1.0", + "node_modules/pacote/node_modules/which": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/which/-/which-5.0.0.tgz", + "integrity": "sha512-JEdGzHwwkrbWoGOlIHqQ5gtprKGOenpDHpxE9zVR1bWbOtYRyPPHMe9FaP6x61CmNaTThSkb0DAJte5jD+DmzQ==", "dev": true, "license": "ISC", "dependencies": { - "agentkeepalive": "^4.1.3", - "cacache": "^15.2.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^4.0.1", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^6.0.0", - "minipass": "^3.1.3", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^1.3.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.2", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^6.0.0", - "ssri": "^8.0.0" + "isexe": "^3.1.1" + }, + "bin": { + "node-which": "bin/which.js" }, "engines": { - "node": ">= 10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pacote/node_modules/npm-registry-fetch": { - "version": "11.0.0", + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "make-fetch-happen": "^9.0.1", - "minipass": "^3.1.3", - "minipass-fetch": "^1.3.0", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.0.0", - "npm-package-arg": "^8.0.0" + "callsites": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/pacote/node_modules/socks-proxy-agent": { - "version": "6.2.1", + "node_modules/parse-conflict-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-conflict-json/-/parse-conflict-json-4.0.0.tgz", + "integrity": "sha512-37CN2VtcuvKgHUs8+0b1uJeEsbGn61GRHz469C94P5xiOoqpDYJYwjg4RY9Vmz39WyZAVkR5++nbJwLMIgOCnQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "json-parse-even-better-errors": "^4.0.0", + "just-diff": "^6.0.0", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">= 10" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/pacote/node_modules/yallist": { + "node_modules/parse-conflict-json/node_modules/json-parse-even-better-errors": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-4.0.0.tgz", + "integrity": "sha512-lR4MXjGNgkJc7tkQ97kb2nuEMnNCyU//XYVH0MKTGcXEiSudQ5MKGKen3C5QubYy0vmq+JGitUg92uuywGEwIA==", "dev": true, - "license": "ISC" + "license": "MIT", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } }, - "node_modules/parent-module": { - "version": "1.0.1", + "node_modules/parse-imports-exports": { + "version": "0.2.4", "dev": true, "license": "MIT", "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "parse-statements": "1.0.11" } }, "node_modules/parse-json": { @@ -11307,37 +14397,30 @@ } }, "node_modules/parse-path": { - "version": "4.0.4", + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-7.1.0.tgz", + "integrity": "sha512-EuCycjZtfPcjWk7KTksnJ5xPMvWGA/6i4zrLYhRG0hGvC3GPU/jGUj3Cy+ZR0v30duV3e23R95T1lE2+lsndSw==", "dev": true, "license": "MIT", "dependencies": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" + "protocols": "^2.0.0" } }, - "node_modules/parse-path/node_modules/protocols": { - "version": "1.4.8", + "node_modules/parse-statements": { + "version": "1.0.11", "dev": true, "license": "MIT" }, "node_modules/parse-url": { - "version": "6.0.5", + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-8.1.0.tgz", + "integrity": "sha512-xDvOoLU5XRrcOZvnI6b8zA6n9O9ejNk/GExuz1yBuWUGn9KA97GI6HTs6u02wKara1CeVmZhH+0TZFdWScR89w==", "dev": true, "license": "MIT", "dependencies": { - "is-ssh": "^1.3.0", - "normalize-url": "^6.1.0", - "parse-path": "^4.0.0", - "protocols": "^1.4.0" + "parse-path": "^7.0.0" } }, - "node_modules/parse-url/node_modules/protocols": { - "version": "1.4.8", - "dev": true, - "license": "MIT" - }, "node_modules/parseurl": { "version": "1.3.3", "dev": true, @@ -11375,29 +14458,35 @@ "dev": true, "license": "MIT" }, - "node_modules/path-type": { - "version": "4.0.0", + "node_modules/path-scurry": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.2.tgz", + "integrity": "sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^11.0.0", + "minipass": "^7.1.2" + }, "engines": { - "node": ">=8" + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pathval": { - "version": "1.1.1", + "node_modules/path-scurry/node_modules/lru-cache": { + "version": "11.2.6", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.2.6.tgz", + "integrity": "sha512-ESL2CrkS/2wTPfuend7Zhkzo2u0daGJ/A2VucJOgQ/C48S/zB8MMeMHSGKYpXhIjbPxfuezITkaBH1wqv00DDQ==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", "engines": { - "node": "*" + "node": "20 || >=22" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/picocolors": { - "version": "1.0.0", + "version": "1.1.1", "dev": true, "license": "ISC" }, @@ -11425,6 +14514,8 @@ }, "node_modules/pify": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", "dev": true, "license": "MIT", "engines": { @@ -11435,7 +14526,7 @@ } }, "node_modules/pirates": { - "version": "4.0.6", + "version": "4.0.7", "dev": true, "license": "MIT", "engines": { @@ -11443,25 +14534,96 @@ } }, "node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/locate-path": { "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^5.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/pkg-dir/node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-dir/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "version": "1.1.0", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" } }, + "node_modules/postcss-selector-parser": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", + "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", + "dev": true, + "license": "MIT", + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "dev": true, @@ -11471,14 +14633,16 @@ } }, "node_modules/prettier": { - "version": "2.8.8", + "version": "3.7.4", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.7.4.tgz", + "integrity": "sha512-v6UNi1+3hSlVvv8fSaoUbggEM5VErKmmpGA7Pl3HF8V6uKY7rvClBOJlH6yNwQtfTueNkGVpOv/mtWL9L4bgRA==", "dev": true, "license": "MIT", "bin": { - "prettier": "bin-prettier.js" + "prettier": "bin/prettier.cjs" }, "engines": { - "node": ">=10.13.0" + "node": ">=14" }, "funding": { "url": "https://github.com/prettier/prettier?sponsor=1" @@ -11519,6 +14683,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/proc-log": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/proc-log/-/proc-log-5.0.0.tgz", + "integrity": "sha512-Azwzvl90HaF0aCz1JrDdXQykFakSSNPaPoiZ9fm5qJIMHioDZEi7OAdRwSm6rSoPtY3Qutnm3L7ogmg3dc+wbQ==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, "node_modules/process": { "version": "0.11.10", "dev": true, @@ -11532,13 +14706,40 @@ "dev": true, "license": "MIT" }, - "node_modules/promise-inflight": { + "node_modules/proggy": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/proggy/-/proggy-3.0.0.tgz", + "integrity": "sha512-QE8RApCM3IaRRxVzxrjbgNMpQEX6Wu0p0KBeoSiSEw5/bsGwZHsshF4LCxH2jp/r6BU+bqA3LrMDEYNfJnpD8Q==", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/promise-all-reject-late": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-all-reject-late/-/promise-all-reject-late-1.0.1.tgz", + "integrity": "sha512-vuf0Lf0lOxyQREH7GDIOUMLS7kz+gs8i6B+Yi8dC68a2sychGrHTJYghMBD6k7eUcH0H5P73EckCA48xijWqXw==", "dev": true, - "license": "ISC" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/promise-call-limit": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/promise-call-limit/-/promise-call-limit-3.0.2.tgz", + "integrity": "sha512-mRPQO2T1QQVw11E7+UdCJu7S61eJVWknzml9sC1heAdj1jxl0fWMBypIt9ZOcLFf8FkG995ZD7RnVk7HH72fZw==", + "dev": true, + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" + } }, "node_modules/promise-retry": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", "dev": true, "license": "MIT", "dependencies": { @@ -11562,11 +14763,16 @@ } }, "node_modules/promzard": { - "version": "0.3.0", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/promzard/-/promzard-2.0.0.tgz", + "integrity": "sha512-Ncd0vyS2eXGOjchIRg6PVCYKetJYrW1BSbbIo+bKdig61TB6nH2RQNF2uP+qMpsI73L/jURLWojcw8JNIKZ3gg==", "dev": true, "license": "ISC", "dependencies": { - "read": "1" + "read": "^4.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/prop-types": { @@ -11586,33 +14792,22 @@ "license": "MIT", "peer": true }, - "node_modules/property-information": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/property-information/-/property-information-6.5.0.tgz", - "integrity": "sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, "node_modules/protocols": { - "version": "2.0.1", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-2.0.2.tgz", + "integrity": "sha512-hHVTzba3wboROl0/aWRRG9dMytgH6ow//STBZh43l/wQgmMhYhOFi0EHWAPtoCz9IAUymsyP0TSBHkhgMEGNnQ==", "dev": true, "license": "MIT" }, - "node_modules/psl": { - "version": "1.9.0", + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "dev": true, "license": "MIT" }, "node_modules/punycode": { - "version": "2.3.0", + "version": "2.3.1", "dev": true, "license": "MIT", "engines": { @@ -11621,15 +14816,14 @@ }, "node_modules/punycode.js": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", - "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/pure-rand": { - "version": "6.0.4", + "version": "6.1.0", "dev": true, "funding": [ { @@ -11643,15 +14837,6 @@ ], "license": "MIT" }, - "node_modules/q": { - "version": "1.5.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, "node_modules/qjobs": { "version": "1.2.0", "dev": true, @@ -11660,39 +14845,10 @@ "node": ">=0.9" } }, - "node_modules/qs": { - "version": "6.11.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/query-string": { - "version": "6.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "decode-uri-component": "^0.2.0", - "filter-obj": "^1.1.0", - "split-on-first": "^1.0.0", - "strict-uri-encode": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/queue-microtask": { "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true, "funding": [ { @@ -11712,6 +14868,8 @@ }, "node_modules/quick-lru": { "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, "license": "MIT", "engines": { @@ -11720,6 +14878,8 @@ }, "node_modules/randombytes": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11749,106 +14909,41 @@ } }, "node_modules/react": { - "version": "18.3.1", + "version": "19.2.3", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.3.tgz", + "integrity": "sha512-Ku/hhYbVjOQnXDZFv2+RibmLFGwFdeeKHFcOTlrt7xplBnya5OGn/hIRDsqDiSUcfORsDC7MPxwork8jBwsIWA==", "dev": true, "license": "MIT", - "dependencies": { - "loose-envify": "^1.1.0" - }, "engines": { "node": ">=0.10.0" } }, "node_modules/react-is": { - "version": "18.2.0", + "version": "18.3.1", "dev": true, "license": "MIT" }, "node_modules/read": { - "version": "1.0.7", - "dev": true, - "license": "ISC", - "dependencies": { - "mute-stream": "~0.0.4" - }, - "engines": { - "node": ">=0.8" - } - }, - "node_modules/read-cmd-shim": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/read-package-json": { - "version": "3.0.1", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^3.0.0", - "npm-normalize-package-bin": "^1.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/read-package-tree": { - "version": "5.3.1", - "dev": true, - "license": "ISC", - "dependencies": { - "read-package-json": "^2.0.0", - "readdir-scoped-modules": "^1.0.0", - "util-promisify": "^2.1.0" - } - }, - "node_modules/read-package-tree/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/read-package-tree/node_modules/normalize-package-data": { - "version": "2.5.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "node_modules/read-package-tree/node_modules/read-package-json": { - "version": "2.1.2", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/read/-/read-4.1.0.tgz", + "integrity": "sha512-uRfX6K+f+R8OOrYScaM3ixPY4erg69f8DN6pgTvMcA9iRc8iDhwrA4m3Yu8YYKsXJgVvum+m8PkRboZwwuLzYA==", "dev": true, "license": "ISC", "dependencies": { - "glob": "^7.1.1", - "json-parse-even-better-errors": "^2.3.0", - "normalize-package-data": "^2.0.0", - "npm-normalize-package-bin": "^1.0.0" + "mute-stream": "^2.0.0" + }, + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/read-package-tree/node_modules/semver": { - "version": "5.7.2", + "node_modules/read-cmd-shim": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-cmd-shim/-/read-cmd-shim-4.0.0.tgz", + "integrity": "sha512-yILWifhaSEEytfXI76kB9xEEiG1AiozaCJZ83A87ytjRiN+jVibXjedjCRNjoZviinhG+4UkalO3mWTd8u5O0Q==", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver" + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, "node_modules/read-pkg": { @@ -11866,6 +14961,8 @@ }, "node_modules/read-pkg-up": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", "dev": true, "license": "MIT", "dependencies": { @@ -11878,6 +14975,8 @@ }, "node_modules/read-pkg-up/node_modules/find-up": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", "dev": true, "license": "MIT", "dependencies": { @@ -11889,6 +14988,8 @@ }, "node_modules/read-pkg-up/node_modules/locate-path": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", "dev": true, "license": "MIT", "dependencies": { @@ -11901,6 +15002,8 @@ }, "node_modules/read-pkg-up/node_modules/p-limit": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "license": "MIT", "dependencies": { @@ -11912,6 +15015,8 @@ }, "node_modules/read-pkg-up/node_modules/p-locate": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", "dev": true, "license": "MIT", "dependencies": { @@ -11923,6 +15028,8 @@ }, "node_modules/read-pkg-up/node_modules/p-try": { "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", "dev": true, "license": "MIT", "engines": { @@ -11931,6 +15038,8 @@ }, "node_modules/read-pkg-up/node_modules/path-exists": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", "dev": true, "license": "MIT", "engines": { @@ -12016,6 +15125,8 @@ }, "node_modules/readable-stream": { "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "license": "MIT", "dependencies": { @@ -12027,17 +15138,6 @@ "node": ">= 6" } }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" - } - }, "node_modules/readdirp": { "version": "3.6.0", "dev": true, @@ -12062,6 +15162,8 @@ }, "node_modules/redent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "license": "MIT", "dependencies": { @@ -12073,17 +15175,18 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.4", + "version": "1.0.10", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -12092,27 +15195,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regenerator-runtime": { - "version": "0.14.0", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/regex": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/regex/-/regex-4.3.2.tgz", - "integrity": "sha512-kK/AA3A9K6q2js89+VMymcboLOlF5lZRCYJv3gzszXFHBr6kO6qLGzbm+UIugBEV8SMMKCTR59txoY6ctRHYVw==", - "dev": true - }, "node_modules/regexp.prototype.flags": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.3.tgz", - "integrity": "sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==", + "version": "1.5.4", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "set-function-name": "^2.0.2" }, "engines": { @@ -12122,57 +15214,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/regexpp": { - "version": "3.2.0", + "node_modules/require-directory": { + "version": "2.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/mysticatea" - } - }, - "node_modules/request": { - "version": "2.88.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "aws-sign2": "~0.7.0", - "aws4": "^1.8.0", - "caseless": "~0.12.0", - "combined-stream": "~1.0.6", - "extend": "~3.0.2", - "forever-agent": "~0.6.1", - "form-data": "~2.3.2", - "har-validator": "~5.1.3", - "http-signature": "~1.2.0", - "is-typedarray": "~1.0.0", - "isstream": "~0.1.2", - "json-stringify-safe": "~5.0.1", - "mime-types": "~2.1.19", - "oauth-sign": "~0.9.0", - "performance-now": "^2.1.0", - "qs": "~6.5.2", - "safe-buffer": "^5.1.2", - "tough-cookie": "~2.5.0", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/request/node_modules/qs": { - "version": "6.5.3", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.6" + "node": ">=0.10.0" } }, - "node_modules/require-directory": { - "version": "2.1.1", + "node_modules/require-from-string": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { @@ -12185,17 +15236,20 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", + "version": "1.22.10", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { "resolve": "bin/resolve" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -12227,8 +15281,16 @@ "node": ">=4" } }, + "node_modules/resolve-pkg-maps": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" + } + }, "node_modules/resolve.exports": { - "version": "2.0.2", + "version": "2.0.3", "dev": true, "license": "MIT", "engines": { @@ -12237,6 +15299,8 @@ }, "node_modules/restore-cursor": { "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "license": "MIT", "dependencies": { @@ -12249,6 +15313,8 @@ }, "node_modules/retry": { "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", "dev": true, "license": "MIT", "engines": { @@ -12256,7 +15322,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -12265,7 +15333,7 @@ } }, "node_modules/rfdc": { - "version": "1.3.0", + "version": "1.4.1", "dev": true, "license": "MIT" }, @@ -12296,7 +15364,9 @@ "link": true }, "node_modules/run-async": { - "version": "2.4.1", + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/run-async/-/run-async-4.0.6.tgz", + "integrity": "sha512-IoDlSLTs3Yq593mb3ZoKWKXMNu3UpObxhgA/Xuid5p4bbfi2jdY1Hj0m1K+0/tEuQTxIGMhQDqGjKb7RuxGpAQ==", "dev": true, "license": "MIT", "engines": { @@ -12305,6 +15375,8 @@ }, "node_modules/run-parallel": { "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", "dev": true, "funding": [ { @@ -12331,25 +15403,24 @@ "license": "MIT" }, "node_modules/rxjs": { - "version": "6.6.7", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" + "tslib": "^2.1.0" } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -12378,15 +15449,29 @@ ], "license": "MIT" }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -12401,13 +15486,16 @@ "license": "MIT" }, "node_modules/schema-utils": { - "version": "3.3.0", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-4.3.3.tgz", + "integrity": "sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==", "dev": true, "license": "MIT", "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "@types/json-schema": "^7.0.9", + "ajv": "^8.9.0", + "ajv-formats": "^2.1.1", + "ajv-keywords": "^5.1.0" }, "engines": { "node": ">= 10.13.0" @@ -12417,38 +15505,60 @@ "url": "https://opencollective.com/webpack" } }, - "node_modules/semver": { - "version": "7.5.4", + "node_modules/schema-utils/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" }, - "bin": { - "semver": "bin/semver.js" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-5.1.0.tgz", + "integrity": "sha512-YCS/JNFAUyr5vAuhk1DWm1CBxRHW9LbJ2ozWeemrIqpbsqKjHVxYPyi5GC0rjZIT5JxJ3virVTS8wk4i/Z+krw==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3" }, - "engines": { - "node": ">=10" + "peerDependencies": { + "ajv": "^8.8.2" } }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true, + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.7.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", + "integrity": "sha512-SdsKMrI9TdgjdweUSR9MweHA4EJ8YxHn8DFaDisvhVlUOe4BF1tLD7GAj0lIqWVl+dPb/rExr0Btby5loQm20Q==", "dev": true, "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" + "bin": { + "semver": "bin/semver.js" }, "engines": { "node": ">=10" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/serialize-javascript": { "version": "6.0.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz", + "integrity": "sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==", "dev": true, "license": "BSD-3-Clause", "dependencies": { @@ -12457,14 +15567,15 @@ }, "node_modules/set-blocking": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", "dev": true, "license": "ISC" }, "node_modules/set-function-length": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", - "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -12479,9 +15590,8 @@ }, "node_modules/set-function-name": { "version": "2.0.2", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", - "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dev": true, + "license": "MIT", "dependencies": { "define-data-property": "^1.1.4", "es-errors": "^1.3.0", @@ -12492,6 +15602,19 @@ "node": ">= 0.4" } }, + "node_modules/set-proto": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/setprototypeof": { "version": "1.2.0", "dev": true, @@ -12528,35 +15651,79 @@ } }, "node_modules/shell-quote": { - "version": "1.8.1", + "version": "1.8.3", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/shiki": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.19.0.tgz", - "integrity": "sha512-Ng7Gd6XgWFLsv4Z3so65hOyXjV78qz1M117MuZHwdPQD6fgb5wR2IoLMvSlM/Ml14EXH7n+/YxIpTD74i7kDdw==", + "node_modules/side-channel": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "@shikijs/core": "1.19.0", - "@shikijs/engine-javascript": "1.19.0", - "@shikijs/engine-oniguruma": "1.19.0", - "@shikijs/types": "1.19.0", - "@shikijs/vscode-textmate": "^9.2.2", - "@types/hast": "^3.0.4" + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/side-channel": { - "version": "1.0.4", + "node_modules/side-channel-list": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -12567,13 +15734,31 @@ "dev": true, "license": "ISC" }, + "node_modules/sigstore": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/sigstore/-/sigstore-4.1.0.tgz", + "integrity": "sha512-/fUgUhYghuLzVT/gaJoeVehLCgZiUxPCPMcyVNY0lIf/cTCz58K/WTI7PefDarXxp9nUKpEwg1yyz3eSBMTtgA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@sigstore/bundle": "^4.0.0", + "@sigstore/core": "^3.1.0", + "@sigstore/protobuf-specs": "^0.5.0", + "@sigstore/sign": "^4.1.0", + "@sigstore/tuf": "^4.0.1", + "@sigstore/verify": "^3.1.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" + } + }, "node_modules/sirv": { - "version": "2.0.3", + "version": "2.0.4", "dev": true, "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", "totalist": "^3.0.0" }, "engines": { @@ -12593,16 +15778,10 @@ "node": ">=8" } }, - "node_modules/slide": { - "version": "1.1.6", - "dev": true, - "license": "ISC", - "engines": { - "node": "*" - } - }, "node_modules/smart-buffer": { "version": "4.2.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", "dev": true, "license": "MIT", "engines": { @@ -12611,7 +15790,7 @@ } }, "node_modules/socket.io": { - "version": "4.7.2", + "version": "4.8.1", "dev": true, "license": "MIT", "dependencies": { @@ -12619,7 +15798,7 @@ "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -12628,15 +15807,32 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.2", + "version": "2.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "~4.3.4", + "ws": "~8.17.1" + } + }, + "node_modules/socket.io-adapter/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "ws": "~8.11.0" + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, "node_modules/socket.io-adapter/node_modules/ws": { - "version": "8.11.0", + "version": "8.17.1", "dev": true, "license": "MIT", "engines": { @@ -12644,7 +15840,7 @@ }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -12667,52 +15863,79 @@ "node": ">=10.0.0" } }, - "node_modules/socks": { - "version": "2.7.1", + "node_modules/socket.io-parser/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "ms": "^2.1.3" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/socks-proxy-agent": { - "version": "5.0.1", + "node_modules/socket.io/node_modules/debug": { + "version": "4.3.7", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "4", - "socks": "^2.3.3" + "ms": "^2.1.3" }, "engines": { - "node": ">= 6" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/sort-keys": { - "version": "4.2.0", + "node_modules/socks": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.8.7.tgz", + "integrity": "sha512-HLpt+uLy/pxB+bum/9DzAgiKS8CX1EvbWxI4zlmgGCExImLdiad2iCwXT5Z4c9c3Eq8rP2318mPW2c+QbtjK8A==", + "dev": true, + "license": "MIT", + "dependencies": { + "ip-address": "^10.0.1", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "8.0.5", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-8.0.5.tgz", + "integrity": "sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==", "dev": true, "license": "MIT", "dependencies": { - "is-plain-obj": "^2.0.0" + "agent-base": "^7.1.2", + "debug": "^4.3.4", + "socks": "^2.8.3" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "2.1.0", + "node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", "dev": true, "license": "MIT", + "dependencies": { + "is-plain-obj": "^1.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, "node_modules/source-map": { @@ -12724,7 +15947,7 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", + "version": "1.2.1", "dev": true, "license": "BSD-3-Clause", "engines": { @@ -12770,16 +15993,6 @@ "source-map": "^0.6.0" } }, - "node_modules/space-separated-tokens": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-2.0.2.tgz", - "integrity": "sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==", - "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/spdx-correct": { "version": "3.2.0", "dev": true, @@ -12789,13 +16002,22 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { - "version": "2.3.0", + "version": "2.5.0", "dev": true, "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { @@ -12804,12 +16026,14 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.13", + "version": "3.0.22", "dev": true, "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "license": "MIT", "dependencies": { @@ -12819,16 +16043,10 @@ "node": "*" } }, - "node_modules/split-on-first": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, "node_modules/split2": { "version": "3.2.2", + "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "license": "ISC", "dependencies": { @@ -12837,42 +16055,30 @@ }, "node_modules/sprintf-js": { "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true, "license": "BSD-3-Clause" }, - "node_modules/sshpk": { - "version": "1.17.0", + "node_modules/ssri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-12.0.0.tgz", + "integrity": "sha512-S7iGNosepx9RadX82oimUkvr0Ct7IjJbEbs4mJcTxst8um95J3sDYU1RBEOvdu6oL1Wek2ODI5i4MAw+dZ6cAQ==", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "asn1": "~0.2.3", - "assert-plus": "^1.0.0", - "bcrypt-pbkdf": "^1.0.0", - "dashdash": "^1.12.0", - "ecc-jsbn": "~0.1.1", - "getpass": "^0.1.1", - "jsbn": "~0.1.0", - "safer-buffer": "^2.0.2", - "tweetnacl": "~0.14.0" - }, - "bin": { - "sshpk-conv": "bin/sshpk-conv", - "sshpk-sign": "bin/sshpk-sign", - "sshpk-verify": "bin/sshpk-verify" + "minipass": "^7.0.3" }, "engines": { - "node": ">=0.10.0" + "node": "^18.17.0 || >=20.5.0" } }, - "node_modules/ssri": { - "version": "8.0.1", + "node_modules/stable-hash-x": { + "version": "0.2.0", "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.1.1" - }, + "license": "MIT", "engines": { - "node": ">= 8" + "node": ">=12.0.0" } }, "node_modules/stack-utils": { @@ -12902,6 +16108,18 @@ "node": ">= 0.6" } }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/streamroller": { "version": "3.1.5", "dev": true, @@ -12944,16 +16162,10 @@ "node": ">= 4.0.0" } }, - "node_modules/strict-uri-encode": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/string_decoder": { "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "license": "MIT", "dependencies": { @@ -12990,33 +16202,56 @@ "dev": true, "license": "MIT" }, + "node_modules/string.prototype.includes": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/string.prototype.matchall": { - "version": "4.0.9", + "version": "4.0.12", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "internal-slot": "^1.0.5", - "regexp.prototype.flags": "^1.5.0", - "side-channel": "^1.0.4" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.6", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "internal-slot": "^1.1.0", + "regexp.prototype.flags": "^1.5.3", + "set-function-name": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.padend": { - "version": "3.1.4", + "version": "3.1.6", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.4", - "es-abstract": "^1.20.4" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.2", + "es-object-atoms": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -13025,16 +16260,28 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/string.prototype.repeat": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.5" + } + }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -13044,24 +16291,26 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/string.prototype.trimstart": { "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", - "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "define-properties": "^1.2.1", @@ -13074,20 +16323,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/stringify-entities": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-4.0.4.tgz", - "integrity": "sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==", - "dev": true, - "dependencies": { - "character-entities-html4": "^2.0.0", - "character-entities-legacy": "^3.0.0" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "dev": true, @@ -13117,6 +16352,8 @@ }, "node_modules/strip-indent": { "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13137,22 +16374,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" - }, - "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -13175,95 +16396,97 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tapable": { - "version": "2.2.1", + "node_modules/synckit": { + "version": "0.11.11", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.1.15", - "dev": true, - "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@pkgr/core": "^0.2.9" }, "engines": { - "node": ">=10" + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/synckit" } }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", + "node_modules/tapable": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", + "integrity": "sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/tar/node_modules/yallist": { - "version": "4.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/temp-dir": { - "version": "1.0.0", + "node_modules/tar": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.5.8.tgz", + "integrity": "sha512-SYkBtK99u0yXa+IWL0JRzzcl7RxNpvX/U08Z+8DKnysfno7M+uExnTZH8K+VGgShf2qFPKtbNr9QBl8n7WBP6Q==", "dev": true, - "license": "MIT", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, "engines": { - "node": ">=4" + "node": ">=18" } }, - "node_modules/temp-write": { - "version": "4.0.0", + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.15", - "is-stream": "^2.0.0", - "make-dir": "^3.0.0", - "temp-dir": "^1.0.0", - "uuid": "^3.3.2" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/temp-write/node_modules/make-dir": { - "version": "3.1.0", + "node_modules/tar/node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", "dev": true, - "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, + "license": "BlueOak-1.0.0", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=18" } }, - "node_modules/temp-write/node_modules/semver": { - "version": "6.3.1", + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=4" } }, "node_modules/terser": { - "version": "5.27.0", + "version": "5.44.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.44.1.tgz", + "integrity": "sha512-t/R3R/n0MSwnnazuPpPNVO60LX0SKL45pyl9YlvxIdkH0Of7D5qM2EVe+yASRIlY5pZ73nclYJfNANGWPwFDZw==", "dev": true, "license": "BSD-2-Clause", "dependencies": { "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", + "acorn": "^8.15.0", "commander": "^2.20.0", "source-map-support": "~0.5.20" }, @@ -13275,15 +16498,17 @@ } }, "node_modules/terser-webpack-plugin": { - "version": "5.3.10", + "version": "5.3.16", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-5.3.16.tgz", + "integrity": "sha512-h9oBFCWrq78NyWWVcSwZarJkZ01c2AyGrzs1crmHZO3QUg9D61Wu4NPjBy69n7JqylFF5y+CsUZYmYEIZ3mR+Q==", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.20", + "@jridgewell/trace-mapping": "^0.3.25", "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.26.0" + "schema-utils": "^4.3.0", + "serialize-javascript": "^6.0.2", + "terser": "^5.31.1" }, "engines": { "node": ">= 10.13.0" @@ -13309,6 +16534,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/jest-worker": { "version": "27.5.1", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-27.5.1.tgz", + "integrity": "sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==", "dev": true, "license": "MIT", "dependencies": { @@ -13322,6 +16549,8 @@ }, "node_modules/terser-webpack-plugin/node_modules/supports-color": { "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", "dev": true, "license": "MIT", "dependencies": { @@ -13347,21 +16576,42 @@ "node": ">=8" } }, + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.12", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/text-extensions": { "version": "1.9.0", + "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, "license": "MIT", "engines": { "node": ">=0.10" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, "node_modules/through": { "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", "dev": true, "license": "MIT" }, @@ -13406,19 +16656,69 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/tmpl": { - "version": "1.0.5", + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz", + "integrity": "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmp": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.5.tgz", + "integrity": "sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=14.14" } }, + "node_modules/tmpl": { + "version": "1.0.5", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/to-regex-range": { "version": "5.0.1", "dev": true, @@ -13446,62 +16746,97 @@ "node": ">=6" } }, - "node_modules/tough-cookie": { - "version": "2.5.0", + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.28", - "punycode": "^2.1.1" - }, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/treeverse": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/treeverse/-/treeverse-3.0.0.tgz", + "integrity": "sha512-gcANaAnd2QDZFmHFEOF4k7uc1J/6a6z3DJMd/QwEyxLoKGiptJRwid582r7QIsFlFMIZ3SnxfS52S4hm2DHkuQ==", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.8" + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, - "node_modules/tr46": { - "version": "2.1.0", + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, "engines": { "node": ">=8" } }, - "node_modules/trim-lines": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-3.0.1.tgz", - "integrity": "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==", + "node_modules/ts-api-utils": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.4.0.tgz", + "integrity": "sha512-3TaVTaAv2gTiMB35i3FiGJaRfwb3Pyn/j3m/bfAvGe8FB7CF6u+LMYqYlDh7reQf7UNvoTvdfAqHGmPGOSsPmA==", "dev": true, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "license": "MIT", + "engines": { + "node": ">=18.12" + }, + "peerDependencies": { + "typescript": ">=4.8.4" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", + "node_modules/ts-declaration-location": { + "version": "1.0.7", + "dev": true, + "funding": [ + { + "type": "ko-fi", + "url": "https://ko-fi.com/rebeccastevens" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/ts-declaration-location" + } + ], + "license": "BSD-3-Clause", + "dependencies": { + "picomatch": "^4.0.2" + }, + "peerDependencies": { + "typescript": ">=4.0.0" + } + }, + "node_modules/ts-declaration-location/node_modules/picomatch": { + "version": "4.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, "node_modules/ts-jest": { - "version": "29.2.2", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.2.2.tgz", - "integrity": "sha512-sSW7OooaKT34AAngP6k1VS669a0HdLxkQZnlC7T76sckGCokXFnvJ3yRlQZGRTAoV5K19HfSgCiSwWOSIfcYlg==", + "version": "29.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", + "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", "dev": true, + "license": "MIT", "dependencies": { - "bs-logger": "0.x", - "ejs": "^3.0.0", - "fast-json-stable-stringify": "2.x", - "jest-util": "^29.0.0", + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.8", "json5": "^2.2.3", - "lodash.memoize": "4.x", - "make-error": "1.x", - "semver": "^7.5.3", - "yargs-parser": "^21.0.1" + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.7.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" }, "bin": { "ts-jest": "cli.js" @@ -13511,10 +16846,11 @@ }, "peerDependencies": { "@babel/core": ">=7.0.0-beta.0 <8", - "@jest/transform": "^29.0.0", - "@jest/types": "^29.0.0", - "babel-jest": "^29.0.0", - "jest": "^29.0.0", + "@jest/transform": "^29.0.0 || ^30.0.0", + "@jest/types": "^29.0.0 || ^30.0.0", + "babel-jest": "^29.0.0 || ^30.0.0", + "jest": "^29.0.0 || ^30.0.0", + "jest-util": "^29.0.0 || ^30.0.0", "typescript": ">=4.3 <6" }, "peerDependenciesMeta": { @@ -13532,9 +16868,23 @@ }, "esbuild": { "optional": true + }, + "jest-util": { + "optional": true } } }, + "node_modules/ts-jest/node_modules/type-fest": { + "version": "4.41.0", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/ts-jest/node_modules/yargs-parser": { "version": "21.1.1", "dev": true, @@ -13544,7 +16894,9 @@ } }, "node_modules/ts-loader": { - "version": "9.5.1", + "version": "9.5.4", + "resolved": "https://registry.npmjs.org/ts-loader/-/ts-loader-9.5.4.tgz", + "integrity": "sha512-nCz0rEwunlTZiy6rXFByQU1kVVpCIgUpc/psFiKVrUwrizdnIbRFu8w7bxhUF0X613DYwT4XzrZHpVyMe758hQ==", "dev": true, "license": "MIT", "dependencies": { @@ -13563,11 +16915,11 @@ } }, "node_modules/ts-loader/node_modules/source-map": { - "version": "0.7.4", + "version": "0.7.6", "dev": true, "license": "BSD-3-Clause", "engines": { - "node": ">= 8" + "node": ">= 12" } }, "node_modules/ts-node": { @@ -13643,40 +16995,27 @@ } }, "node_modules/tslib": { - "version": "1.14.1", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, - "node_modules/tsutils": { - "version": "3.21.0", + "node_modules/tuf-js": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/tuf-js/-/tuf-js-4.1.0.tgz", + "integrity": "sha512-50QV99kCKH5P/Vs4E2Gzp7BopNV+KzTXqWeaxrfu5IQJBOULRsTIS9seSsOVT8ZnGXzCyx55nYWAi4qJzpZKEQ==", "dev": true, "license": "MIT", "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" + "@tufjs/models": "4.1.0", + "debug": "^4.4.3", + "make-fetch-happen": "^15.0.1" }, "engines": { - "node": "*" + "node": "^20.17.0 || >=22.9.0" } }, - "node_modules/tweetnacl": { - "version": "0.14.5", - "dev": true, - "license": "Unlicense" - }, "node_modules/type-check": { "version": "0.4.0", "dev": true, @@ -13688,16 +17027,8 @@ "node": ">= 0.8.0" } }, - "node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/type-fest": { - "version": "0.20.2", + "version": "0.21.3", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -13720,30 +17051,28 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", - "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bound": "^1.0.3", "es-errors": "^1.3.0", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" } }, "node_modules/typed-array-byte-length": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", - "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", + "version": "1.0.3", "dev": true, + "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -13753,17 +17082,17 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.4", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" }, "engines": { "node": ">= 0.4" @@ -13773,17 +17102,16 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", "dev": true, + "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -13794,73 +17122,33 @@ }, "node_modules/typedarray": { "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==", "dev": true, "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typedoc": { - "version": "0.26.10", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.10.tgz", - "integrity": "sha512-xLmVKJ8S21t+JeuQLNueebEuTVphx6IrP06CdV7+0WVflUSW3SPmR+h1fnWVdAR/FQePEgsSWCUHXqKKjzuUAw==", + "version": "0.28.15", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.15.tgz", + "integrity": "sha512-mw2/2vTL7MlT+BVo43lOsufkkd2CJO4zeOSuWQQsiXoV2VuEn7f6IZp2jsUDPmBMABpgR0R5jlcJ2OGEFYmkyg==", "dev": true, + "license": "Apache-2.0", "dependencies": { + "@gerrit0/mini-shiki": "^3.17.0", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "shiki": "^1.16.2", - "yaml": "^2.5.1" + "yaml": "^2.8.1" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 18" + "node": ">= 18", + "pnpm": ">= 10" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x" - } - }, - "node_modules/typedoc/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/typedoc/node_modules/yaml": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.1.tgz", - "integrity": "sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==", - "dev": true, - "bin": { - "yaml": "bin.mjs" - }, - "engines": { - "node": ">= 14" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x" } }, "node_modules/typescript": { @@ -13875,8 +17163,32 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.52.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.52.0.tgz", + "integrity": "sha512-atlQQJ2YkO4pfTVQmQ+wvYQwexPDOIgo+RaVcD7gHgzy/IQA+XTyuxNM9M9TVXvttkF7koBHmcwisKdOAf2EcA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.52.0", + "@typescript-eslint/parser": "8.52.0", + "@typescript-eslint/typescript-estree": "8.52.0", + "@typescript-eslint/utils": "8.52.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <6.0.0" + } + }, "node_modules/ua-parser-js": { - "version": "0.7.35", + "version": "0.7.40", "dev": true, "funding": [ { @@ -13886,21 +17198,27 @@ { "type": "paypal", "url": "https://paypal.me/faisalman" + }, + { + "type": "github", + "url": "https://github.com/sponsors/faisalman" } ], "license": "MIT", + "bin": { + "ua-parser-js": "script/cli.js" + }, "engines": { "node": "*" } }, "node_modules/uc.micro": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", - "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/uglify-js": { - "version": "3.17.4", + "version": "3.19.3", "dev": true, "license": "BSD-2-Clause", "optional": true, @@ -13911,28 +17229,18 @@ "node": ">=0.8.0" } }, - "node_modules/uid-number": { - "version": "0.0.6", - "dev": true, - "license": "ISC", - "engines": { - "node": "*" - } - }, - "node_modules/umask": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/unbox-primitive": { - "version": "1.0.2", + "version": "1.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -13940,101 +17248,46 @@ }, "node_modules/undici-types": { "version": "5.26.5", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", - "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/unique-filename": { - "version": "1.1.1", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-5.0.0.tgz", + "integrity": "sha512-2RaJTAvAb4owyjllTfXzFClJ7WsGxlykkPvCr9pA//LD9goVq+m4PPAeBgNodGZ7nSrntT/auWpJ6Y5IFXcfjg==", "dev": true, "license": "ISC", "dependencies": { - "unique-slug": "^2.0.0" + "unique-slug": "^6.0.0" + }, + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/unique-slug": { - "version": "2.0.2", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-6.0.0.tgz", + "integrity": "sha512-4Lup7Ezn8W3d52/xBhZBVdx323ckxa7DEvd9kPQHppTkLoJXw6ltrBCyj5pnrxj0qKDxYMJ56CoxNuFCscdTiw==", "dev": true, "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4" - } - }, - "node_modules/unist-util-is": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-6.0.0.tgz", - "integrity": "sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-position": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-5.0.0.tgz", - "integrity": "sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-stringify-position": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", - "integrity": "sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-5.0.0.tgz", - "integrity": "sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0", - "unist-util-visit-parents": "^6.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/unist-util-visit-parents": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-6.0.1.tgz", - "integrity": "sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-is": "^6.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" + "engines": { + "node": "^20.17.0 || >=22.9.0" } }, "node_modules/universal-user-agent": { - "version": "6.0.0", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.1.tgz", + "integrity": "sha512-yCzhz6FN2wU1NiiQRogkTQszlQSlpWaw8SvVegAc+bDxbzHgh1vX8uIe8OYyMH6DwH+sdTJsgMl36+mSMdRJIQ==", "dev": true, "license": "ISC" }, "node_modules/universalify": { - "version": "2.0.0", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", "dev": true, "license": "MIT", "engines": { @@ -14049,6 +17302,39 @@ "node": ">= 0.8" } }, + "node_modules/unrs-resolver": { + "version": "1.11.1", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "napi-postinstall": "^0.3.0" + }, + "funding": { + "url": "https://opencollective.com/unrs-resolver" + }, + "optionalDependencies": { + "@unrs/resolver-binding-android-arm-eabi": "1.11.1", + "@unrs/resolver-binding-android-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-arm64": "1.11.1", + "@unrs/resolver-binding-darwin-x64": "1.11.1", + "@unrs/resolver-binding-freebsd-x64": "1.11.1", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.11.1", + "@unrs/resolver-binding-linux-arm64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-arm64-musl": "1.11.1", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-riscv64-musl": "1.11.1", + "@unrs/resolver-binding-linux-s390x-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-gnu": "1.11.1", + "@unrs/resolver-binding-linux-x64-musl": "1.11.1", + "@unrs/resolver-binding-wasm32-wasi": "1.11.1", + "@unrs/resolver-binding-win32-arm64-msvc": "1.11.1", + "@unrs/resolver-binding-win32-ia32-msvc": "1.11.1", + "@unrs/resolver-binding-win32-x64-msvc": "1.11.1" + } + }, "node_modules/untildify": { "version": "4.0.0", "dev": true, @@ -14059,6 +17345,8 @@ }, "node_modules/upath": { "version": "2.0.1", + "resolved": "https://registry.npmjs.org/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", "dev": true, "license": "MIT", "engines": { @@ -14067,7 +17355,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -14085,8 +17375,8 @@ ], "license": "MIT", "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.2.0", + "picocolors": "^1.1.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -14108,14 +17398,6 @@ "dev": true, "license": "MIT" }, - "node_modules/util-promisify": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "object.getownpropertydescriptors": "^2.0.3" - } - }, "node_modules/utils-merge": { "version": "1.0.1", "dev": true, @@ -14125,11 +17407,17 @@ } }, "node_modules/uuid": { - "version": "3.4.0", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], "license": "MIT", "bin": { - "uuid": "bin/uuid" + "uuid": "dist/esm/bin/uuid" } }, "node_modules/v8-compile-cache-lib": { @@ -14138,7 +17426,7 @@ "license": "MIT" }, "node_modules/v8-to-istanbul": { - "version": "9.1.2", + "version": "9.3.0", "dev": true, "license": "ISC", "dependencies": { @@ -14159,12 +17447,23 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/validate-npm-package-name": { - "version": "3.0.0", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-6.0.2.tgz", + "integrity": "sha512-IUoow1YUtvoBBC06dXs8bR8B9vuA3aJfmQNKMoaPG/OFsPmoQvw8xh+6Ye25Gx9DQhoEom3Pcu9MKHerm/NpUQ==", "dev": true, "license": "ISC", - "dependencies": { - "builtins": "^1.0.3" + "engines": { + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/vary": { @@ -14175,47 +17474,6 @@ "node": ">= 0.8" } }, - "node_modules/verror": { - "version": "1.10.0", - "dev": true, - "engines": [ - "node >=0.6.0" - ], - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "node_modules/vfile": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/vfile/-/vfile-6.0.3.tgz", - "integrity": "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "vfile-message": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, - "node_modules/vfile-message": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-4.0.2.tgz", - "integrity": "sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==", - "dev": true, - "dependencies": { - "@types/unist": "^3.0.0", - "unist-util-stringify-position": "^4.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/unified" - } - }, "node_modules/void-elements": { "version": "2.0.1", "dev": true, @@ -14224,6 +17482,16 @@ "node": ">=0.10.0" } }, + "node_modules/walk-up-path": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/walk-up-path/-/walk-up-path-4.0.0.tgz", + "integrity": "sha512-3hu+tD8YzSLGuFYtPRb48vdhKMi0KQV5sn+uWr8+7dMEq/2G/dtLrdDinkLjqq5TIbIBjYJ4Ax/n3YiaW7QM8A==", + "dev": true, + "license": "ISC", + "engines": { + "node": "20 || >=22" + } + }, "node_modules/walker": { "version": "1.0.8", "dev": true, @@ -14233,7 +17501,7 @@ } }, "node_modules/watchpack": { - "version": "2.4.1", + "version": "2.4.4", "dev": true, "license": "MIT", "dependencies": { @@ -14246,49 +17514,46 @@ }, "node_modules/wcwidth": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", "dev": true, "license": "MIT", "dependencies": { "defaults": "^1.0.3" } }, - "node_modules/webidl-conversions": { - "version": "6.1.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10.4" - } - }, "node_modules/webpack": { - "version": "5.95.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.95.0.tgz", - "integrity": "sha512-2t3XstrKULz41MNMBF+cJ97TyHdyQ8HCt//pqErqDvNjU9YQBnZxIHa11VXsi7F3mb5/aO2tuDxdeTPdU7xu9Q==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.5", - "@webassemblyjs/ast": "^1.12.1", - "@webassemblyjs/wasm-edit": "^1.12.1", - "@webassemblyjs/wasm-parser": "^1.12.1", - "acorn": "^8.7.1", - "acorn-import-attributes": "^1.9.5", - "browserslist": "^4.21.10", + "version": "5.104.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.104.1.tgz", + "integrity": "sha512-Qphch25abbMNtekmEGJmeRUhLDbe+QfiWTiqpKYkpCOWY64v9eyl+KRRLmqOFA2AvKPpc9DC6+u2n76tQLBoaA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/eslint-scope": "^3.7.7", + "@types/estree": "^1.0.8", + "@types/json-schema": "^7.0.15", + "@webassemblyjs/ast": "^1.14.1", + "@webassemblyjs/wasm-edit": "^1.14.1", + "@webassemblyjs/wasm-parser": "^1.14.1", + "acorn": "^8.15.0", + "acorn-import-phases": "^1.0.3", + "browserslist": "^4.28.1", "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.17.1", - "es-module-lexer": "^1.2.1", + "enhanced-resolve": "^5.17.4", + "es-module-lexer": "^2.0.0", "eslint-scope": "5.1.1", "events": "^3.2.0", "glob-to-regexp": "^0.4.1", "graceful-fs": "^4.2.11", "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", + "loader-runner": "^4.3.1", "mime-types": "^2.1.27", "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.10", - "watchpack": "^2.4.1", - "webpack-sources": "^3.2.3" + "schema-utils": "^4.3.3", + "tapable": "^2.3.0", + "terser-webpack-plugin": "^5.3.16", + "watchpack": "^2.4.4", + "webpack-sources": "^3.3.3" }, "bin": { "webpack": "bin/webpack.js" @@ -14307,7 +17572,9 @@ } }, "node_modules/webpack-bundle-analyzer": { - "version": "4.10.2", + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.1.1.tgz", + "integrity": "sha512-UzoaIA0Aigo5lUvoUkIkSoHtUK5rBJh9e2vW3Eqct0jc/L8hcruBCz/jsXEvB1hDU1G3V94jo2EJqPcFKeSSeQ==", "dev": true, "license": "MIT", "dependencies": { @@ -14317,7 +17584,6 @@ "commander": "^7.2.0", "debounce": "^1.2.1", "escape-string-regexp": "^4.0.0", - "gzip-size": "^6.0.0", "html-escaper": "^2.0.2", "opener": "^1.5.2", "picocolors": "^1.0.0", @@ -14328,7 +17594,7 @@ "webpack-bundle-analyzer": "lib/bin/analyzer.js" }, "engines": { - "node": ">= 10.13.0" + "node": ">= 20.9.0" } }, "node_modules/webpack-bundle-analyzer/node_modules/commander": { @@ -14340,7 +17606,9 @@ } }, "node_modules/webpack-bundle-analyzer/node_modules/ws": { - "version": "7.5.9", + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", "dev": true, "license": "MIT", "engines": { @@ -14360,41 +17628,38 @@ } }, "node_modules/webpack-cli": { - "version": "5.1.4", + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "@discoveryjs/json-ext": "^0.5.0", - "@webpack-cli/configtest": "^2.1.1", - "@webpack-cli/info": "^2.0.2", - "@webpack-cli/serve": "^2.0.5", + "@discoveryjs/json-ext": "^0.6.1", + "@webpack-cli/configtest": "^3.0.1", + "@webpack-cli/info": "^3.0.1", + "@webpack-cli/serve": "^3.0.1", "colorette": "^2.0.14", - "commander": "^10.0.1", + "commander": "^12.1.0", "cross-spawn": "^7.0.3", - "envinfo": "^7.7.3", + "envinfo": "^7.14.0", "fastest-levenshtein": "^1.0.12", "import-local": "^3.0.2", "interpret": "^3.1.1", "rechoir": "^0.8.0", - "webpack-merge": "^5.7.3" + "webpack-merge": "^6.0.1" }, "bin": { "webpack-cli": "bin/cli.js" }, "engines": { - "node": ">=14.15.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/webpack" }, "peerDependencies": { - "webpack": "5.x.x" + "webpack": "^5.82.0" }, "peerDependenciesMeta": { - "@webpack-cli/generators": { - "optional": true - }, "webpack-bundle-analyzer": { "optional": true }, @@ -14403,45 +17668,61 @@ } } }, + "node_modules/webpack-cli/node_modules/@discoveryjs/json-ext": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.17.0" + } + }, "node_modules/webpack-cli/node_modules/commander": { - "version": "10.0.1", + "version": "12.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">=18" } }, "node_modules/webpack-merge": { - "version": "5.9.0", + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { "clone-deep": "^4.0.1", - "wildcard": "^2.0.0" + "flat": "^5.0.2", + "wildcard": "^2.0.1" }, "engines": { - "node": ">=10.0.0" + "node": ">=18.0.0" } }, "node_modules/webpack-sources": { - "version": "3.2.3", + "version": "3.3.3", "dev": true, "license": "MIT", "engines": { "node": ">=10.13.0" } }, - "node_modules/whatwg-url": { - "version": "8.7.0", + "node_modules/webpack/node_modules/eslint-scope": { + "version": "5.1.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "lodash": "^4.7.0", - "tr46": "^2.1.0", - "webidl-conversions": "^6.1.0" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=10" + "node": ">=8.0.0" + } + }, + "node_modules/webpack/node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" } }, "node_modules/which": { @@ -14459,38 +17740,41 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.3", + "version": "1.2.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "function.prototype.name": "^1.1.5", - "has-tostringtag": "^1.0.0", + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", - "which-collection": "^1.0.1", - "which-typed-array": "^1.1.9" + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -14500,30 +17784,33 @@ } }, "node_modules/which-collection": { - "version": "1.0.1", + "version": "1.0.2", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "is-map": "^2.0.1", - "is-set": "^2.0.1", - "is-weakmap": "^2.0.1", - "is-weakset": "^2.0.1" + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.19", "dev": true, + "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", - "for-each": "^0.3.3", - "gopd": "^1.0.1", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", "has-tostringtag": "^1.0.2" }, "engines": { @@ -14535,6 +17822,8 @@ }, "node_modules/wide-align": { "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "license": "ISC", "dependencies": { @@ -14546,6 +17835,14 @@ "dev": true, "license": "MIT" }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wordwrap": { "version": "1.0.0", "dev": true, @@ -14585,67 +17882,73 @@ } }, "node_modules/write-json-file": { - "version": "4.3.0", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", "dev": true, "license": "MIT", "dependencies": { - "detect-indent": "^6.0.0", + "detect-indent": "^5.0.0", "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" }, "engines": { - "node": ">=8.3" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "node_modules/write-json-file/node_modules/is-plain-obj": { + "node_modules/write-json-file/node_modules/make-dir": { "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/write-json-file/node_modules/make-dir": { - "version": "3.1.0", + "node_modules/write-json-file/node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, "license": "MIT", - "dependencies": { - "semver": "^6.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, "node_modules/write-json-file/node_modules/semver": { - "version": "6.3.1", + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", "dev": true, "license": "ISC", "bin": { - "semver": "bin/semver.js" + "semver": "bin/semver" } }, "node_modules/write-json-file/node_modules/write-file-atomic": { - "version": "3.0.3", + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "license": "ISC", "dependencies": { + "graceful-fs": "^4.1.11", "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" + "signal-exit": "^3.0.2" } }, "node_modules/write-pkg": { "version": "4.0.0", + "resolved": "https://registry.npmjs.org/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", "dev": true, "license": "MIT", "dependencies": { @@ -14657,89 +17960,20 @@ "node": ">=8" } }, - "node_modules/write-pkg/node_modules/detect-indent": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/write-pkg/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/write-pkg/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/write-pkg/node_modules/sort-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/write-pkg/node_modules/type-fest": { "version": "0.4.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=6" } }, - "node_modules/write-pkg/node_modules/write-file-atomic": { - "version": "2.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" - } - }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/ws": { - "version": "8.17.0", + "version": "8.19.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.19.0.tgz", + "integrity": "sha512-blAT2mjOEIi0ZzruJfIhb3nps74PRWTCz1IjglWEEpQl5XS/UNama6u2/rjFkDDouqr4L67ry+1aGIALViWjDg==", "license": "MIT", "engines": { "node": ">=10.0.0" @@ -14783,11 +18017,19 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "1.10.2", + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.2.tgz", + "integrity": "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A==", "dev": true, "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, "engines": { - "node": ">= 6" + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" } }, "node_modules/yargs": { @@ -14834,14 +18076,17 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/zwitch": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/zwitch/-/zwitch-2.0.4.tgz", - "integrity": "sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==", + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/yoctocolors-cjs/-/yoctocolors-cjs-2.1.3.tgz", + "integrity": "sha512-U/PBtDf35ff0D8X8D0jfdzHYEPFxAI7jJlxZXwCSez5M3190m+QobIfh+sWDWSHMCWWJN2AWamkegn6vr6YBTw==", "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/wooorm" + "url": "https://github.com/sponsors/sindresorhus" } }, "packages/isomorphic": { @@ -14851,7 +18096,7 @@ "dependencies": { "@noble/hashes": "^1.0.0", "eventemitter3": "5.0.1", - "ws": "^8.13.0" + "ws": "^8.17.1" }, "devDependencies": { "@types/node": "^18.18.38", @@ -14861,19 +18106,23 @@ "node": ">=18.0.0" } }, + "packages/isomorphic/node_modules/eventemitter3": { + "version": "5.0.1", + "license": "MIT" + }, "packages/ripple-address-codec": { "version": "5.0.0", "license": "ISC", "dependencies": { "@scure/base": "^1.1.3", - "@xrplf/isomorphic": "^1.0.0" + "@xrplf/isomorphic": "^1.0.1" }, "engines": { "node": ">= 18" } }, "packages/ripple-binary-codec": { - "version": "2.1.0", + "version": "2.7.0", "license": "ISC", "dependencies": { "@xrplf/isomorphic": "^1.0.1", @@ -14889,7 +18138,7 @@ "license": "ISC", "dependencies": { "@noble/curves": "^1.0.0", - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "ripple-address-codec": "^5.0.0" }, "engines": { @@ -14898,25 +18147,26 @@ }, "packages/secret-numbers": { "name": "@xrplf/secret-numbers", - "version": "1.0.0", + "version": "2.0.0", "license": "ISC", "dependencies": { - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "ripple-keypairs": "^2.0.0" } }, "packages/xrpl": { - "version": "4.0.0", + "version": "4.6.0", "license": "ISC", "dependencies": { "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", "@xrplf/isomorphic": "^1.0.1", - "@xrplf/secret-numbers": "^1.0.0", + "@xrplf/secret-numbers": "^2.0.0", "bignumber.js": "^9.0.0", "eventemitter3": "^5.0.1", + "fast-json-stable-stringify": "^2.1.0", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.1.0", + "ripple-binary-codec": "^2.7.0", "ripple-keypairs": "^2.0.0" }, "devDependencies": { @@ -14928,37 +18178,19 @@ "karma-jasmine": "^5.1.0", "karma-webpack": "^5.0.0", "lodash": "^4.17.4", - "react": "^18.2.0", + "react": "^19.0.0", "run-s": "^0.0.0", - "typedoc": "0.26.10", + "typedoc": "0.28.15", "ws": "^8.14.2" }, "engines": { "node": ">=18.0.0" } }, - "packages/xrpl/node_modules/agent-base": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "packages/xrpl/node_modules/https-proxy-agent": { - "version": "7.0.1", + "packages/xrpl/node_modules/eventemitter3": { + "version": "5.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "agent-base": "^7.0.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } + "license": "MIT" } } } diff --git a/package.json b/package.json index 73c0b5ff35..600652b2d0 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "test": "lerna run test --stream", "test:browser": "lerna run test:browser --stream", "test:integration": "lerna run test:integration --stream", + "test:faucet": "lerna run test:faucet --stream", "lint": "lerna run lint --stream", "clean": "lerna run clean --stream", "build": "lerna run build --stream", @@ -22,33 +23,35 @@ "xrpl": "file:packages/xrpl" }, "devDependencies": { + "globals": "^16.3.0", + "@eslint-community/eslint-plugin-eslint-comments": "^4.5.0", + "@eslint/js": "^9.32.0", + "@xrplf/eslint-config": "^3.0.0", + "@xrplf/prettier-config": "^1.9.1", "@types/chai": "^4.2.21", "@types/jest": "^29.2.2", "@types/lodash": "^4.14.136", "@types/node": "^18.19.29", + "typescript-eslint": "^8.52.0", "@types/ws": "^8.2.0", - "@typescript-eslint/eslint-plugin": "^5.28.0", - "@typescript-eslint/parser": "^5.28.0", - "@xrplf/eslint-config": "^1.9.1", - "@xrplf/prettier-config": "^1.9.1", - "chai": "^4.3.4", + "chai": "^6.2.2", "copyfiles": "^2.4.1", - "eslint": "^8.18.0", - "eslint-plugin-array-func": "^3.1.7", - "eslint-plugin-consistent-default-export-name": "^0.0.15", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.3", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-prettier": "^4.2.1", - "eslint-plugin-tsdoc": "^0.2.16", - "expect": "^29.3.1", + "eslint": "^9.32.0", + "eslint-config-prettier": "^10.1.8", + "eslint-import-resolver-typescript": "^4.4.4", + "eslint-plugin-array-func": "^5.0.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^52.0.4", + "eslint-plugin-n": "^17.21.3", + "eslint-plugin-prettier": "^5.5.4", + "eslint-plugin-tsdoc": "^0.5.0", + "expect": "^30.2.0", "jest": "^29.3.1", - "jest-mock": "^29.3.1", - "lerna": "^4.0.0", + "jest-mock": "^30.2.0", + "lerna": "^9.0.4", "lodash": "^4.17.21", "npm-run-all": "^4.1.5", - "prettier": "^2.3.2", + "prettier": "^3.6.2", "process": "^0.11.10", "source-map-loader": "^5.0.0", "source-map-support": "^0.5.16", @@ -57,14 +60,14 @@ "ts-node": "^10.2.1", "typescript": "^5.1.6", "webpack": "^5.81.0", - "webpack-bundle-analyzer": "^4.1.0", - "webpack-cli": "^5.0.1" + "webpack-bundle-analyzer": "^5.1.1", + "webpack-cli": "^6.0.1" }, "workspaces": [ "./packages/*" ], "engines": { "node": ">=18.0.0", - "npm": ">=7.10.0 < 10.0.0" + "npm": ">=7.10.0" } } diff --git a/packages/isomorphic/.eslintignore b/packages/isomorphic/.eslintignore deleted file mode 100644 index 7d6cfc152a..0000000000 --- a/packages/isomorphic/.eslintignore +++ /dev/null @@ -1,14 +0,0 @@ -# Don't ever lint node_modules -node_modules - -# Don't lint build output -dist - -# don't lint nyc coverage output -coverage -.nyc_output - -# Don't lint NYC configuration -nyc.config.js - -.idea diff --git a/packages/isomorphic/.eslintrc.js b/packages/isomorphic/.eslintrc.js deleted file mode 100644 index 40716d0e08..0000000000 --- a/packages/isomorphic/.eslintrc.js +++ /dev/null @@ -1,75 +0,0 @@ -module.exports = { - root: false, - - parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: ['./tsconfig.json', './tsconfig.eslint.json'], - - sourceType: 'module', // Allow the use of imports / ES modules - - ecmaFeatures: { - impliedStrict: true, // Enable global strict mode - }, - }, - - // Specify global variables that are predefined - env: { - browser: true, // Enable browser global variables - node: true, // Enable node global variables & Node.js scoping - es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - jest: true, // Add Jest testing global variables - }, - - plugins: [], - extends: ['@xrplf/eslint-config/base'], - - rules: { - // ** TODO ** - // all of the below are turned off for now during the migration to a - // monorepo. They need to actually be addressed! - // ** - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/promise-function-async': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-explicit-any': 'off', - '@typescript-eslint/consistent-type-assertions': 'off', - 'import/no-unused-modules': 'off', - 'import/prefer-default-export': 'off', - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-returns': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/check-tag-names': 'off', - 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 - 'jsdoc/no-types': 'off', - 'tsdoc/syntax': 'off', - 'import/order': 'off', - 'eslint-comments/require-description': 'off', - 'no-shadow': 'off', - 'multiline-comment-style': 'off', - '@typescript-eslint/no-require-imports': 'off', - }, - - overrides: [ - { - files: ['test/*.test.ts'], - // tests are importing through full module name to test in an isomorphic way - rules: { - 'node/no-extraneous-import': 'off', - 'import/no-extraneous-dependencies': 'off', - }, - }, - ], -} diff --git a/packages/isomorphic/eslint.config.js b/packages/isomorphic/eslint.config.js new file mode 100644 index 0000000000..f5c4a1b90d --- /dev/null +++ b/packages/isomorphic/eslint.config.js @@ -0,0 +1,87 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: [ + '**/node_modules/', + '**/dist/', + 'coverage/', + '.nyc_output/', + 'nyc.config.js', + '.idea/', + '**/*.js', + ], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + parser: tseslint.parser, // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: './tsconfig.eslint.json', + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + globals: { + ...globals.browser, + ...globals.jest, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-wrapper-object-types': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + 'import/no-unused-modules': 'off', + 'import/prefer-default-export': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/check-tag-names': 'off', + 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 + 'jsdoc/no-types': 'off', + 'tsdoc/syntax': 'off', + 'import/order': 'off', + '@eslint-community/eslint-comments/require-description': 'off', + 'no-shadow': 'off', + 'multiline-comment-style': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'n/no-unsupported-features/node-builtins': 'off', + }, + }, + { + files: ['test/*.test.ts'], + // tests are importing through full module name to test in an isomorphic way + rules: { + 'n/no-extraneous-import': 'off', + 'import/no-extraneous-dependencies': 'off', + }, + }, +] diff --git a/packages/isomorphic/package.json b/packages/isomorphic/package.json index 7214efaa6a..f0137a6ad3 100644 --- a/packages/isomorphic/package.json +++ b/packages/isomorphic/package.json @@ -12,7 +12,7 @@ "test": "npm run build && jest --verbose false --silent=false ./test/*.test.ts", "test:browser": "npm run build && karma start ./karma.config.js", "clean": "rm -rf ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", - "lint": "eslint . --ext .ts", + "lint": "eslint . --max-warnings 0", "prepublish": "npm run lint && npm test" }, "files": [ @@ -30,7 +30,7 @@ "dependencies": { "@noble/hashes": "^1.0.0", "eventemitter3": "5.0.1", - "ws": "^8.13.0" + "ws": "^8.17.1" }, "devDependencies": { "@types/node": "^18.18.38", diff --git a/packages/isomorphic/test/webpack.config.js b/packages/isomorphic/test/webpack.config.js index db2ec8642d..97f0f3bbb9 100644 --- a/packages/isomorphic/test/webpack.config.js +++ b/packages/isomorphic/test/webpack.config.js @@ -1,6 +1,6 @@ 'use strict' const { merge } = require('webpack-merge') -const { webpackForTest } = require('../../../weback.test.config') +const { webpackForTest } = require('../../../webpack.test.config') const { getDefaultConfiguration } = require('../../../webpack.config') module.exports = merge( diff --git a/packages/ripple-address-codec/.eslintignore b/packages/ripple-address-codec/.eslintignore deleted file mode 100644 index 0fc0705592..0000000000 --- a/packages/ripple-address-codec/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -# Don't ever lint node_modules -node_modules - -# Don't lint build output -dist - -# don't lint nyc coverage output -coverage -.nyc_output - -# Don't lint NYC configuration -nyc.config.js diff --git a/packages/ripple-address-codec/.eslintrc b/packages/ripple-address-codec/.eslintrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/ripple-address-codec/.eslintrc.js b/packages/ripple-address-codec/.eslintrc.js deleted file mode 100644 index 715a66b0b5..0000000000 --- a/packages/ripple-address-codec/.eslintrc.js +++ /dev/null @@ -1,46 +0,0 @@ -module.exports = { - root: true, - - parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: ['./tsconfig.eslint.json'], - - sourceType: 'module', // Allow the use of imports / ES modules - - ecmaFeatures: { - impliedStrict: true, // Enable global strict mode - }, - }, - - // Specify global variables that are predefined - env: { - browser: true, // Enable browser global variables - node: true, // Enable node global variables & Node.js scoping - es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - }, - - plugins: [], - extends: ['@xrplf/eslint-config/base'], - - rules: { - // This creates a lot of false positives. We should turn this off in our - // general config. - 'jsdoc/require-description-complete-sentence': 'off', - - // ** TODO ** - // all of the below are turned off for now during the migration to a - // monorepo. They need to actually be addressed! - // ** - '@typescript-eslint/no-magic-numbers': 'off', - 'jsdoc/require-returns': 'off', - 'jsdoc/check-param-names': 'off', - 'jsdoc/require-throws': 'off', - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-param': 'off', - 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 - 'tsdoc/syntax': 'off', - '@typescript-eslint/no-require-imports': 'off', - }, -} diff --git a/packages/ripple-address-codec/eslint.config.js b/packages/ripple-address-codec/eslint.config.js new file mode 100644 index 0000000000..fcb45e2af0 --- /dev/null +++ b/packages/ripple-address-codec/eslint.config.js @@ -0,0 +1,60 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: [ + '**/node_modules/', + '**/dist/', + 'coverage/', + '.nyc_output/', + 'nyc.config.js', + '.idea/', + '**/*.js', + 'examples/', + ], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + parser: tseslint.parser, // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.eslint.json'], + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + // This creates a lot of false positives. We should turn this off in our + // general config. + 'jsdoc/require-description-complete-sentence': 'off', + + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-magic-numbers': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/check-param-names': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-param': 'off', + 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 + 'tsdoc/syntax': 'off', + '@typescript-eslint/no-require-imports': 'off', + }, + }, +] diff --git a/packages/ripple-address-codec/package.json b/packages/ripple-address-codec/package.json index bd791c797a..3f18d3163f 100644 --- a/packages/ripple-address-codec/package.json +++ b/packages/ripple-address-codec/package.json @@ -11,7 +11,7 @@ "license": "ISC", "dependencies": { "@scure/base": "^1.1.3", - "@xrplf/isomorphic": "^1.0.0" + "@xrplf/isomorphic": "^1.0.1" }, "keywords": [ "ripple", @@ -29,7 +29,7 @@ "build": "tsc --build tsconfig.build.json", "test": "jest --verbose false --silent=false ./test/*.test.ts", "test:browser": "npm run build && karma start ./karma.config.js", - "lint": "eslint . --ext .ts", + "lint": "eslint . --max-warnings 0", "clean": "rm -rf ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo" }, "prettier": "@xrplf/prettier-config", diff --git a/packages/ripple-address-codec/test/webpack.config.js b/packages/ripple-address-codec/test/webpack.config.js index db2ec8642d..97f0f3bbb9 100644 --- a/packages/ripple-address-codec/test/webpack.config.js +++ b/packages/ripple-address-codec/test/webpack.config.js @@ -1,6 +1,6 @@ 'use strict' const { merge } = require('webpack-merge') -const { webpackForTest } = require('../../../weback.test.config') +const { webpackForTest } = require('../../../webpack.test.config') const { getDefaultConfiguration } = require('../../../webpack.config') module.exports = merge( diff --git a/packages/ripple-binary-codec/.eslintignore b/packages/ripple-binary-codec/.eslintignore deleted file mode 100644 index 3cf68f7580..0000000000 --- a/packages/ripple-binary-codec/.eslintignore +++ /dev/null @@ -1,4 +0,0 @@ -node_modules -dist -.github -coverage \ No newline at end of file diff --git a/packages/ripple-binary-codec/.eslintrc.js b/packages/ripple-binary-codec/.eslintrc.js deleted file mode 100644 index 664cceca76..0000000000 --- a/packages/ripple-binary-codec/.eslintrc.js +++ /dev/null @@ -1,127 +0,0 @@ -module.exports = { - root: true, - - parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: ['./tsconfig.eslint.json'], - - sourceType: 'module', // Allow the use of imports / ES modules - - ecmaFeatures: { - impliedStrict: true, // Enable global strict mode - }, - }, - - ignorePatterns: ['jest.config.js', '.eslintrc.js'], - - // Specify global variables that are predefined - env: { - browser: true, // Enable browser global variables - node: true, // Enable node global variables & Node.js scoping - es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - jest: true, // Add Mocha testing global variables - }, - - plugins: [], - extends: ['@xrplf/eslint-config/base'], - - rules: { - // ** TODO ** - // all of the below are turned off for now during the migration to a - // monorepo. They need to actually be addressed! - // ** - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/prefer-readonly': 'off', - '@typescript-eslint/no-parameter-properties': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-var-requires': 'off', - '@typescript-eslint/no-require-imports': 'off', - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/unbound-method': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/no-base-to-string': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/promise-function-async': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/array-type': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - '@typescript-eslint/no-useless-constructor': 'off', - '@typescript-eslint/no-unnecessary-condition': 'off', - '@typescript-eslint/consistent-type-assertions': 'off', - '@typescript-eslint/prefer-for-of': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/require-array-sort-compare': 'off', - '@typescript-eslint/prefer-includes': 'off', - '@typescript-eslint/dot-notation': 'off', - '@typescript-eslint/consistent-type-definitions': 'off', - '@typescript-eslint/no-type-alias': 'off', - '@typescript-eslint/member-ordering': 'off', - '@typescript-eslint/prefer-string-starts-ends-with': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/no-extraneous-class': 'off', - '@typescript-eslint/consistent-type-assertions': 'off', - 'import/unambiguous': 'off', - 'import/extensions': 'off', - 'import/prefer-default-export': 'off', - 'import/no-useless-path-segments': 'off', - 'import/no-unused-modules': 'off', - 'import/no-cycle': 'off', - 'import/order': 'off', - 'import/no-commonjs': 'off', - 'import/newline-after-import': 'off', - 'node/global-require': 'off', - 'consistent-default-export-name/default-import-match-filename': 'off', - 'jsdoc/require-throws': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/check-tag-names': 'off', - 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 - 'jsdoc/require-returns': 'off', - 'jsdoc/require-hyphen-before-param-description': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-param': 'off', - 'jsdoc/check-param-names': 'off', - 'jsdoc/newline-after-description': 'off', - 'jsdoc/require-returns-check': 'off', - 'tsdoc/syntax': 'off', - 'eslint-comments/require-description': 'off', - 'eslint-comments/no-unused-disable': 'off', - 'prefer-const': 'off', - 'global-require': 'off', - 'id-length': 'off', - 'no-shadow': 'off', - 'no-bitwise': 'off', - 'spaced-comment': 'off', - 'prefer-template': 'off', - 'prefer-object-spread': 'off', - 'no-inline-comments': 'off', - 'no-plusplus': 'off', - 'new-cap': 'off', - 'id-blacklist': 'off', - 'max-lines-per-function': 'off', - 'require-unicode-regexp': 'off', - 'no-undef-init': 'off', - curly: 'off', - eqeqeq: 'off', - 'no-console': 'off', - 'max-classes-per-file': 'off', - 'operator-assignment': 'off', - 'class-methods-use-this': 'off', - 'no-else-return': 'off', - yoda: 'off', - 'max-depth': 'off', - 'multiline-comment-style': 'off', - 'one-var': 'off', - 'no-negated-condition': 'off', - radix: 'off', - 'no-nested-ternary': 'off', - 'no-useless-concat': 'off', - 'object-shorthand': 'off', - 'no-param-reassign': 'off', - }, -} diff --git a/packages/ripple-binary-codec/CONTRIBUTING.md b/packages/ripple-binary-codec/CONTRIBUTING.md index a712bfe55a..b47e825726 100644 --- a/packages/ripple-binary-codec/CONTRIBUTING.md +++ b/packages/ripple-binary-codec/CONTRIBUTING.md @@ -18,6 +18,12 @@ For a good example unit test file, look at [test/hash.test.ts](test/hash.test.ts If you add a new serializable type, please add a new file with tests that ensure it can be encoded / decoded, and that it throws any relevant errors. +# Updating `definitions.json` + +The `definitions.json` file contains all the fields within rippled and all the relevant values needed to decode/encode it from the [rippled binary format](https://xrpl.org/es-es/docs/references/protocol/binary-format). + +To update it, use the script [here](./tools/generateDefinitions.js). You can run the script with `node path/to/generateDefinitions.js`. + # Adding new serializable types To add a new serializable type, first read through `enum`'s [README.md](src/enums/README.md) as it explains how to update `definitions.json` which ties `TransactionType`s and `Field`s to specific ids rippled understands. diff --git a/packages/ripple-binary-codec/HISTORY.md b/packages/ripple-binary-codec/HISTORY.md index a0710d4eba..0f234fd56a 100644 --- a/packages/ripple-binary-codec/HISTORY.md +++ b/packages/ripple-binary-codec/HISTORY.md @@ -2,10 +2,62 @@ ## Unreleased +## 2.7.0 (2026-02-12) + +### Added +* Add `Int32` serialized type. + +### Fixed +* Fix STNumber serialization logic to work with large mantissa scale [10^18, 10^19-1]. +* Error if a decimal is passed into a `UInt`-typed field. + +## 2.6.0 (2025-12-16) + +### Added +* Allow `encodeForMultisigning` to work with transactions that have non-empty `SigningPubKey`. Required to encode `LoanSet` transaction by counterparty signers for signing. + +## 2.5.1 (2025-10-29) + +### Fixed +* Fix serialization/deserialization issues in `Issue` serialized type for MPTIssue. + +## 2.5.0 (2025-07-29) + +### Added +* Support for `Single Asset Vault` (XLS-65) +* Adds new `STNumber` serialization type. + +## 2.4.1 (2025-6-18) + +### Fixed +* Adds conditional check for `PermissionValue` so custom definitions (based on previous v2.x versions) don't break. + +## 2.4.0 (2025-6-09) + +### Added +* Support for `Account Permissions` and `Account Permission Delegation` (XLS-74d, XLS-75d). +* Support for the `Batch` amendment (XLS-56). + +### Fixed +* add `MPTCurrency` support in `Issue` (rippled internal type) +* Throw an error during serialization if a field is unknown, rather than silently throwing it away. + +## 2.3.0 (2025-2-13) + +### Added +* Support for the AMMClawback amendment (XLS-73) +* Support for the Permissioned Domains amendment (XLS-80). + +## 2.2.0 (2024-12-23) + +### Added +* Support for the Multi-Purpose Token amendment (XLS-33). + ## 2.1.0 (2024-06-03) ### Added * Support for the Price Oracles amendment (XLS-47). +* Support for the `DynamicNFT` amendment (XLS-46) ### Fixed * Better error handling/error messages for serialization/deserialization errors. diff --git a/packages/ripple-binary-codec/eslint.config.js b/packages/ripple-binary-codec/eslint.config.js new file mode 100644 index 0000000000..0b0ceb6072 --- /dev/null +++ b/packages/ripple-binary-codec/eslint.config.js @@ -0,0 +1,130 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: ['**/node_modules/', '**/dist/', 'coverage/', '**/*.js', 'tools/'], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + parser: tseslint.parser, // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.eslint.json'], + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + globals: { + ...globals.browser, + ...globals.jest, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/prefer-readonly': 'off', + '@typescript-eslint/parameter-properties': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/unbound-method': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/no-base-to-string': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/array-type': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/no-useless-constructor': 'off', + '@typescript-eslint/no-unnecessary-condition': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + '@typescript-eslint/prefer-for-of': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/require-array-sort-compare': 'off', + '@typescript-eslint/prefer-includes': 'off', + '@typescript-eslint/dot-notation': 'off', + '@typescript-eslint/consistent-type-definitions': 'off', + '@typescript-eslint/no-type-alias': 'off', + '@typescript-eslint/member-ordering': 'off', + '@typescript-eslint/prefer-string-starts-ends-with': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-wrapper-object-types': 'off', + '@typescript-eslint/no-extraneous-class': 'off', + 'import/unambiguous': 'off', + 'import/extensions': 'off', + 'import/prefer-default-export': 'off', + 'import/no-useless-path-segments': 'off', + 'import/no-unused-modules': 'off', + 'import/no-cycle': 'off', + 'import/order': 'off', + 'import/no-commonjs': 'off', + 'import/newline-after-import': 'off', + 'n/global-require': 'off', + 'consistent-default-export-name/default-import-match-filename': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/check-tag-names': 'off', + 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 + 'jsdoc/require-returns': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-param': 'off', + 'jsdoc/check-param-names': 'off', + 'jsdoc/tag-lines': 'off', + 'jsdoc/require-returns-check': 'off', + 'tsdoc/syntax': 'off', + '@eslint-community/eslint-comments/require-description': 'off', + '@eslint-community/eslint-comments/no-unused-disable': 'off', + 'prefer-const': 'off', + 'id-length': 'off', + 'no-shadow': 'off', + 'no-bitwise': 'off', + 'spaced-comment': 'off', + 'prefer-template': 'off', + 'prefer-object-spread': 'off', + 'no-inline-comments': 'off', + 'no-plusplus': 'off', + 'new-cap': 'off', + 'id-blacklist': 'off', + 'max-lines-per-function': 'off', + 'require-unicode-regexp': 'off', + 'no-undef-init': 'off', + curly: 'off', + eqeqeq: 'off', + 'no-console': 'off', + 'max-classes-per-file': 'off', + 'operator-assignment': 'off', + 'class-methods-use-this': 'off', + 'no-else-return': 'off', + yoda: 'off', + 'max-depth': 'off', + 'multiline-comment-style': 'off', + 'one-var': 'off', + 'no-negated-condition': 'off', + radix: 'off', + 'no-nested-ternary': 'off', + 'no-useless-concat': 'off', + 'object-shorthand': 'off', + 'no-param-reassign': 'off', + 'import/no-named-as-default': 'off', + }, + }, +] diff --git a/packages/ripple-binary-codec/package.json b/packages/ripple-binary-codec/package.json index 41aca52356..ef437e31dd 100644 --- a/packages/ripple-binary-codec/package.json +++ b/packages/ripple-binary-codec/package.json @@ -1,6 +1,6 @@ { "name": "ripple-binary-codec", - "version": "2.1.0", + "version": "2.7.0", "description": "XRP Ledger binary codec", "files": [ "dist/*", @@ -21,7 +21,8 @@ "prepublishOnly": "npm test", "test": "npm run build && jest --verbose false --silent=false ./test/*.test.ts", "test:browser": "npm run build && karma start ./karma.config.js", - "lint": "eslint . --ext .ts --ext .test.js" + "lint": "eslint . --max-warnings 0", + "generateDefinitions": "node ./tools/generateDefinitions.js" }, "keywords": [ "ripple", diff --git a/packages/ripple-binary-codec/src/binary.ts b/packages/ripple-binary-codec/src/binary.ts index 8ca067d966..f2a9055ae1 100644 --- a/packages/ripple-binary-codec/src/binary.ts +++ b/packages/ripple-binary-codec/src/binary.ts @@ -177,11 +177,51 @@ function multiSigningData( }) } +/** + * Interface describing fields required for a Batch signer + * @property flags - Flags indicating Batch transaction properties + * @property txIDs - Array of transaction IDs included in the Batch + */ +interface BatchObject extends JsonObject { + flags: number + txIDs: string[] +} + +/** + * Serialize a signingClaim + * + * @param batch A Batch object to serialize. + * @returns the serialized object with appropriate prefix + */ +function signingBatchData(batch: BatchObject): Uint8Array { + if (batch.flags == null) { + throw Error("No field `flags'") + } + if (batch.txIDs == null) { + throw Error('No field `txIDs`') + } + const prefix = HashPrefix.batch + const flags = coreTypes.UInt32.from(batch.flags).toBytes() + const txIDsLength = coreTypes.UInt32.from(batch.txIDs.length).toBytes() + + const bytesList = new BytesList() + + bytesList.put(prefix) + bytesList.put(flags) + bytesList.put(txIDsLength) + batch.txIDs.forEach((txID: string) => { + bytesList.put(coreTypes.Hash256.from(txID).toBytes()) + }) + + return bytesList.toBytes() +} + export { BinaryParser, BinarySerializer, BytesList, ClaimObject, + BatchObject, makeParser, serializeObject, readJSON, @@ -191,4 +231,5 @@ export { binaryToJSON, sha512Half, transactionID, + signingBatchData, } diff --git a/packages/ripple-binary-codec/src/enums/README.md b/packages/ripple-binary-codec/src/enums/README.md index bb127bdd34..143912ed02 100644 --- a/packages/ripple-binary-codec/src/enums/README.md +++ b/packages/ripple-binary-codec/src/enums/README.md @@ -57,7 +57,7 @@ See: - https://github.com/ripple/rippled/blob/develop/src/ripple/protocol/TER.h - https://xrpl.org/transaction-results.html -To generate a new definitions file from rippled source code, use this tool: https://github.com/RichardAH/xrpl-codec-gen +To generate a new definitions file from rippled source code, use [this tool](../../tools/generateDefinitions.js). ## Transaction Types @@ -69,7 +69,7 @@ If you're building your own sidechain or writing an amendment for the XRPL, you To do that there are a couple things you need to do: -1. Generate your own `definitions.json` file from rippled source code using [this tool](https://github.com/RichardAH/xrpl-codec-gen) (The default `definitions.json` for mainnet can be found [here](https://github.com/XRPLF/xrpl.js/blob/main/packages/ripple-binary-codec/src/enums/definitions.json)) +1. Generate your own `definitions.json` file from rippled source code using [this tool](../../tools/generateDefinitions.js). The default `definitions.json` for mainnet can be found [here](https://github.com/XRPLF/xrpl.js/blob/main/packages/ripple-binary-codec/src/enums/definitions.json). 2. Create new SerializedType classes for any new Types (So that encode/decode behavior is defined). The SerializedType classes correspond to "ST..." classes in Rippled. Note: This is very rarely required. - For examples of how to implement that you can look at objects in the [`types` folder](../types/), such as `Amount`, `UInt8`, or `STArray`. diff --git a/packages/ripple-binary-codec/src/enums/bytes.ts b/packages/ripple-binary-codec/src/enums/bytes.ts index 33a7e5393c..37203f6c69 100644 --- a/packages/ripple-binary-codec/src/enums/bytes.ts +++ b/packages/ripple-binary-codec/src/enums/bytes.ts @@ -34,7 +34,10 @@ export class Bytes { * @brief: Collection of Bytes objects, mapping bidirectionally */ export class BytesLookup { - constructor(types: Record, readonly ordinalWidth: number) { + constructor( + types: Record, + readonly ordinalWidth: number, + ) { Object.entries(types).forEach(([k, v]) => { this.add(k, v) }) diff --git a/packages/ripple-binary-codec/src/enums/constants.ts b/packages/ripple-binary-codec/src/enums/constants.ts index 7d181e470c..dafebb5a19 100644 --- a/packages/ripple-binary-codec/src/enums/constants.ts +++ b/packages/ripple-binary-codec/src/enums/constants.ts @@ -1,4 +1,5 @@ -export const TYPE_WIDTH = 2 -export const LEDGER_ENTRY_WIDTH = 2 -export const TRANSACTION_TYPE_WIDTH = 2 -export const TRANSACTION_RESULT_WIDTH = 1 +export const TYPE_WIDTH = 2 // UInt16 +export const LEDGER_ENTRY_WIDTH = 2 // UInt16 +export const TRANSACTION_TYPE_WIDTH = 2 // UInt16 +export const TRANSACTION_RESULT_WIDTH = 1 // UInt8 +export const DELEGATABLE_PERMISSIONS_WIDTH = 4 // UInt32 diff --git a/packages/ripple-binary-codec/src/enums/definitions.json b/packages/ripple-binary-codec/src/enums/definitions.json index 797be9ce21..ccd7b7990f 100644 --- a/packages/ripple-binary-codec/src/enums/definitions.json +++ b/packages/ripple-binary-codec/src/enums/definitions.json @@ -1,2775 +1,3610 @@ { - "TYPES": { - "Done": -1, - "Unknown": -2, - "NotPresent": 0, - "UInt16": 1, - "UInt32": 2, - "UInt64": 3, - "Hash128": 4, - "Hash256": 5, - "Amount": 6, - "Blob": 7, - "AccountID": 8, - "STObject": 14, - "STArray": 15, - "UInt8": 16, - "Hash160": 17, - "PathSet": 18, - "Vector256": 19, - "UInt96": 20, - "UInt192": 21, - "UInt384": 22, - "UInt512": 23, - "Issue": 24, - "XChainBridge": 25, - "Currency": 26, - "Transaction": 10001, - "LedgerEntry": 10002, - "Validation": 10003, - "Metadata": 10004 - }, - "LEDGER_ENTRY_TYPES": { - "Invalid": -1, - "AccountRoot": 97, - "DirectoryNode": 100, - "RippleState": 114, - "Ticket": 84, - "SignerList": 83, - "Offer": 111, - "Bridge": 105, - "LedgerHashes": 104, - "Amendments": 102, - "XChainOwnedClaimID": 113, - "XChainOwnedCreateAccountClaimID": 116, - "FeeSettings": 115, - "Escrow": 117, - "PayChannel": 120, - "Check": 67, - "DepositPreauth": 112, - "NegativeUNL": 78, - "NFTokenPage": 80, - "NFTokenOffer": 55, - "AMM": 121, - "DID": 73, - "Oracle": 128, - "Any": -3, - "Child": -2, - "Nickname": 110, - "Contract": 99, - "GeneratorMap": 103 - }, "FIELDS": [ [ "Generic", { - "nth": 0, - "isVLEncoded": false, "isSerialized": false, "isSigningField": false, + "isVLEncoded": false, + "nth": 0, "type": "Unknown" } ], [ "Invalid", { - "nth": -1, - "isVLEncoded": false, "isSerialized": false, "isSigningField": false, + "isVLEncoded": false, + "nth": -1, "type": "Unknown" } ], [ "ObjectEndMarker", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 1, "type": "STObject" } ], [ "ArrayEndMarker", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 1, "type": "STArray" } ], [ - "hash", + "taker_gets_funded", { - "nth": 257, - "isVLEncoded": false, "isSerialized": false, "isSigningField": false, - "type": "Hash256" - } - ], - [ - "index", - { - "nth": 258, "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, - "type": "Hash256" - } - ], - [ - "taker_gets_funded", - { "nth": 258, - "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, "type": "Amount" } ], [ "taker_pays_funded", { - "nth": 259, - "isVLEncoded": false, "isSerialized": false, "isSigningField": false, + "isVLEncoded": false, + "nth": 259, "type": "Amount" } ], [ - "LedgerEntry", + "LedgerEntryType", { - "nth": 257, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, - "type": "LedgerEntry" + "nth": 1, + "type": "UInt16" } ], [ - "Transaction", + "TransactionType", { - "nth": 257, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, - "type": "Transaction" + "nth": 2, + "type": "UInt16" } ], [ - "Validation", + "SignerWeight", { - "nth": 257, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, - "type": "Validation" + "nth": 3, + "type": "UInt16" } ], [ - "Metadata", + "TransferFee", { - "nth": 257, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, - "isSerialized": false, - "isSigningField": false, - "type": "Metadata" + "nth": 4, + "type": "UInt16" } ], [ - "CloseResolution", + "TradingFee", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 5, + "type": "UInt16" } ], [ - "Method", + "DiscountedFee", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 6, + "type": "UInt16" } ], [ - "TransactionResult", + "Version", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 16, + "type": "UInt16" } ], [ - "Scale", + "HookStateChangeCount", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 17, + "type": "UInt16" } ], [ - "TickSize", + "HookEmitCount", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 18, + "type": "UInt16" } ], [ - "UNLModifyDisabling", + "HookExecutionIndex", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 19, + "type": "UInt16" } ], [ - "HookResult", + "HookApiVersion", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 20, + "type": "UInt16" } ], [ - "WasLockingChainSend", + "LedgerFixType", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt8" + "isVLEncoded": false, + "nth": 21, + "type": "UInt16" } ], [ - "LedgerEntryType", + "ManagementFeeRate", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 22, "type": "UInt16" } ], [ - "TransactionType", + "NetworkID", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 1, + "type": "UInt32" } ], [ - "SignerWeight", + "Flags", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 2, + "type": "UInt32" } ], [ - "TransferFee", + "SourceTag", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 3, + "type": "UInt32" } ], [ - "TradingFee", + "Sequence", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 4, + "type": "UInt32" } ], [ - "DiscountedFee", + "PreviousTxnLgrSeq", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 5, + "type": "UInt32" } ], [ - "Version", + "LedgerSequence", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" + "isVLEncoded": false, + "nth": 6, + "type": "UInt32" } ], [ - "HookStateChangeCount", + "CloseTime", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt16" - } - ], - [ - "HookEmitCount", - { - "nth": 18, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt16" - } - ], - [ - "HookExecutionIndex", - { - "nth": 19, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt16" - } - ], - [ - "HookApiVersion", - { - "nth": 20, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt16" - } - ], - [ - "NetworkID", - { - "nth": 1, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "Flags", - { - "nth": 2, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "SourceTag", - { - "nth": 3, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "Sequence", - { - "nth": 4, "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "PreviousTxnLgrSeq", - { - "nth": 5, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "LedgerSequence", - { - "nth": 6, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "UInt32" - } - ], - [ - "CloseTime", - { "nth": 7, - "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, "type": "UInt32" } ], [ "ParentCloseTime", { - "nth": 8, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 8, "type": "UInt32" } ], [ "SigningTime", { - "nth": 9, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 9, "type": "UInt32" } ], [ "Expiration", { - "nth": 10, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 10, "type": "UInt32" } ], [ "TransferRate", { - "nth": 11, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 11, "type": "UInt32" } ], [ "WalletSize", { - "nth": 12, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 12, "type": "UInt32" } ], [ "OwnerCount", { - "nth": 13, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 13, "type": "UInt32" } ], [ "DestinationTag", { - "nth": 14, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 14, "type": "UInt32" } ], [ "LastUpdateTime", { - "nth": 15, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 15, "type": "UInt32" } ], [ "HighQualityIn", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 16, "type": "UInt32" } ], [ "HighQualityOut", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 17, "type": "UInt32" } ], [ "LowQualityIn", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 18, "type": "UInt32" } ], [ "LowQualityOut", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 19, "type": "UInt32" } ], [ "QualityIn", { - "nth": 20, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 20, "type": "UInt32" } ], [ "QualityOut", { - "nth": 21, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 21, "type": "UInt32" } ], [ "StampEscrow", { - "nth": 22, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 22, "type": "UInt32" } ], [ "BondAmount", { - "nth": 23, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 23, "type": "UInt32" } ], [ "LoadFee", { - "nth": 24, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 24, "type": "UInt32" } ], [ "OfferSequence", { - "nth": 25, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 25, "type": "UInt32" } ], [ "FirstLedgerSequence", { - "nth": 26, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 26, "type": "UInt32" } ], [ "LastLedgerSequence", { - "nth": 27, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 27, "type": "UInt32" } ], [ "TransactionIndex", { - "nth": 28, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 28, "type": "UInt32" } ], [ "OperationLimit", { - "nth": 29, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 29, "type": "UInt32" } ], [ "ReferenceFeeUnits", { - "nth": 30, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 30, "type": "UInt32" } ], [ "ReserveBase", { - "nth": 31, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 31, "type": "UInt32" } ], [ "ReserveIncrement", { - "nth": 32, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 32, "type": "UInt32" } ], [ "SetFlag", { - "nth": 33, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 33, "type": "UInt32" } ], [ "ClearFlag", { - "nth": 34, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 34, "type": "UInt32" } ], [ "SignerQuorum", { - "nth": 35, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 35, "type": "UInt32" } ], [ "CancelAfter", { - "nth": 36, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 36, "type": "UInt32" } ], [ "FinishAfter", { - "nth": 37, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 37, "type": "UInt32" } ], [ "SignerListID", { - "nth": 38, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 38, "type": "UInt32" } ], [ "SettleDelay", { - "nth": 39, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 39, "type": "UInt32" } ], [ "TicketCount", { - "nth": 40, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 40, "type": "UInt32" } ], [ "TicketSequence", { - "nth": 41, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 41, "type": "UInt32" } ], [ "NFTokenTaxon", { - "nth": 42, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 42, "type": "UInt32" } ], [ "MintedNFTokens", { - "nth": 43, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 43, "type": "UInt32" } ], [ "BurnedNFTokens", { - "nth": 44, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 44, "type": "UInt32" } ], [ "HookStateCount", { - "nth": 45, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 45, "type": "UInt32" } ], [ "EmitGeneration", { - "nth": 46, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 46, "type": "UInt32" } ], [ "VoteWeight", { - "nth": 48, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 48, "type": "UInt32" } ], [ "FirstNFTokenSequence", { - "nth": 50, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 50, "type": "UInt32" } ], [ "OracleDocumentID", { - "nth": 51, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 51, "type": "UInt32" } ], [ - "IndexNext", + "PermissionValue", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 52, + "type": "UInt32" } ], [ - "IndexPrevious", + "MutableFlags", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 53, + "type": "UInt32" } ], [ - "BookNode", + "StartDate", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 54, + "type": "UInt32" } ], [ - "OwnerNode", + "PaymentInterval", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 55, + "type": "UInt32" } ], [ - "BaseFee", + "GracePeriod", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 56, + "type": "UInt32" } ], [ - "ExchangeRate", + "PreviousPaymentDueDate", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 57, + "type": "UInt32" } ], [ - "LowNode", + "NextPaymentDueDate", { - "nth": 7, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 58, + "type": "UInt32" } ], [ - "HighNode", + "PaymentRemaining", { - "nth": 8, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 59, + "type": "UInt32" } ], [ - "DestinationNode", + "PaymentTotal", { - "nth": 9, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 60, + "type": "UInt32" } ], [ - "Cookie", + "LoanSequence", { - "nth": 10, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 61, + "type": "UInt32" } ], [ - "ServerVersion", + "CoverRateMinimum", { - "nth": 11, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 62, + "type": "UInt32" } ], [ - "NFTokenOfferNode", + "CoverRateLiquidation", { - "nth": 12, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 63, + "type": "UInt32" } ], [ - "EmitBurden", + "OverpaymentFee", { - "nth": 13, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 64, + "type": "UInt32" } ], [ - "HookOn", + "InterestRate", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 65, + "type": "UInt32" } ], [ - "HookInstructionCount", + "LateInterestRate", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 66, + "type": "UInt32" } ], [ - "HookReturnCode", + "CloseInterestRate", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 67, + "type": "UInt32" } ], [ - "ReferenceCount", + "OverpaymentInterestRate", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "UInt64" + "isVLEncoded": false, + "nth": 68, + "type": "UInt32" } ], [ - "XChainClaimID", + "IndexNext", { - "nth": 20, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 1, "type": "UInt64" } ], [ - "XChainAccountCreateCount", + "IndexPrevious", { - "nth": 21, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 2, "type": "UInt64" } ], [ - "XChainAccountClaimCount", + "BookNode", { - "nth": 22, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 3, "type": "UInt64" } ], [ - "AssetPrice", + "OwnerNode", { - "nth": 23, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 4, "type": "UInt64" } ], [ - "EmailHash", + "BaseFee", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash128" + "isVLEncoded": false, + "nth": 5, + "type": "UInt64" } ], [ - "TakerPaysCurrency", + "ExchangeRate", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash160" + "isVLEncoded": false, + "nth": 6, + "type": "UInt64" } ], [ - "TakerPaysIssuer", + "LowNode", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash160" + "isVLEncoded": false, + "nth": 7, + "type": "UInt64" } ], [ - "TakerGetsCurrency", + "HighNode", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash160" + "isVLEncoded": false, + "nth": 8, + "type": "UInt64" } ], [ - "TakerGetsIssuer", + "DestinationNode", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash160" + "isVLEncoded": false, + "nth": 9, + "type": "UInt64" } ], [ - "LedgerHash", + "Cookie", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 10, + "type": "UInt64" } ], [ - "ParentHash", + "ServerVersion", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 11, + "type": "UInt64" } ], [ - "TransactionHash", + "NFTokenOfferNode", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 12, + "type": "UInt64" } ], [ - "AccountHash", + "EmitBurden", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 13, + "type": "UInt64" } ], [ - "PreviousTxnID", + "HookOn", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 16, + "type": "UInt64" } ], [ - "LedgerIndex", + "HookInstructionCount", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 17, + "type": "UInt64" } ], [ - "WalletLocator", + "HookReturnCode", { - "nth": 7, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 18, + "type": "UInt64" } ], [ - "RootIndex", + "ReferenceCount", { - "nth": 8, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 19, + "type": "UInt64" } ], [ - "AccountTxnID", + "XChainClaimID", { - "nth": 9, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 20, + "type": "UInt64" } ], [ - "NFTokenID", + "XChainAccountCreateCount", { - "nth": 10, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 21, + "type": "UInt64" } ], [ - "EmitParentTxnID", + "XChainAccountClaimCount", { - "nth": 11, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 22, + "type": "UInt64" } ], [ - "EmitNonce", + "AssetPrice", { - "nth": 12, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 23, + "type": "UInt64" } ], [ - "EmitHookHash", + "MaximumAmount", { - "nth": 13, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 24, + "type": "UInt64" } ], [ - "AMMID", + "OutstandingAmount", { - "nth": 14, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 25, + "type": "UInt64" } ], [ - "BookDirectory", + "MPTAmount", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 26, + "type": "UInt64" } ], [ - "InvoiceID", + "IssuerNode", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 27, + "type": "UInt64" } ], [ - "Nickname", + "SubjectNode", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 28, + "type": "UInt64" } ], [ - "Amendment", + "LockedAmount", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 29, + "type": "UInt64" } ], [ - "Digest", + "VaultNode", { - "nth": 21, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 30, + "type": "UInt64" } ], [ - "Channel", + "LoanBrokerNode", { - "nth": 22, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 31, + "type": "UInt64" } ], [ - "ConsensusHash", + "EmailHash", { - "nth": 23, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Hash256" + "isVLEncoded": false, + "nth": 1, + "type": "Hash128" } ], [ - "CheckID", + "LedgerHash", { - "nth": 24, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 1, "type": "Hash256" } ], [ - "ValidatedHash", + "ParentHash", { - "nth": 25, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 2, "type": "Hash256" } ], [ - "PreviousPageMin", + "TransactionHash", { - "nth": 26, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 3, "type": "Hash256" } ], [ - "NextPageMin", + "AccountHash", { - "nth": 27, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 4, "type": "Hash256" } ], [ - "NFTokenBuyOffer", + "PreviousTxnID", { - "nth": 28, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 5, "type": "Hash256" } ], [ - "NFTokenSellOffer", + "LedgerIndex", { - "nth": 29, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 6, "type": "Hash256" } ], [ - "HookStateKey", + "WalletLocator", { - "nth": 30, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 7, "type": "Hash256" } ], [ - "HookHash", + "RootIndex", { - "nth": 31, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 8, "type": "Hash256" } ], [ - "HookNamespace", + "AccountTxnID", { - "nth": 32, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 9, "type": "Hash256" } ], [ - "HookSetTxnID", + "NFTokenID", { - "nth": 33, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, + "isVLEncoded": false, + "nth": 10, "type": "Hash256" } ], [ - "Amount", + "EmitParentTxnID", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 11, + "type": "Hash256" } ], [ - "Balance", + "EmitNonce", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 12, + "type": "Hash256" } ], [ - "LimitAmount", + "EmitHookHash", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 13, + "type": "Hash256" } ], [ - "TakerPays", + "AMMID", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 14, + "type": "Hash256" } ], [ - "TakerGets", + "BookDirectory", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 16, + "type": "Hash256" } ], [ - "LowLimit", + "InvoiceID", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 17, + "type": "Hash256" } ], [ - "HighLimit", + "Nickname", { - "nth": 7, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 18, + "type": "Hash256" } ], [ - "Fee", + "Amendment", { - "nth": 8, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 19, + "type": "Hash256" } ], [ - "SendMax", + "Digest", { - "nth": 9, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 21, + "type": "Hash256" } ], [ - "DeliverMin", + "Channel", { - "nth": 10, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 22, + "type": "Hash256" } ], [ - "Amount2", + "ConsensusHash", { - "nth": 11, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 23, + "type": "Hash256" } ], [ - "BidMin", + "CheckID", { - "nth": 12, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 24, + "type": "Hash256" } ], [ - "BidMax", + "ValidatedHash", { - "nth": 13, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 25, + "type": "Hash256" } ], [ - "MinimumOffer", + "PreviousPageMin", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 26, + "type": "Hash256" } ], [ - "RippleEscrow", + "NextPageMin", { - "nth": 17, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" - } - ], + "isVLEncoded": false, + "nth": 27, + "type": "Hash256" + } + ], [ - "DeliveredAmount", + "NFTokenBuyOffer", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 28, + "type": "Hash256" } ], [ - "NFTokenBrokerFee", + "NFTokenSellOffer", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 29, + "type": "Hash256" } ], [ - "BaseFeeDrops", + "HookStateKey", { - "nth": 22, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 30, + "type": "Hash256" } ], [ - "ReserveBaseDrops", + "HookHash", { - "nth": 23, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 31, + "type": "Hash256" } ], [ - "ReserveIncrementDrops", + "HookNamespace", { - "nth": 24, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 32, + "type": "Hash256" } ], [ - "LPTokenOut", + "HookSetTxnID", { - "nth": 25, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 33, + "type": "Hash256" } ], [ - "LPTokenIn", + "DomainID", { - "nth": 26, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 34, + "type": "Hash256" } ], [ - "EPrice", + "VaultID", { - "nth": 27, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 35, + "type": "Hash256" } ], [ - "Price", + "ParentBatchID", { - "nth": 28, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 36, + "type": "Hash256" } ], [ - "SignatureReward", + "LoanBrokerID", { - "nth": 29, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 37, + "type": "Hash256" } ], [ - "MinAccountCreateAmount", + "LoanID", { - "nth": 30, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Amount" + "isVLEncoded": false, + "nth": 38, + "type": "Hash256" } ], [ - "LPTokenBalance", + "hash", { - "nth": 31, + "isSerialized": false, + "isSigningField": false, "isVLEncoded": false, - "isSerialized": true, - "isSigningField": true, - "type": "Amount" + "nth": 257, + "type": "Hash256" } ], [ - "PublicKey", + "index", { - "nth": 1, - "isVLEncoded": true, - "isSerialized": true, - "isSigningField": true, - "type": "Blob" + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 258, + "type": "Hash256" } ], [ - "MessageKey", + "Amount", { - "nth": 2, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 1, + "type": "Amount" } ], [ - "SigningPubKey", + "Balance", { - "nth": 3, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 2, + "type": "Amount" } ], [ - "TxnSignature", + "LimitAmount", { - "nth": 4, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": false, - "type": "Blob" + "isSigningField": true, + "isVLEncoded": false, + "nth": 3, + "type": "Amount" } ], [ - "URI", + "TakerPays", { - "nth": 5, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 4, + "type": "Amount" } ], [ - "Signature", + "TakerGets", { - "nth": 6, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": false, - "type": "Blob" + "isSigningField": true, + "isVLEncoded": false, + "nth": 5, + "type": "Amount" } ], [ - "Domain", + "LowLimit", { - "nth": 7, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 6, + "type": "Amount" } ], [ - "FundCode", + "HighLimit", { - "nth": 8, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 7, + "type": "Amount" } ], [ - "RemoveCode", + "Fee", { - "nth": 9, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 8, + "type": "Amount" } ], [ - "ExpireCode", + "SendMax", { - "nth": 10, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 9, + "type": "Amount" } ], [ - "CreateCode", + "DeliverMin", { - "nth": 11, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 10, + "type": "Amount" } ], [ - "MemoType", + "Amount2", { - "nth": 12, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 11, + "type": "Amount" } ], [ - "MemoData", + "BidMin", { - "nth": 13, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 12, + "type": "Amount" } ], [ - "MemoFormat", + "BidMax", { - "nth": 14, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 13, + "type": "Amount" } ], [ - "Fulfillment", + "MinimumOffer", { - "nth": 16, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 16, + "type": "Amount" } ], [ - "Condition", + "RippleEscrow", { - "nth": 17, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 17, + "type": "Amount" } ], [ - "MasterSignature", + "DeliveredAmount", { - "nth": 18, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": false, - "type": "Blob" + "isSigningField": true, + "isVLEncoded": false, + "nth": 18, + "type": "Amount" } ], [ - "UNLModifyValidator", + "NFTokenBrokerFee", { - "nth": 19, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 19, + "type": "Amount" } ], [ - "ValidatorToDisable", + "BaseFeeDrops", { - "nth": 20, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 22, + "type": "Amount" } ], [ - "ValidatorToReEnable", + "ReserveBaseDrops", { - "nth": 21, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 23, + "type": "Amount" } ], [ - "HookStateData", + "ReserveIncrementDrops", { - "nth": 22, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 24, + "type": "Amount" } ], [ - "HookReturnString", + "LPTokenOut", { - "nth": 23, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 25, + "type": "Amount" } ], [ - "HookParameterName", + "LPTokenIn", { - "nth": 24, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 26, + "type": "Amount" } ], [ - "HookParameterValue", + "EPrice", { - "nth": 25, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 27, + "type": "Amount" } ], [ - "DIDDocument", + "Price", { - "nth": 26, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 28, + "type": "Amount" } ], [ - "Data", + "SignatureReward", { - "nth": 27, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 29, + "type": "Amount" } ], [ - "AssetClass", + "MinAccountCreateAmount", { - "nth": 28, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 30, + "type": "Amount" } ], [ - "Provider", + "LPTokenBalance", { - "nth": 29, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Blob" + "isVLEncoded": false, + "nth": 31, + "type": "Amount" } ], [ - "Account", + "PublicKey", { - "nth": 1, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 1, + "type": "Blob" } ], [ - "Owner", + "MessageKey", { - "nth": 2, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 2, + "type": "Blob" } ], [ - "Destination", + "SigningPubKey", { - "nth": 3, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 3, + "type": "Blob" } ], [ - "Issuer", + "TxnSignature", { - "nth": 4, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": true, - "type": "AccountID" + "isSigningField": false, + "isVLEncoded": true, + "nth": 4, + "type": "Blob" } ], [ - "Authorize", + "URI", { - "nth": 5, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 5, + "type": "Blob" } ], [ - "Unauthorize", + "Signature", { - "nth": 6, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": true, - "type": "AccountID" + "isSigningField": false, + "isVLEncoded": true, + "nth": 6, + "type": "Blob" } ], [ - "RegularKey", + "Domain", { - "nth": 8, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 7, + "type": "Blob" } ], [ - "NFTokenMinter", + "FundCode", { - "nth": 9, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 8, + "type": "Blob" } ], [ - "EmitCallback", + "RemoveCode", { - "nth": 10, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 9, + "type": "Blob" } ], [ - "HookAccount", + "ExpireCode", { - "nth": 16, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 10, + "type": "Blob" } ], [ - "OtherChainSource", + "CreateCode", { - "nth": 18, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 11, + "type": "Blob" } ], [ - "OtherChainDestination", + "MemoType", { - "nth": 19, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 12, + "type": "Blob" } ], [ - "AttestationSignerAccount", + "MemoData", { - "nth": 20, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 13, + "type": "Blob" } ], [ - "AttestationRewardAccount", + "MemoFormat", { - "nth": 21, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 14, + "type": "Blob" } ], [ - "LockingChainDoor", + "Fulfillment", { - "nth": 22, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 16, + "type": "Blob" } ], [ - "IssuingChainDoor", + "Condition", { - "nth": 23, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "AccountID" + "isVLEncoded": true, + "nth": 17, + "type": "Blob" } ], [ - "Indexes", + "MasterSignature", { - "nth": 1, - "isVLEncoded": true, "isSerialized": true, - "isSigningField": true, - "type": "Vector256" + "isSigningField": false, + "isVLEncoded": true, + "nth": 18, + "type": "Blob" } ], [ - "Hashes", + "UNLModifyValidator", { - "nth": 2, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Vector256" + "isVLEncoded": true, + "nth": 19, + "type": "Blob" } ], [ - "Amendments", + "ValidatorToDisable", { - "nth": 3, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Vector256" + "isVLEncoded": true, + "nth": 20, + "type": "Blob" } ], [ - "NFTokenOffers", + "ValidatorToReEnable", { - "nth": 4, - "isVLEncoded": true, "isSerialized": true, "isSigningField": true, - "type": "Vector256" + "isVLEncoded": true, + "nth": 21, + "type": "Blob" } ], [ - "Paths", + "HookStateData", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "PathSet" + "isVLEncoded": true, + "nth": 22, + "type": "Blob" } ], [ - "BaseAsset", + "HookReturnString", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Currency" - } + "isVLEncoded": true, + "nth": 23, + "type": "Blob" + } ], [ - "QuoteAsset", + "HookParameterName", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Currency" + "isVLEncoded": true, + "nth": 24, + "type": "Blob" } ], [ - "LockingChainIssue", + "HookParameterValue", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Issue" + "isVLEncoded": true, + "nth": 25, + "type": "Blob" } ], [ - "IssuingChainIssue", + "DIDDocument", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Issue" + "isVLEncoded": true, + "nth": 26, + "type": "Blob" } ], [ - "Asset", + "Data", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Issue" + "isVLEncoded": true, + "nth": 27, + "type": "Blob" } ], [ - "Asset2", + "AssetClass", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "Issue" + "isVLEncoded": true, + "nth": 28, + "type": "Blob" } ], [ - "XChainBridge", + "Provider", { - "nth": 1, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "XChainBridge" + "isVLEncoded": true, + "nth": 29, + "type": "Blob" } ], [ - "TransactionMetaData", + "MPTokenMetadata", { - "nth": 2, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 30, + "type": "Blob" } ], [ - "CreatedNode", + "CredentialType", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 31, + "type": "Blob" } ], [ - "DeletedNode", + "Account", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 1, + "type": "AccountID" } ], [ - "ModifiedNode", + "Owner", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 2, + "type": "AccountID" } ], [ - "PreviousFields", + "Destination", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 3, + "type": "AccountID" } ], [ - "FinalFields", + "Issuer", { - "nth": 7, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 4, + "type": "AccountID" } ], [ - "NewFields", + "Authorize", { - "nth": 8, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 5, + "type": "AccountID" } ], [ - "TemplateEntry", + "Unauthorize", { - "nth": 9, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 6, + "type": "AccountID" } ], [ - "Memo", + "RegularKey", { - "nth": 10, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 8, + "type": "AccountID" } ], [ - "SignerEntry", + "NFTokenMinter", { - "nth": 11, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 9, + "type": "AccountID" } ], [ - "NFToken", + "EmitCallback", { - "nth": 12, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 10, + "type": "AccountID" } ], [ - "EmitDetails", + "Holder", { - "nth": 13, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 11, + "type": "AccountID" } ], [ - "Hook", + "Delegate", { - "nth": 14, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 12, + "type": "AccountID" } ], [ - "Signer", + "HookAccount", { - "nth": 16, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 16, + "type": "AccountID" } ], [ - "Majority", + "OtherChainSource", { - "nth": 18, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 18, + "type": "AccountID" } ], [ - "DisabledValidator", + "OtherChainDestination", { - "nth": 19, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 19, + "type": "AccountID" } ], [ - "EmittedTxn", + "AttestationSignerAccount", { - "nth": 20, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 20, + "type": "AccountID" } ], [ - "HookExecution", + "AttestationRewardAccount", { - "nth": 21, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 21, + "type": "AccountID" } ], [ - "HookDefinition", + "LockingChainDoor", { - "nth": 22, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 22, + "type": "AccountID" } ], [ - "HookParameter", + "IssuingChainDoor", { - "nth": 23, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 23, + "type": "AccountID" } ], [ - "HookGrant", + "Subject", { - "nth": 24, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 24, + "type": "AccountID" } ], [ - "VoteEntry", + "Borrower", { - "nth": 25, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 25, + "type": "AccountID" } ], [ - "AuctionSlot", + "Counterparty", { - "nth": 26, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": true, + "nth": 26, + "type": "AccountID" } ], [ - "AuthAccount", + "Number", { - "nth": 27, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 1, + "type": "Number" } ], [ - "XChainClaimProofSig", + "AssetsAvailable", { - "nth": 28, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 2, + "type": "Number" } ], [ - "XChainCreateAccountProofSig", + "AssetsMaximum", { - "nth": 29, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 3, + "type": "Number" } ], [ - "XChainClaimAttestationCollectionElement", + "AssetsTotal", { - "nth": 30, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 4, + "type": "Number" } ], [ - "XChainCreateAccountAttestationCollectionElement", + "LossUnrealized", { - "nth": 31, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 5, + "type": "Number" } ], [ - "PriceData", + "DebtTotal", { - "nth": 32, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STObject" + "isVLEncoded": false, + "nth": 6, + "type": "Number" } ], [ - "Signers", + "DebtMaximum", { - "nth": 3, - "isVLEncoded": false, "isSerialized": true, - "isSigningField": false, - "type": "STArray" + "isSigningField": true, + "isVLEncoded": false, + "nth": 7, + "type": "Number" } ], [ - "SignerEntries", + "CoverAvailable", { - "nth": 4, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 8, + "type": "Number" } ], [ - "Template", + "LoanOriginationFee", { - "nth": 5, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 9, + "type": "Number" } ], [ - "Necessary", + "LoanServiceFee", { - "nth": 6, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 10, + "type": "Number" } ], [ - "Sufficient", + "LatePaymentFee", { - "nth": 7, - "isVLEncoded": false, "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 11, + "type": "Number" } ], [ - "AffectedNodes", + "ClosePaymentFee", { - "nth": 8, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 12, + "type": "Number" + } + ], + [ + "PrincipalOutstanding", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 13, + "type": "Number" } ], [ - "Memos", + "PrincipalRequested", { - "nth": 9, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 14, + "type": "Number" + } + ], + [ + "TotalValueOutstanding", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 15, + "type": "Number" } ], [ - "NFTokens", + "PeriodicPayment", { - "nth": 10, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 16, + "type": "Number" + } + ], + [ + "ManagementFeeOutstanding", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 17, + "type": "Number" } ], [ - "Hooks", + "LoanScale", { - "nth": 11, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 1, + "type": "Int32" + } + ], + [ + "TransactionMetaData", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 2, + "type": "STObject" } ], [ - "VoteSlots", + "CreatedNode", { - "nth": 12, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 3, + "type": "STObject" + } + ], + [ + "DeletedNode", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 4, + "type": "STObject" } ], [ - "Majorities", + "ModifiedNode", { - "nth": 16, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 5, + "type": "STObject" + } + ], + [ + "PreviousFields", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 6, + "type": "STObject" } ], [ - "DisabledValidators", + "FinalFields", { - "nth": 17, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 7, + "type": "STObject" + } + ], + [ + "NewFields", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 8, + "type": "STObject" } ], [ - "HookExecutions", + "TemplateEntry", { - "nth": 18, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 9, + "type": "STObject" + } + ], + [ + "Memo", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 10, + "type": "STObject" } ], [ - "HookParameters", + "SignerEntry", { - "nth": 19, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 11, + "type": "STObject" + } + ], + [ + "NFToken", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 12, + "type": "STObject" } ], [ - "HookGrants", + "EmitDetails", { - "nth": 20, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 13, + "type": "STObject" + } + ], + [ + "Hook", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 14, + "type": "STObject" } ], [ - "XChainClaimAttestations", + "Permission", { - "nth": 21, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 15, + "type": "STObject" + } + ], + [ + "Signer", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 16, + "type": "STObject" } ], [ - "XChainCreateAccountAttestations", + "Majority", { - "nth": 22, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 18, + "type": "STObject" + } + ], + [ + "DisabledValidator", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 19, + "type": "STObject" } ], [ - "PriceDataSeries", + "EmittedTxn", { - "nth": 24, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 20, + "type": "STObject" + } + ], + [ + "HookExecution", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 21, + "type": "STObject" } ], [ - "AuthAccounts", + "HookDefinition", { - "nth": 25, + "isSerialized": true, + "isSigningField": true, "isVLEncoded": false, + "nth": 22, + "type": "STObject" + } + ], + [ + "HookParameter", + { "isSerialized": true, "isSigningField": true, - "type": "STArray" + "isVLEncoded": false, + "nth": 23, + "type": "STObject" } - ] - ], - "TRANSACTION_RESULTS": { - "telLOCAL_ERROR": -399, - "telBAD_DOMAIN": -398, - "telBAD_PATH_COUNT": -397, - "telBAD_PUBLIC_KEY": -396, - "telFAILED_PROCESSING": -395, - "telINSUF_FEE_P": -394, - "telNO_DST_PARTIAL": -393, + ], + [ + "HookGrant", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 24, + "type": "STObject" + } + ], + [ + "VoteEntry", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 25, + "type": "STObject" + } + ], + [ + "AuctionSlot", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 26, + "type": "STObject" + } + ], + [ + "AuthAccount", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 27, + "type": "STObject" + } + ], + [ + "XChainClaimProofSig", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 28, + "type": "STObject" + } + ], + [ + "XChainCreateAccountProofSig", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 29, + "type": "STObject" + } + ], + [ + "XChainClaimAttestationCollectionElement", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 30, + "type": "STObject" + } + ], + [ + "XChainCreateAccountAttestationCollectionElement", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 31, + "type": "STObject" + } + ], + [ + "PriceData", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 32, + "type": "STObject" + } + ], + [ + "Credential", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 33, + "type": "STObject" + } + ], + [ + "RawTransaction", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 34, + "type": "STObject" + } + ], + [ + "BatchSigner", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 35, + "type": "STObject" + } + ], + [ + "Book", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 36, + "type": "STObject" + } + ], + [ + "CounterpartySignature", + { + "isSerialized": true, + "isSigningField": false, + "isVLEncoded": false, + "nth": 37, + "type": "STObject" + } + ], + [ + "Signers", + { + "isSerialized": true, + "isSigningField": false, + "isVLEncoded": false, + "nth": 3, + "type": "STArray" + } + ], + [ + "SignerEntries", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 4, + "type": "STArray" + } + ], + [ + "Template", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 5, + "type": "STArray" + } + ], + [ + "Necessary", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 6, + "type": "STArray" + } + ], + [ + "Sufficient", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 7, + "type": "STArray" + } + ], + [ + "AffectedNodes", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 8, + "type": "STArray" + } + ], + [ + "Memos", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 9, + "type": "STArray" + } + ], + [ + "NFTokens", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 10, + "type": "STArray" + } + ], + [ + "Hooks", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 11, + "type": "STArray" + } + ], + [ + "VoteSlots", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 12, + "type": "STArray" + } + ], + [ + "AdditionalBooks", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 13, + "type": "STArray" + } + ], + [ + "Majorities", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 16, + "type": "STArray" + } + ], + [ + "DisabledValidators", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 17, + "type": "STArray" + } + ], + [ + "HookExecutions", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 18, + "type": "STArray" + } + ], + [ + "HookParameters", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 19, + "type": "STArray" + } + ], + [ + "HookGrants", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 20, + "type": "STArray" + } + ], + [ + "XChainClaimAttestations", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 21, + "type": "STArray" + } + ], + [ + "XChainCreateAccountAttestations", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 22, + "type": "STArray" + } + ], + [ + "PriceDataSeries", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 24, + "type": "STArray" + } + ], + [ + "AuthAccounts", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 25, + "type": "STArray" + } + ], + [ + "AuthorizeCredentials", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 26, + "type": "STArray" + } + ], + [ + "UnauthorizeCredentials", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 27, + "type": "STArray" + } + ], + [ + "AcceptedCredentials", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 28, + "type": "STArray" + } + ], + [ + "Permissions", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 29, + "type": "STArray" + } + ], + [ + "RawTransactions", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 30, + "type": "STArray" + } + ], + [ + "BatchSigners", + { + "isSerialized": true, + "isSigningField": false, + "isVLEncoded": false, + "nth": 31, + "type": "STArray" + } + ], + [ + "CloseResolution", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "UInt8" + } + ], + [ + "Method", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 2, + "type": "UInt8" + } + ], + [ + "TransactionResult", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 3, + "type": "UInt8" + } + ], + [ + "Scale", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 4, + "type": "UInt8" + } + ], + [ + "AssetScale", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 5, + "type": "UInt8" + } + ], + [ + "TickSize", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 16, + "type": "UInt8" + } + ], + [ + "UNLModifyDisabling", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 17, + "type": "UInt8" + } + ], + [ + "HookResult", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 18, + "type": "UInt8" + } + ], + [ + "WasLockingChainSend", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 19, + "type": "UInt8" + } + ], + [ + "WithdrawalPolicy", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 20, + "type": "UInt8" + } + ], + [ + "TakerPaysCurrency", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "Hash160" + } + ], + [ + "TakerPaysIssuer", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 2, + "type": "Hash160" + } + ], + [ + "TakerGetsCurrency", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 3, + "type": "Hash160" + } + ], + [ + "TakerGetsIssuer", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 4, + "type": "Hash160" + } + ], + [ + "Paths", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "PathSet" + } + ], + [ + "Indexes", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": true, + "nth": 1, + "type": "Vector256" + } + ], + [ + "Hashes", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": true, + "nth": 2, + "type": "Vector256" + } + ], + [ + "Amendments", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": true, + "nth": 3, + "type": "Vector256" + } + ], + [ + "NFTokenOffers", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": true, + "nth": 4, + "type": "Vector256" + } + ], + [ + "CredentialIDs", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": true, + "nth": 5, + "type": "Vector256" + } + ], + [ + "MPTokenIssuanceID", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "Hash192" + } + ], + [ + "ShareMPTID", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 2, + "type": "Hash192" + } + ], + [ + "LockingChainIssue", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "Issue" + } + ], + [ + "IssuingChainIssue", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 2, + "type": "Issue" + } + ], + [ + "Asset", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 3, + "type": "Issue" + } + ], + [ + "Asset2", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 4, + "type": "Issue" + } + ], + [ + "XChainBridge", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "XChainBridge" + } + ], + [ + "BaseAsset", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "Currency" + } + ], + [ + "QuoteAsset", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 2, + "type": "Currency" + } + ], + [ + "Transaction", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 257, + "type": "Transaction" + } + ], + [ + "LedgerEntry", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 257, + "type": "LedgerEntry" + } + ], + [ + "Validation", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 257, + "type": "Validation" + } + ], + [ + "Metadata", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 257, + "type": "Metadata" + } + ] + ], + "LEDGER_ENTRY_TYPES": { + "AMM": 121, + "AccountRoot": 97, + "Amendments": 102, + "Bridge": 105, + "Check": 67, + "Credential": 129, + "DID": 73, + "Delegate": 131, + "DepositPreauth": 112, + "DirectoryNode": 100, + "Escrow": 117, + "FeeSettings": 115, + "Invalid": -1, + "LedgerHashes": 104, + "Loan": 137, + "LoanBroker": 136, + "MPToken": 127, + "MPTokenIssuance": 126, + "NFTokenOffer": 55, + "NFTokenPage": 80, + "NegativeUNL": 78, + "Offer": 111, + "Oracle": 128, + "PayChannel": 120, + "PermissionedDomain": 130, + "RippleState": 114, + "SignerList": 83, + "Ticket": 84, + "Vault": 132, + "XChainOwnedClaimID": 113, + "XChainOwnedCreateAccountClaimID": 116 + }, + "TRANSACTION_RESULTS": { + "tecAMM_ACCOUNT": 168, + "tecAMM_BALANCE": 163, + "tecAMM_EMPTY": 166, + "tecAMM_FAILED": 164, + "tecAMM_INVALID_TOKENS": 165, + "tecAMM_NOT_EMPTY": 167, + "tecARRAY_EMPTY": 190, + "tecARRAY_TOO_LARGE": 191, + "tecBAD_CREDENTIALS": 193, + "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER": 158, + "tecCLAIM": 100, + "tecCRYPTOCONDITION_ERROR": 146, + "tecDIR_FULL": 121, + "tecDST_TAG_NEEDED": 143, + "tecDUPLICATE": 149, + "tecEMPTY_DID": 187, + "tecEXPIRED": 148, + "tecFAILED_PROCESSING": 105, + "tecFROZEN": 137, + "tecHAS_OBLIGATIONS": 151, + "tecHOOK_REJECTED": 153, + "tecINCOMPLETE": 169, + "tecINSUFFICIENT_FUNDS": 159, + "tecINSUFFICIENT_PAYMENT": 161, + "tecINSUFFICIENT_RESERVE": 141, + "tecINSUFF_FEE": 136, + "tecINSUF_RESERVE_LINE": 122, + "tecINSUF_RESERVE_OFFER": 123, + "tecINTERNAL": 144, + "tecINVALID_UPDATE_TIME": 188, + "tecINVARIANT_FAILED": 147, + "tecKILLED": 150, + "tecLIMIT_EXCEEDED": 195, + "tecLOCKED": 192, + "tecMAX_SEQUENCE_REACHED": 154, + "tecNEED_MASTER_KEY": 142, + "tecNFTOKEN_BUY_SELL_MISMATCH": 156, + "tecNFTOKEN_OFFER_TYPE_MISMATCH": 157, + "tecNO_ALTERNATIVE_KEY": 130, + "tecNO_AUTH": 134, + "tecNO_DELEGATE_PERMISSION": 198, + "tecNO_DST": 124, + "tecNO_DST_INSUF_XRP": 125, + "tecNO_ENTRY": 140, + "tecNO_ISSUER": 133, + "tecNO_LINE": 135, + "tecNO_LINE_INSUF_RESERVE": 126, + "tecNO_LINE_REDUNDANT": 127, + "tecNO_PERMISSION": 139, + "tecNO_REGULAR_KEY": 131, + "tecNO_SUITABLE_NFTOKEN_PAGE": 155, + "tecNO_TARGET": 138, + "tecOBJECT_NOT_FOUND": 160, + "tecOVERSIZE": 145, + "tecOWNERS": 132, + "tecPATH_DRY": 128, + "tecPATH_PARTIAL": 101, + "tecPRECISION_LOSS": 197, + "tecPSEUDO_ACCOUNT": 196, + "tecTOKEN_PAIR_NOT_FOUND": 189, + "tecTOO_SOON": 152, + "tecUNFUNDED": 129, + "tecUNFUNDED_ADD": 102, + "tecUNFUNDED_AMM": 162, + "tecUNFUNDED_OFFER": 103, + "tecUNFUNDED_PAYMENT": 104, + "tecWRONG_ASSET": 194, + "tecXCHAIN_ACCOUNT_CREATE_PAST": 181, + "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 182, + "tecXCHAIN_BAD_CLAIM_ID": 172, + "tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR": 185, + "tecXCHAIN_BAD_TRANSFER_ISSUE": 170, + "tecXCHAIN_CLAIM_NO_QUORUM": 173, + "tecXCHAIN_CREATE_ACCOUNT_DISABLED": 186, + "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 175, + "tecXCHAIN_INSUFF_CREATE_AMOUNT": 180, + "tecXCHAIN_NO_CLAIM_ID": 171, + "tecXCHAIN_NO_SIGNERS_LIST": 178, + "tecXCHAIN_PAYMENT_FAILED": 183, + "tecXCHAIN_PROOF_UNKNOWN_KEY": 174, + "tecXCHAIN_REWARD_MISMATCH": 177, + "tecXCHAIN_SELF_COMMIT": 184, + "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 179, + "tecXCHAIN_WRONG_CHAIN": 176, + + "tefALREADY": -198, + "tefBAD_ADD_AUTH": -197, + "tefBAD_AUTH": -196, + "tefBAD_AUTH_MASTER": -183, + "tefBAD_LEDGER": -195, + "tefBAD_QUORUM": -185, + "tefBAD_SIGNATURE": -186, + "tefCREATED": -194, + "tefEXCEPTION": -193, + "tefFAILURE": -199, + "tefINTERNAL": -192, + "tefINVALID_LEDGER_FIX_TYPE": -178, + "tefINVARIANT_FAILED": -182, + "tefMASTER_DISABLED": -188, + "tefMAX_LEDGER": -187, + "tefNFTOKEN_IS_NOT_TRANSFERABLE": -179, + "tefNOT_MULTI_SIGNING": -184, + "tefNO_AUTH_REQUIRED": -191, + "tefNO_TICKET": -180, + "tefPAST_SEQ": -190, + "tefTOO_BIG": -181, + "tefWRONG_PRIOR": -189, + + "telBAD_DOMAIN": -398, + "telBAD_PATH_COUNT": -397, + "telBAD_PUBLIC_KEY": -396, "telCAN_NOT_QUEUE": -392, "telCAN_NOT_QUEUE_BALANCE": -391, - "telCAN_NOT_QUEUE_BLOCKS": -390, "telCAN_NOT_QUEUE_BLOCKED": -389, + "telCAN_NOT_QUEUE_BLOCKS": -390, "telCAN_NOT_QUEUE_FEE": -388, "telCAN_NOT_QUEUE_FULL": -387, - "telWRONG_NETWORK": -386, - "telREQUIRES_NETWORK_ID": -385, - "telNETWORK_ID_MAKES_TX_NON_CANONICAL": -384, "telENV_RPC_FAILED": -383, + "telFAILED_PROCESSING": -395, + "telINSUF_FEE_P": -394, + "telLOCAL_ERROR": -399, + "telNETWORK_ID_MAKES_TX_NON_CANONICAL": -384, + "telNO_DST_PARTIAL": -393, + "telREQUIRES_NETWORK_ID": -385, + "telWRONG_NETWORK": -386, - "temMALFORMED": -299, + "temARRAY_EMPTY": -253, + "temARRAY_TOO_LARGE": -252, + "temBAD_AMM_TOKENS": -261, "temBAD_AMOUNT": -298, "temBAD_CURRENCY": -297, "temBAD_EXPIRATION": -296, "temBAD_FEE": -295, "temBAD_ISSUER": -294, "temBAD_LIMIT": -293, + "temBAD_NFTOKEN_TRANSFER_FEE": -262, "temBAD_OFFER": -292, "temBAD_PATH": -291, "temBAD_PATH_LOOP": -290, + "temBAD_QUORUM": -271, "temBAD_REGKEY": -289, "temBAD_SEND_XRP_LIMIT": -288, "temBAD_SEND_XRP_MAX": -287, @@ -2778,204 +3613,162 @@ "temBAD_SEND_XRP_PATHS": -284, "temBAD_SEQUENCE": -283, "temBAD_SIGNATURE": -282, + "temBAD_SIGNER": -272, "temBAD_SRC_ACCOUNT": -281, + "temBAD_TICK_SIZE": -269, + "temBAD_TRANSFER_FEE": -251, "temBAD_TRANSFER_RATE": -280, + "temBAD_WEIGHT": -270, + "temCANNOT_PREAUTH_SELF": -267, + "temDISABLED": -273, "temDST_IS_SRC": -279, "temDST_NEEDED": -278, + "temEMPTY_DID": -254, "temINVALID": -277, + "temINVALID_ACCOUNT_ID": -268, + "temINVALID_COUNT": -266, "temINVALID_FLAG": -276, + "temINVALID_INNER_BATCH": -250, + "temMALFORMED": -299, "temREDUNDANT": -275, "temRIPPLE_EMPTY": -274, - "temDISABLED": -273, - "temBAD_SIGNER": -272, - "temBAD_QUORUM": -271, - "temBAD_WEIGHT": -270, - "temBAD_TICK_SIZE": -269, - "temINVALID_ACCOUNT_ID": -268, - "temCANNOT_PREAUTH_SELF": -267, - "temINVALID_COUNT": -266, + "temSEQ_AND_TICKET": -263, "temUNCERTAIN": -265, "temUNKNOWN": -264, - "temSEQ_AND_TICKET": -263, - "temBAD_NFTOKEN_TRANSFER_FEE": -262, - "temBAD_AMM_TOKENS": -261, - "temXCHAIN_EQUAL_DOOR_ACCOUNTS": -260, "temXCHAIN_BAD_PROOF": -259, "temXCHAIN_BRIDGE_BAD_ISSUES": -258, - "temXCHAIN_BRIDGE_NONDOOR_OWNER": -257, "temXCHAIN_BRIDGE_BAD_MIN_ACCOUNT_CREATE_AMOUNT": -256, "temXCHAIN_BRIDGE_BAD_REWARD_AMOUNT": -255, - "temEMPTY_DID": -254, - "temARRAY_EMPTY": -253, - "temARRAY_TOO_LARGE": -252, - - "tefFAILURE": -199, - "tefALREADY": -198, - "tefBAD_ADD_AUTH": -197, - "tefBAD_AUTH": -196, - "tefBAD_LEDGER": -195, - "tefCREATED": -194, - "tefEXCEPTION": -193, - "tefINTERNAL": -192, - "tefNO_AUTH_REQUIRED": -191, - "tefPAST_SEQ": -190, - "tefWRONG_PRIOR": -189, - "tefMASTER_DISABLED": -188, - "tefMAX_LEDGER": -187, - "tefBAD_SIGNATURE": -186, - "tefBAD_QUORUM": -185, - "tefNOT_MULTI_SIGNING": -184, - "tefBAD_AUTH_MASTER": -183, - "tefINVARIANT_FAILED": -182, - "tefTOO_BIG": -181, - "tefNO_TICKET": -180, - "tefNFTOKEN_IS_NOT_TRANSFERABLE": -179, + "temXCHAIN_BRIDGE_NONDOOR_OWNER": -257, + "temXCHAIN_EQUAL_DOOR_ACCOUNTS": -260, - "terRETRY": -99, + "terADDRESS_COLLISION": -86, "terFUNDS_SPENT": -98, "terINSUF_FEE_B": -97, + "terLAST": -91, "terNO_ACCOUNT": -96, + "terNO_AMM": -87, "terNO_AUTH": -95, + "terNO_DELEGATE_PERMISSION": -85, "terNO_LINE": -94, + "terNO_RIPPLE": -90, "terOWNERS": -93, "terPRE_SEQ": -92, - "terLAST": -91, - "terNO_RIPPLE": -90, - "terQUEUED": -89, "terPRE_TICKET": -88, - "terNO_AMM": -87, - - "tesSUCCESS": 0, + "terQUEUED": -89, + "terRETRY": -99, - "tecCLAIM": 100, - "tecPATH_PARTIAL": 101, - "tecUNFUNDED_ADD": 102, - "tecUNFUNDED_OFFER": 103, - "tecUNFUNDED_PAYMENT": 104, - "tecFAILED_PROCESSING": 105, - "tecDIR_FULL": 121, - "tecINSUF_RESERVE_LINE": 122, - "tecINSUF_RESERVE_OFFER": 123, - "tecNO_DST": 124, - "tecNO_DST_INSUF_XRP": 125, - "tecNO_LINE_INSUF_RESERVE": 126, - "tecNO_LINE_REDUNDANT": 127, - "tecPATH_DRY": 128, - "tecUNFUNDED": 129, - "tecNO_ALTERNATIVE_KEY": 130, - "tecNO_REGULAR_KEY": 131, - "tecOWNERS": 132, - "tecNO_ISSUER": 133, - "tecNO_AUTH": 134, - "tecNO_LINE": 135, - "tecINSUFF_FEE": 136, - "tecFROZEN": 137, - "tecNO_TARGET": 138, - "tecNO_PERMISSION": 139, - "tecNO_ENTRY": 140, - "tecINSUFFICIENT_RESERVE": 141, - "tecNEED_MASTER_KEY": 142, - "tecDST_TAG_NEEDED": 143, - "tecINTERNAL": 144, - "tecOVERSIZE": 145, - "tecCRYPTOCONDITION_ERROR": 146, - "tecINVARIANT_FAILED": 147, - "tecEXPIRED": 148, - "tecDUPLICATE": 149, - "tecKILLED": 150, - "tecHAS_OBLIGATIONS": 151, - "tecTOO_SOON": 152, - "tecHOOK_REJECTED": 153, - "tecMAX_SEQUENCE_REACHED": 154, - "tecNO_SUITABLE_NFTOKEN_PAGE": 155, - "tecNFTOKEN_BUY_SELL_MISMATCH": 156, - "tecNFTOKEN_OFFER_TYPE_MISMATCH": 157, - "tecCANT_ACCEPT_OWN_NFTOKEN_OFFER": 158, - "tecINSUFFICIENT_FUNDS": 159, - "tecOBJECT_NOT_FOUND": 160, - "tecINSUFFICIENT_PAYMENT": 161, - "tecUNFUNDED_AMM": 162, - "tecAMM_BALANCE": 163, - "tecAMM_FAILED": 164, - "tecAMM_INVALID_TOKENS": 165, - "tecAMM_EMPTY": 166, - "tecAMM_NOT_EMPTY": 167, - "tecAMM_ACCOUNT": 168, - "tecINCOMPLETE": 169, - "tecXCHAIN_BAD_TRANSFER_ISSUE": 170, - "tecXCHAIN_NO_CLAIM_ID": 171, - "tecXCHAIN_BAD_CLAIM_ID": 172, - "tecXCHAIN_CLAIM_NO_QUORUM": 173, - "tecXCHAIN_PROOF_UNKNOWN_KEY": 174, - "tecXCHAIN_CREATE_ACCOUNT_NONXRP_ISSUE": 175, - "tecXCHAIN_WRONG_CHAIN": 176, - "tecXCHAIN_REWARD_MISMATCH": 177, - "tecXCHAIN_NO_SIGNERS_LIST": 178, - "tecXCHAIN_SENDING_ACCOUNT_MISMATCH": 179, - "tecXCHAIN_INSUFF_CREATE_AMOUNT": 180, - "tecXCHAIN_ACCOUNT_CREATE_PAST": 181, - "tecXCHAIN_ACCOUNT_CREATE_TOO_MANY": 182, - "tecXCHAIN_PAYMENT_FAILED": 183, - "tecXCHAIN_SELF_COMMIT": 184, - "tecXCHAIN_BAD_PUBLIC_KEY_ACCOUNT_PAIR": 185, - "tecXCHAIN_CREATE_ACCOUNT_DISABLED": 186, - "tecEMPTY_DID": 187, - "tecINVALID_UPDATE_TIME": 188, - "tecTOKEN_PAIR_NOT_FOUND": 189, - "tecARRAY_EMPTY": 190, - "tecARRAY_TOO_LARGE": 191 + "tesSUCCESS": 0 }, "TRANSACTION_TYPES": { - "Invalid": -1, - "Payment": 0, - "EscrowCreate": 1, - "EscrowFinish": 2, + "AMMBid": 39, + "AMMClawback": 31, + "AMMCreate": 35, + "AMMDelete": 40, + "AMMDeposit": 36, + "AMMVote": 38, + "AMMWithdraw": 37, + "AccountDelete": 21, "AccountSet": 3, + "Batch": 71, + "CheckCancel": 18, + "CheckCash": 17, + "CheckCreate": 16, + "Clawback": 30, + "CredentialAccept": 59, + "CredentialCreate": 58, + "CredentialDelete": 60, + "DIDDelete": 50, + "DIDSet": 49, + "DelegateSet": 64, + "DepositPreauth": 19, + "EnableAmendment": 100, "EscrowCancel": 4, - "SetRegularKey": 5, - "NickNameSet": 6, - "OfferCreate": 7, + "EscrowCreate": 1, + "EscrowFinish": 2, + "Invalid": -1, + "LedgerStateFix": 53, + "LoanBrokerCoverClawback": 78, + "LoanBrokerCoverDeposit": 76, + "LoanBrokerCoverWithdraw": 77, + "LoanBrokerDelete": 75, + "LoanBrokerSet": 74, + "LoanDelete": 81, + "LoanManage": 82, + "LoanPay": 84, + "LoanSet": 80, + "MPTokenAuthorize": 57, + "MPTokenIssuanceCreate": 54, + "MPTokenIssuanceDestroy": 55, + "MPTokenIssuanceSet": 56, + "NFTokenAcceptOffer": 29, + "NFTokenBurn": 26, + "NFTokenCancelOffer": 28, + "NFTokenCreateOffer": 27, + "NFTokenMint": 25, + "NFTokenModify": 61, "OfferCancel": 8, - "Contract": 9, - "TicketCreate": 10, - "TicketCancel": 11, - "SignerListSet": 12, + "OfferCreate": 7, + "OracleDelete": 52, + "OracleSet": 51, + "Payment": 0, + "PaymentChannelClaim": 15, "PaymentChannelCreate": 13, "PaymentChannelFund": 14, - "PaymentChannelClaim": 15, - "CheckCreate": 16, - "CheckCash": 17, - "CheckCancel": 18, - "DepositPreauth": 19, + "PermissionedDomainDelete": 63, + "PermissionedDomainSet": 62, + "SetFee": 101, + "SetRegularKey": 5, + "SignerListSet": 12, + "TicketCreate": 10, "TrustSet": 20, - "AccountDelete": 21, - "SetHook": 22, - "NFTokenMint": 25, - "NFTokenBurn": 26, - "NFTokenCreateOffer": 27, - "NFTokenCancelOffer": 28, - "NFTokenAcceptOffer": 29, - "Clawback": 30, - "AMMCreate": 35, - "AMMDeposit": 36, - "AMMWithdraw": 37, - "AMMVote": 38, - "AMMBid": 39, - "AMMDelete": 40, - "XChainCreateClaimID": 41, - "XChainCommit": 42, - "XChainClaim": 43, + "UNLModify": 102, + "VaultClawback": 70, + "VaultCreate": 65, + "VaultDelete": 67, + "VaultDeposit": 68, + "VaultSet": 66, + "VaultWithdraw": 69, "XChainAccountCreateCommit": 44, - "XChainAddClaimAttestation": 45, "XChainAddAccountCreateAttestation": 46, - "XChainModifyBridge": 47, + "XChainAddClaimAttestation": 45, + "XChainClaim": 43, + "XChainCommit": 42, "XChainCreateBridge": 48, - "DIDSet": 49, - "DIDDelete": 50, - "OracleSet": 51, - "OracleDelete": 52, - "EnableAmendment": 100, - "SetFee": 101, - "UNLModify": 102 + "XChainCreateClaimID": 41, + "XChainModifyBridge": 47 + }, + "TYPES": { + "AccountID": 8, + "Amount": 6, + "Blob": 7, + "Currency": 26, + "Done": -1, + "Hash128": 4, + "Hash160": 17, + "Hash192": 21, + "Hash256": 5, + "Int32": 10, + "Int64": 11, + "Issue": 24, + "LedgerEntry": 10002, + "Metadata": 10004, + "NotPresent": 0, + "Number": 9, + "PathSet": 18, + "STArray": 15, + "STObject": 14, + "Transaction": 10001, + "UInt16": 1, + "UInt32": 2, + "UInt384": 22, + "UInt512": 23, + "UInt64": 3, + "UInt8": 16, + "UInt96": 20, + "Unknown": -2, + "Validation": 10003, + "Vector256": 19, + "XChainBridge": 25 } } diff --git a/packages/ripple-binary-codec/src/enums/xrpl-definitions-base.ts b/packages/ripple-binary-codec/src/enums/xrpl-definitions-base.ts index 1a61a31467..0f1b0d679a 100644 --- a/packages/ripple-binary-codec/src/enums/xrpl-definitions-base.ts +++ b/packages/ripple-binary-codec/src/enums/xrpl-definitions-base.ts @@ -6,6 +6,7 @@ import { LEDGER_ENTRY_WIDTH, TRANSACTION_TYPE_WIDTH, TRANSACTION_RESULT_WIDTH, + DELEGATABLE_PERMISSIONS_WIDTH, } from './constants' interface DefinitionsData { @@ -35,11 +36,16 @@ class XrplDefinitionsBase { transactionNames: string[] // Maps serializable types to their TypeScript class implementation dataTypes: Record + // Maps granular permissions names to their corresponding integer ids + granularPermissions: Record + // Defined delegatable permissions + delegatablePermissions: BytesLookup /** * Present rippled types in a typed and updatable format. - * For an example of the input format see `definitions.json` - * To generate a new definitions file from rippled source code, use this tool: https://github.com/RichardAH/xrpl-codec-gen + * For an example of the input format see `definitions.json`. + * To generate a new definitions file from rippled source code, use the tool at + * `packages/ripple-binary-codec/tools/generateDefinitions.js`. * * See the definitions.test.js file for examples of how to create your own updated definitions.json. * @@ -74,6 +80,36 @@ class XrplDefinitionsBase { this.dataTypes = {} // Filled in via associateTypes this.associateTypes(types) + + this.granularPermissions = { + TrustlineAuthorize: 65537, + TrustlineFreeze: 65538, + TrustlineUnfreeze: 65539, + AccountDomainSet: 65540, + AccountEmailHashSet: 65541, + AccountMessageKeySet: 65542, + AccountTransferRateSet: 65543, + AccountTickSizeSet: 65544, + PaymentMint: 65545, + PaymentBurn: 65546, + MPTokenIssuanceLock: 65547, + MPTokenIssuanceUnlock: 65548, + } + + const incrementedTransactionTypes = Object.fromEntries( + Object.entries(enums.TRANSACTION_TYPES).map(([key, value]) => [ + key, + value + 1, + ]), + ) + const combinedPermissions = { + ...this.granularPermissions, + ...incrementedTransactionTypes, + } + this.delegatablePermissions = new BytesLookup( + combinedPermissions, + DELEGATABLE_PERMISSIONS_WIDTH, + ) } /** @@ -93,6 +129,9 @@ class XrplDefinitionsBase { this.field['TransactionType'].associatedType = this.transactionType this.field['TransactionResult'].associatedType = this.transactionResult this.field['LedgerEntryType'].associatedType = this.ledgerEntryType + if (this.field['PermissionValue']) { + this.field['PermissionValue'].associatedType = this.delegatablePermissions + } } public getAssociatedTypes(): Record { diff --git a/packages/ripple-binary-codec/src/enums/xrpl-definitions.ts b/packages/ripple-binary-codec/src/enums/xrpl-definitions.ts index 30f8ec90a6..e19a495c20 100644 --- a/packages/ripple-binary-codec/src/enums/xrpl-definitions.ts +++ b/packages/ripple-binary-codec/src/enums/xrpl-definitions.ts @@ -14,7 +14,8 @@ export class XrplDefinitions extends XrplDefinitionsBase { /** * Present rippled types in a typed and updatable format. * For an example of the input format see `definitions.json` - * To generate a new definitions file from rippled source code, use this tool: https://github.com/RichardAH/xrpl-codec-gen + * To generate a new definitions file from rippled source code, use the tool at + * `packages/ripple-binary-codec/tools/generateDefinitions.js`. * * See the definitions.test.js file for examples of how to create your own updated definitions.json. * diff --git a/packages/ripple-binary-codec/src/hash-prefixes.ts b/packages/ripple-binary-codec/src/hash-prefixes.ts index 98035167bc..edfa6e97ad 100644 --- a/packages/ripple-binary-codec/src/hash-prefixes.ts +++ b/packages/ripple-binary-codec/src/hash-prefixes.ts @@ -35,6 +35,8 @@ const HashPrefix: Record = { proposal: bytes(0x50525000), // payment channel claim paymentChannelClaim: bytes(0x434c4d00), + // batch + batch: bytes(0x42434800), } export { HashPrefix } diff --git a/packages/ripple-binary-codec/src/index.ts b/packages/ripple-binary-codec/src/index.ts index d0e44b5bae..198ae73c05 100644 --- a/packages/ripple-binary-codec/src/index.ts +++ b/packages/ripple-binary-codec/src/index.ts @@ -1,6 +1,6 @@ import { quality, binary, HashPrefix } from './coretypes' import { decodeLedgerData } from './ledger-hashes' -import { ClaimObject } from './binary' +import { ClaimObject, BatchObject } from './binary' import { JsonObject } from './types/serialized-type' import { XrplDefinitionsBase, @@ -15,6 +15,7 @@ const { signingData, signingClaimData, multiSigningData, + signingBatchData, binaryToJSON, serializeObject, } = binary @@ -71,12 +72,10 @@ function encodeForSigning( } /** - * Encode a transaction and prepare for signing with a claim + * Encode a payment channel claim for signing. * - * @param json JSON object representing the transaction - * @param signer string representing the account to sign the transaction with - * @param definitions Custom rippled types to use instead of the default. Used for sidechains and amendments. - * @returns a hex string of the encoded transaction + * @param json JSON object representing the claim. + * @returns a hex string of the encoded claim. */ function encodeForSigningClaim(json: object): string { if (typeof json !== 'object') { @@ -86,12 +85,12 @@ function encodeForSigningClaim(json: object): string { } /** - * Encode a transaction and prepare for multi-signing + * Encode a transaction and prepare for multi-signing. * - * @param json JSON object representing the transaction - * @param signer string representing the account to sign the transaction with + * @param json JSON object representing the transaction. + * @param signer string representing the account to sign the transaction with. * @param definitions Custom rippled types to use instead of the default. Used for sidechains and amendments. - * @returns a hex string of the encoded transaction + * @returns a hex string of the encoded transaction. */ function encodeForMultisigning( json: object, @@ -101,15 +100,26 @@ function encodeForMultisigning( if (typeof json !== 'object') { throw new Error() } - if (json['SigningPubKey'] !== '') { - throw new Error() - } + const definitionsOpt = definitions ? { definitions } : undefined return bytesToHex( multiSigningData(json as JsonObject, signer, definitionsOpt), ) } +/** + * Encode a Batch transaction for signing. + * + * @param json JSON object representing the transaction. + * @returns a hex string of the encoded transaction. + */ +function encodeForSigningBatch(json: object): string { + if (typeof json !== 'object') { + throw new Error('Need an object to encode a Batch transaction') + } + return bytesToHex(signingBatchData(json as BatchObject)) +} + /** * Encode a quality value * @@ -142,6 +152,7 @@ export { encodeForSigning, encodeForSigningClaim, encodeForMultisigning, + encodeForSigningBatch, encodeQuality, decodeQuality, decodeLedgerData, diff --git a/packages/ripple-binary-codec/src/shamap.ts b/packages/ripple-binary-codec/src/shamap.ts index ee86535c83..1e81642c42 100644 --- a/packages/ripple-binary-codec/src/shamap.ts +++ b/packages/ripple-binary-codec/src/shamap.ts @@ -19,7 +19,10 @@ abstract class ShaMapNode { * Class describing a Leaf of SHAMap */ class ShaMapLeaf extends ShaMapNode { - constructor(public index: Hash256, public item?: ShaMapNode) { + constructor( + public index: Hash256, + public item?: ShaMapNode, + ) { super() } @@ -76,7 +79,7 @@ class ShaMapInner extends ShaMapNode { private slotBits = 0 private branches: Array = Array(16) - constructor(private depth: number = 0) { + constructor(private depth = 0) { super() } diff --git a/packages/ripple-binary-codec/src/types/amount.ts b/packages/ripple-binary-codec/src/types/amount.ts index b92ebf4fc2..44fb567441 100644 --- a/packages/ripple-binary-codec/src/types/amount.ts +++ b/packages/ripple-binary-codec/src/types/amount.ts @@ -6,6 +6,7 @@ import { JsonObject, SerializedType } from './serialized-type' import BigNumber from 'bignumber.js' import { bytesToHex, concat, hexToBytes } from '@xrplf/isomorphic/utils' import { readUInt32BE, writeUInt32BE } from '../utils' +import { Hash192 } from './hash-192' /** * Constants for validating amounts @@ -16,6 +17,7 @@ const MAX_IOU_PRECISION = 16 const MAX_DROPS = new BigNumber('1e17') const MIN_XRP = new BigNumber('1e-6') const mask = BigInt(0x00000000ffffffff) +const mptMask = BigInt(0x8000000000000000) /** * BigNumber configuration for Amount IOUs @@ -27,20 +29,28 @@ BigNumber.config({ ], }) -/** - * Interface for JSON objects that represent amounts - */ -interface AmountObject extends JsonObject { +interface AmountObjectIOU extends JsonObject { value: string currency: string issuer: string } +interface AmountObjectMPT extends JsonObject { + value: string + mpt_issuance_id: string +} + +/** + * Interface for JSON objects that represent amounts + */ +type AmountObject = AmountObjectIOU | AmountObjectMPT + /** - * Type guard for AmountObject + * Type guard for AmountObjectIOU */ -function isAmountObject(arg): arg is AmountObject { +function isAmountObjectIOU(arg): arg is AmountObjectIOU { const keys = Object.keys(arg).sort() + return ( keys.length === 3 && keys[0] === 'currency' && @@ -49,6 +59,17 @@ function isAmountObject(arg): arg is AmountObject { ) } +/** + * Type guard for AmountObjectMPT + */ +function isAmountObjectMPT(arg): arg is AmountObjectMPT { + const keys = Object.keys(arg).sort() + + return ( + keys.length === 2 && keys[0] === 'mpt_issuance_id' && keys[1] === 'value' + ) +} + /** * Class for serializing/Deserializing Amounts */ @@ -60,7 +81,7 @@ class Amount extends SerializedType { } /** - * Construct an amount from an IOU or string amount + * Construct an amount from an IOU, MPT or string amount * * @param value An Amount, object representing an IOU, or a string * representing an integer amount @@ -88,7 +109,7 @@ class Amount extends SerializedType { return new Amount(amount) } - if (isAmountObject(value)) { + if (isAmountObjectIOU(value)) { const number = new BigNumber(value.value) Amount.assertIouIsValid(number) @@ -124,6 +145,24 @@ class Amount extends SerializedType { return new Amount(concat([amount, currency, issuer])) } + if (isAmountObjectMPT(value)) { + Amount.assertMptIsValid(value.value) + + let leadingByte = new Uint8Array(1) + leadingByte[0] |= 0x60 + + const num = BigInt(value.value) + + const intBuf = [new Uint8Array(4), new Uint8Array(4)] + writeUInt32BE(intBuf[0], Number(num >> BigInt(32)), 0) + writeUInt32BE(intBuf[1], Number(num & BigInt(mask)), 0) + + amount = concat(intBuf) + + const mptIssuanceID = Hash192.from(value.mpt_issuance_id).toBytes() + return new Amount(concat([leadingByte, amount, mptIssuanceID])) + } + throw new Error('Invalid type to construct an Amount') } @@ -134,8 +173,12 @@ class Amount extends SerializedType { * @returns An Amount object */ static fromParser(parser: BinaryParser): Amount { - const isXRP = parser.peek() & 0x80 - const numBytes = isXRP ? 48 : 8 + const isIOU = parser.peek() & 0x80 + if (isIOU) return new Amount(parser.read(48)) + + // the amount can be either MPT or XRP at this point + const isMPT = parser.peek() & 0x20 + const numBytes = isMPT ? 33 : 8 return new Amount(parser.read(numBytes)) } @@ -156,7 +199,9 @@ class Amount extends SerializedType { const num = (msb << BigInt(32)) | lsb return `${sign}${num.toString()}` - } else { + } + + if (this.isIOU()) { const parser = new BinaryParser(this.toString()) const mantissa = parser.read(8) const currency = Currency.fromParser(parser) as Currency @@ -182,6 +227,27 @@ class Amount extends SerializedType { issuer: issuer.toJSON(), } } + + if (this.isMPT()) { + const parser = new BinaryParser(this.toString()) + const leadingByte = parser.read(1) + const amount = parser.read(8) + const mptID = Hash192.fromParser(parser) as Hash192 + + const isPositive = leadingByte[0] & 0x40 + const sign = isPositive ? '' : '-' + + const msb = BigInt(readUInt32BE(amount.slice(0, 4), 0)) + const lsb = BigInt(readUInt32BE(amount.slice(4), 0)) + const num = (msb << BigInt(32)) | lsb + + return { + value: `${sign}${num.toString()}`, + mpt_issuance_id: mptID.toString(), + } + } + + throw new Error('Invalid amount to construct JSON') } /** @@ -224,6 +290,29 @@ class Amount extends SerializedType { } } + /** + * Validate MPT.value amount + * + * @param decimal BigNumber object representing MPT.value + * @returns void, but will throw if invalid amount + */ + private static assertMptIsValid(amount: string): void { + if (amount.indexOf('.') !== -1) { + throw new Error(`${amount.toString()} is an illegal amount`) + } + + const decimal = new BigNumber(amount) + if (!decimal.isZero()) { + if (decimal < BigNumber(0)) { + throw new Error(`${amount.toString()} is an illegal amount`) + } + + if (Number(BigInt(amount) & BigInt(mptMask)) != 0) { + throw new Error(`${amount.toString()} is an illegal amount`) + } + } + } + /** * Ensure that the value after being multiplied by the exponent does not * contain a decimal. @@ -248,7 +337,25 @@ class Amount extends SerializedType { * @returns true if Native (XRP) */ private isNative(): boolean { - return (this.bytes[0] & 0x80) === 0 + return (this.bytes[0] & 0x80) === 0 && (this.bytes[0] & 0x20) === 0 + } + + /** + * Test if this amount is in units of MPT + * + * @returns true if MPT + */ + private isMPT(): boolean { + return (this.bytes[0] & 0x80) === 0 && (this.bytes[0] & 0x20) !== 0 + } + + /** + * Test if this amount is in units of IOU + * + * @returns true if IOU + */ + private isIOU(): boolean { + return (this.bytes[0] & 0x80) !== 0 } } diff --git a/packages/ripple-binary-codec/src/types/hash-128.ts b/packages/ripple-binary-codec/src/types/hash-128.ts index 577f166830..52790ffeaa 100644 --- a/packages/ripple-binary-codec/src/types/hash-128.ts +++ b/packages/ripple-binary-codec/src/types/hash-128.ts @@ -9,7 +9,7 @@ class Hash128 extends Hash { static readonly ZERO_128: Hash128 = new Hash128(new Uint8Array(Hash128.width)) constructor(bytes: Uint8Array) { - if (bytes && bytes.byteLength === 0) { + if (bytes?.byteLength === 0) { bytes = Hash128.ZERO_128.bytes } diff --git a/packages/ripple-binary-codec/src/types/hash-160.ts b/packages/ripple-binary-codec/src/types/hash-160.ts index 3f0c9c33af..053a27dd02 100644 --- a/packages/ripple-binary-codec/src/types/hash-160.ts +++ b/packages/ripple-binary-codec/src/types/hash-160.ts @@ -8,7 +8,7 @@ class Hash160 extends Hash { static readonly ZERO_160: Hash160 = new Hash160(new Uint8Array(Hash160.width)) constructor(bytes?: Uint8Array) { - if (bytes && bytes.byteLength === 0) { + if (bytes?.byteLength === 0) { bytes = Hash160.ZERO_160.bytes } diff --git a/packages/ripple-binary-codec/src/types/hash-192.ts b/packages/ripple-binary-codec/src/types/hash-192.ts new file mode 100644 index 0000000000..2f0d2b4867 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/hash-192.ts @@ -0,0 +1,19 @@ +import { Hash } from './hash' + +/** + * Hash with a width of 192 bits + */ +class Hash192 extends Hash { + static readonly width = 24 + static readonly ZERO_192: Hash192 = new Hash192(new Uint8Array(Hash192.width)) + + constructor(bytes?: Uint8Array) { + if (bytes?.byteLength === 0) { + bytes = Hash192.ZERO_192.bytes + } + + super(bytes ?? Hash192.ZERO_192.bytes) + } +} + +export { Hash192 } diff --git a/packages/ripple-binary-codec/src/types/hash.ts b/packages/ripple-binary-codec/src/types/hash.ts index 8643578a6a..06b9e9faa0 100644 --- a/packages/ripple-binary-codec/src/types/hash.ts +++ b/packages/ripple-binary-codec/src/types/hash.ts @@ -1,6 +1,6 @@ import { Comparable } from './serialized-type' import { BinaryParser } from '../serdes/binary-parser' -import { hexToBytes } from '@xrplf/isomorphic/utils' +import { HEX_REGEX, hexToBytes } from '@xrplf/isomorphic/utils' import { compare } from '../utils' /** @@ -27,6 +27,9 @@ class Hash extends Comparable { } if (typeof value === 'string') { + if (!HEX_REGEX.test(value)) { + throw new Error(`Invalid hash string ${value}`) + } return new this(hexToBytes(value)) } diff --git a/packages/ripple-binary-codec/src/types/index.ts b/packages/ripple-binary-codec/src/types/index.ts index 2f2efef471..890d726862 100644 --- a/packages/ripple-binary-codec/src/types/index.ts +++ b/packages/ripple-binary-codec/src/types/index.ts @@ -4,8 +4,11 @@ import { Blob } from './blob' import { Currency } from './currency' import { Hash128 } from './hash-128' import { Hash160 } from './hash-160' +import { Hash192 } from './hash-192' import { Hash256 } from './hash-256' +import { Int32 } from './int-32' import { Issue } from './issue' +import { STNumber } from './st-number' import { PathSet } from './path-set' import { STArray } from './st-array' import { STObject } from './st-object' @@ -25,8 +28,11 @@ const coreTypes: Record = { Currency, Hash128, Hash160, + Hash192, Hash256, + Int32, Issue, + Number: STNumber, PathSet, STArray, STObject, @@ -51,7 +57,9 @@ export { Currency, Hash128, Hash160, + Hash192, Hash256, + Int32, PathSet, STArray, STObject, diff --git a/packages/ripple-binary-codec/src/types/int-32.ts b/packages/ripple-binary-codec/src/types/int-32.ts new file mode 100644 index 0000000000..03d9c0862c --- /dev/null +++ b/packages/ripple-binary-codec/src/types/int-32.ts @@ -0,0 +1,72 @@ +import { Int } from './int' +import { BinaryParser } from '../serdes/binary-parser' +import { readInt32BE, writeInt32BE } from '../utils' + +/** + * Derived Int class for serializing/deserializing signed 32-bit integers. + */ +class Int32 extends Int { + protected static readonly width: number = 32 / 8 // 4 bytes + static readonly defaultInt32: Int32 = new Int32(new Uint8Array(Int32.width)) + + // Signed 32-bit integer range + static readonly MIN_VALUE: number = -2147483648 // -2^31 + static readonly MAX_VALUE: number = 2147483647 // 2^31 - 1 + + constructor(bytes: Uint8Array) { + super(bytes ?? Int32.defaultInt32.bytes) + } + + /** + * Construct an Int32 from a BinaryParser + * + * @param parser BinaryParser to read Int32 from + * @returns An Int32 object + */ + static fromParser(parser: BinaryParser): Int { + return new Int32(parser.read(Int32.width)) + } + + /** + * Construct an Int32 object from a number or string + * + * @param val Int32 object, number, or string + * @returns An Int32 object + */ + static from(val: T): Int32 { + if (val instanceof Int32) { + return val + } + + const buf = new Uint8Array(Int32.width) + + if (typeof val === 'string') { + const num = Number(val) + if (!Number.isFinite(num) || !Number.isInteger(num)) { + throw new Error(`Cannot construct Int32 from string: ${val}`) + } + Int32.checkIntRange('Int32', num, Int32.MIN_VALUE, Int32.MAX_VALUE) + writeInt32BE(buf, num, 0) + return new Int32(buf) + } + + if (typeof val === 'number' && Number.isInteger(val)) { + Int32.checkIntRange('Int32', val, Int32.MIN_VALUE, Int32.MAX_VALUE) + writeInt32BE(buf, val, 0) + return new Int32(buf) + } + + throw new Error('Cannot construct Int32 from given value') + } + + /** + * Get the value of the Int32 object + * + * @returns the signed 32-bit integer represented by this.bytes + */ + valueOf(): number { + return readInt32BE(this.bytes, 0) + } +} + +export { Int32 } diff --git a/packages/ripple-binary-codec/src/types/int.ts b/packages/ripple-binary-codec/src/types/int.ts new file mode 100644 index 0000000000..950a464841 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/int.ts @@ -0,0 +1,75 @@ +import { Comparable } from './serialized-type' + +/** + * Compare numbers and bigInts n1 and n2 + * + * @param n1 First object to compare + * @param n2 Second object to compare + * @returns -1, 0, or 1, depending on how the two objects compare + */ +function compare(n1: number | bigint, n2: number | bigint): number { + return n1 < n2 ? -1 : n1 == n2 ? 0 : 1 +} + +/** + * Base class for serializing and deserializing signed integers. + */ +abstract class Int extends Comparable { + protected static width: number + + constructor(bytes: Uint8Array) { + super(bytes) + } + + /** + * Overload of compareTo for Comparable + * + * @param other other Int to compare this to + * @returns -1, 0, or 1 depending on how the objects relate to each other + */ + compareTo(other: Int | number): number { + return compare(this.valueOf(), other.valueOf()) + } + + /** + * Convert an Int object to JSON + * + * @returns number or string represented by this.bytes + */ + toJSON(): number | string { + const val = this.valueOf() + return typeof val === 'number' ? val : val.toString() + } + + /** + * Get the value of the Int represented by this.bytes + * + * @returns the value + */ + abstract valueOf(): number | bigint + + /** + * Validate that a number is within the specified signed integer range + * + * @param typeName The name of the type (for error messages) + * @param val The number to validate + * @param min The minimum allowed value + * @param max The maximum allowed value + * @throws Error if the value is out of range + */ + // eslint-disable-next-line max-params -- for error clarity in browsers + static checkIntRange( + typeName: string, + val: number | bigint, + min: number | bigint, + max: number | bigint, + ): void { + if (val < min || val > max) { + throw new Error( + `Invalid ${typeName}: ${val} must be >= ${min} and <= ${max}`, + ) + } + } +} + +export { Int } diff --git a/packages/ripple-binary-codec/src/types/issue.ts b/packages/ripple-binary-codec/src/types/issue.ts index a7c22b62d9..011b8d05ae 100644 --- a/packages/ripple-binary-codec/src/types/issue.ts +++ b/packages/ripple-binary-codec/src/types/issue.ts @@ -1,45 +1,59 @@ -import { concat } from '@xrplf/isomorphic/utils' +import { bytesToHex, concat } from '@xrplf/isomorphic/utils' import { BinaryParser } from '../serdes/binary-parser' import { AccountID } from './account-id' import { Currency } from './currency' import { JsonObject, SerializedType } from './serialized-type' +import { Hash192 } from './hash-192' +import { readUInt32BE, writeUInt32BE } from '../utils' -/** - * Interface for JSON objects that represent amounts - */ -interface IssueObject extends JsonObject { +interface XRPIssue extends JsonObject { currency: string - issuer?: string } +interface IOUIssue extends JsonObject { + currency: string + issuer: string +} +interface MPTIssue extends JsonObject { + mpt_issuance_id: string +} +/** + * Interface for JSON objects that represent issues + */ +type IssueObject = XRPIssue | IOUIssue | MPTIssue + /** - * Type guard for AmountObject + * Type guard for Issue Object */ function isIssueObject(arg): arg is IssueObject { const keys = Object.keys(arg).sort() - if (keys.length === 1) { - return keys[0] === 'currency' - } - return keys.length === 2 && keys[0] === 'currency' && keys[1] === 'issuer' + const isXRP = keys.length === 1 && keys[0] === 'currency' + const isIOU = + keys.length === 2 && keys[0] === 'currency' && keys[1] === 'issuer' + const isMPT = keys.length === 1 && keys[0] === 'mpt_issuance_id' + + return isXRP || isIOU || isMPT } +const MPT_WIDTH = 44 +const NO_ACCOUNT = AccountID.from('0000000000000000000000000000000000000001') + /** - * Class for serializing/Deserializing Amounts + * Class for serializing/Deserializing Issue */ class Issue extends SerializedType { - static readonly ZERO_ISSUED_CURRENCY: Issue = new Issue(new Uint8Array(20)) + static readonly XRP_ISSUE: Issue = new Issue(new Uint8Array(20)) constructor(bytes: Uint8Array) { - super(bytes ?? Issue.ZERO_ISSUED_CURRENCY.bytes) + super(bytes ?? Issue.XRP_ISSUE.bytes) } /** - * Construct an amount from an IOU or string amount + * Construct Issue from XRPIssue, IOUIssue or MPTIssue * - * @param value An Amount, object representing an IOU, or a string - * representing an integer amount - * @returns An Amount object + * @param value An object representing an XRPIssue, IOUIssue or MPTIssue + * @returns An Issue object */ static from(value: T): Issue { if (value instanceof Issue) { @@ -47,39 +61,92 @@ class Issue extends SerializedType { } if (isIssueObject(value)) { - const currency = Currency.from(value.currency).toBytes() - if (value.issuer == null) { + if (value.currency) { + const currency = Currency.from(value.currency.toString()).toBytes() + + //IOU case + if (value.issuer) { + const issuer = AccountID.from(value.issuer.toString()).toBytes() + return new Issue(concat([currency, issuer])) + } + + //XRP case return new Issue(currency) } - const issuer = AccountID.from(value.issuer).toBytes() - return new Issue(concat([currency, issuer])) + + // MPT case + if (value.mpt_issuance_id) { + const mptIssuanceIdBytes = Hash192.from( + value.mpt_issuance_id.toString(), + ).toBytes() + const issuerAccount = mptIssuanceIdBytes.slice(4) + const sequence = Number(readUInt32BE(mptIssuanceIdBytes.slice(0, 4), 0)) // sequence is in Big-endian format in mpt_issuance_id + + // Convert to Little-endian + const sequenceBuffer = new Uint8Array(4) + new DataView(sequenceBuffer.buffer).setUint32(0, sequence, true) + + return new Issue( + concat([issuerAccount, NO_ACCOUNT.toBytes(), sequenceBuffer]), + ) + } } - throw new Error('Invalid type to construct an Amount') + throw new Error('Invalid type to construct an Issue') } /** - * Read an amount from a BinaryParser + * Read Issue from a BinaryParser + * + * @param parser BinaryParser to read the Issue from * - * @param parser BinaryParser to read the Amount from - * @returns An Amount object + * @returns An Issue object */ static fromParser(parser: BinaryParser): Issue { - const currency = parser.read(20) - if (new Currency(currency).toJSON() === 'XRP') { - return new Issue(currency) + // XRP + const currencyOrAccount = parser.read(20) + if (new Currency(currencyOrAccount).toJSON() === 'XRP') { + return new Issue(currencyOrAccount) } - const currencyAndIssuer = [currency, parser.read(20)] - return new Issue(concat(currencyAndIssuer)) + + // MPT + const issuerAccountId = new AccountID(parser.read(20)) + if (NO_ACCOUNT.toHex() === issuerAccountId.toHex()) { + const sequence = parser.read(4) + return new Issue( + concat([currencyOrAccount, NO_ACCOUNT.toBytes(), sequence]), + ) + } + + // IOU + return new Issue(concat([currencyOrAccount, issuerAccountId.toBytes()])) } /** - * Get the JSON representation of this Amount + * Get the JSON representation of this IssueObject * * @returns the JSON interpretation of this.bytes */ toJSON(): IssueObject { + // If the buffer is exactly 44 bytes, treat it as an MPTIssue. + if (this.toBytes().length === MPT_WIDTH) { + const issuerAccount = this.toBytes().slice(0, 20) + const sequence = new DataView(this.toBytes().slice(40).buffer).getUint32( + 0, + true, + ) + + // sequence part of mpt_issuance_id should be in Big-endian + const sequenceBuffer = new Uint8Array(4) + writeUInt32BE(sequenceBuffer, sequence, 0) + + return { + mpt_issuance_id: bytesToHex(concat([sequenceBuffer, issuerAccount])), + } + } + const parser = new BinaryParser(this.toString()) + const currency = Currency.fromParser(parser) as Currency if (currency.toJSON() === 'XRP') { return { currency: currency.toJSON() } diff --git a/packages/ripple-binary-codec/src/types/serialized-type.ts b/packages/ripple-binary-codec/src/types/serialized-type.ts index eb27f5d5a7..2f039f0cd1 100644 --- a/packages/ripple-binary-codec/src/types/serialized-type.ts +++ b/packages/ripple-binary-codec/src/types/serialized-type.ts @@ -67,7 +67,7 @@ class SerializedType { * Can be customized for sidechains and amendments. * @returns any type, if not overloaded returns hexString representation of bytes */ - toJSON(_definitions?: XrplDefinitionsBase): JSON { + toJSON(_definitions?: XrplDefinitionsBase, _fieldName?: string): JSON { return this.toHex() } diff --git a/packages/ripple-binary-codec/src/types/st-number.ts b/packages/ripple-binary-codec/src/types/st-number.ts new file mode 100644 index 0000000000..2e432bf374 --- /dev/null +++ b/packages/ripple-binary-codec/src/types/st-number.ts @@ -0,0 +1,310 @@ +/* eslint-disable complexity -- required for various checks */ +import { BinaryParser } from '../serdes/binary-parser' +import { SerializedType } from './serialized-type' +import { writeInt32BE, writeInt64BE, readInt32BE, readInt64BE } from '../utils' + +/** + * Constants for mantissa and exponent normalization per XRPL Number spec. + * These define allowed magnitude for mantissa and exponent after normalization. + */ +const MIN_MANTISSA = BigInt('1000000000000000000') // 10^18 +const MAX_MANTISSA = BigInt('9999999999999999999') // 10^19 - 1 +const MAX_INT64 = BigInt('9223372036854775807') // 2^63 - 1, max signed 64-bit integer +const MIN_EXPONENT = -32768 +const MAX_EXPONENT = 32768 +const DEFAULT_VALUE_EXPONENT = -2147483648 + +/** + * Extract mantissa, exponent, and sign from a number string. + * + * @param val - The string representing the number (may be integer, decimal, or scientific notation). + * @returns Object containing mantissa (BigInt), exponent (number), and isNegative (boolean). + * @throws Error if the string cannot be parsed as a valid number. + * + * Examples: + * '123' -> { mantissa: 123n, exponent: 0, isNegative: false } + * '-00123.45' -> { mantissa: -12345n, exponent: -2, isNegative: true } + * '+7.1e2' -> { mantissa: 71n, exponent: -1 + 2 = 1, isNegative: false } + */ +function extractNumberPartsFromString(val: string): { + mantissa: bigint + exponent: number + isNegative: boolean +} { + /** + * Regex for parsing decimal/float/scientific number strings with optional sign, integer, decimal, and exponent parts. + * + * Pattern: /^([-+]?)([0-9]+)(?:\.([0-9]+))?(?:[eE]([+-]?[0-9]+))?$/ + * + * Breakdown: + * 1. ([-+]?) - Optional '+' or '-' sign at the start. + * 2. ([0-9]+) - Integer part: one or more digits (leading zeros allowed). + * 3. (?:\.([0-9]+))? - Optional decimal point followed by one or more digits. + * 4. (?:[eE]([+-]?[0-9]+))? - Optional exponent, starting with 'e' or 'E', optional sign, and digits. + * + * Notes: + * - Leading zeros are accepted and normalized by code after parsing. + * - Empty decimal ('123.') and missing integer ('.456') are NOT matchedβ€”must be fully specified. + */ + // eslint-disable-next-line prefer-named-capture-group + const regex = /^([-+]?)([0-9]+)(?:\.([0-9]+))?(?:[eE]([+-]?[0-9]+))?$/ + const match = regex.exec(val) + if (!match) throw new Error(`Unable to parse number from string: ${val}`) + + const [, sign, intPart, fracPart, expPart] = match + // Remove leading zeros (unless the entire intPart is zeros) + const cleanIntPart = intPart.replace(/^0+(?=\d)/, '') || '0' + + let mantissaStr = cleanIntPart + let exponent = 0 + + if (fracPart) { + mantissaStr += fracPart + exponent -= fracPart.length + } + if (expPart) exponent += parseInt(expPart, 10) + + // Remove trailing zeros from mantissa and adjust exponent + while (mantissaStr.length > 1 && mantissaStr.endsWith('0')) { + mantissaStr = mantissaStr.slice(0, -1) + exponent += 1 + } + + let mantissa = BigInt(mantissaStr) + if (sign === '-') mantissa = -mantissa + const isNegative = mantissa < BigInt(0) + + return { mantissa, exponent, isNegative } +} + +/** + * Normalize the mantissa and exponent to XRPL constraints. + * + * Ensures that after normalization, the mantissa is between MIN_MANTISSA and MAX_INT64. + * Adjusts the exponent as needed by shifting the mantissa left/right (multiplying/dividing by 10). + * + * @param mantissa - The unnormalized mantissa (BigInt). + * @param exponent - The unnormalized exponent (number). + * @returns An object with normalized mantissa and exponent. + * @throws Error if the number cannot be normalized within allowed exponent range. + */ +function normalize( + mantissa: bigint, + exponent: number, +): { mantissa: bigint; exponent: number } { + let m = mantissa < BigInt(0) ? -mantissa : mantissa + const isNegative = mantissa < BigInt(0) + + // Handle zero + if (m === BigInt(0)) { + return { mantissa: BigInt(0), exponent: DEFAULT_VALUE_EXPONENT } + } + + // Grow mantissa until it reaches MIN_MANTISSA + while (m < MIN_MANTISSA && exponent > MIN_EXPONENT) { + exponent -= 1 + m *= BigInt(10) + } + + let lastDigit: bigint | null = null + + // Shrink mantissa until it fits within MAX_MANTISSA + while (m > MAX_MANTISSA) { + if (exponent >= MAX_EXPONENT) { + throw new Error('Mantissa and exponent are too large') + } + exponent += 1 + lastDigit = m % BigInt(10) + m /= BigInt(10) + } + + // Handle underflow: if exponent too small or mantissa too small, throw error + if (exponent < MIN_EXPONENT || m < MIN_MANTISSA) { + throw new Error('Underflow: value too small to represent') + } + + // Handle overflow: if exponent exceeds MAX_EXPONENT after growing. + if (exponent > MAX_EXPONENT) { + throw new Error('Exponent overflow: value too large to represent') + } + + // Handle overflow: if mantissa exceeds MAX_INT64 (2^63-1) after growing. + if (m > MAX_INT64) { + if (exponent >= MAX_EXPONENT) { + throw new Error('Exponent overflow: value too large to represent') + } + exponent += 1 + lastDigit = m % BigInt(10) + m /= BigInt(10) + } + + if (lastDigit != null && lastDigit >= BigInt(5)) { + m += BigInt(1) + // After rounding, mantissa may exceed MAX_INT64 again + if (m > MAX_INT64) { + if (exponent >= MAX_EXPONENT) { + throw new Error('Exponent overflow: value too large to represent') + } + lastDigit = m % BigInt(10) + exponent += 1 + m /= BigInt(10) + if (lastDigit >= BigInt(5)) { + m += BigInt(1) + } + } + } + + if (isNegative) m = -m + return { mantissa: m, exponent } +} + +/** + * STNumber: Encodes XRPL's "Number" type. + * + * - Always encoded as 12 bytes: 8-byte signed mantissa, 4-byte signed exponent, both big-endian. + * - Can only be constructed from a valid number string or another STNumber instance. + * + * Usage: + * STNumber.from("1.2345e5") + * STNumber.from("-123") + * STNumber.fromParser(parser) + */ +export class STNumber extends SerializedType { + /** 12 zero bytes, represents canonical zero. */ + static defaultBytes = new Uint8Array(12) + + /** + * Construct a STNumber from 12 bytes (8 for mantissa, 4 for exponent). + * @param bytes - 12-byte Uint8Array + * @throws Error if input is not a Uint8Array of length 12. + */ + constructor(bytes?: Uint8Array) { + const used = bytes ?? STNumber.defaultBytes + if (!(used instanceof Uint8Array) || used.length !== 12) { + throw new Error( + `STNumber must be constructed from a 12-byte Uint8Array, got ${used?.length}`, + ) + } + super(used) + } + + /** + * Construct from a number string (or another STNumber). + * + * @param value - A string, or STNumber instance. + * @returns STNumber instance. + * @throws Error if not a string or STNumber. + */ + static from(value: unknown): STNumber { + if (value instanceof STNumber) { + return value + } + if (typeof value === 'string') { + return STNumber.fromValue(value) + } + throw new Error( + 'STNumber.from: Only string or STNumber instance is supported', + ) + } + + /** + * Construct from a number string (integer, decimal, or scientific notation). + * Handles normalization to XRPL Number constraints. + * + * @param val - The number as a string (e.g. '1.23', '-123e5'). + * @returns STNumber instance + * @throws Error if val is not a valid number string. + */ + static fromValue(val: string): STNumber { + const { mantissa, exponent } = extractNumberPartsFromString(val) + const { mantissa: normalizedMantissa, exponent: normalizedExponent } = + normalize(mantissa, exponent) + + const bytes = new Uint8Array(12) + writeInt64BE(bytes, normalizedMantissa, 0) + writeInt32BE(bytes, normalizedExponent, 8) + return new STNumber(bytes) + } + + /** + * Read a STNumber from a BinaryParser stream (12 bytes). + * @param parser - BinaryParser positioned at the start of a number + * @returns STNumber instance + */ + static fromParser(parser: BinaryParser): STNumber { + return new STNumber(parser.read(12)) + } + + /** + * Convert this STNumber to a normalized string representation. + * The output is decimal or scientific notation, depending on exponent range. + * Follows XRPL convention: zero is "0", other values are normalized to a canonical string. + * + * @returns String representation of the value + */ + toJSON(): string { + const b = this.bytes + if (!b || b?.length !== 12) + throw new Error('STNumber internal bytes not set or wrong length') + + // Signed 64-bit mantissa + const mantissa = readInt64BE(b, 0) + // Signed 32-bit exponent + let exponent = readInt32BE(b, 8) + + // Special zero: XRPL encodes canonical zero as mantissa=0, exponent=DEFAULT_VALUE_EXPONENT. + if (mantissa === BigInt(0) && exponent === DEFAULT_VALUE_EXPONENT) { + return '0' + } + + const isNegative = mantissa < BigInt(0) + let mantissaAbs = isNegative ? -mantissa : mantissa + + // If mantissa < MIN_MANTISSA, it was shrunk for int64 serialization (mantissa > 2^63-1). + // Restore it for proper string rendering to match rippled's internal representation. + if (mantissaAbs !== BigInt(0) && mantissaAbs < MIN_MANTISSA) { + mantissaAbs *= BigInt(10) + exponent -= 1 + } + + // For large mantissa range (default), rangeLog = 18 + const rangeLog = 18 + + // Use scientific notation for exponents that are too small or too large + // Condition from rippled: exponent != 0 AND (exponent < -(rangeLog + 10) OR exponent > -(rangeLog - 10)) + // For rangeLog = 18: exponent != 0 AND (exponent < -28 OR exponent > -8) + if ( + exponent !== 0 && + (exponent < -(rangeLog + 10) || exponent > -(rangeLog - 10)) + ) { + // Strip trailing zeros from mantissa (matches rippled behavior) + let exp = exponent + while ( + mantissaAbs !== BigInt(0) && + mantissaAbs % BigInt(10) === BigInt(0) && + exp < MAX_EXPONENT + ) { + mantissaAbs /= BigInt(10) + exp += 1 + } + const sign = isNegative ? '-' : '' + return `${sign}${mantissaAbs}e${exp}` + } + + // Decimal rendering for -(rangeLog + 10) <= exponent <= -(rangeLog - 10) + // i.e., -28 <= exponent <= -8, or exponent == 0 + const padPrefix = rangeLog + 12 // 30 + const padSuffix = rangeLog + 8 // 26 + + const mantissaStr = mantissaAbs.toString() + const rawValue = '0'.repeat(padPrefix) + mantissaStr + '0'.repeat(padSuffix) + const offset = exponent + padPrefix + rangeLog + 1 // exponent + 49 + + const integerPart = rawValue.slice(0, offset).replace(/^0+/, '') || '0' + const fractionPart = rawValue.slice(offset).replace(/0+$/, '') + + return `${isNegative ? '-' : ''}${integerPart}${ + fractionPart ? '.' + fractionPart : '' + }` + } +} diff --git a/packages/ripple-binary-codec/src/types/st-object.ts b/packages/ripple-binary-codec/src/types/st-object.ts index 75fec3a86c..f17bafc62d 100644 --- a/packages/ripple-binary-codec/src/types/st-object.ts +++ b/packages/ripple-binary-codec/src/types/st-object.ts @@ -10,6 +10,7 @@ import { BinaryParser } from '../serdes/binary-parser' import { BinarySerializer, BytesList } from '../serdes/binary-serializer' import { STArray } from './st-array' +import { UInt64 } from './uint-64' const OBJECT_END_MARKER_BYTE = Uint8Array.from([0xe1]) const OBJECT_END_MARKER = 'ObjectEndMarker' @@ -115,14 +116,25 @@ class STObject extends SerializedType { return Object.assign(acc, handled ?? { [key]: val }) }, {}) - let sorted = Object.keys(xAddressDecoded) - .map((f: string): FieldInstance => definitions.field[f] as FieldInstance) - .filter( - (f: FieldInstance): boolean => - f !== undefined && - xAddressDecoded[f.name] !== undefined && - f.isSerialized, + function isValidFieldInstance( + f: FieldInstance | undefined, + ): f is FieldInstance { + return ( + f !== undefined && + xAddressDecoded[f.name] !== undefined && + f.isSerialized ) + } + + let sorted = Object.keys(xAddressDecoded) + .map((f: string): FieldInstance | undefined => { + if (!(f in definitions.field)) { + if (f[0] === f[0].toLowerCase()) return undefined + throw new Error(`Field ${f} is not defined in the definitions`) + } + return definitions.field[f] as FieldInstance + }) + .filter(isValidFieldInstance) .sort((a, b) => { return a.ordinal - b.ordinal }) @@ -136,8 +148,10 @@ class STObject extends SerializedType { field.type.name === ST_OBJECT ? this.from(xAddressDecoded[field.name], undefined, definitions) : field.type.name === 'STArray' - ? STArray.from(xAddressDecoded[field.name], definitions) - : field.associatedType.from(xAddressDecoded[field.name]) + ? STArray.from(xAddressDecoded[field.name], definitions) + : field.type.name === 'UInt64' + ? UInt64.from(xAddressDecoded[field.name], field.name) + : field.associatedType.from(xAddressDecoded[field.name]) if (associatedValue == undefined) { throw new TypeError( @@ -182,7 +196,7 @@ class STObject extends SerializedType { accumulator[field.name] = objectParser .readFieldValue(field) - .toJSON(definitions) + .toJSON(definitions, field.name) } return accumulator diff --git a/packages/ripple-binary-codec/src/types/uint-16.ts b/packages/ripple-binary-codec/src/types/uint-16.ts index 5d680384e2..a217333d5b 100644 --- a/packages/ripple-binary-codec/src/types/uint-16.ts +++ b/packages/ripple-binary-codec/src/types/uint-16.ts @@ -29,7 +29,7 @@ class UInt16 extends UInt { return val } - if (typeof val === 'number') { + if (typeof val === 'number' && Number.isInteger(val)) { UInt16.checkUintRange(val, 0, 0xffff) const buf = new Uint8Array(UInt16.width) @@ -37,7 +37,7 @@ class UInt16 extends UInt { return new UInt16(buf) } - throw new Error('Can not construct UInt16 with given value') + throw new Error('Cannot construct UInt16 from given value') } /** diff --git a/packages/ripple-binary-codec/src/types/uint-32.ts b/packages/ripple-binary-codec/src/types/uint-32.ts index abb5d8a987..e188ae910c 100644 --- a/packages/ripple-binary-codec/src/types/uint-32.ts +++ b/packages/ripple-binary-codec/src/types/uint-32.ts @@ -37,7 +37,7 @@ class UInt32 extends UInt { return new UInt32(buf) } - if (typeof val === 'number') { + if (typeof val === 'number' && Number.isInteger(val)) { UInt32.checkUintRange(val, 0, 0xffffffff) writeUInt32BE(buf, val, 0) return new UInt32(buf) diff --git a/packages/ripple-binary-codec/src/types/uint-64.ts b/packages/ripple-binary-codec/src/types/uint-64.ts index 584b468d65..bb18e6775a 100644 --- a/packages/ripple-binary-codec/src/types/uint-64.ts +++ b/packages/ripple-binary-codec/src/types/uint-64.ts @@ -2,10 +2,23 @@ import { UInt } from './uint' import { BinaryParser } from '../serdes/binary-parser' import { bytesToHex, concat, hexToBytes } from '@xrplf/isomorphic/utils' import { readUInt32BE, writeUInt32BE } from '../utils' +import { DEFAULT_DEFINITIONS, XrplDefinitionsBase } from '../enums' const HEX_REGEX = /^[a-fA-F0-9]{1,16}$/ +const BASE10_REGEX = /^[0-9]{1,20}$/ const mask = BigInt(0x00000000ffffffff) +const BASE10_AMOUNT_FIELDS = new Set([ + 'MaximumAmount', + 'OutstandingAmount', + 'MPTAmount', + 'LockedAmount', +]) + +function isBase10(fieldName: string): boolean { + return BASE10_AMOUNT_FIELDS.has(fieldName) +} + /** * Derived UInt class for serializing/deserializing 64 bit UInt */ @@ -29,14 +42,18 @@ class UInt64 extends UInt { * @param val A UInt64, hex-string, bigInt, or number * @returns A UInt64 object */ - static from(val: T): UInt64 { + // eslint-disable-next-line complexity + static from( + val: T, + fieldName = '', + ): UInt64 { if (val instanceof UInt64) { return val } let buf = new Uint8Array(UInt64.width) - if (typeof val === 'number') { + if (typeof val === 'number' && Number.isInteger(val)) { if (val < 0) { throw new Error('value must be an unsigned integer') } @@ -51,11 +68,18 @@ class UInt64 extends UInt { } if (typeof val === 'string') { - if (!HEX_REGEX.test(val)) { + if (isBase10(fieldName)) { + if (!BASE10_REGEX.test(val)) { + throw new Error(`${fieldName} ${val} is not a valid base 10 string`) + } + val = BigInt(val).toString(16) as T + } + + if (typeof val === 'string' && !HEX_REGEX.test(val)) { throw new Error(`${val} is not a valid hex-string`) } - const strBuf = val.padStart(16, '0') + const strBuf = (val as string).padStart(16, '0') buf = hexToBytes(strBuf) return new UInt64(buf) } @@ -76,8 +100,16 @@ class UInt64 extends UInt { * * @returns a hex-string */ - toJSON(): string { - return bytesToHex(this.bytes) + toJSON( + _definitions: XrplDefinitionsBase = DEFAULT_DEFINITIONS, + fieldName = '', + ): string { + const hexString = bytesToHex(this.bytes) + if (isBase10(fieldName)) { + return BigInt('0x' + hexString).toString(10) + } + + return hexString } /** diff --git a/packages/ripple-binary-codec/src/types/uint-8.ts b/packages/ripple-binary-codec/src/types/uint-8.ts index 50c4cff773..7d7ae9753f 100644 --- a/packages/ripple-binary-codec/src/types/uint-8.ts +++ b/packages/ripple-binary-codec/src/types/uint-8.ts @@ -28,7 +28,7 @@ class UInt8 extends UInt { return val } - if (typeof val === 'number') { + if (typeof val === 'number' && Number.isInteger(val)) { UInt8.checkUintRange(val, 0, 0xff) const buf = new Uint8Array(UInt8.width) diff --git a/packages/ripple-binary-codec/src/utils.ts b/packages/ripple-binary-codec/src/utils.ts index 27b2ce1b3e..344bc8eb6a 100644 --- a/packages/ripple-binary-codec/src/utils.ts +++ b/packages/ripple-binary-codec/src/utils.ts @@ -50,6 +50,44 @@ export function writeUInt32BE( array[offset + 3] = value & 0xff } +/** + * Writes a signed 32-bit integer to a Uint8Array at the specified offset (big-endian). + * + * @param array - The Uint8Array to write to. + * @param value - The signed 32-bit integer to write. + * @param offset - The offset at which to write. + */ +export function writeInt32BE( + array: Uint8Array, + value: number, + offset: number, +): void { + new DataView(array.buffer, array.byteOffset, array.byteLength).setInt32( + offset, + value, + false, + ) +} + +/** + * Writes a signed 64-bit integer (BigInt) to a Uint8Array at the specified offset (big-endian). + * + * @param array - The Uint8Array to write to. + * @param value - The signed 64-bit integer (BigInt) to write. + * @param offset - The offset at which to write. + */ +export function writeInt64BE( + array: Uint8Array, + value: bigint, + offset: number, +): void { + new DataView(array.buffer, array.byteOffset, array.byteLength).setBigInt64( + offset, + value, + false, + ) +} + /** * Reads an unsigned, big-endian 16-bit integer from the array at the specified offset. * @param array Uint8Array to read @@ -68,6 +106,36 @@ export function readUInt32BE(array: Uint8Array, offset: number): string { return new DataView(array.buffer).getUint32(offset, false).toString(10) } +/** + * Reads a signed 32-bit integer from a Uint8Array at the specified offset (big-endian). + * + * @param array - The Uint8Array to read from. + * @param offset - The offset at which to start reading. + * @returns The signed 32-bit integer. + */ +export function readInt32BE(array: Uint8Array, offset: number): number { + return new DataView( + array.buffer, + array.byteOffset, + array.byteLength, + ).getInt32(offset, false) +} + +/** + * Reads a signed 64-bit integer (BigInt) from a Uint8Array at the specified offset (big-endian). + * + * @param array - The Uint8Array to read from. + * @param offset - The offset at which to start reading. + * @returns The signed 64-bit integer (BigInt). + */ +export function readInt64BE(array: Uint8Array, offset: number): bigint { + return new DataView( + array.buffer, + array.byteOffset, + array.byteLength, + ).getBigInt64(offset, false) +} + /** * Compares two Uint8Array or ArrayBuffers * @param a first array to compare diff --git a/packages/ripple-binary-codec/test/amount.test.ts b/packages/ripple-binary-codec/test/amount.test.ts index 82b8c1c903..7a7518655f 100644 --- a/packages/ripple-binary-codec/test/amount.test.ts +++ b/packages/ripple-binary-codec/test/amount.test.ts @@ -1,5 +1,7 @@ import { coreTypes } from '../src/types' import fixtures from './fixtures/data-driven-tests.json' + +import { makeParser } from '../src/binary' const { Amount } = coreTypes function amountErrorTests() { @@ -25,6 +27,16 @@ describe('Amount', function () { it('can be parsed from', function () { expect(Amount.from('1000000') instanceof Amount).toBe(true) expect(Amount.from('1000000').toJSON()).toEqual('1000000') + + // it not valid to have negative XRP. But we test it anyways + // to ensure logic correctness for toJSON of the Amount class + { + const parser = makeParser('0000000000000001') + const value = parser.readType(Amount) + const json = value.toJSON() + expect(json).toEqual('-1') + } + const fixture = { value: '1', issuer: '0000000000000000000000000000000000000000', @@ -38,5 +50,35 @@ describe('Amount', function () { } expect(amt.toJSON()).toEqual(rewritten) }) + + it('can be parsed from MPT', function () { + let fixture = { + value: '100', + mpt_issuance_id: '00002403C84A0A28E0190E208E982C352BBD5006600555CF', + } + let amt = Amount.from(fixture) + expect(amt.toJSON()).toEqual(fixture) + + fixture = { + value: '9223372036854775807', + mpt_issuance_id: '00002403C84A0A28E0190E208E982C352BBD5006600555CF', + } + amt = Amount.from(fixture) + expect(amt.toJSON()).toEqual(fixture) + + // it not valid to have negative MPT. But we test it anyways + // to ensure logic correctness for toJSON of the Amount class + { + const parser = makeParser( + '20000000000000006400002403C84A0A28E0190E208E982C352BBD5006600555CF', + ) + const value = parser.readType(Amount) + const json = value.toJSON() + expect(json).toEqual({ + mpt_issuance_id: '00002403C84A0A28E0190E208E982C352BBD5006600555CF', + value: '-100', + }) + } + }) amountErrorTests() }) diff --git a/packages/ripple-binary-codec/test/binary-parser.test.ts b/packages/ripple-binary-codec/test/binary-parser.test.ts index 60b3fa11a7..9efafdba62 100644 --- a/packages/ripple-binary-codec/test/binary-parser.test.ts +++ b/packages/ripple-binary-codec/test/binary-parser.test.ts @@ -22,6 +22,7 @@ function assertEqualAmountJSON(actual, expected) { } expect(actual.currency).toEqual(expected.currency) expect(actual.issuer).toEqual(expected.issuer) + expect(actual.mpt_issuance_id).toEqual(expected.mpt_issuance_id) expect( actual.value === expected.value || new BigNumber(actual.value).eq(new BigNumber(expected.value)), @@ -207,12 +208,12 @@ function amountParsingTests() { return } const parser = makeParser(f.expected_hex) - const testName = `values_tests[${i}] parses ${f.expected_hex.slice( + const hexToJsonTestName = `values_tests[${i}] parses ${f.expected_hex.slice( 0, 16, )}... as ${JSON.stringify(f.test_json)}` - it(testName, () => { + it(hexToJsonTestName, () => { const value = parser.readType(Amount) // May not actually be in canonical form. The fixtures are to be used // also for json -> binary; @@ -223,6 +224,15 @@ function amountParsingTests() { expect((exponent.e ?? 0) - 15).toEqual(f?.exponent) } }) + + const jsonToHexTestName = `values_tests[${i}] parses ${JSON.stringify( + f.test_json, + )}... + as ${f.expected_hex.slice(0, 16)}` + it(jsonToHexTestName, () => { + const amt = Amount.from(f.test_json) + expect(amt.toHex()).toEqual(f.expected_hex) + }) }) } diff --git a/packages/ripple-binary-codec/test/definitions.test.ts b/packages/ripple-binary-codec/test/definitions.test.ts index eb8b81c937..5b042025ee 100644 --- a/packages/ripple-binary-codec/test/definitions.test.ts +++ b/packages/ripple-binary-codec/test/definitions.test.ts @@ -21,7 +21,7 @@ describe('encode and decode using new types as a parameter', function () { // Normally this would be generated directly from rippled with something like `server_definitions`. // Added here to make it easier to see what is actually changing in the definitions.json file. const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson)) - definitions.TRANSACTION_TYPES['NewTestTransaction'] = 75 + definitions.TRANSACTION_TYPES['NewTestTransaction'] = 222 const newDefs = new XrplDefinitions(definitions) @@ -34,8 +34,8 @@ describe('encode and decode using new types as a parameter', function () { it('can encode and decode a new Field', function () { const tx = { ...txJson, NewFieldDefinition: 10 } - // Before updating the types, undefined fields will be ignored on encode - expect(decode(encode(tx))).not.toEqual(tx) + // Before updating the types, undefined fields will throw an error + expect(() => encode(tx)).toThrow() // Normally this would be generated directly from rippled with something like `server_definitions`. // Added here to make it easier to see what is actually changing in the definitions.json file. @@ -72,8 +72,8 @@ describe('encode and decode using new types as a parameter', function () { ], } - // Before updating the types, undefined fields will be ignored on encode - expect(decode(encode(tx))).not.toEqual(tx) + // Before updating the types, undefined fields will throw an error + expect(() => encode(tx)).toThrow() // Normally this would be generated directly from rippled with something like `server_definitions`. // Added here to make it easier to see what is actually changing in the definitions.json file. @@ -141,8 +141,8 @@ describe('encode and decode using new types as a parameter', function () { }, ]) - // Test that before updating the types this tx fails to decode correctly. Note that undefined fields are ignored on encode. - expect(decode(encode(tx))).not.toEqual(tx) + // Test that before updating the types this tx fails to decode correctly. Note that undefined fields will throw an error. + expect(() => encode(tx)).toThrow() class NewType extends UInt32 { // Should be the same as UInt32 @@ -157,4 +157,33 @@ describe('encode and decode using new types as a parameter', function () { const decoded = decode(encoded, newDefs) expect(decoded).toEqual(tx) }) + + it('removing PermissionValue does not break encoding/decoding', function () { + // Make a deep copy of definitions + const definitions = JSON.parse(JSON.stringify(normalDefinitionsJson)) + + const originalFieldsLength = definitions.FIELDS.length + + // Remove PermissionValue from definitions + if (definitions.FIELDS) { + definitions.FIELDS = definitions.FIELDS.filter( + (fieldTuple: [string, object]) => fieldTuple[0] !== 'PermissionValue', + ) + } + + // Verify it was deleted + const expectedFieldsLength = originalFieldsLength - 1 + expect(definitions.FIELDS.length).toBe(expectedFieldsLength) + + // Create new custom definitions + const customDefs = new XrplDefinitions(definitions) + + const tx = { ...txJson } + + // It should encode and decode normally, even with PermissionValue missing + const encoded = encode(tx, customDefs) + const decoded = decode(encoded, customDefs) + + expect(decoded).toEqual(tx) + }) }) diff --git a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json index fb3abf0080..b97e3b4341 100644 --- a/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json +++ b/packages/ripple-binary-codec/test/fixtures/codec-fixtures.json @@ -33,7 +33,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "059D1E86DE5DCCCF956BF4799675B2425AF9AD44FE4CCA6FEE1C812EEF6423E6", - "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"] + "Indexes": [ + "908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB" + ] } }, { @@ -327,7 +329,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "17CC40C6872E0C0E658C49B75D0812A70D4161DDA53324DF51FA58D3819C814B", - "Indexes": ["571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B"] + "Indexes": [ + "571BF14F28C4D97871CDACD344A8CF57E6BA287BF0440B9E0D0683D02751CC7B" + ] } }, { @@ -376,7 +380,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "1BCA9161A199AD5E907751CBF3FBA49689D517F0E8EE823AE17B737039B41DE1", - "Indexes": ["26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873"] + "Indexes": [ + "26B894EE68470AD5AEEB55D5EBF936E6397CEE6957B93C56A2E7882CA9082873" + ] } }, { @@ -440,7 +446,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "1F9FF48419CA69FDDCC294CCEEE608F5F8A8BE11E286AD5743ED2D457C5570C4", - "Indexes": ["7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619"] + "Indexes": [ + "7D4325BE338A40BBCBCC1F351B3272EB3E76305A878E76603DE206A795871619" + ] } }, { @@ -606,7 +614,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "289CFC476B5876F28C8A3B3C5B7058EC2BDF668C37B846EA7E5E1A73A4AA0816", - "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"] + "Indexes": [ + "BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD" + ] } }, { @@ -709,7 +719,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "2C9F00EFA5CCBD43452EF364B12C8DFCEF2B910336E5EFCE3AA412A556991582", - "Indexes": ["F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A"] + "Indexes": [ + "F721E924498EE68BFF906CD856E8332073DD350BAC9E8977AC3F31860BA1E33A" + ] } }, { @@ -746,7 +758,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82144F0415EB4EA0C727", - "Indexes": ["5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719"], + "Indexes": [ + "5F22826818CC83448C9DF34939AB4019D3F80C70DEB8BDBDCF0496A36DC68719" + ], "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" } }, @@ -760,7 +774,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "2FB4904ACFB96228FC002335B1B5A4C5584D9D727BBE82145003BAF82D03A000", - "Indexes": ["5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46"], + "Indexes": [ + "5B7F148A8DDB4EB7386C9E75C4C1ED918DEDE5C52D5BA51B694D7271EF8BDB46" + ], "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" } }, @@ -951,7 +967,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "3F2BADB38F12C87D111D3970CD1F05FE698DB86F14DC7C5FAEB05BFB6391B00E", - "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"] + "Indexes": [ + "73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F" + ] } }, { @@ -976,7 +994,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "4235CD082112FB621C02D6DA2E4F4ACFAFC91CB0585E034B936C29ABF4A76B01", - "Indexes": ["6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997"] + "Indexes": [ + "6C4C3F1C6B9D76A6EF50F377E7C3991825694C604DBE0C1DD09362045EE41997" + ] } }, { @@ -1075,7 +1095,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "48E91FD14597FB089654DADE7B70EB08CAF421EA611D703F3E871F7D4B5AAB5D", - "Indexes": ["25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766"] + "Indexes": [ + "25DCAC87FBE4C3B66A1AFDE3C3F98E5A16333975C4FD46682F7497F27DFB9766" + ] } }, { @@ -1137,7 +1159,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "4EFC0442D07AE681F7FDFAA89C75F06F8E28CFF888593440201B0320E8F2C7BD", - "Indexes": ["1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5"] + "Indexes": [ + "1595E5D5197330F58A479200A2FDD434D7A244BD1FFEC5E5EE8CF064AE77D3F5" + ] } }, { @@ -1351,7 +1375,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "98082E695CAB618590BEEA0647A5F24D2B610A686ECD49310604FC7431FAAB0D", - "Indexes": ["9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB"] + "Indexes": [ + "9BF3216E42575CA5A3CB4D0F2021EE81D0F7835BA2EDD78E05CAB44B655962BB" + ] } }, { @@ -1556,7 +1582,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "62AE37A44FE44BDCFC2BA5DD14D74BEC0AC346DA2DC1F04756044364C5BB0000", - "Indexes": ["600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C"], + "Indexes": [ + "600A398F57CAE44461B4C8C25DE12AC289F87ED125438440B33B97417FE3D82C" + ], "TakerPaysIssuer": "2B6C42A95B3F7EE1971E4A10098E8F1B5F66AA08" } }, @@ -1932,7 +1960,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "72D60CCD3905A3ABE19049B6EE76E8E0F3A2CBAC852625C757176F1B73EF617F", - "Indexes": ["AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8"] + "Indexes": [ + "AB124EEAB087452070EC70D9DEA1A22C9766FFBBEE1025FD46495CC74148CCA8" + ] } }, { @@ -2061,7 +2091,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "80AB25842B230D48027800213EB86023A3EAF4430E22C092D333795FFF1E5219", - "Indexes": ["42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C"] + "Indexes": [ + "42E28285A82D01DCA856118A064C8AEEE1BF8167C08186DA5BFC678687E86F7C" + ] } }, { @@ -2186,7 +2218,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "8ADF3C5527CCF6D0B5863365EF40254171536C3901F1CBD9E2BC5F918A7D492A", - "Indexes": ["BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD"] + "Indexes": [ + "BC10E40AFB79298004CDE51CB065DBDCABA86EC406E3A1CF02CE5F8A9628A2BD" + ] } }, { @@ -2587,7 +2621,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "A00CD19C13A5CFA3FECB409D42B38017C07A4AEAE05A7A00347DDA17199BA683", - "Indexes": ["E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6"] + "Indexes": [ + "E49318D6DF22411C3F35581B1D28297A36E47F68B45F36A587C156E6E43CE0A6" + ] } }, { @@ -2634,7 +2670,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "A39F044D860C5B5846AA7E0FAAD44DC8897F0A62B2F628AA073B21B3EC146010", - "Indexes": ["CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488"] + "Indexes": [ + "CD34D8FF7C656B66E2298DB420C918FE27DFFF2186AC8D1785D8CBF2C6BC3488" + ] } }, { @@ -2683,7 +2721,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "A7E461C6DC98F472991FDE51FADDC0082D755F553F5849875D554B52624EF1C3", - "Indexes": ["116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747"] + "Indexes": [ + "116C6D5E5C6C59C9C5362B84CB9DD30BD3D4B7CB98CE993D49C068323BF19747" + ] } }, { @@ -2717,7 +2757,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "AA539C8EECE0A0CFF0DBF3BFACD6B42CD4421715428AD90B034091BD3C721038", - "Indexes": ["72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B"] + "Indexes": [ + "72307CB57E53604A0C50E653AB10E386F3835460B5585B70CB7F668C1E04AC8B" + ] } }, { @@ -3777,7 +3819,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "D4A00D9B3452C7F93C5F0531FA8FFB4599FEEC405CA803FBEFE0FA22137D863D", - "Indexes": ["C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C"] + "Indexes": [ + "C1C5FB39D6C15C581D822DBAF725EF7EDE40BEC9F93C52398CF5CE9F64154D6C" + ] } }, { @@ -3787,7 +3831,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "D4B68B54869E428428078E1045B8BB66C24DD101DB3FCCBB099929B3B63BCB40", - "Indexes": ["9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09"] + "Indexes": [ + "9A551971E78FE2FB80D930A77EA0BAC2139A49D6BEB98406427C79F52A347A09" + ] } }, { @@ -3862,7 +3908,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "DD23E2C60C9BC58180AC6EA7C668233EC51A0947E42FD1FAD4F5FBAED9698D95", - "Indexes": ["908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB"] + "Indexes": [ + "908D554AA0D29F660716A3EE65C61DD886B744DDF60DE70E6B16EADB770635DB" + ] } }, { @@ -4013,7 +4061,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "E2EC9E1BC7B4667B7A5F2F68857F6E6A478A09B5BB4F99E09F694437C4152DED", - "Indexes": ["65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E"] + "Indexes": [ + "65492B9F30F1CBEA168509128EB8619BAE02A7A7A4725FF3F8DAA70FA707A26E" + ] } }, { @@ -4190,7 +4240,9 @@ "IndexPrevious": "0000000000000002", "Flags": 0, "RootIndex": "8E92E688A132410427806A734DF6154B7535E439B72DECA5E4BC7CE17135C5A4", - "Indexes": ["73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F"] + "Indexes": [ + "73E075E64CA5E7CE60FFCD5359C1D730EDFFEE7C4D992760A87DF7EA0A34E40F" + ] } }, { @@ -4294,7 +4346,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "F774E0321809251174AC85531606FB46B75EEF9F842F9697531AA535D3D0C000", - "Indexes": ["D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52"], + "Indexes": [ + "D1CB738BD08AC36DCB77191DB87C6E40FA478B86503371ED497F30931D7F4F52" + ], "TakerPaysIssuer": "E8ACFC6B5EF4EA0601241525375162F43C2FF285" } }, @@ -4355,7 +4409,9 @@ "LedgerEntryType": "DirectoryNode", "Flags": 0, "RootIndex": "F95F6D3A1EF7981E5CA4D5AEC4DA63392B126C76469735BCCA26150A1AF6D9C3", - "Indexes": ["CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B"] + "Indexes": [ + "CAD951AB279A749AE648FD1DFF56C021BD66E36187022E772C31FE52106CB13B" + ] } }, { @@ -4456,9 +4512,13 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Fee": "10", "Flags": 0, @@ -4476,9 +4536,13 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Fee": "10", "Flags": 0, @@ -4496,9 +4560,13 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Fee": "10", "Flags": 2147483648, @@ -4517,9 +4585,13 @@ "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Fee": "10", "Flags": 2147483648, @@ -4537,9 +4609,13 @@ "Amount": "10000", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Destination": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", "Fee": "10", @@ -4557,9 +4633,13 @@ "Account": "rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh", "XChainBridge": { "LockingChainDoor": "rGzx83BVoqTYbGn7tiVAnFw7cbxjin13jL", - "LockingChainIssue": {"currency": "XRP"}, + "LockingChainIssue": { + "currency": "XRP" + }, "IssuingChainDoor": "r3kmLJN5D28dHuH8vZNUZpMC43pEHpaocV", - "IssuingChainIssue": {"currency": "XRP"} + "IssuingChainIssue": { + "currency": "XRP" + } }, "Amount": "1000000", "Fee": "10", @@ -4660,9 +4740,18 @@ "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMDeposit", "TxnSignature": "8073C588E7EF672DD171E414638D9AF8DBE9A1359E030DE3E1C9AA6A38A2CE9E138CB56482BB844F7228D48B1E4AD7D09BB7E9F639C115958EEEA374749CA00B", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, - "LPTokenOut": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, + "LPTokenOut": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "1000" + }, "Fee": "10", "Flags": 65536, "Sequence": 1432289, @@ -4674,8 +4763,13 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMDeposit", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", "Fee": "10", "Flags": 524288, @@ -4689,10 +4783,19 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMDeposit", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", - "Amount2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", "value": "500"}, + "Amount2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", + "value": "500" + }, "Fee": "10", "Flags": 1048576, "Sequence": 1432289, @@ -4705,10 +4808,19 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMDeposit", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", - "LPTokenOut": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"}, + "LPTokenOut": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "1000" + }, "Fee": "10", "Flags": 2097152, "Sequence": 1432289, @@ -4721,8 +4833,13 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMDeposit", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", "EPrice": "25", "Fee": "10", @@ -4737,9 +4854,18 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMWithdraw", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, - "LPTokenIn": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, + "LPTokenIn": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "1000" + }, "Fee": "10", "Flags": 65536, "Sequence": 1432289, @@ -4752,8 +4878,13 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMWithdraw", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", "Fee": "10", "Flags": 524288, @@ -4767,10 +4898,19 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMWithdraw", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", - "Amount2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", "value": "500"}, + "Amount2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9", + "value": "500" + }, "Fee": "10", "Flags": 1048576, "Sequence": 1432289, @@ -4783,10 +4923,19 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMWithdraw", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", - "LPTokenIn": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "1000"}, + "LPTokenIn": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "1000" + }, "Fee": "10", "Flags": 2097152, "Sequence": 1432289, @@ -4799,8 +4948,13 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMWithdraw", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "Amount": "1000", "EPrice": "25", "Fee": "10", @@ -4815,11 +4969,30 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMBid", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, - "AuthAccounts": [{"AuthAccount": {"Account": "rEaHTti4HZsMBpxTAF4ncWxkcdqDh1h6P7"}}], - "BidMax": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "35"}, - "BidMin": {"currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", "value": "25"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, + "AuthAccounts": [ + { + "AuthAccount": { + "Account": "rEaHTti4HZsMBpxTAF4ncWxkcdqDh1h6P7" + } + } + ], + "BidMax": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "35" + }, + "BidMin": { + "currency": "B3813FCAB4EE68B3D0D735D6849465A9113EE048", + "issuer": "rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg", + "value": "25" + }, "Fee": "10", "Flags": 0, "Sequence": 1432289, @@ -4832,8 +5005,13 @@ "json": { "Account": "rP5ZkB5RZQaECsSVR4DeSFK4fAw52BYtbw", "TransactionType": "AMMVote", - "Asset": {"currency": "XRP"}, - "Asset2": {"currency": "ETH", "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9"}, + "Asset": { + "currency": "XRP" + }, + "Asset2": { + "currency": "ETH", + "issuer": "rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9" + }, "TradingFee": 234, "Fee": "10", "Flags": 0, @@ -4891,6 +5069,32 @@ "AssetClass": "63757272656E6379" } }, + { + "binary": "120040210000F7E0228000000024000009186840000000000000C87321ED510865F867CDFCB944D435812ACF23D231E5C14534B146BCE46A2F794D198B777440D05A89D0B489DEC1CECBE0D33BA656C929CDCCC75D4D41B282B378544975B87A70C3E42147D980D1F6E2E4DC6316C99D7E2D4F6335F147C71C0DAA0D6516150D8114DB9157872FA63FAF7432CD300911A43B981B85A28514EBA79C385B47C50D52445DF2676EEC0231F732CEF01DEF203400000001E1EF203400010004E1F1", + "json": { + "TransactionType": "DelegateSet", + "Account": "rMryaYXZMchTWBovAzEsMzid9FUwmrmcH7", + "Authorize": "r4Vp2qvKR59guHDn4Yzw9owTzDVnt6TJZA", + "Fee": "200", + "Flags": 2147483648, + "NetworkID": 63456, + "Permissions": [ + { + "Permission": { + "PermissionValue": "Payment" + } + }, + { + "Permission": { + "PermissionValue": "AccountDomainSet" + } + } + ], + "Sequence": 2328, + "SigningPubKey": "ED510865F867CDFCB944D435812ACF23D231E5C14534B146BCE46A2F794D198B77", + "TxnSignature": "D05A89D0B489DEC1CECBE0D33BA656C929CDCCC75D4D41B282B378544975B87A70C3E42147D980D1F6E2E4DC6316C99D7E2D4F6335F147C71C0DAA0D6516150D" + } + }, { "binary": "1200342033000004D2811401476926B590BA3245F63C829116A0A3AF7F382D", "json": { @@ -4898,20 +5102,133 @@ "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8", "OracleDocumentID": 1234 } + }, + { + "binary": "120041811401476926B590BA3245F63C829116A0A3AF7F382D0318000000000000000000000000555344000000000001476926B590BA3245F63C829116A0A3AF7F382D", + "json": { + "TransactionType": "VaultCreate", + "Account": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8", + "Asset": { + "currency": "USD", + "issuer": "rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8" + } + } + }, + { + "binary": "12004124000002D36840000000000000647321ED54C1E3427192B879EBD6F1FD7306058EAE6DAF7D95B2655B053885FE7722A7127440A7C6C1EE9989F9F195A02BEA4DCFEBB887E4CA1F4D30083C84616E0FD1BCA4F4C1B84A6DA26A44B94FBBDA67FB603C78995361DEAF8120093959C639E9255702811469C0A3C6BB1F42DCB9CC4E7DD332DB60BF99D0960318E0739D43718DB5815CE070D4D514A261EC872C930000000000000000000000000000000000000001D2020000", + "json": { + "Account": "rwew5zNSiizbX6ku8YF8TjgPXJA2rpXar3", + "Asset": { + "mpt_issuance_id": "000002D2E0739D43718DB5815CE070D4D514A261EC872C93" + }, + "Fee": "100", + "Sequence": 723, + "SigningPubKey": "ED54C1E3427192B879EBD6F1FD7306058EAE6DAF7D95B2655B053885FE7722A712", + "TransactionType": "VaultCreate", + "TxnSignature": "A7C6C1EE9989F9F195A02BEA4DCFEBB887E4CA1F4D30083C84616E0FD1BCA4F4C1B84A6DA26A44B94FBBDA67FB603C78995361DEAF8120093959C639E9255702" + } + }, + { + "binary": "120041240000001A6840000000009896807321ED5E83997E2D57EF5C32DFF74AAA836E5C149CA9E49711D220289E610975560EC474401BCB501B08FAA564E4DB82843E77024585827EC1C3FEB784F656215DC3B79C90CE0B387B33661219B074E8CCF965CF2824A92B79FFB9C4A9F988F7AB19B45502701B0E7661756C74206D65746164617461701E0E7368617265206D657461646174618114B67FFA466543506DF81A26FBA98CFB604DE5FE44930DE0B6B3A763FF9C0000004E00101401031800000000000000000000000055534400000000002B13011144920AF528764094A05ADFE3C3DD58B7", + "json": { + "TransactionType": "VaultCreate", + "Sequence": 26, + "Fee": "10000000", + "SigningPubKey": "ED5E83997E2D57EF5C32DFF74AAA836E5C149CA9E49711D220289E610975560EC4", + "TxnSignature": "1BCB501B08FAA564E4DB82843E77024585827EC1C3FEB784F656215DC3B79C90CE0B387B33661219B074E8CCF965CF2824A92B79FFB9C4A9F988F7AB19B45502", + "Data": "7661756C74206D65746164617461", + "MPTokenMetadata": "7368617265206D65746164617461", + "Account": "rHdyHxQMCKyoUFeR1GW7F6pt4AR7r6D4b4", + "AssetsMaximum": "9999999999999999e80", + "WithdrawalPolicy": 1, + "Asset": { + "currency": "USD", + "issuer": "rhvkFgXoWfrDJJHdV3hKTcqXQk7ChXtf18" + } + } + }, + { + "binary": "120041240000002F6840000000009896807321ED65C3F14697756CF0952CE5B00E2374E4D91C7B74687B19C451317B67D52C3B4F7440733B3F7C63271A62E55335D4BB62448ED459ACF7BE03D624844F696406DB84A2D3FDF638F16DB4A3B6CB9BD463756003F795AA26AFCA9EB5BA53FF1ADFC4E50F701B0E7661756C74206D65746164617461701E0E7368617265206D65746164617461811499EBF31121DE67CD1015F13328E18EE2490A139D931122D7D8F56AFD68FFFFFFF500101401031800000000000000000000000055534400000000002FD289D349D05565C1D43CF5D694EECB5D8C3FF0", + "json": { + "TransactionType": "VaultCreate", + "Sequence": 47, + "Fee": "10000000", + "SigningPubKey": "ED65C3F14697756CF0952CE5B00E2374E4D91C7B74687B19C451317B67D52C3B4F", + "TxnSignature": "733B3F7C63271A62E55335D4BB62448ED459ACF7BE03D624844F696406DB84A2D3FDF638F16DB4A3B6CB9BD463756003F795AA26AFCA9EB5BA53FF1ADFC4E50F", + "Data": "7661756C74206D65746164617461", + "MPTokenMetadata": "7368617265206D65746164617461", + "Account": "rEp1sQdJbwDKmhMWmdJgx9ywnoGGr4oxKu", + "AssetsMaximum": "12347865.746832746", + "WithdrawalPolicy": 1, + "Asset": { + "currency": "USD", + "issuer": "rnMiy78qjm8KwantFnrfouvMGqzCR7apap" + } + } + }, + { + "binary": "120041240000006E6840000000004C4B407321EDFC4A4C1FF4176F27DE9BA9550ECBDB16C7517C50F73299B1E0C4633A130F7B6F744006EC52DE62AD2A97DDDB09A1B21A4C9B0B07FC992878B2590C2AF06242FC02B05E08F78610D8337285AB4E9D9C5BC7CD580C32CE405F7B305CFD225699AE1C0C8114A7AF1AF3F2907DADD86CC5CEA513A496F5E98632930CCCCCCCCCCCCCD60000000103180000000000000000000000005553440000000000A6C027452D30AACA763A09CB586DF7CE21ADC6F2", + "json": { + "TransactionType": "VaultCreate", + "Sequence": 110, + "Fee": "5000000", + "SigningPubKey": "EDFC4A4C1FF4176F27DE9BA9550ECBDB16C7517C50F73299B1E0C4633A130F7B6F", + "TxnSignature": "06EC52DE62AD2A97DDDB09A1B21A4C9B0B07FC992878B2590C2AF06242FC02B05E08F78610D8337285AB4E9D9C5BC7CD580C32CE405F7B305CFD225699AE1C0C", + "Account": "rGHdcZ5iHMH7iUe5noaYipUfDoppBHjkBX", + "AssetsMaximum": "9223372036854775900", + "Asset": { + "currency": "USD", + "issuer": "rGU6MtyTSMWiN3LXdQXUVpGcnwwf4RSC5f" + } + } + }, + { + "binary": "120041240000026B6840000000004C4B407321ED02BD2C030FB01D3A4ECA535239B54E77DA8AA31C44EEBCA079B4DBD6802F5FE77440AA1320E90677CBBD69D8F373B6E162A82B7C6DECF976BD4CDFF4D2501D394F73047A17826B4A5DEC793C2B3F958FB8881356D06B1E3B4EC641446D390D4B5A04811485573352505C7139E49D42A3702E8821C12048D3930CF053BF3C8DCCCC0000000103180000000000000000000000005553440000000000F03F27AD0A77EA2D903EDABAC26876AFA32629D9", + "json": { + "TransactionType": "VaultCreate", + "Sequence": 619, + "Fee": "5000000", + "SigningPubKey": "ED02BD2C030FB01D3A4ECA535239B54E77DA8AA31C44EEBCA079B4DBD6802F5FE7", + "TxnSignature": "AA1320E90677CBBD69D8F373B6E162A82B7C6DECF976BD4CDFF4D2501D394F73047A17826B4A5DEC793C2B3F958FB8881356D06B1E3B4EC641446D390D4B5A04", + "Account": "rDwsLJuJKQ8EMN3otL8byiKkpBFABxcDNs", + "AssetsMaximum": "9323372036854775800", + "Asset": { + "currency": "USD", + "issuer": "r4uJq3Du8WZ2Zyh1X8nwrarxtti281apfB" + } + } + }, + { + "binary": "12004124000001F36840000000004C4B407321EDAFD7A83CD7A09CF126100882728F9FA790B6CC2A29099F274B2B7F614BFF143C7440FA4C253A28EC949593E50C7A29061EA2F44F9E9BD64267DE8932C82C93658EC0224406E12A104B1FA448E0095434A32AE845883FB1404513FF9D57E58CEE8E0881149C1A8144EE13A6B71398C54632E94D4D523BB20A930DBD2FC137A300000000000403180000000000000000000000005553440000000000473C02A2B1C2E8D35A57EE0968ECCF07B9AA291A", + "json": { + "TransactionType": "VaultCreate", + "Sequence": 499, + "Fee": "5000000", + "SigningPubKey": "EDAFD7A83CD7A09CF126100882728F9FA790B6CC2A29099F274B2B7F614BFF143C", + "TxnSignature": "FA4C253A28EC949593E50C7A29061EA2F44F9E9BD64267DE8932C82C93658EC0224406E12A104B1FA448E0095434A32AE845883FB1404513FF9D57E58CEE8E08", + "Account": "rENQwXJhz9kPQ6EZErfV2UV49EtpF43yLp", + "AssetsMaximum": "99e20", + "Asset": { + "currency": "USD", + "issuer": "rfVe1DnuC7nuvGWTAFzBxaTxroEiD8XZ3w" + } + } } ], - "ledgerData": [{ - "binary": "01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00", - "json": { - "account_hash": "3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5", - "close_flags": 0, - "close_time": 556231910, - "close_time_resolution": 10, - "ledger_index": 32052277, - "parent_close_time": 556231902, - "parent_hash": "EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6", - "total_coins": "99994494362043555", - "transaction_hash": "DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87" + "ledgerData": [ + { + "binary": "01E91435016340767BF1C4A3EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F873B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D521276CDE21276CE60A00", + "json": { + "account_hash": "3B5C3E520634D343EF5D9D9A4246643D64DAD278BA95DC0EAC6EB5350CF970D5", + "close_flags": 0, + "close_time": 556231910, + "close_time_resolution": 10, + "ledger_index": 32052277, + "parent_close_time": 556231902, + "parent_hash": "EACEB081770D8ADE216C85445DD6FB002C6B5A2930F2DECE006DA18150CB18F6", + "total_coins": "99994494362043555", + "transaction_hash": "DD33F6F0990754C962A7CCE62F332FF9C13939B03B864117F0BDA86B6E9B4F87" + } } - }] + ] } diff --git a/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json b/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json index 658c15660c..e7403768de 100644 --- a/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json +++ b/packages/ripple-binary-codec/test/fixtures/data-driven-tests.json @@ -2499,7 +2499,7 @@ "type_id": 6, "is_native": true, "type": "Amount", - "expected_hex": "0000000000000001", + "error": "Value is negative", "is_negative": true }, { @@ -2914,6 +2914,170 @@ "type": "Amount", "error": "10000000000000000000 absolute XRP is bigger than max native value 100000000000.0", "is_negative": true + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "9223372036854775808" + }, + "type": "Amount", + "error": "Value is too large" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "18446744073709551615" + }, + "type": "Amount", + "error": "Value is too large" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "-1" + }, + "type": "Amount", + "error": "Value is negative" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "10.1" + }, + "type": "Amount", + "error": "Value has decimal point" + }, + { + "test_json": { + "mpt_issuance_id": "10", + "value": "10" + }, + "type": "Amount", + "error": "mpt_issuance_id has invalid hash length" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "10", + "issuer": "rrrrrrrrrrrrrrrrrrrrBZbvji" + }, + "type": "Amount", + "error": "Issuer not valid for MPT" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "10", + "currency": "USD" + }, + "type": "Amount", + "error": "Currency not valid for MPT" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "a" + }, + "type": "Amount", + "error": "Value has incorrect hex format" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0xy" + }, + "type": "Amount", + "error": "Value has bad hex character" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "/" + }, + "type": "Amount", + "error": "Value has bad character" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0x8000000000000000" + }, + "type": "Amount", + "error": "Hex value out of range" + }, + { + "test_json": { + "mpt_issuance_id": "00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0xFFFFFFFFFFFFFFFF" + }, + "type": "Amount", + "error": "Hex value out of range" + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "9223372036854775807" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "607FFFFFFFFFFFFFFF00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "60000000000000000000002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "-0" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "60000000000000000000002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "100" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "60000000000000006400002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0xa" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "60000000000000000A00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false + }, + { + "test_json": { + "mpt_issuance_id":"00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "value": "0x7FFFFFFFFFFFFFFF" + }, + "type_id": 6, + "is_native": false, + "type": "Amount", + "expected_hex": "607FFFFFFFFFFFFFFF00002403C84A0A28E0190E208E982C352BBD5006600555CF", + "is_negative": false } ] } diff --git a/packages/ripple-binary-codec/test/hash.test.ts b/packages/ripple-binary-codec/test/hash.test.ts index 246ac4c7c0..81b3a2fc29 100644 --- a/packages/ripple-binary-codec/test/hash.test.ts +++ b/packages/ripple-binary-codec/test/hash.test.ts @@ -1,4 +1,11 @@ -import { Hash128, Hash160, Hash256, AccountID, Currency } from '../src/types' +import { + Hash128, + Hash160, + Hash192, + Hash256, + AccountID, + Currency, +} from '../src/types' describe('Hash128', function () { it('has a static width member', function () { @@ -25,6 +32,12 @@ describe('Hash128', function () { new Error('Invalid Hash length 17'), ) }) + + it(`throws when constructed from non-hexadecimal string`, () => { + expect(() => Hash128.from('Z'.repeat(32))).toThrow( + new Error('Invalid hash string ' + 'Z'.repeat(32)), + ) + }) }) describe('Hash160', function () { it('has a static width member', function () { @@ -49,6 +62,45 @@ describe('Hash160', function () { Hash160.from('100000000000000000000000000000000000000000'), ).toThrow(new Error('Invalid Hash length 21')) }) + + it(`throws when constructed from non-hexadecimal string`, () => { + expect(() => Hash160.from('Z'.repeat(40))).toThrow( + new Error('Invalid hash string ' + 'Z'.repeat(40)), + ) + }) +}) + +describe('Hash192', function () { + it('has a static width member', function () { + expect(Hash192.width).toBe(24) + }) + it('has a ZERO_192 member', function () { + expect(Hash192.ZERO_192.toJSON()).toBe( + '000000000000000000000000000000000000000000000000', + ) + }) + it('can be compared against another', function () { + const h1 = Hash192.from('100000000000000000000000000000000000000000000000') + const h2 = Hash192.from('200000000000000000000000000000000000000000000000') + const h3 = Hash192.from('000000000000000000000000000000000000000000000003') + expect(h1.lt(h2)).toBe(true) + expect(h3.lt(h2)).toBe(true) + }) + + it('throws when constructed from invalid hash length', () => { + expect(() => + Hash192.from('10000000000000000000000000000000000000000000000'), + ).toThrow(new Error('Invalid Hash length 23')) + expect(() => + Hash192.from('10000000000000000000000000000000000000000000000000'), + ).toThrow(new Error('Invalid Hash length 25')) + }) + + it(`throws when constructed from non-hexadecimal string`, () => { + expect(() => Hash192.from('Z'.repeat(48))).toThrow( + new Error('Invalid hash string ' + 'Z'.repeat(48)), + ) + }) }) describe('Hash256', function () { @@ -71,6 +123,12 @@ describe('Hash256', function () { expect(h.nibblet(4)).toBe(0x0b) expect(h.nibblet(5)).toBe(0xd) }) + + it(`throws when constructed from non-hexadecimal string`, () => { + expect(() => Hash256.from('Z'.repeat(64))).toThrow( + new Error('Invalid hash string ' + 'Z'.repeat(64)), + ) + }) }) describe('Currency', function () { diff --git a/packages/ripple-binary-codec/test/int.test.ts b/packages/ripple-binary-codec/test/int.test.ts new file mode 100644 index 0000000000..7bf7254269 --- /dev/null +++ b/packages/ripple-binary-codec/test/int.test.ts @@ -0,0 +1,203 @@ +import { Int32 } from '../src/types' +import { encode, decode } from '../src' + +describe('Int32', () => { + describe('from()', () => { + it('should create Int32 from positive number', () => { + const int32 = Int32.from(12345) + expect(int32.valueOf()).toBe(12345) + }) + + it('should create Int32 from negative number', () => { + const int32 = Int32.from(-12345) + expect(int32.valueOf()).toBe(-12345) + }) + + it('should create Int32 from zero', () => { + const int32 = Int32.from(0) + expect(int32.valueOf()).toBe(0) + }) + + it('should create Int32 from positive string', () => { + const int32 = Int32.from('67890') + expect(int32.valueOf()).toBe(67890) + }) + + it('should create Int32 from negative string', () => { + const int32 = Int32.from('-67890') + expect(int32.valueOf()).toBe(-67890) + }) + + it('should create Int32 from another Int32', () => { + const original = Int32.from(999) + const copy = Int32.from(original) + expect(copy.valueOf()).toBe(999) + }) + + it('should handle MIN_VALUE', () => { + const int32 = Int32.from(-2147483648) + expect(int32.valueOf()).toBe(-2147483648) + }) + + it('should handle MAX_VALUE', () => { + const int32 = Int32.from(2147483647) + expect(int32.valueOf()).toBe(2147483647) + }) + }) + + describe('range validation', () => { + it('should throw error when value exceeds MAX_VALUE', () => { + expect(() => Int32.from(2147483648)).toThrow( + new Error( + 'Invalid Int32: 2147483648 must be >= -2147483648 and <= 2147483647', + ), + ) + }) + + it('should throw error when value is below MIN_VALUE', () => { + expect(() => Int32.from(-2147483649)).toThrow( + new Error( + 'Invalid Int32: -2147483649 must be >= -2147483648 and <= 2147483647', + ), + ) + }) + + it('should throw error for string exceeding MAX_VALUE', () => { + expect(() => Int32.from('2147483648')).toThrow( + new Error( + 'Invalid Int32: 2147483648 must be >= -2147483648 and <= 2147483647', + ), + ) + }) + + it('should throw error for string below MIN_VALUE', () => { + expect(() => Int32.from('-2147483649')).toThrow( + new Error( + 'Invalid Int32: -2147483649 must be >= -2147483648 and <= 2147483647', + ), + ) + }) + }) + + describe('decimal validation', () => { + it('should throw error when passed a decimal number', () => { + expect(() => Int32.from(100.5)).toThrow( + new Error('Cannot construct Int32 from given value'), + ) + }) + + it('should throw error when passed a negative decimal', () => { + expect(() => Int32.from(-100.5)).toThrow( + new Error('Cannot construct Int32 from given value'), + ) + }) + + it('should throw error when passed a small decimal', () => { + expect(() => Int32.from(0.001)).toThrow( + new Error('Cannot construct Int32 from given value'), + ) + }) + + it('should throw error for decimal string', () => { + expect(() => Int32.from('1.23')).toThrow( + new Error('Cannot construct Int32 from string: 1.23'), + ) + }) + + it('should throw error for non-numeric string', () => { + expect(() => Int32.from('abc')).toThrow( + new Error('Cannot construct Int32 from string: abc'), + ) + }) + }) + + describe('compareTo()', () => { + it('should return 0 for equal values', () => { + expect(Int32.from(100).compareTo(Int32.from(100))).toBe(0) + }) + + it('should return 1 when first value is greater', () => { + expect(Int32.from(100).compareTo(Int32.from(50))).toBe(1) + }) + + it('should return -1 when first value is smaller', () => { + expect(Int32.from(50).compareTo(Int32.from(100))).toBe(-1) + }) + + it('should compare with raw number', () => { + expect(Int32.from(100).compareTo(100)).toBe(0) + expect(Int32.from(100).compareTo(50)).toBe(1) + expect(Int32.from(50).compareTo(100)).toBe(-1) + }) + + it('should handle negative values', () => { + expect(Int32.from(-100).compareTo(Int32.from(-50))).toBe(-1) + expect(Int32.from(-50).compareTo(Int32.from(-100))).toBe(1) + expect(Int32.from(-100).compareTo(Int32.from(-100))).toBe(0) + }) + + it('should compare negative and positive values', () => { + expect(Int32.from(-100).compareTo(Int32.from(100))).toBe(-1) + expect(Int32.from(100).compareTo(Int32.from(-100))).toBe(1) + }) + }) + + describe('toJSON()', () => { + it('should return number for positive value', () => { + expect(Int32.from(12345).toJSON()).toBe(12345) + }) + + it('should return number for negative value', () => { + expect(Int32.from(-12345).toJSON()).toBe(-12345) + }) + + it('should return 0 for zero', () => { + expect(Int32.from(0).toJSON()).toBe(0) + }) + }) + + describe('valueOf()', () => { + it('should allow bitwise operations', () => { + const val = Int32.from(5) + expect(val.valueOf() | 0x2).toBe(7) + }) + + it('should handle negative values in bitwise operations', () => { + const val = Int32.from(-1) + expect(val.valueOf() & 0xff).toBe(255) + }) + }) + + describe('encode/decode with Loan ledger entry', () => { + // Loan object from Devnet with LoanScale field + const loanWithScale = { + Borrower: 'rs5fUokF7Y5bxNkstM4p4JYHgqzYkFamCg', + GracePeriod: 60, + LoanBrokerID: + '18F91BD8009DAF09B5E4663BE7A395F5F193D0657B12F8D1E781EB3D449E8151', + LoanScale: -11, + LoanSequence: 1, + NextPaymentDueDate: 822779431, + PaymentInterval: 400, + PaymentRemaining: 1, + PeriodicPayment: '10000', + PrincipalOutstanding: '10000', + StartDate: 822779031, + TotalValueOutstanding: '10000', + LedgerEntryType: 'Loan', + } + + it('can encode and decode Loan with negative LoanScale', () => { + const encoded = encode(loanWithScale) + const decoded = decode(encoded) + expect(decoded).toEqual(loanWithScale) + }) + + it('can encode and decode Loan with positive LoanScale', () => { + const loan = { ...loanWithScale, LoanScale: 5 } + const encoded = encode(loan) + const decoded = decode(encoded) + expect(decoded).toEqual(loan) + }) + }) +}) diff --git a/packages/ripple-binary-codec/test/issue.test.ts b/packages/ripple-binary-codec/test/issue.test.ts new file mode 100644 index 0000000000..74f33f23a8 --- /dev/null +++ b/packages/ripple-binary-codec/test/issue.test.ts @@ -0,0 +1,84 @@ +import { BinaryParser } from '../src/binary' +import { Issue } from '../src/types/issue' + +describe('Issue type conversion functions', () => { + it(`test from value xrp`, () => { + const xrpJson = { currency: 'XRP' } + const xrpIssue = Issue.from(xrpJson) + expect(xrpIssue.toJSON()).toEqual(xrpJson) + }) + + it(`test from value issued currency`, () => { + const iouJson = { + currency: 'USD', + issuer: 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', + } + const iouIssue = Issue.from(iouJson) + expect(iouIssue.toJSON()).toEqual(iouJson) + }) + + it(`test from value non-standard currency`, () => { + const iouJson = { + currency: '0123456789ABCDEF0123456789ABCDEF01234567', + issuer: 'rG1QQv2nh2gr7RCZ1P8YYcBUKCCN633jCn', + } + const iouIssue = Issue.from(iouJson) + expect(iouIssue.toJSON()).toEqual(iouJson) + }) + + it(`test from value mpt`, () => { + const mptJson = { + mpt_issuance_id: 'BAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00D', + } + const mptIssue = Issue.from(mptJson) + expect(mptIssue.toJSON()).toEqual(mptJson) + }) + + it(`test from parser xrp`, () => { + const xrpJson = { currency: 'XRP' } + const xrpIssue = Issue.from(xrpJson) + const parser = new BinaryParser(xrpIssue.toHex()) + const parserIssue = Issue.fromParser(parser) + expect(parserIssue.toJSON()).toEqual(xrpJson) + }) + + it(`test from parser issued currency`, () => { + const iouJson = { + currency: 'EUR', + issuer: 'rLUEXYuLiQptky37CqLcm9USQpPiz5rkpD', + } + const iouIssue = Issue.from(iouJson) + const parser = new BinaryParser(iouIssue.toHex()) + const parserIssue = Issue.fromParser(parser) + expect(parserIssue.toJSON()).toEqual(iouJson) + }) + + it(`test from parser non-standard currency`, () => { + const iouJson = { + currency: '0123456789ABCDEF0123456789ABCDEF01234567', + issuer: 'rLUEXYuLiQptky37CqLcm9USQpPiz5rkpD', + } + const iouIssue = Issue.from(iouJson) + const parser = new BinaryParser(iouIssue.toHex()) + const parserIssue = Issue.fromParser(parser) + expect(parserIssue.toJSON()).toEqual(iouJson) + }) + + it(`test from parser mpt`, () => { + const mptJson = { + mpt_issuance_id: 'BAADF00DBAADF00DBAADF00DBAADF00DBAADF00DBAADF00D', + } + const mptIssue = Issue.from(mptJson) + const parser = new BinaryParser(mptIssue.toHex()) + const parserIssue = Issue.fromParser(parser) + expect(parserIssue.toJSON()).toEqual(mptJson) + }) + + it(`throws with invalid input`, () => { + const invalidJson = { random: 123 } + expect(() => { + // @ts-expect-error -- need to test error message + Issue.from(invalidJson) + }).toThrow(new Error('Invalid type to construct an Issue')) + }) +}) diff --git a/packages/ripple-binary-codec/test/signing-data-encoding.test.ts b/packages/ripple-binary-codec/test/signing-data-encoding.test.ts index 881f8132af..a90127fc65 100644 --- a/packages/ripple-binary-codec/test/signing-data-encoding.test.ts +++ b/packages/ripple-binary-codec/test/signing-data-encoding.test.ts @@ -1,9 +1,10 @@ import { XrplDefinitions } from '../src/enums/xrpl-definitions' -const { +import { encodeForSigning, encodeForSigningClaim, encodeForMultisigning, -} = require('../src') + encodeForSigningBatch, +} from '../src' const normalDefinitions = require('../src/enums/definitions.json') @@ -27,6 +28,22 @@ const tx_json = { 'ED5F5AC8B98974A3CA843326D9B88CEBD0560177B973EE0B149F782CFAA06DC66A', } +const multiSigningTxJson = { + TransactionType: 'LoanSet', + Flags: 0, + Sequence: 3606, + LastLedgerSequence: 3634, + LoanBrokerID: + 'B91CD2033E73E0DD17AF043FBD458CE7D996850A83DCED23FB122A3BFAA7F430', + Fee: '12', + SigningPubKey: + 'EDCEDEBC063D32FD4327C272ED2C46851129C47BE41FCA4222D4D94205AB1B587B', + TxnSignature: + 'CCF8287A8A8EC0CF47C67219639C2F7BC7E7FCF2648FD328A518E9B9FA05ADB9A28A6EFB02D17A776DAEE5D1E25623FFBEFC06B5BBC1F77104188602F865A70F', + Account: 'rHLLL3Z7uBLK49yZcMaj8FAP7DU12Nw5A5', + PrincipalRequested: '100000', +} + describe('Signing data', function () { it('can create single signing blobs', function () { const actual = encodeForSigning(tx_json) @@ -73,7 +90,9 @@ describe('Signing data', function () { const customPaymentDefinitions = JSON.parse( JSON.stringify(normalDefinitions), ) - customPaymentDefinitions.TRANSACTION_TYPES.Payment = 31 + + // custom number would need to updated in case it has been used by an existing transaction type + customPaymentDefinitions.TRANSACTION_TYPES.Payment = 200 const newDefs = new XrplDefinitions(customPaymentDefinitions) const actual = encodeForSigning(tx_json, newDefs) @@ -82,7 +101,7 @@ describe('Signing data', function () { '53545800', // signingPrefix // TransactionType '12', - '001F', + '00C8', // Flags '22', '80000000', @@ -122,8 +141,8 @@ describe('Signing data', function () { TransactionType: 'NotAPayment', } - expect(() => encodeForSigning(invalidTransactionType)).toThrowError( - /NotAPayment/u, + expect(() => encodeForSigning(invalidTransactionType)).toThrow( + new TypeError('Unable to interpret "TransactionType: NotAPayment".'), ) }) @@ -172,11 +191,57 @@ describe('Signing data', function () { ) }) + it('can create multi signing blobs with non-empty SigningPubKey', function () { + const signingAccount = 'rJ73aumLPTQQmy5wnGhvrogqf5DDhjuzc9' + const actual = encodeForMultisigning(multiSigningTxJson, signingAccount) + expect(actual).toBe( + [ + '534D5400', // signingPrefix + // TransactionType + '12', + '0050', // LoanSet = 80 + // Flags + '22', + '00000000', + // Sequence + '24', + '00000E16', // 3606 + // LastLedgerSequence + '201B', + '00000E32', // 3634 + // LoanBrokerID + '5025', + 'B91CD2033E73E0DD17AF043FBD458CE7D996850A83DCED23FB122A3BFAA7F430', + // Fee + '68', + // native amount + '400000000000000C', + // SigningPubKey + '73', + // VLLength + '21', // 33 bytes + 'EDCEDEBC063D32FD4327C272ED2C46851129C47BE41FCA4222D4D94205AB1B587B', + // Account + '81', + // VLLength + '14', + 'B32A0D322D38281C81D4F49DCCDC260A81879B57', + // PrincipalRequested + '9E', + '0DE0B6B3A7640000FFFFFFF3', + // signingAccount suffix + 'BF9B4C3302798C111649BFA38DB60525C6E1021C', + ].join(''), + ) + }) + it('can create multi signing blobs with custom definitions', function () { const customPaymentDefinitions = JSON.parse( JSON.stringify(normalDefinitions), ) - customPaymentDefinitions.TRANSACTION_TYPES.Payment = 31 + + // custom number would need to updated in case it has been used by an existing transaction type + customPaymentDefinitions.TRANSACTION_TYPES.Payment = 200 const newDefs = new XrplDefinitions(customPaymentDefinitions) const signingAccount = 'rJZdUusLDtY9NEsGea7ijqhVrXv98rYBYN' @@ -187,7 +252,7 @@ describe('Signing data', function () { '534D5400', // signingPrefix // TransactionType '12', - '001F', + '00C8', // Flags '22', '80000000', @@ -240,4 +305,35 @@ describe('Signing data', function () { ].join(''), ) }) + + it('can create batch blob', function () { + const flags = 1 + const txIDs = [ + 'ABE4871E9083DF66727045D49DEEDD3A6F166EB7F8D1E92FE868F02E76B2C5CA', + '795AAC88B59E95C3497609749127E69F12958BC016C600C770AEEB1474C840B4', + ] + const json = { flags, txIDs } + const actual = encodeForSigningBatch(json) + expect(actual).toBe( + [ + // hash prefix + '42434800', + // flags + '00000001', + // txIds length + '00000002', + // txIds + 'ABE4871E9083DF66727045D49DEEDD3A6F166EB7F8D1E92FE868F02E76B2C5CA', + '795AAC88B59E95C3497609749127E69F12958BC016C600C770AEEB1474C840B4', + ].join(''), + ) + }) + + it('encodeForSigningBatch fails on non-object', function () { + const flags = 1 + // @ts-expect-error - testing invalid input for JS users + expect(() => encodeForSigningBatch(flags)).toThrow( + new Error('Need an object to encode a Batch transaction'), + ) + }) }) diff --git a/packages/ripple-binary-codec/test/st-number.test.ts b/packages/ripple-binary-codec/test/st-number.test.ts new file mode 100644 index 0000000000..e4b6519c3c --- /dev/null +++ b/packages/ripple-binary-codec/test/st-number.test.ts @@ -0,0 +1,217 @@ +import { BinaryParser } from '../src/binary' +import { coreTypes } from '../src/types' + +const { Number: STNumber } = coreTypes + +describe('STNumber', () => { + it('+ve normal value', () => { + const value = '99' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual(value) + }) + + // scientific notation triggers in when abs(value) >= 10^11 + it('+ve very large value', () => { + const value = '100000000000' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('1e11') + }) + + // scientific notation triggers in when abs(value) >= 10^11 + it('+ve large value', () => { + const value = '10000000000' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('10000000000') + }) + + it('-ve normal value', () => { + const value = '-123' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual(value) + }) + + // scientific notation triggers in when abs(value) >= 10^11 + it('-ve very large value', () => { + const value = '-100000000000' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('-1e11') + }) + + // scientific notation triggers in when abs(value) >= 10^11 + it('-ve large value', () => { + const value = '-10000000000' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('-10000000000') + }) + + // scientific notation triggers in when abs(value) < 10^-10 + it('+ve very small value', () => { + const value = '0.00000000001' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('1e-11') + }) + + // scientific notation triggers in when abs(value) < 10^-10 + it('+ve small value', () => { + const value = '0.0001' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('0.0001') + }) + + it('roundtrip zero', () => { + const value = '0' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('0') + }) + + it('roundtrip decimal', () => { + const value = '123.456' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('123.456') + }) + + it('roundtrip scientific notation positive', () => { + const value = '1.23e5' + const num = STNumber.from(value) + // scientific notation triggers in when abs(value) >= 10^11 + expect(num.toJSON()).toEqual('123000') + }) + + it('roundtrip scientific notation negative', () => { + const value = '-4.56e-7' + const num = STNumber.from(value) + // scientific notation triggers in when abs(value) < 10^-10 + expect(num.toJSON()).toEqual('-0.000000456') + }) + + it('-ve medium value', () => { + const value = '-987654321' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('-987654321') + }) + + it('+ve medium value', () => { + const value = '987654321' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('987654321') + }) + + it('roundtrip via parser', () => { + const value = '123456.789' + const num = STNumber.from(value) + const parser = new BinaryParser(num.toHex()) + const parsedNum = STNumber.fromParser(parser) + expect(parsedNum.toJSON()).toEqual(num.toJSON()) + }) + + it('zero via parser', () => { + const value = '0' + const num = STNumber.from(value) + const parser = new BinaryParser(num.toHex()) + const parsedNum = STNumber.fromParser(parser) + expect(parsedNum.toJSON()).toEqual('0') + }) + + it('normalization with trailing zeros', () => { + const value = '123.45000' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('123.45') + }) + + it('normalization with leading zeros', () => { + const value = '0000123.45' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('123.45') + }) + + it('integer with exponent', () => { + const value = '123e2' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('12300') + }) + + it('negative decimal with exponent', () => { + const value = '-1.2e2' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('-120') + }) + + it('decimal without exponent', () => { + const value = '0.5' + const num = STNumber.from(value) + const parser = new BinaryParser(num.toHex()) + const parsedNum = STNumber.fromParser(parser) + expect(parsedNum.toJSON()).toEqual('0.5') + }) + + it('rounds up mantissa', () => { + const value = '9223372036854775895' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('9223372036854775900') + }) + + it('rounds down mantissa', () => { + const value = '9323372036854775804' + const num = STNumber.from(value) + expect(num.toJSON()).toEqual('9323372036854775800') + }) + + it('small value with trailing zeros', () => { + const value = '0.002500' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('0.0025') + }) + + it('large value with trailing zeros', () => { + const value = '9900000000000000000000' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('99e20') + }) + + it('small value with leading zeros', () => { + const value = '0.0000000000000000000099' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('99e-22') + }) + + it('mantissa > MAX_MANTISSA', () => { + const value = '9999999999999999999999' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('1e22') + }) + + it('mantissa > MAX_INT64', () => { + const value = '92233720368547758079' + const sn = STNumber.from(value) + expect(sn.toJSON()).toEqual('922337203685477581e2') + }) + + it('throws on exponent overflow (value too large)', () => { + // 1e40000 has exponent 40000, after normalization exponent = 40000 - 18 = 39982 + // which exceeds MAX_EXPONENT (32768) + expect(() => { + STNumber.from('1e40000') + }).toThrow(new Error('Exponent overflow: value too large to represent')) + }) + + it('underflow returns zero (value too small)', () => { + // 1e-40000 has exponent -40000, which is less than MIN_EXPONENT (-32768) + expect(() => { + STNumber.from('1e-40000') + }).toThrow(new Error('Underflow: value too small to represent')) + }) + + it('throws with invalid input (non-number string)', () => { + expect(() => { + STNumber.from('abc123') + }).toThrow(new Error('Unable to parse number from string: abc123')) + }) + + it('throws with invalid input (object)', () => { + expect(() => { + STNumber.from({ foo: 'bar' }) + }).toThrow( + new Error('STNumber.from: Only string or STNumber instance is supported'), + ) + }) +}) diff --git a/packages/ripple-binary-codec/test/tx-encode-decode.test.ts b/packages/ripple-binary-codec/test/tx-encode-decode.test.ts index 3047402fad..884dcf7425 100644 --- a/packages/ripple-binary-codec/test/tx-encode-decode.test.ts +++ b/packages/ripple-binary-codec/test/tx-encode-decode.test.ts @@ -116,4 +116,13 @@ describe('encoding and decoding tx_json', function () { encode(my_tx) }).toThrow() }) + + it('throws when there is an unknown field', function () { + const my_tx = Object.assign({}, tx_json, { + BadField: 1, + }) + expect(() => { + encode(my_tx) + }).toThrow() + }) }) diff --git a/packages/ripple-binary-codec/test/uint.test.ts b/packages/ripple-binary-codec/test/uint.test.ts index debfad4a87..c737344da8 100644 --- a/packages/ripple-binary-codec/test/uint.test.ts +++ b/packages/ripple-binary-codec/test/uint.test.ts @@ -1,5 +1,5 @@ -import { UInt8, UInt64 } from '../src/types' -import { encode } from '../src' +import { UInt8, UInt16, UInt32, UInt64 } from '../src/types' +import { encode, decode } from '../src' const binary = '11007222000300003700000000000000003800000000000000006280000000000000000000000000000000000000005553440000000000000000000000000000000000000000000000000166D5438D7EA4C680000000000000000000000000005553440000000000AE123A8556F3CF91154711376AFB0F894F832B3D67D5438D7EA4C680000000000000000000000000005553440000000000F51DFC2A09D62CBBA1DFBDD4691DAC96AD98B90F' @@ -96,6 +96,40 @@ const jsonEntry2 = { index: '0000041EFD027808D3F78C8352F97E324CB816318E00B977C74ECDDC7CD975B2', } +const mptIssuanceEntryBinary = + '11007E220000006224000002DF25000002E434000000000000000030187FFFFFFFFFFFFFFF30190000000000000064552E78C1FFBDDAEE077253CEB12CFEA83689AA0899F94762190A357208DADC76FE701EC1EC7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D8414A4D893CFBC4DC6AE877EB585F90A3B47528B958D051003' + +const mptIssuanceEntryJson = { + AssetScale: 3, + Flags: 98, + Issuer: 'rGpdGXDV2RFPeLEfWS9RFo5Nh9cpVDToZa', + LedgerEntryType: 'MPTokenIssuance', + MPTokenMetadata: + '7B226E616D65223A2255532054726561737572792042696C6C20546F6B656E222C2273796D626F6C223A225553544254222C22646563696D616C73223A322C22746F74616C537570706C79223A313030303030302C22697373756572223A225553205472656173757279222C22697373756544617465223A22323032342D30332D3235222C226D6174757269747944617465223A22323032352D30332D3235222C226661636556616C7565223A2231303030222C22696E74657265737452617465223A22322E35222C22696E7465726573744672657175656E6379223A22517561727465726C79222C22636F6C6C61746572616C223A22555320476F7665726E6D656E74222C226A7572697364696374696F6E223A22556E6974656420537461746573222C22726567756C61746F7279436F6D706C69616E6365223A2253454320526567756C6174696F6E73222C22736563757269747954797065223A2254726561737572792042696C6C222C2265787465726E616C5F75726C223A2268747470733A2F2F6578616D706C652E636F6D2F742D62696C6C2D746F6B656E2D6D657461646174612E6A736F6E227D', + MaximumAmount: '9223372036854775807', + OutstandingAmount: '100', + OwnerNode: '0000000000000000', + PreviousTxnID: + '2E78C1FFBDDAEE077253CEB12CFEA83689AA0899F94762190A357208DADC76FE', + PreviousTxnLgrSeq: 740, + Sequence: 735, +} + +const mptokenEntryJson = { + Account: 'raDQsd1s8rqGjL476g59a9vVNi1rSwrC44', + Flags: 0, + LedgerEntryType: 'MPToken', + MPTAmount: '100', + MPTokenIssuanceID: '000002DF71CAE59C9B7E56587FFF74D4EA5830D9BE3CE0CC', + OwnerNode: '0000000000000000', + PreviousTxnID: + '222EF3C7E82D8A44984A66E2B8E357CB536EC2547359CCF70E56E14BC4C284C8', + PreviousTxnLgrSeq: 741, +} + +const mptokenEntryBinary = + '11007F220000000025000002E5340000000000000000301A000000000000006455222EF3C7E82D8A44984A66E2B8E357CB536EC2547359CCF70E56E14BC4C284C881143930DB9A74C26D96CB58ADFFD7E8BB78BCFE62340115000002DF71CAE59C9B7E56587FFF74D4EA5830D9BE3CE0CC' + it('compareToTests[0]', () => { expect(UInt8.from(124).compareTo(UInt64.from(124))).toBe(0) }) @@ -144,3 +178,126 @@ it('valueOf tests', () => { expect(val.valueOf() | 0x2).toBe(3) }) + +it('UInt64 is parsed as base 10 for MPT amounts', () => { + expect(encode(mptIssuanceEntryJson)).toEqual(mptIssuanceEntryBinary) + expect(decode(mptIssuanceEntryBinary)).toEqual(mptIssuanceEntryJson) + + expect(encode(mptokenEntryJson)).toEqual(mptokenEntryBinary) + expect(decode(mptokenEntryBinary)).toEqual(mptokenEntryJson) + + const decodedIssuance = decode(mptIssuanceEntryBinary) + expect(typeof decodedIssuance.MaximumAmount).toBe('string') + expect(decodedIssuance.MaximumAmount).toBe('9223372036854775807') + expect(decodedIssuance.OutstandingAmount).toBe('100') + + const decodedToken = decode(mptokenEntryBinary) + expect(typeof decodedToken.MPTAmount).toBe('string') + expect(decodedToken.MPTAmount).toBe('100') +}) + +describe('UInt decimal validation', () => { + describe('UInt8', () => { + it('should throw error when passed a decimal number', () => { + expect(() => UInt8.from(1.5)).toThrow( + new Error('Cannot construct UInt8 from given value'), + ) + }) + + it('should throw error when passed a negative decimal', () => { + expect(() => UInt8.from(-1.5)).toThrow( + new Error('Cannot construct UInt8 from given value'), + ) + }) + + it('should throw error when passed a small decimal', () => { + expect(() => UInt8.from(0.1)).toThrow( + new Error('Cannot construct UInt8 from given value'), + ) + }) + + it('should accept valid integer values', () => { + expect(() => UInt8.from(0)).not.toThrow() + expect(() => UInt8.from(1)).not.toThrow() + expect(() => UInt8.from(255)).not.toThrow() + }) + }) + + describe('UInt16', () => { + it('should throw error when passed a decimal number', () => { + expect(() => UInt16.from(100.5)).toThrow( + new Error('Cannot construct UInt16 from given value'), + ) + }) + + it('should throw error when passed a negative decimal', () => { + expect(() => UInt16.from(-100.5)).toThrow( + new Error('Cannot construct UInt16 from given value'), + ) + }) + + it('should throw error when passed a small decimal', () => { + expect(() => UInt16.from(0.001)).toThrow( + new Error('Cannot construct UInt16 from given value'), + ) + }) + + it('should accept valid integer values', () => { + expect(() => UInt16.from(0)).not.toThrow() + expect(() => UInt16.from(1000)).not.toThrow() + expect(() => UInt16.from(65535)).not.toThrow() + }) + }) + + describe('UInt32', () => { + it('should throw error when passed a decimal number', () => { + expect(() => UInt32.from(1000.5)).toThrow( + new Error('Cannot construct UInt32 from given value'), + ) + }) + + it('should throw error when passed a negative decimal', () => { + expect(() => UInt32.from(-1000.5)).toThrow( + new Error('Cannot construct UInt32 from given value'), + ) + }) + + it('should throw error when passed a small decimal', () => { + expect(() => UInt32.from(0.0001)).toThrow( + new Error('Cannot construct UInt32 from given value'), + ) + }) + + it('should accept valid integer values', () => { + expect(() => UInt32.from(0)).not.toThrow() + expect(() => UInt32.from(100000)).not.toThrow() + expect(() => UInt32.from(4294967295)).not.toThrow() + }) + }) + + describe('UInt64', () => { + it('should throw error when passed a decimal number', () => { + expect(() => UInt64.from(10000.5)).toThrow( + new Error('Cannot construct UInt64 from given value'), + ) + }) + + it('should throw error when passed a negative decimal', () => { + expect(() => UInt64.from(-10000.5)).toThrow( + new Error('Cannot construct UInt64 from given value'), + ) + }) + + it('should throw error when passed a small decimal', () => { + expect(() => UInt64.from(0.00001)).toThrow( + new Error('Cannot construct UInt64 from given value'), + ) + }) + + it('should accept valid integer values', () => { + expect(() => UInt64.from(0)).not.toThrow() + expect(() => UInt64.from(1000000)).not.toThrow() + expect(() => UInt64.from(BigInt('9223372036854775807'))).not.toThrow() + }) + }) +}) diff --git a/packages/ripple-binary-codec/test/webpack.config.js b/packages/ripple-binary-codec/test/webpack.config.js index db2ec8642d..97f0f3bbb9 100644 --- a/packages/ripple-binary-codec/test/webpack.config.js +++ b/packages/ripple-binary-codec/test/webpack.config.js @@ -1,6 +1,6 @@ 'use strict' const { merge } = require('webpack-merge') -const { webpackForTest } = require('../../../weback.test.config') +const { webpackForTest } = require('../../../webpack.test.config') const { getDefaultConfiguration } = require('../../../webpack.config') module.exports = merge( diff --git a/packages/ripple-binary-codec/tools/generateDefinitions.js b/packages/ripple-binary-codec/tools/generateDefinitions.js new file mode 100644 index 0000000000..5f970f694b --- /dev/null +++ b/packages/ripple-binary-codec/tools/generateDefinitions.js @@ -0,0 +1,413 @@ +if (process.argv.length != 3 && process.argv.length != 4) { + console.error( + 'Usage: ' + + process.argv[0] + + ' ' + + process.argv[1] + + ' path/to/rippled [path/to/pipe/to]', + ) + process.exit(1) +} + +//////////////////////////////////////////////////////////////////////// +// Get all necessary files from rippled +//////////////////////////////////////////////////////////////////////// +const path = require('path') +const fs = require('fs/promises') + +async function readFileFromGitHub(repo, filename) { + if (!repo.includes('tree')) { + repo += '/tree/HEAD' + } + let url = repo.replace('github.com', 'raw.githubusercontent.com') + url = url.replace('tree/', '') + url += '/' + filename + + if (!url.startsWith('http')) { + url = 'https://' + url + } + + try { + const response = await fetch(url) + if (!response.ok) { + throw new Error(`${response.status} ${response.statusText}`) + } + return await response.text() + } catch (e) { + console.error(`Error reading ${url}: ${e.message}`) + process.exit(1) + } +} + +async function readFile(folder, filename) { + const filePath = path.join(folder, filename) + try { + return await fs.readFile(filePath, 'utf-8') + } catch (e) { + throw new Error(`File not found: ${filePath}, ${e.message}`) + } +} + +const read = (() => { + try { + const url = new URL(process.argv[2]) + return url.hostname === 'github.com' ? readFileFromGitHub : readFile + } catch { + return readFile // Default to readFile if process.argv[2] is not a valid URL + } +})() + +async function main() { + const sfieldHeaderFile = await read( + process.argv[2], + 'include/xrpl/protocol/SField.h', + ) + const sfieldMacroFile = await read( + process.argv[2], + 'include/xrpl/protocol/detail/sfields.macro', + ) + const ledgerFormatsMacroFile = await read( + process.argv[2], + 'include/xrpl/protocol/detail/ledger_entries.macro', + ) + const terFile = await read(process.argv[2], 'include/xrpl/protocol/TER.h') + const transactionsMacroFile = await read( + process.argv[2], + 'include/xrpl/protocol/detail/transactions.macro', + ) + + const capitalizationExceptions = { + XCHAIN: 'XChain', + } + + // Translate from rippled string format to what the binary codecs expect + function translate(inp) { + try { + if (inp.match(/^UINT/m)) + if ( + inp.match(/256/m) || + inp.match(/160/m) || + inp.match(/128/m) || + inp.match(/192/m) + ) + return inp.replace('UINT', 'Hash') + else return inp.replace('UINT', 'UInt') + + const nonstandardRenames = { + OBJECT: 'STObject', + ARRAY: 'STArray', + AMM: 'AMM', + ACCOUNT: 'AccountID', + LEDGERENTRY: 'LedgerEntry', + NOTPRESENT: 'NotPresent', + PATHSET: 'PathSet', + VL: 'Blob', + DIR_NODE: 'DirectoryNode', + PAYCHAN: 'PayChannel', + } + if (nonstandardRenames[inp] != null) return nonstandardRenames[inp] + + const parts = inp.split('_') + let result = '' + for (x in parts) + if (capitalizationExceptions[parts[x]] != null) { + result += capitalizationExceptions[parts[x]] + } else + result += + parts[x].substr(0, 1).toUpperCase() + + parts[x].substr(1).toLowerCase() + return result + } catch (e) { + console.error(e, 'inp="' + inp + '"') + } + } + + let output = '' + function addLine(line) { + output += line + '\n' + } + + function sorter(a, b) { + if (a < b) return -1 + if (a > b) return 1 + return 0 + } + + addLine('{') + + // process STypes + let stypeHits = [ + ...sfieldHeaderFile.matchAll( + /^ *STYPE\(STI_([^ ]*?)[ \n]*,[ \n]*([0-9-]+)[ \n]*\)[ \n]*\\?$/gm, + ), + ] + if (stypeHits.length === 0) + stypeHits = [ + ...sfieldHeaderFile.matchAll( + /^ *STI_([^ ]*?)[ \n]*=[ \n]*([0-9-]+)[ \n]*,?$/gm, + ), + ] + const stypeMap = {} + stypeHits.forEach(([_, key, value]) => { + stypeMap[key] = value + }) + + //////////////////////////////////////////////////////////////////////// + // SField processing + //////////////////////////////////////////////////////////////////////// + addLine(' "FIELDS": [') + // The ones that are harder to parse directly from SField.cpp + addLine(` [ + "Generic", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 0, + "type": "Unknown" + } + ], + [ + "Invalid", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": -1, + "type": "Unknown" + } + ], + [ + "ObjectEndMarker", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "STObject" + } + ], + [ + "ArrayEndMarker", + { + "isSerialized": true, + "isSigningField": true, + "isVLEncoded": false, + "nth": 1, + "type": "STArray" + } + ], + [ + "taker_gets_funded", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 258, + "type": "Amount" + } + ], + [ + "taker_pays_funded", + { + "isSerialized": false, + "isSigningField": false, + "isVLEncoded": false, + "nth": 259, + "type": "Amount" + } + ],`) + + const isVLEncoded = (t) => { + if (t == 'VL' || t == 'ACCOUNT' || t == 'VECTOR256') return 'true' + return 'false' + } + + const isSerialized = (t, field) => { + if ( + t == 'LEDGERENTRY' || + t == 'TRANSACTION' || + t == 'VALIDATION' || + t == 'METADATA' + ) + return 'false' + if (field == 'hash' || field == 'index') return 'false' + return 'true' + } + + const isSigningField = (t, notSigningField) => { + if (notSigningField == 'notSigning') return 'false' + if ( + t == 'LEDGERENTRY' || + t == 'TRANSACTION' || + t == 'VALIDATION' || + t == 'METADATA' + ) + return 'false' + return 'true' + } + + // Parse SField.cpp for all the SFields and their serialization info + let sfieldHits = [ + ...sfieldMacroFile.matchAll( + /^ *[A-Z]*TYPED_SFIELD[ \n]*\([ \n]*sf([^,\n]*),[ \n]*([^, \n]+)[ \n]*,[ \n]*([0-9]+)(,.*?(notSigning))?/gm, + ), + ] + sfieldHits.push( + ...[ + ['', 'hash', 'UINT256', '257', '', 'notSigning'], + ['', 'index', 'UINT256', '258', '', 'notSigning'], + ], + ) + sfieldHits.sort((a, b) => { + const aValue = parseInt(stypeMap[a[2]]) * 2 ** 16 + parseInt(a[3]) + const bValue = parseInt(stypeMap[b[2]]) * 2 ** 16 + parseInt(b[3]) + return aValue - bValue // Ascending order + }) + for (let x = 0; x < sfieldHits.length; ++x) { + addLine(' [') + addLine(' "' + sfieldHits[x][1] + '",') + addLine(' {') + addLine( + ' "isSerialized": ' + + isSerialized(sfieldHits[x][2], sfieldHits[x][1]) + + ',', + ) + addLine( + ' "isSigningField": ' + + isSigningField(sfieldHits[x][2], sfieldHits[x][5]) + + ',', + ) + addLine(' "isVLEncoded": ' + isVLEncoded(sfieldHits[x][2]) + ',') + addLine(' "nth": ' + sfieldHits[x][3] + ',') + addLine(' "type": "' + translate(sfieldHits[x][2]) + '"') + addLine(' }') + addLine(' ]' + (x < sfieldHits.length - 1 ? ',' : '')) + } + + addLine(' ],') + + //////////////////////////////////////////////////////////////////////// + // Ledger entry type processing + //////////////////////////////////////////////////////////////////////// + addLine(' "LEDGER_ENTRY_TYPES": {') + + const unhex = (x) => { + x = ('' + x).trim() + if (x.substr(0, 2) == '0x') return '' + parseInt(x) + if (x.substr(0, 1) == "'" && x.length == 3) return x.charCodeAt(1) + return x + } + hits = [ + ...ledgerFormatsMacroFile.matchAll( + /^ *LEDGER_ENTRY[A-Z_]*\(lt[A-Z_]+[ \n]*,[ \n]*([x0-9a-f]+)[ \n]*,[ \n]*([^,]+),[ \n]*([^,]+), \({$/gm, + ), + ] + hits.push(['', '-1', 'Invalid']) + hits.sort((a, b) => sorter(a[2], b[2])) + for (let x = 0; x < hits.length; ++x) + addLine( + ' "' + + hits[x][2] + + '": ' + + unhex(hits[x][1]) + + (x < hits.length - 1 ? ',' : ''), + ) + addLine(' },') + + //////////////////////////////////////////////////////////////////////// + // TER code processing + //////////////////////////////////////////////////////////////////////// + addLine(' "TRANSACTION_RESULTS": {') + const cleanedTerFile = ('' + terFile).replace('[[maybe_unused]]', '') + + let terHits = [ + ...cleanedTerFile.matchAll( + /^ *((tel|tem|tef|ter|tes|tec)[A-Z_]+)([ \n]*=[ \n]*([0-9-]+))?[ \n]*,?[ \n]*(\/\/[^\n]*)?$/gm, + ), + ] + let upto = -1 + const terCodes = [] + for (let x = 0; x < terHits.length; ++x) { + if (terHits[x][4] !== undefined) upto = parseInt(terHits[x][4]) + terCodes.push([terHits[x][1], upto]) + upto++ + } + + terCodes.sort((a, b) => sorter(a[0], b[0])) + let currentType = '' + for (let x = 0; x < terCodes.length; ++x) { + if (currentType === '') { + currentType = terCodes[x][0].substr(0, 3) + } else if (currentType != terCodes[x][0].substr(0, 3)) { + addLine('') + currentType = terCodes[x][0].substr(0, 3) + } + addLine( + ' "' + + terCodes[x][0] + + '": ' + + terCodes[x][1] + + (x < terCodes.length - 1 ? ',' : ''), + ) + } + + addLine(' },') + + //////////////////////////////////////////////////////////////////////// + // Transaction type processing + //////////////////////////////////////////////////////////////////////// + addLine(' "TRANSACTION_TYPES": {') + + let txHits = [ + ...transactionsMacroFile.matchAll( + /^ *TRANSACTION\(tt[A-Z_]+[ \n]*,[ \n]*([0-9]+)[ \n]*,[ \n]*([A-Za-z]+).*$/gm, + ), + ] + txHits.push(['', '-1', 'Invalid']) + txHits.sort((a, b) => sorter(a[2], b[2])) + for (let x = 0; x < txHits.length; ++x) { + addLine( + ' "' + + txHits[x][2] + + '": ' + + txHits[x][1] + + (x < txHits.length - 1 ? ',' : ''), + ) + } + + addLine(' },') + + //////////////////////////////////////////////////////////////////////// + // Serialized type processing + //////////////////////////////////////////////////////////////////////// + addLine(' "TYPES": {') + + stypeHits.push(['', 'DONE', -1]) + stypeHits.sort((a, b) => sorter(translate(a[1]), translate(b[1]))) + for (let x = 0; x < stypeHits.length; ++x) { + addLine( + ' "' + + translate(stypeHits[x][1]) + + '": ' + + stypeHits[x][2] + + (x < stypeHits.length - 1 ? ',' : ''), + ) + } + + addLine(' }') + addLine('}') + + const outputFile = + process.argv.length == 4 + ? process.argv[3] + : path.join(__dirname, '../src/enums/definitions.json') + try { + await fs.writeFile(outputFile, output, 'utf8') + console.log('File written successfully to', outputFile) + } catch (err) { + console.error('Error writing to file:', err) + } +} + +main() diff --git a/packages/ripple-keypairs/.eslintignore b/packages/ripple-keypairs/.eslintignore deleted file mode 100644 index 0fc0705592..0000000000 --- a/packages/ripple-keypairs/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -# Don't ever lint node_modules -node_modules - -# Don't lint build output -dist - -# don't lint nyc coverage output -coverage -.nyc_output - -# Don't lint NYC configuration -nyc.config.js diff --git a/packages/ripple-keypairs/.eslintrc b/packages/ripple-keypairs/.eslintrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/ripple-keypairs/.eslintrc.js b/packages/ripple-keypairs/.eslintrc.js deleted file mode 100644 index 800da9680e..0000000000 --- a/packages/ripple-keypairs/.eslintrc.js +++ /dev/null @@ -1,65 +0,0 @@ -module.exports = { - root: true, - - parser: '@typescript-eslint/parser', // Make ESLint compatible with TypeScript - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: ['./tsconfig.json', './tsconfig.eslint.json'], - - sourceType: 'module', // Allow the use of imports / ES modules - - ecmaFeatures: { - impliedStrict: true, // Enable global strict mode - }, - }, - - // Specify global variables that are predefined - env: { - browser: true, // Enable browser global variables - node: true, // Enable node global variables & Node.js scoping - es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - jest: true, // Add Jest testing global variables - }, - - plugins: [], - extends: ['@xrplf/eslint-config/base'], - - rules: { - // TODO: put in @xrplf/eslint-config/base ? - '@typescript-eslint/consistent-type-imports': 'error', - - // ** TODO ** - // all of the below are turned off for now during the migration to a - // monorepo. They need to actually be addressed! - // ** - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-member-access': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - '@typescript-eslint/ban-types': 'off', - '@typescript-eslint/restrict-plus-operands': 'off', - '@typescript-eslint/explicit-function-return-type': 'off', - '@typescript-eslint/no-unsafe-return': 'off', - '@typescript-eslint/explicit-module-boundary-types': 'off', - '@typescript-eslint/explicit-member-accessibility': 'off', - '@typescript-eslint/promise-function-async': 'off', - '@typescript-eslint/restrict-template-expressions': 'off', - '@typescript-eslint/prefer-nullish-coalescing': 'off', - '@typescript-eslint/naming-convention': 'off', - '@typescript-eslint/no-explicit-any': 'off', - 'jsdoc/require-jsdoc': 'off', - 'jsdoc/require-description': 'off', - 'jsdoc/require-returns': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'jsdoc/check-tag-names': 'off', - 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 - 'jsdoc/no-types': 'off', - 'tsdoc/syntax': 'off', - 'import/order': 'off', - 'eslint-comments/require-description': 'off', - 'no-shadow': 'off', - 'multiline-comment-style': 'off', - '@typescript-eslint/no-require-imports': 'off', - }, -} diff --git a/packages/ripple-keypairs/README.md b/packages/ripple-keypairs/README.md index a1f05ded62..9a73f93b8c 100644 --- a/packages/ripple-keypairs/README.md +++ b/packages/ripple-keypairs/README.md @@ -1,7 +1,7 @@ # ripple-keypairs [![NPM](https://img.shields.io/npm/v/ripple-keypairs.svg)](https://npmjs.org/package/ripple-keypairs) [![Build Status](https://img.shields.io/travis/ripple/ripple-keypairs/master.svg)](https://travis-ci.org/ripple/ripple-keypairs) ![Codecov](https://img.shields.io/codecov/c/github/ripple/ripple-keypairs) An implementation of XRP Ledger keypairs & wallet generation using -[elliptic](https://github.com/indutny/elliptic) which supports rfc6979 and +[noble](https://paulmillr.com/noble) which supports rfc6979 and eddsa deterministic signatures. [![NPM](https://nodei.co/npm/ripple-keypairs.png)](https://www.npmjs.org/package/ripple-keypairs) diff --git a/packages/ripple-keypairs/eslint.config.js b/packages/ripple-keypairs/eslint.config.js new file mode 100644 index 0000000000..ed3dded4f0 --- /dev/null +++ b/packages/ripple-keypairs/eslint.config.js @@ -0,0 +1,72 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: ['**/node_modules/', '**/dist/', 'coverage/', '**/*.js'], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + + parser: tseslint.parser, // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.eslint.json'], + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + globals: { + ...globals.browser, + ...globals.jest, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + // TODO: put in @xrplf/eslint-config/base ? + '@typescript-eslint/consistent-type-imports': 'error', + + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-member-access': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/no-magic-numbers': 'off', + '@typescript-eslint/no-empty-object-type': 'off', + '@typescript-eslint/no-unsafe-function-type': 'off', + '@typescript-eslint/no-wrapper-object-types': 'off', + '@typescript-eslint/restrict-plus-operands': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/no-unsafe-return': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/promise-function-async': 'off', + '@typescript-eslint/restrict-template-expressions': 'off', + '@typescript-eslint/prefer-nullish-coalescing': 'off', + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/no-explicit-any': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-description': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'jsdoc/check-tag-names': 'off', + 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 + 'jsdoc/no-types': 'off', + 'tsdoc/syntax': 'off', + 'import/order': 'off', + '@eslint-community/eslint-comments/require-description': 'off', + 'no-shadow': 'off', + 'multiline-comment-style': 'off', + '@typescript-eslint/no-require-imports': 'off', + }, + }, +] diff --git a/packages/ripple-keypairs/package.json b/packages/ripple-keypairs/package.json index b5899b1f50..2b95c63164 100644 --- a/packages/ripple-keypairs/package.json +++ b/packages/ripple-keypairs/package.json @@ -7,7 +7,7 @@ "test": "jest --verbose false --silent=false ./test/*.test.ts", "test:browser": "npm run build && karma start ./karma.config.js", "clean": "rm -rf ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", - "lint": "eslint . --ext .ts", + "lint": "eslint . --max-warnings 0", "prepublish": "npm run lint && npm test" }, "files": [ @@ -20,7 +20,7 @@ }, "dependencies": { "@noble/curves": "^1.0.0", - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "ripple-address-codec": "^5.0.0" }, "keywords": [ diff --git a/packages/ripple-keypairs/src/signing-schemes/secp256k1/utils.ts b/packages/ripple-keypairs/src/signing-schemes/secp256k1/utils.ts index b1870fb3e2..a9d1cca330 100644 --- a/packages/ripple-keypairs/src/signing-schemes/secp256k1/utils.ts +++ b/packages/ripple-keypairs/src/signing-schemes/secp256k1/utils.ts @@ -40,7 +40,6 @@ function deriveScalar(bytes: Uint8Array, discrim?: number): bigint { * @param [opts.validator=false] - Generate root key-pair, * as used by validators. * @returns {bigint} 256 bit scalar value. - * */ export function derivePrivateKey( seed: Uint8Array, diff --git a/packages/ripple-keypairs/test/webpack.config.js b/packages/ripple-keypairs/test/webpack.config.js index db2ec8642d..97f0f3bbb9 100644 --- a/packages/ripple-keypairs/test/webpack.config.js +++ b/packages/ripple-keypairs/test/webpack.config.js @@ -1,6 +1,6 @@ 'use strict' const { merge } = require('webpack-merge') -const { webpackForTest } = require('../../../weback.test.config') +const { webpackForTest } = require('../../../webpack.test.config') const { getDefaultConfiguration } = require('../../../webpack.config') module.exports = merge( diff --git a/packages/secret-numbers/.eslintignore b/packages/secret-numbers/.eslintignore deleted file mode 100644 index 0fc0705592..0000000000 --- a/packages/secret-numbers/.eslintignore +++ /dev/null @@ -1,12 +0,0 @@ -# Don't ever lint node_modules -node_modules - -# Don't lint build output -dist - -# don't lint nyc coverage output -coverage -.nyc_output - -# Don't lint NYC configuration -nyc.config.js diff --git a/packages/secret-numbers/.eslintrc b/packages/secret-numbers/.eslintrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/secret-numbers/.eslintrc.js b/packages/secret-numbers/.eslintrc.js deleted file mode 100644 index c8a3adcfa4..0000000000 --- a/packages/secret-numbers/.eslintrc.js +++ /dev/null @@ -1,47 +0,0 @@ -module.exports = { - root: true, - - parser: "@typescript-eslint/parser", // Make ESLint compatible with TypeScript - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: ["./tsconfig.eslint.json"], - - sourceType: "module", // Allow the use of imports / ES modules - - ecmaFeatures: { - impliedStrict: true, // Enable global strict mode - }, - }, - - // Specify global variables that are predefined - env: { - browser: true, // Enable browser global variables - node: true, // Enable node global variables & Node.js scoping - es2020: true, // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - }, - - plugins: [], - extends: ["@xrplf/eslint-config/base"], - - rules: { - // This creates a lot of false positives. We should turn this off in our - // general config. - "jsdoc/require-description-complete-sentence": "off", - - // ** TODO ** - // all of the below are turned off for now during the migration to a - // monorepo. They need to actually be addressed! - // ** - "@typescript-eslint/no-magic-numbers": "off", - "jsdoc/require-returns": "off", - "jsdoc/check-param-names": "off", - "jsdoc/require-throws": "off", - "jsdoc/require-jsdoc": "off", - "jsdoc/require-param": "off", - "jsdoc/check-examples": "off", // Not implemented in eslint 8 - "tsdoc/syntax": "off", - "@typescript-eslint/no-require-imports": "off", - "@typescript-eslint/explicit-member-accessibility": "off", - }, -}; diff --git a/packages/secret-numbers/HISTORY.md b/packages/secret-numbers/HISTORY.md index 15311a3edf..4e15f49a13 100644 --- a/packages/secret-numbers/HISTORY.md +++ b/packages/secret-numbers/HISTORY.md @@ -4,6 +4,11 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr ## Unreleased +## 2.0.0 (2025-07-29) + +### BREAKING CHANGES: +* Renamed `build/xrplf-secret-numbers-latest.min.js` to `build/xrplf-secret-numbers-latest-min.js`. + ## 1.0.0 (2024-02-01) ### BREAKING CHANGES: diff --git a/packages/secret-numbers/eslint.config.js b/packages/secret-numbers/eslint.config.js new file mode 100644 index 0000000000..8b297324f0 --- /dev/null +++ b/packages/secret-numbers/eslint.config.js @@ -0,0 +1,59 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: [ + '**/node_modules/', + '**/dist/', + '**/build/', + 'coverage/', + '**/*.js', + 'samples/', + ], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + + parser: tseslint.parser, // Make ESLint compatible with TypeScript + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: ['./tsconfig.eslint.json'], + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + globals: { + ...globals.browser, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + // This creates a lot of false positives. We should turn this off in our + // general config. + 'jsdoc/require-description-complete-sentence': 'off', + + // ** TODO ** + // all of the below are turned off for now during the migration to a + // monorepo. They need to actually be addressed! + // ** + '@typescript-eslint/no-magic-numbers': 'off', + 'jsdoc/require-returns': 'off', + 'jsdoc/check-param-names': 'off', + 'jsdoc/require-throws': 'off', + 'jsdoc/require-jsdoc': 'off', + 'jsdoc/require-param': 'off', + 'jsdoc/check-examples': 'off', // Not implemented in eslint 8 + 'tsdoc/syntax': 'off', + '@typescript-eslint/no-require-imports': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + }, + }, +] diff --git a/packages/secret-numbers/package.json b/packages/secret-numbers/package.json index 4eb6c0cfd6..ff06ec1a03 100644 --- a/packages/secret-numbers/package.json +++ b/packages/secret-numbers/package.json @@ -1,6 +1,6 @@ { "name": "@xrplf/secret-numbers", - "version": "1.0.0", + "version": "2.0.0", "description": "Generate XRPL Accounts with a number-based secret: 8 chunks of 6 digits", "main": "dist/index.js", "unpkg": "build/xrplf-secret-numbers-latest-min.js", @@ -8,14 +8,14 @@ "types": "dist/index.d.ts", "scripts": { "prepublish": "npm run clean && npm run lint && npm run test && npm run test:browser && npm run build", - "clean": "rm -rf ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", + "clean": "rm -rf ./build ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", "test": "jest --verbose", "test:browser": "npm run build && npm run build:browserTests && karma start ./karma.config.js", "build": "run-s build:lib build:web", "build:lib": "tsc --build tsconfig.build.json", "build:web": "webpack", "build:browserTests": "webpack --config ./test/webpack.config.js", - "lint": "eslint . --ext .ts --ext .test.ts --fix", + "lint": "eslint . --max-warnings 0", "analyze": "webpack --analyze" }, "files": [ @@ -29,7 +29,7 @@ "test": "test" }, "dependencies": { - "@xrplf/isomorphic": "^1.0.0", + "@xrplf/isomorphic": "^1.0.1", "ripple-keypairs": "^2.0.0" }, "prettier": "@xrplf/prettier-config", diff --git a/packages/secret-numbers/test/webpack.config.js b/packages/secret-numbers/test/webpack.config.js index a99403f1a6..df0a38bb82 100644 --- a/packages/secret-numbers/test/webpack.config.js +++ b/packages/secret-numbers/test/webpack.config.js @@ -1,6 +1,6 @@ "use strict"; const { merge } = require("webpack-merge"); -const { webpackForTest } = require("../../../weback.test.config"); +const { webpackForTest } = require("../../../webpack.test.config"); const baseConfig = require("../webpack.base.config"); module.exports = merge( diff --git a/packages/xrpl/.eslintignore b/packages/xrpl/.eslintignore deleted file mode 100644 index b24141f320..0000000000 --- a/packages/xrpl/.eslintignore +++ /dev/null @@ -1,6 +0,0 @@ -dist -node_modules -.github -.vscode -karma.config.js -karma-setup.js diff --git a/packages/xrpl/.eslintrc b/packages/xrpl/.eslintrc new file mode 100644 index 0000000000..e69de29bb2 diff --git a/packages/xrpl/.eslintrc.js b/packages/xrpl/.eslintrc.js deleted file mode 100644 index 2321616dfa..0000000000 --- a/packages/xrpl/.eslintrc.js +++ /dev/null @@ -1,162 +0,0 @@ -module.exports = { - root: true, - - // Make ESLint compatible with TypeScript - parser: '@typescript-eslint/parser', - parserOptions: { - // Enable linting rules with type information from our tsconfig - tsconfigRootDir: __dirname, - project: [ - './tsconfig.eslint.json', - '../ripple-binary-codec/tsconfig.eslint.json', - '../ripple-address-codec/tsconfig.eslint.json', - '../ripple-keypairs/tsconfig.eslint.json', - ], - - // Allow the use of imports / ES modules - sourceType: 'module', - - ecmaFeatures: { - // Enable global strict mode - impliedStrict: true, - }, - }, - - // Specify global variables that are predefined - env: { - // Enable node global variables & Node.js scoping - node: true, - // Add all ECMAScript 2020 globals and automatically set the ecmaVersion parser option to ES2020 - es2020: true, - jest: true, - }, - - plugins: [], - extends: ['@xrplf/eslint-config/base'], - rules: { - 'multiline-comment-style': 'off', - // Disabled until https://github.com/import-js/eslint-plugin-import/pull/2305 is resolved to - // accomodate this change https://github.com/XRPLF/xrpl.js/pull/2133 - 'import/no-unused-modules': 'off', - 'eslint-comments/no-unused-disable': 'off', - // Certain rippled APIs require snake_case naming - '@typescript-eslint/naming-convention': [ - 'error', - { - selector: 'interface', - format: ['PascalCase', 'snake_case'], - }, - ], - 'max-lines-per-function': [ - 'warn', - { max: 40, skipBlankLines: true, skipComments: true }, - ], - 'max-statements': ['warn', 25], - // exception for lodash - 'id-length': ['error', { exceptions: ['_'] }], - - // no-shadow has false-positives for enum, @typescript-eslint version fixes that - 'no-shadow': 'off', - '@typescript-eslint/no-shadow': ['error'], - 'jsdoc/check-examples': 'off', - // We want to use certain fields like "@interface" to make join types treated as interfaces. - 'jsdoc/check-tag-names': 'off', - 'jsdoc/require-hyphen-before-param-description': 'off', - - 'tsdoc/syntax': 'off', - 'jsdoc/require-description-complete-sentence': 'off', - 'import/prefer-default-export': 'off', - }, - overrides: [ - { - files: ['.eslintrc.js'], - rules: { - 'import/no-unused-modules': 'off', - '@typescript-eslint/no-magic-numbers': 'off', - }, - }, - { - files: ['snippets/src/*.ts'], - rules: { - 'import/no-unused-modules': 'off', - // Each file has a particular flow. - 'max-lines-per-function': 'off', - 'max-statements': 'off', - // Snippets have logs on console to better understand the working. - 'no-console': 'off', - }, - }, - { - files: ['test/**/*.ts'], - rules: { - /* - * Because this project is managed by lerna, dev dependencies are - * hoisted and do not appear in the package.json. - */ - 'import/no-extraneous-dependencies': 'off', - 'node/no-extraneous-import': 'off', - - // We have lots of magic numbers in tests - '@typescript-eslint/no-magic-numbers': 'off', - - // We have files with a lot of tests - 'max-lines-per-function': 'off', - 'max-lines': 'off', - - // We need to test things without type guards sometimes - '@typescript-eslint/no-unsafe-assignment': 'off', - '@typescript-eslint/no-unsafe-call': 'off', - '@typescript-eslint/consistent-type-assertions': 'off', - - // We need to mess with internal things to generate certain testing situations - '@typescript-eslint/no-unsafe-member-access': 'off', - - // Tests are already in 2 callbacks, so max 3 is pretty restrictive - 'max-nested-callbacks': 'off', - - // messes with fixtures - 'consistent-default-export-name/default-import-match-filename': 'off', - }, - }, - { - files: ['test/client/*.ts'], - }, - { - files: ['test/models/*.ts'], - rules: { - '@typescript-eslint/no-explicit-any': 'off', - }, - }, - { - files: ['src/models/**/*.ts'], - rules: { - complexity: ['off'], - }, - }, - { - files: ['.eslintrc.js', 'jest.config.js'], - rules: { - // Removed no-commonjs requirement as eslint must be in common js format - 'import/no-commonjs': 'off', - - // Removed this as eslint prevents us from doing this differently - 'import/unambiguous': 'off', - - // Javascript files have CommonJS exports - 'import/no-unused-modules': 'off', - }, - }, - { - files: ['tools/*.ts', 'tools/*.js'], - rules: { - 'no-console': ['off'], - 'node/no-process-exit': ['off'], - '@typescript-eslint/no-magic-numbers': ['off'], - 'max-lines-per-function': ['off'], - 'max-statements': ['off'], - complexity: ['off'], - 'max-depth': ['warn', 3], - }, - }, - ], -} diff --git a/packages/xrpl/HISTORY.md b/packages/xrpl/HISTORY.md index da384a908c..ba53ba2a56 100644 --- a/packages/xrpl/HISTORY.md +++ b/packages/xrpl/HISTORY.md @@ -2,15 +2,110 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xrpl-announce) for release announcements. We recommend that xrpl.js (ripple-lib) users stay up-to-date with the latest stable release. -## Unreleased Changes +## Unreleased + +## 4.6.0 (2026-02-12) + +### Added +* Add `faucetProtocol` (http or https) option to `fundWallet` method. Makes `fundWallet` work with locally running faucet servers. +* Add `signLoanSetByCounterparty` and `combineLoanSetCounterpartySigners` helper functions to sign and combine LoanSet transactions signed by the counterparty. +* Add newly added fields to `Loan`, `LoanBroker` and `Vault` ledger objects and lending protocol related transaction types. + +## 4.5.0 (2025-12-16) + +### Added +* Support for `Lending Protocol` (XLS-66d). +* Export signing and binary codec utilities. + +### Fixed +* Update ripple-binary-codec to 2.5.1 to address serialization/deserialization issues in `Issue` serialized type for `MPTIssue`. +* Better faucet error handling +* Mark the `AssetsAvailable`, `AssetsTotal`, and `LossUnrealized` fields of the Vault object as optional. + +## 4.4.3 (2025-11-07) + +### Added +* Export `Batch` (XLS-56) transaction types and utilities +* Add `encodeMPTokenMetadata` and `decodeMPTokenMetadata` helper functions to encode and decode MPTokenMetadata as per XLS-89 standard. + +### Fixed +* Fix incorrect type checking in `validateVaultCreate` that prevented vault creation with MPT as an asset. +* [Breaking change] Fix `MPTokenMetadata` type to adhere to the XLS-89 standard. Since XLS-89 is still in a forming state and undergoing changes, this breaking change is being released as a bug fix via patch version bump. If you are using `MPTokenMetadata` in your code, please verify that it adheres to the updated type definition. +* [Breaking change] Fix `validateMPTokenMetadata` to correctly validate MPTokenMetadata as per XLS-89 standard. Since XLS-89 is still in a forming state and undergoing changes, this breaking change is being released as a bug fix via patch version bump. If you are using `validateMPTokenMetadata` in your code, expect it to change as per the XLS-89 standard. + +## 4.4.2 (2025-09-25) + +### Fixed +* improve Batch inner transaction typing + +## 4.4.1 (2025-08-29) + +### Fixed +* Prevent Node.js process termination when WebSocket send() errors after the connection is closed. + +## 4.4.0 (2025-07-29) + +### Added +* Support for `PermissionedDEX` (XLS-81d) +* Support for `Token Escrow` (XLS-85) +* Support for `Single Asset Vault` (XLS-65) +* Adds `XRPLNumber` amount type used in Vault transactions. This supports integer, decimal, or scientific notation strings. +* Adds `ClawbackAmount` amount type used in transactions related to Clawback. +* Fixed minified `build/xrpl-latest-min.js` to have all the latest xrpl package changes. +* Add warning messages to `MPTokenIssuanceCreate` transaction as per [XLS-89d](https://github.com/XRPLF/XRPL-Standards/pull/293). + +### Fixed +* Fix `AccountRoot` ledger object to correctly parse `FirstNFTokenSequence` field +* Fail faster on `tem` errors with `submitAndWait` +* Improved type-checking in models +* Fix issue with some transactions that would crash in validation +* Improve typing of `Batch` inner transactions + +## 4.3.0 (2025-06-09) + +### Added +* Support for `NFTokenMintOffer` (XLS-52) +* Add Github Actions step to auto-generate documentation +* Support for `Account Permissions` and `Account Permission Delegation` (XLS-74d, XLS-75d) +* Add support for `Batch` amendment (XLS-56) + +### Fixed +* Fix `OracleSet` transaction to accept hexadecimal string values for `AssetPrice` field +* `TransactionStream` model includes `hash` field in APIv2 +* `TransactionStream` model includes `close_time_iso` field only for APIv2 +* Adds `MPTCurrency` type +* Improve faucet support +* Improve multisign fee calculations + +## 4.2.0 (2025-2-13) + +### Added +* Support for the AMMClawback amendment (XLS-73) +* Adds utility function `convertTxFlagsToNumber` +* Support for the Permissioned Domains amendment (XLS-80). +* Support for the `simulate` RPC ([XLS-69](https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0069-simulate)) +* Support for XLS-77d Deep-Freeze amendment + +### Changed +* Deprecated `setTransactionFlagsToNumber`. Start using convertTxFlagsToNumber instead + +### Fixed +* Include `network_id` field in the `server_state` response interface. + +## 4.1.0 (2024-12-23) ### Added -* parseTransactionFlags as a utility function in the xrpl package to streamline transactions flags-to-map conversion +* Added new MPT transaction definitions (XLS-33) +* New `MPTAmount` type support for `Payment` and `Clawback` transactions +* `parseTransactionFlags` as a utility function in the xrpl package to streamline transactions flags-to-map conversion +* Support for XLS-70d (Credentials) +* Support for the `DynamicNFT` amendment (XLS-46) ### Fixed * `TransactionStream` model supports APIv2 * `TransactionStream` model includes `close_time_iso` field * `Ledger` model includes `close_time_iso` field +* Remove hard-coded reference to 10 drops as the reference transaction cost. Ensure tests passed for all transaction fee scenarios and `AMMCreate` transaction fee calculation is correct in case `owner_reserve` increases. ## 4.0.0 (2024-07-15) @@ -47,6 +142,7 @@ Subscribe to [the **xrpl-announce** mailing list](https://groups.google.com/g/xr ## 3.0.0 (2024-02-01) ### BREAKING CHANGES +* The default signing algorithm in the `Wallet` was changed from secp256k1 to ed25519 * Bump typescript to 5.x * Remove Node 14 support * Remove `crypto` polyfills, `create-hash`, `elliptic`, `hash.js`, and their many dependencies in favor of `@noble/hashes` and `@nobel/curves` diff --git a/packages/xrpl/eslint.config.js b/packages/xrpl/eslint.config.js new file mode 100644 index 0000000000..04d116a11f --- /dev/null +++ b/packages/xrpl/eslint.config.js @@ -0,0 +1,130 @@ +const globals = require('globals') +const eslintConfig = require('@xrplf/eslint-config/base').default +const tseslint = require('typescript-eslint') + +module.exports = [ + { + ignores: [ + '**/node_modules/', + '**/dist/', + '**/build/', + 'coverage/', + '**/*.js', + 'typedoc.mts', + 'tools/', + ], + }, + ...eslintConfig, + { + languageOptions: { + sourceType: 'module', // Allow the use of imports / ES modules + ecmaVersion: 2020, + + // Make ESLint compatible with TypeScript + parser: tseslint.parser, + parserOptions: { + // Enable linting rules with type information from our tsconfig + tsconfigRootDir: __dirname, + project: [ + './tsconfig.eslint.json', + '../ripple-binary-codec/tsconfig.eslint.json', + '../ripple-address-codec/tsconfig.eslint.json', + '../ripple-keypairs/tsconfig.eslint.json', + ], + ecmaFeatures: { + impliedStrict: true, // Enable global strict mode + }, + }, + globals: { + ...globals.jest, + ...globals.node, + ...globals.es2020, + }, + }, + + rules: { + 'multiline-comment-style': 'off', + // Disabled until https://github.com/import-js/eslint-plugin-import/pull/2305 is resolved to + // accomodate this change https://github.com/XRPLF/xrpl.js/pull/2133 + 'import/no-unused-modules': 'off', + // Certain rippled APIs require snake_case naming + '@typescript-eslint/naming-convention': [ + 'error', + { + selector: 'interface', + format: ['PascalCase', 'snake_case'], + }, + ], + 'max-lines-per-function': [ + 'warn', + { max: 40, skipBlankLines: true, skipComments: true }, + ], + 'max-statements': ['warn', 25], + // exception for lodash + 'id-length': ['error', { exceptions: ['_'] }], + + // no-shadow has false-positives for enum, @typescript-eslint version fixes that + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': ['error'], + 'jsdoc/check-examples': 'off', + // We want to use certain fields like "@interface" to make join types treated as interfaces. + 'jsdoc/check-tag-names': 'off', + 'jsdoc/require-hyphen-before-param-description': 'off', + + 'tsdoc/syntax': 'off', + 'jsdoc/require-description-complete-sentence': 'off', + 'import/prefer-default-export': 'off', + 'max-depth': ['warn', 3], + 'n/no-unsupported-features/node-builtins': 'off', + 'import/no-named-as-default': 'off', + 'n/no-unpublished-import': 'off', + }, + }, + { + files: ['test/**/*.ts'], + rules: { + /* + * Because this project is managed by lerna, dev dependencies are + * hoisted and do not appear in the package.json. + */ + 'import/no-extraneous-dependencies': 'off', + 'n/no-extraneous-import': 'off', + + // We have lots of magic numbers in tests + '@typescript-eslint/no-magic-numbers': 'off', + + // We have files with a lot of tests + 'max-lines-per-function': 'off', + 'max-lines': 'off', + + // We need to test things without type guards sometimes + '@typescript-eslint/no-unsafe-assignment': 'off', + '@typescript-eslint/no-unsafe-call': 'off', + '@typescript-eslint/consistent-type-assertions': 'off', + + // We need to mess with internal things to generate certain testing situations + '@typescript-eslint/no-unsafe-member-access': 'off', + + // Tests are already in 2 callbacks, so max 3 is pretty restrictive + 'max-nested-callbacks': 'off', + + // messes with fixtures + 'consistent-default-export-name/default-import-match-filename': 'off', + }, + }, + { + files: ['test/client/*.ts'], + }, + { + files: ['test/models/*.ts'], + rules: { + '@typescript-eslint/no-explicit-any': 'off', + }, + }, + { + files: ['src/models/**/*.ts'], + rules: { + complexity: ['off'], + }, + }, +] diff --git a/packages/xrpl/jest.config.faucet.js b/packages/xrpl/jest.config.faucet.js new file mode 100644 index 0000000000..10988560f3 --- /dev/null +++ b/packages/xrpl/jest.config.faucet.js @@ -0,0 +1,13 @@ +// Jest configuration for faucet tests +const base = require('../../jest.config.base.js') + +module.exports = { + ...base, + roots: [...base.roots, '/test'], + testTimeout: 60000, // Longer timeout for faucet tests + testMatch: [ + '/test/faucet/**/*.test.ts', + '/test/faucet/*.test.ts', + ], + displayName: 'xrpl.js-faucet', +} diff --git a/packages/xrpl/jest.config.integration.js b/packages/xrpl/jest.config.integration.js index 030137aa0c..c2ca6ca420 100644 --- a/packages/xrpl/jest.config.integration.js +++ b/packages/xrpl/jest.config.integration.js @@ -1,4 +1,4 @@ -// Jest configuration for api +// Jest configuration for integration tests (local rippled only) const base = require('../../jest.config.base.js') module.exports = { @@ -9,5 +9,6 @@ module.exports = { '/test/integration/**/*.test.ts', '/test/integration/*.test.ts', ], + testPathIgnorePatterns: ['/test/faucet/'], displayName: 'xrpl.js', } diff --git a/packages/xrpl/jest.config.unit.js b/packages/xrpl/jest.config.unit.js index 8346bc46b6..94f0fed220 100644 --- a/packages/xrpl/jest.config.unit.js +++ b/packages/xrpl/jest.config.unit.js @@ -7,6 +7,7 @@ module.exports = { testMatch: ['/test/**/*.test.ts'], testPathIgnorePatterns: [ '/test/integration', + '/test/faucet', '/test/fixtures', ], displayName: 'xrpl.js', diff --git a/packages/xrpl/package.json b/packages/xrpl/package.json index 1d0ea17b63..6f781dc9f3 100644 --- a/packages/xrpl/package.json +++ b/packages/xrpl/package.json @@ -1,6 +1,6 @@ { "name": "xrpl", - "version": "4.0.0", + "version": "4.6.0", "license": "ISC", "description": "A TypeScript/JavaScript API for interacting with the XRP Ledger in Node.js and the browser", "files": [ @@ -25,12 +25,13 @@ "@scure/bip32": "^1.3.1", "@scure/bip39": "^1.2.1", "@xrplf/isomorphic": "^1.0.1", - "@xrplf/secret-numbers": "^1.0.0", + "@xrplf/secret-numbers": "^2.0.0", "bignumber.js": "^9.0.0", "eventemitter3": "^5.0.1", "ripple-address-codec": "^5.0.0", - "ripple-binary-codec": "^2.1.0", - "ripple-keypairs": "^2.0.0" + "ripple-binary-codec": "^2.7.0", + "ripple-keypairs": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0" }, "devDependencies": { "@types/node": "^18.18.38", @@ -41,36 +42,30 @@ "karma-jasmine": "^5.1.0", "karma-webpack": "^5.0.0", "lodash": "^4.17.4", - "react": "^18.2.0", + "react": "^19.0.0", "run-s": "^0.0.0", - "typedoc": "0.26.10", + "typedoc": "0.28.15", "ws": "^8.14.2" }, - "resolutions": { - "elliptic": "^6.5.4" - }, "scripts": { - "build": "run-s build:lib build:snippets build:web", - "build:snippets": "tsc --build ./snippets/tsconfig.json", + "build": "run-s build:lib build:web", "build:lib": "tsc --build tsconfig.build.json", "build:web": "webpack", "build:browserTests": "webpack --config ./test/webpack.config.js", "analyze": "webpack --analyze", "watch": "run-s build:lib --watch", - "clean": "rm -rf ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", + "clean": "rm -rf ./build ./dist ./coverage ./test/testCompiledForWeb tsconfig.build.tsbuildinfo", "docgen": "tsc --build tsconfig.docs.json && typedoc && echo js.xrpl.org >> ../../docs/CNAME", "prepare": "copyfiles ../../README.md xrpl/README.md", "prepublish": "run-s clean build", "test": "jest --config=jest.config.unit.js --verbose false --silent=false", "test:integration": "TS_NODE_PROJECT=tsconfig.build.json jest --config=jest.config.integration.js --verbose false --silent=false --runInBand", + "test:faucet": "jest --config jest.config.faucet.js", "test:browser": "npm run build && npm run build:browserTests && karma start ./karma.config.js", - "test:watch": "jest --watch --verbose false --silent=false --runInBand ./test/**/*.test.ts --testPathIgnorePatterns=./test/integration --testPathIgnorePatterns=./test/fixtures", + "test:watch": "jest --watch --config=jest.config.unit.js --verbose false --silent=false", "format": "prettier --write '{src,test}/**/*.ts'", - "lint": "eslint . --ext .ts --max-warnings 0", - "perf": "./scripts/perf_test.sh", - "compile:snippets": "tsc -p snippets/tsconfig.json", - "start:snippet": "npm run compile:snippets && node", - "inspect:snippet": "npm run compile:snippets && node inspect" + "lint": "eslint . --max-warnings 0", + "perf": "./scripts/perf_test.sh" }, "prettier": "@xrplf/prettier-config", "repository": { diff --git a/packages/xrpl/snippets/README.md b/packages/xrpl/snippets/README.md deleted file mode 100644 index 9ecd150670..0000000000 --- a/packages/xrpl/snippets/README.md +++ /dev/null @@ -1,4 +0,0 @@ -# More XRPL Code Samples - -- For samples of common use cases, see the [XRPL.org Code Samples](https://xrpl.org/code-samples.html) page. -- You can also browse those samples [directly on GitHub](https://github.com/XRPLF/xrpl-dev-portal/tree/master/content/_code-samples). diff --git a/packages/xrpl/snippets/src/claimPayChannel.ts b/packages/xrpl/snippets/src/claimPayChannel.ts deleted file mode 100644 index d24bd03580..0000000000 --- a/packages/xrpl/snippets/src/claimPayChannel.ts +++ /dev/null @@ -1,74 +0,0 @@ -import { - AccountObjectsRequest, - Client, - PaymentChannelCreate, - PaymentChannelClaim, - hashes, -} from '../../src' - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -void claimPayChannel() - -// The snippet walks us through creating and claiming a Payment Channel. -async function claimPayChannel(): Promise { - await client.connect() - - // creating wallets as prerequisite - const { wallet: wallet1 } = await client.fundWallet() - const { wallet: wallet2 } = await client.fundWallet() - - console.log('Balances of wallets before Payment Channel is claimed:') - console.log(await client.getXrpBalance(wallet1.classicAddress)) - console.log(await client.getXrpBalance(wallet2.classicAddress)) - - // create a Payment Channel and submit and wait for tx to be validated - const paymentChannelCreate: PaymentChannelCreate = { - TransactionType: 'PaymentChannelCreate', - Account: wallet1.classicAddress, - Amount: '100', - Destination: wallet2.classicAddress, - SettleDelay: 86400, - PublicKey: wallet1.publicKey, - } - - const paymentChannelResponse = await client.submitAndWait( - paymentChannelCreate, - { wallet: wallet1 }, - ) - console.log(paymentChannelResponse) - - // check that the object was actually created - const accountObjectsRequest: AccountObjectsRequest = { - command: 'account_objects', - account: wallet1.classicAddress, - } - - const accountObjects = (await client.request(accountObjectsRequest)).result - .account_objects - - console.log(accountObjects) - - // destination claims the Payment Channel and we see the balances to verify. - const paymentChannelClaim: PaymentChannelClaim = { - Account: wallet2.classicAddress, - TransactionType: 'PaymentChannelClaim', - Channel: hashes.hashPaymentChannel( - wallet1.classicAddress, - wallet2.classicAddress, - paymentChannelResponse.result.tx_json.Sequence ?? 0, - ), - Amount: '100', - } - - const channelClaimResponse = await client.submit(paymentChannelClaim, { - wallet: wallet1, - }) - console.log(channelClaimResponse) - - console.log('Balances of wallets after Payment Channel is claimed:') - console.log(await client.getXrpBalance(wallet1.classicAddress)) - console.log(await client.getXrpBalance(wallet2.classicAddress)) - - await client.disconnect() -} diff --git a/packages/xrpl/snippets/src/getTransaction.ts b/packages/xrpl/snippets/src/getTransaction.ts deleted file mode 100644 index 777a9291e4..0000000000 --- a/packages/xrpl/snippets/src/getTransaction.ts +++ /dev/null @@ -1,40 +0,0 @@ -import { Client } from '../../src' - -const client = new Client('wss://s2.ripple.com:51233') - -async function getTransaction(): Promise { - await client.connect() - const ledger = await client.request({ - command: 'ledger', - transactions: true, - ledger_index: 'validated', - }) - console.log(ledger) - - const transactions = ledger.result.ledger.transactions - if (transactions && transactions.length > 0) { - const tx = await client.request({ - command: 'tx', - transaction: transactions[0], - }) - console.log(tx) - - // The meta field can be undefined if the transaction has not been validated yet (and so has not changed the ledger). - if (tx.result.meta == null) { - throw new Error('meta not included in the response') - } - - /* - * delivered_amount is the amount actually received by the destination account. - * Use this field to determine how much was delivered, regardless of whether the transaction is a partial payment. - * https://xrpl.org/transaction-metadata.html#delivered_amount - */ - if (typeof tx.result.meta !== 'string') { - console.log('delivered_amount:', tx.result.meta.delivered_amount) - } - } - - await client.disconnect() -} - -void getTransaction() diff --git a/packages/xrpl/snippets/src/multisigning.ts b/packages/xrpl/snippets/src/multisigning.ts deleted file mode 100644 index 983afdefcf..0000000000 --- a/packages/xrpl/snippets/src/multisigning.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { - multisign, - Client, - AccountSet, - convertStringToHex, - SignerListSet, - Wallet, -} from '../../src' - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -async function multisigning(): Promise { - await client.connect() - /* - * This wallet creation is for demonstration purposes. - * In practice, users generally will not have all keys in one spot, - * hence, users need to implement a way to get signatures. - */ - const wallet1 = Wallet.generate() - const wallet2 = Wallet.generate() - const { wallet: walletMaster } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const signerListSet: SignerListSet = { - TransactionType: 'SignerListSet', - Account: walletMaster.classicAddress, - SignerEntries: [ - { - SignerEntry: { - Account: wallet1.classicAddress, - SignerWeight: 1, - }, - }, - { - SignerEntry: { - Account: wallet2.classicAddress, - SignerWeight: 1, - }, - }, - ], - SignerQuorum: 2, - } - - const signerListResponse = await client.submit(signerListSet, { - wallet: walletMaster, - }) - console.log('SignerListSet constructed successfully:') - console.log(signerListResponse) - - const accountSet: AccountSet = { - TransactionType: 'AccountSet', - Account: walletMaster.classicAddress, - Domain: convertStringToHex('example.com'), - } - const accountSetTx = await client.autofill(accountSet, 2) - console.log('AccountSet transaction is ready to be multisigned:') - console.log(accountSetTx) - const { tx_blob: tx_blob1 } = wallet1.sign(accountSetTx, true) - const { tx_blob: tx_blob2 } = wallet2.sign(accountSetTx, true) - const multisignedTx = multisign([tx_blob1, tx_blob2]) - const submitResponse = await client.submit(multisignedTx) - - if (submitResponse.result.engine_result === 'tesSUCCESS') { - console.log('The multisigned transaction was accepted by the ledger:') - console.log(submitResponse) - if (submitResponse.result.tx_json.Signers) { - console.log( - `The transaction had ${submitResponse.result.tx_json.Signers.length} signatures`, - ) - } - } else { - console.log( - "The multisigned transaction was rejected by rippled. Here's the response from rippled:", - ) - console.log(submitResponse) - } - - await client.disconnect() -} - -void multisigning() diff --git a/packages/xrpl/snippets/src/partialPayment.ts b/packages/xrpl/snippets/src/partialPayment.ts deleted file mode 100644 index 7f4c181cbc..0000000000 --- a/packages/xrpl/snippets/src/partialPayment.ts +++ /dev/null @@ -1,95 +0,0 @@ -import { Client, Payment, PaymentFlags, TrustSet } from '../../src' - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -// This snippet walks us through partial payment. -async function partialPayment(): Promise { - await client.connect() - - // creating wallets as prerequisite - const { wallet: wallet1 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const { wallet: wallet2 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - - // create a trustline to issue an IOU `FOO` and set limit on it. - const trust_set_tx: TrustSet = { - TransactionType: 'TrustSet', - Account: wallet2.classicAddress, - LimitAmount: { - currency: 'FOO', - issuer: wallet1.classicAddress, - // Value for the new IOU - 10000000000 - is arbitarily chosen. - value: '10000000000', - }, - } - - await client.submitAndWait(trust_set_tx, { - wallet: wallet2, - }) - - console.log('Balances after trustline is created') - console.log(await client.getBalances(wallet1.classicAddress)) - console.log(await client.getBalances(wallet2.classicAddress)) - - // Initially, the issuer(wallet1) sends an amount to the other account(wallet2) - const issue_quantity = '3840' - const payment: Payment = { - TransactionType: 'Payment', - Account: wallet1.classicAddress, - Amount: { - currency: 'FOO', - value: issue_quantity, - issuer: wallet1.classicAddress, - }, - Destination: wallet2.classicAddress, - } - - // submit payment - const initialPayment = await client.submitAndWait(payment, { - wallet: wallet1, - }) - console.log(initialPayment) - - console.log('Balances after issuer(wallet1) sends IOU("FOO") to wallet2') - console.log(await client.getBalances(wallet1.classicAddress)) - console.log(await client.getBalances(wallet2.classicAddress)) - - /* - * Send money less than the amount specified on 2 conditions: - * 1. Sender has less money than the aamount specified in the payment Tx. - * 2. Sender has the tfPartialPayment flag activated. - * - * Other ways to specify flags are by using Hex code and decimal code. - * eg. For partial payment(tfPartialPayment) - * decimal ->131072, hex -> 0x00020000 - */ - const partialPaymentTx: Payment = { - TransactionType: 'Payment', - Account: wallet2.classicAddress, - Amount: { - currency: 'FOO', - value: '4000', - issuer: wallet1.classicAddress, - }, - Destination: wallet1.classicAddress, - Flags: PaymentFlags.tfPartialPayment, - } - - // submit payment - const submitResponse = await client.submitAndWait(partialPaymentTx, { - wallet: wallet2, - }) - console.log(submitResponse) - - console.log( - "Balances after Partial Payment, when wallet2 tried to send 4000 FOO's", - ) - console.log(await client.getBalances(wallet1.classicAddress)) - console.log(await client.getBalances(wallet2.classicAddress)) - - await client.disconnect() -} -void partialPayment() diff --git a/packages/xrpl/snippets/src/paths.ts b/packages/xrpl/snippets/src/paths.ts deleted file mode 100644 index 499a18a0ba..0000000000 --- a/packages/xrpl/snippets/src/paths.ts +++ /dev/null @@ -1,51 +0,0 @@ -import { Client, Payment } from '../../src' - -// Prerequisites for this snippet. Please verify these conditions after a reset of the -// test network: -// - destination_account must have a trust line with the destination_amount.issuer -// - There must be appropriate DEX Offers or XRP/TST AMM for the cross-currency exchange - -// PathFind RPC requires the use of a Websocket client only -const client = new Client('wss://s.altnet.rippletest.net:51233') - -async function createTxWithPaths(): Promise { - await client.connect() - - const { wallet } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const destination_account = 'rJPeZVPty1bXXbDR9oKscg2irqABr7sP3t' - const destination_amount = { - value: '0.001', - currency: 'TST', - issuer: 'rP9jPyP5kyvFRb6ZiRghAGw5u8SGAmU4bd', - } - - const resp = await client.request({ - command: 'path_find', - subcommand: 'create', - source_account: wallet.classicAddress, - destination_account, - destination_amount, - }) - console.log(resp) - - const paths = resp.result.alternatives[0].paths_computed - console.log(paths) - - const tx: Payment = { - TransactionType: 'Payment', - Account: wallet.classicAddress, - Amount: destination_amount, - Destination: destination_account, - Paths: paths, - } - - await client.autofill(tx) - const signed = wallet.sign(tx) - console.log('signed:', signed) - - await client.disconnect() -} - -void createTxWithPaths() diff --git a/packages/xrpl/snippets/src/reliableTransactionSubmission.ts b/packages/xrpl/snippets/src/reliableTransactionSubmission.ts deleted file mode 100644 index 241dd5c72a..0000000000 --- a/packages/xrpl/snippets/src/reliableTransactionSubmission.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { Client, Payment } from '../../src' - -/** - * When implementing Reliable Transaction Submission, there are many potential solutions, each with different trade-offs. - * The main decision points are: - * 1) Transaction preparation: - * - The autofill function as a part of the submitAndWait should be able to correctly populate - * values for the fields Sequence, LastLedgerSequence and Fee. - * 2) Transaction status retrieval. Options include: - * - Poll for transaction status: - * - On a regular interval (e.g. Every 3-5 seconds), or - * - When a new validated ledger is detected - * + (To accommodate an edge case in transaction retrieval, - * check the sending account's Sequence number to confirm that it has the expected value; - * alternatively, wait until a few additional ledgers have been validated before deciding that a - * transaction has definitively not been included in a validated ledger) - * - Listen for transaction status: scan all validated transactions to see if our transactions are among them - * 3) What do we do when a transaction fails? It is possible to implement retry logic, but caution is advised. - * Note that there are a few ways for a transaction to fail: - * A) `tec`: The transaction was included in a ledger but only claimed the transaction fee - * B) `tesSUCCESS` but unexpected result: The transaction was successful but did not have the expected result. - * This generally does not occur for XRP-to-XRP payments - * C) The transaction was not, and never will be, included in a validated ledger [3C]. - * - * References: - * - https://xrpl.org/reliable-transaction-submission.html - * - https://xrpl.org/send-xrp.html - * - https://xrpl.org/look-up-transaction-results.html - * - https://xrpl.org/monitor-incoming-payments-with-websocket.html. - * - * For the implementation in this example, we have made the following decisions: - * 1) We allow the autofill function as a part of submitAndWait to fill up the account sequence, - * LastLedgerSequence and Fee. Payments are defined upfront, and idempotency is not needed. - * If the script is run a second time, duplicate payments will result. - * 2) We will rely on the xrpl.js submitAndWait function to get us the transaction submission result after the wait time. - * 3) Transactions will not be automatically retried. Transactions are limited to XRP-to-XRP payments - * and cannot "succeed" in an unexpected way. - */ - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -void sendReliableTx() - -async function sendReliableTx(): Promise { - await client.connect() - - // creating wallets as prerequisite - const { wallet: wallet1 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const { wallet: wallet2 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - - console.log('Balances of wallets before Payment tx') - console.log( - await client.getXrpBalance(wallet1.classicAddress), - await client.getXrpBalance(wallet2.classicAddress), - ) - - // create a Payment tx and submit and wait for tx to be validated - const payment: Payment = { - TransactionType: 'Payment', - Account: wallet1.classicAddress, - Amount: '1000', - Destination: wallet2.classicAddress, - } - - const paymentResponse = await client.submitAndWait(payment, { - wallet: wallet1, - }) - console.log('\nTransaction was submitted.\n') - const txResponse = await client.request({ - command: 'tx', - transaction: paymentResponse.result.hash, - }) - // With the following reponse we are able to see that the tx was indeed validated. - console.log('Validated:', txResponse.result.validated) - - console.log('Balances of wallets after Payment tx:') - console.log( - await client.getXrpBalance(wallet1.classicAddress), - await client.getXrpBalance(wallet2.classicAddress), - ) - - await client.disconnect() -} diff --git a/packages/xrpl/snippets/src/sendEscrow.ts b/packages/xrpl/snippets/src/sendEscrow.ts deleted file mode 100644 index 3744b9b0ca..0000000000 --- a/packages/xrpl/snippets/src/sendEscrow.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { - AccountObjectsRequest, - Client, - EscrowCreate, - EscrowFinish, - isoTimeToRippleTime, -} from '../../src' - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -void sendEscrow() - -// The snippet walks us through creating and finishing escrows. -async function sendEscrow(): Promise { - await client.connect() - - // creating wallets as prerequisite - const { wallet: wallet1 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const { wallet: wallet2 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - - console.log('Balances of wallets before Escrow tx was created:') - console.log( - await client.getXrpBalance(wallet1.classicAddress), - await client.getXrpBalance(wallet2.classicAddress), - ) - - // finish 2 seconds after the escrow is actually created and tx is validated. - const finishAfter = isoTimeToRippleTime(Date()) + 2 - - // creating an Escrow using `EscrowCreate` and submit and wait for tx to be validated. - const createTx: EscrowCreate = { - TransactionType: 'EscrowCreate', - Account: wallet1.address, - Destination: wallet2.address, - Amount: '1000000', - FinishAfter: finishAfter, - } - - const createEscrowResponse = await client.submitAndWait(createTx, { - wallet: wallet1, - }) - - console.log(createEscrowResponse) - - // check that the object was actually created - const accountObjectsRequest: AccountObjectsRequest = { - command: 'account_objects', - account: wallet1.classicAddress, - } - - const accountObjects = (await client.request(accountObjectsRequest)).result - .account_objects - - console.log("Escrow object exists in `wallet1`'s account") - console.log(accountObjects) - - // the creator finishes the Escrow using `EscrowFinish` to release the Escrow - const finishTx: EscrowFinish = { - TransactionType: 'EscrowFinish', - Account: wallet1.classicAddress, - Owner: wallet1.classicAddress, - OfferSequence: Number(createEscrowResponse.result.tx_json.Sequence), - } - - await client.submit(finishTx, { - wallet: wallet1, - }) - - // we see the balances to verify. - console.log('Balances of wallets after Escrow was sent') - console.log( - await client.getXrpBalance(wallet1.classicAddress), - await client.getXrpBalance(wallet2.classicAddress), - ) - - await client.disconnect() -} diff --git a/packages/xrpl/snippets/src/setRegularKey.ts b/packages/xrpl/snippets/src/setRegularKey.ts deleted file mode 100644 index ccf9ad31db..0000000000 --- a/packages/xrpl/snippets/src/setRegularKey.ts +++ /dev/null @@ -1,60 +0,0 @@ -import { Client, Payment, SetRegularKey } from '../../src' - -const client = new Client('wss://s.altnet.rippletest.net:51233') - -/* - * The snippet walks us through an example usage of RegularKey. - * Later, - */ -async function setRegularKey(): Promise { - await client.connect() - const { wallet: wallet1 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const { wallet: wallet2 } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - const { wallet: regularKeyWallet } = await client.fundWallet(null, { - usageContext: 'code snippets', - }) - - console.log('Balances before payment') - console.log(await client.getXrpBalance(wallet1.classicAddress)) - console.log(await client.getXrpBalance(wallet2.classicAddress)) - - // assigns key-pair(regularKeyWallet) to wallet1 using `SetRegularKey`. - const tx: SetRegularKey = { - TransactionType: 'SetRegularKey', - Account: wallet1.classicAddress, - RegularKey: regularKeyWallet.classicAddress, - } - const response = await client.submitAndWait(tx, { - wallet: wallet1, - }) - - console.log('Response for successful SetRegularKey tx') - console.log(response) - - /* - * when wallet1 sends payment to wallet2 and - * signs using the regular key wallet, the transaction goes through. - */ - const payment: Payment = { - TransactionType: 'Payment', - Account: wallet1.classicAddress, - Destination: wallet2.classicAddress, - Amount: '1000', - } - - const submitTx = await client.submit(payment, { - wallet: regularKeyWallet, - }) - console.log('Response for tx signed using Regular Key:') - console.log(submitTx) - console.log('Balances after payment:') - console.log(await client.getXrpBalance(wallet1.classicAddress)) - console.log(await client.getXrpBalance(wallet2.classicAddress)) - - await client.disconnect() -} -void setRegularKey() diff --git a/packages/xrpl/snippets/tsconfig.json b/packages/xrpl/snippets/tsconfig.json deleted file mode 100644 index b2001d0ac7..0000000000 --- a/packages/xrpl/snippets/tsconfig.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "rootDir": "../../xrpl" - }, - "include": ["./src/**/*.ts", "../src/**/*.ts", "../src/**/*.json"] -} diff --git a/packages/xrpl/src/Wallet/authorizeChannel.ts b/packages/xrpl/src/Wallet/authorizeChannel.ts index b9185b444a..5d4a995574 100644 --- a/packages/xrpl/src/Wallet/authorizeChannel.ts +++ b/packages/xrpl/src/Wallet/authorizeChannel.ts @@ -1,7 +1,7 @@ import { encodeForSigningClaim } from 'ripple-binary-codec' import { sign } from 'ripple-keypairs' -import { Wallet } from './index' +import type { Wallet } from './index' /** * Creates a signature that can be used to redeem a specific amount of XRP from a payment channel. diff --git a/packages/xrpl/src/Wallet/batchSigner.ts b/packages/xrpl/src/Wallet/batchSigner.ts new file mode 100644 index 0000000000..d0d9b5e135 --- /dev/null +++ b/packages/xrpl/src/Wallet/batchSigner.ts @@ -0,0 +1,198 @@ +import { encode, encodeForSigningBatch } from 'ripple-binary-codec' +import { sign } from 'ripple-keypairs' + +import { ValidationError } from '../errors' +import { Batch, Transaction, validate } from '../models' +import { BatchSigner, validateBatch } from '../models/transactions/batch' +import { hashSignedTx } from '../utils/hashes' + +import { compareSigners, getDecodedTransaction } from './utils' + +import type { Wallet } from './index' + +// eslint-disable-next-line max-params -- okay for helper function +function constructBatchSignerObject( + batchAccount: string, + wallet: Wallet, + signature: string, + multisignAddress: string | false = false, +): BatchSigner { + let batchSigner: BatchSigner + if (multisignAddress) { + batchSigner = { + BatchSigner: { + Account: batchAccount, + Signers: [ + { + Signer: { + Account: multisignAddress, + SigningPubKey: wallet.publicKey, + TxnSignature: signature, + }, + }, + ], + }, + } + } else { + batchSigner = { + BatchSigner: { + Account: batchAccount, + SigningPubKey: wallet.publicKey, + TxnSignature: signature, + }, + } + } + return batchSigner +} + +/** + * Sign a multi-account Batch transaction. + * + * @param wallet - Wallet instance. + * @param transaction - The Batch transaction to sign. + * @param opts - Additional options for regular key and multi-signing complexity. + * @param opts.batchAccount - The account submitting the inner Batch transaction, on behalf of which is this signature. + * @param opts.multisign - Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request. + * The actual address is only needed in the case of regular key usage. + * @throws ValidationError if the transaction is malformed. + */ +export function signMultiBatch( + wallet: Wallet, + transaction: Batch, + opts: { batchAccount?: string; multisign?: boolean | string } = {}, +): void { + const batchAccount = opts.batchAccount ?? wallet.classicAddress + let multisignAddress: boolean | string = false + if (typeof opts.multisign === 'string') { + multisignAddress = opts.multisign + } else if (opts.multisign) { + multisignAddress = wallet.classicAddress + } + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- for JS purposes + if (transaction.TransactionType !== 'Batch') { + throw new ValidationError('Must be a Batch transaction.') + } + /* + * This will throw a more clear error for JS users if the supplied transaction has incorrect formatting + */ + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type + validate(transaction as unknown as Record) + + const involvedAccounts = new Set( + transaction.RawTransactions.map((raw) => raw.RawTransaction.Account), + ) + if (!involvedAccounts.has(batchAccount)) { + throw new ValidationError( + 'Must be signing for an address submitting a transaction in the Batch.', + ) + } + const fieldsToSign = { + flags: transaction.Flags, + txIDs: transaction.RawTransactions.map((rawTx) => + hashSignedTx(rawTx.RawTransaction), + ), + } + const signature = sign(encodeForSigningBatch(fieldsToSign), wallet.privateKey) + + // eslint-disable-next-line no-param-reassign -- okay for signing + transaction.BatchSigners = [ + constructBatchSignerObject( + batchAccount, + wallet, + signature, + multisignAddress, + ), + ] +} + +/** + * Takes several transactions with BatchSigners fields (in object or blob form) and creates a + * single transaction with all BatchSigners that then gets signed and returned. + * + * @param transactions The transactions to combine `BatchSigners` values on. + * @returns A single signed Transaction which has all BatchSigners from transactions within it. + * @throws ValidationError if: + * - There were no transactions given to sign + * @category Signing + */ +export function combineBatchSigners( + transactions: Array, +): string { + if (transactions.length === 0) { + throw new ValidationError('There are 0 transactions to combine.') + } + + const decodedTransactions: Transaction[] = transactions.map((txOrBlob) => { + return getDecodedTransaction(txOrBlob) + }) + + decodedTransactions.forEach((tx) => { + if (tx.TransactionType !== 'Batch') { + throw new ValidationError('TransactionType must be `Batch`.') + } + /* + * This will throw a more clear error for JS users if any of the supplied transactions has incorrect formatting + */ + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type + validateBatch(tx as unknown as Record) + if (tx.BatchSigners == null || tx.BatchSigners.length === 0) { + throw new ValidationError( + 'For combining Batch transaction signatures, all transactions must include a BatchSigners field containing an array of signatures.', + ) + } + + if (tx.TxnSignature != null || tx.Signers != null) { + throw new ValidationError('Batch transaction must be unsigned.') + } + }) + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- checked above + const batchTransactions = decodedTransactions as Batch[] + + validateBatchTransactionEquivalence(batchTransactions) + + return encode(getTransactionWithAllBatchSigners(batchTransactions)) +} + +/** + * The transactions should all be equal except for the 'Signers' field. + * + * @param transactions - An array of Transactions which are expected to be equal other than 'Signers'. + * @throws ValidationError if the transactions are not equal in any field other than 'Signers'. + */ +function validateBatchTransactionEquivalence(transactions: Batch[]): void { + const exampleTransaction = JSON.stringify({ + flags: transactions[0].Flags, + transactionIDs: transactions[0].RawTransactions.map((rawTx) => + hashSignedTx(rawTx.RawTransaction), + ), + }) + if ( + transactions.slice(1).some( + (tx) => + JSON.stringify({ + flags: tx.Flags, + transactionIDs: tx.RawTransactions.map((rawTx) => + hashSignedTx(rawTx.RawTransaction), + ), + }) !== exampleTransaction, + ) + ) { + throw new ValidationError( + 'Flags and transaction hashes are not the same for all provided transactions.', + ) + } +} + +function getTransactionWithAllBatchSigners(transactions: Batch[]): Batch { + // Signers must be sorted in the combined transaction - See compareSigners' documentation for more details + const sortedSigners: BatchSigner[] = transactions + .flatMap((tx) => tx.BatchSigners ?? []) + .filter((signer) => signer.BatchSigner.Account !== transactions[0].Account) + .sort((signer1, signer2) => + compareSigners(signer1.BatchSigner, signer2.BatchSigner), + ) + + return { ...transactions[0], BatchSigners: sortedSigners } +} diff --git a/packages/xrpl/src/Wallet/counterpartySigner.ts b/packages/xrpl/src/Wallet/counterpartySigner.ts new file mode 100644 index 0000000000..3226a5bd14 --- /dev/null +++ b/packages/xrpl/src/Wallet/counterpartySigner.ts @@ -0,0 +1,213 @@ +import stringify from 'fast-json-stable-stringify' +import { encode } from 'ripple-binary-codec' + +import { ValidationError } from '../errors' +import { LoanSet, Signer, Transaction, validate } from '../models' +import { hashSignedTx } from '../utils/hashes' + +import { + compareSigners, + computeSignature, + getDecodedTransaction, +} from './utils' + +import type { Wallet } from '.' + +/** + * Signs a LoanSet transaction as the counterparty. + * + * This function adds a counterparty signature to a LoanSet transaction that has already been + * signed by the first party. The counterparty uses their wallet to sign the transaction, + * which is required for multi-party loan agreements on the XRP Ledger. + * + * @param wallet - The counterparty's wallet used for signing the transaction. + * @param transaction - The LoanSet transaction to sign. Can be either: + * - A LoanSet transaction object that has been signed by the first party + * - A serialized transaction blob (string) in hex format + * @param opts - (Optional) Options for signing the transaction. + * @param opts.multisign - Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request. + * The actual address is only needed in the case of regular key usage. + * @returns An object containing: + * - `tx`: The signed LoanSet transaction object + * - `tx_blob`: The serialized transaction blob (hex string) ready to submit to the ledger + * - `hash`: The transaction hash (useful for tracking the transaction) + * + * @throws {ValidationError} If: + * - The transaction is not a LoanSet transaction + * - The transaction is already signed by the counterparty + * - The transaction has not been signed by the first party yet + * - The transaction fails validation + */ +// eslint-disable-next-line max-lines-per-function -- for extensive validations +export function signLoanSetByCounterparty( + wallet: Wallet, + transaction: LoanSet | string, + opts: { multisign?: boolean | string } = {}, +): { + tx: LoanSet + tx_blob: string + hash: string +} { + const tx = getDecodedTransaction(transaction) + + if (tx.TransactionType !== 'LoanSet') { + throw new ValidationError('Transaction must be a LoanSet transaction.') + } + if (tx.CounterpartySignature) { + throw new ValidationError( + 'Transaction is already signed by the counterparty.', + ) + } + if (tx.TxnSignature == null || tx.SigningPubKey == null) { + throw new ValidationError( + 'Transaction must be first signed by first party.', + ) + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type + validate(tx as unknown as Record) + + let multisignAddress: boolean | string = false + if (typeof opts.multisign === 'string') { + multisignAddress = opts.multisign + } else if (opts.multisign) { + multisignAddress = wallet.classicAddress + } + + if (multisignAddress) { + tx.CounterpartySignature = { + Signers: [ + { + Signer: { + Account: multisignAddress, + SigningPubKey: wallet.publicKey, + TxnSignature: computeSignature( + tx, + wallet.privateKey, + multisignAddress, + ), + }, + }, + ], + } + } else { + tx.CounterpartySignature = { + SigningPubKey: wallet.publicKey, + TxnSignature: computeSignature(tx, wallet.privateKey), + } + } + + const serialized = encode(tx) + return { + tx, + tx_blob: serialized, + hash: hashSignedTx(serialized), + } +} + +/** + * Combines multiple LoanSet transactions signed by the counterparty into a single transaction. + * + * @param transactions - An array of signed LoanSet transactions (in object or blob form) to combine. + * @returns An object containing: + * - `tx`: The combined LoanSet transaction object + * - `tx_blob`: The serialized transaction blob (hex string) ready to submit to the ledger + * @throws ValidationError if: + * - There are no transactions to combine + * - Any of the transactions are not LoanSet transactions + * - Any of the transactions do not have Signers + * - Any of the transactions do not have a first party signature + */ +export function combineLoanSetCounterpartySigners( + transactions: Array, +): { + tx: LoanSet + tx_blob: string +} { + if (transactions.length === 0) { + throw new ValidationError('There are 0 transactions to combine.') + } + + const decodedTransactions: Transaction[] = transactions.map( + (txOrBlob: string | Transaction) => { + return getDecodedTransaction(txOrBlob) + }, + ) + + decodedTransactions.forEach((tx) => { + /* + * This will throw a more clear error for JS users if any of the supplied transactions has incorrect formatting + */ + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type + validate(tx as unknown as Record) + + if (tx.TransactionType !== 'LoanSet') { + throw new ValidationError('Transaction must be a LoanSet transaction.') + } + + if ( + tx.CounterpartySignature?.Signers == null || + tx.CounterpartySignature.Signers.length === 0 + ) { + throw new ValidationError('CounterpartySignature must have Signers.') + } + + if (tx.TxnSignature == null || tx.SigningPubKey == null) { + throw new ValidationError( + 'Transaction must be first signed by first party.', + ) + } + }) + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- checked above + const loanSetTransactions = decodedTransactions as LoanSet[] + + validateLoanSetTransactionEquivalence(loanSetTransactions) + + const tx = + getTransactionWithAllLoanSetCounterpartySigners(loanSetTransactions) + + return { + tx, + tx_blob: encode(tx), + } +} + +function validateLoanSetTransactionEquivalence(transactions: LoanSet[]): void { + const exampleTransaction = stringify({ + ...transactions[0], + CounterpartySignature: { + ...transactions[0].CounterpartySignature, + Signers: null, + }, + }) + + if ( + transactions.slice(1).some( + (tx) => + stringify({ + ...tx, + CounterpartySignature: { + ...tx.CounterpartySignature, + Signers: null, + }, + }) !== exampleTransaction, + ) + ) { + throw new ValidationError('LoanSet transactions are not the same.') + } +} + +function getTransactionWithAllLoanSetCounterpartySigners( + transactions: LoanSet[], +): LoanSet { + // Signers must be sorted in the combined transaction - See compareSigners' documentation for more details + const sortedSigners: Signer[] = transactions + .flatMap((tx) => tx.CounterpartySignature?.Signers ?? []) + .sort((signer1, signer2) => compareSigners(signer1.Signer, signer2.Signer)) + + return { + ...transactions[0], + CounterpartySignature: { Signers: sortedSigners }, + } +} diff --git a/packages/xrpl/src/Wallet/defaultFaucets.ts b/packages/xrpl/src/Wallet/defaultFaucets.ts index bf5c38ae51..9281a45334 100644 --- a/packages/xrpl/src/Wallet/defaultFaucets.ts +++ b/packages/xrpl/src/Wallet/defaultFaucets.ts @@ -16,34 +16,37 @@ export enum FaucetNetwork { Devnet = 'faucet.devnet.rippletest.net', } -export const FaucetNetworkPaths: Record = { +export const faucetNetworkPaths: Record = { [FaucetNetwork.Testnet]: '/accounts', [FaucetNetwork.Devnet]: '/accounts', } +export const faucetNetworkIDs: Map = new Map([ + [1, FaucetNetwork.Testnet], + [2, FaucetNetwork.Devnet], +]) + /** * Get the faucet host based on the Client connection. * * @param client - Client. * @returns A {@link FaucetNetwork}. - * @throws When the client url is not on altnet or devnet. + * @throws When there is no known faucet for the client's network ID. */ export function getFaucetHost(client: Client): FaucetNetwork | undefined { - const connectionUrl = client.url - - // 'altnet' for Ripple Testnet server and 'testnet' for XRPL Labs Testnet server - if (connectionUrl.includes('altnet') || connectionUrl.includes('testnet')) { - return FaucetNetwork.Testnet - } - - if (connectionUrl.includes('sidechain-net2')) { + if (client.networkID == null) { throw new XRPLFaucetError( - 'Cannot fund an account on an issuing chain. Accounts must be created via the bridge.', + 'Cannot create faucet URL without networkID or the faucetHost information', ) } - if (connectionUrl.includes('devnet')) { - return FaucetNetwork.Devnet + if (faucetNetworkIDs.has(client.networkID)) { + return faucetNetworkIDs.get(client.networkID) + } + + if (client.networkID === 0) { + // mainnet does not have a faucet + throw new XRPLFaucetError('Faucet is not available for mainnet.') } throw new XRPLFaucetError('Faucet URL is not defined or inferrable.') @@ -54,11 +57,11 @@ export function getFaucetHost(client: Client): FaucetNetwork | undefined { * * @param hostname - hostname. * @returns A String with the correct path for the input hostname. - * If hostname undefined or cannot find (key, value) pair in {@link FaucetNetworkPaths}, defaults to '/accounts' + * If hostname undefined or cannot find (key, value) pair in {@link faucetNetworkPaths}, defaults to '/accounts' */ -export function getDefaultFaucetPath(hostname: string | undefined): string { +export function getFaucetPath(hostname: string | undefined): string { if (hostname === undefined) { return '/accounts' } - return FaucetNetworkPaths[hostname] || '/accounts' + return faucetNetworkPaths[hostname] || '/accounts' } diff --git a/packages/xrpl/src/Wallet/fundWallet.ts b/packages/xrpl/src/Wallet/fundWallet.ts index 2a9560c064..174034aa5f 100644 --- a/packages/xrpl/src/Wallet/fundWallet.ts +++ b/packages/xrpl/src/Wallet/fundWallet.ts @@ -3,11 +3,7 @@ import { isValidClassicAddress } from 'ripple-address-codec' import type { Client } from '../client' import { XRPLFaucetError } from '../errors' -import { - FaucetWallet, - getFaucetHost, - getDefaultFaucetPath, -} from './defaultFaucets' +import { FaucetWallet, getFaucetHost, getFaucetPath } from './defaultFaucets' import { Wallet } from '.' @@ -37,6 +33,11 @@ export interface FundingOptions { * specifies a request to 'faucet.altnet.rippletest.net/accounts' to fund a new wallet. */ faucetPath?: string + /** + * The protocol to use for the faucet server. Defaults to 'https'. Use 'http' to interact with a local faucet server + * running on http:// + */ + faucetProtocol?: 'http' | 'https' /** * An optional field to indicate the use case context of the faucet transaction * Ex: integration test, code snippets. @@ -105,6 +106,7 @@ export interface FundWalletOptions { faucetHost?: string faucetPath?: string amount?: string + faucetProtocol?: 'http' | 'https' usageContext?: string } @@ -125,6 +127,8 @@ export interface FundWalletOptions { * you should provide the path using this option. * Ex: client.fundWallet(null,{'faucet.altnet.rippletest.net', '/accounts'}) * specifies a request to 'faucet.altnet.rippletest.net/accounts' to fund a new wallet. + * @param options.faucetProtocol - The protocol to use for the faucet server ('http' or 'https'). + * Defaults to 'https'. Use 'http' to interact with a local faucet server running on http://. * @param options.amount - A custom amount to fund, if undefined or null, the default amount will be 1000. * @param client - A connection to the XRPL to send requests and transactions. * @param startingBalance - The amount of XRP in the given walletToFund on ledger already. @@ -148,8 +152,9 @@ export async function requestFunding( if (!hostname) { throw new XRPLFaucetError('No faucet hostname could be derived') } - const pathname = options.faucetPath ?? getDefaultFaucetPath(hostname) - const response = await fetch(`https://${hostname}${pathname}`, { + const pathname = options.faucetPath ?? getFaucetPath(hostname) + const protocol = options.faucetProtocol ?? 'https' + const response = await fetch(`${protocol}://${hostname}${pathname}`, { method: 'POST', headers: { 'Content-Type': 'application/json', @@ -157,12 +162,11 @@ export async function requestFunding( body: JSON.stringify(postBody), }) - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- it can be anything - const body = await response.json() if ( response.ok && response.headers.get('Content-Type')?.startsWith('application/json') ) { + const body: unknown = await response.json() // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- It's a FaucetWallet const classicAddress = (body as FaucetWallet).account.classicAddress return processSuccessfulResponse( @@ -172,7 +176,7 @@ export async function requestFunding( startingBalance, ) } - return processError(response, body) + return processError(response) } // eslint-disable-next-line max-params -- Only used as a helper function, lines inc due to added balance. @@ -190,43 +194,46 @@ async function processSuccessfulResponse( new XRPLFaucetError(`The faucet account is undefined`), ) } - try { - // Check at regular interval if the address is enabled on the XRPL and funded - const updatedBalance = await getUpdatedBalance( - client, - classicAddress, - startingBalance, - ) + // Check at regular interval if the address is enabled on the XRPL and funded + const updatedBalance = await getUpdatedBalance( + client, + classicAddress, + startingBalance, + ) - if (updatedBalance > startingBalance) { - return { - wallet: walletToFund, - balance: updatedBalance, - } + if (updatedBalance > startingBalance) { + return { + wallet: walletToFund, + balance: updatedBalance, } - throw new XRPLFaucetError( - `Unable to fund address with faucet after waiting ${ - INTERVAL_SECONDS * MAX_ATTEMPTS - } seconds`, - ) - } catch (err) { - if (err instanceof Error) { - throw new XRPLFaucetError(err.message) - } - throw err } + throw new XRPLFaucetError( + `Unable to fund address with faucet after waiting ${ + INTERVAL_SECONDS * MAX_ATTEMPTS + } seconds`, + ) +} + +interface ErrorData { + body?: unknown + contentType?: string + statusCode: number } -async function processError(response: Response, body): Promise { +async function processError(response: Response): Promise { + const errorData: ErrorData = { + contentType: response.headers.get('Content-Type') ?? undefined, + statusCode: response.status, + } + const clone = response.clone() + try { + const body: unknown = await response.json() + errorData.body = body + } catch { + errorData.body = await clone.text() + } return Promise.reject( - new XRPLFaucetError( - `Request failed: ${JSON.stringify({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- json response could be anything - body: body || {}, - contentType: response.headers.get('Content-Type'), - statusCode: response.status, - })}`, - ), + new XRPLFaucetError(`Request failed: ${JSON.stringify(errorData)}`), ) } diff --git a/packages/xrpl/src/Wallet/index.ts b/packages/xrpl/src/Wallet/index.ts index c5ce5baca5..7f59dac9b0 100644 --- a/packages/xrpl/src/Wallet/index.ts +++ b/packages/xrpl/src/Wallet/index.ts @@ -3,33 +3,22 @@ import { mnemonicToSeedSync, validateMnemonic } from '@scure/bip39' import { wordlist } from '@scure/bip39/wordlists/english' import { bytesToHex } from '@xrplf/isomorphic/utils' import BigNumber from 'bignumber.js' -import { - classicAddressToXAddress, - isValidXAddress, - xAddressToClassicAddress, - encodeSeed, -} from 'ripple-address-codec' -import { - encodeForSigning, - encodeForMultisigning, - encode, -} from 'ripple-binary-codec' -import { - deriveAddress, - deriveKeypair, - generateSeed, - sign, -} from 'ripple-keypairs' +import { classicAddressToXAddress, encodeSeed } from 'ripple-address-codec' +import { encode } from 'ripple-binary-codec' +import { deriveAddress, deriveKeypair, generateSeed } from 'ripple-keypairs' import ECDSA from '../ECDSA' import { ValidationError } from '../errors' import { Transaction, validate } from '../models/transactions' +import { GlobalFlags } from '../models/transactions/common' +import { hasFlag } from '../models/utils' import { ensureClassicAddress } from '../sugar/utils' import { omitBy } from '../utils/collections' import { hashSignedTx } from '../utils/hashes/hashLedger' import { rfc1751MnemonicToKey } from './rfc1751' import { verifySignature } from './signer' +import { computeSignature } from './utils' const DEFAULT_ALGORITHM: ECDSA = ECDSA.ed25519 const DEFAULT_DERIVATION_PATH = "m/44'/144'/0'/0/0" @@ -250,6 +239,7 @@ export class Wallet { ) } + // eslint-disable-next-line n/no-sync -- Using async would break fromMnemonic; this rule should be disabled entirely later. const seed = mnemonicToSeedSync(mnemonic) const masterNode = HDKey.fromMasterSeed(seed) const node = masterNode.derive( @@ -367,6 +357,7 @@ export class Wallet { * @param this - Wallet instance. * @param transaction - A transaction to be signed offline. * @param multisign - Specify true/false to use multisign or actual address (classic/x-address) to make multisign tx request. + * The actual address is only needed in the case of regular key usage. * @returns A signed transaction. * @throws ValidationError if the transaction is already signed or does not encode/decode to same result. * @throws XrplError if the issued currency being signed is XRP ignoring case. @@ -381,7 +372,7 @@ export class Wallet { hash: string } { let multisignAddress: boolean | string = false - if (typeof multisign === 'string' && multisign.startsWith('X')) { + if (typeof multisign === 'string') { multisignAddress = multisign } else if (multisign) { multisignAddress = this.classicAddress @@ -407,12 +398,14 @@ export class Wallet { */ // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- validate does not accept Transaction type validate(tx as unknown as Record) + if (hasFlag(tx, GlobalFlags.tfInnerBatchTxn, 'tfInnerBatchTxn')) { + throw new ValidationError('Cannot sign a Batch inner transaction.') + } const txToSignAndEncode = { ...tx } - txToSignAndEncode.SigningPubKey = multisignAddress ? '' : this.publicKey - if (multisignAddress) { + txToSignAndEncode.SigningPubKey = '' const signer = { Account: multisignAddress, SigningPubKey: this.publicKey, @@ -424,6 +417,7 @@ export class Wallet { } txToSignAndEncode.Signers = [{ Signer: signer }] } else { + txToSignAndEncode.SigningPubKey = this.publicKey txToSignAndEncode.TxnSignature = computeSignature( txToSignAndEncode, this.privateKey, @@ -460,30 +454,6 @@ export class Wallet { } } -/** - * Signs a transaction with the proper signing encoding. - * - * @param tx - A transaction to sign. - * @param privateKey - A key to sign the transaction with. - * @param signAs - Multisign only. An account address to include in the Signer field. - * Can be either a classic address or an XAddress. - * @returns A signed transaction in the proper format. - */ -function computeSignature( - tx: Transaction, - privateKey: string, - signAs?: string, -): string { - if (signAs) { - const classicAddress = isValidXAddress(signAs) - ? xAddressToClassicAddress(signAs).classicAddress - : signAs - - return sign(encodeForMultisigning(tx, classicAddress), privateKey) - } - return sign(encodeForSigning(tx), privateKey) -} - /** * Remove trailing insignificant zeros for non-XRP Payment amount. * This resolves the serialization mismatch bug when encoding/decoding a non-XRP Payment transaction @@ -505,3 +475,14 @@ function removeTrailingZeros(tx: Transaction): void { tx.Amount.value = new BigNumber(tx.Amount.value).toString() } } + +export { signMultiBatch, combineBatchSigners } from './batchSigner' + +export { multisign, verifySignature } from './signer' + +export { authorizeChannel } from './authorizeChannel' + +export { + signLoanSetByCounterparty, + combineLoanSetCounterpartySigners, +} from './counterpartySigner' diff --git a/packages/xrpl/src/Wallet/signer.ts b/packages/xrpl/src/Wallet/signer.ts index 126e629cd7..205f64bc7d 100644 --- a/packages/xrpl/src/Wallet/signer.ts +++ b/packages/xrpl/src/Wallet/signer.ts @@ -1,13 +1,12 @@ -import { bytesToHex } from '@xrplf/isomorphic/utils' -import { BigNumber } from 'bignumber.js' -import { decodeAccountID } from 'ripple-address-codec' -import { decode, encode, encodeForSigning } from 'ripple-binary-codec' +import { encode, encodeForSigning } from 'ripple-binary-codec' import { verify } from 'ripple-keypairs' import { ValidationError } from '../errors' import { Signer } from '../models/common' import { Transaction, validate } from '../models/transactions' +import { compareSigners, getDecodedTransaction } from './utils' + /** * Takes several transactions with Signer fields (in object or blob form) and creates a * single transaction with all Signers that then gets signed and returned. @@ -121,43 +120,9 @@ function getTransactionWithAllSigners( // Signers must be sorted in the combined transaction - See compareSigners' documentation for more details const sortedSigners: Signer[] = transactions .flatMap((tx) => tx.Signers ?? []) - .sort(compareSigners) + .sort((signer1, signer2) => compareSigners(signer1.Signer, signer2.Signer)) return { ...transactions[0], Signers: sortedSigners } } -/** - * If presented in binary form, the Signers array must be sorted based on - * the numeric value of the signer addresses, with the lowest value first. - * (If submitted as JSON, the submit_multisigned method handles this automatically.) - * https://xrpl.org/multi-signing.html. - * - * @param left - A Signer to compare with. - * @param right - A second Signer to compare with. - * @returns 1 if left \> right, 0 if left = right, -1 if left \< right, and null if left or right are NaN. - */ -function compareSigners(left: Signer, right: Signer): number { - return addressToBigNumber(left.Signer.Account).comparedTo( - addressToBigNumber(right.Signer.Account), - ) -} - -const NUM_BITS_IN_HEX = 16 - -function addressToBigNumber(address: string): BigNumber { - const hex = bytesToHex(decodeAccountID(address)) - return new BigNumber(hex, NUM_BITS_IN_HEX) -} - -function getDecodedTransaction(txOrBlob: Transaction | string): Transaction { - if (typeof txOrBlob === 'object') { - // We need this to handle X-addresses in multisigning - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing - return decode(encode(txOrBlob)) as unknown as Transaction - } - - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing - return decode(txOrBlob) as unknown as Transaction -} - export { verifySignature, multisign } diff --git a/packages/xrpl/src/Wallet/utils.ts b/packages/xrpl/src/Wallet/utils.ts new file mode 100644 index 0000000000..42ac308d65 --- /dev/null +++ b/packages/xrpl/src/Wallet/utils.ts @@ -0,0 +1,102 @@ +import { bytesToHex } from '@xrplf/isomorphic/utils' +import BigNumber from 'bignumber.js' +import { + decodeAccountID, + isValidXAddress, + xAddressToClassicAddress, +} from 'ripple-address-codec' +import { + decode, + encode, + encodeForMultisigning, + encodeForSigning, +} from 'ripple-binary-codec' +import { sign } from 'ripple-keypairs' + +import { Transaction } from '../models' + +/** + * If presented in binary form, the Signers array must be sorted based on + * the numeric value of the signer addresses, with the lowest value first. + * (If submitted as JSON, the submit_multisigned method handles this automatically.) + * https://xrpl.org/multi-signing.html. + * + * @param left - A Signer to compare with. + * @param right - A second Signer to compare with. + * @returns 1 if left \> right, 0 if left = right, -1 if left \< right. + * @throws Error if either Account is null, undefined, or invalid. + */ +export function compareSigners( + left: T, + right: T, +): number { + if (!left.Account || !right.Account) { + throw new Error('compareSigners: Account cannot be null or undefined') + } + const result = addressToBigNumber(left.Account).comparedTo( + addressToBigNumber(right.Account), + ) + if (result === null) { + throw new Error( + 'compareSigners: Invalid account address comparison resulted in NaN', + ) + } + return result +} + +export const NUM_BITS_IN_HEX = 16 + +/** + * Converts an address to a BigNumber. + * + * @param address - The address to convert. + * @returns A BigNumber representing the address. + */ +export function addressToBigNumber(address: string): BigNumber { + const hex = bytesToHex(decodeAccountID(address)) + return new BigNumber(hex, NUM_BITS_IN_HEX) +} + +/** + * Decodes a transaction or transaction blob into a Transaction object. + * + * @param txOrBlob - A Transaction object or a hex string representing a transaction blob. + * @returns A Transaction object. + * @throws If the input is not a valid Transaction or transaction blob. + */ +export function getDecodedTransaction( + txOrBlob: Transaction | string, +): Transaction { + if (typeof txOrBlob === 'object') { + // We need this to handle X-addresses in multisigning + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing + return decode(encode(txOrBlob)) as unknown as Transaction + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We are casting here to get strong typing + return decode(txOrBlob) as unknown as Transaction +} + +/** + * Signs a transaction with the proper signing encoding. + * + * @param tx - A transaction to sign. + * @param privateKey - A key to sign the transaction with. + * @param signAs - Multisign only. An account address to include in the Signer field. + * Can be either a classic address or an XAddress. + * @returns A signed transaction in the proper format. + */ +export function computeSignature( + tx: Transaction, + privateKey: string, + signAs?: string, +): string { + if (signAs) { + const classicAddress = isValidXAddress(signAs) + ? xAddressToClassicAddress(signAs).classicAddress + : signAs + + return sign(encodeForMultisigning(tx, classicAddress), privateKey) + } + return sign(encodeForSigning(tx), privateKey) +} diff --git a/packages/xrpl/src/client/RequestManager.ts b/packages/xrpl/src/client/RequestManager.ts index 79712140ac..f91ef9c55f 100644 --- a/packages/xrpl/src/client/RequestManager.ts +++ b/packages/xrpl/src/client/RequestManager.ts @@ -175,6 +175,7 @@ export default class RequestManager { * @param response - The response to handle. * @throws ResponseFormatError if the response format is invalid, RippledError if rippled returns an error. */ + // eslint-disable-next-line complexity -- handling a response is complex public handleResponse( response: Partial | ErrorResponse>, ): void { @@ -195,7 +196,9 @@ export default class RequestManager { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- We know this must be true const errorResponse = response as Partial const error = new RippledError( - errorResponse.error_message ?? errorResponse.error, + errorResponse.error_message ?? + errorResponse.error_exception ?? + errorResponse.error, errorResponse, ) this.reject(response.id, error) diff --git a/packages/xrpl/src/client/connection.ts b/packages/xrpl/src/client/connection.ts index 3214b557e2..54ad7a288f 100644 --- a/packages/xrpl/src/client/connection.ts +++ b/packages/xrpl/src/client/connection.ts @@ -301,7 +301,18 @@ export class Connection extends EventEmitter { >(request, timeout ?? this.config.timeout) this.trace('send', message) websocketSendAsync(this.ws, message).catch((error) => { - this.requestManager.reject(id, error) + try { + this.requestManager.reject(id, error) + } catch (err) { + if (err instanceof XrplError) { + this.trace( + 'send', + `send errored after connection was closed: ${err.toString()}`, + ) + } else { + this.trace('send', String(err)) + } + } }) return responsePromise @@ -349,7 +360,6 @@ export class Connection extends EventEmitter { try { this.requestManager.handleResponse(data) } catch (error) { - // eslint-disable-next-line max-depth -- okay here if (error instanceof Error) { this.emit('error', 'badMessage', error.message, message) } else { diff --git a/packages/xrpl/src/client/index.ts b/packages/xrpl/src/client/index.ts index 722b169f2a..bef7d06e76 100644 --- a/packages/xrpl/src/client/index.ts +++ b/packages/xrpl/src/client/index.ts @@ -40,14 +40,19 @@ import type { MarkerRequest, MarkerResponse, SubmitResponse, + SimulateRequest, } from '../models/methods' import type { BookOffer, BookOfferCurrency } from '../models/methods/bookOffers' +import { + SimulateBinaryResponse, + SimulateJsonResponse, +} from '../models/methods/simulate' import type { EventTypes, OnEventToListenerMap, } from '../models/methods/subscribe' import type { SubmittableTransaction } from '../models/transactions' -import { setTransactionFlagsToNumber } from '../models/utils/flags' +import { convertTxFlagsToNumber } from '../models/utils/flags' import { ensureClassicAddress, submitRequest, @@ -58,10 +63,12 @@ import { import { setValidAddresses, setNextValidSequenceNumber, - calculateFeePerTransactionType, setLatestValidatedLedgerSequence, checkAccountDeleteBlockers, txNeedsNetworkID, + autofillBatchTxn, + handleDeliverMax, + getTransactionFee, } from '../sugar/autofill' import { formatBalances } from '../sugar/balances' import { @@ -125,16 +132,16 @@ type RequestNextPageType = type RequestNextPageReturnMap = T extends AccountChannelsRequest ? AccountChannelsResponse : T extends AccountLinesRequest - ? AccountLinesResponse - : T extends AccountObjectsRequest - ? AccountObjectsResponse - : T extends AccountOffersRequest - ? AccountOffersResponse - : T extends AccountTxRequest - ? AccountTxResponse - : T extends LedgerDataRequest - ? LedgerDataResponse - : never + ? AccountLinesResponse + : T extends AccountObjectsRequest + ? AccountObjectsResponse + : T extends AccountOffersRequest + ? AccountOffersResponse + : T extends AccountTxRequest + ? AccountTxResponse + : T extends LedgerDataRequest + ? LedgerDataResponse + : never /** * Get the response key / property name that contains the listed data for a @@ -469,7 +476,7 @@ class Client extends EventEmitter { * If limit is not provided, fetches all data over multiple requests. * NOTE: This may return much more than needed. Set limit when possible. */ - const countTo: number = request.limit == null ? Infinity : request.limit + const countTo: number = request.limit ?? Infinity let count = 0 let marker: unknown = request.marker const results: U[] = [] @@ -656,8 +663,6 @@ class Client extends EventEmitter { * @returns The autofilled transaction. * @throws ValidationError If Amount and DeliverMax fields are not identical in a Payment Transaction */ - - // eslint-disable-next-line complexity -- handling Payment transaction API v2 requires more logic public async autofill( transaction: T, signersCount?: number, @@ -665,17 +670,15 @@ class Client extends EventEmitter { const tx = { ...transaction } setValidAddresses(tx) - setTransactionFlagsToNumber(tx) + tx.Flags = convertTxFlagsToNumber(tx) const promises: Array> = [] - if (tx.NetworkID == null) { - tx.NetworkID = txNeedsNetworkID(this) ? this.networkID : undefined - } + tx.NetworkID ??= txNeedsNetworkID(this) ? this.networkID : undefined if (tx.Sequence == null) { promises.push(setNextValidSequenceNumber(this, tx)) } if (tx.Fee == null) { - promises.push(calculateFeePerTransactionType(this, tx, signersCount)) + promises.push(getTransactionFee(this, tx, signersCount)) } if (tx.LastLedgerSequence == null) { promises.push(setLatestValidatedLedgerSequence(this, tx)) @@ -683,38 +686,51 @@ class Client extends EventEmitter { if (tx.TransactionType === 'AccountDelete') { promises.push(checkAccountDeleteBlockers(this, tx)) } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property - // @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level + if (tx.TransactionType === 'Batch') { + promises.push(autofillBatchTxn(this, tx)) + } if (tx.TransactionType === 'Payment' && tx.DeliverMax != null) { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- This is a valid null check for Amount - if (tx.Amount == null) { - // If only DeliverMax is provided, use it to populate the Amount field - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property - // @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- DeliverMax is a known RPC-level property - tx.Amount = tx.DeliverMax - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property - // @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- This is a valid null check for Amount - if (tx.Amount != null && tx.Amount !== tx.DeliverMax) { - return Promise.reject( - new ValidationError( - 'PaymentTransaction: Amount and DeliverMax fields must be identical when both are provided', - ), - ) - } - - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- ignore type-assertions on the DeliverMax property - // @ts-expect-error -- DeliverMax property exists only at the RPC level, not at the protocol level - delete tx.DeliverMax + handleDeliverMax(tx) } return Promise.all(promises).then(() => tx) } + /** + * Simulates an unsigned transaction. + * Steps performed on a transaction: + * 1. Autofill. + * 2. Sign & Encode. + * 3. Submit. + * + * @category Core + * + * @param transaction - A transaction to autofill, sign & encode, and submit. + * @param opts - (Optional) Options used to sign and submit a transaction. + * @param opts.binary - If true, return the metadata in a binary encoding. + * + * @returns A promise that contains SimulateResponse. + * @throws RippledError if the simulate request fails. + */ + + public async simulate( + transaction: SubmittableTransaction | string, + opts?: { + // If true, return the binary-encoded representation of the results. + binary?: Binary + }, + ): Promise< + Binary extends true ? SimulateBinaryResponse : SimulateJsonResponse + > { + // send request + const binary = opts?.binary ?? false + const request: SimulateRequest = + typeof transaction === 'string' + ? { command: 'simulate', tx_blob: transaction, binary } + : { command: 'simulate', tx_json: transaction, binary } + return this.request(request) + } + /** * Submits a signed/unsigned transaction. * Steps performed on a transaction: @@ -804,7 +820,7 @@ class Client extends EventEmitter { * Under the hood, `submit` will call `client.autofill` by default, and because we've passed in a `Wallet` it * Will also sign the transaction for us before submitting the signed transaction binary blob to the ledger. * - * This is similar to `submitAndWait` which does all of the above, but also waits to see if the transaction has been validated. + * This is similar to `submit`, which does all of the above, but also waits to see if the transaction has been validated. * @param transaction - A transaction to autofill, sign & encode, and submit. * @param opts - (Optional) Options used to sign and submit a transaction. * @param opts.autofill - If true, autofill a transaction. @@ -845,6 +861,12 @@ class Client extends EventEmitter { const response = await submitRequest(this, signedTx, opts?.failHard) + if (response.result.engine_result.startsWith('tem')) { + throw new XrplError( + `Transaction failed, ${response.result.engine_result}: ${response.result.engine_result_message}`, + ) + } + const txHash = hashes.hashSignedTx(signedTx) return waitForFinalTransactionOutcome( this, @@ -860,6 +882,7 @@ class Client extends EventEmitter { * @param transaction - A {@link Transaction} in JSON format * @param signersCount - The expected number of signers for this transaction. * Only used for multisigned transactions. + * @returns The prepared transaction with required fields autofilled. * @deprecated Use autofill instead, provided for users familiar with v1 */ public async prepareTransaction( @@ -1127,7 +1150,7 @@ class Client extends EventEmitter { * const newWallet = Wallet.generate() * const { balance, wallet } = await client.fundWallet(newWallet, { * amount: '10', - * faucetHost: 'https://custom-faucet.example.com', + * faucetHost: 'custom-faucet.example.com', * faucetPath: '/accounts' * }) * console.log(`Sent 10 XRP to wallet: ${address} from the given faucet. Resulting balance: ${balance} XRP`) @@ -1137,6 +1160,20 @@ class Client extends EventEmitter { * } * ``` * + * Example 3: Fund wallet using a local faucet server + * + * To interact with a faucet server running on http://, use the faucetProtocol option: + * + * ```ts + * const newWallet = Wallet.generate() + * const { balance, wallet } = await client.fundWallet(newWallet, { + * amount: '10', + * faucetHost: 'localhost:8000', + * faucetPath: '/accounts', + * faucetProtocol: 'http' + * }) + * ``` + * * @param wallet - An existing XRPL Wallet to fund. If undefined or null, a new Wallet will be created. * @param options - See below. * @param options.faucetHost - A custom host for a faucet server. On devnet, @@ -1144,6 +1181,8 @@ class Client extends EventEmitter { * attempt to determine the correct server automatically. In other environments, * or if you would like to customize the faucet host in devnet or testnet, * you should provide the host using this option. + * @param options.faucetProtocol - The protocol to use for the faucet server ('http' or 'https'). + * Defaults to 'https'. Use 'http' to interact with a local faucet server running on http://. * @param options.faucetPath - A custom path for a faucet server. On devnet, * testnet, AMM devnet, and HooksV3 testnet, `fundWallet` will * attempt to determine the correct path automatically. In other environments, diff --git a/packages/xrpl/src/client/partialPayment.ts b/packages/xrpl/src/client/partialPayment.ts index 4b5968c71e..e039f76584 100644 --- a/packages/xrpl/src/client/partialPayment.ts +++ b/packages/xrpl/src/client/partialPayment.ts @@ -7,20 +7,32 @@ import type { TransactionV1Stream, TxResponse, } from '..' -import type { Amount, APIVersion, DEFAULT_API_VERSION } from '../models/common' +import type { + Amount, + IssuedCurrency, + APIVersion, + DEFAULT_API_VERSION, + MPTAmount, +} from '../models/common' import type { AccountTxTransaction, RequestResponseMap, } from '../models/methods' import { AccountTxVersionResponseMap } from '../models/methods/accountTx' import { BaseRequest, BaseResponse } from '../models/methods/baseMethod' -import { PaymentFlags, Transaction } from '../models/transactions' +import { PaymentFlags, Transaction, isMPTAmount } from '../models/transactions' import type { TransactionMetadata } from '../models/transactions/metadata' import { isFlagEnabled } from '../models/utils' const WARN_PARTIAL_PAYMENT_CODE = 2001 -function amountsEqual(amt1: Amount, amt2: Amount): boolean { +/* eslint-disable complexity -- check different token types */ +/* eslint-disable @typescript-eslint/consistent-type-assertions -- known currency type */ +function amountsEqual( + amt1: Amount | MPTAmount, + amt2: Amount | MPTAmount, +): boolean { + // Compare XRP if (typeof amt1 === 'string' && typeof amt2 === 'string') { return amt1 === amt2 } @@ -29,16 +41,34 @@ function amountsEqual(amt1: Amount, amt2: Amount): boolean { return false } + // Compare MPTs + if (isMPTAmount(amt1) && isMPTAmount(amt2)) { + const aValue = new BigNumber(amt1.value) + const bValue = new BigNumber(amt2.value) + + return ( + amt1.mpt_issuance_id === amt2.mpt_issuance_id && aValue.isEqualTo(bValue) + ) + } + + if (isMPTAmount(amt1) || isMPTAmount(amt2)) { + return false + } + + // Compare issued currency (IOU) const aValue = new BigNumber(amt1.value) const bValue = new BigNumber(amt2.value) return ( - amt1.currency === amt2.currency && - amt1.issuer === amt2.issuer && + (amt1 as IssuedCurrency).currency === (amt2 as IssuedCurrency).currency && + (amt1 as IssuedCurrency).issuer === (amt2 as IssuedCurrency).issuer && aValue.isEqualTo(bValue) ) } +/* eslint-enable complexity */ +/* eslint-enable @typescript-eslint/consistent-type-assertions */ +/* eslint-disable complexity -- required here for multiple checks */ function isPartialPayment( tx?: Transaction, metadata?: TransactionMetadata | string, @@ -67,10 +97,8 @@ function isPartialPayment( } const delivered = meta.delivered_amount - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- DeliverMax is a valid field on Payment response - // @ts-expect-error -- DeliverMax is a valid field on Payment response - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- DeliverMax is a valid field on Payment response - const amount = tx.DeliverMax + + const amount = tx.DeliverMax ?? tx.Amount if (delivered === undefined) { return false @@ -78,6 +106,7 @@ function isPartialPayment( return !amountsEqual(delivered, amount) } +/* eslint-enable complexity */ function txHasPartialPayment(response: TxResponse): boolean { return isPartialPayment(response.result.tx_json, response.result.meta) diff --git a/packages/xrpl/src/index.ts b/packages/xrpl/src/index.ts index fdf34b844b..83cb825a7a 100644 --- a/packages/xrpl/src/index.ts +++ b/packages/xrpl/src/index.ts @@ -9,10 +9,8 @@ export { default as ECDSA } from './ECDSA' export * from './errors' export { FundingOptions } from './Wallet/fundWallet' -export { Wallet } from './Wallet' +export * from './Wallet' export { walletFromSecretNumbers } from './Wallet/walletFromSecretNumbers' export { keyToRFC1751Mnemonic, rfc1751MnemonicToKey } from './Wallet/rfc1751' - -export * from './Wallet/signer' diff --git a/packages/xrpl/src/models/common/index.ts b/packages/xrpl/src/models/common/index.ts index 98298d978f..4297f47252 100644 --- a/packages/xrpl/src/models/common/index.ts +++ b/packages/xrpl/src/models/common/index.ts @@ -14,14 +14,26 @@ export interface IssuedCurrency { issuer: string } -export type Currency = IssuedCurrency | XRP +export interface MPTCurrency { + mpt_issuance_id: string +} + +export type Currency = IssuedCurrency | MPTCurrency | XRP export interface IssuedCurrencyAmount extends IssuedCurrency { value: string } +export interface MPTAmount { + mpt_issuance_id: string + value: string +} + +// TODO: add MPTAmount to Amount once MPTv2 is released export type Amount = IssuedCurrencyAmount | string +export type ClawbackAmount = IssuedCurrencyAmount | MPTAmount + export interface Balance { currency: string issuer?: string @@ -157,6 +169,16 @@ export interface AuthAccount { } } +export interface AuthorizeCredential { + Credential: { + /** The issuer of the credential. */ + Issuer: string + + /** A hex-encoded value to identify the type of credential from the issuer. */ + CredentialType: string + } +} + export interface XChainBridge { LockingChainDoor: string LockingChainIssue: Currency @@ -196,3 +218,111 @@ export interface PriceData { Scale?: number } } + +/** + * {@link MPTokenMetadata} object as per the XLS-89 standard. + * Use {@link encodeMPTokenMetadata} utility function to convert to a compact hex string for on-ledger storage. + * Use {@link decodeMPTokenMetadata} utility function to convert from a hex string to this format. + */ +export interface MPTokenMetadata { + /** + * Ticker symbol used to represent the token. + * Uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended. + * + * @example "TBILL" + */ + ticker: string + + /** + * Display name of the token. + * Any UTF-8 string. + * + * @example "T-Bill Yield Token" + */ + name: string + + /** + * Short description of the token. + * Any UTF-8 string. + * + * @example "A yield-bearing stablecoin backed by short-term U.S. Treasuries" + */ + desc?: string + + /** + * URI to the token icon. + * Can be a `hostname/path` (HTTPS assumed) or full URI for other protocols (e.g., ipfs://). + * + * @example "example.org/token-icon.png" or "ipfs://QmXxxx" + */ + icon: string + + /** + * Top-level classification of token purpose. + * Allowed values: "rwa", "memes", "wrapped", "gaming", "defi", "other" + * + * @example "rwa" + */ + asset_class: string + + /** + * Optional subcategory of the asset class. + * Required if `asset_class` is "rwa". + * Allowed values: "stablecoin", "commodity", "real_estate", "private_credit", "equity", "treasury", "other" + * + * @example "treasury" + */ + asset_subclass?: string + + /** + * The name of the issuer account. + * Any UTF-8 string. + * + * @example "Example Yield Co." + */ + issuer_name: string + + /** + * List of related URIs (site, dashboard, social media, documentation, etc.). + * Each URI object contains the link, its category, and a human-readable title. + */ + uris?: MPTokenMetadataUri[] + + /** + * Freeform field for key token details like interest rate, maturity date, term, or other relevant info. + * Can be any valid JSON object or UTF-8 string. + * + * @example { "interest_rate": "5.00%", "maturity_date": "2045-06-30" } + */ + additional_info?: string | Record +} + +/** + * {@link MPTokenMetadataUri} object as per the XLS-89 standard. + * Used within the `uris` array of {@link MPTokenMetadata}. + */ +export interface MPTokenMetadataUri { + /** + * URI to the related resource. + * Can be a `hostname/path` (HTTPS assumed) or full URI for other protocols (e.g., ipfs://). + * + * @example "exampleyield.com/tbill" or "ipfs://QmXxxx" + */ + uri: string + + /** + * The category of the link. + * Allowed values: "website", "social", "docs", "other" + * + * @example "website" + */ + category: string + + /** + * A human-readable label for the link. + * Any UTF-8 string. + * + * @example "Product Page" + */ + title: string +} diff --git a/packages/xrpl/src/models/index.ts b/packages/xrpl/src/models/index.ts index 5c98faf82e..22a9a9a5fe 100644 --- a/packages/xrpl/src/models/index.ts +++ b/packages/xrpl/src/models/index.ts @@ -8,10 +8,16 @@ */ export * as LedgerEntry from './ledger' export { - setTransactionFlagsToNumber, parseAccountRootFlags, + setTransactionFlagsToNumber, + convertTxFlagsToNumber, parseTransactionFlags, } from './utils/flags' +export { + validateMPTokenMetadata, + decodeMPTokenMetadata, + encodeMPTokenMetadata, +} from './utils/mptokenMetadata' export * from './methods' export * from './transactions' export * from './common' diff --git a/packages/xrpl/src/models/ledger/AccountRoot.ts b/packages/xrpl/src/models/ledger/AccountRoot.ts index 3739c5f75d..fdcc5e0f86 100644 --- a/packages/xrpl/src/models/ledger/AccountRoot.ts +++ b/packages/xrpl/src/models/ledger/AccountRoot.ts @@ -73,7 +73,7 @@ export default interface AccountRoot extends BaseLedgerEntry, HasPreviousTxnID { /** Total NFTokens this account's issued that have been burned. This number is always equal or less than MintedNFTokens. */ BurnedNFTokens?: number /** The sequence that the account first minted an NFToken */ - FirstNFTSequence: number + FirstNFTokenSequence?: number /** Total NFTokens have been minted by and on behalf of this account. */ MintedNFTokens?: number /** Another account that can mint NFTokens on behalf of this account. */ @@ -146,6 +146,11 @@ export interface AccountRootFlagsInterface { * This address can claw back issued IOUs. Once enabled, cannot be disabled. */ lsfAllowTrustLineClawback?: boolean + + /** + * Allow IOUs to be used as escrow amounts for an issuer + */ + lsfAllowTrustLineLocking?: boolean } export enum AccountRootFlags { @@ -210,4 +215,9 @@ export enum AccountRootFlags { * This address can claw back issued IOUs. Once enabled, cannot be disabled. */ lsfAllowTrustLineClawback = 0x80000000, + /** + * If the issuer's account does not have the lsfAllowTrustLineLocking flag set, + * then Escrow ledger-objects cannot be created with such IOUs. + */ + lsfAllowTrustLineLocking = 0x40000000, } diff --git a/packages/xrpl/src/models/ledger/Amendments.ts b/packages/xrpl/src/models/ledger/Amendments.ts index f80e207964..b3971e869f 100644 --- a/packages/xrpl/src/models/ledger/Amendments.ts +++ b/packages/xrpl/src/models/ledger/Amendments.ts @@ -25,8 +25,7 @@ export interface Majority { * @category Ledger Entries */ export default interface Amendments - extends BaseLedgerEntry, - HasOptionalPreviousTxnID { + extends BaseLedgerEntry, HasOptionalPreviousTxnID { LedgerEntryType: 'Amendments' /** * Array of 256-bit amendment IDs for all currently-enabled amendments. If diff --git a/packages/xrpl/src/models/ledger/Credential.ts b/packages/xrpl/src/models/ledger/Credential.ts new file mode 100644 index 0000000000..50cf83ba0b --- /dev/null +++ b/packages/xrpl/src/models/ledger/Credential.ts @@ -0,0 +1,47 @@ +import { GlobalFlagsInterface } from '../transactions/common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +export interface CredentialFlags extends GlobalFlagsInterface { + lsfAccepted?: boolean +} + +/** + * + * A Credential object describes a credential, similar to a passport, which is an issuable identity verifier + * that can be used as a prerequisite for other transactions + * + * @category Ledger Entries + */ +export default interface Credential extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'Credential' + /** + * A bit-map of boolean flags + */ + Flags: number | CredentialFlags + + /** The account that the credential is for. */ + Subject: string + + /** The issuer of the credential. */ + Issuer: string + + /** A hex-encoded value to identify the type of credential from the issuer. */ + CredentialType: string + + /** A hint indicating which page of the subject's owner directory links to this object, + * in case the directory consists of multiple pages. + */ + SubjectNode: string + + /** A hint indicating which page of the issuer's owner directory links to this object, + * in case the directory consists of multiple pages. + */ + IssuerNode: string + + /** Credential expiration. */ + Expiration?: number + + /** Additional data about the credential (such as a link to the VC document). */ + URI?: string +} diff --git a/packages/xrpl/src/models/ledger/Delegate.ts b/packages/xrpl/src/models/ledger/Delegate.ts new file mode 100644 index 0000000000..38ca92b5ce --- /dev/null +++ b/packages/xrpl/src/models/ledger/Delegate.ts @@ -0,0 +1,39 @@ +import { Permission } from '../transactions' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +/** + * This object represents a set of permissions that an account has delegated to another account. + * + * @category Ledger Entries + */ +export default interface Delegate extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'Delegate' + + /** + * The account that wants to authorize another account. + */ + Account: string + + /** + * The authorized account. + */ + Authorize: string + + /** + * The transaction permissions that the account has access to. + */ + Permissions: Permission[] + + /** + * A hint indicating which page of the sender's owner directory links to this object, + * in case the directory consists of multiple pages. + */ + OwnerNode: string + + /** + * A bit-map of boolean flags. No flags are defined for the Delegate object + * type, so this value is always 0. + */ + Flags: 0 +} diff --git a/packages/xrpl/src/models/ledger/DepositPreauth.ts b/packages/xrpl/src/models/ledger/DepositPreauth.ts index 70ba7d24a3..f93db62076 100644 --- a/packages/xrpl/src/models/ledger/DepositPreauth.ts +++ b/packages/xrpl/src/models/ledger/DepositPreauth.ts @@ -1,3 +1,5 @@ +import { AuthorizeCredential } from '../common' + import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' /** @@ -7,13 +9,10 @@ import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' * @category Ledger Entries */ export default interface DepositPreauth - extends BaseLedgerEntry, - HasPreviousTxnID { + extends BaseLedgerEntry, HasPreviousTxnID { LedgerEntryType: 'DepositPreauth' /** The account that granted the preauthorization. */ Account: string - /** The account that received the preauthorization. */ - Authorize: string /** * A bit-map of boolean flags. No flags are defined for DepositPreauth * objects, so this value is always 0. @@ -24,4 +23,8 @@ export default interface DepositPreauth * object, in case the directory consists of multiple pages. */ OwnerNode: string + /** The account that received the preauthorization. */ + Authorize?: string + /** The credential(s) that received the preauthorization. */ + AuthorizeCredentials?: AuthorizeCredential[] } diff --git a/packages/xrpl/src/models/ledger/DirectoryNode.ts b/packages/xrpl/src/models/ledger/DirectoryNode.ts index ea9d240532..4cabf1627b 100644 --- a/packages/xrpl/src/models/ledger/DirectoryNode.ts +++ b/packages/xrpl/src/models/ledger/DirectoryNode.ts @@ -7,8 +7,7 @@ import { BaseLedgerEntry, HasOptionalPreviousTxnID } from './BaseLedgerEntry' * @category Ledger Entries */ export default interface DirectoryNode - extends BaseLedgerEntry, - HasOptionalPreviousTxnID { + extends BaseLedgerEntry, HasOptionalPreviousTxnID { LedgerEntryType: 'DirectoryNode' /** * A bit-map of boolean flags enabled for this directory. Currently, the @@ -45,4 +44,7 @@ export default interface DirectoryNode TakerGetsCurrency?: string /** The issuer of the TakerGets amount from the offers in this directory. */ TakerGetsIssuer?: string + + /** The domain that the offer directory is a part of. */ + DomainID?: string } diff --git a/packages/xrpl/src/models/ledger/Escrow.ts b/packages/xrpl/src/models/ledger/Escrow.ts index 42307f24de..f51ccea9f9 100644 --- a/packages/xrpl/src/models/ledger/Escrow.ts +++ b/packages/xrpl/src/models/ledger/Escrow.ts @@ -19,7 +19,8 @@ export default interface Escrow extends BaseLedgerEntry, HasPreviousTxnID { * successful. */ Destination: string - /** The amount of XRP, in drops, to be delivered by the held payment. */ + /** The amount to be delivered by the held payment. Can represent XRP, an IOU token, or an MPT. + * Must always be a positive value. */ Amount: string /** * A PREIMAGE-SHA-256 crypto-condition, as hexadecimal. If present, the @@ -61,4 +62,16 @@ export default interface Escrow extends BaseLedgerEntry, HasPreviousTxnID { * this object, in case the directory consists of multiple pages. */ DestinationNode?: string + + /** + * The transfer rate or fee at which the funds are escrowed, stored at creation + * and used during settlement. Applicable to both IOUs and MPTs. + */ + TransferRate?: number + + /** + * The ledger index of the issuer's directory node associated with the Escrow. + * Used when the issuer is neither the source nor destination account. + */ + IssuerNode?: number } diff --git a/packages/xrpl/src/models/ledger/FeeSettings.ts b/packages/xrpl/src/models/ledger/FeeSettings.ts index 25de4b8820..de44528c17 100644 --- a/packages/xrpl/src/models/ledger/FeeSettings.ts +++ b/packages/xrpl/src/models/ledger/FeeSettings.ts @@ -27,8 +27,7 @@ export interface FeeSettingsPostAmendmentFields { } export interface FeeSettingsBase - extends BaseLedgerEntry, - HasOptionalPreviousTxnID { + extends BaseLedgerEntry, HasOptionalPreviousTxnID { LedgerEntryType: 'FeeSettings' /** * A bit-map of boolean flags for this object. No flags are defined for this type. diff --git a/packages/xrpl/src/models/ledger/LedgerEntry.ts b/packages/xrpl/src/models/ledger/LedgerEntry.ts index 1f8f3ec32b..abaa50ad07 100644 --- a/packages/xrpl/src/models/ledger/LedgerEntry.ts +++ b/packages/xrpl/src/models/ledger/LedgerEntry.ts @@ -3,18 +3,24 @@ import Amendments from './Amendments' import AMM from './AMM' import Bridge from './Bridge' import Check from './Check' +import Credential from './Credential' +import Delegate from './Delegate' import DepositPreauth from './DepositPreauth' import DirectoryNode from './DirectoryNode' import Escrow from './Escrow' import FeeSettings from './FeeSettings' import LedgerHashes from './LedgerHashes' +import Loan from './Loan' +import LoanBroker from './LoanBroker' import NegativeUNL from './NegativeUNL' import Offer from './Offer' import Oracle from './Oracle' import PayChannel from './PayChannel' +import PermissionedDomain from './PermissionedDomain' import RippleState from './RippleState' import SignerList from './SignerList' import Ticket from './Ticket' +import Vault from './Vault' import XChainOwnedClaimID from './XChainOwnedClaimID' import XChainOwnedCreateAccountClaimID from './XChainOwnedCreateAccountClaimID' @@ -24,18 +30,24 @@ type LedgerEntry = | AMM | Bridge | Check + | Credential + | Delegate | DepositPreauth | DirectoryNode | Escrow | FeeSettings | LedgerHashes + | Loan + | LoanBroker | NegativeUNL | Offer | Oracle | PayChannel + | PermissionedDomain | RippleState | SignerList | Ticket + | Vault | XChainOwnedClaimID | XChainOwnedCreateAccountClaimID @@ -45,20 +57,28 @@ type LedgerEntryFilter = | 'amm' | 'bridge' | 'check' + | 'credential' + | 'delegate' | 'deposit_preauth' | 'did' | 'directory' | 'escrow' | 'fee' | 'hashes' + | 'loan' + | 'loan_broker' + | 'mpt_issuance' + | 'mptoken' | 'nft_offer' | 'nft_page' | 'offer' | 'oracle' | 'payment_channel' + | 'permissioned_domain' | 'signer_list' | 'state' | 'ticket' + | 'vault' | 'xchain_owned_create_account_claim_id' | 'xchain_owned_claim_id' diff --git a/packages/xrpl/src/models/ledger/Loan.ts b/packages/xrpl/src/models/ledger/Loan.ts new file mode 100644 index 0000000000..cd55de3b53 --- /dev/null +++ b/packages/xrpl/src/models/ledger/Loan.ts @@ -0,0 +1,162 @@ +import { Account, XRPLNumber } from '../transactions/common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +/** + * A Loan ledger entry captures various Loan terms on-chain. It is an agreement between the Borrower and the loan issuer. + * + * @category Ledger Entries + */ +export default interface Loan extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'Loan' + + /** + * Ledger object flags. + */ + Flags: number + + /** + * The sequence number of the Loan. + */ + LoanSequence: number + + /** + * Identifies the page where this item is referenced in the Borrower owner's directory. + */ + OwnerNode: string + + /** + * Identifies the page where this item is referenced in the LoanBrokers owner's directory. + */ + LoanBrokerNode: string + + /** + * The ID of the LoanBroker associated with this Loan Instance. + */ + LoanBrokerID: string + + /** + * The address of the account that is the borrower. + */ + Borrower: Account + + /** + * A nominal fee amount paid to the LoanBroker.Owner when the Loan is created. + */ + LoanOriginationFee?: XRPLNumber + + /** + * A nominal funds amount paid to the LoanBroker.Owner with every Loan payment. + */ + LoanServiceFee?: XRPLNumber + + /** + * A nominal funds amount paid to the LoanBroker.Owner when a payment is late. + */ + LatePaymentFee?: XRPLNumber + + /** + * A nominal funds amount paid to the LoanBroker.Owner when a full payment is made. + */ + ClosePaymentFee?: XRPLNumber + + /** + * A fee charged on over-payments in 1/10th basis points. Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + OverpaymentFee?: XRPLNumber + + /** + * Annualized interest rate of the Loan in 1/10th basis points. + */ + InterestRate?: number + + /** + * A premium is added to the interest rate for late payments in 1/10th basis points. + * Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + LateInterestRate?: number + + /** + * An interest rate charged for repaying the Loan early in 1/10th basis points. + * Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + CloseInterestRate?: number + + /** + * An interest rate charged on over-payments in 1/10th basis points. Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + OverpaymentInterestRate?: number + + /** + * The timestamp of when the Loan started Ripple Epoch. + */ + StartDate: number + + /** + * Number of seconds between Loan payments. + */ + PaymentInterval: number + + /** + * The number of seconds after the Payment Due Date that the Loan can be Defaulted. + */ + GracePeriod: number + + /** + * The timestamp of when the previous payment was made in Ripple Epoch. + */ + PreviousPaymentDueDate?: number + + /** + * The timestamp of when the next payment is due in Ripple Epoch. + */ + NextPaymentDueDate: number + + /** + * The number of payments remaining on the Loan. + */ + PaymentRemaining: number + + /** + * The total outstanding value of the Loan, including all fees and interest. + */ + TotalValueOutstanding: XRPLNumber + + /** + * The principal amount requested by the Borrower. + */ + PrincipalOutstanding: XRPLNumber + + /** + * The remaining Management Fee owed to the LoanBroker. + */ + ManagementFeeOutstanding?: XRPLNumber + + /** + * The calculated periodic payment amount for each payment interval. + */ + PeriodicPayment: XRPLNumber + + /** + * The scale factor that ensures all computed amounts are rounded to the same number of decimal places. + * It is determined based on the total loan value at creation time. + */ + LoanScale?: number +} + +export enum LoanFlags { + /** + * If set, indicates that the Loan is defaulted. + */ + lsfLoanDefault = 0x00010000, + + /** + * If set, indicates that the Loan is impaired. + */ + lsfLoanImpaired = 0x00020000, + + /** + * If set, indicates that the Loan supports overpayments. + */ + lsfLoanOverpayment = 0x00040000, +} diff --git a/packages/xrpl/src/models/ledger/LoanBroker.ts b/packages/xrpl/src/models/ledger/LoanBroker.ts new file mode 100644 index 0000000000..b5935adcd7 --- /dev/null +++ b/packages/xrpl/src/models/ledger/LoanBroker.ts @@ -0,0 +1,95 @@ +import { Account, XRPLNumber } from '../transactions/common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +/** + * The LoanBroker object captures attributes of the Lending Protocol. + * + * @category Ledger Entries + */ +export default interface LoanBroker extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'LoanBroker' + + /** + * Ledger object flags. + */ + Flags: number + + /** + * The transaction sequence number of LoanBrokerSet transaction that created this LoanBroker object. + */ + Sequence: number + + /** + * A sequential identifier for Loan objects, incremented each time a new Loan is created by this LoanBroker instance. + */ + LoanSequence: number + + /** + * Identifies the page where this item is referenced in the owner's directory. + */ + OwnerNode: string + + /** + * Identifies the page where this item is referenced in the Vault's pseudo-account owner's directory. + */ + VaultNode: string + + /** + * The ID of the Vault object associated with this Lending Protocol Instance. + */ + VaultID: string + + /** + * The address of the LoanBroker pseudo-account. + */ + Account: Account + + /** + * The address of the Loan Broker account. + */ + Owner: Account + + /** + * The number of active Loans issued by the LoanBroker. + */ + OwnerCount?: number + + /** + * Arbitrary metadata in hex format. The field is limited to 256 bytes. + */ + Data?: string + + /** + * The 1/10th basis point fee charged by the Lending Protocol. Valid values are between 0 and 10000 inclusive. + * A value of 1 is equivalent to 1/10 bps or 0.001% + */ + ManagementFeeRate?: number + + /** + * The total asset amount the protocol owes the Vault, including interest. + */ + DebtTotal?: XRPLNumber + + /** + * The maximum amount the protocol can owe the Vault. The default value of 0 means there is no limit to the debt. + */ + DebtMaximum: XRPLNumber + + /** + * The total amount of first-loss capital deposited into the Lending Protocol. + */ + CoverAvailable?: XRPLNumber + + /** + * The 1/10th basis point of the DebtTotal that the first loss capital must cover. + * Valid values are between 0 and 100000 inclusive. A value of 1 is equivalent to 1/10 bps or 0.001%. + */ + CoverRateMinimum?: number + + /** + * The 1/10th basis point of minimum required first loss capital that is liquidated to cover a Loan default. + * Valid values are between 0 and 100000 inclusive. A value of 1 is equivalent to 1/10 bps or 0.001%. + */ + CoverRateLiquidation?: number +} diff --git a/packages/xrpl/src/models/ledger/MPToken.ts b/packages/xrpl/src/models/ledger/MPToken.ts new file mode 100644 index 0000000000..3782689a4c --- /dev/null +++ b/packages/xrpl/src/models/ledger/MPToken.ts @@ -0,0 +1,12 @@ +import { MPTAmount } from '../common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +export interface MPToken extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'MPToken' + MPTokenIssuanceID: string + MPTAmount?: MPTAmount + Flags: number + OwnerNode?: string + LockedAmount?: string +} diff --git a/packages/xrpl/src/models/ledger/MPTokenIssuance.ts b/packages/xrpl/src/models/ledger/MPTokenIssuance.ts new file mode 100644 index 0000000000..b590071478 --- /dev/null +++ b/packages/xrpl/src/models/ledger/MPTokenIssuance.ts @@ -0,0 +1,14 @@ +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +export interface MPTokenIssuance extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'MPTokenIssuance' + Flags: number + Issuer: string + AssetScale?: number + MaximumAmount?: string + OutstandingAmount: string + TransferFee?: number + MPTokenMetadata?: string + OwnerNode?: string + LockedAmount?: string +} diff --git a/packages/xrpl/src/models/ledger/NegativeUNL.ts b/packages/xrpl/src/models/ledger/NegativeUNL.ts index b9c0d51f3a..090b4232db 100644 --- a/packages/xrpl/src/models/ledger/NegativeUNL.ts +++ b/packages/xrpl/src/models/ledger/NegativeUNL.ts @@ -13,8 +13,7 @@ export const NEGATIVE_UNL_ID = * @category Ledger Entries */ export default interface NegativeUNL - extends BaseLedgerEntry, - HasOptionalPreviousTxnID { + extends BaseLedgerEntry, HasOptionalPreviousTxnID { LedgerEntryType: 'NegativeUNL' /** * A list of trusted validators that are currently disabled. diff --git a/packages/xrpl/src/models/ledger/Offer.ts b/packages/xrpl/src/models/ledger/Offer.ts index 54030bf26a..700d2f2572 100644 --- a/packages/xrpl/src/models/ledger/Offer.ts +++ b/packages/xrpl/src/models/ledger/Offer.ts @@ -2,6 +2,19 @@ import { Amount } from '../common' import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' +export interface Book { + Book: { + /** The ID of the offer directory that links to this offer. */ + BookDirectory: string + + /** + * A hint indicating which page of the offer directory links to this entry, + * in case the directory consists of multiple pages. + */ + BookNode: string + } +} + export default interface Offer extends BaseLedgerEntry, HasPreviousTxnID { LedgerEntryType: 'Offer' /** A bit-map of boolean flags enabled for this Offer. */ @@ -34,9 +47,17 @@ export default interface Offer extends BaseLedgerEntry, HasPreviousTxnID { OwnerNode: string /** The time this Offer expires, in seconds since the Ripple Epoch. */ Expiration?: number + /** The domain that the offer must be a part of. */ + DomainID?: string + /** + * An additional list of order book directories that this offer belongs to. + * Currently this field only applicable to hybrid offers. + */ + AdditionalBooks?: Book[] } export enum OfferFlags { lsfPassive = 0x00010000, lsfSell = 0x00020000, + lsfHybrid = 0x00040000, } diff --git a/packages/xrpl/src/models/ledger/PermissionedDomain.ts b/packages/xrpl/src/models/ledger/PermissionedDomain.ts new file mode 100644 index 0000000000..52e42f05ed --- /dev/null +++ b/packages/xrpl/src/models/ledger/PermissionedDomain.ts @@ -0,0 +1,28 @@ +import { AuthorizeCredential } from '../common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +export default interface PermissionedDomain + extends BaseLedgerEntry, HasPreviousTxnID { + /* The ledger object's type (PermissionedDomain). */ + LedgerEntryType: 'PermissionedDomain' + + /* The account that controls the settings of the domain. */ + Owner: string + + /* The credentials that are accepted by the domain. + Ownership of one of these credentials automatically + makes you a member of the domain. */ + AcceptedCredentials: AuthorizeCredential[] + + /* Flag values associated with this object. */ + Flags: 0 + + /* Owner account's directory page containing the PermissionedDomain object. */ + OwnerNode: string + + /* The Sequence value of the PermissionedDomainSet + transaction that created this domain. Used in combination + with the Account to identify this domain. */ + Sequence: number +} diff --git a/packages/xrpl/src/models/ledger/RippleState.ts b/packages/xrpl/src/models/ledger/RippleState.ts index 907907e010..0250e63c13 100644 --- a/packages/xrpl/src/models/ledger/RippleState.ts +++ b/packages/xrpl/src/models/ledger/RippleState.ts @@ -77,4 +77,8 @@ export enum RippleStateFlags { lsfHighFreeze = 0x00800000, // True, trust line to AMM. Used by client apps to identify payments via AMM. lsfAMMNode = 0x01000000, + // True, low side has set deep freeze flag + lsfLowDeepFreeze = 0x02000000, + // True, high side has set deep freeze flag + lsfHighDeepFreeze = 0x04000000, } diff --git a/packages/xrpl/src/models/ledger/Vault.ts b/packages/xrpl/src/models/ledger/Vault.ts new file mode 100644 index 0000000000..df56f53fb5 --- /dev/null +++ b/packages/xrpl/src/models/ledger/Vault.ts @@ -0,0 +1,96 @@ +import { Currency } from '../common' +import { Account } from '../transactions/common' + +import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' + +/** + * The Vault object type represents a Single Asset Vault instance. + * + * @category Ledger Entries + */ +export default interface Vault extends BaseLedgerEntry, HasPreviousTxnID { + LedgerEntryType: 'Vault' + + /** + * Ledger object identifier. + */ + LedgerIndex: string + + /** + * A bit-map of boolean flags. + */ + Flags: number + + /** + * The transaction sequence number that created the vault. + */ + Sequence: number + + /** + * Identifies the page where this item is referenced in the owner's directory. + */ + OwnerNode: string + + /** + * The account address of the Vault Owner. + */ + Owner: string + + /** + * The address of the Vaults pseudo-account. + */ + Account: Account + + /** + * The asset of the vault. The vault supports XRP, IOU and MPT. + */ + Asset: Currency + + /** + * The total value of the vault. + */ + AssetsTotal?: string + + /** + * The asset amount that is available in the vault. + */ + AssetsAvailable?: string + + /** + * The potential loss amount that is not yet realized expressed as the vaults asset. + */ + LossUnrealized?: string + + /** + * The identifier of the share MPTokenIssuance object. + */ + ShareMPTID: string + + /** + * Indicates the withdrawal strategy used by the Vault. + */ + WithdrawalPolicy: number + + /** + * The maximum asset amount that can be held in the vault. Zero value 0 indicates there is no cap. + */ + AssetsMaximum?: string + + /** + * Arbitrary metadata about the Vault. Limited to 256 bytes. + */ + Data?: string + + /** + * The scaling factor for vault shares. Only applicable for IOU assets. + * Valid values are between 0 and 18 inclusive. For XRP and MPT, this is always 0. + */ + Scale?: number +} + +export enum VaultFlags { + /** + * If set, indicates that the vault is private. + */ + lsfVaultPrivate = 0x00010000, +} diff --git a/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts b/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts index 0724aa7b8a..8ff2519983 100644 --- a/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts +++ b/packages/xrpl/src/models/ledger/XChainOwnedClaimID.ts @@ -1,6 +1,4 @@ -import { Amount } from 'ripple-binary-codec/dist/types' - -import { XChainBridge } from '../common' +import { Amount, XChainBridge } from '../common' import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' @@ -12,8 +10,7 @@ import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' * @category Ledger Entries */ export default interface XChainOwnedClaimID - extends BaseLedgerEntry, - HasPreviousTxnID { + extends BaseLedgerEntry, HasPreviousTxnID { LedgerEntryType: 'XChainOwnedClaimID' /** The account that checked out this unique claim ID value. */ diff --git a/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts b/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts index 02b873f419..7bae165f78 100644 --- a/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts +++ b/packages/xrpl/src/models/ledger/XChainOwnedCreateAccountClaimID.ts @@ -9,8 +9,7 @@ import { BaseLedgerEntry, HasPreviousTxnID } from './BaseLedgerEntry' * @category Ledger Entries */ export default interface XChainOwnedCreateAccountClaimID - extends BaseLedgerEntry, - HasPreviousTxnID { + extends BaseLedgerEntry, HasPreviousTxnID { LedgerEntryType: 'XChainOwnedCreateAccountClaimID' /** The account that owns this object. */ diff --git a/packages/xrpl/src/models/ledger/index.ts b/packages/xrpl/src/models/ledger/index.ts index 4433c2cc8a..3988698576 100644 --- a/packages/xrpl/src/models/ledger/index.ts +++ b/packages/xrpl/src/models/ledger/index.ts @@ -6,6 +6,8 @@ import Amendments, { Majority, AMENDMENTS_ID } from './Amendments' import AMM, { VoteSlot } from './AMM' import Bridge from './Bridge' import Check from './Check' +import Credential from './Credential' +import Delegate from './Delegate' import DepositPreauth from './DepositPreauth' import DID from './DID' import DirectoryNode from './DirectoryNode' @@ -18,6 +20,10 @@ import FeeSettings, { import { Ledger, LedgerV1 } from './Ledger' import { LedgerEntry, LedgerEntryFilter } from './LedgerEntry' import LedgerHashes from './LedgerHashes' +import Loan, { LoanFlags } from './Loan' +import LoanBroker from './LoanBroker' +import { MPToken } from './MPToken' +import { MPTokenIssuance } from './MPTokenIssuance' import NegativeUNL, { NEGATIVE_UNL_ID } from './NegativeUNL' import { NFTokenOffer } from './NFTokenOffer' import { NFToken, NFTokenPage } from './NFTokenPage' @@ -27,6 +33,7 @@ import PayChannel from './PayChannel' import RippleState, { RippleStateFlags } from './RippleState' import SignerList, { SignerListFlags } from './SignerList' import Ticket from './Ticket' +import Vault, { VaultFlags } from './Vault' import XChainOwnedClaimID from './XChainOwnedClaimID' import XChainOwnedCreateAccountClaimID from './XChainOwnedCreateAccountClaimID' @@ -39,6 +46,8 @@ export { AMM, Bridge, Check, + Credential, + Delegate, DepositPreauth, DirectoryNode, DID, @@ -52,9 +61,14 @@ export { LedgerEntryFilter, LedgerEntry, LedgerHashes, + Loan, + LoanFlags, + LoanBroker, Majority, NEGATIVE_UNL_ID, NegativeUNL, + MPTokenIssuance, + MPToken, NFTokenOffer, NFTokenPage, NFToken, @@ -67,7 +81,9 @@ export { SignerList, SignerListFlags, Ticket, + Vault, + VaultFlags, + VoteSlot, XChainOwnedClaimID, XChainOwnedCreateAccountClaimID, - VoteSlot, } diff --git a/packages/xrpl/src/models/methods/accountChannels.ts b/packages/xrpl/src/models/methods/accountChannels.ts index 30b6dcf278..ee8e7d0fd8 100644 --- a/packages/xrpl/src/models/methods/accountChannels.ts +++ b/packages/xrpl/src/models/methods/accountChannels.ts @@ -88,8 +88,7 @@ export interface Channel { * @category Requests */ export interface AccountChannelsRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'account_channels' /** * The unique identifier of an account, typically the account's address. The diff --git a/packages/xrpl/src/models/methods/accountCurrencies.ts b/packages/xrpl/src/models/methods/accountCurrencies.ts index 2e0df1a754..56fc26ed57 100644 --- a/packages/xrpl/src/models/methods/accountCurrencies.ts +++ b/packages/xrpl/src/models/methods/accountCurrencies.ts @@ -8,8 +8,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface AccountCurrenciesRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'account_currencies' /** A unique identifier for the account, most commonly the account's address. */ account: string diff --git a/packages/xrpl/src/models/methods/accountLines.ts b/packages/xrpl/src/models/methods/accountLines.ts index 7bf3a52327..6a2f763bd7 100644 --- a/packages/xrpl/src/models/methods/accountLines.ts +++ b/packages/xrpl/src/models/methods/accountLines.ts @@ -73,8 +73,7 @@ export interface AccountLinesTrustline { * @category Requests */ export interface AccountLinesRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'account_lines' /** A unique identifier for the account, most commonly the account's Address. */ account: string diff --git a/packages/xrpl/src/models/methods/accountObjects.ts b/packages/xrpl/src/models/methods/accountObjects.ts index 90092847ce..a339793db5 100644 --- a/packages/xrpl/src/models/methods/accountObjects.ts +++ b/packages/xrpl/src/models/methods/accountObjects.ts @@ -16,8 +16,7 @@ export type AccountObjectType = Exclude< * @category Requests */ export interface AccountObjectsRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'account_objects' /** A unique identifier for the account, most commonly the account's address. */ account: string diff --git a/packages/xrpl/src/models/methods/accountOffers.ts b/packages/xrpl/src/models/methods/accountOffers.ts index 7b061506ac..5009fd7f63 100644 --- a/packages/xrpl/src/models/methods/accountOffers.ts +++ b/packages/xrpl/src/models/methods/accountOffers.ts @@ -10,8 +10,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface AccountOffersRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'account_offers' /** A unique identifier for the account, most commonly the account's Address. */ account: string diff --git a/packages/xrpl/src/models/methods/baseMethod.ts b/packages/xrpl/src/models/methods/baseMethod.ts index 85dcf90efb..f264c2bd32 100644 --- a/packages/xrpl/src/models/methods/baseMethod.ts +++ b/packages/xrpl/src/models/methods/baseMethod.ts @@ -53,6 +53,7 @@ export interface ErrorResponse { error: string error_code?: string error_message?: string + error_exception?: string request: Request api_version?: number } diff --git a/packages/xrpl/src/models/methods/bookOffers.ts b/packages/xrpl/src/models/methods/bookOffers.ts index 0482816be7..de9b842ce1 100644 --- a/packages/xrpl/src/models/methods/bookOffers.ts +++ b/packages/xrpl/src/models/methods/bookOffers.ts @@ -39,6 +39,13 @@ export interface BookOffersRequest extends BaseRequest, LookupByLedgerRequest { * currency amounts. */ taker_pays: BookOfferCurrency + /** + * The object ID of a PermissionedDomain object. If this field is provided, + * the response will include only valid domain offers associated with that + * specific domain. If omitted, the response will include only hybrid and open + * offers for the trading pair, excluding all domain-specific offers. + */ + domain?: string } export interface BookOffer extends Offer { diff --git a/packages/xrpl/src/models/methods/depositAuthorized.ts b/packages/xrpl/src/models/methods/depositAuthorized.ts index 47952ad47a..f0cf75ff2a 100644 --- a/packages/xrpl/src/models/methods/depositAuthorized.ts +++ b/packages/xrpl/src/models/methods/depositAuthorized.ts @@ -8,13 +8,18 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface DepositAuthorizedRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'deposit_authorized' /** The sender of a possible payment. */ source_account: string /** The recipient of a possible payment. */ destination_account: string + /** + * The object IDs of Credential objects. If this field is included, then the + * credential will be taken into account when analyzing whether the sender can send + * funds to the destination. + */ + credentials?: string[] } /** @@ -52,5 +57,9 @@ export interface DepositAuthorizedResponse extends BaseResponse { source_account: string /** If true, the information comes from a validated ledger version. */ validated?: boolean + /** The object IDs of `Credential` objects. If this field is included, + * then the credential will be taken into account when analyzing whether + * the sender can send funds to the destination. */ + credentials?: string[] } } diff --git a/packages/xrpl/src/models/methods/gatewayBalances.ts b/packages/xrpl/src/models/methods/gatewayBalances.ts index 569908a722..4f2a5997fa 100644 --- a/packages/xrpl/src/models/methods/gatewayBalances.ts +++ b/packages/xrpl/src/models/methods/gatewayBalances.ts @@ -20,8 +20,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface GatewayBalancesRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'gateway_balances' /** The Address to check. This should be the issuing address. */ account: string diff --git a/packages/xrpl/src/models/methods/index.ts b/packages/xrpl/src/models/methods/index.ts index a0259167b2..5332c8c52a 100644 --- a/packages/xrpl/src/models/methods/index.ts +++ b/packages/xrpl/src/models/methods/index.ts @@ -1,5 +1,6 @@ /* eslint-disable no-inline-comments -- Necessary for important note */ /* eslint-disable max-lines -- There is a lot to export */ +/* eslint-disable prettier/prettier -- Required here to keep formatting in line */ import type { APIVersion, DEFAULT_API_VERSION } from '../common' import { @@ -148,6 +149,14 @@ import { StateAccountingFinal, } from './serverInfo' import { ServerStateRequest, ServerStateResponse } from './serverState' +import { + SimulateBinaryRequest, + SimulateBinaryResponse, + SimulateJsonRequest, + SimulateJsonResponse, + SimulateRequest, + SimulateResponse, +} from './simulate' import { SubmitRequest, SubmitResponse } from './submit' import { SubmitMultisignedRequest, @@ -181,6 +190,7 @@ import { UnsubscribeRequest, UnsubscribeResponse, } from './unsubscribe' +import { VaultInfoRequest, VaultInfoResponse } from './vaultInfo' /** * @category Requests */ @@ -203,6 +213,7 @@ type Request = | LedgerDataRequest | LedgerEntryRequest // transaction methods + | SimulateRequest | SubmitRequest | SubmitMultisignedRequest | TransactionEntryRequest @@ -238,6 +249,8 @@ type Request = | AMMInfoRequest // Price Oracle methods | GetAggregatePriceRequest + // Vault methods + | VaultInfoRequest /** * @category Responses @@ -261,6 +274,7 @@ type Response = | LedgerDataResponse | LedgerEntryResponse // transaction methods + | SimulateResponse | SubmitResponse | SubmitMultisignedVersionResponseMap | TransactionEntryResponse @@ -296,6 +310,8 @@ type Response = | AMMInfoResponse // Price Oracle methods | GetAggregatePriceResponse + // Vault methods + | VaultInfoResponse export type RequestResponseMap< T, @@ -398,6 +414,12 @@ export type RequestResponseMap< ? LedgerDataResponse : T extends LedgerEntryRequest ? LedgerEntryResponse + : T extends SimulateBinaryRequest + ? SimulateBinaryResponse + : T extends SimulateJsonRequest + ? SimulateJsonResponse + : T extends SimulateRequest + ? SimulateJsonResponse : T extends SubmitRequest ? SubmitResponse : T extends SubmitMultisignedRequest @@ -448,6 +470,8 @@ export type RequestResponseMap< ? NFTsByIssuerResponse : T extends NFTHistoryRequest ? NFTHistoryResponse + : T extends VaultInfoRequest + ? VaultInfoResponse : Response export type MarkerRequest = Request & { @@ -544,6 +568,8 @@ export { LedgerEntryRequest, LedgerEntryResponse, // transaction methods with types + SimulateRequest, + SimulateResponse, SubmitRequest, SubmitResponse, SubmitMultisignedRequest, @@ -631,4 +657,7 @@ export { // AMM methods AMMInfoRequest, AMMInfoResponse, + // Vault methods + VaultInfoRequest, + VaultInfoResponse, } diff --git a/packages/xrpl/src/models/methods/ledger.ts b/packages/xrpl/src/models/methods/ledger.ts index 07c72cc27e..c0dab28a71 100644 --- a/packages/xrpl/src/models/methods/ledger.ts +++ b/packages/xrpl/src/models/methods/ledger.ts @@ -144,8 +144,8 @@ export interface LedgerRequestExpandedAccountsOnly extends LedgerRequest { * * @category Requests */ -export interface LedgerRequestExpandedAccountsAndTransactions - extends LedgerRequest { +// eslint-disable-next-line max-len -- Disable for interface declaration. +export interface LedgerRequestExpandedAccountsAndTransactions extends LedgerRequest { expand: true accounts: true transactions: true @@ -202,14 +202,18 @@ export interface LedgerQueueData { max_spend_drops?: string } -export interface LedgerBinary - extends Omit, 'accountState'> { +export interface LedgerBinary extends Omit< + Ledger, + 'transactions' | 'accountState' +> { accountState?: string[] transactions?: string[] } -export interface LedgerBinaryV1 - extends Omit, 'accountState'> { +export interface LedgerBinaryV1 extends Omit< + LedgerV1, + 'transactions' | 'accountState' +> { accountState?: string[] transactions?: string[] } diff --git a/packages/xrpl/src/models/methods/ledgerEntry.ts b/packages/xrpl/src/models/methods/ledgerEntry.ts index d506525fe8..cabdba90a5 100644 --- a/packages/xrpl/src/models/methods/ledgerEntry.ts +++ b/packages/xrpl/src/models/methods/ledgerEntry.ts @@ -21,6 +21,22 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' */ export interface LedgerEntryRequest extends BaseRequest, LookupByLedgerRequest { command: 'ledger_entry' + + /** + * Retrieve a MPTokenIssuance object from the ledger. + */ + mpt_issuance?: string + + /** + * Retrieve a MPToken object from the ledger. + */ + mptoken?: + | { + mpt_issuance_id: string + account: string + } + | string + /** * Retrieve an Automated Market Maker (AMM) object from the ledger. * This is similar to amm_info method, but the ledger_entry version returns only the ledger entry as stored. @@ -67,6 +83,23 @@ export interface LedgerEntryRequest extends BaseRequest, LookupByLedgerRequest { /** The object ID of a Check object to retrieve. */ check?: string + /* Specify the Credential to retrieve. If a string, must be the ledger entry ID of + * the entry, as hexadecimal. If an object, requires subject, issuer, and + * credential_type sub-fields. + */ + credential?: + | { + /** The account that is the subject of the credential. */ + subject: string + + /** The account that issued the credential. */ + issuer: string + + /** The type of the credential, as issued. */ + credentialType: string + } + | string + /** * Specify a DepositPreauth object to retrieve. If a string, must be the * object ID of the DepositPreauth object, as hexadecimal. If an object, @@ -190,6 +223,11 @@ export interface LedgerEntryRequest extends BaseRequest, LookupByLedgerRequest { xchain_owned_create_account_claim_id: string | number } | string + + delegate?: { + account: string + authorize: string + } } /** diff --git a/packages/xrpl/src/models/methods/nftBuyOffers.ts b/packages/xrpl/src/models/methods/nftBuyOffers.ts index 5c64e7881e..8196daaa8c 100644 --- a/packages/xrpl/src/models/methods/nftBuyOffers.ts +++ b/packages/xrpl/src/models/methods/nftBuyOffers.ts @@ -9,8 +9,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface NFTBuyOffersRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'nft_buy_offers' /** * The unique identifier of an NFToken. The request returns buy offers for this NFToken. diff --git a/packages/xrpl/src/models/methods/nftSellOffers.ts b/packages/xrpl/src/models/methods/nftSellOffers.ts index 93788872b2..1ab8b384e3 100644 --- a/packages/xrpl/src/models/methods/nftSellOffers.ts +++ b/packages/xrpl/src/models/methods/nftSellOffers.ts @@ -9,8 +9,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface NFTSellOffersRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'nft_sell_offers' /** * The unique identifier of an NFToken. The request returns sell offers for this NFToken. diff --git a/packages/xrpl/src/models/methods/nftsByIssuer.ts b/packages/xrpl/src/models/methods/nftsByIssuer.ts index ac46a4b7b4..9ef01a2cac 100644 --- a/packages/xrpl/src/models/methods/nftsByIssuer.ts +++ b/packages/xrpl/src/models/methods/nftsByIssuer.ts @@ -11,8 +11,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface NFTsByIssuerRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'nfts_by_issuer' /** * A unique identifier for the account, most commonly the account's address diff --git a/packages/xrpl/src/models/methods/pathFind.ts b/packages/xrpl/src/models/methods/pathFind.ts index 02e9f07d6e..578197b060 100644 --- a/packages/xrpl/src/models/methods/pathFind.ts +++ b/packages/xrpl/src/models/methods/pathFind.ts @@ -30,6 +30,11 @@ export interface PathFindCreateRequest extends BasePathFindRequest { * about, or to check the overall cost to make a payment along a certain path. */ paths?: Path[] + /** + * The object ID of a PermissionedDomain object. If this field is included, + * then only valid paths for this domain will be returned. + */ + domain?: string } /** Stop sending pathfinding information. */ @@ -97,6 +102,11 @@ export interface PathFindResponse extends BaseResponse { * Continues to send updates each time a new ledger closes. */ full_reply: boolean + /** + * The object ID of a PermissionedDomain object, if the orderbook shown is + * for a specific domain. + */ + domain?: string /** * The ID provided in the WebSocket request is included again at this * level. diff --git a/packages/xrpl/src/models/methods/ripplePathFind.ts b/packages/xrpl/src/models/methods/ripplePathFind.ts index 69c0652556..c1ba36a1a4 100644 --- a/packages/xrpl/src/models/methods/ripplePathFind.ts +++ b/packages/xrpl/src/models/methods/ripplePathFind.ts @@ -15,8 +15,7 @@ export interface SourceCurrencyAmount { * @category Requests */ export interface RipplePathFindRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'ripple_path_find' /** Unique address of the account that would send funds in a transaction. */ source_account: string @@ -38,6 +37,11 @@ export interface RipplePathFindRequest * and optional issuer field, like how currency amounts are specified. */ source_currencies?: SourceCurrencyAmount[] + /** + * The object ID of a PermissionedDomain object. If this field is included, + * then only valid paths for this domain will be returned. + */ + domain?: string } export interface RipplePathFindPathOption { diff --git a/packages/xrpl/src/models/methods/serverState.ts b/packages/xrpl/src/models/methods/serverState.ts index 1ce1222950..4458473611 100644 --- a/packages/xrpl/src/models/methods/serverState.ts +++ b/packages/xrpl/src/models/methods/serverState.ts @@ -51,6 +51,7 @@ export interface ServerStateResponse extends BaseResponse { load_factor_fee_queue?: number load_factor_fee_reference?: number load_factor_server?: number + network_id: number peer_disconnects?: string peer_disconnects_resources?: string peers: number diff --git a/packages/xrpl/src/models/methods/simulate.ts b/packages/xrpl/src/models/methods/simulate.ts new file mode 100644 index 0000000000..4b46188e9b --- /dev/null +++ b/packages/xrpl/src/models/methods/simulate.ts @@ -0,0 +1,89 @@ +import { + BaseTransaction, + Transaction, + TransactionMetadata, +} from '../transactions' + +import { BaseRequest, BaseResponse } from './baseMethod' + +/** + * The `simulate` method simulates a transaction without submitting it to the network. + * Returns a {@link SimulateResponse}. + * + * @category Requests + */ +export type SimulateRequest = BaseRequest & { + command: 'simulate' + + binary?: boolean +} & ( + | { + tx_blob: string + tx_json?: never + } + | { + tx_json: Transaction + tx_blob?: never + } + ) + +export type SimulateBinaryRequest = SimulateRequest & { + binary: true +} + +export type SimulateJsonRequest = SimulateRequest & { + binary?: false +} + +/** + * Response expected from an {@link SimulateRequest}. + * + * @category Responses + */ +export type SimulateResponse = SimulateJsonResponse | SimulateBinaryResponse + +export interface SimulateBinaryResponse extends BaseResponse { + result: { + applied: false + + engine_result: string + + engine_result_code: number + + engine_result_message: string + + tx_blob: string + + meta_blob: string + + /** + * The ledger index of the ledger version that was used to generate this + * response. + */ + ledger_index: number + } +} + +export interface SimulateJsonResponse< + T extends BaseTransaction = Transaction, +> extends BaseResponse { + result: { + applied: false + + engine_result: string + + engine_result_code: number + + engine_result_message: string + + /** + * The ledger index of the ledger version that was used to generate this + * response. + */ + ledger_index: number + + tx_json: T + + meta?: TransactionMetadata + } +} diff --git a/packages/xrpl/src/models/methods/subscribe.ts b/packages/xrpl/src/models/methods/subscribe.ts index a0bd7cdf86..37557502ee 100644 --- a/packages/xrpl/src/models/methods/subscribe.ts +++ b/packages/xrpl/src/models/methods/subscribe.ts @@ -39,6 +39,12 @@ export interface SubscribeBook { snapshot?: boolean /** If true, return both sides of the order book. The default is false. */ both?: boolean + /** + * The object ID of a PermissionedDomain object. If this field is included, + * then the offers will be filtered to only show the valid domain offers for + * that domain. + */ + domain?: string } /** @@ -136,6 +142,11 @@ export interface LedgerStream extends BaseStream { * connected but has not yet obtained a ledger from the network. */ validated_ledgers?: string + + /** + * The network from which the ledger stream is received. + */ + network_id?: number } /** @@ -175,6 +186,11 @@ export interface LedgerStreamResponse { * connected but has not yet obtained a ledger from the network. */ validated_ledgers?: string + + /** + * The network from which the ledger stream is received. + */ + network_id?: number } /** @@ -259,6 +275,11 @@ export interface ValidationStream extends BaseStream { * validator is using a token, this is an ephemeral public key. */ validation_public_key: string + + /** + * The network from which the validations stream is received. + */ + network_id?: number } /** @@ -275,13 +296,17 @@ interface TransactionStreamBase< * The approximate time this ledger was closed, in date time string format. * Always uses the UTC time zone. */ - close_time_iso: string + close_time_iso: Version extends typeof RIPPLED_API_V2 ? string : never /** String Transaction result code. */ engine_result: string /** Numeric transaction response code, if applicable. */ engine_result_code: number /** Human-readable explanation for the transaction response. */ engine_result_message: string + /** + * The unique hash identifier of the transaction. + */ + hash?: Version extends typeof RIPPLED_API_V2 ? string : never /** * The ledger index of the current in-progress ledger version for which this * transaction is currently proposed. @@ -481,22 +506,22 @@ export type EventTypes = export type OnEventToListenerMap = T extends 'connected' ? () => void : T extends 'disconnected' - ? (code: number) => void - : T extends 'ledgerClosed' - ? (ledger: LedgerStream) => void - : T extends 'validationReceived' - ? (validation: ValidationStream) => void - : T extends 'transaction' - ? (transaction: TransactionStream) => void - : T extends 'peerStatusChange' - ? (peerStatus: PeerStatusStream) => void - : T extends 'consensusPhase' - ? (consensus: ConsensusStream) => void - : T extends 'manifestReceived' - ? (manifest: ManifestRequest) => void - : T extends 'path_find' - ? (path: PathFindStream) => void - : T extends 'error' - ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needs to be any for overload - (...err: any[]) => void - : (...args: never[]) => void + ? (code: number) => void + : T extends 'ledgerClosed' + ? (ledger: LedgerStream) => void + : T extends 'validationReceived' + ? (validation: ValidationStream) => void + : T extends 'transaction' + ? (transaction: TransactionStream) => void + : T extends 'peerStatusChange' + ? (peerStatus: PeerStatusStream) => void + : T extends 'consensusPhase' + ? (consensus: ConsensusStream) => void + : T extends 'manifestReceived' + ? (manifest: ManifestRequest) => void + : T extends 'path_find' + ? (path: PathFindStream) => void + : T extends 'error' + ? // eslint-disable-next-line @typescript-eslint/no-explicit-any -- needs to be any for overload + (...err: any[]) => void + : (...args: never[]) => void diff --git a/packages/xrpl/src/models/methods/transactionEntry.ts b/packages/xrpl/src/models/methods/transactionEntry.ts index feee70fd79..36a973edb8 100644 --- a/packages/xrpl/src/models/methods/transactionEntry.ts +++ b/packages/xrpl/src/models/methods/transactionEntry.ts @@ -11,8 +11,7 @@ import { BaseRequest, BaseResponse, LookupByLedgerRequest } from './baseMethod' * @category Requests */ export interface TransactionEntryRequest - extends BaseRequest, - LookupByLedgerRequest { + extends BaseRequest, LookupByLedgerRequest { command: 'transaction_entry' /** Unique hash of the transaction you are looking up. */ diff --git a/packages/xrpl/src/models/methods/tx.ts b/packages/xrpl/src/models/methods/tx.ts index c8df683fb2..9de8a8afc0 100644 --- a/packages/xrpl/src/models/methods/tx.ts +++ b/packages/xrpl/src/models/methods/tx.ts @@ -93,8 +93,9 @@ interface BaseTxResult< * * @category Responses */ -export interface TxResponse - extends BaseResponse { +export interface TxResponse< + T extends BaseTransaction = Transaction, +> extends BaseResponse { result: BaseTxResult & { tx_json: T } /** * If true, the server was able to search all of the specified ledger @@ -110,8 +111,9 @@ export interface TxResponse * * @category ResponsesV1 */ -export interface TxV1Response - extends BaseResponse { +export interface TxV1Response< + T extends BaseTransaction = Transaction, +> extends BaseResponse { result: BaseTxResult & T /** * If true, the server was able to search all of the specified ledger diff --git a/packages/xrpl/src/models/methods/vaultInfo.ts b/packages/xrpl/src/models/methods/vaultInfo.ts new file mode 100644 index 0000000000..2ff10a95ad --- /dev/null +++ b/packages/xrpl/src/models/methods/vaultInfo.ts @@ -0,0 +1,209 @@ +import { Currency } from '../common' + +import { BaseRequest, BaseResponse } from './baseMethod' + +/** + * The `vault_info` method gets information about a Vault instance. + * Returns an {@link VaultInfoResponse}. + * + * @category Requests + */ +export interface VaultInfoRequest extends BaseRequest { + command: 'vault_info' + + /** + * The object ID of the Vault to be returned. + */ + vault_id?: string + + /** + * ID of the Vault Owner account. + */ + owner?: string + + /** + * Sequence number of the vault entry. + */ + seq?: number +} + +/** + * Response expected from an {@link VaultInfoRequest}. + * + * @category Responses + */ +export interface VaultInfoResponse extends BaseResponse { + result: { + vault: { + /** + * The pseudo-account ID of the vault. + */ + Account: string + + /** + * Object representing the asset held in the vault. + */ + Asset: Currency + + /** + * Amount of assets currently available for withdrawal. + */ + AssetsAvailable?: string + + /** + * Total amount of assets in the vault. + */ + AssetsTotal?: string + + /** + * Ledger entry type, always "Vault". + */ + LedgerEntryType: 'Vault' + + /** + * ID of the Vault Owner account. + */ + Owner: string + + /** + * Transaction ID of the last modification to this vault. + */ + PreviousTxnID: string + + /** + * Ledger sequence number of the last transaction modifying this vault. + */ + PreviousTxnLgrSeq: number + + /** + * Sequence number of the vault entry. + */ + Sequence: number + + /** + * Unique index of the vault ledger entry. + */ + index: string + + /** + * Object containing details about issued shares. + */ + shares: { + /** + * The ID of the Issuer of the Share. It will always be the pseudo-account ID. + */ + Issuer: string + + /** + * Ledger entry type, always "MPTokenIssuance". + */ + LedgerEntryType: string + + /** + * Total outstanding shares issued. + */ + OutstandingAmount: string + + /** + * Transaction ID of the last modification to the shares issuance. + */ + PreviousTxnID: string + + /** + * Ledger sequence number of the last transaction modifying the shares issuance. + */ + PreviousTxnLgrSeq: number + + /** + * Sequence number of the shares issuance entry. + */ + Sequence: number + + /** + * Unique index of the shares ledger entry. + */ + index: string + + /** + * Identifier for the owner node of the shares. + */ + OwnerNode?: string + + /** + * The ID of the MPTokenIssuance object. It will always be equal to vault.ShareMPTID. + */ + mpt_issuance_id?: string + + /** + * The PermissionedDomain object ID associated with the shares of this Vault. + */ + DomainID?: string + + /** + * Bit-field flags associated with the shares issuance. + */ + Flags?: number + } + + /** + * Unrealized loss associated with the vault. + */ + LossUnrealized?: string + + /** + * Identifier for the owner node in the ledger tree. + */ + OwnerNode?: string + + /** + * Multi-purpose token ID associated with this vault. + */ + ShareMPTID?: string + + /** + * Policy defining withdrawal conditions. + */ + WithdrawalPolicy?: number + + /** + * The maximum asset amount that can be held in the vault. Zero value indicates there is no cap. + */ + AssetsMaximum?: string + + /** + * Arbitrary metadata about the Vault. Limited to 256 bytes. + */ + Data?: string + + /** + * The scaling factor for vault shares. Only applicable for IOU assets. + * Valid values are between 0 and 18 inclusive. For XRP and MPT, this is always 0. + */ + Scale?: number + + /** + * Flags + */ + Flags?: number + } + + /** + * The identifying hash of the ledger that was used to generate this + * response. + */ + ledger_hash?: string + + /** + * The ledger index of the ledger version that was used to generate this + * response. + */ + ledger_index?: number + + /** + * If included and set to true, the information in this response comes from + * a validated ledger version. Otherwise, the information is subject to + * change. + */ + validated?: boolean + } +} diff --git a/packages/xrpl/src/models/transactions/AMMBid.ts b/packages/xrpl/src/models/transactions/AMMBid.ts index 046aeacceb..c8930e72df 100644 --- a/packages/xrpl/src/models/transactions/AMMBid.ts +++ b/packages/xrpl/src/models/transactions/AMMBid.ts @@ -4,7 +4,9 @@ import { AuthAccount, Currency, IssuedCurrencyAmount } from '../common' import { BaseTransaction, isAmount, - isCurrency, + isArray, + isIssuedCurrency, + isRecord, validateBaseTransaction, } from './common' @@ -65,7 +67,7 @@ export function validateAMMBid(tx: Record): void { throw new ValidationError('AMMBid: missing field Asset') } - if (!isCurrency(tx.Asset)) { + if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMBid: Asset must be a Currency') } @@ -73,7 +75,7 @@ export function validateAMMBid(tx: Record): void { throw new ValidationError('AMMBid: missing field Asset2') } - if (!isCurrency(tx.Asset2)) { + if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMBid: Asset2 must be a Currency') } @@ -86,7 +88,7 @@ export function validateAMMBid(tx: Record): void { } if (tx.AuthAccounts != null) { - if (!Array.isArray(tx.AuthAccounts)) { + if (!isArray(tx.AuthAccounts)) { throw new ValidationError( `AMMBid: AuthAccounts must be an AuthAccount array`, ) @@ -96,38 +98,27 @@ export function validateAMMBid(tx: Record): void { `AMMBid: AuthAccounts length must not be greater than ${MAX_AUTH_ACCOUNTS}`, ) } - validateAuthAccounts( - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - tx.Account as string, - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - tx.AuthAccounts as Array>, - ) + validateAuthAccounts(tx.Account, tx.AuthAccounts) } } function validateAuthAccounts( senderAddress: string, - authAccounts: Array>, + authAccounts: unknown[], ): boolean { for (const authAccount of authAccounts) { - if ( - authAccount.AuthAccount == null || - typeof authAccount.AuthAccount !== 'object' - ) { + if (!isRecord(authAccount)) { + throw new ValidationError(`AMMBid: invalid AuthAccounts`) + } + if (!isRecord(authAccount.AuthAccount)) { throw new ValidationError(`AMMBid: invalid AuthAccounts`) } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- used for null check - // @ts-expect-error -- used for null check if (authAccount.AuthAccount.Account == null) { throw new ValidationError(`AMMBid: invalid AuthAccounts`) } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- used for null check - // @ts-expect-error -- used for null check if (typeof authAccount.AuthAccount.Account !== 'string') { throw new ValidationError(`AMMBid: invalid AuthAccounts`) } - // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- used for null check - // @ts-expect-error -- used for null check if (authAccount.AuthAccount.Account === senderAddress) { throw new ValidationError( `AMMBid: AuthAccounts must not include sender's address`, diff --git a/packages/xrpl/src/models/transactions/AMMClawback.ts b/packages/xrpl/src/models/transactions/AMMClawback.ts new file mode 100644 index 0000000000..4afc6ecb4b --- /dev/null +++ b/packages/xrpl/src/models/transactions/AMMClawback.ts @@ -0,0 +1,117 @@ +import { ValidationError } from '../../errors' +import { Currency, IssuedCurrency, IssuedCurrencyAmount } from '../common' + +import { + Account, + BaseTransaction, + GlobalFlagsInterface, + isAccount, + isIssuedCurrency, + isIssuedCurrencyAmount, + validateBaseTransaction, + validateOptionalField, + validateRequiredField, +} from './common' + +/** + * Enum representing values for AMMClawback Transaction Flags. + * + * @category Transaction Flags + */ +export enum AMMClawbackFlags { + tfClawTwoAssets = 0x00000001, +} + +/** + * Map of flags to boolean values representing {@link AMMClawback} transaction + * flags. + * + * @category Transaction Flags + */ +export interface AMMClawbackFlagsInterface extends GlobalFlagsInterface { + tfClawTwoAssets?: boolean +} + +/** + * Claw back tokens from a holder that has deposited your issued tokens into an AMM pool. + * + * Clawback is disabled by default. To use clawback, you must send an AccountSet transaction to enable the + * Allow Trust Line Clawback setting. An issuer with any existing tokens cannot enable clawback. You can + * only enable Allow Trust Line Clawback if you have a completely empty owner directory, meaning you must + * do so before you set up any trust lines, offers, escrows, payment channels, checks, or signer lists. + * After you enable clawback, it cannot reverted: the account permanently gains the ability to claw back + * issued assets on trust lines. + */ +export interface AMMClawback extends BaseTransaction { + TransactionType: 'AMMClawback' + + /** + * The account holding the asset to be clawed back. + */ + Holder: Account + + /** + * Specifies the asset that the issuer wants to claw back from the AMM pool. + * In JSON, this is an object with currency and issuer fields. The issuer field must match with Account. + */ + Asset: IssuedCurrency + + /** + * Specifies the other asset in the AMM's pool. In JSON, this is an object with currency and + * issuer fields (omit issuer for XRP). + */ + Asset2: Currency + + /** + * The maximum amount to claw back from the AMM account. The currency and issuer subfields should match + * the Asset subfields. If this field isn't specified, or the value subfield exceeds the holder's available + * tokens in the AMM, all of the holder's tokens will be clawed back. + */ + Amount?: IssuedCurrencyAmount +} + +/** + * Verify the form and type of an AMMClawback at runtime. + * + * @param tx - An AMMClawback Transaction. + * @throws {ValidationError} When the transaction is malformed. + */ +export function validateAMMClawback(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'Holder', isAccount) + + validateRequiredField(tx, 'Asset', isIssuedCurrency) + + const asset = tx.Asset + + if (tx.Holder === asset.issuer) { + throw new ValidationError( + 'AMMClawback: Holder and Asset.issuer must be distinct', + ) + } + + if (tx.Account !== asset.issuer) { + throw new ValidationError( + 'AMMClawback: Account must be the same as Asset.issuer', + ) + } + + validateRequiredField(tx, 'Asset2', isIssuedCurrency) + + validateOptionalField(tx, 'Amount', isIssuedCurrencyAmount) + + if (tx.Amount != null) { + if (tx.Amount.currency !== asset.currency) { + throw new ValidationError( + 'AMMClawback: Amount.currency must match Asset.currency', + ) + } + + if (tx.Amount.issuer !== asset.issuer) { + throw new ValidationError( + 'AMMClawback: Amount.issuer must match Amount.issuer', + ) + } + } +} diff --git a/packages/xrpl/src/models/transactions/AMMDelete.ts b/packages/xrpl/src/models/transactions/AMMDelete.ts index 6e64f8c58b..b6d96c5126 100644 --- a/packages/xrpl/src/models/transactions/AMMDelete.ts +++ b/packages/xrpl/src/models/transactions/AMMDelete.ts @@ -1,7 +1,11 @@ import { ValidationError } from '../../errors' import { Currency } from '../common' -import { BaseTransaction, isCurrency, validateBaseTransaction } from './common' +import { + BaseTransaction, + isIssuedCurrency, + validateBaseTransaction, +} from './common' /** * Delete an empty Automated Market Maker (AMM) instance that could not be fully deleted automatically. @@ -41,7 +45,7 @@ export function validateAMMDelete(tx: Record): void { throw new ValidationError('AMMDelete: missing field Asset') } - if (!isCurrency(tx.Asset)) { + if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMDelete: Asset must be a Currency') } @@ -49,7 +53,7 @@ export function validateAMMDelete(tx: Record): void { throw new ValidationError('AMMDelete: missing field Asset2') } - if (!isCurrency(tx.Asset2)) { + if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMDelete: Asset2 must be a Currency') } } diff --git a/packages/xrpl/src/models/transactions/AMMDeposit.ts b/packages/xrpl/src/models/transactions/AMMDeposit.ts index 2dd8d27e39..cd4c66e23d 100644 --- a/packages/xrpl/src/models/transactions/AMMDeposit.ts +++ b/packages/xrpl/src/models/transactions/AMMDeposit.ts @@ -3,10 +3,10 @@ import { Amount, Currency, IssuedCurrencyAmount } from '../common' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, isAmount, - isCurrency, isIssuedCurrency, + isIssuedCurrencyAmount, validateBaseTransaction, } from './common' @@ -24,7 +24,7 @@ export enum AMMDepositFlags { tfTwoAssetIfEmpty = 0x00800000, } -export interface AMMDepositFlagsInterface extends GlobalFlags { +export interface AMMDepositFlagsInterface extends GlobalFlagsInterface { tfLPToken?: boolean tfSingleAsset?: boolean tfTwoAsset?: boolean @@ -89,7 +89,7 @@ export function validateAMMDeposit(tx: Record): void { throw new ValidationError('AMMDeposit: missing field Asset') } - if (!isCurrency(tx.Asset)) { + if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMDeposit: Asset must be a Currency') } @@ -97,7 +97,7 @@ export function validateAMMDeposit(tx: Record): void { throw new ValidationError('AMMDeposit: missing field Asset2') } - if (!isCurrency(tx.Asset2)) { + if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMDeposit: Asset2 must be a Currency') } @@ -111,7 +111,7 @@ export function validateAMMDeposit(tx: Record): void { ) } - if (tx.LPTokenOut != null && !isIssuedCurrency(tx.LPTokenOut)) { + if (tx.LPTokenOut != null && !isIssuedCurrencyAmount(tx.LPTokenOut)) { throw new ValidationError( 'AMMDeposit: LPTokenOut must be an IssuedCurrencyAmount', ) diff --git a/packages/xrpl/src/models/transactions/AMMVote.ts b/packages/xrpl/src/models/transactions/AMMVote.ts index 0d469fa0a8..9d4fdf7286 100644 --- a/packages/xrpl/src/models/transactions/AMMVote.ts +++ b/packages/xrpl/src/models/transactions/AMMVote.ts @@ -2,7 +2,11 @@ import { ValidationError } from '../../errors' import { Currency } from '../common' import { AMM_MAX_TRADING_FEE } from './AMMCreate' -import { BaseTransaction, isCurrency, validateBaseTransaction } from './common' +import { + BaseTransaction, + isIssuedCurrency, + validateBaseTransaction, +} from './common' /** * Vote on the trading fee for an Automated Market Maker (AMM) instance. @@ -43,7 +47,7 @@ export function validateAMMVote(tx: Record): void { throw new ValidationError('AMMVote: missing field Asset') } - if (!isCurrency(tx.Asset)) { + if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMVote: Asset must be a Currency') } @@ -51,7 +55,7 @@ export function validateAMMVote(tx: Record): void { throw new ValidationError('AMMVote: missing field Asset2') } - if (!isCurrency(tx.Asset2)) { + if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMVote: Asset2 must be a Currency') } diff --git a/packages/xrpl/src/models/transactions/AMMWithdraw.ts b/packages/xrpl/src/models/transactions/AMMWithdraw.ts index fcce5912b3..573c7e57d1 100644 --- a/packages/xrpl/src/models/transactions/AMMWithdraw.ts +++ b/packages/xrpl/src/models/transactions/AMMWithdraw.ts @@ -3,10 +3,10 @@ import { Amount, Currency, IssuedCurrencyAmount } from '../common' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, isAmount, - isCurrency, isIssuedCurrency, + isIssuedCurrencyAmount, validateBaseTransaction, } from './common' @@ -25,7 +25,7 @@ export enum AMMWithdrawFlags { tfLimitLPToken = 0x00400000, } -export interface AMMWithdrawFlagsInterface extends GlobalFlags { +export interface AMMWithdrawFlagsInterface extends GlobalFlagsInterface { tfLPToken?: boolean tfWithdrawAll?: boolean tfOneAssetWithdrawAll?: boolean @@ -87,7 +87,7 @@ export function validateAMMWithdraw(tx: Record): void { throw new ValidationError('AMMWithdraw: missing field Asset') } - if (!isCurrency(tx.Asset)) { + if (!isIssuedCurrency(tx.Asset)) { throw new ValidationError('AMMWithdraw: Asset must be a Currency') } @@ -95,7 +95,7 @@ export function validateAMMWithdraw(tx: Record): void { throw new ValidationError('AMMWithdraw: missing field Asset2') } - if (!isCurrency(tx.Asset2)) { + if (!isIssuedCurrency(tx.Asset2)) { throw new ValidationError('AMMWithdraw: Asset2 must be a Currency') } @@ -105,7 +105,7 @@ export function validateAMMWithdraw(tx: Record): void { throw new ValidationError('AMMWithdraw: must set Amount with EPrice') } - if (tx.LPTokenIn != null && !isIssuedCurrency(tx.LPTokenIn)) { + if (tx.LPTokenIn != null && !isIssuedCurrencyAmount(tx.LPTokenIn)) { throw new ValidationError( 'AMMWithdraw: LPTokenIn must be an IssuedCurrencyAmount', ) diff --git a/packages/xrpl/src/models/transactions/CredentialAccept.ts b/packages/xrpl/src/models/transactions/CredentialAccept.ts new file mode 100644 index 0000000000..cd0906fc71 --- /dev/null +++ b/packages/xrpl/src/models/transactions/CredentialAccept.ts @@ -0,0 +1,44 @@ +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateCredentialType, + validateRequiredField, +} from './common' + +/** + * Accepts a credential issued to the Account (i.e. the Account is the Subject of the Credential object). + * Credentials are represented in hex. Whilst they are allowed a maximum length of 64 + * bytes, every byte requires 2 hex characters for representation. + * The credential is not considered valid until it has been transferred/accepted. + * + * @category Transaction Models + * */ +export interface CredentialAccept extends BaseTransaction { + TransactionType: 'CredentialAccept' + + /** The subject of the credential. */ + Account: string + + /** The issuer of the credential. */ + Issuer: string + + /** A hex-encoded value to identify the type of credential from the issuer. */ + CredentialType: string +} + +/** + * Verify the form and type of a CredentialAccept at runtime. + * + * @param tx - A CredentialAccept Transaction. + * @throws When the CredentialAccept is Malformed. + */ +export function validateCredentialAccept(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'Account', isString) + + validateRequiredField(tx, 'Issuer', isString) + + validateCredentialType(tx) +} diff --git a/packages/xrpl/src/models/transactions/CredentialCreate.ts b/packages/xrpl/src/models/transactions/CredentialCreate.ts new file mode 100644 index 0000000000..8c82b7c74c --- /dev/null +++ b/packages/xrpl/src/models/transactions/CredentialCreate.ts @@ -0,0 +1,81 @@ +import { HEX_REGEX } from '@xrplf/isomorphic/utils' + +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + isNumber, + isString, + validateBaseTransaction, + validateCredentialType, + validateOptionalField, + validateRequiredField, +} from './common' + +const MAX_URI_LENGTH = 256 + +/** + * Creates a Credential object. It must be sent by the issuer. + * + * @category Transaction Models + * */ +export interface CredentialCreate extends BaseTransaction { + TransactionType: 'CredentialCreate' + + /** The issuer of the credential. */ + Account: string + + /** The subject of the credential. */ + Subject: string + + /** A hex-encoded value to identify the type of credential from the issuer. */ + CredentialType: string + + /** Credential expiration. */ + Expiration?: number + + /** Additional data about the credential (such as a link to the VC document). */ + URI?: string +} + +/** + * Verify the form and type of a CredentialCreate at runtime. + * + * @param tx - A CredentialCreate Transaction. + * @throws When the CredentialCreate is Malformed. + */ +export function validateCredentialCreate(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'Account', isString) + + validateRequiredField(tx, 'Subject', isString) + + validateCredentialType(tx) + + validateOptionalField(tx, 'Expiration', isNumber) + + validateURI(tx.URI) +} + +function validateURI(URI: unknown): void { + if (URI === undefined) { + return + } + + if (typeof URI !== 'string') { + throw new ValidationError('CredentialCreate: invalid field URI') + } + + if (URI.length === 0) { + throw new ValidationError('CredentialCreate: URI cannot be an empty string') + } else if (URI.length > MAX_URI_LENGTH) { + throw new ValidationError( + `CredentialCreate: URI length must be <= ${MAX_URI_LENGTH}`, + ) + } + + if (!HEX_REGEX.test(URI)) { + throw new ValidationError('CredentialCreate: URI must be encoded in hex') + } +} diff --git a/packages/xrpl/src/models/transactions/CredentialDelete.ts b/packages/xrpl/src/models/transactions/CredentialDelete.ts new file mode 100644 index 0000000000..d1b4ab0244 --- /dev/null +++ b/packages/xrpl/src/models/transactions/CredentialDelete.ts @@ -0,0 +1,55 @@ +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateCredentialType, + validateOptionalField, + validateRequiredField, +} from './common' + +/** + * Deletes a Credential object. + * + * @category Transaction Models + * */ +export interface CredentialDelete extends BaseTransaction { + TransactionType: 'CredentialDelete' + + /** The transaction submitter. */ + Account: string + + /** A hex-encoded value to identify the type of credential from the issuer. */ + CredentialType: string + + /** The person that the credential is for. If omitted, Account is assumed to be the subject. */ + Subject?: string + + /** The issuer of the credential. If omitted, Account is assumed to be the issuer. */ + Issuer?: string +} + +/** + * Verify the form and type of a CredentialDelete at runtime. + * + * @param tx - A CredentialDelete Transaction. + * @throws When the CredentialDelete is Malformed. + */ +export function validateCredentialDelete(tx: Record): void { + validateBaseTransaction(tx) + + if (!tx.Subject && !tx.Issuer) { + throw new ValidationError( + 'CredentialDelete: either `Issuer` or `Subject` must be provided', + ) + } + + validateRequiredField(tx, 'Account', isString) + + validateCredentialType(tx) + + validateOptionalField(tx, 'Subject', isString) + + validateOptionalField(tx, 'Issuer', isString) +} diff --git a/packages/xrpl/src/models/transactions/MPTokenAuthorize.ts b/packages/xrpl/src/models/transactions/MPTokenAuthorize.ts new file mode 100644 index 0000000000..c796677492 --- /dev/null +++ b/packages/xrpl/src/models/transactions/MPTokenAuthorize.ts @@ -0,0 +1,67 @@ +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateRequiredField, + Account, + validateOptionalField, + isAccount, + GlobalFlagsInterface, +} from './common' + +/** + * Transaction Flags for an MPTokenAuthorize Transaction. + * + * @category Transaction Flags + */ +export enum MPTokenAuthorizeFlags { + /** + * If set and transaction is submitted by a holder, it indicates that the holder no + * longer wants to hold the MPToken, which will be deleted as a result. If the the holder's + * MPToken has non-zero balance while trying to set this flag, the transaction will fail. On + * the other hand, if set and transaction is submitted by an issuer, it would mean that the + * issuer wants to unauthorize the holder (only applicable for allow-listing), + * which would unset the lsfMPTAuthorized flag on the MPToken. + */ + tfMPTUnauthorize = 0x00000001, +} + +/** + * Map of flags to boolean values representing {@link MPTokenAuthorize} transaction + * flags. + * + * @category Transaction Flags + */ +export interface MPTokenAuthorizeFlagsInterface extends GlobalFlagsInterface { + tfMPTUnauthorize?: boolean +} + +/** + * The MPTokenAuthorize transaction is used to globally lock/unlock a MPTokenIssuance, + * or lock/unlock an individual's MPToken. + */ +export interface MPTokenAuthorize extends BaseTransaction { + TransactionType: 'MPTokenAuthorize' + /** + * Identifies the MPTokenIssuance + */ + MPTokenIssuanceID: string + /** + * An optional XRPL Address of an individual token holder balance to lock/unlock. + * If omitted, this transaction will apply to all any accounts holding MPTs. + */ + Holder?: Account + Flags?: number | MPTokenAuthorizeFlagsInterface +} + +/** + * Verify the form and type of an MPTokenAuthorize at runtime. + * + * @param tx - An MPTokenAuthorize Transaction. + * @throws When the MPTokenAuthorize is Malformed. + */ +export function validateMPTokenAuthorize(tx: Record): void { + validateBaseTransaction(tx) + validateRequiredField(tx, 'MPTokenIssuanceID', isString) + validateOptionalField(tx, 'Holder', isAccount) +} diff --git a/packages/xrpl/src/models/transactions/MPTokenIssuanceCreate.ts b/packages/xrpl/src/models/transactions/MPTokenIssuanceCreate.ts new file mode 100644 index 0000000000..6a6b6f9e32 --- /dev/null +++ b/packages/xrpl/src/models/transactions/MPTokenIssuanceCreate.ts @@ -0,0 +1,206 @@ +import { ValidationError } from '../../errors' +import { isHex, INTEGER_SANITY_CHECK, isFlagEnabled } from '../utils' +import { + MAX_MPT_META_BYTE_LENGTH, + MPT_META_WARNING_HEADER, + validateMPTokenMetadata, +} from '../utils/mptokenMetadata' + +import { + BaseTransaction, + GlobalFlagsInterface, + validateBaseTransaction, + validateOptionalField, + isString, + isNumber, +} from './common' +import type { TransactionMetadataBase } from './metadata' + +// 2^63 - 1 +const MAX_AMT = '9223372036854775807' +const MAX_TRANSFER_FEE = 50000 + +/** + * Transaction Flags for an MPTokenIssuanceCreate Transaction. + * + * @category Transaction Flags + */ +export enum MPTokenIssuanceCreateFlags { + /** + * If set, indicates that the MPT can be locked both individually and globally. + * If not set, the MPT cannot be locked in any way. + */ + tfMPTCanLock = 0x00000002, + /** + * If set, indicates that individual holders must be authorized. + * This enables issuers to limit who can hold their assets. + */ + tfMPTRequireAuth = 0x00000004, + /** + * If set, indicates that individual holders can place their balances into an escrow. + */ + tfMPTCanEscrow = 0x00000008, + /** + * If set, indicates that individual holders can trade their balances + * using the XRP Ledger DEX or AMM. + */ + tfMPTCanTrade = 0x00000010, + /** + * If set, indicates that tokens may be transferred to other accounts + * that are not the issuer. + */ + tfMPTCanTransfer = 0x00000020, + /** + * If set, indicates that the issuer may use the Clawback transaction + * to clawback value from individual holders. + */ + tfMPTCanClawback = 0x00000040, +} + +/** + * Map of flags to boolean values representing {@link MPTokenIssuanceCreate} transaction + * flags. + * + * @category Transaction Flags + */ +// eslint-disable-next-line max-len -- Disable for interface declaration. +export interface MPTokenIssuanceCreateFlagsInterface extends GlobalFlagsInterface { + tfMPTCanLock?: boolean + tfMPTRequireAuth?: boolean + tfMPTCanEscrow?: boolean + tfMPTCanTrade?: boolean + tfMPTCanTransfer?: boolean + tfMPTCanClawback?: boolean +} + +/** + * The MPTokenIssuanceCreate transaction creates a MPTokenIssuance object + * and adds it to the relevant directory node of the creator account. + * This transaction is the only opportunity an issuer has to specify any token fields + * that are defined as immutable (e.g., MPT Flags). If the transaction is successful, + * the newly created token will be owned by the account (the creator account) which + * executed the transaction. + */ +export interface MPTokenIssuanceCreate extends BaseTransaction { + TransactionType: 'MPTokenIssuanceCreate' + /** + * An asset scale is the difference, in orders of magnitude, between a standard unit and + * a corresponding fractional unit. More formally, the asset scale is a non-negative integer + * (0, 1, 2, …) such that one standard unit equals 10^(-scale) of a corresponding + * fractional unit. If the fractional unit equals the standard unit, then the asset scale is 0. + * Note that this value is optional, and will default to 0 if not supplied. + */ + AssetScale?: number + /** + * Specifies the maximum asset amount of this token that should ever be issued. + * It is a non-negative integer string that can store a range of up to 63 bits. If not set, the max + * amount will default to the largest unsigned 63-bit integer (0x7FFFFFFFFFFFFFFF or 9223372036854775807) + * + * Example: + * ``` + * MaximumAmount: '9223372036854775807' + * ``` + */ + MaximumAmount?: string + /** + * Specifies the fee to charged by the issuer for secondary sales of the Token, + * if such sales are allowed. Valid values for this field are between 0 and 50,000 inclusive, + * allowing transfer rates of between 0.000% and 50.000% in increments of 0.001. + * The field must NOT be present if the `tfMPTCanTransfer` flag is not set. + */ + TransferFee?: number + + /** + * Should follow {@link https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0089-multi-purpose-token-metadata-schema | XLS-89} standard. + * Use {@link encodeMPTokenMetadata} utility function to convert to convert {@link MPTokenMetadata} to a blob. + * Use {@link decodeMPTokenMetadata} utility function to convert from a blob to {@link MPTokenMetadata}. + * + * While adherence to the XLS-89d format is not mandatory, non-compliant metadata + * may not be discoverable by ecosystem tools such as explorers and indexers. + */ + MPTokenMetadata?: string + + Flags?: number | MPTokenIssuanceCreateFlagsInterface +} + +export interface MPTokenIssuanceCreateMetadata extends TransactionMetadataBase { + mpt_issuance_id?: string +} + +/* eslint-disable max-lines-per-function -- Not needed to reduce function */ +/** + * Verify the form and type of an MPTokenIssuanceCreate at runtime. + * + * @param tx - An MPTokenIssuanceCreate Transaction. + * @throws When the MPTokenIssuanceCreate is Malformed. + */ +export function validateMPTokenIssuanceCreate( + tx: Record, +): void { + validateBaseTransaction(tx) + validateOptionalField(tx, 'MaximumAmount', isString) + validateOptionalField(tx, 'MPTokenMetadata', isString) + validateOptionalField(tx, 'TransferFee', isNumber) + validateOptionalField(tx, 'AssetScale', isNumber) + + if ( + typeof tx.MPTokenMetadata === 'string' && + (!isHex(tx.MPTokenMetadata) || + tx.MPTokenMetadata.length / 2 > MAX_MPT_META_BYTE_LENGTH) + ) { + throw new ValidationError( + `MPTokenIssuanceCreate: MPTokenMetadata (hex format) must be non-empty and no more than ${MAX_MPT_META_BYTE_LENGTH} bytes.`, + ) + } + + if (typeof tx.MaximumAmount === 'string') { + if (!INTEGER_SANITY_CHECK.exec(tx.MaximumAmount)) { + throw new ValidationError('MPTokenIssuanceCreate: Invalid MaximumAmount') + } else if ( + BigInt(tx.MaximumAmount) > BigInt(MAX_AMT) || + BigInt(tx.MaximumAmount) < BigInt(`0`) + ) { + throw new ValidationError( + 'MPTokenIssuanceCreate: MaximumAmount out of range', + ) + } + } + + if (typeof tx.TransferFee === 'number') { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Not necessary + const flags = (tx.Flags ?? 0) as + | number + | MPTokenIssuanceCreateFlagsInterface + const isTfMPTCanTransfer = + typeof flags === 'number' + ? isFlagEnabled(flags, MPTokenIssuanceCreateFlags.tfMPTCanTransfer) + : (flags.tfMPTCanTransfer ?? false) + + if (tx.TransferFee < 0 || tx.TransferFee > MAX_TRANSFER_FEE) { + throw new ValidationError( + `MPTokenIssuanceCreate: TransferFee must be between 0 and ${MAX_TRANSFER_FEE}`, + ) + } + + if (tx.TransferFee && !isTfMPTCanTransfer) { + throw new ValidationError( + 'MPTokenIssuanceCreate: TransferFee cannot be provided without enabling tfMPTCanTransfer flag', + ) + } + } + + if (tx.MPTokenMetadata != null) { + const validationMessages = validateMPTokenMetadata(tx.MPTokenMetadata) + + if (validationMessages.length > 0) { + const message = [ + MPT_META_WARNING_HEADER, + ...validationMessages.map((msg) => `- ${msg}`), + ].join('\n') + + // eslint-disable-next-line no-console -- Required here. + console.warn(message) + } + } +} +/* eslint-enable max-lines-per-function */ diff --git a/packages/xrpl/src/models/transactions/MPTokenIssuanceDestroy.ts b/packages/xrpl/src/models/transactions/MPTokenIssuanceDestroy.ts new file mode 100644 index 0000000000..06cbfe9471 --- /dev/null +++ b/packages/xrpl/src/models/transactions/MPTokenIssuanceDestroy.ts @@ -0,0 +1,34 @@ +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateRequiredField, +} from './common' + +/** + * The MPTokenIssuanceDestroy transaction is used to remove an MPTokenIssuance object + * from the directory node in which it is being held, effectively removing the token + * from the ledger. If this operation succeeds, the corresponding + * MPTokenIssuance is removed and the owner’s reserve requirement is reduced by one. + * This operation must fail if there are any holders who have non-zero balances. + */ +export interface MPTokenIssuanceDestroy extends BaseTransaction { + TransactionType: 'MPTokenIssuanceDestroy' + /** + * Identifies the MPTokenIssuance object to be removed by the transaction. + */ + MPTokenIssuanceID: string +} + +/** + * Verify the form and type of an MPTokenIssuanceDestroy at runtime. + * + * @param tx - An MPTokenIssuanceDestroy Transaction. + * @throws When the MPTokenIssuanceDestroy is Malformed. + */ +export function validateMPTokenIssuanceDestroy( + tx: Record, +): void { + validateBaseTransaction(tx) + validateRequiredField(tx, 'MPTokenIssuanceID', isString) +} diff --git a/packages/xrpl/src/models/transactions/MPTokenIssuanceSet.ts b/packages/xrpl/src/models/transactions/MPTokenIssuanceSet.ts new file mode 100644 index 0000000000..12d15260ff --- /dev/null +++ b/packages/xrpl/src/models/transactions/MPTokenIssuanceSet.ts @@ -0,0 +1,86 @@ +import { ValidationError } from '../../errors' +import { isFlagEnabled } from '../utils' + +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateRequiredField, + Account, + validateOptionalField, + isAccount, + GlobalFlagsInterface, +} from './common' + +/** + * Transaction Flags for an MPTokenIssuanceSet Transaction. + * + * @category Transaction Flags + */ +export enum MPTokenIssuanceSetFlags { + /** + * If set, indicates that issuer locks the MPT + */ + tfMPTLock = 0x00000001, + /** + * If set, indicates that issuer unlocks the MPT + */ + tfMPTUnlock = 0x00000002, +} + +/** + * Map of flags to boolean values representing {@link MPTokenIssuanceSet} transaction + * flags. + * + * @category Transaction Flags + */ +export interface MPTokenIssuanceSetFlagsInterface extends GlobalFlagsInterface { + tfMPTLock?: boolean + tfMPTUnlock?: boolean +} + +/** + * The MPTokenIssuanceSet transaction is used to globally lock/unlock a MPTokenIssuance, + * or lock/unlock an individual's MPToken. + */ +export interface MPTokenIssuanceSet extends BaseTransaction { + TransactionType: 'MPTokenIssuanceSet' + /** + * Identifies the MPTokenIssuance + */ + MPTokenIssuanceID: string + /** + * An optional XRPL Address of an individual token holder balance to lock/unlock. + * If omitted, this transaction will apply to all any accounts holding MPTs. + */ + Holder?: Account + Flags?: number | MPTokenIssuanceSetFlagsInterface +} + +/** + * Verify the form and type of an MPTokenIssuanceSet at runtime. + * + * @param tx - An MPTokenIssuanceSet Transaction. + * @throws When the MPTokenIssuanceSet is Malformed. + */ +export function validateMPTokenIssuanceSet(tx: Record): void { + validateBaseTransaction(tx) + validateRequiredField(tx, 'MPTokenIssuanceID', isString) + validateOptionalField(tx, 'Holder', isAccount) + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Not necessary + const flags = (tx.Flags ?? 0) as number | MPTokenIssuanceSetFlagsInterface + const isTfMPTLock = + typeof flags === 'number' + ? isFlagEnabled(flags, MPTokenIssuanceSetFlags.tfMPTLock) + : (flags.tfMPTLock ?? false) + + const isTfMPTUnlock = + typeof flags === 'number' + ? isFlagEnabled(flags, MPTokenIssuanceSetFlags.tfMPTUnlock) + : (flags.tfMPTUnlock ?? false) + + if (isTfMPTLock && isTfMPTUnlock) { + throw new ValidationError('MPTokenIssuanceSet: flag conflict') + } +} diff --git a/packages/xrpl/src/models/transactions/NFTokenCancelOffer.ts b/packages/xrpl/src/models/transactions/NFTokenCancelOffer.ts index b0b8bcd228..957fd2b042 100644 --- a/packages/xrpl/src/models/transactions/NFTokenCancelOffer.ts +++ b/packages/xrpl/src/models/transactions/NFTokenCancelOffer.ts @@ -1,6 +1,6 @@ import { ValidationError } from '../../errors' -import { BaseTransaction, validateBaseTransaction } from './common' +import { BaseTransaction, isArray, validateBaseTransaction } from './common' import type { TransactionMetadataBase } from './metadata' /** @@ -41,7 +41,7 @@ export interface NFTokenCancelOfferMetadata extends TransactionMetadataBase { export function validateNFTokenCancelOffer(tx: Record): void { validateBaseTransaction(tx) - if (!Array.isArray(tx.NFTokenOffers)) { + if (!isArray(tx.NFTokenOffers)) { throw new ValidationError('NFTokenCancelOffer: missing field NFTokenOffers') } diff --git a/packages/xrpl/src/models/transactions/NFTokenCreateOffer.ts b/packages/xrpl/src/models/transactions/NFTokenCreateOffer.ts index 9575d1b6be..de31645350 100644 --- a/packages/xrpl/src/models/transactions/NFTokenCreateOffer.ts +++ b/packages/xrpl/src/models/transactions/NFTokenCreateOffer.ts @@ -4,7 +4,7 @@ import { isFlagEnabled } from '../utils' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, validateBaseTransaction, isAmount, parseAmountValue, @@ -33,7 +33,7 @@ export enum NFTokenCreateOfferFlags { * * @category Transaction Flags */ -export interface NFTokenCreateOfferFlagsInterface extends GlobalFlags { +export interface NFTokenCreateOfferFlagsInterface extends GlobalFlagsInterface { tfSellNFToken?: boolean } @@ -146,10 +146,14 @@ export function validateNFTokenCreateOffer(tx: Record): void { throw new ValidationError('NFTokenCreateOffer: invalid Amount') } - if ( - typeof tx.Flags === 'number' && - isFlagEnabled(tx.Flags, NFTokenCreateOfferFlags.tfSellNFToken) - ) { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- checked in BaseTransaction + const flags = (tx.Flags ?? 0) as number | NFTokenCreateOfferFlagsInterface + const isTfSellNFToken = + typeof flags === 'number' + ? isFlagEnabled(flags, NFTokenCreateOfferFlags.tfSellNFToken) + : (flags.tfSellNFToken ?? false) + + if (isTfSellNFToken) { validateNFTokenSellOfferCases(tx) } else { validateNFTokenBuyOfferCases(tx) diff --git a/packages/xrpl/src/models/transactions/NFTokenMint.ts b/packages/xrpl/src/models/transactions/NFTokenMint.ts index 2630a6b9c6..56c5a3aee8 100644 --- a/packages/xrpl/src/models/transactions/NFTokenMint.ts +++ b/packages/xrpl/src/models/transactions/NFTokenMint.ts @@ -1,11 +1,14 @@ import { ValidationError } from '../../errors' +import { Amount } from '../common' import { isHex } from '../utils' import { Account, BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, isAccount, + isAmount, + isNumber, validateBaseTransaction, validateOptionalField, } from './common' @@ -38,6 +41,10 @@ export enum NFTokenMintFlags { * issuer. */ tfTransferable = 0x00000008, + /** + * If set, indicates that this NFT's URI can be modified. + */ + tfMutable = 0x00000010, } /** @@ -46,11 +53,12 @@ export enum NFTokenMintFlags { * * @category Transaction Flags */ -export interface NFTokenMintFlagsInterface extends GlobalFlags { +export interface NFTokenMintFlagsInterface extends GlobalFlagsInterface { tfBurnable?: boolean tfOnlyXRP?: boolean tfTrustLine?: boolean tfTransferable?: boolean + tfMutable?: boolean } /** @@ -99,12 +107,34 @@ export interface NFTokenMint extends BaseTransaction { * set to `undefined` value if you do not use it. */ URI?: string | null + /** + * Indicates the amount expected for the Token. + * + * The amount can be zero. This would indicate that the account is giving + * the token away free, either to anyone at all, or to the account identified + * by the Destination field. + */ + Amount?: Amount + /** + * Indicates the time after which the offer will no longer + * be valid. The value is the number of seconds since the + * Ripple Epoch. + */ + Expiration?: number + /** + * If present, indicates that this offer may only be + * accepted by the specified account. Attempts by other + * accounts to accept this offer MUST fail. + */ + Destination?: Account Flags?: number | NFTokenMintFlagsInterface } export interface NFTokenMintMetadata extends TransactionMetadataBase { // rippled 1.11.0 or later nftoken_id?: string + // if Amount is present + offer_id?: string } /** @@ -135,4 +165,16 @@ export function validateNFTokenMint(tx: Record): void { if (tx.NFTokenTaxon == null) { throw new ValidationError('NFTokenMint: missing field NFTokenTaxon') } + + if (tx.Amount == null) { + if (tx.Expiration != null || tx.Destination != null) { + throw new ValidationError( + 'NFTokenMint: Amount is required when Expiration or Destination is present', + ) + } + } + + validateOptionalField(tx, 'Amount', isAmount) + validateOptionalField(tx, 'Expiration', isNumber) + validateOptionalField(tx, 'Destination', isAccount) } diff --git a/packages/xrpl/src/models/transactions/NFTokenModify.ts b/packages/xrpl/src/models/transactions/NFTokenModify.ts new file mode 100644 index 0000000000..4246509671 --- /dev/null +++ b/packages/xrpl/src/models/transactions/NFTokenModify.ts @@ -0,0 +1,67 @@ +import { ValidationError } from '../../errors' +import { isHex } from '../utils' + +import { + BaseTransaction, + validateBaseTransaction, + isAccount, + isString, + validateOptionalField, + Account, + validateRequiredField, +} from './common' + +/** + * The NFTokenModify transaction modifies an NFToken's URI + * if its tfMutable is set to true. + */ +export interface NFTokenModify extends BaseTransaction { + TransactionType: 'NFTokenModify' + /** + * Identifies the NFTokenID of the NFToken object that the + * offer references. + */ + NFTokenID: string + /** + * Indicates the AccountID of the account that owns the corresponding NFToken. + * Can be omitted if the owner is the account submitting this transaction + */ + Owner?: Account + /** + * URI that points to the data and/or metadata associated with the NFT. + * This field need not be an HTTP or HTTPS URL; it could be an IPFS URI, a + * magnet link, immediate data encoded as an RFC2379 "data" URL, or even an + * opaque issuer-specific encoding. The URI is NOT checked for validity, but + * the field is limited to a maximum length of 256 bytes. + * + * This field must be hex-encoded. You can use `convertStringToHex` to + * convert this field to the proper encoding. + * + * This field must not be an empty string. Omit it from the transaction or + * set to `null` if you do not use it. + */ + URI?: string | null +} + +/** + * Verify the form and type of an NFTokenModify at runtime. + * + * @param tx - An NFTokenModify Transaction. + * @throws When the NFTokenModify is Malformed. + */ +export function validateNFTokenModify(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'NFTokenID', isString) + validateOptionalField(tx, 'Owner', isAccount) + validateOptionalField(tx, 'URI', isString) + + if (tx.URI !== undefined && typeof tx.URI === 'string') { + if (tx.URI === '') { + throw new ValidationError('NFTokenModify: URI must not be empty string') + } + if (!isHex(tx.URI)) { + throw new ValidationError('NFTokenModify: URI must be in hex format') + } + } +} diff --git a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts index 16d27035a1..9b4f274e67 100644 --- a/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddAccountCreateAttestation.ts @@ -110,13 +110,13 @@ export function validateXChainAddAccountCreateAttestation( validateRequiredField( tx, 'WasLockingChainSend', - (inp) => inp === 0 || inp === 1, + (inp: unknown): inp is 0 | 1 => inp === 0 || inp === 1, ) validateRequiredField( tx, 'XChainAccountCreateCount', - (inp) => isNumber(inp) || isString(inp), + (inp: unknown): inp is number | string => isNumber(inp) || isString(inp), ) validateRequiredField(tx, 'XChainBridge', isXChainBridge) diff --git a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts index 90f09c0bc7..4a1eafe04a 100644 --- a/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts +++ b/packages/xrpl/src/models/transactions/XChainAddClaimAttestation.ts @@ -104,7 +104,7 @@ export function validateXChainAddClaimAttestation( validateRequiredField( tx, 'WasLockingChainSend', - (inp) => inp === 0 || inp === 1, + (inp: unknown): inp is 0 | 1 => inp === 0 || inp === 1, ) validateRequiredField(tx, 'XChainBridge', isXChainBridge) @@ -112,6 +112,6 @@ export function validateXChainAddClaimAttestation( validateRequiredField( tx, 'XChainClaimID', - (inp) => isNumber(inp) || isString(inp), + (inp: unknown): inp is number | string => isNumber(inp) || isString(inp), ) } diff --git a/packages/xrpl/src/models/transactions/XChainClaim.ts b/packages/xrpl/src/models/transactions/XChainClaim.ts index 124f5f468c..13897e8d5a 100644 --- a/packages/xrpl/src/models/transactions/XChainClaim.ts +++ b/packages/xrpl/src/models/transactions/XChainClaim.ts @@ -68,7 +68,7 @@ export function validateXChainClaim(tx: Record): void { validateRequiredField( tx, 'XChainClaimID', - (inp) => isNumber(inp) || isString(inp), + (inp: unknown): inp is number | string => isNumber(inp) || isString(inp), ) validateRequiredField(tx, 'Destination', isAccount) diff --git a/packages/xrpl/src/models/transactions/XChainCommit.ts b/packages/xrpl/src/models/transactions/XChainCommit.ts index a7434c0fbd..d8767eb27d 100644 --- a/packages/xrpl/src/models/transactions/XChainCommit.ts +++ b/packages/xrpl/src/models/transactions/XChainCommit.ts @@ -67,7 +67,7 @@ export function validateXChainCommit(tx: Record): void { validateRequiredField( tx, 'XChainClaimID', - (inp) => isNumber(inp) || isString(inp), + (inp: unknown): inp is number | string => isNumber(inp) || isString(inp), ) validateOptionalField(tx, 'OtherChainDestination', isAccount) diff --git a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts index 841960b8f0..4825106b79 100644 --- a/packages/xrpl/src/models/transactions/XChainModifyBridge.ts +++ b/packages/xrpl/src/models/transactions/XChainModifyBridge.ts @@ -2,7 +2,7 @@ import { Amount, XChainBridge } from '../common' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, isAmount, isXChainBridge, validateBaseTransaction, @@ -26,7 +26,7 @@ export enum XChainModifyBridgeFlags { * * @category Transaction Flags */ -export interface XChainModifyBridgeFlagsInterface extends GlobalFlags { +export interface XChainModifyBridgeFlagsInterface extends GlobalFlagsInterface { /** Clears the MinAccountCreateAmount of the bridge. */ tfClearAccountCreateAmount?: boolean } diff --git a/packages/xrpl/src/models/transactions/accountDelete.ts b/packages/xrpl/src/models/transactions/accountDelete.ts index bf9282ad5b..b4c2eef158 100644 --- a/packages/xrpl/src/models/transactions/accountDelete.ts +++ b/packages/xrpl/src/models/transactions/accountDelete.ts @@ -4,8 +4,10 @@ import { isAccount, isNumber, validateBaseTransaction, + validateCredentialsList, validateOptionalField, validateRequiredField, + MAX_AUTHORIZED_CREDENTIALS, } from './common' /** @@ -28,6 +30,12 @@ export interface AccountDelete extends BaseTransaction { * information for the recipient of the deleted account's leftover XRP. */ DestinationTag?: number + /** + * Credentials associated with sender of this transaction. The credentials included + * must not be expired. The list must not be empty when specified and cannot contain + * more than 8 credentials. + */ + CredentialIDs?: string[] } /** @@ -41,4 +49,11 @@ export function validateAccountDelete(tx: Record): void { validateRequiredField(tx, 'Destination', isAccount) validateOptionalField(tx, 'DestinationTag', isNumber) + + validateCredentialsList( + tx.CredentialIDs, + tx.TransactionType, + true, + MAX_AUTHORIZED_CREDENTIALS, + ) } diff --git a/packages/xrpl/src/models/transactions/accountSet.ts b/packages/xrpl/src/models/transactions/accountSet.ts index 1d4c9078a5..33678ff1ff 100644 --- a/packages/xrpl/src/models/transactions/accountSet.ts +++ b/packages/xrpl/src/models/transactions/accountSet.ts @@ -3,6 +3,7 @@ import { ValidationError } from '../../errors' import { Account, BaseTransaction, + GlobalFlagsInterface, isAccount, validateBaseTransaction, validateOptionalField, @@ -60,6 +61,8 @@ export enum AccountSetAsfFlags { asfDisallowIncomingTrustline = 15, /** Permanently gain the ability to claw back issued IOUs */ asfAllowTrustLineClawback = 16, + /** Issuers allow their IOUs to be used as escrow amounts */ + asfAllowTrustLineLocking = 17, } /** @@ -112,7 +115,7 @@ export enum AccountSetTfFlags { * // } * ``` */ -export interface AccountSetFlagsInterface { +export interface AccountSetFlagsInterface extends GlobalFlagsInterface { tfRequireDestTag?: boolean tfOptionalDestTag?: boolean tfRequireAuth?: boolean diff --git a/packages/xrpl/src/models/transactions/batch.ts b/packages/xrpl/src/models/transactions/batch.ts new file mode 100644 index 0000000000..e11f4e4422 --- /dev/null +++ b/packages/xrpl/src/models/transactions/batch.ts @@ -0,0 +1,168 @@ +import { ValidationError } from '../../errors' +import { Signer } from '../common' +import { hasFlag } from '../utils' + +import { + BaseTransaction, + GlobalFlags, + GlobalFlagsInterface, + isArray, + isNull, + isRecord, + isString, + isValue, + validateBaseTransaction, + validateOptionalField, + validateRequiredField, +} from './common' +import type { SubmittableTransaction } from './transaction' + +/** + * Enum representing values of {@link Batch} transaction flags. + * + * @category Transaction Flags + */ +export enum BatchFlags { + tfAllOrNothing = 0x00010000, + tfOnlyOne = 0x00020000, + tfUntilFailure = 0x00040000, + tfIndependent = 0x00080000, +} + +/** + * Map of flags to boolean values representing {@link Batch} transaction + * flags. + * + * @category Transaction Flags + */ +export interface BatchFlagsInterface extends GlobalFlagsInterface { + tfAllOrNothing?: boolean + tfOnlyOne?: boolean + tfUntilFailure?: boolean + tfIndependent?: boolean +} + +export interface BatchSigner { + BatchSigner: { + Account: string + + SigningPubKey?: string + + TxnSignature?: string + + Signers?: Signer[] + } +} + +/** + * @category Transaction Models + */ +export interface Batch extends BaseTransaction { + TransactionType: 'Batch' + + BatchSigners?: BatchSigner[] + + RawTransactions: Array<{ + RawTransaction: SubmittableTransaction + }> +} + +function validateBatchInnerTransaction( + tx: Record, + index: number, +): void { + if (tx.TransactionType === 'Batch') { + throw new ValidationError( + `Batch: RawTransactions[${index}] is a Batch transaction. Cannot nest Batch transactions.`, + ) + } + + // Check for the `tfInnerBatchTxn` flag in the inner transactions + if (!hasFlag(tx, GlobalFlags.tfInnerBatchTxn, 'tfInnerBatchTxn')) { + throw new ValidationError( + `Batch: RawTransactions[${index}] must contain the \`tfInnerBatchTxn\` flag.`, + ) + } + validateOptionalField(tx, 'Fee', isValue('0'), { + paramName: `RawTransactions[${index}].RawTransaction.Fee`, + txType: 'Batch', + }) + validateOptionalField(tx, 'SigningPubKey', isValue(''), { + paramName: `RawTransactions[${index}].RawTransaction.SigningPubKey`, + txType: 'Batch', + }) + validateOptionalField(tx, 'TxnSignature', isNull, { + paramName: `RawTransactions[${index}].RawTransaction.TxnSignature`, + txType: 'Batch', + }) + validateOptionalField(tx, 'Signers', isNull, { + paramName: `RawTransactions[${index}].RawTransaction.Signers`, + txType: 'Batch', + }) + validateOptionalField(tx, 'LastLedgerSequence', isNull, { + paramName: `RawTransactions[${index}].RawTransaction.LastLedgerSequence`, + txType: 'Batch', + }) +} + +/** + * Verify the form and type of a Batch at runtime. + * + * @param tx - A Batch Transaction. + * @throws When the Batch is malformed. + */ +// eslint-disable-next-line max-lines-per-function -- needed here due to the complexity +export function validateBatch(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'RawTransactions', isArray) + + tx.RawTransactions.forEach((rawTxObj, index) => { + if (!isRecord(rawTxObj)) { + throw new ValidationError( + `Batch: RawTransactions[${index}] is not object.`, + ) + } + validateRequiredField(rawTxObj, 'RawTransaction', isRecord, { + paramName: `RawTransactions[${index}].RawTransaction`, + txType: 'Batch', + }) + + const rawTx = rawTxObj.RawTransaction + validateBatchInnerTransaction(rawTx, index) + + // Full validation of each `RawTransaction` object is done in `validate` to avoid dependency cycles + }) + + validateOptionalField(tx, 'BatchSigners', isArray) + + tx.BatchSigners?.forEach((signerObj, index) => { + if (!isRecord(signerObj)) { + throw new ValidationError(`Batch: BatchSigners[${index}] is not object.`) + } + + const signerRecord = signerObj + validateRequiredField(signerRecord, 'BatchSigner', isRecord, { + paramName: `BatchSigners[${index}].BatchSigner`, + txType: 'Batch', + }) + + const signer = signerRecord.BatchSigner + validateRequiredField(signer, 'Account', isString, { + paramName: `BatchSigners[${index}].BatchSigner.Account`, + txType: 'Batch', + }) + validateOptionalField(signer, 'SigningPubKey', isString, { + paramName: `BatchSigners[${index}].BatchSigner.SigningPubKey`, + txType: 'Batch', + }) + validateOptionalField(signer, 'TxnSignature', isString, { + paramName: `BatchSigners[${index}].BatchSigner.TxnSignature`, + txType: 'Batch', + }) + validateOptionalField(signer, 'Signers', isArray, { + paramName: `BatchSigners[${index}].BatchSigner.Signers`, + txType: 'Batch', + }) + }) +} diff --git a/packages/xrpl/src/models/transactions/checkCreate.ts b/packages/xrpl/src/models/transactions/checkCreate.ts index c8a84430f4..7e995ce36f 100644 --- a/packages/xrpl/src/models/transactions/checkCreate.ts +++ b/packages/xrpl/src/models/transactions/checkCreate.ts @@ -4,7 +4,7 @@ import { Amount } from '../common' import { BaseTransaction, validateBaseTransaction, - isIssuedCurrency, + isIssuedCurrencyAmount, isAccount, validateRequiredField, validateOptionalField, @@ -64,11 +64,7 @@ export function validateCheckCreate(tx: Record): void { validateRequiredField(tx, 'Destination', isAccount) validateOptionalField(tx, 'DestinationTag', isNumber) - if ( - typeof tx.SendMax !== 'string' && - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - !isIssuedCurrency(tx.SendMax as Record) - ) { + if (typeof tx.SendMax !== 'string' && !isIssuedCurrencyAmount(tx.SendMax)) { throw new ValidationError('CheckCreate: invalid SendMax') } diff --git a/packages/xrpl/src/models/transactions/clawback.ts b/packages/xrpl/src/models/transactions/clawback.ts index fb51859cfc..a1fe39537f 100644 --- a/packages/xrpl/src/models/transactions/clawback.ts +++ b/packages/xrpl/src/models/transactions/clawback.ts @@ -1,10 +1,15 @@ import { ValidationError } from '../../errors' -import { IssuedCurrencyAmount } from '../common' +import { ClawbackAmount } from '../common' import { BaseTransaction, validateBaseTransaction, - isIssuedCurrency, + isIssuedCurrencyAmount, + isMPTAmount, + isAccount, + validateOptionalField, + isClawbackAmount, + validateRequiredField, } from './common' /** @@ -15,15 +20,20 @@ export interface Clawback extends BaseTransaction { TransactionType: 'Clawback' /** * Indicates the AccountID that submitted this transaction. The account MUST - * be the issuer of the currency. + * be the issuer of the currency or MPT. */ Account: string /** - * The amount of currency to deliver, and it must be non-XRP. The nested field - * names MUST be lower-case. The `issuer` field MUST be the holder's address, + * The amount of currency or MPT to clawback, and it must be non-XRP. The nested field + * names MUST be lower-case. If the amount is IOU, the `issuer` field MUST be the holder's address, * whom to be clawed back. */ - Amount: IssuedCurrencyAmount + Amount: ClawbackAmount + /** + * Indicates the AccountID that the issuer wants to clawback. This field is only valid for clawing back + * MPTs. + */ + Holder?: string } /** @@ -34,16 +44,26 @@ export interface Clawback extends BaseTransaction { */ export function validateClawback(tx: Record): void { validateBaseTransaction(tx) + validateRequiredField(tx, 'Amount', isClawbackAmount) + validateOptionalField(tx, 'Holder', isAccount) - if (tx.Amount == null) { - throw new ValidationError('Clawback: missing field Amount') + if (!isIssuedCurrencyAmount(tx.Amount) && !isMPTAmount(tx.Amount)) { + throw new ValidationError('Clawback: invalid Amount') } - if (!isIssuedCurrency(tx.Amount)) { - throw new ValidationError('Clawback: invalid Amount') + if (isIssuedCurrencyAmount(tx.Amount) && tx.Account === tx.Amount.issuer) { + throw new ValidationError('Clawback: invalid holder Account') } - if (isIssuedCurrency(tx.Amount) && tx.Account === tx.Amount.issuer) { + if (isMPTAmount(tx.Amount) && tx.Account === tx.Holder) { throw new ValidationError('Clawback: invalid holder Account') } + + if (isIssuedCurrencyAmount(tx.Amount) && tx.Holder) { + throw new ValidationError('Clawback: cannot have Holder for currency') + } + + if (isMPTAmount(tx.Amount) && !tx.Holder) { + throw new ValidationError('Clawback: missing Holder') + } } diff --git a/packages/xrpl/src/models/transactions/common.ts b/packages/xrpl/src/models/transactions/common.ts index 5af72d038a..42dfe47cbf 100644 --- a/packages/xrpl/src/models/transactions/common.ts +++ b/packages/xrpl/src/models/transactions/common.ts @@ -1,30 +1,49 @@ +/* eslint-disable max-lines -- common utility file */ +import { HEX_REGEX } from '@xrplf/isomorphic/utils' import { isValidClassicAddress, isValidXAddress } from 'ripple-address-codec' import { TRANSACTION_TYPES } from 'ripple-binary-codec' import { ValidationError } from '../../errors' import { Amount, + AuthorizeCredential, + ClawbackAmount, Currency, + IssuedCurrency, IssuedCurrencyAmount, + MPTAmount, Memo, Signer, XChainBridge, } from '../common' -import { onlyHasFields } from '../utils' +import { isHex, onlyHasFields } from '../utils' const MEMO_SIZE = 3 +export const MAX_AUTHORIZED_CREDENTIALS = 8 +const MAX_CREDENTIAL_BYTE_LENGTH = 64 +const MAX_CREDENTIAL_TYPE_LENGTH = MAX_CREDENTIAL_BYTE_LENGTH * 2 +const SHA_512_HALF_LENGTH = 64 -function isMemo(obj: { Memo?: unknown }): boolean { - if (obj.Memo == null) { +// Used for Vault transactions +export const VAULT_DATA_MAX_BYTE_LENGTH = 256 + +function isMemo(obj: unknown): obj is Memo { + if (!isRecord(obj)) { + return false + } + + const memo = obj.Memo + if (!isRecord(memo)) { return false } - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - const memo = obj.Memo as Record const size = Object.keys(memo).length - const validData = memo.MemoData == null || typeof memo.MemoData === 'string' + const validData = + memo.MemoData == null || (isString(memo.MemoData) && isHex(memo.MemoData)) const validFormat = - memo.MemoFormat == null || typeof memo.MemoFormat === 'string' - const validType = memo.MemoType == null || typeof memo.MemoType === 'string' + memo.MemoFormat == null || + (isString(memo.MemoFormat) && isHex(memo.MemoFormat)) + const validType = + memo.MemoType == null || (isString(memo.MemoType) && isHex(memo.MemoType)) return ( size >= 1 && @@ -38,30 +57,44 @@ function isMemo(obj: { Memo?: unknown }): boolean { const SIGNER_SIZE = 3 -function isSigner(obj: unknown): boolean { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - const signerWrapper = obj as Record +function isSigner(obj: unknown): obj is Signer { + if (!isRecord(obj)) { + return false + } - if (signerWrapper.Signer == null) { + const signer = obj.Signer + if (!isRecord(signer)) { return false } - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS and Signer is previously unknown - const signer = signerWrapper.Signer as Record + return ( Object.keys(signer).length === SIGNER_SIZE && - typeof signer.Account === 'string' && - typeof signer.TxnSignature === 'string' && - typeof signer.SigningPubKey === 'string' + isString(signer.Account) && + isString(signer.TxnSignature) && + isString(signer.SigningPubKey) ) } +// Currency object sizes const XRP_CURRENCY_SIZE = 1 -const ISSUE_SIZE = 2 -const ISSUED_CURRENCY_SIZE = 3 +const MPT_CURRENCY_SIZE = 1 +const ISSUE_CURRENCY_SIZE = 2 + +// Currency Amount object sizes +const MPT_CURRENCY_AMOUNT_SIZE = 2 +const ISSUED_CURRENCY_AMOUNT_SIZE = 3 + const XCHAIN_BRIDGE_SIZE = 4 +const AUTHORIZE_CREDENTIAL_SIZE = 1 -function isRecord(value: unknown): value is Record { - return value !== null && typeof value === 'object' +/** + * Verify the form and type of a Record/Object at runtime. + * + * @param value - The object to check the form and type of. + * @returns Whether the Record/Object is properly formed. + */ +export function isRecord(value: unknown): value is Record { + return value !== null && typeof value === 'object' && !Array.isArray(value) } /** @@ -84,18 +117,81 @@ export function isNumber(num: unknown): num is number { return typeof num === 'number' } +/** + * Verify the form and type of a null value at runtime. + * + * @param inp - The value to check the form and type of. + * @returns Whether the value is properly formed. + */ +export function isNull(inp: unknown): inp is null { + return inp == null +} + +/** + * Verify that a certain field has a certain exact value at runtime. + * + * @param value The value to compare against. + * @returns Whether the number is properly formed and within the bounds. + */ +export function isValue(value: V): (inp: unknown) => inp is V { + // eslint-disable-next-line func-style -- returning a function + const isValueInternal = (inp: unknown): inp is V => inp === value + return isValueInternal +} + +/** + * Checks whether the given value is a valid XRPL number string. + * Accepts integer, decimal, or scientific notation strings. + * + * Examples of valid input: + * - "123" + * - "-987.654" + * - "+3.14e10" + * - "-7.2e-9" + * + * @param value - The value to check. + * @returns True if value is a string that matches the XRPL number format, false otherwise. + */ +export function isXRPLNumber(value: unknown): value is XRPLNumber { + // Matches optional sign, digits, optional decimal, optional exponent (scientific) + // Allows leading zeros, but not empty string, lone sign, or missing digits + return ( + typeof value === 'string' && + /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(?:[eE][-+]?\d+)?$/u.test(value.trim()) + ) +} + +/** + * Verify the form and type of a Currency at runtime. + * + * @param input - The input to check the form and type of. + * @returns Whether the Currency is properly formed. + */ +export function isCurrency(input: unknown): input is Currency { + return ( + isRecord(input) && + ((Object.keys(input).length === ISSUE_CURRENCY_SIZE && + isString(input.issuer) && + isString(input.currency)) || + (Object.keys(input).length === XRP_CURRENCY_SIZE && + input.currency === 'XRP') || + (Object.keys(input).length === MPT_CURRENCY_SIZE && + isString(input.mpt_issuance_id))) + ) +} + /** * Verify the form and type of an IssuedCurrency at runtime. * * @param input - The input to check the form and type of. * @returns Whether the IssuedCurrency is properly formed. */ -export function isCurrency(input: unknown): input is Currency { +export function isIssuedCurrency(input: unknown): input is IssuedCurrency { return ( isRecord(input) && - ((Object.keys(input).length === ISSUE_SIZE && - typeof input.issuer === 'string' && - typeof input.currency === 'string') || + ((Object.keys(input).length === ISSUE_CURRENCY_SIZE && + isString(input.issuer) && + isString(input.currency)) || (Object.keys(input).length === XRP_CURRENCY_SIZE && input.currency === 'XRP')) ) @@ -107,23 +203,78 @@ export function isCurrency(input: unknown): input is Currency { * @param input - The input to check the form and type of. * @returns Whether the IssuedCurrencyAmount is properly formed. */ -export function isIssuedCurrency( +export function isIssuedCurrencyAmount( input: unknown, ): input is IssuedCurrencyAmount { return ( isRecord(input) && - Object.keys(input).length === ISSUED_CURRENCY_SIZE && + Object.keys(input).length === ISSUED_CURRENCY_AMOUNT_SIZE && + isString(input.value) && + isString(input.issuer) && + isString(input.currency) + ) +} + +/** + * Verify the form and type of an AuthorizeCredential at runtime + * + * @param input - The input to check the form and type of + * @returns Whether the AuthorizeCredential is properly formed + */ +export function isAuthorizeCredential( + input: unknown, +): input is AuthorizeCredential { + return ( + isRecord(input) && + isRecord(input.Credential) && + Object.keys(input).length === AUTHORIZE_CREDENTIAL_SIZE && + typeof input.Credential.CredentialType === 'string' && + typeof input.Credential.Issuer === 'string' + ) +} + +/** + * Verify the form and type of an MPT at runtime. + * + * @param input - The input to check the form and type of. + * @returns Whether the MPTAmount is properly formed. + */ +export function isMPTAmount(input: unknown): input is MPTAmount { + return ( + isRecord(input) && + Object.keys(input).length === MPT_CURRENCY_AMOUNT_SIZE && typeof input.value === 'string' && - typeof input.issuer === 'string' && - typeof input.currency === 'string' + typeof input.mpt_issuance_id === 'string' ) } +/** + * Type guard to verify if the input is a valid ClawbackAmount. + * + * A ClawbackAmount can be either an {@link IssuedCurrencyAmount} or an {@link MPTAmount}. + * This function checks if the input matches either type. + * + * @param input - The value to check for ClawbackAmount structure. + * @returns True if the input is an IssuedCurrencyAmount or MPTAmount, otherwise false. + */ +export function isClawbackAmount(input: unknown): input is ClawbackAmount { + return isIssuedCurrencyAmount(input) || isMPTAmount(input) +} + /** * Must be a valid account address */ export type Account = string +/** + * XRPL Number type represented as a string. + * + * This string can be an integer (e.g., "123"), a decimal (e.g., "123.45"), + * or in scientific notation (e.g., "1.23e5", "-4.56e-7"). + * Used for fields that accept arbitrary-precision numbers in XRPL transactions and ledger objects. + */ +export type XRPLNumber = string + /** * Verify a string is in fact a valid account address. * @@ -144,7 +295,23 @@ export function isAccount(account: unknown): account is Account { * @returns Whether the Amount is properly formed. */ export function isAmount(amount: unknown): amount is Amount { - return typeof amount === 'string' || isIssuedCurrency(amount) + return ( + typeof amount === 'string' || + isIssuedCurrencyAmount(amount) || + isMPTAmount(amount) + ) +} + +/** + * Verify the form and type of IOU/MPT token amount at runtime. + * + * @param amount - The object to check the form and type of. + * @returns Whether the Amount is properly formed. + */ +export function isTokenAmount( + amount: unknown, +): amount is IssuedCurrencyAmount | MPTAmount { + return isIssuedCurrencyAmount(amount) || isMPTAmount(amount) } /** @@ -158,9 +325,48 @@ export function isXChainBridge(input: unknown): input is XChainBridge { isRecord(input) && Object.keys(input).length === XCHAIN_BRIDGE_SIZE && typeof input.LockingChainDoor === 'string' && - isCurrency(input.LockingChainIssue) && + isIssuedCurrency(input.LockingChainIssue) && typeof input.IssuingChainDoor === 'string' && - isCurrency(input.IssuingChainIssue) + isIssuedCurrency(input.IssuingChainIssue) + ) +} + +/** + * Verify the form and type of an Array at runtime. + * + * @param input - The object to check the form and type of. + * @returns Whether the Array is properly formed. + */ +export function isArray(input: unknown): input is T[] { + return input != null && Array.isArray(input) +} + +/** + * Verify the input is a valid ledger entry id. + * + * @param input - The object to validate. + * @returns Whether the input is a valid ledger entry id. + */ +export function isLedgerEntryId(input: unknown): input is string { + return isString(input) && isHex(input) && input.length === SHA_512_HALF_LENGTH +} + +/** + * Validate input is non-empty hex string of up to a certain length. + * + * @param input - The metadata to validate. + * @param lengthUpto - The maximum length of the hex string. + * @returns Whether the input is a valid non-empty hex string up to the specified length. + */ +export function validateHexMetadata( + input: unknown, + lengthUpto: number, +): input is string { + return ( + isString(input) && + isHex(input) && + input.length > 0 && + input.length <= lengthUpto ) } @@ -169,25 +375,39 @@ export function isXChainBridge(input: unknown): input is XChainBridge { /** * Verify the form and type of a required type for a transaction at runtime. * - * @param tx - The transaction input to check the form and type of. - * @param paramName - The name of the transaction parameter. + * @param tx - The object input to check the form and type of. + * @param param - The object parameter. * @param checkValidity - The function to use to check the type. - * @throws + * @param errorOpts - Extra values to make the error message easier to understand. + * @param errorOpts.txType - The transaction type throwing the error. + * @param errorOpts.paramName - The name of the parameter in the transaction with the error. + * @throws ValidationError if the parameter is missing or invalid. */ -export function validateRequiredField( - tx: Record, - paramName: string, - checkValidity: (inp: unknown) => boolean, -): void { - if (tx[paramName] == null) { +// eslint-disable-next-line max-params -- helper function +export function validateRequiredField< + T extends Record, + K extends keyof T, + V, +>( + tx: T, + param: K, + checkValidity: (inp: unknown) => inp is V, + errorOpts: { + txType?: string + paramName?: string + } = {}, +): asserts tx is T & { [P in K]: V } { + const paramNameStr = errorOpts.paramName ?? param + const txType = errorOpts.txType ?? tx.TransactionType + if (tx[param] == null) { throw new ValidationError( - `${tx.TransactionType}: missing field ${paramName}`, + `${txType}: missing field ${String(paramNameStr)}`, ) } - if (!checkValidity(tx[paramName])) { + if (!checkValidity(tx[param])) { throw new ValidationError( - `${tx.TransactionType}: invalid field ${paramName}`, + `${txType}: invalid field ${String(paramNameStr)}`, ) } } @@ -196,31 +416,50 @@ export function validateRequiredField( * Verify the form and type of an optional type for a transaction at runtime. * * @param tx - The transaction input to check the form and type of. - * @param paramName - The name of the transaction parameter. + * @param param - The object parameter. * @param checkValidity - The function to use to check the type. - * @throws + * @param errorOpts - Extra values to make the error message easier to understand. + * @param errorOpts.txType - The transaction type throwing the error. + * @param errorOpts.paramName - The name of the parameter in the transaction with the error. + * @throws ValidationError if the parameter is invalid. */ -export function validateOptionalField( - tx: Record, - paramName: string, - checkValidity: (inp: unknown) => boolean, -): void { - if (tx[paramName] !== undefined && !checkValidity(tx[paramName])) { +// eslint-disable-next-line max-params -- helper function +export function validateOptionalField< + T extends Record, + K extends keyof T, + V, +>( + tx: T, + param: K, + checkValidity: (inp: unknown) => inp is V, + errorOpts: { + txType?: string + paramName?: string + } = {}, +): asserts tx is T & { [P in K]: V | undefined } { + const paramNameStr = errorOpts.paramName ?? param + const txType = errorOpts.txType ?? tx.TransactionType + if (tx[param] !== undefined && !checkValidity(tx[param])) { throw new ValidationError( - `${tx.TransactionType}: invalid field ${paramName}`, + `${txType}: invalid field ${String(paramNameStr)}`, ) } } /* eslint-enable @typescript-eslint/restrict-template-expressions -- checked before */ -// eslint-disable-next-line @typescript-eslint/no-empty-interface -- no global flags right now, so this is fine -export interface GlobalFlags {} +export enum GlobalFlags { + tfInnerBatchTxn = 0x40000000, +} + +export interface GlobalFlagsInterface { + tfInnerBatchTxn?: boolean +} /** * Every transaction has the same set of common fields. */ -export interface BaseTransaction { +export interface BaseTransaction extends Record { /** The unique address of the transaction sender. */ Account: Account /** @@ -248,7 +487,7 @@ export interface BaseTransaction { */ AccountTxnID?: string /** Set of bit-flags for this transaction. */ - Flags?: number | GlobalFlags + Flags?: number | GlobalFlagsInterface /** * Highest ledger index this transaction can appear in. Specifying this field * places a strict upper limit on how long the transaction can wait to be @@ -291,6 +530,10 @@ export interface BaseTransaction { * The network id of the transaction. */ NetworkID?: number + /** + * The delegate account that is sending the transaction. + */ + Delegate?: Account } /** @@ -301,7 +544,16 @@ export interface BaseTransaction { * @param common - An interface w/ common transaction fields. * @throws When the common param is malformed. */ -export function validateBaseTransaction(common: Record): void { +// eslint-disable-next-line max-statements, max-lines-per-function -- lines required for validation +export function validateBaseTransaction( + common: unknown, +): asserts common is BaseTransaction { + if (!isRecord(common)) { + throw new ValidationError( + 'BaseTransaction: invalid, expected a valid object', + ) + } + if (common.TransactionType === undefined) { throw new ValidationError('BaseTransaction: missing field TransactionType') } @@ -311,7 +563,9 @@ export function validateBaseTransaction(common: Record): void { } if (!TRANSACTION_TYPES.includes(common.TransactionType)) { - throw new ValidationError('BaseTransaction: Unknown TransactionType') + throw new ValidationError( + `BaseTransaction: Unknown TransactionType ${common.TransactionType}`, + ) } validateRequiredField(common, 'Account', isString) @@ -324,18 +578,16 @@ export function validateBaseTransaction(common: Record): void { validateOptionalField(common, 'LastLedgerSequence', isNumber) - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - const memos = common.Memos as Array<{ Memo?: unknown }> | undefined - if (memos !== undefined && !memos.every(isMemo)) { + const memos = common.Memos + if (memos != null && (!isArray(memos) || !memos.every(isMemo))) { throw new ValidationError('BaseTransaction: invalid Memos') } - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - const signers = common.Signers as Array> | undefined + const signers = common.Signers if ( - signers !== undefined && - (signers.length === 0 || !signers.every(isSigner)) + signers != null && + (!isArray(signers) || signers.length === 0 || !signers.every(isSigner)) ) { throw new ValidationError('BaseTransaction: invalid Signers') } @@ -349,6 +601,15 @@ export function validateBaseTransaction(common: Record): void { validateOptionalField(common, 'TxnSignature', isString) validateOptionalField(common, 'NetworkID', isNumber) + + validateOptionalField(common, 'Delegate', isAccount) + + const delegate = common.Delegate + if (delegate != null && delegate === common.Account) { + throw new ValidationError( + 'BaseTransaction: Account and Delegate addresses cannot be the same', + ) + } } /** @@ -366,3 +627,154 @@ export function parseAmountValue(amount: unknown): number { } return parseFloat(amount.value) } + +/** + * Verify the form and type of a CredentialType at runtime. + * + * @param tx A CredentialType Transaction. + * @throws when the CredentialType is malformed. + */ +export function validateCredentialType< + T extends BaseTransaction & Record, +>(tx: T): void { + if (typeof tx.TransactionType !== 'string') { + throw new ValidationError('Invalid TransactionType') + } + if (tx.CredentialType === undefined) { + throw new ValidationError( + `${tx.TransactionType}: missing field CredentialType`, + ) + } + + if (!isString(tx.CredentialType)) { + throw new ValidationError( + `${tx.TransactionType}: CredentialType must be a string`, + ) + } + if (tx.CredentialType.length === 0) { + throw new ValidationError( + `${tx.TransactionType}: CredentialType cannot be an empty string`, + ) + } else if (tx.CredentialType.length > MAX_CREDENTIAL_TYPE_LENGTH) { + throw new ValidationError( + `${tx.TransactionType}: CredentialType length cannot be > ${MAX_CREDENTIAL_TYPE_LENGTH}`, + ) + } + + if (!HEX_REGEX.test(tx.CredentialType)) { + throw new ValidationError( + `${tx.TransactionType}: CredentialType must be encoded in hex`, + ) + } +} + +/** + * Check a CredentialAuthorize array for parameter errors + * + * @param credentials An array of credential IDs to check for errors + * @param transactionType The transaction type to include in error messages + * @param isStringID Toggle for if array contains IDs instead of AuthorizeCredential objects + * @param maxCredentials The maximum length of the credentials array. + * PermissionedDomainSet transaction uses 10, other transactions use 8. + * @throws Validation Error if the formatting is incorrect + */ +// eslint-disable-next-line max-params, max-lines-per-function -- separating logic further will add unnecessary complexity +export function validateCredentialsList( + credentials: unknown, + transactionType: string, + isStringID: boolean, + maxCredentials: number, +): void { + if (credentials == null) { + return + } + if (!isArray(credentials)) { + throw new ValidationError( + `${transactionType}: Credentials must be an array`, + ) + } + if (credentials.length > maxCredentials) { + throw new ValidationError( + `${transactionType}: Credentials length cannot exceed ${maxCredentials} elements`, + ) + } else if (credentials.length === 0) { + throw new ValidationError( + `${transactionType}: Credentials cannot be an empty array`, + ) + } + credentials.forEach((credential) => { + if (isStringID) { + if (!isString(credential)) { + throw new ValidationError( + `${transactionType}: Invalid Credentials ID list format`, + ) + } + } else if (!isAuthorizeCredential(credential)) { + throw new ValidationError( + `${transactionType}: Invalid Credentials format`, + ) + } + }) + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- checked above + if (containsDuplicates(credentials as string[] | AuthorizeCredential[])) { + throw new ValidationError( + `${transactionType}: Credentials cannot contain duplicate elements`, + ) + } +} + +// Type guard to ensure we're working with AuthorizeCredential[] +// Note: This is not a rigorous type-guard. A more thorough solution would be to iterate over the array and check each item. +function isAuthorizeCredentialArray( + list: AuthorizeCredential[] | string[], +): list is AuthorizeCredential[] { + return typeof list[0] !== 'string' +} + +/** + * Check if an array of objects contains any duplicates. + * + * @param objectList - Array of objects to check for duplicates + * @returns True if duplicates exist, false otherwise + */ +export function containsDuplicates( + objectList: AuthorizeCredential[] | string[], +): boolean { + // Case-1: Process a list of string-IDs + if (typeof objectList[0] === 'string') { + const objSet = new Set(objectList.map((obj) => JSON.stringify(obj))) + return objSet.size !== objectList.length + } + + // Case-2: Process a list of nested objects + const seen = new Set() + + if (isAuthorizeCredentialArray(objectList)) { + for (const item of objectList) { + const key = `${item.Credential.Issuer}-${item.Credential.CredentialType}` + if (seen.has(key)) { + return true + } + seen.add(key) + } + } + + return false +} + +const _DOMAIN_ID_LENGTH = 64 + +/** + * Utility method used across OfferCreate and Payment transactions to validate the DomainID. + * + * @param domainID - The domainID is a 64-character string that is used to identify a domain. + * + * @returns true if the domainID is a valid 64-character string, false otherwise + */ +export function isDomainID(domainID: unknown): domainID is string { + return ( + isString(domainID) && + domainID.length === _DOMAIN_ID_LENGTH && + isHex(domainID) + ) +} diff --git a/packages/xrpl/src/models/transactions/delegateSet.ts b/packages/xrpl/src/models/transactions/delegateSet.ts new file mode 100644 index 0000000000..08d1a9b994 --- /dev/null +++ b/packages/xrpl/src/models/transactions/delegateSet.ts @@ -0,0 +1,112 @@ +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + validateBaseTransaction, + validateRequiredField, + isAccount, + Account, +} from './common' + +const PERMISSIONS_MAX_LENGTH = 10 +const NON_DELEGABLE_TRANSACTIONS = new Set([ + 'AccountSet', + 'SetRegularKey', + 'SignerListSet', + 'DelegateSet', + 'AccountDelete', + 'Batch', + // Pseudo transactions below: + 'EnableAmendment', + 'SetFee', + 'UNLModify', +]) + +export interface Permission { + Permission: { + PermissionValue: string + } +} + +/** + * DelegateSet allows an account to delegate a set of permissions to another account. + * + * @category Transaction Models + */ +export interface DelegateSet extends BaseTransaction { + TransactionType: 'DelegateSet' + + /** + * The authorized account. + */ + Authorize: Account + + /** + * The transaction permissions (represented by integers) that the account has been granted. + */ + Permissions: Permission[] +} + +/** + * Verify the form and type of an DelegateSet at runtime. + * + * @param tx - An DelegateSet Transaction. + * @throws When the DelegateSet is malformed. + */ +// eslint-disable-next-line max-lines-per-function -- necessary for validation +export function validateDelegateSet(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'Authorize', isAccount) + + if (tx.Authorize === tx.Account) { + throw new ValidationError( + 'DelegateSet: Authorize and Account must be different.', + ) + } + + validateRequiredField(tx, 'Permissions', Array.isArray) + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- required for validation + const permissions = tx.Permissions as DelegateSet['Permissions'] + if (permissions.length > PERMISSIONS_MAX_LENGTH) { + throw new ValidationError( + `DelegateSet: Permissions array length cannot be greater than ${PERMISSIONS_MAX_LENGTH}.`, + ) + } + + const permissionValueSet = new Set() + permissions.forEach((permission: Permission) => { + if ( + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- required for validation + permission == null || + Object.keys(permission).length !== 1 || + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- required for validation + permission.Permission == null || + Object.keys(permission.Permission).length !== 1 + ) { + throw new ValidationError( + 'DelegateSet: Permissions array element is malformed', + ) + } + const permissionValue = permission.Permission.PermissionValue + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- required for validation + if (permissionValue == null) { + throw new ValidationError('DelegateSet: PermissionValue must be defined') + } + if (typeof permissionValue !== 'string') { + throw new ValidationError('DelegateSet: PermissionValue must be a string') + } + if (NON_DELEGABLE_TRANSACTIONS.has(permissionValue)) { + throw new ValidationError( + `DelegateSet: PermissionValue contains a non-delegatable transaction ${permissionValue}`, + ) + } + permissionValueSet.add(permissionValue) + }) + if (permissions.length !== permissionValueSet.size) { + throw new ValidationError( + 'DelegateSet: Permissions array cannot contain duplicate values', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/depositPreauth.ts b/packages/xrpl/src/models/transactions/depositPreauth.ts index eaf186e8b1..2c4a56a46e 100644 --- a/packages/xrpl/src/models/transactions/depositPreauth.ts +++ b/packages/xrpl/src/models/transactions/depositPreauth.ts @@ -1,6 +1,12 @@ import { ValidationError } from '../../errors' +import { AuthorizeCredential } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + validateBaseTransaction, + validateCredentialsList, + MAX_AUTHORIZED_CREDENTIALS, +} from './common' /** * A DepositPreauth transaction gives another account pre-approval to deliver @@ -18,6 +24,16 @@ export interface DepositPreauth extends BaseTransaction { * revoked. */ Unauthorize?: string + + /** + * The credential(s) to preauthorize. + */ + AuthorizeCredentials?: AuthorizeCredential[] + + /** + * The credential(s) whose preauthorization should be revoked. + */ + UnauthorizeCredentials?: AuthorizeCredential[] } /** @@ -29,17 +45,7 @@ export interface DepositPreauth extends BaseTransaction { export function validateDepositPreauth(tx: Record): void { validateBaseTransaction(tx) - if (tx.Authorize !== undefined && tx.Unauthorize !== undefined) { - throw new ValidationError( - "DepositPreauth: can't provide both Authorize and Unauthorize fields", - ) - } - - if (tx.Authorize === undefined && tx.Unauthorize === undefined) { - throw new ValidationError( - 'DepositPreauth: must provide either Authorize or Unauthorize field', - ) - } + validateSingleAuthorizationFieldProvided(tx) if (tx.Authorize !== undefined) { if (typeof tx.Authorize !== 'string') { @@ -51,9 +57,7 @@ export function validateDepositPreauth(tx: Record): void { "DepositPreauth: Account can't preauthorize its own address", ) } - } - - if (tx.Unauthorize !== undefined) { + } else if (tx.Unauthorize !== undefined) { if (typeof tx.Unauthorize !== 'string') { throw new ValidationError('DepositPreauth: Unauthorize must be a string') } @@ -63,5 +67,38 @@ export function validateDepositPreauth(tx: Record): void { "DepositPreauth: Account can't unauthorize its own address", ) } + } else if (tx.AuthorizeCredentials !== undefined) { + validateCredentialsList( + tx.AuthorizeCredentials, + tx.TransactionType, + false, + MAX_AUTHORIZED_CREDENTIALS, + ) + } else if (tx.UnauthorizeCredentials !== undefined) { + validateCredentialsList( + tx.UnauthorizeCredentials, + tx.TransactionType, + false, + MAX_AUTHORIZED_CREDENTIALS, + ) + } +} + +// Boolean logic to ensure exactly one of 4 inputs was provided +function validateSingleAuthorizationFieldProvided( + tx: Record, +): void { + const fields = [ + 'Authorize', + 'Unauthorize', + 'AuthorizeCredentials', + 'UnauthorizeCredentials', + ] + const countProvided = fields.filter((key) => tx[key] !== undefined).length + + if (countProvided !== 1) { + throw new ValidationError( + 'DepositPreauth: Requires exactly one field of the following: Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials.', + ) } } diff --git a/packages/xrpl/src/models/transactions/escrowCreate.ts b/packages/xrpl/src/models/transactions/escrowCreate.ts index 4f15d77dd8..d779843dcc 100644 --- a/packages/xrpl/src/models/transactions/escrowCreate.ts +++ b/packages/xrpl/src/models/transactions/escrowCreate.ts @@ -1,9 +1,11 @@ import { ValidationError } from '../../errors' +import { Amount, MPTAmount } from '../common' import { Account, BaseTransaction, isAccount, + isAmount, isNumber, validateBaseTransaction, validateOptionalField, @@ -18,11 +20,12 @@ import { export interface EscrowCreate extends BaseTransaction { TransactionType: 'EscrowCreate' /** - * Amount of XRP, in drops, to deduct from the sender's balance and escrow. - * Once escrowed, the XRP can either go to the Destination address (after the. - * FinishAfter time) or returned to the sender (after the CancelAfter time). + * The amount to deduct from the sender's balance and and set aside in escrow. + * Once escrowed, this amount can either go to the Destination address (after any Finish times/conditions) + * or returned to the sender (after any cancellation times/conditions). Can represent XRP, in drops, + * an IOU token, or an MPT. Must always be a positive value. */ - Amount: string + Amount: Amount | MPTAmount /** Address to receive escrowed XRP. */ Destination: Account /** @@ -58,14 +61,7 @@ export interface EscrowCreate extends BaseTransaction { export function validateEscrowCreate(tx: Record): void { validateBaseTransaction(tx) - if (tx.Amount === undefined) { - throw new ValidationError('EscrowCreate: missing field Amount') - } - - if (typeof tx.Amount !== 'string') { - throw new ValidationError('EscrowCreate: Amount must be a string') - } - + validateRequiredField(tx, 'Amount', isAmount) validateRequiredField(tx, 'Destination', isAccount) validateOptionalField(tx, 'DestinationTag', isNumber) diff --git a/packages/xrpl/src/models/transactions/escrowFinish.ts b/packages/xrpl/src/models/transactions/escrowFinish.ts index e89da3c522..fb4a59f963 100644 --- a/packages/xrpl/src/models/transactions/escrowFinish.ts +++ b/packages/xrpl/src/models/transactions/escrowFinish.ts @@ -5,7 +5,9 @@ import { BaseTransaction, isAccount, validateBaseTransaction, + validateCredentialsList, validateRequiredField, + MAX_AUTHORIZED_CREDENTIALS, } from './common' /** @@ -32,6 +34,10 @@ export interface EscrowFinish extends BaseTransaction { * the held payment's Condition. */ Fulfillment?: string + /** Credentials associated with the sender of this transaction. + * The credentials included must not be expired. + */ + CredentialIDs?: string[] } /** @@ -45,6 +51,13 @@ export function validateEscrowFinish(tx: Record): void { validateRequiredField(tx, 'Owner', isAccount) + validateCredentialsList( + tx.CredentialIDs, + tx.TransactionType, + true, + MAX_AUTHORIZED_CREDENTIALS, + ) + if (tx.OfferSequence == null) { throw new ValidationError('EscrowFinish: missing field OfferSequence') } diff --git a/packages/xrpl/src/models/transactions/index.ts b/packages/xrpl/src/models/transactions/index.ts index c7a8120758..d7afb63012 100644 --- a/packages/xrpl/src/models/transactions/index.ts +++ b/packages/xrpl/src/models/transactions/index.ts @@ -1,4 +1,9 @@ -export { BaseTransaction } from './common' +export { + BaseTransaction, + GlobalFlags, + GlobalFlagsInterface, + isMPTAmount, +} from './common' export { validate, PseudoTransaction, @@ -15,30 +20,69 @@ export { } from './accountSet' export { AccountDelete } from './accountDelete' export { AMMBid } from './AMMBid' +export { + AMMClawbackFlags, + AMMClawbackFlagsInterface, + AMMClawback, +} from './AMMClawback' +export { AMMCreate } from './AMMCreate' export { AMMDelete } from './AMMDelete' export { AMMDepositFlags, AMMDepositFlagsInterface, AMMDeposit, } from './AMMDeposit' -export { AMMCreate } from './AMMCreate' export { AMMVote } from './AMMVote' export { AMMWithdrawFlags, AMMWithdrawFlagsInterface, AMMWithdraw, } from './AMMWithdraw' +export { Batch, BatchFlags, BatchFlagsInterface, BatchSigner } from './batch' export { CheckCancel } from './checkCancel' export { CheckCash } from './checkCash' export { CheckCreate } from './checkCreate' export { Clawback } from './clawback' +export { CredentialAccept } from './CredentialAccept' +export { CredentialCreate } from './CredentialCreate' +export { CredentialDelete } from './CredentialDelete' export { DIDDelete } from './DIDDelete' export { DIDSet } from './DIDSet' +export { DelegateSet, Permission } from './delegateSet' export { DepositPreauth } from './depositPreauth' export { EscrowCancel } from './escrowCancel' export { EscrowCreate } from './escrowCreate' export { EscrowFinish } from './escrowFinish' export { EnableAmendment, EnableAmendmentFlags } from './enableAmendment' +export { LoanBrokerSet } from './loanBrokerSet' +export { LoanBrokerDelete } from './loanBrokerDelete' +export { LoanBrokerCoverDeposit } from './loanBrokerCoverDeposit' +export { LoanBrokerCoverWithdraw } from './loanBrokerCoverWithdraw' +export { LoanBrokerCoverClawback } from './loanBrokerCoverClawback' +export { LoanSet, LoanSetFlags, LoanSetFlagsInterface } from './loanSet' +export { LoanDelete } from './loanDelete' +export { + LoanManage, + LoanManageFlags, + LoanManageFlagsInterface, +} from './loanManage' +export { LoanPay, LoanPayFlags, LoanPayFlagsInterface } from './loanPay' +export { + MPTokenAuthorize, + MPTokenAuthorizeFlags, + MPTokenAuthorizeFlagsInterface, +} from './MPTokenAuthorize' +export { + MPTokenIssuanceCreate, + MPTokenIssuanceCreateFlags, + MPTokenIssuanceCreateFlagsInterface, +} from './MPTokenIssuanceCreate' +export { MPTokenIssuanceDestroy } from './MPTokenIssuanceDestroy' +export { + MPTokenIssuanceSet, + MPTokenIssuanceSetFlags, + MPTokenIssuanceSetFlagsInterface, +} from './MPTokenIssuanceSet' export { NFTokenAcceptOffer } from './NFTokenAcceptOffer' export { NFTokenBurn } from './NFTokenBurn' export { NFTokenCancelOffer } from './NFTokenCancelOffer' @@ -52,6 +96,7 @@ export { NFTokenMintFlags, NFTokenMintFlagsInterface, } from './NFTokenMint' +export { NFTokenModify, validateNFTokenModify } from './NFTokenModify' export { OfferCancel } from './offerCancel' export { OfferCreateFlags, @@ -68,12 +113,25 @@ export { } from './paymentChannelClaim' export { PaymentChannelCreate } from './paymentChannelCreate' export { PaymentChannelFund } from './paymentChannelFund' +export { PermissionedDomainSet } from './permissionedDomainSet' +export { PermissionedDomainDelete } from './permissionedDomainDelete' export { SetFee, SetFeePreAmendment, SetFeePostAmendment } from './setFee' export { SetRegularKey } from './setRegularKey' export { SignerListSet } from './signerListSet' export { TicketCreate } from './ticketCreate' export { TrustSetFlagsInterface, TrustSetFlags, TrustSet } from './trustSet' export { UNLModify } from './UNLModify' +export { VaultClawback } from './vaultClawback' +export { + VaultCreate, + VaultCreateFlags, + VaultCreateFlagsInterface, + VaultWithdrawalPolicy, +} from './vaultCreate' +export { VaultDelete } from './vaultDelete' +export { VaultDeposit } from './vaultDeposit' +export { VaultSet } from './vaultSet' +export { VaultWithdraw } from './vaultWithdraw' export { XChainAddAccountCreateAttestation } from './XChainAddAccountCreateAttestation' export { XChainAddClaimAttestation } from './XChainAddClaimAttestation' export { XChainClaim } from './XChainClaim' diff --git a/packages/xrpl/src/models/transactions/loanBrokerCoverClawback.ts b/packages/xrpl/src/models/transactions/loanBrokerCoverClawback.ts new file mode 100644 index 0000000000..b7d1d18b2f --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanBrokerCoverClawback.ts @@ -0,0 +1,68 @@ +import BigNumber from 'bignumber.js' + +import { ValidationError } from '../../errors' +import { IssuedCurrencyAmount, MPTAmount } from '../common' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateOptionalField, + isTokenAmount, +} from './common' + +/** + * The LoanBrokerCoverClawback transaction claws back the First-Loss Capital from the Loan Broker. + * The transaction can only be submitted by the Issuer of the Loan asset. + * Furthermore, the transaction can only clawback funds up to the minimum cover required for the current loans. + * + * @category Transaction Models + */ +export interface LoanBrokerCoverClawback extends BaseTransaction { + TransactionType: 'LoanBrokerCoverClawback' + + /** + * The Loan Broker ID from which to withdraw First-Loss Capital. + * Must be provided if the Amount is an MPT, or Amount is an IOU + * and issuer is specified as the Account submitting the transaction. + */ + LoanBrokerID?: string + + /** + * The First-Loss Capital amount to clawback. + * If the amount is 0 or not provided, clawback funds up to LoanBroker.DebtTotal * LoanBroker.CoverRateMinimum. + */ + Amount?: IssuedCurrencyAmount | MPTAmount +} + +/** + * Verify the form and type of an LoanBrokerCoverClawback at runtime. + * + * @param tx - LoanBrokerCoverClawback Transaction. + * @throws When LoanBrokerCoverClawback is Malformed. + */ +export function validateLoanBrokerCoverClawback( + tx: Record, +): void { + validateBaseTransaction(tx) + + validateOptionalField(tx, 'LoanBrokerID', isString) + validateOptionalField(tx, 'Amount', isTokenAmount) + + if (tx.LoanBrokerID != null && !isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanBrokerCoverClawback: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } + + if (tx.Amount != null && new BigNumber(tx.Amount.value).isLessThan(0)) { + throw new ValidationError(`LoanBrokerCoverClawback: Amount must be >= 0`) + } + + if (tx.LoanBrokerID == null && tx.Amount == null) { + throw new ValidationError( + `LoanBrokerCoverClawback: Either LoanBrokerID or Amount is required`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanBrokerCoverDeposit.ts b/packages/xrpl/src/models/transactions/loanBrokerCoverDeposit.ts new file mode 100644 index 0000000000..02800dc843 --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanBrokerCoverDeposit.ts @@ -0,0 +1,51 @@ +import { ValidationError } from '../../errors' +import { Amount, MPTAmount } from '../common' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, + isAmount, +} from './common' + +/** + * The transaction deposits First Loss Capital into the LoanBroker object. + * + * @category Transaction Models + */ +export interface LoanBrokerCoverDeposit extends BaseTransaction { + TransactionType: 'LoanBrokerCoverDeposit' + + /** + * The Loan Broker ID to deposit First-Loss Capital. + */ + LoanBrokerID: string + + /** + * The First-Loss Capital amount to deposit. + */ + Amount: Amount | MPTAmount +} + +/** + * Verify the form and type of an LoanBrokerCoverDeposit at runtime. + * + * @param tx - LoanBrokerCoverDeposit Transaction. + * @throws When LoanBrokerCoverDeposit is Malformed. + */ +export function validateLoanBrokerCoverDeposit( + tx: Record, +): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanBrokerID', isString) + validateRequiredField(tx, 'Amount', isAmount) + + if (!isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanBrokerCoverDeposit: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanBrokerCoverWithdraw.ts b/packages/xrpl/src/models/transactions/loanBrokerCoverWithdraw.ts new file mode 100644 index 0000000000..acb413670f --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanBrokerCoverWithdraw.ts @@ -0,0 +1,67 @@ +import { ValidationError } from '../../errors' +import { Amount, MPTAmount } from '../common' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, + isAmount, + Account, + validateOptionalField, + isAccount, + isNumber, +} from './common' + +/** + * The LoanBrokerCoverWithdraw transaction withdraws the First-Loss Capital from the LoanBroker. + * + * @category Transaction Models + */ +export interface LoanBrokerCoverWithdraw extends BaseTransaction { + TransactionType: 'LoanBrokerCoverWithdraw' + + /** + * The Loan Broker ID from which to withdraw First-Loss Capital. + */ + LoanBrokerID: string + + /** + * The First-Loss Capital amount to withdraw. + */ + Amount: Amount | MPTAmount + + /** + * An account to receive the assets. It must be able to receive the asset. + */ + Destination?: Account + + /** + * Arbitrary tag identifying the reason for the withdrawal to the destination. + */ + DestinationTag?: number +} + +/** + * Verify the form and type of an LoanBrokerCoverWithdraw at runtime. + * + * @param tx - LoanBrokerCoverWithdraw Transaction. + * @throws When LoanBrokerCoverWithdraw is Malformed. + */ +export function validateLoanBrokerCoverWithdraw( + tx: Record, +): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanBrokerID', isString) + validateRequiredField(tx, 'Amount', isAmount) + validateOptionalField(tx, 'Destination', isAccount) + validateOptionalField(tx, 'DestinationTag', isNumber) + + if (!isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanBrokerCoverWithdraw: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanBrokerDelete.ts b/packages/xrpl/src/models/transactions/loanBrokerDelete.ts new file mode 100644 index 0000000000..d93387e7ae --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanBrokerDelete.ts @@ -0,0 +1,41 @@ +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, +} from './common' + +/** + * The transaction deletes LoanBroker ledger object. + * + * @category Transaction Models + */ +export interface LoanBrokerDelete extends BaseTransaction { + TransactionType: 'LoanBrokerDelete' + + /** + * The Loan Broker ID that the transaction is deleting. + */ + LoanBrokerID: string +} + +/** + * Verify the form and type of an LoanBrokerDelete at runtime. + * + * @param tx - LoanBrokerDelete Transaction. + * @throws When LoanBrokerDelete is Malformed. + */ +export function validateLoanBrokerDelete(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanBrokerID', isString) + + if (!isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanBrokerDelete: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanBrokerSet.ts b/packages/xrpl/src/models/transactions/loanBrokerSet.ts new file mode 100644 index 0000000000..173684bc1e --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanBrokerSet.ts @@ -0,0 +1,152 @@ +import BigNumber from 'bignumber.js' + +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + validateHexMetadata, + isLedgerEntryId, + isNumber, + isXRPLNumber, + validateBaseTransaction, + validateOptionalField, + isString, + validateRequiredField, + XRPLNumber, +} from './common' + +const MAX_DATA_LENGTH = 512 +const MAX_MANAGEMENT_FEE_RATE = 10000 +const MAX_COVER_RATE_MINIMUM = 100000 +const MAX_COVER_RATE_LIQUIDATION = 100000 + +/** + * The transaction creates a new LoanBroker object or updates an existing one. + * + * @category Transaction Models + */ +export interface LoanBrokerSet extends BaseTransaction { + TransactionType: 'LoanBrokerSet' + + /** + * The Vault ID that the Lending Protocol will use to access liquidity. + */ + VaultID: string + + /** + * The Loan Broker ID that the transaction is modifying. + */ + LoanBrokerID?: string + + /** + * Arbitrary metadata in hex format. The field is limited to 512 characters. + */ + Data?: string + + /** + * The 1/10th basis point fee charged by the Lending Protocol Owner. Valid values are between 0 and 10000 inclusive (1% - 10%). + */ + ManagementFeeRate?: number + + /** + * The maximum amount the protocol can owe the Vault. + * The default value of 0 means there is no limit to the debt. Must not be negative. + */ + DebtMaximum?: XRPLNumber + + /** + * The 1/10th basis point DebtTotal that the first loss capital must cover. Valid values are between 0 and 100000 inclusive. + */ + CoverRateMinimum?: number + + /** + * The 1/10th basis point of minimum required first loss capital liquidated to cover a Loan default. + * Valid values are between 0 and 100000 inclusive. + */ + CoverRateLiquidation?: number +} + +/** + * Verify the form and type of an LoanBrokerSet at runtime. + * + * @param tx - LoanBrokerSet Transaction. + * @throws When LoanBrokerSet is Malformed. + */ +// eslint-disable-next-line max-statements, max-lines-per-function -- due to exhaustive validations +export function validateLoanBrokerSet(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) + validateOptionalField(tx, 'LoanBrokerID', isString) + validateOptionalField(tx, 'Data', isString) + validateOptionalField(tx, 'ManagementFeeRate', isNumber) + validateOptionalField(tx, 'DebtMaximum', isXRPLNumber) + validateOptionalField(tx, 'CoverRateMinimum', isNumber) + validateOptionalField(tx, 'CoverRateLiquidation', isNumber) + + if (!isLedgerEntryId(tx.VaultID)) { + throw new ValidationError( + `LoanBrokerSet: VaultID must be 64 characters hexadecimal string`, + ) + } + + if (tx.LoanBrokerID != null && !isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanBrokerSet: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } + + if (tx.Data != null && !validateHexMetadata(tx.Data, MAX_DATA_LENGTH)) { + throw new ValidationError( + `LoanBrokerSet: Data must be a valid non-empty hex string up to ${MAX_DATA_LENGTH} characters`, + ) + } + + if ( + tx.ManagementFeeRate != null && + (tx.ManagementFeeRate < 0 || tx.ManagementFeeRate > MAX_MANAGEMENT_FEE_RATE) + ) { + throw new ValidationError( + `LoanBrokerSet: ManagementFeeRate must be between 0 and ${MAX_MANAGEMENT_FEE_RATE} inclusive`, + ) + } + + if (tx.DebtMaximum != null && new BigNumber(tx.DebtMaximum).isLessThan(0)) { + throw new ValidationError( + 'LoanBrokerSet: DebtMaximum must be a non-negative value', + ) + } + + if ( + tx.CoverRateMinimum != null && + (tx.CoverRateMinimum < 0 || tx.CoverRateMinimum > MAX_COVER_RATE_MINIMUM) + ) { + throw new ValidationError( + `LoanBrokerSet: CoverRateMinimum must be between 0 and ${MAX_COVER_RATE_MINIMUM} inclusive`, + ) + } + + if ( + tx.CoverRateLiquidation != null && + (tx.CoverRateLiquidation < 0 || + tx.CoverRateLiquidation > MAX_COVER_RATE_LIQUIDATION) + ) { + throw new ValidationError( + `LoanBrokerSet: CoverRateLiquidation must be between 0 and ${MAX_COVER_RATE_LIQUIDATION} inclusive`, + ) + } + + // Validate that either both CoverRateMinimum and CoverRateLiquidation are zero, + // or both are non-zero. + const coverRateMinimumValue = tx.CoverRateMinimum ?? 0 + const coverRateLiquidationValue = tx.CoverRateLiquidation ?? 0 + + if ( + (coverRateMinimumValue === 0 && coverRateLiquidationValue !== 0) || + (coverRateMinimumValue !== 0 && coverRateLiquidationValue === 0) + ) { + throw new ValidationError( + 'LoanBrokerSet: CoverRateMinimum and CoverRateLiquidation must both be zero or both be non-zero', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanDelete.ts b/packages/xrpl/src/models/transactions/loanDelete.ts new file mode 100644 index 0000000000..7d8b9274d4 --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanDelete.ts @@ -0,0 +1,41 @@ +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, +} from './common' + +/** + * The transaction deletes an existing Loan object. + * + * @category Transaction Models + */ +export interface LoanDelete extends BaseTransaction { + TransactionType: 'LoanDelete' + + /** + * The ID of the Loan object to be deleted. + */ + LoanID: string +} + +/** + * Verify the form and type of an LoanDelete at runtime. + * + * @param tx - LoanDelete Transaction. + * @throws When LoanDelete is Malformed. + */ +export function validateLoanDelete(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanID', isString) + + if (!isLedgerEntryId(tx.LoanID)) { + throw new ValidationError( + `LoanDelete: LoanID must be 64 characters hexadecimal string`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanManage.ts b/packages/xrpl/src/models/transactions/loanManage.ts new file mode 100644 index 0000000000..f8059a3bb7 --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanManage.ts @@ -0,0 +1,106 @@ +/* eslint-disable no-bitwise -- required to check flags */ +import { ValidationError } from '../../errors' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, + GlobalFlagsInterface, +} from './common' + +/** + * The transaction modifies an existing Loan object. + * + * @category Transaction Models + */ +export interface LoanManage extends BaseTransaction { + TransactionType: 'LoanManage' + + /** + * The ID of the Loan object to be updated. + */ + LoanID: string + + Flags?: number | LoanManageFlagsInterface +} + +/** + * Transaction Flags for an LoanManage Transaction. + * + * @category Transaction Flags + */ +export enum LoanManageFlags { + /** + * Indicates that the Loan should be defaulted. + */ + tfLoanDefault = 0x00010000, + + /** + * Indicates that the Loan should be impaired. + */ + tfLoanImpair = 0x00020000, + + /** + * Indicates that the Loan should be un-impaired. + */ + tfLoanUnimpair = 0x00040000, +} + +/** + * Map of flags to boolean values representing {@link LoanManage} transaction + * flags. + * + * @category Transaction Flags + */ +export interface LoanManageFlagsInterface extends GlobalFlagsInterface { + tfLoanDefault?: boolean + tfLoanImpair?: boolean + tfLoanUnimpair?: boolean +} + +/** + * Verify the form and type of an LoanManage at runtime. + * + * @param tx - LoanManage Transaction. + * @throws When LoanManage is Malformed. + */ +export function validateLoanManage(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanID', isString) + + if (!isLedgerEntryId(tx.LoanID)) { + throw new ValidationError( + `LoanManage: LoanID must be 64 characters hexadecimal string`, + ) + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- for LoanManage it should be among these two + const txFlags = (tx as { Flags?: number | LoanManageFlagsInterface }).Flags + if (txFlags == null) { + return + } + + let flags = 0 + if (typeof txFlags === 'number') { + flags = txFlags + } else { + if (txFlags.tfLoanImpair) { + flags |= LoanManageFlags.tfLoanImpair + } + if (txFlags.tfLoanUnimpair) { + flags |= LoanManageFlags.tfLoanUnimpair + } + } + + if ( + (flags & LoanManageFlags.tfLoanImpair) === LoanManageFlags.tfLoanImpair && + (flags & LoanManageFlags.tfLoanUnimpair) === LoanManageFlags.tfLoanUnimpair + ) { + throw new ValidationError( + 'LoanManage: tfLoanImpair and tfLoanUnimpair cannot both be present', + ) + } +} diff --git a/packages/xrpl/src/models/transactions/loanPay.ts b/packages/xrpl/src/models/transactions/loanPay.ts new file mode 100644 index 0000000000..4f67ae536a --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanPay.ts @@ -0,0 +1,114 @@ +import { ValidationError } from '../../errors' +import { Amount, MPTAmount } from '../common' +import { isFlagEnabled } from '../utils' + +import { + BaseTransaction, + isLedgerEntryId, + validateBaseTransaction, + isString, + validateRequiredField, + isAmount, + GlobalFlagsInterface, +} from './common' + +/** + * Enum representing values of {@link LoanPay} transaction flags. + * + * @category Transaction Flags + */ +export enum LoanPayFlags { + /** + * Indicates that remaining payment amount should be treated as an overpayment. + */ + tfLoanOverpayment = 0x00010000, + /** + * Indicates that the borrower is making a full early repayment. + */ + tfLoanFullPayment = 0x00020000, + /** + * Indicates that the borrower is making a late loan payment. + */ + tfLoanLatePayment = 0x00040000, +} + +/** + * Map of flags to boolean values representing {@link LoanPay} transaction + * flags. + * + * @category Transaction Flags + */ +export interface LoanPayFlagsInterface extends GlobalFlagsInterface { + tfLoanOverpayment?: boolean + tfLoanFullPayment?: boolean + tfLoanLatePayment?: boolean +} + +/** + * The Borrower submits a LoanPay transaction to make a Payment on the Loan. + * + * @category Transaction Models + */ +export interface LoanPay extends BaseTransaction { + TransactionType: 'LoanPay' + + /** + * The ID of the Loan object to be paid to. + */ + LoanID: string + + /** + * The amount of funds to pay. + */ + Amount: Amount | MPTAmount + + Flags?: number | LoanPayFlagsInterface +} + +/** + * Verify the form and type of an LoanPay at runtime. + * + * @param tx - LoanPay Transaction. + * @throws When LoanPay is Malformed. + */ +export function validateLoanPay(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanID', isString) + validateRequiredField(tx, 'Amount', isAmount) + + if (!isLedgerEntryId(tx.LoanID)) { + throw new ValidationError( + `LoanPay: LoanID must be 64 characters hexadecimal string`, + ) + } + + // Validate that at most one of the payment type flags is set + if (typeof tx.Flags === 'number') { + const flagsSet = [ + isFlagEnabled(tx.Flags, LoanPayFlags.tfLoanLatePayment), + isFlagEnabled(tx.Flags, LoanPayFlags.tfLoanFullPayment), + isFlagEnabled(tx.Flags, LoanPayFlags.tfLoanOverpayment), + ].filter(Boolean).length + + if (flagsSet > 1) { + throw new ValidationError( + 'LoanPay: Only one of tfLoanLatePayment, tfLoanFullPayment, or tfLoanOverpayment flags can be set', + ) + } + } else if (tx.Flags != null && typeof tx.Flags === 'object') { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- required to check flag values + const flags = tx.Flags as unknown as Record + const flagsSet = [ + flags.tfLoanLatePayment, + flags.tfLoanFullPayment, + flags.tfLoanOverpayment, + ].filter(Boolean).length + + if (flagsSet > 1) { + throw new ValidationError( + 'LoanPay: Only one of tfLoanLatePayment, tfLoanFullPayment, or tfLoanOverpayment flags can be set', + ) + } + } +} diff --git a/packages/xrpl/src/models/transactions/loanSet.ts b/packages/xrpl/src/models/transactions/loanSet.ts new file mode 100644 index 0000000000..8f09dd6f3a --- /dev/null +++ b/packages/xrpl/src/models/transactions/loanSet.ts @@ -0,0 +1,270 @@ +import { ValidationError } from '../../errors' +import { Signer } from '../common' + +import { + BaseTransaction, + validateHexMetadata, + isLedgerEntryId, + isNumber, + isXRPLNumber, + validateBaseTransaction, + validateOptionalField, + isString, + validateRequiredField, + XRPLNumber, + GlobalFlagsInterface, + Account, + isAccount, + isRecord, +} from './common' + +const MAX_DATA_LENGTH = 512 +const MAX_OVER_PAYMENT_FEE_RATE = 100_000 +const MAX_INTEREST_RATE = 100_000 +const MAX_LATE_INTEREST_RATE = 100_000 +const MAX_CLOSE_INTEREST_RATE = 100_000 +const MAX_OVER_PAYMENT_INTEREST_RATE = 100_000 +const MIN_PAYMENT_INTERVAL = 60 + +/** + * The transaction creates a new Loan object. + * + * @category Transaction Models + */ +export interface LoanSet extends BaseTransaction { + TransactionType: 'LoanSet' + + /** + * The Loan Broker ID associated with the loan. + */ + LoanBrokerID: string + + /** + * The principal amount requested by the Borrower. + */ + PrincipalRequested: XRPLNumber + + /** + * The signature of the counterparty over the transaction. + */ + CounterpartySignature?: CounterpartySignature + + /** + * The address of the counterparty of the Loan. + */ + Counterparty?: Account + + /** + * Arbitrary metadata in hex format. The field is limited to 512 characters. + */ + Data?: string + + /** + * A nominal funds amount paid to the LoanBroker.Owner when the Loan is created. + */ + LoanOriginationFee?: XRPLNumber + + /** + * A nominal amount paid to the LoanBroker.Owner with every Loan payment. + */ + LoanServiceFee?: XRPLNumber + + /** + * A nominal funds amount paid to the LoanBroker.Owner when a payment is late. + */ + LatePaymentFee?: XRPLNumber + + /** + * A nominal funds amount paid to the LoanBroker.Owner when an early full repayment is made. + */ + ClosePaymentFee?: XRPLNumber + + /** + * A fee charged on overpayments in 1/10th basis points. Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + OverpaymentFee?: number + + /** + * Annualized interest rate of the Loan in in 1/10th basis points. Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + InterestRate?: number + + /** + * A premium added to the interest rate for late payments in in 1/10th basis points. + * Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + LateInterestRate?: number + + /** + * A Fee Rate charged for repaying the Loan early in 1/10th basis points. + * Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + CloseInterestRate?: number + + /** + * An interest rate charged on over payments in 1/10th basis points. Valid values are between 0 and 100000 inclusive. (0 - 100%) + */ + OverpaymentInterestRate?: number + + /** + * The total number of payments to be made against the Loan. + */ + PaymentTotal?: number + + /** + * Number of seconds between Loan payments. + */ + PaymentInterval?: number + + /** + * The number of seconds after the Loan's Payment Due Date can be Defaulted. + */ + GracePeriod?: number + + Flags?: number | LoanSetFlagsInterface +} + +/** + * An inner object that contains the signature of the Lender over the transaction. + */ +export interface CounterpartySignature { + /** + * The Public Key to be used to verify the validity of the signature. + */ + SigningPubKey?: string + + /** + * The signature of over all signing fields. + */ + TxnSignature?: string + + /** + * An array of transaction signatures from the Counterparty signers to indicate their approval of this transaction. + */ + Signers?: Signer[] +} + +/** + * Transaction Flags for an LoanSet Transaction. + * + * @category Transaction Flags + */ +export enum LoanSetFlags { + /** + * Indicates that the loan supports over payments. + */ + tfLoanOverpayment = 0x00010000, +} + +/** + * Map of flags to boolean values representing {@link LoanSet} transaction + * flags. + * + * @category Transaction Flags + */ +export interface LoanSetFlagsInterface extends GlobalFlagsInterface { + tfLoanOverpayment?: boolean +} + +/** + * Verify the form and type of an LoanSet at runtime. + * + * @param tx - LoanSet Transaction. + * @throws When LoanSet is Malformed. + */ +// eslint-disable-next-line max-lines-per-function, max-statements -- due to many validations +export function validateLoanSet(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'LoanBrokerID', isString) + validateRequiredField(tx, 'PrincipalRequested', isXRPLNumber) + validateOptionalField(tx, 'CounterpartySignature', isRecord) + validateOptionalField(tx, 'Data', isString) + validateOptionalField(tx, 'Counterparty', isAccount) + validateOptionalField(tx, 'LoanOriginationFee', isXRPLNumber) + validateOptionalField(tx, 'LoanServiceFee', isXRPLNumber) + validateOptionalField(tx, 'LatePaymentFee', isXRPLNumber) + validateOptionalField(tx, 'ClosePaymentFee', isXRPLNumber) + validateOptionalField(tx, 'OverpaymentFee', isNumber) + validateOptionalField(tx, 'InterestRate', isNumber) + validateOptionalField(tx, 'LateInterestRate', isNumber) + validateOptionalField(tx, 'CloseInterestRate', isNumber) + validateOptionalField(tx, 'OverpaymentInterestRate', isNumber) + validateOptionalField(tx, 'PaymentTotal', isNumber) + validateOptionalField(tx, 'PaymentInterval', isNumber) + validateOptionalField(tx, 'GracePeriod', isNumber) + + if (!isLedgerEntryId(tx.LoanBrokerID)) { + throw new ValidationError( + `LoanSet: LoanBrokerID must be 64 characters hexadecimal string`, + ) + } + + if (tx.Data != null && !validateHexMetadata(tx.Data, MAX_DATA_LENGTH)) { + throw new ValidationError( + `LoanSet: Data must be a valid non-empty hex string up to ${MAX_DATA_LENGTH} characters`, + ) + } + + if ( + tx.OverpaymentFee != null && + (tx.OverpaymentFee < 0 || tx.OverpaymentFee > MAX_OVER_PAYMENT_FEE_RATE) + ) { + throw new ValidationError( + `LoanSet: OverpaymentFee must be between 0 and ${MAX_OVER_PAYMENT_FEE_RATE} inclusive`, + ) + } + + if ( + tx.InterestRate != null && + (tx.InterestRate < 0 || tx.InterestRate > MAX_INTEREST_RATE) + ) { + throw new ValidationError( + `LoanSet: InterestRate must be between 0 and ${MAX_INTEREST_RATE} inclusive`, + ) + } + + if ( + tx.LateInterestRate != null && + (tx.LateInterestRate < 0 || tx.LateInterestRate > MAX_LATE_INTEREST_RATE) + ) { + throw new ValidationError( + `LoanSet: LateInterestRate must be between 0 and ${MAX_LATE_INTEREST_RATE} inclusive`, + ) + } + + if ( + tx.CloseInterestRate != null && + (tx.CloseInterestRate < 0 || tx.CloseInterestRate > MAX_CLOSE_INTEREST_RATE) + ) { + throw new ValidationError( + `LoanSet: CloseInterestRate must be between 0 and ${MAX_CLOSE_INTEREST_RATE} inclusive`, + ) + } + + if ( + tx.OverpaymentInterestRate != null && + (tx.OverpaymentInterestRate < 0 || + tx.OverpaymentInterestRate > MAX_OVER_PAYMENT_INTEREST_RATE) + ) { + throw new ValidationError( + `LoanSet: OverpaymentInterestRate must be between 0 and ${MAX_OVER_PAYMENT_INTEREST_RATE} inclusive`, + ) + } + + if (tx.PaymentInterval != null && tx.PaymentInterval < MIN_PAYMENT_INTERVAL) { + throw new ValidationError( + `LoanSet: PaymentInterval must be greater than or equal to ${MIN_PAYMENT_INTERVAL}`, + ) + } + + if ( + tx.PaymentInterval != null && + tx.GracePeriod != null && + tx.GracePeriod > tx.PaymentInterval + ) { + throw new ValidationError( + `LoanSet: GracePeriod must not be greater than PaymentInterval`, + ) + } +} diff --git a/packages/xrpl/src/models/transactions/metadata.ts b/packages/xrpl/src/models/transactions/metadata.ts index 3fcaeb54bf..9a9d7b0604 100644 --- a/packages/xrpl/src/models/transactions/metadata.ts +++ b/packages/xrpl/src/models/transactions/metadata.ts @@ -1,6 +1,10 @@ -import { Amount } from '../common' +import { Amount, MPTAmount } from '../common' import { BaseTransaction } from './common' +import { + MPTokenIssuanceCreate, + MPTokenIssuanceCreateMetadata, +} from './MPTokenIssuanceCreate' import { NFTokenAcceptOffer, NFTokenAcceptOfferMetadata, @@ -79,22 +83,26 @@ export function isDeletedNode(node: Node): node is DeletedNode { export interface TransactionMetadataBase { AffectedNodes: Node[] - DeliveredAmount?: Amount + DeliveredAmount?: Amount | MPTAmount // "unavailable" possible for transactions before 2014-01-20 - delivered_amount?: Amount | 'unavailable' + delivered_amount?: Amount | MPTAmount | 'unavailable' TransactionIndex: number TransactionResult: string + + ParentBatchID?: string } export type TransactionMetadata = T extends Payment ? PaymentMetadata : T extends NFTokenMint - ? NFTokenMintMetadata - : T extends NFTokenCreateOffer - ? NFTokenCreateOfferMetadata - : T extends NFTokenAcceptOffer - ? NFTokenAcceptOfferMetadata - : T extends NFTokenCancelOffer - ? NFTokenCancelOfferMetadata - : TransactionMetadataBase + ? NFTokenMintMetadata + : T extends NFTokenCreateOffer + ? NFTokenCreateOfferMetadata + : T extends NFTokenAcceptOffer + ? NFTokenAcceptOfferMetadata + : T extends NFTokenCancelOffer + ? NFTokenCancelOfferMetadata + : T extends MPTokenIssuanceCreate + ? MPTokenIssuanceCreateMetadata + : TransactionMetadataBase diff --git a/packages/xrpl/src/models/transactions/offerCreate.ts b/packages/xrpl/src/models/transactions/offerCreate.ts index 782e635499..acdb04e59e 100644 --- a/packages/xrpl/src/models/transactions/offerCreate.ts +++ b/packages/xrpl/src/models/transactions/offerCreate.ts @@ -1,11 +1,14 @@ import { ValidationError } from '../../errors' import { Amount } from '../common' +import { hasFlag } from '../utils' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, validateBaseTransaction, isAmount, + validateOptionalField, + isDomainID, } from './common' /** @@ -42,6 +45,11 @@ export enum OfferCreateFlags { * the TakerPays amount in exchange. */ tfSell = 0x00080000, + /** + * Indicates the offer is hybrid. (meaning it is part of both a domain and open order book) + * This flag cannot be set if the offer doesn't have a DomainID + */ + tfHybrid = 0x00100000, } /** @@ -78,11 +86,12 @@ export enum OfferCreateFlags { * // } * ``` */ -export interface OfferCreateFlagsInterface extends GlobalFlags { +export interface OfferCreateFlagsInterface extends GlobalFlagsInterface { tfPassive?: boolean tfImmediateOrCancel?: boolean tfFillOrKill?: boolean tfSell?: boolean + tfHybrid?: boolean } /** @@ -106,6 +115,8 @@ export interface OfferCreate extends BaseTransaction { TakerGets: Amount /** The amount and type of currency being requested by the offer creator. */ TakerPays: Amount + /** The domain that the offer must be a part of. */ + DomainID?: string } /** @@ -140,4 +151,18 @@ export function validateOfferCreate(tx: Record): void { if (tx.OfferSequence !== undefined && typeof tx.OfferSequence !== 'number') { throw new ValidationError('OfferCreate: invalid OfferSequence') } + + validateOptionalField(tx, 'DomainID', isDomainID, { + txType: 'OfferCreate', + paramName: 'DomainID', + }) + + if ( + tx.DomainID == null && + hasFlag(tx, OfferCreateFlags.tfHybrid, 'tfHybrid') + ) { + throw new ValidationError( + 'OfferCreate: tfHybrid flag cannot be set if DomainID is not present', + ) + } } diff --git a/packages/xrpl/src/models/transactions/oracleSet.ts b/packages/xrpl/src/models/transactions/oracleSet.ts index 6b3f395d0d..c28c89e902 100644 --- a/packages/xrpl/src/models/transactions/oracleSet.ts +++ b/packages/xrpl/src/models/transactions/oracleSet.ts @@ -1,9 +1,12 @@ import { ValidationError } from '../../errors' import { PriceData } from '../common' +import { isHex } from '../utils' import { BaseTransaction, + isArray, isNumber, + isRecord, isString, validateBaseTransaction, validateOptionalField, @@ -12,6 +15,8 @@ import { const PRICE_DATA_SERIES_MAX_LENGTH = 10 const SCALE_MAX = 10 +const MINIMUM_ASSET_PRICE_LENGTH = 1 +const MAXIMUM_ASSET_PRICE_LENGTH = 16 /** * Creates a new Oracle ledger entry or updates the fields of an existing one, using the Oracle ID. @@ -82,95 +87,109 @@ export function validateOracleSet(tx: Record): void { validateOptionalField(tx, 'AssetClass', isString) - // eslint-disable-next-line max-lines-per-function -- necessary to validate many fields - validateRequiredField(tx, 'PriceDataSeries', (value) => { - if (!Array.isArray(value)) { - throw new ValidationError('OracleSet: PriceDataSeries must be an array') - } - - if (value.length > PRICE_DATA_SERIES_MAX_LENGTH) { - throw new ValidationError( - `OracleSet: PriceDataSeries must have at most ${PRICE_DATA_SERIES_MAX_LENGTH} PriceData objects`, - ) - } - - // TODO: add support for handling inner objects easier (similar to validateRequiredField/validateOptionalField) - for (const priceData of value) { - if (typeof priceData !== 'object') { - throw new ValidationError( - 'OracleSet: PriceDataSeries must be an array of objects', - ) - } - - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - if (priceData.PriceData == null) { - throw new ValidationError( - 'OracleSet: PriceDataSeries must have a `PriceData` object', - ) - } - - // check if priceData only has PriceData - if (Object.keys(priceData).length !== 1) { - throw new ValidationError( - 'OracleSet: PriceDataSeries must only have a single PriceData object', - ) - } - - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - if (typeof priceData.PriceData.BaseAsset !== 'string') { - throw new ValidationError( - 'OracleSet: PriceDataSeries must have a `BaseAsset` string', - ) - } - - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - if (typeof priceData.PriceData.QuoteAsset !== 'string') { - throw new ValidationError( - 'OracleSet: PriceDataSeries must have a `QuoteAsset` string', - ) + /* eslint-disable max-statements, max-lines-per-function -- necessary to validate many fields */ + validateRequiredField( + tx, + 'PriceDataSeries', + (value: unknown): value is PriceData => { + if (!isArray(value)) { + throw new ValidationError('OracleSet: PriceDataSeries must be an array') } - // Either AssetPrice and Scale are both present or both excluded - if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - (priceData.PriceData.AssetPrice == null) !== - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - (priceData.PriceData.Scale == null) - ) { + if (value.length > PRICE_DATA_SERIES_MAX_LENGTH) { throw new ValidationError( - 'OracleSet: PriceDataSeries must have both `AssetPrice` and `Scale` if any are present', + `OracleSet: PriceDataSeries must have at most ${PRICE_DATA_SERIES_MAX_LENGTH} PriceData objects`, ) } - if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - 'AssetPrice' in priceData.PriceData && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - !isNumber(priceData.PriceData.AssetPrice) - ) { - throw new ValidationError('OracleSet: invalid field AssetPrice') - } - - if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - 'Scale' in priceData.PriceData && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - !isNumber(priceData.PriceData.Scale) - ) { - throw new ValidationError('OracleSet: invalid field Scale') - } - - if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - priceData.PriceData.Scale < 0 || - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- we are validating the type - priceData.PriceData.Scale > SCALE_MAX - ) { - throw new ValidationError( - `OracleSet: Scale must be in range 0-${SCALE_MAX}`, - ) + // TODO: add support for handling inner objects easier (similar to validateRequiredField/validateOptionalField) + for (const priceData of value) { + if (!isRecord(priceData)) { + throw new ValidationError( + 'OracleSet: PriceDataSeries must be an array of objects', + ) + } + + const priceDataInner = priceData.PriceData + + if (!isRecord(priceDataInner)) { + throw new ValidationError( + 'OracleSet: PriceDataSeries must have a `PriceData` object', + ) + } + + // check if priceData only has PriceData + if (Object.keys(priceData).length !== 1) { + throw new ValidationError( + 'OracleSet: PriceDataSeries must only have a single PriceData object', + ) + } + + if ( + priceDataInner.BaseAsset == null || + typeof priceDataInner.BaseAsset !== 'string' + ) { + throw new ValidationError( + 'OracleSet: PriceDataSeries must have a `BaseAsset` string', + ) + } + + if (typeof priceDataInner.QuoteAsset !== 'string') { + throw new ValidationError( + 'OracleSet: PriceDataSeries must have a `QuoteAsset` string', + ) + } + + // Either AssetPrice and Scale are both present or both excluded + if ( + (priceDataInner.AssetPrice == null) !== + (priceDataInner.Scale == null) + ) { + throw new ValidationError( + 'OracleSet: PriceDataSeries must have both `AssetPrice` and `Scale` if any are present', + ) + } + + /* eslint-disable max-depth -- + we need to validate priceDataInner.AssetPrice value */ + if ('AssetPrice' in priceDataInner) { + if (!isNumber(priceDataInner.AssetPrice)) { + if (typeof priceDataInner.AssetPrice !== 'string') { + throw new ValidationError( + 'OracleSet: Field AssetPrice must be a string or a number', + ) + } + if (!isHex(priceDataInner.AssetPrice)) { + throw new ValidationError( + 'OracleSet: Field AssetPrice must be a valid hex string', + ) + } + if ( + priceDataInner.AssetPrice.length < MINIMUM_ASSET_PRICE_LENGTH || + priceDataInner.AssetPrice.length > MAXIMUM_ASSET_PRICE_LENGTH + ) { + throw new ValidationError( + `OracleSet: Length of AssetPrice field must be between ${MINIMUM_ASSET_PRICE_LENGTH} and ${MAXIMUM_ASSET_PRICE_LENGTH} characters long`, + ) + } + } + } + + if ('Scale' in priceDataInner) { + if (!isNumber(priceDataInner.Scale)) { + throw new ValidationError('OracleSet: invalid field Scale') + } + + if (priceDataInner.Scale < 0 || priceDataInner.Scale > SCALE_MAX) { + throw new ValidationError( + `OracleSet: Scale must be in range 0-${SCALE_MAX}`, + ) + } + /* eslint-enable max-depth */ + } } - } - return true - }) + return true + }, + ) + /* eslint-enable max-statements, max-lines-per-function */ } diff --git a/packages/xrpl/src/models/transactions/payment.ts b/packages/xrpl/src/models/transactions/payment.ts index 91d0b86c47..cf5ee4f884 100644 --- a/packages/xrpl/src/models/transactions/payment.ts +++ b/packages/xrpl/src/models/transactions/payment.ts @@ -1,17 +1,21 @@ import { ValidationError } from '../../errors' -import { Amount, Path } from '../common' +import { Amount, Path, MPTAmount } from '../common' import { isFlagEnabled } from '../utils' import { BaseTransaction, isAmount, - GlobalFlags, + GlobalFlagsInterface, validateBaseTransaction, isAccount, + isDomainID, validateRequiredField, validateOptionalField, isNumber, Account, + validateCredentialsList, + MAX_AUTHORIZED_CREDENTIALS, + isArray, } from './common' import type { TransactionMetadataBase } from './metadata' @@ -82,7 +86,7 @@ export enum PaymentFlags { * // } * ``` */ -export interface PaymentFlagsInterface extends GlobalFlags { +export interface PaymentFlagsInterface extends GlobalFlagsInterface { /** * Do not use the default path; only use paths included in the Paths field. * This is intended to force the transaction to take arbitrage opportunities. @@ -116,7 +120,10 @@ export interface Payment extends BaseTransaction { * names MUST be lower-case. If the tfPartialPayment flag is set, deliver up * to this amount instead. */ - Amount: Amount + Amount: Amount | MPTAmount + + DeliverMax?: Amount | MPTAmount + /** The unique address of the account receiving the payment. */ Destination: Account /** @@ -142,19 +149,36 @@ export interface Payment extends BaseTransaction { * cross-currency/cross-issue payments. Must be omitted for XRP-to-XRP * Payments. */ - SendMax?: Amount + SendMax?: Amount | MPTAmount /** * Minimum amount of destination currency this transaction should deliver. * Only valid if this is a partial payment. For non-XRP amounts, the nested * field names are lower-case. */ - DeliverMin?: Amount + DeliverMin?: Amount | MPTAmount + /** + * Credentials associated with the sender of this transaction. + * The credentials included must not be expired. + */ + CredentialIDs?: string[] + /** + * The domain the sender intends to use. Both the sender and destination must + * be part of this domain. The DomainID can be included if the sender intends + * it to be a cross-currency payment (i.e. if the payment is going to interact + * with the DEX). The domain will only play it's role if there is a path that + * crossing an orderbook. + * + * Note: it's still possible that DomainID is included but the payment does + * not interact with DEX, it simply means that the DomainID will be ignored + * during payment paths. + */ + DomainID?: string Flags?: number | PaymentFlagsInterface } export interface PaymentMetadata extends TransactionMetadataBase { - DeliveredAmount?: Amount - delivered_amount?: Amount | 'unavailable' + DeliveredAmount?: Amount | MPTAmount + delivered_amount?: Amount | MPTAmount | 'unavailable' } /** @@ -177,15 +201,23 @@ export function validatePayment(tx: Record): void { validateRequiredField(tx, 'Destination', isAccount) validateOptionalField(tx, 'DestinationTag', isNumber) + validateCredentialsList( + tx.CredentialIDs, + tx.TransactionType, + true, + MAX_AUTHORIZED_CREDENTIALS, + ) + if (tx.InvoiceID !== undefined && typeof tx.InvoiceID !== 'string') { throw new ValidationError('PaymentTransaction: InvoiceID must be a string') } - if ( - tx.Paths !== undefined && - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Only used by JS - !isPaths(tx.Paths as Array>>) - ) { + validateOptionalField(tx, 'DomainID', isDomainID, { + txType: 'PaymentTransaction', + paramName: 'DomainID', + }) + + if (tx.Paths !== undefined && !isPaths(tx.Paths)) { throw new ValidationError('PaymentTransaction: invalid Paths') } @@ -209,7 +241,7 @@ function checkPartialPayment(tx: Record): void { const isTfPartialPayment = typeof flags === 'number' ? isFlagEnabled(flags, PaymentFlags.tfPartialPayment) - : flags.tfPartialPayment ?? false + : (flags.tfPartialPayment ?? false) if (!isTfPartialPayment) { throw new ValidationError( @@ -249,7 +281,10 @@ function isPathStep(pathStep: Record): boolean { return false } -function isPath(path: Array>): boolean { +function isPath(path: unknown): path is Path { + if (!Array.isArray(path) || path.length === 0) { + return false + } for (const pathStep of path) { if (!isPathStep(pathStep)) { return false @@ -258,13 +293,13 @@ function isPath(path: Array>): boolean { return true } -function isPaths(paths: Array>>): boolean { - if (!Array.isArray(paths) || paths.length === 0) { +function isPaths(paths: unknown): paths is Path[] { + if (!isArray(paths) || paths.length === 0) { return false } for (const path of paths) { - if (!Array.isArray(path) || path.length === 0) { + if (!isArray(path) || path.length === 0) { return false } diff --git a/packages/xrpl/src/models/transactions/paymentChannelClaim.ts b/packages/xrpl/src/models/transactions/paymentChannelClaim.ts index c673f181bc..d13f694dbe 100644 --- a/packages/xrpl/src/models/transactions/paymentChannelClaim.ts +++ b/packages/xrpl/src/models/transactions/paymentChannelClaim.ts @@ -1,6 +1,12 @@ import { ValidationError } from '../../errors' -import { BaseTransaction, GlobalFlags, validateBaseTransaction } from './common' +import { + BaseTransaction, + GlobalFlagsInterface, + validateBaseTransaction, + validateCredentialsList, + MAX_AUTHORIZED_CREDENTIALS, +} from './common' /** * Enum representing values for PaymentChannelClaim transaction flags. @@ -67,7 +73,8 @@ export enum PaymentChannelClaimFlags { * // } * ``` */ -export interface PaymentChannelClaimFlagsInterface extends GlobalFlags { +// eslint-disable-next-line max-len -- Disable for interface declaration. +export interface PaymentChannelClaimFlagsInterface extends GlobalFlagsInterface { /** * Clear the channel's Expiration time. (Expiration is different from the * channel's immutable CancelAfter time.) Only the source address of the @@ -127,6 +134,11 @@ export interface PaymentChannelClaim extends BaseTransaction { * field is omitted. */ PublicKey?: string + /** + * Credentials associated with the sender of this transaction. + * The credentials included must not be expired. + */ + CredentialIDs?: string[] } /** @@ -138,6 +150,13 @@ export interface PaymentChannelClaim extends BaseTransaction { export function validatePaymentChannelClaim(tx: Record): void { validateBaseTransaction(tx) + validateCredentialsList( + tx.CredentialIDs, + tx.TransactionType, + true, + MAX_AUTHORIZED_CREDENTIALS, + ) + if (tx.Channel === undefined) { throw new ValidationError('PaymentChannelClaim: missing Channel') } diff --git a/packages/xrpl/src/models/transactions/permissionedDomainDelete.ts b/packages/xrpl/src/models/transactions/permissionedDomainDelete.ts new file mode 100644 index 0000000000..8a2a0db6c8 --- /dev/null +++ b/packages/xrpl/src/models/transactions/permissionedDomainDelete.ts @@ -0,0 +1,28 @@ +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateRequiredField, +} from './common' + +export interface PermissionedDomainDelete extends BaseTransaction { + /* The transaction type (PermissionedDomainDelete). */ + TransactionType: 'PermissionedDomainDelete' + + /* The domain to delete. */ + DomainID: string +} + +/** + * Verify the form and type of a PermissionedDomainDelete transaction. + * + * @param tx - The transaction to verify. + * @throws When the transaction is malformed. + */ +export function validatePermissionedDomainDelete( + tx: Record, +): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'DomainID', isString) +} diff --git a/packages/xrpl/src/models/transactions/permissionedDomainSet.ts b/packages/xrpl/src/models/transactions/permissionedDomainSet.ts new file mode 100644 index 0000000000..9e6319bb83 --- /dev/null +++ b/packages/xrpl/src/models/transactions/permissionedDomainSet.ts @@ -0,0 +1,50 @@ +import { AuthorizeCredential } from '../common' + +import { + BaseTransaction, + isString, + validateBaseTransaction, + validateOptionalField, + validateRequiredField, + validateCredentialsList, + isArray, +} from './common' + +const MAX_ACCEPTED_CREDENTIALS = 10 + +export interface PermissionedDomainSet extends BaseTransaction { + /* The transaction type (PermissionedDomainSet). */ + TransactionType: 'PermissionedDomainSet' + + /* The domain to modify. Must be included if modifying an existing domain. */ + DomainID?: string + + /* The credentials that are accepted by the domain. Ownership of one + of these credentials automatically makes you a member of the domain. + An empty array means deleting the field. */ + AcceptedCredentials: AuthorizeCredential[] +} + +/** + * Validate a PermissionedDomainSet transaction. + * + * @param tx - The transaction to validate. + * @throws {ValidationError} When the transaction is invalid. + */ +export function validatePermissionedDomainSet( + tx: Record, +): void { + validateBaseTransaction(tx) + + validateOptionalField(tx, 'DomainID', isString) + validateRequiredField(tx, 'AcceptedCredentials', isArray) + + validateCredentialsList( + tx.AcceptedCredentials, + tx.TransactionType, + // PermissionedDomainSet uses AuthorizeCredential nested objects only, strings are not allowed + false, + // PermissionedDomainSet uses at most 10 accepted credentials. This is different from Credential-feature transactions. + MAX_ACCEPTED_CREDENTIALS, + ) +} diff --git a/packages/xrpl/src/models/transactions/signerListSet.ts b/packages/xrpl/src/models/transactions/signerListSet.ts index f264d55b2f..a5ac146924 100644 --- a/packages/xrpl/src/models/transactions/signerListSet.ts +++ b/packages/xrpl/src/models/transactions/signerListSet.ts @@ -1,7 +1,15 @@ import { ValidationError } from '../../errors' import { SignerEntry } from '../common' -import { BaseTransaction, validateBaseTransaction } from './common' +import { + BaseTransaction, + isArray, + isNumber, + isRecord, + isString, + validateBaseTransaction, + validateRequiredField, +} from './common' /** * The SignerListSet transaction creates, replaces, or removes a list of @@ -39,27 +47,14 @@ const HEX_WALLET_LOCATOR_REGEX = /^[0-9A-Fa-f]{64}$/u export function validateSignerListSet(tx: Record): void { validateBaseTransaction(tx) - if (tx.SignerQuorum === undefined) { - throw new ValidationError('SignerListSet: missing field SignerQuorum') - } - - if (typeof tx.SignerQuorum !== 'number') { - throw new ValidationError('SignerListSet: invalid SignerQuorum') - } + validateRequiredField(tx, 'SignerQuorum', isNumber) // All other checks are for if SignerQuorum is greater than 0 if (tx.SignerQuorum === 0) { return } - if (tx.SignerEntries === undefined) { - throw new ValidationError('SignerListSet: missing field SignerEntries') - } - - if (!Array.isArray(tx.SignerEntries)) { - throw new ValidationError('SignerListSet: invalid SignerEntries') - } - + validateRequiredField(tx, 'SignerEntries', isArray) if (tx.SignerEntries.length === 0) { throw new ValidationError( 'SignerListSet: need at least 1 member in SignerEntries', @@ -73,12 +68,17 @@ export function validateSignerListSet(tx: Record): void { } for (const entry of tx.SignerEntries) { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Should be a SignerEntry - const signerEntry = entry as SignerEntry - const { WalletLocator } = signerEntry.SignerEntry + if (!isRecord(entry) || !isRecord(entry.SignerEntry)) { + throw new ValidationError( + 'SignerListSet: SignerEntries must be an array of SignerEntry objects', + ) + } + const signerEntry = entry.SignerEntry + const { WalletLocator } = signerEntry if ( - WalletLocator !== undefined && - !HEX_WALLET_LOCATOR_REGEX.test(WalletLocator) + WalletLocator != null && + (!isString(WalletLocator) || + !HEX_WALLET_LOCATOR_REGEX.test(WalletLocator)) ) { throw new ValidationError( `SignerListSet: WalletLocator in SignerEntry must be a 256-bit (32-byte) hexadecimal value`, diff --git a/packages/xrpl/src/models/transactions/transaction.ts b/packages/xrpl/src/models/transactions/transaction.ts index 0ddc719539..97f710a2ea 100644 --- a/packages/xrpl/src/models/transactions/transaction.ts +++ b/packages/xrpl/src/models/transactions/transaction.ts @@ -2,23 +2,31 @@ /* eslint-disable max-lines-per-function -- need to work with a lot of Tx verifications */ import { ValidationError } from '../../errors' -import { IssuedCurrencyAmount, Memo } from '../common' -import { isHex } from '../utils' -import { setTransactionFlagsToNumber } from '../utils/flags' +import { convertTxFlagsToNumber } from '../utils/flags' import { AccountDelete, validateAccountDelete } from './accountDelete' import { AccountSet, validateAccountSet } from './accountSet' import { AMMBid, validateAMMBid } from './AMMBid' +import { AMMClawback, validateAMMClawback } from './AMMClawback' import { AMMCreate, validateAMMCreate } from './AMMCreate' import { AMMDelete, validateAMMDelete } from './AMMDelete' import { AMMDeposit, validateAMMDeposit } from './AMMDeposit' import { AMMVote, validateAMMVote } from './AMMVote' import { AMMWithdraw, validateAMMWithdraw } from './AMMWithdraw' +import { Batch, validateBatch } from './batch' import { CheckCancel, validateCheckCancel } from './checkCancel' import { CheckCash, validateCheckCash } from './checkCash' import { CheckCreate, validateCheckCreate } from './checkCreate' import { Clawback, validateClawback } from './clawback' -import { BaseTransaction, isIssuedCurrency } from './common' +import { + BaseTransaction, + isIssuedCurrencyAmount, + validateBaseTransaction, +} from './common' +import { CredentialAccept, validateCredentialAccept } from './CredentialAccept' +import { CredentialCreate, validateCredentialCreate } from './CredentialCreate' +import { CredentialDelete, validateCredentialDelete } from './CredentialDelete' +import { DelegateSet, validateDelegateSet } from './delegateSet' import { DepositPreauth, validateDepositPreauth } from './depositPreauth' import { DIDDelete, validateDIDDelete } from './DIDDelete' import { DIDSet, validateDIDSet } from './DIDSet' @@ -26,7 +34,38 @@ import { EnableAmendment } from './enableAmendment' import { EscrowCancel, validateEscrowCancel } from './escrowCancel' import { EscrowCreate, validateEscrowCreate } from './escrowCreate' import { EscrowFinish, validateEscrowFinish } from './escrowFinish' +import { + LoanBrokerCoverClawback, + validateLoanBrokerCoverClawback, +} from './loanBrokerCoverClawback' +import { + LoanBrokerCoverDeposit, + validateLoanBrokerCoverDeposit, +} from './loanBrokerCoverDeposit' +import { + LoanBrokerCoverWithdraw, + validateLoanBrokerCoverWithdraw, +} from './loanBrokerCoverWithdraw' +import { LoanBrokerDelete, validateLoanBrokerDelete } from './loanBrokerDelete' +import { LoanBrokerSet, validateLoanBrokerSet } from './loanBrokerSet' +import { LoanDelete, validateLoanDelete } from './loanDelete' +import { LoanManage, validateLoanManage } from './loanManage' +import { LoanPay, validateLoanPay } from './loanPay' +import { LoanSet, validateLoanSet } from './loanSet' import { TransactionMetadata } from './metadata' +import { MPTokenAuthorize, validateMPTokenAuthorize } from './MPTokenAuthorize' +import { + MPTokenIssuanceCreate, + validateMPTokenIssuanceCreate, +} from './MPTokenIssuanceCreate' +import { + MPTokenIssuanceDestroy, + validateMPTokenIssuanceDestroy, +} from './MPTokenIssuanceDestroy' +import { + MPTokenIssuanceSet, + validateMPTokenIssuanceSet, +} from './MPTokenIssuanceSet' import { NFTokenAcceptOffer, validateNFTokenAcceptOffer, @@ -41,6 +80,7 @@ import { validateNFTokenCreateOffer, } from './NFTokenCreateOffer' import { NFTokenMint, validateNFTokenMint } from './NFTokenMint' +import { NFTokenModify, validateNFTokenModify } from './NFTokenModify' import { OfferCancel, validateOfferCancel } from './offerCancel' import { OfferCreate, validateOfferCreate } from './offerCreate' import { OracleDelete, validateOracleDelete } from './oracleDelete' @@ -58,12 +98,26 @@ import { PaymentChannelFund, validatePaymentChannelFund, } from './paymentChannelFund' +import { + PermissionedDomainDelete, + validatePermissionedDomainDelete, +} from './permissionedDomainDelete' +import { + PermissionedDomainSet, + validatePermissionedDomainSet, +} from './permissionedDomainSet' import { SetFee } from './setFee' import { SetRegularKey, validateSetRegularKey } from './setRegularKey' import { SignerListSet, validateSignerListSet } from './signerListSet' import { TicketCreate, validateTicketCreate } from './ticketCreate' import { TrustSet, validateTrustSet } from './trustSet' import { UNLModify } from './UNLModify' +import { VaultClawback, validateVaultClawback } from './vaultClawback' +import { VaultCreate, validateVaultCreate } from './vaultCreate' +import { VaultDelete, validateVaultDelete } from './vaultDelete' +import { VaultDeposit, validateVaultDeposit } from './vaultDeposit' +import { VaultSet, validateVaultSet } from './vaultSet' +import { VaultWithdraw, validateVaultWithdraw } from './vaultWithdraw' import { XChainAccountCreateCommit, validateXChainAccountCreateCommit, @@ -98,6 +152,7 @@ import { */ export type SubmittableTransaction = | AMMBid + | AMMClawback | AMMCreate | AMMDelete | AMMDeposit @@ -105,21 +160,40 @@ export type SubmittableTransaction = | AMMWithdraw | AccountDelete | AccountSet + | Batch | CheckCancel | CheckCash | CheckCreate | Clawback + | CredentialAccept + | CredentialCreate + | CredentialDelete | DIDDelete | DIDSet + | DelegateSet | DepositPreauth | EscrowCancel | EscrowCreate | EscrowFinish + | LoanBrokerSet + | LoanBrokerCoverClawback + | LoanBrokerCoverDeposit + | LoanBrokerCoverWithdraw + | LoanBrokerDelete + | LoanSet + | LoanDelete + | LoanManage + | LoanPay + | MPTokenAuthorize + | MPTokenIssuanceCreate + | MPTokenIssuanceDestroy + | MPTokenIssuanceSet | NFTokenAcceptOffer | NFTokenBurn | NFTokenCancelOffer | NFTokenCreateOffer | NFTokenMint + | NFTokenModify | OfferCancel | OfferCreate | OracleDelete @@ -128,10 +202,18 @@ export type SubmittableTransaction = | PaymentChannelClaim | PaymentChannelCreate | PaymentChannelFund + | PermissionedDomainSet + | PermissionedDomainDelete | SetRegularKey | SignerListSet | TicketCreate | TrustSet + | VaultClawback + | VaultCreate + | VaultDelete + | VaultDeposit + | VaultSet + | VaultWithdraw | XChainAccountCreateCommit | XChainAddAccountCreateAttestation | XChainAddClaimAttestation @@ -175,50 +257,15 @@ export interface TransactionAndMetadata< */ export function validate(transaction: Record): void { const tx = { ...transaction } - if (tx.TransactionType == null) { - throw new ValidationError('Object does not have a `TransactionType`') - } - if (typeof tx.TransactionType !== 'string') { - throw new ValidationError("Object's `TransactionType` is not a string") - } - - /* - * - Memos have exclusively hex data. - */ - if (tx.Memos != null && typeof tx.Memos !== 'object') { - throw new ValidationError('Memo must be array') - } - if (tx.Memos != null) { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed here - ;(tx.Memos as Array).forEach((memo) => { - if (memo?.Memo == null) { - throw new ValidationError('Memo data must be in a `Memo` field') - } - if (memo.Memo.MemoData) { - if (!isHex(memo.Memo.MemoData)) { - throw new ValidationError('MemoData field must be a hex value') - } - } - if (memo.Memo.MemoType) { - if (!isHex(memo.Memo.MemoType)) { - throw new ValidationError('MemoType field must be a hex value') - } - } - - if (memo.Memo.MemoFormat) { - if (!isHex(memo.Memo.MemoFormat)) { - throw new ValidationError('MemoFormat field must be a hex value') - } - } - }) - } + // should already be done in the tx-specific validation, but doesn't hurt to check again + validateBaseTransaction(tx) Object.keys(tx).forEach((key) => { const standard_currency_code_len = 3 - if (tx[key] && isIssuedCurrency(tx[key])) { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- needed - const txCurrency = (tx[key] as IssuedCurrencyAmount).currency + const value = tx[key] + if (value && isIssuedCurrencyAmount(value)) { + const txCurrency = value.currency if ( txCurrency.length === standard_currency_code_len && @@ -232,12 +279,16 @@ export function validate(transaction: Record): void { }) // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- okay here - setTransactionFlagsToNumber(tx as unknown as Transaction) + tx.Flags = convertTxFlagsToNumber(tx as unknown as Transaction) switch (tx.TransactionType) { case 'AMMBid': validateAMMBid(tx) break + case 'AMMClawback': + validateAMMClawback(tx) + break + case 'AMMCreate': validateAMMCreate(tx) break @@ -266,6 +317,19 @@ export function validate(transaction: Record): void { validateAccountSet(tx) break + case 'Batch': + validateBatch(tx) + // This is done here to avoid issues with dependency cycles + + // eslint-disable-next-line @typescript-eslint/ban-ts-comment -- okay here + // @ts-expect-error -- already checked + // eslint-disable-next-line @typescript-eslint/no-unsafe-call -- already checked above + tx.RawTransactions.forEach((innerTx: Record) => { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- already checked above + validate(innerTx.RawTransaction as Record) + }) + break + case 'CheckCancel': validateCheckCancel(tx) break @@ -282,6 +346,18 @@ export function validate(transaction: Record): void { validateClawback(tx) break + case 'CredentialAccept': + validateCredentialAccept(tx) + break + + case 'CredentialCreate': + validateCredentialCreate(tx) + break + + case 'CredentialDelete': + validateCredentialDelete(tx) + break + case 'DIDDelete': validateDIDDelete(tx) break @@ -290,6 +366,10 @@ export function validate(transaction: Record): void { validateDIDSet(tx) break + case 'DelegateSet': + validateDelegateSet(tx) + break + case 'DepositPreauth': validateDepositPreauth(tx) break @@ -306,6 +386,58 @@ export function validate(transaction: Record): void { validateEscrowFinish(tx) break + case 'LoanBrokerCoverClawback': + validateLoanBrokerCoverClawback(tx) + break + + case 'LoanBrokerCoverDeposit': + validateLoanBrokerCoverDeposit(tx) + break + + case 'LoanBrokerCoverWithdraw': + validateLoanBrokerCoverWithdraw(tx) + break + + case 'LoanBrokerDelete': + validateLoanBrokerDelete(tx) + break + + case 'LoanBrokerSet': + validateLoanBrokerSet(tx) + break + + case 'LoanSet': + validateLoanSet(tx) + break + + case 'LoanManage': + validateLoanManage(tx) + break + + case 'LoanDelete': + validateLoanDelete(tx) + break + + case 'LoanPay': + validateLoanPay(tx) + break + + case 'MPTokenAuthorize': + validateMPTokenAuthorize(tx) + break + + case 'MPTokenIssuanceCreate': + validateMPTokenIssuanceCreate(tx) + break + + case 'MPTokenIssuanceDestroy': + validateMPTokenIssuanceDestroy(tx) + break + + case 'MPTokenIssuanceSet': + validateMPTokenIssuanceSet(tx) + break + case 'NFTokenAcceptOffer': validateNFTokenAcceptOffer(tx) break @@ -326,6 +458,10 @@ export function validate(transaction: Record): void { validateNFTokenMint(tx) break + case 'NFTokenModify': + validateNFTokenModify(tx) + break + case 'OfferCancel': validateOfferCancel(tx) break @@ -358,6 +494,14 @@ export function validate(transaction: Record): void { validatePaymentChannelFund(tx) break + case 'PermissionedDomainSet': + validatePermissionedDomainSet(tx) + break + + case 'PermissionedDomainDelete': + validatePermissionedDomainDelete(tx) + break + case 'SetRegularKey': validateSetRegularKey(tx) break @@ -374,6 +518,30 @@ export function validate(transaction: Record): void { validateTrustSet(tx) break + case 'VaultClawback': + validateVaultClawback(tx) + break + + case 'VaultCreate': + validateVaultCreate(tx) + break + + case 'VaultDelete': + validateVaultDelete(tx) + break + + case 'VaultDeposit': + validateVaultDeposit(tx) + break + + case 'VaultSet': + validateVaultSet(tx) + break + + case 'VaultWithdraw': + validateVaultWithdraw(tx) + break + case 'XChainAccountCreateCommit': validateXChainAccountCreateCommit(tx) break diff --git a/packages/xrpl/src/models/transactions/trustSet.ts b/packages/xrpl/src/models/transactions/trustSet.ts index f584261af3..1a9a965c8f 100644 --- a/packages/xrpl/src/models/transactions/trustSet.ts +++ b/packages/xrpl/src/models/transactions/trustSet.ts @@ -3,7 +3,7 @@ import { IssuedCurrencyAmount } from '../common' import { BaseTransaction, - GlobalFlags, + GlobalFlagsInterface, isAmount, validateBaseTransaction, } from './common' @@ -30,6 +30,11 @@ export enum TrustSetFlags { tfSetFreeze = 0x00100000, /** Unfreeze the trust line. */ tfClearFreeze = 0x00200000, + /** Deep-Freeze the trustline -- disallow sending and receiving the said IssuedCurrency */ + /** Allowed only if the trustline is already regularly frozen, or if tfSetFreeze is set in the same transaction. */ + tfSetDeepFreeze = 0x00400000, + /** Clear a Deep-Frozen trustline */ + tfClearDeepFreeze = 0x00800000, } /** @@ -72,7 +77,7 @@ export enum TrustSetFlags { * // } * ``` */ -export interface TrustSetFlagsInterface extends GlobalFlags { +export interface TrustSetFlagsInterface extends GlobalFlagsInterface { /** * Authorize the other party to hold currency issued by this account. (No * effect unless using the asfRequireAuth AccountSet flag.) Cannot be unset. @@ -89,6 +94,11 @@ export interface TrustSetFlagsInterface extends GlobalFlags { tfSetFreeze?: boolean /** Unfreeze the trust line. */ tfClearFreeze?: boolean + /** Deep-Freeze the trustline -- disallow sending and receiving the said IssuedCurrency */ + /** Allowed only if the trustline is already regularly frozen, or if tfSetFreeze is set in the same transaction. */ + tfSetDeepFreeze?: boolean + /** Clear a Deep-Frozen trust line */ + tfClearDeepFreeze?: boolean } /** diff --git a/packages/xrpl/src/models/transactions/vaultClawback.ts b/packages/xrpl/src/models/transactions/vaultClawback.ts new file mode 100644 index 0000000000..44e2991afe --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultClawback.ts @@ -0,0 +1,55 @@ +import { ClawbackAmount } from '../common' + +import { + BaseTransaction, + validateBaseTransaction, + validateRequiredField, + isString, + Account, + isAccount, + validateOptionalField, + isClawbackAmount, +} from './common' + +/** + * The VaultClawback transaction performs a Clawback from the Vault, exchanging the shares of an account. + * + * Conceptually, the transaction performs VaultWithdraw on behalf of the Holder, sending the funds to the + * Issuer account of the asset. In case there are insufficient funds for the entire Amount the transaction + * will perform a partial Clawback, up to the Vault.AssetsAvailable. The Clawback transaction must respect + * any future fees or penalties. + * + * @category Transaction Models + */ +export interface VaultClawback extends BaseTransaction { + TransactionType: 'VaultClawback' + + /** + * The ID of the vault from which assets are withdrawn. + */ + VaultID: string + + /** + * The account ID from which to clawback the assets. + */ + Holder: Account + + /** + * The asset amount to clawback. When Amount is 0 clawback all funds, up to the total shares the Holder owns. + */ + Amount?: ClawbackAmount +} + +/** + * Verify the form and type of a {@link VaultClawback} at runtime. + * + * @param tx - A {@link VaultClawback} Transaction. + * @throws When the {@link VaultClawback} is malformed. + */ +export function validateVaultClawback(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) + validateRequiredField(tx, 'Holder', isAccount) + validateOptionalField(tx, 'Amount', isClawbackAmount) +} diff --git a/packages/xrpl/src/models/transactions/vaultCreate.ts b/packages/xrpl/src/models/transactions/vaultCreate.ts new file mode 100644 index 0000000000..da3f44c441 --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultCreate.ts @@ -0,0 +1,200 @@ +import { ValidationError } from '../../errors' +import { Currency } from '../common' +import { hasFlag, isHex } from '../utils' +import { + MAX_MPT_META_BYTE_LENGTH, + MPT_META_WARNING_HEADER, + validateMPTokenMetadata, +} from '../utils/mptokenMetadata' + +import { + BaseTransaction, + validateBaseTransaction, + GlobalFlagsInterface, + validateOptionalField, + isNumber, + isCurrency, + validateRequiredField, + isString, + VAULT_DATA_MAX_BYTE_LENGTH, + XRPLNumber, + isXRPLNumber, +} from './common' + +const MAX_SCALE = 18 + +/** + * Enum representing withdrawal strategies for a Vault. + */ +export enum VaultWithdrawalPolicy { + vaultStrategyFirstComeFirstServe = 0x0001, +} + +/** + * Enum representing values of {@link VaultCreate} transaction flags. + * + * @category Transaction Flags + */ +export enum VaultCreateFlags { + tfVaultPrivate = 0x00010000, + tfVaultShareNonTransferable = 0x00020000, +} + +/** + * Map of flags to boolean values representing {@link VaultCreate} transaction + * flags. + * + * @category Transaction Flags + */ +export interface VaultCreateFlagsInterface extends GlobalFlagsInterface { + tfVaultPrivate?: boolean + tfVaultShareNonTransferable?: boolean +} + +/** + * The VaultCreate transaction creates a new Vault object. + * + * @category Transaction Models + */ +export interface VaultCreate extends BaseTransaction { + TransactionType: 'VaultCreate' + + /** + * The asset (XRP, IOU or MPT) of the Vault. + */ + Asset: Currency + + /** + * Arbitrary Vault metadata, limited to 256 bytes. + */ + Data?: string + + /** + * The maximum asset amount that can be held in a vault. + */ + AssetsMaximum?: XRPLNumber + + /** + * Should follow {@link https://github.com/XRPLF/XRPL-Standards/tree/master/XLS-0089-multi-purpose-token-metadata-schema | XLS-89} standard. + * Use {@link encodeMPTokenMetadata} utility function to convert to convert {@link MPTokenMetadata} to a blob. + * Use {@link decodeMPTokenMetadata} utility function to convert from a blob to {@link MPTokenMetadata}. + * + * While adherence to the XLS-89d format is not mandatory, non-compliant metadata + * may not be discoverable by ecosystem tools such as explorers and indexers. + */ + MPTokenMetadata?: string + + /** + * Indicates the withdrawal strategy used by the Vault. + */ + WithdrawalPolicy?: number + + /** + * The PermissionedDomain object ID associated with the shares of this Vault. + */ + DomainID?: string + + /** + * The scaling factor for vault shares. Only applicable for IOU assets. + * Valid values are between 0 and 18 inclusive. For XRP and MPT, this must not be provided. + */ + Scale?: number +} + +/* eslint-disable max-lines-per-function -- Not needed to reduce function */ +/* eslint-disable max-statements -- required to do all field validations */ +/** + * Verify the form and type of an {@link VaultCreate} at runtime. + * + * @param tx - A {@link VaultCreate} Transaction. + * @throws When the {@link VaultCreate} is malformed. + */ +export function validateVaultCreate(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'Asset', isCurrency) + validateOptionalField(tx, 'Data', isString) + validateOptionalField(tx, 'AssetsMaximum', isXRPLNumber) + validateOptionalField(tx, 'MPTokenMetadata', isString) + validateOptionalField(tx, 'WithdrawalPolicy', isNumber) + validateOptionalField(tx, 'DomainID', isString) + validateOptionalField(tx, 'Scale', isNumber) + + if (tx.Data !== undefined) { + const dataHex = tx.Data + if (!isHex(dataHex)) { + throw new ValidationError('VaultCreate: Data must be a valid hex string') + } + const dataByteLength = dataHex.length / 2 + if (dataByteLength > VAULT_DATA_MAX_BYTE_LENGTH) { + throw new ValidationError( + `VaultCreate: Data exceeds ${VAULT_DATA_MAX_BYTE_LENGTH} bytes (actual: ${dataByteLength})`, + ) + } + } + + if (tx.MPTokenMetadata !== undefined) { + const metaHex = tx.MPTokenMetadata + if (!isHex(metaHex)) { + throw new ValidationError( + 'VaultCreate: MPTokenMetadata must be a valid non-empty hex string', + ) + } + const metaByteLength = metaHex.length / 2 + if (metaByteLength > MAX_MPT_META_BYTE_LENGTH) { + throw new ValidationError( + `VaultCreate: MPTokenMetadata exceeds ${MAX_MPT_META_BYTE_LENGTH} bytes (actual: ${metaByteLength})`, + ) + } + } + + // If DomainID present, tfVaultPrivate must be set + if ( + tx.DomainID !== undefined && + !hasFlag(tx, VaultCreateFlags.tfVaultPrivate, 'tfVaultPrivate') + ) { + throw new ValidationError( + 'VaultCreate: Cannot set DomainID unless tfVaultPrivate flag is set.', + ) + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- required to check asset type + const asset = tx.Asset as unknown as Record + const isXRP = asset.currency === 'XRP' + const isMPT = 'mpt_issuance_id' in asset + const isIOU = !isXRP && !isMPT + + if (tx.Scale !== undefined) { + // Scale must not be provided for XRP or MPT assets + if (isXRP || isMPT) { + throw new ValidationError( + 'VaultCreate: Scale parameter must not be provided for XRP or MPT assets', + ) + } + + // For IOU assets, Scale must be between 0 and 18 inclusive + if (isIOU) { + if (!Number.isInteger(tx.Scale) || tx.Scale < 0 || tx.Scale > MAX_SCALE) { + throw new ValidationError( + `VaultCreate: Scale must be a number between 0 and ${MAX_SCALE} inclusive for IOU assets`, + ) + } + } + } + + if (tx.MPTokenMetadata != null) { + const validationMessages = validateMPTokenMetadata(tx.MPTokenMetadata) + + if (validationMessages.length > 0) { + const message = [ + MPT_META_WARNING_HEADER, + ...validationMessages.map((msg) => `- ${msg}`), + ].join('\n') + + // eslint-disable-next-line no-console -- Required here. + console.warn(message) + } + } +} +/* eslint-enable max-lines-per-function */ +/* eslint-enable max-statements */ diff --git a/packages/xrpl/src/models/transactions/vaultDelete.ts b/packages/xrpl/src/models/transactions/vaultDelete.ts new file mode 100644 index 0000000000..78aa9ed474 --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultDelete.ts @@ -0,0 +1,32 @@ +import { + BaseTransaction, + validateBaseTransaction, + validateRequiredField, + isString, +} from './common' + +/** + * The VaultDelete transaction deletes an existing vault object. + * + * @category Transaction Models + */ +export interface VaultDelete extends BaseTransaction { + TransactionType: 'VaultDelete' + + /** + * The ID of the vault to be deleted. + */ + VaultID: string +} + +/** + * Verify the form and type of a {@link VaultDelete} at runtime. + * + * @param tx - A {@link VaultDelete} Transaction. + * @throws When the {@link VaultDelete} is malformed. + */ +export function validateVaultDelete(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) +} diff --git a/packages/xrpl/src/models/transactions/vaultDeposit.ts b/packages/xrpl/src/models/transactions/vaultDeposit.ts new file mode 100644 index 0000000000..ce3d3f45c7 --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultDeposit.ts @@ -0,0 +1,42 @@ +import { Amount, MPTAmount } from '../common' + +import { + BaseTransaction, + validateBaseTransaction, + validateRequiredField, + isString, + isAmount, +} from './common' + +/** + * The VaultDeposit transaction adds liqudity in exchange for vault shares. + * + * @category Transaction Models + */ +export interface VaultDeposit extends BaseTransaction { + TransactionType: 'VaultDeposit' + + /** + * The ID of the vault to which the assets are deposited. + */ + VaultID: string + + /** + * Asset amount to deposit. + */ + // TODO: remove MPTAmount when MPTv2 is released + Amount: Amount | MPTAmount +} + +/** + * Verify the form and type of a {@link VaultDeposit} at runtime. + * + * @param tx - A {@link VaultDeposit} Transaction. + * @throws When the {@link VaultDeposit} is malformed. + */ +export function validateVaultDeposit(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) + validateRequiredField(tx, 'Amount', isAmount) +} diff --git a/packages/xrpl/src/models/transactions/vaultSet.ts b/packages/xrpl/src/models/transactions/vaultSet.ts new file mode 100644 index 0000000000..9bd2ca971f --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultSet.ts @@ -0,0 +1,71 @@ +import { ValidationError } from '../../errors' +import { isHex } from '../utils' + +import { + BaseTransaction, + validateBaseTransaction, + validateOptionalField, + validateRequiredField, + isString, + VAULT_DATA_MAX_BYTE_LENGTH, + XRPLNumber, + isXRPLNumber, +} from './common' + +/** + * The VaultSet transaction modifies mutable fields on an existing Vault object. + * + * @category Transaction Models + */ +export interface VaultSet extends BaseTransaction { + TransactionType: 'VaultSet' + + /** + * The ID of the Vault to be modified. Must be included when updating the Vault. + */ + VaultID: string + + /** + * Arbitrary Vault metadata, limited to 256 bytes. + */ + Data?: string + + /** + * The maximum asset amount that can be held in a vault. The value cannot be lower than the + * current AssetsTotal unless the value is 0. + */ + AssetsMaximum?: XRPLNumber + + /** + * The PermissionedDomain object ID associated with the shares of this Vault. + */ + DomainID?: string +} + +/** + * Verify the form and type of a {@link VaultSet} at runtime. + * + * @param tx - A {@link VaultSet} Transaction. + * @throws When the {@link VaultSet} is malformed. + */ +export function validateVaultSet(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) + validateOptionalField(tx, 'Data', isString) + validateOptionalField(tx, 'AssetsMaximum', isXRPLNumber) + validateOptionalField(tx, 'DomainID', isString) + + if (tx.Data !== undefined) { + const dataHex = tx.Data + if (!isHex(dataHex)) { + throw new ValidationError('VaultSet: Data must be a valid hex string') + } + const dataByteLength = dataHex.length / 2 + if (dataByteLength > VAULT_DATA_MAX_BYTE_LENGTH) { + throw new ValidationError( + `VaultSet: Data exceeds ${VAULT_DATA_MAX_BYTE_LENGTH} bytes (actual: ${dataByteLength})`, + ) + } + } +} diff --git a/packages/xrpl/src/models/transactions/vaultWithdraw.ts b/packages/xrpl/src/models/transactions/vaultWithdraw.ts new file mode 100644 index 0000000000..ceb5a36e55 --- /dev/null +++ b/packages/xrpl/src/models/transactions/vaultWithdraw.ts @@ -0,0 +1,58 @@ +import { Amount, MPTAmount } from '../common' + +import { + BaseTransaction, + validateBaseTransaction, + validateRequiredField, + isString, + isAmount, + Account, + validateOptionalField, + isAccount, + isNumber, +} from './common' + +/** + * The VaultWithdraw transaction withdraws assets in exchange for the vault's shares. + * + * @category Transaction Models + */ +export interface VaultWithdraw extends BaseTransaction { + TransactionType: 'VaultWithdraw' + + /** + * The ID of the vault from which assets are withdrawn. + */ + VaultID: string + + /** + * The exact amount of Vault asset to withdraw. + */ + // TODO: remove MPTAmount when MPTv2 is released + Amount: Amount | MPTAmount + + /** + * An account to receive the assets. It must be able to receive the asset. + */ + Destination?: Account + + /** + * Arbitrary tag identifying the reason for the withdrawal to the destination. + */ + DestinationTag?: number +} + +/** + * Verify the form and type of a {@link VaultWithdraw} at runtime. + * + * @param tx - A {@link VaultWithdraw} Transaction. + * @throws When the {@link VaultWithdraw} is malformed. + */ +export function validateVaultWithdraw(tx: Record): void { + validateBaseTransaction(tx) + + validateRequiredField(tx, 'VaultID', isString) + validateRequiredField(tx, 'Amount', isAmount) + validateOptionalField(tx, 'Destination', isAccount) + validateOptionalField(tx, 'DestinationTag', isNumber) +} diff --git a/packages/xrpl/src/models/utils/flags.ts b/packages/xrpl/src/models/utils/flags.ts index 81fba1aee7..4ebdb40d5f 100644 --- a/packages/xrpl/src/models/utils/flags.ts +++ b/packages/xrpl/src/models/utils/flags.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-param-reassign -- param reassign is safe */ /* eslint-disable no-bitwise -- flags require bitwise operations */ import { ValidationError } from '../../errors' import { @@ -6,9 +5,16 @@ import { AccountRootFlags, } from '../ledger/AccountRoot' import { AccountSetTfFlags } from '../transactions/accountSet' +import { AMMClawbackFlags } from '../transactions/AMMClawback' import { AMMDepositFlags } from '../transactions/AMMDeposit' import { AMMWithdrawFlags } from '../transactions/AMMWithdraw' +import { BatchFlags } from '../transactions/batch' import { GlobalFlags } from '../transactions/common' +import { LoanManageFlags } from '../transactions/loanManage' +import { LoanPayFlags } from '../transactions/loanPay' +import { MPTokenAuthorizeFlags } from '../transactions/MPTokenAuthorize' +import { MPTokenIssuanceCreateFlags } from '../transactions/MPTokenIssuanceCreate' +import { MPTokenIssuanceSetFlags } from '../transactions/MPTokenIssuanceSet' import { NFTokenCreateOfferFlags } from '../transactions/NFTokenCreateOffer' import { NFTokenMintFlags } from '../transactions/NFTokenMint' import { OfferCreateFlags } from '../transactions/offerCreate' @@ -16,6 +22,7 @@ import { PaymentFlags } from '../transactions/payment' import { PaymentChannelClaimFlags } from '../transactions/paymentChannelClaim' import type { Transaction } from '../transactions/transaction' import { TrustSetFlags } from '../transactions/trustSet' +import { VaultCreateFlags } from '../transactions/vaultCreate' import { XChainModifyBridgeFlags } from '../transactions/XChainModifyBridge' import { isFlagEnabled } from '.' @@ -46,47 +53,88 @@ export function parseAccountRootFlags( const txToFlag = { AccountSet: AccountSetTfFlags, + AMMClawback: AMMClawbackFlags, AMMDeposit: AMMDepositFlags, AMMWithdraw: AMMWithdrawFlags, + Batch: BatchFlags, + LoanManage: LoanManageFlags, + LoanPay: LoanPayFlags, + MPTokenAuthorize: MPTokenAuthorizeFlags, + MPTokenIssuanceCreate: MPTokenIssuanceCreateFlags, + MPTokenIssuanceSet: MPTokenIssuanceSetFlags, NFTokenCreateOffer: NFTokenCreateOfferFlags, NFTokenMint: NFTokenMintFlags, OfferCreate: OfferCreateFlags, PaymentChannelClaim: PaymentChannelClaimFlags, Payment: PaymentFlags, TrustSet: TrustSetFlags, + VaultCreate: VaultCreateFlags, XChainModifyBridge: XChainModifyBridgeFlags, } +function isTxToFlagKey( + transactionType: string, +): transactionType is keyof typeof txToFlag { + return transactionType in txToFlag +} + /** * Sets a transaction's flags to its numeric representation. * + * @deprecated + * This utility function is deprecated. + * Use convertTxFlagsToNumber() instead and use the returned value to modify the Transaction.Flags from the caller. + * * @param tx - A transaction to set its flags to its numeric representation. */ export function setTransactionFlagsToNumber(tx: Transaction): void { - if (tx.Flags == null) { - tx.Flags = 0 - return + // eslint-disable-next-line no-console -- intended deprecation warning + console.warn( + 'This function is deprecated. Use convertTxFlagsToNumber() instead and use the returned value to modify the Transaction.Flags from the caller.', + ) + + if (tx.Flags) { + // eslint-disable-next-line no-param-reassign -- intended param reassign in setter, retain old functionality for compatibility + tx.Flags = convertTxFlagsToNumber(tx) + } +} + +/** + * Returns a Transaction's Flags as its numeric representation. + * + * @param tx - A Transaction to parse Flags for + * @returns A numerical representation of a Transaction's Flags + */ +export function convertTxFlagsToNumber(tx: Transaction): number { + const txFlags = tx.Flags + if (txFlags == null) { + return 0 } - if (typeof tx.Flags === 'number') { - return + if (typeof txFlags === 'number') { + return txFlags } - tx.Flags = txToFlag[tx.TransactionType] - ? convertFlagsToNumber(tx.Flags, txToFlag[tx.TransactionType]) - : 0 -} + if (isTxToFlagKey(tx.TransactionType)) { + const flagEnum = txToFlag[tx.TransactionType] + return Object.keys(txFlags).reduce((resultFlags, flag) => { + if (flagEnum[flag] == null && GlobalFlags[flag] == null) { + throw new ValidationError(`Invalid flag ${flag}.`) + } + + return txFlags[flag] + ? resultFlags | (flagEnum[flag] ?? GlobalFlags[flag]) + : resultFlags + }, 0) + } -// eslint-disable-next-line @typescript-eslint/no-explicit-any -- added ValidationError check for flagEnum -function convertFlagsToNumber(flags: GlobalFlags, flagEnum: any): number { - return Object.keys(flags).reduce((resultFlags, flag) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- safe member access - if (flagEnum[flag] == null) { + return Object.keys(txFlags).reduce((resultFlags, flag) => { + if (GlobalFlags[flag] == null) { throw new ValidationError( - `flag ${flag} doesn't exist in flagEnum: ${JSON.stringify(flagEnum)}`, + `Invalid flag ${flag}. Valid flags are ${JSON.stringify(GlobalFlags)}`, ) } - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- safe member access - return flags[flag] ? resultFlags | flagEnum[flag] : resultFlags + + return txFlags[flag] ? resultFlags | GlobalFlags[flag] : resultFlags }, 0) } @@ -97,22 +145,30 @@ function convertFlagsToNumber(flags: GlobalFlags, flagEnum: any): number { * @returns A map with all flags as booleans. */ export function parseTransactionFlags(tx: Transaction): object { - setTransactionFlagsToNumber(tx) - if (typeof tx.Flags !== 'number' || !tx.Flags || tx.Flags === 0) { + const flags = convertTxFlagsToNumber(tx) + if (flags === 0) { return {} } - const flags = tx.Flags - const flagsMap = {} + const booleanFlagMap = {} + + if (isTxToFlagKey(tx.TransactionType)) { + const transactionTypeFlags = txToFlag[tx.TransactionType] + Object.values(transactionTypeFlags).forEach((flag) => { + if ( + typeof flag === 'string' && + isFlagEnabled(flags, transactionTypeFlags[flag]) + ) { + booleanFlagMap[flag] = true + } + }) + } - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- safe member access - const flagEnum = txToFlag[tx.TransactionType] - Object.values(flagEnum).forEach((flag) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- safe member access - if (typeof flag === 'string' && isFlagEnabled(flags, flagEnum[flag])) { - flagsMap[flag] = true + Object.values(GlobalFlags).forEach((flag) => { + if (typeof flag === 'string' && isFlagEnabled(flags, GlobalFlags[flag])) { + booleanFlagMap[flag] = true } }) - return flagsMap + return booleanFlagMap } diff --git a/packages/xrpl/src/models/utils/index.ts b/packages/xrpl/src/models/utils/index.ts index 5a1d7520f0..de3320a4b4 100644 --- a/packages/xrpl/src/models/utils/index.ts +++ b/packages/xrpl/src/models/utils/index.ts @@ -1,4 +1,7 @@ +import type { Transaction } from '../transactions' + const HEX_REGEX = /^[0-9A-Fa-f]+$/u +export const INTEGER_SANITY_CHECK = /^[0-9]+$/u /** * Verify that all fields of an object are in fields. @@ -26,6 +29,28 @@ export function isFlagEnabled(Flags: number, checkFlag: number): boolean { return (BigInt(checkFlag) & BigInt(Flags)) === BigInt(checkFlag) } +/** + * Determines whether a transaction has a certain flag enabled. + * + * @param tx The transaction to check for the flag. + * @param flag The flag to check. + * @param flagName The name of the flag to check, used for object flags. + * @returns Whether `flag` is enabled on `tx`. + */ +export function hasFlag( + tx: Transaction | Record, + flag: number, + flagName: string, +): boolean { + if (tx.Flags == null) { + return false + } + if (typeof tx.Flags === 'number') { + return isFlagEnabled(tx.Flags, flag) + } + return tx.Flags[flagName] === true +} + /** * Check if string is in hex format. * diff --git a/packages/xrpl/src/models/utils/mptokenMetadata.ts b/packages/xrpl/src/models/utils/mptokenMetadata.ts new file mode 100644 index 0000000000..76976c5672 --- /dev/null +++ b/packages/xrpl/src/models/utils/mptokenMetadata.ts @@ -0,0 +1,529 @@ +/* eslint-disable max-lines -- utility file */ +/* eslint-disable no-continue -- makes logic easier to write and read in this case */ + +import { hexToString, stringToHex } from '@xrplf/isomorphic/utils' +import stableStringify from 'fast-json-stable-stringify' + +import type { MPTokenMetadata } from '../common' +import { isRecord, isString } from '../transactions/common' + +import { isHex } from '.' + +export const MAX_MPT_META_BYTE_LENGTH = 1024 +export const MPT_META_WARNING_HEADER = + 'MPTokenMetadata is not properly formatted as JSON as per the XLS-89 standard. ' + + "While adherence to this standard is not mandatory, such non-compliant MPToken's might not be discoverable " + + 'by Explorers and Indexers in the XRPL ecosystem.' + +const MPT_META_URI_FIELDS = [ + { + long: 'uri', + compact: 'u', + }, + { + long: 'category', + compact: 'c', + }, + { + long: 'title', + compact: 't', + }, +] + +const MPT_META_ALL_FIELDS = [ + { + long: 'ticker', + compact: 't', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) || !/^[A-Z0-9]{1,6}$/u.test(value)) { + return [ + `${this.long}/${this.compact}: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.`, + ] + } + + return [] + }, + }, + { + long: 'name', + compact: 'n', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) || value.length === 0) { + return [`${this.long}/${this.compact}: should be a non-empty string.`] + } + + return [] + }, + }, + { + long: 'icon', + compact: 'i', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) || value.length === 0) { + return [`${this.long}/${this.compact}: should be a non-empty string.`] + } + + return [] + }, + }, + { + long: 'asset_class', + compact: 'ac', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + const MPT_META_ASSET_CLASSES = [ + 'rwa', + 'memes', + 'wrapped', + 'gaming', + 'defi', + 'other', + ] + + if (!isString(value) || !MPT_META_ASSET_CLASSES.includes(value)) { + return [ + `${this.long}/${this.compact}: should be one of ${MPT_META_ASSET_CLASSES.join( + ', ', + )}.`, + ] + } + return [] + }, + }, + { + long: 'issuer_name', + compact: 'in', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) || value.length === 0) { + return [`${this.long}/${this.compact}: should be a non-empty string.`] + } + + return [] + }, + }, + { + long: 'desc', + compact: 'd', + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + if (obj[this.long] === undefined && obj[this.compact] === undefined) { + return [] + } + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) || value.length === 0) { + return [`${this.long}/${this.compact}: should be a non-empty string.`] + } + + return [] + }, + }, + { + long: 'asset_subclass', + compact: 'as', + required: false, + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + const value = obj[this.long] ?? obj[this.compact] + if ( + (obj.asset_class === 'rwa' || obj.ac === 'rwa') && + value === undefined + ) { + return [ + `${this.long}/${this.compact}: required when asset_class is rwa.`, + ] + } + + if (obj[this.long] === undefined && obj[this.compact] === undefined) { + return [] + } + + const MPT_META_ASSET_SUB_CLASSES = [ + 'stablecoin', + 'commodity', + 'real_estate', + 'private_credit', + 'equity', + 'treasury', + 'other', + ] + if (!isString(value) || !MPT_META_ASSET_SUB_CLASSES.includes(value)) { + return [ + `${this.long}/${this.compact}: should be one of ${MPT_META_ASSET_SUB_CLASSES.join( + ', ', + )}.`, + ] + } + return [] + }, + }, + { + long: 'uris', + compact: 'us', + required: false, + // eslint-disable-next-line max-lines-per-function -- required for validation + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + if (obj[this.long] === undefined && obj[this.compact] === undefined) { + return [] + } + const value = obj[this.long] ?? obj[this.compact] + if (!Array.isArray(value) || value.length === 0) { + return [`${this.long}/${this.compact}: should be a non-empty array.`] + } + + const messages: string[] = [] + for (const uriObj of value) { + if ( + !isRecord(uriObj) || + Object.keys(uriObj).length !== MPT_META_URI_FIELDS.length + ) { + messages.push( + `${this.long}/${this.compact}: should be an array of objects each with uri/u, category/c, and title/t properties.`, + ) + continue + } + + // Check for both long and compact forms in the same URI object + for (const uriField of MPT_META_URI_FIELDS) { + if ( + uriObj[uriField.long] != null && + uriObj[uriField.compact] != null + ) { + messages.push( + `${this.long}/${this.compact}: should not have both ${uriField.long} and ${uriField.compact} fields.`, + ) + break + } + } + + const uri = uriObj.uri ?? uriObj.u + const category = uriObj.category ?? uriObj.c + const title = uriObj.title ?? uriObj.t + if (!isString(uri) || !isString(category) || !isString(title)) { + messages.push( + `${this.long}/${this.compact}: should be an array of objects each with uri/u, category/c, and title/t properties.`, + ) + } + } + return messages + }, + }, + { + long: 'additional_info', + compact: 'ai', + required: false, + validate(obj: Record): string[] { + if (obj[this.long] != null && obj[this.compact] != null) { + return [ + `${this.long}/${this.compact}: both long and compact forms present. expected only one.`, + ] + } + + if (obj[this.long] === undefined && obj[this.compact] === undefined) { + return [] + } + const value = obj[this.long] ?? obj[this.compact] + if (!isString(value) && !isRecord(value)) { + return [ + `${this.long}/${this.compact}: should be a string or JSON object.`, + ] + } + + return [] + }, + }, +] + +/** + * Shortens long field names to their compact form equivalents. + * Reverse operation of {@link expandKeys}. + * + * @param input - Object with potentially long field names. + * @param mappings - Array of field mappings with long and compact names. + * @returns Object with shortened compact field names. + */ +function shortenKeys( + input: Record, + mappings: Array<{ long: string; compact: string }>, +): Record { + const output: Record = {} + + for (const [key, value] of Object.entries(input)) { + const mapping = mappings.find( + ({ long, compact }) => long === key || compact === key, + ) + // Extra keys stays there + if (mapping === undefined) { + output[key] = value + continue + } + + // Both long and compact forms are present + if ( + input[mapping.long] !== undefined && + input[mapping.compact] !== undefined + ) { + output[key] = value + continue + } + + output[mapping.compact] = value + } + + return output +} + +/** + * Encodes {@link MPTokenMetadata} object to a hex string. + * Steps: + * 1. Shorten long field names to their compact form equivalents. + * 2. Sort the fields alphabetically for deterministic encoding. + * 3. Stringify the object. + * 4. Convert to hex. + * + * @param mptokenMetadata - {@link MPTokenMetadata} to encode. + * @returns Hex encoded {@link MPTokenMetadata}. + * @throws Error if input is not a JSON object. + * @category Utilities + */ +export function encodeMPTokenMetadata( + mptokenMetadata: MPTokenMetadata, +): string { + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Required here to implement type-guard + let input = mptokenMetadata as unknown as Record + + if (!isRecord(input)) { + throw new Error('MPTokenMetadata must be JSON object.') + } + + input = shortenKeys(input, MPT_META_ALL_FIELDS) + + if (Array.isArray(input.uris)) { + input.uris = input.uris.map( + (uri: Record): Record => { + if (isRecord(uri)) { + return shortenKeys(uri, MPT_META_URI_FIELDS) + } + return uri + }, + ) + } + + if (Array.isArray(input.us)) { + input.us = input.us.map( + (uri: Record): Record => { + if (isRecord(uri)) { + return shortenKeys(uri, MPT_META_URI_FIELDS) + } + return uri + }, + ) + } + + return stringToHex(stableStringify(input)).toUpperCase() +} + +/** + * Expands compact field names to their long form equivalents. + * Reverse operation of {@link shortenKeys}. + * + * @param input - Object with potentially compact field names. + * @param mappings - Array of field mappings with long and compact names. + * @returns Object with expanded long field names. + */ +function expandKeys( + input: Record, + mappings: Array<{ long: string; compact: string }>, +): Record { + const output: Record = {} + + for (const [key, value] of Object.entries(input)) { + const mapping = mappings.find( + ({ long, compact }) => long === key || compact === key, + ) + // Extra keys stays there + if (mapping === undefined) { + output[key] = value + continue + } + + // Both long and compact forms are present + if ( + input[mapping.long] !== undefined && + input[mapping.compact] !== undefined + ) { + output[key] = value + continue + } + + output[mapping.long] = value + } + + return output +} + +/** + * Decodes hex-encoded {@link MPTokenMetadata} into a JSON object. + * Converts compact field names to their corresponding long-form equivalents. + * + * @param input - Hex encoded {@link MPTokenMetadata}. + * @returns Decoded {@link MPTokenMetadata} object with long field names. + * @throws Error if input is not valid hex or cannot be parsed as JSON. + * @category Utilities + */ +export function decodeMPTokenMetadata(input: string): MPTokenMetadata { + if (!isHex(input)) { + throw new Error('MPTokenMetadata must be in hex format.') + } + + let jsonMetaData: unknown + try { + jsonMetaData = JSON.parse(hexToString(input)) + } catch (err) { + throw new Error( + `MPTokenMetadata is not properly formatted as JSON - ${String(err)}`, + ) + } + + if (!isRecord(jsonMetaData)) { + throw new Error('MPTokenMetadata must be a JSON object.') + } + + let output = jsonMetaData + + output = expandKeys(output, MPT_META_ALL_FIELDS) + + if (Array.isArray(output.uris)) { + output.uris = output.uris.map( + (uri: Record): Record => { + if (isRecord(uri)) { + return expandKeys(uri, MPT_META_URI_FIELDS) + } + return uri + }, + ) + } + + if (Array.isArray(output.us)) { + output.us = output.us.map( + (uri: Record): Record => { + if (isRecord(uri)) { + return expandKeys(uri, MPT_META_URI_FIELDS) + } + return uri + }, + ) + } + + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- Required here as output is now properly formatted + return output as unknown as MPTokenMetadata +} + +/** + * Validates {@link MPTokenMetadata} adheres to XLS-89 standard. + * + * @param input - Hex encoded {@link MPTokenMetadata}. + * @returns Validation messages if {@link MPTokenMetadata} does not adheres to XLS-89 standard. + * @category Utilities + */ +export function validateMPTokenMetadata(input: string): string[] { + const validationMessages: string[] = [] + + // Validate hex format + if (!isHex(input)) { + validationMessages.push(`MPTokenMetadata must be in hex format.`) + return validationMessages + } + + // Validate byte length + if (input.length / 2 > MAX_MPT_META_BYTE_LENGTH) { + validationMessages.push( + `MPTokenMetadata must be max ${MAX_MPT_META_BYTE_LENGTH} bytes.`, + ) + return validationMessages + } + + // Parse JSON + let jsonMetaData: unknown + try { + jsonMetaData = JSON.parse(hexToString(input)) + } catch (err) { + validationMessages.push( + `MPTokenMetadata is not properly formatted as JSON - ${String(err)}`, + ) + return validationMessages + } + + // Validate JSON structure + if (!isRecord(jsonMetaData)) { + validationMessages.push( + 'MPTokenMetadata is not properly formatted JSON object as per XLS-89.', + ) + return validationMessages + } + + if (Object.keys(jsonMetaData).length > MPT_META_ALL_FIELDS.length) { + validationMessages.push( + `MPTokenMetadata must not contain more than ${MPT_META_ALL_FIELDS.length} top-level fields (found ${ + Object.keys(jsonMetaData).length + }).`, + ) + } + + const obj = jsonMetaData + + for (const property of MPT_META_ALL_FIELDS) { + validationMessages.push(...property.validate(obj)) + } + + return validationMessages +} diff --git a/packages/xrpl/src/sugar/autofill.ts b/packages/xrpl/src/sugar/autofill.ts index ca0757611d..bb7809ac98 100644 --- a/packages/xrpl/src/sugar/autofill.ts +++ b/packages/xrpl/src/sugar/autofill.ts @@ -1,10 +1,18 @@ +/* eslint-disable @typescript-eslint/consistent-type-assertions -- required here */ +/* eslint-disable max-lines -- lots of helper functions needed for autofill */ import BigNumber from 'bignumber.js' import { xAddressToClassicAddress, isValidXAddress } from 'ripple-address-codec' import { type Client } from '..' import { ValidationError, XrplError } from '../errors' -import { AccountInfoRequest, AccountObjectsRequest } from '../models/methods' -import { Transaction } from '../models/transactions' +import { LoanBroker } from '../models/ledger' +import { + AccountInfoRequest, + AccountObjectsRequest, + LedgerEntryRequest, +} from '../models/methods' +import { Batch, Payment, Transaction } from '../models/transactions' +import { Account } from '../models/transactions/common' import { xrpToDrops } from '../utils' import getFeeXrp from './getFeeXrp' @@ -146,7 +154,9 @@ function validateAccountAddress( tagField: string, ): void { // if X-address is given, convert it to classic address - const { classicAccount, tag } = getClassicAccountAndTag(tx[accountField]) + const { classicAccount, tag } = getClassicAccountAndTag( + tx[accountField] as string, + ) // eslint-disable-next-line no-param-reassign -- param reassign is safe tx[accountField] = classicAccount @@ -164,17 +174,17 @@ function validateAccountAddress( /** * Retrieves the classic account and tag from an account address. * - * @param Account - The account address. + * @param account - The account address. * @param [expectedTag] - The expected tag for the account address. * @returns The classic account and tag. * @throws {ValidationError} If the address includes a tag that does not match the tag specified in the transaction. */ function getClassicAccountAndTag( - Account: string, + account: string, expectedTag?: number, ): ClassicAccountAndTag { - if (isValidXAddress(Account)) { - const classic = xAddressToClassicAddress(Account) + if (isValidXAddress(account)) { + const classic = xAddressToClassicAddress(account) if (expectedTag != null && classic.tag !== expectedTag) { throw new ValidationError( 'address includes a tag that does not match the tag specified in the transaction', @@ -186,7 +196,7 @@ function getClassicAccountAndTag( } } return { - classicAccount: Account, + classicAccount: account, tag: expectedTag, } } @@ -198,7 +208,6 @@ function getClassicAccountAndTag( * @param fieldName - The name of the field to convert.export */ function convertToClassicAddress(tx: Transaction, fieldName: string): void { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment -- assignment is safe const account = tx[fieldName] if (typeof account === 'string') { const { classicAccount } = getClassicAccountAndTag(account) @@ -207,6 +216,20 @@ function convertToClassicAddress(tx: Transaction, fieldName: string): void { } } +// Helper function to get the next valid sequence number for an account. +async function getNextValidSequenceNumber( + client: Client, + account: string, +): Promise { + const request: AccountInfoRequest = { + command: 'account_info', + account, + ledger_index: 'current', + } + const data = await client.request(request) + return data.result.account_data.Sequence +} + /** * Sets the next valid sequence number for a transaction. * @@ -219,24 +242,18 @@ export async function setNextValidSequenceNumber( client: Client, tx: Transaction, ): Promise { - const request: AccountInfoRequest = { - command: 'account_info', - account: tx.Account, - ledger_index: 'current', - } - const data = await client.request(request) // eslint-disable-next-line no-param-reassign, require-atomic-updates -- param reassign is safe with no race condition - tx.Sequence = data.result.account_data.Sequence + tx.Sequence = await getNextValidSequenceNumber(client, tx.Account) } /** - * Fetches the account deletion fee from the server state using the provided client. + * Fetches the owner reserve fee from the server state using the provided client. * * @param client - The client object used to make the request. - * @returns A Promise that resolves to the account deletion fee as a BigNumber. - * @throws {Error} Throws an error if the account deletion fee cannot be fetched. + * @returns A Promise that resolves to the owner reserve fee as a BigNumber. + * @throws {Error} Throws an error if the owner reserve fee cannot be fetched. */ -async function fetchAccountDeleteFee(client: Client): Promise { +async function fetchOwnerReserveFee(client: Client): Promise { const response = await client.request({ command: 'server_state' }) const fee = response.result.state.validated_ledger?.reserve_inc @@ -247,59 +264,148 @@ async function fetchAccountDeleteFee(client: Client): Promise { return new BigNumber(fee) } +/** + * Fetches the total number of signers for the counterparty of a LoanSet transaction. + * + * @param client - The client object used to make the request. + * @param tx - The transaction object for which the counterparty signers count needs to be fetched. + * @returns A Promise that resolves to the number of signers for the counterparty. + * @throws {ValidationError} Throws an error if LoanBrokerID is not provided in the transaction. + */ +async function fetchCounterPartySignersCount( + client: Client, + tx: Transaction, +): Promise { + let counterParty: Account | undefined = tx.Counterparty as Account | undefined + // Loan Borrower initiated the transaction, Loan Broker is the counterparty. + if (counterParty == null) { + if (tx.LoanBrokerID == null) { + throw new ValidationError( + 'LoanBrokerID is required for LoanSet transaction', + ) + } + const resp = ( + await client.request({ + command: 'ledger_entry', + index: tx.LoanBrokerID, + ledger_index: 'validated', + } as LedgerEntryRequest) + ).result.node as LoanBroker + + counterParty = resp.Owner + } + + // Now fetch the signer list for the counterparty. + const signerListRequest: AccountInfoRequest = { + command: 'account_info', + account: counterParty, + ledger_index: 'validated', + signer_lists: true, + } + + const signerListResponse = await client.request(signerListRequest) + const signerList = signerListResponse.result.signer_lists?.[0] + return signerList?.SignerEntries.length ?? 1 +} + /** * Calculates the fee per transaction type. * * @param client - The client object. * @param tx - The transaction object. * @param [signersCount=0] - The number of signers (default is 0). Only used for multisigning. - * @returns A promise that resolves with void. Modifies the `tx` parameter to give it the calculated fee. + * @returns A promise that returns the fee. */ -export async function calculateFeePerTransactionType( +// eslint-disable-next-line max-lines-per-function -- necessary to check for many transaction types. +async function calculateFeePerTransactionType( client: Client, tx: Transaction, signersCount = 0, -): Promise { - // netFee is usually 0.00001 XRP (10 drops) +): Promise { const netFeeXRP = await getFeeXrp(client) const netFeeDrops = xrpToDrops(netFeeXRP) let baseFee = new BigNumber(netFeeDrops) + const isSpecialTxCost = [ + 'AccountDelete', + 'AMMCreate', + 'VaultCreate', + ].includes(tx.TransactionType) + // EscrowFinish Transaction with Fulfillment if (tx.TransactionType === 'EscrowFinish' && tx.Fulfillment != null) { const fulfillmentBytesSize: number = Math.ceil(tx.Fulfillment.length / 2) - // 10 drops Γ— (33 + (Fulfillment size in bytes / 16)) - const product = new BigNumber( + // BaseFee Γ— (33 + (Fulfillment size in bytes / 16)) + baseFee = new BigNumber( // eslint-disable-next-line @typescript-eslint/no-magic-numbers -- expected use of magic numbers scaleValue(netFeeDrops, 33 + fulfillmentBytesSize / 16), ) - baseFee = product.dp(0, BigNumber.ROUND_CEIL) - } - - if ( - tx.TransactionType === 'AccountDelete' || - tx.TransactionType === 'AMMCreate' - ) { - baseFee = await fetchAccountDeleteFee(client) + } else if (isSpecialTxCost) { + baseFee = await fetchOwnerReserveFee(client) + } else if (tx.TransactionType === 'Batch') { + const rawTxFees = await tx.RawTransactions.reduce( + async (acc, rawTxn) => { + const resolvedAcc = await acc + const fee = await calculateFeePerTransactionType( + client, + rawTxn.RawTransaction, + ) + return BigNumber.sum(resolvedAcc, fee) + }, + Promise.resolve(new BigNumber(0)), + ) + baseFee = BigNumber.sum(baseFee.times(2), rawTxFees) } /* * Multi-signed Transaction - * 10 drops Γ— (1 + Number of Signatures Provided) + * BaseFee Γ— (1 + Number of Signatures Provided) */ if (signersCount > 0) { - baseFee = BigNumber.sum(baseFee, scaleValue(netFeeDrops, 1 + signersCount)) + baseFee = BigNumber.sum(baseFee, scaleValue(netFeeDrops, signersCount)) + } + + // LoanSet transactions have additional fees based on the number of signers for the counterparty. + if (tx.TransactionType === 'LoanSet') { + const counterPartySignersCount = await fetchCounterPartySignersCount( + client, + tx, + ) + baseFee = BigNumber.sum( + baseFee, + scaleValue(netFeeDrops, counterPartySignersCount), + ) + // eslint-disable-next-line no-console -- necessary to inform users about autofill behavior + console.warn( + `For LoanSet transaction the auto calculated Fee accounts for total number of signers the counterparty has to avoid transaction failure.`, + ) } const maxFeeDrops = xrpToDrops(client.maxFeeXRP) - const totalFee = - tx.TransactionType === 'AccountDelete' - ? baseFee - : BigNumber.min(baseFee, maxFeeDrops) + const totalFee = isSpecialTxCost + ? baseFee + : BigNumber.min(baseFee, maxFeeDrops) // Round up baseFee and return it as a string - // eslint-disable-next-line no-param-reassign, @typescript-eslint/no-magic-numbers -- param reassign is safe, base 10 magic num - tx.Fee = totalFee.dp(0, BigNumber.ROUND_CEIL).toString(10) + return totalFee.dp(0, BigNumber.ROUND_CEIL) +} + +/** + * Calculates the fee per transaction type and sets it in the transaction. + * + * @param client - The client object. + * @param tx - The transaction object. + * @param [signersCount=0] - The number of signers (default is 0). Only used for multisigning. + * @returns A promise that resolves with void. Modifies the `tx` parameter to give it the calculated fee. + */ +export async function getTransactionFee( + client: Client, + tx: Transaction, + signersCount = 0, +): Promise { + const fee = await calculateFeePerTransactionType(client, tx, signersCount) + // eslint-disable-next-line @typescript-eslint/no-magic-numbers, require-atomic-updates, no-param-reassign -- fine here + tx.Fee = fee.toString(10) } /** @@ -359,3 +465,92 @@ export async function checkAccountDeleteBlockers( resolve() }) } + +/** + * Replaces Amount with DeliverMax if needed. + * + * @param tx - The transaction object. + * @throws ValidationError if Amount and DeliverMax are both provided but do not match. + */ +export function handleDeliverMax(tx: Payment): void { + if (tx.DeliverMax != null) { + // If only DeliverMax is provided, use it to populate the Amount field + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, no-param-reassign -- needed here + tx.Amount ??= tx.DeliverMax + + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- needed here + if (tx.Amount != null && tx.Amount !== tx.DeliverMax) { + throw new ValidationError( + 'PaymentTransaction: Amount and DeliverMax fields must be identical when both are provided', + ) + } + + // eslint-disable-next-line no-param-reassign -- needed here + delete tx.DeliverMax + } +} + +/** + * Autofills all the relevant `x` fields. + * + * @param client - The client object. + * @param tx - The transaction object. + * @returns A promise that resolves with void if there are no blockers, or rejects with an XrplError if there are blockers. + */ +// eslint-disable-next-line complexity, max-lines-per-function -- needed here, lots to check +export async function autofillBatchTxn( + client: Client, + tx: Batch, +): Promise { + const accountSequences: Record = {} + + for (const rawTxn of tx.RawTransactions) { + const txn = rawTxn.RawTransaction + + // Sequence processing + if (txn.Sequence == null && txn.TicketSequence == null) { + if (txn.Account in accountSequences) { + txn.Sequence = accountSequences[txn.Account] + accountSequences[txn.Account] += 1 + } else { + // eslint-disable-next-line no-await-in-loop -- It has to wait + const nextSequence = await getNextValidSequenceNumber( + client, + txn.Account, + ) + const sequence = + txn.Account === tx.Account ? nextSequence + 1 : nextSequence + accountSequences[txn.Account] = sequence + 1 + txn.Sequence = sequence + } + } + + if (txn.Fee == null) { + txn.Fee = '0' + } else if (txn.Fee !== '0') { + throw new XrplError('Must have `Fee of "0" in inner Batch transaction.') + } + + if (txn.SigningPubKey == null) { + txn.SigningPubKey = '' + } else if (txn.SigningPubKey !== '') { + throw new XrplError( + 'Must have `SigningPubKey` of "" in inner Batch transaction.', + ) + } + + if (txn.TxnSignature != null) { + throw new XrplError( + 'Must not have `TxnSignature` in inner Batch transaction.', + ) + } + + if (txn.Signers != null) { + throw new XrplError('Must not have `Signers` in inner Batch transaction.') + } + + if (txn.NetworkID == null && txNeedsNetworkID(client)) { + txn.NetworkID = client.networkID + } + } +} diff --git a/packages/xrpl/src/sugar/getFeeXrp.ts b/packages/xrpl/src/sugar/getFeeXrp.ts index 24c4c99a9f..1526cc6c8b 100644 --- a/packages/xrpl/src/sugar/getFeeXrp.ts +++ b/packages/xrpl/src/sugar/getFeeXrp.ts @@ -35,10 +35,8 @@ export default async function getFeeXrp( } const baseFeeXrp = new BigNumber(baseFee) - if (serverInfo.load_factor == null) { - // https://github.com/ripple/rippled/issues/3812#issuecomment-816871100 - serverInfo.load_factor = 1 - } + // https://github.com/ripple/rippled/issues/3812#issuecomment-816871100 + serverInfo.load_factor ??= 1 let fee = baseFeeXrp.times(serverInfo.load_factor).times(feeCushion) // Cap fee to `client.maxFeeXRP` diff --git a/packages/xrpl/src/sugar/getOrderbook.ts b/packages/xrpl/src/sugar/getOrderbook.ts index 285a9d8f28..c31041e8e3 100644 --- a/packages/xrpl/src/sugar/getOrderbook.ts +++ b/packages/xrpl/src/sugar/getOrderbook.ts @@ -17,7 +17,7 @@ function sortOffers(offers: BookOffer[]): BookOffer[] { const qualityA = offerA.quality ?? 0 const qualityB = offerB.quality ?? 0 - return new BigNumber(qualityA).comparedTo(qualityB) + return new BigNumber(qualityA).comparedTo(qualityB) ?? 0 }) } @@ -127,7 +127,7 @@ export function createBookOffersRequest( ledger_index: options.ledger_index ?? 'validated', ledger_hash: options.ledger_hash === null ? undefined : options.ledger_hash, limit: options.limit ?? DEFAULT_LIMIT, - taker: options.taker ? options.taker : undefined, + taker: options.taker ?? undefined, } return request diff --git a/packages/xrpl/src/sugar/submit.ts b/packages/xrpl/src/sugar/submit.ts index 423a863cf8..c87954642f 100644 --- a/packages/xrpl/src/sugar/submit.ts +++ b/packages/xrpl/src/sugar/submit.ts @@ -1,5 +1,3 @@ -import { decode, encode } from 'ripple-binary-codec' - import type { Client, SubmitRequest, @@ -12,6 +10,7 @@ import { ValidationError, XrplError } from '../errors' import { Signer } from '../models/common' import { TxResponse } from '../models/methods' import { BaseTransaction } from '../models/transactions/common' +import { decode, encode } from '../utils' /** Approximate time for a ledger to close, in milliseconds */ const LEDGER_CLOSE_TIME = 1000 @@ -52,7 +51,7 @@ export async function submitRequest( failHard = false, ): Promise { if (!isSigned(signedTransaction)) { - throw new ValidationError('Transaction must be signed') + throw new ValidationError('Transaction must be signed.') } const signedTxEncoded = @@ -176,7 +175,6 @@ function isSigned(transaction: SubmittableTransaction | string): boolean { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- we know that tx.Signers is an array of Signers const signers = tx.Signers as Signer[] for (const signer of signers) { - // eslint-disable-next-line max-depth -- necessary for checking if signer is signed if ( // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- necessary check signer.Signer.SigningPubKey == null || @@ -284,7 +282,7 @@ export function getLastLedgerSequence( transaction: Transaction | string, ): number | null { const tx = typeof transaction === 'string' ? decode(transaction) : transaction - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- converts LastLedgSeq to number if present. + // eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- converts LastLedgerSeq to number if present. return tx.LastLedgerSequence as number | null } diff --git a/packages/xrpl/src/utils/getBalanceChanges.ts b/packages/xrpl/src/utils/getBalanceChanges.ts index 596017b895..868c208413 100644 --- a/packages/xrpl/src/utils/getBalanceChanges.ts +++ b/packages/xrpl/src/utils/getBalanceChanges.ts @@ -134,7 +134,7 @@ function getTrustlineQuantity(node: NormalizedNode): BalanceChange[] | null { * If an offer is placed to acquire an asset with no existing trustline, * the trustline can be created when the offer is taken. */ - const fields = node.NewFields == null ? node.FinalFields : node.NewFields + const fields = node.NewFields ?? node.FinalFields // the balance is always from low node's perspective const result = { diff --git a/packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts b/packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts index 519900b5de..7212ad8a1a 100644 --- a/packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts +++ b/packages/xrpl/src/utils/hashes/SHAMap/LeafNode.ts @@ -35,6 +35,7 @@ class LeafNode extends Node { * @throws If node is of unknown type. */ public get hash(): string { + // eslint-disable-next-line @typescript-eslint/switch-exhaustiveness-check -- TODO: https://github.com/XRPLF/xrpl.js/issues/3060 switch (this.type) { case NodeType.ACCOUNT_STATE: { const leafPrefix = HashPrefix.LEAF_NODE.toString(HEX) diff --git a/packages/xrpl/src/utils/hashes/hashLedger.ts b/packages/xrpl/src/utils/hashes/hashLedger.ts index e9cb9329b6..8301dca50d 100644 --- a/packages/xrpl/src/utils/hashes/hashLedger.ts +++ b/packages/xrpl/src/utils/hashes/hashLedger.ts @@ -12,6 +12,8 @@ import { APIVersion } from '../../models' import { LedgerEntry } from '../../models/ledger' import { LedgerVersionMap } from '../../models/ledger/Ledger' import { Transaction, TransactionMetadata } from '../../models/transactions' +import { GlobalFlags } from '../../models/transactions/common' +import { hasFlag } from '../../models/utils' import HashPrefix from './HashPrefix' import sha512Half from './sha512Half' @@ -66,7 +68,7 @@ function addLengthPrefix(hex: string): string { * * @param tx - A transaction to hash. Tx may be in binary blob form. Tx must be signed. * @returns A hash of tx. - * @throws ValidationError if the Transaction is unsigned.\ + * @throws ValidationError if the Transaction is unsigned. * @category Utilities */ export function hashSignedTx(tx: Transaction | string): string { @@ -84,7 +86,8 @@ export function hashSignedTx(tx: Transaction | string): string { if ( txObject.TxnSignature === undefined && txObject.Signers === undefined && - txObject.SigningPubKey === undefined + txObject.SigningPubKey === undefined && + !hasFlag(txObject, GlobalFlags.tfInnerBatchTxn, 'tfInnerBatchTxn') ) { throw new ValidationError('The transaction must be signed to hash it.') } diff --git a/packages/xrpl/src/utils/hashes/index.ts b/packages/xrpl/src/utils/hashes/index.ts index 9d32f6bfa1..afd71b4ed9 100644 --- a/packages/xrpl/src/utils/hashes/index.ts +++ b/packages/xrpl/src/utils/hashes/index.ts @@ -185,4 +185,52 @@ export function hashPaymentChannel( ) } +/** + * Compute the hash of a Vault. + * + * @param address - Account of the Vault Owner (Account submitting VaultCreate transaction). + * @param sequence - Sequence number of the Transaction that created the Vault object. + * @returns The computed hash of the Vault object. + * @category Utilities + */ +export function hashVault(address: string, sequence: number): string { + return sha512Half( + ledgerSpaceHex('vault') + + addressToHex(address) + + sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'), + ) +} + +/** + * Compute the hash of a LoanBroker. + * + * @param address - Account of the Lender (Account submitting LoanBrokerSet transaction, i.e. Lender). + * @param sequence - Sequence number of the Transaction that created the LoanBroker object. + * @returns The computed hash of the LoanBroker object. + * @category Utilities + */ +export function hashLoanBroker(address: string, sequence: number): string { + return sha512Half( + ledgerSpaceHex('loanBroker') + + addressToHex(address) + + sequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'), + ) +} + +/** + * Compute the hash of a Loan. + * + * @param loanBrokerId - The LoanBrokerID of the associated LoanBroker object. + * @param loanSequence - The sequence number of the Loan. + * @returns The computed hash of the Loan object. + * @category Utilities + */ +export function hashLoan(loanBrokerId: string, loanSequence: number): string { + return sha512Half( + ledgerSpaceHex('loan') + + loanBrokerId + + loanSequence.toString(HEX).padStart(BYTE_LENGTH * 2, '0'), + ) +} + export { hashLedgerHeader, hashSignedTx, hashLedger, hashStateTree, hashTxTree } diff --git a/packages/xrpl/src/utils/hashes/ledgerSpaces.ts b/packages/xrpl/src/utils/hashes/ledgerSpaces.ts index e2af0c6aae..f14c888ce8 100644 --- a/packages/xrpl/src/utils/hashes/ledgerSpaces.ts +++ b/packages/xrpl/src/utils/hashes/ledgerSpaces.ts @@ -6,7 +6,7 @@ * * Each namespace is just a single character prefix. * - * See [LedgerNameSpace enum](https://github.com/ripple/rippled/blob/master/src/ripple/protocol/LedgerFormats.h#L100). + * See [LedgerNameSpace enum](https://github.com/XRPLF/rippled/blob/master/src/libxrpl/protocol/Indexes.cpp#L66). */ const ledgerSpaces = { account: 'a', @@ -29,6 +29,9 @@ const ledgerSpaces = { paychan: 'x', check: 'C', depositPreauth: 'p', + vault: 'V', + loanBroker: 'l', + loan: 'L', } export default ledgerSpaces diff --git a/packages/xrpl/src/utils/index.ts b/packages/xrpl/src/utils/index.ts index 2304384e90..76ee4417b7 100644 --- a/packages/xrpl/src/utils/index.ts +++ b/packages/xrpl/src/utils/index.ts @@ -20,6 +20,7 @@ import { encodeForMultisigning as rbcEncodeForMultisigning, encodeForSigning as rbcEncodeForSigning, encodeForSigningClaim as rbcEncodeForSigningClaim, + encodeForSigningBatch as rbcEncodeForSigningBatch, } from 'ripple-binary-codec' import { verify as verifyKeypairSignature } from 'ripple-keypairs' @@ -46,6 +47,9 @@ import { hashLedgerHeader, hashEscrow, hashPaymentChannel, + hashVault, + hashLoanBroker, + hashLoan, } from './hashes' import parseNFTokenID from './parseNFTokenID' import { @@ -124,6 +128,16 @@ function encodeForMultiSigning(object: Transaction, signer: string): string { return rbcEncodeForMultisigning(object, signer) } +/** + * Encodes a Batched Transaction for multi-account signing + * + * @param object - Batched Transaction in JSON format. + * @returns A hex string representing the encoded object. + */ +function encodeForSigningBatch(object: Transaction): string { + return rbcEncodeForSigningBatch(object) +} + /** * Decodes a hex string into a transaction | ledger entry * @@ -179,6 +193,9 @@ const hashes = { hashLedgerHeader, hashEscrow, hashPaymentChannel, + hashVault, + hashLoanBroker, + hashLoan, } export { @@ -225,6 +242,7 @@ export { decode, encodeForMultiSigning, encodeForSigning, + encodeForSigningBatch, encodeForSigningClaim, getNFTokenID, parseNFTokenID, diff --git a/packages/xrpl/test/client/autofill.test.ts b/packages/xrpl/test/client/autofill.test.ts index 8c2d9b5ec8..b68b2ddd08 100644 --- a/packages/xrpl/test/client/autofill.test.ts +++ b/packages/xrpl/test/client/autofill.test.ts @@ -6,6 +6,8 @@ import { EscrowFinish, Payment, Transaction, + Batch, + type LoanSet, } from '../../src' import { ValidationError } from '../../src/errors' import rippled from '../fixtures/rippled' @@ -79,7 +81,6 @@ describe('client.autofill', function () { }) it('Validate Payment transaction API v2: Payment Transaction: Specify Only DeliverMax field', async function () { - // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions paymentTx.DeliverMax = paymentTx.Amount // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions delete paymentTx.Amount @@ -89,7 +90,6 @@ describe('client.autofill', function () { }) it('Validate Payment transaction API v2: Payment Transaction: identical DeliverMax and Amount fields', async function () { - // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions paymentTx.DeliverMax = paymentTx.Amount const txResult = await testContext.client.autofill(paymentTx) @@ -99,7 +99,6 @@ describe('client.autofill', function () { }) it('Validate Payment transaction API v2: Payment Transaction: differing DeliverMax and Amount fields', async function () { - // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions paymentTx.DeliverMax = '6789' paymentTx.Amount = '1234' @@ -374,7 +373,7 @@ describe('client.autofill', function () { ) const txResult = await testContext.client.autofill(tx, 4) - assert.strictEqual(txResult.Fee, '459') + assert.strictEqual(txResult.Fee, '447') }) }) @@ -435,4 +434,161 @@ describe('client.autofill', function () { assert.strictEqual(txResult.Sequence, 23) assert.strictEqual(txResult.LastLedgerSequence, 9038234) }) + + it('should autofill Batch transaction with single account', async function () { + const sender = 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf' + const tx: Batch = { + TransactionType: 'Batch', + Account: sender, + RawTransactions: [ + { + RawTransaction: { + TransactionType: 'DepositPreauth', + Flags: 0x40000000, + Account: sender, + Authorize: 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo', + }, + }, + { + RawTransaction: { + TransactionType: 'DepositPreauth', + Flags: 0x40000000, + Account: sender, + Authorize: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', + }, + }, + ], + Fee, + Sequence, + LastLedgerSequence, + } + testContext.mockRippled!.addResponse('account_info', { + status: 'success', + type: 'response', + result: { + account_data: { + Sequence: 23, + }, + }, + }) + const txResult = await testContext.client.autofill(tx) + txResult.RawTransactions.forEach((rawTxOuter, index) => { + const rawTx = rawTxOuter.RawTransaction + assert.strictEqual(rawTx.Sequence, 23 + index + 1) + }) + }) + + it('should autofill Batch transaction with multiple accounts', async function () { + const sender1 = 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf' + const sender2 = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn' + const tx: Transaction = { + TransactionType: 'Batch', + Account: sender1, + RawTransactions: [ + { + RawTransaction: { + TransactionType: 'DepositPreauth', + Flags: 0x40000000, + Account: sender1, + Authorize: 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo', + }, + }, + { + RawTransaction: { + TransactionType: 'DepositPreauth', + Flags: 0x40000000, + Account: sender2, + Authorize: 'rpZc4mVfWUif9CRoHRKKcmhu1nx2xktxBo', + }, + }, + ], + Fee, + Sequence, + LastLedgerSequence, + } + testContext.mockRippled!.addResponse('account_info', { + status: 'success', + type: 'response', + result: { + account_data: { + Sequence: 23, + }, + }, + }) + const txResult = await testContext.client.autofill(tx) + assert.strictEqual(txResult.RawTransactions[0].RawTransaction.Sequence, 24) + assert.strictEqual(txResult.RawTransactions[1].RawTransaction.Sequence, 23) + }) + + it('should autofill LoanSet transaction', async function () { + const tx: LoanSet = { + TransactionType: 'LoanSet', + Account: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + PrincipalRequested: '100000', + } + testContext.mockRippled!.addResponse('account_info', { + status: 'success', + type: 'response', + result: { + account_data: { + Sequence: 23, + }, + signer_lists: [ + { + SignerEntries: [ + { + SignerEntry: { + Account: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + }, + }, + { + SignerEntry: { + Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', + }, + }, + { + SignerEntry: { + Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', + }, + }, + ], + }, + ], + }, + }) + testContext.mockRippled!.addResponse('ledger', { + status: 'success', + type: 'response', + result: { + ledger_index: 9038214, + }, + }) + testContext.mockRippled!.addResponse('server_info', { + status: 'success', + type: 'response', + result: { + info: { + validated_ledger: { + base_fee_xrp: 0.00001, + }, + }, + }, + }) + testContext.mockRippled!.addResponse('ledger_entry', { + status: 'success', + type: 'response', + result: { + node: { + LedgerEntryType: 'LoanBroker', + Account: 'rGWrZyQqhTp9Xu7G5Pkayo7bXjH4k4QYpf', + }, + }, + }) + + const txResult = await testContext.client.autofill(tx) + // base_fee + 3 * base_fee + assert.strictEqual(txResult.Fee, '48') + }) }) diff --git a/packages/xrpl/test/client/getOrderbook.test.ts b/packages/xrpl/test/client/getOrderbook.test.ts index eebd7cc1f2..06c40e960c 100644 --- a/packages/xrpl/test/client/getOrderbook.test.ts +++ b/packages/xrpl/test/client/getOrderbook.test.ts @@ -1,7 +1,7 @@ import BigNumber from 'bignumber.js' import { assert } from 'chai' -import { BookOffersRequest, type Request } from '../../src' +import { BookOffersRequest, BookOffer, type Request } from '../../src' import { ValidationError, XrplError } from '../../src/errors' import { OfferFlags } from '../../src/models/ledger' import requests from '../fixtures/requests' @@ -14,16 +14,18 @@ import { } from '../setupClient' import { assertResultMatch, assertRejects } from '../testUtils' -function checkSortingOfOrders(orders): void { +function checkSortingOfOrders(orders: BookOffer[]): void { let previousRate = '0' for (const order of orders) { assert( - new BigNumber(order.quality).isGreaterThanOrEqualTo(previousRate), + new BigNumber(order.quality as string).isGreaterThanOrEqualTo( + previousRate, + ), `Rates must be sorted from least to greatest: ${ - order.quality as number + order.quality as string } should be >= ${previousRate}`, ) - previousRate = order.quality + previousRate = order.quality as string } } @@ -46,13 +48,17 @@ function normalRippledResponse(request: Request): Record { isBTC((request as BookOffersRequest).taker_gets.currency) && isUSD((request as BookOffersRequest).taker_pays.currency) ) { - return rippled.book_offers.fabric.requestBookOffersBidsResponse(request) + return rippled.book_offers.fabric.requestBookOffersBidsResponse( + request, + ) as Record } if ( isUSD((request as BookOffersRequest).taker_gets.currency) && isBTC((request as BookOffersRequest).taker_pays.currency) ) { - return rippled.book_offers.fabric.requestBookOffersAsksResponse(request) + return rippled.book_offers.fabric.requestBookOffersAsksResponse( + request, + ) as Record } throw new XrplError('unexpected end') } diff --git a/packages/xrpl/test/client/submitAndWait.test.ts b/packages/xrpl/test/client/submitAndWait.test.ts new file mode 100644 index 0000000000..8138c64f2e --- /dev/null +++ b/packages/xrpl/test/client/submitAndWait.test.ts @@ -0,0 +1,44 @@ +import { XrplError } from '../../src' +import { Transaction } from '../../src/models/transactions' +import rippled from '../fixtures/rippled' +import { + setupClient, + teardownClient, + type XrplTestContext, +} from '../setupClient' +import { assertRejects } from '../testUtils' + +describe('client.submitAndWait', function () { + let testContext: XrplTestContext + + beforeEach(async () => { + testContext = await setupClient() + }) + afterEach(async () => teardownClient(testContext)) + + const signedTransaction: Transaction = { + TransactionType: 'Payment', + Sequence: 1, + LastLedgerSequence: 12312, + Amount: '20000000', + Fee: '12', + SigningPubKey: + '030E58CDD076E798C84755590AAF6237CA8FAE821070A59F648B517A30DC6F589D', + TxnSignature: + '3045022100B3D311371EDAB371CD8F2B661A04B800B61D4B132E09B7B0712D3B2F11B1758302203906B44C4A150311D74FF6A35B146763C0B5B40AC30BD815113F058AA17B3E63', + Account: 'rhvh5SrgBL5V8oeV9EpDuVszeJSSCEkbPc', + Destination: 'rQ3PTWGLCbPz8ZCicV5tCX3xuymojTng5r', + } + + it('should exit early with a tem error', async function () { + const signedTx = { ...signedTransaction } + + testContext.mockRippled!.addResponse('submit', rippled.submit.temError) + + await assertRejects( + testContext.client.submitAndWait(signedTx), + XrplError, + 'Transaction failed, temMALFORMED: Malformed transaction.', + ) + }) +}) diff --git a/packages/xrpl/test/client/subscribe.test.ts b/packages/xrpl/test/client/subscribe.test.ts index 2509c62792..0b989b6731 100644 --- a/packages/xrpl/test/client/subscribe.test.ts +++ b/packages/xrpl/test/client/subscribe.test.ts @@ -13,7 +13,7 @@ async function assertDoesNotThrow(promise: Promise): Promise { assert(true) // eslint-disable-next-line @typescript-eslint/no-explicit-any -- should be type error } catch (err: any) { - assert.fail(err.message || err) + assert.fail(err.message ?? err) } } diff --git a/packages/xrpl/test/connection.test.ts b/packages/xrpl/test/connection.test.ts index ef300f6088..c23b55a135 100644 --- a/packages/xrpl/test/connection.test.ts +++ b/packages/xrpl/test/connection.test.ts @@ -81,10 +81,13 @@ async function createServer(): Promise { describe('Connection', function () { let clientContext: XrplTestContext + const CONNECTION_TIMEOUT = 1000 beforeEach(async () => { // console.log(`before: `, expect.getState().currentTestName) - clientContext = await setupClient() + clientContext = await setupClient({ + clientOptions: { connectionTimeout: CONNECTION_TIMEOUT }, + }) }) afterEach(async () => { // console.log(`after: `, expect.getState().currentTestName) @@ -425,7 +428,7 @@ describe('Connection', function () { } catch (error) { // @ts-expect-error -- Error has a message expect(error.message).toEqual( - "Error: connect() timed out after 5000 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 Client constructor.", + `Error: connect() timed out after ${CONNECTION_TIMEOUT} 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 Client constructor.`, ) expect(spy).toHaveBeenCalled() // @ts-expect-error -- Promise throws timeout error after test is done @@ -636,7 +639,7 @@ describe('Connection', function () { reject(new XrplError(`should not throw error, got ${String(error)}`)) }) - setTimeout(resolve, 5000) + setTimeout(resolve, 500) }) const disconnectedPromise = new Promise((resolve) => { @@ -915,7 +918,7 @@ describe('Connection', function () { reject(new XrplError('Should not emit error.')) }) - setTimeout(resolve, 5000) + setTimeout(resolve, 500) }) let disconnectedCount = 0 @@ -979,4 +982,50 @@ describe('Connection', function () { }, TIMEOUT, ) + + it( + 'Delayed websocket error callback on send', + async () => { + const traceMessages: string[] = [] + // @ts-expect-error -- Testing private member + clientContext.client.connection.trace = ( + id: string, + message: string, + ): void => { + traceMessages.push(`${id}: ${message}`) + } + + // @ts-expect-error -- Testing private member + clientContext.client.connection.ws.send = function ( + _ignore, + sendCallback, + ): void { + // server_info request will timeout in 0.5s, but we send an error after 1s + setTimeout(() => { + sendCallback({ message: 'some error' }) + }, 1000) + } + + await clientContext.client.connection + .request({ command: 'server_info' }, 500) + .then(() => { + assert.fail('Should throw TimeoutError') + }) + .catch((error) => { + assert(error instanceof TimeoutError) + assert.include(error.message, 'Timeout for request') + }) + + // wait to ensure that XrplError is not thrown after test is done + await new Promise((resolve) => { + setTimeout(resolve, 1500) + }) + + assert.includeMembers(traceMessages, [ + 'send: send errored after connection was closed: [XrplError(No existing promise with id 1, ' + + '{"type":"reject","error":{"name":"DisconnectedError","data":{"message":"some error"}}})]', + ]) + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/fundWallet.test.ts b/packages/xrpl/test/faucet/fundWallet.test.ts similarity index 93% rename from packages/xrpl/test/integration/fundWallet.test.ts rename to packages/xrpl/test/faucet/fundWallet.test.ts index cb282ed7c9..839af4ee53 100644 --- a/packages/xrpl/test/integration/fundWallet.test.ts +++ b/packages/xrpl/test/faucet/fundWallet.test.ts @@ -90,10 +90,10 @@ describe('fundWallet', function () { await api.connect() const { wallet, balance } = await api.fundWallet(null, { - amount: '1000', + amount: '100', usageContext: 'integration-test', }) - assert.equal(balance, 1000) + assert.equal(balance, 100) assert.notStrictEqual(wallet, undefined) assert(isValidClassicAddress(wallet.classicAddress)) assert(isValidXAddress(wallet.getXAddress())) @@ -121,12 +121,13 @@ describe('fundWallet', function () { throw new Error('Error not thrown') } catch (error) { - await api.disconnect() expect(error).toEqual( new XRPLFaucetError( - 'Request failed: {"body":{"error":"Invalid amount","detail":"Must be an integer"},"contentType":"application/json; charset=utf-8","statusCode":400}', + 'Request failed: {"contentType":"application/json; charset=utf-8","statusCode":400,"body":{"error":"Invalid amount","detail":"Must be an integer"}}', ), ) + } finally { + await api.disconnect() } }) }) diff --git a/packages/xrpl/test/fixtures/rippled/index.ts b/packages/xrpl/test/fixtures/rippled/index.ts index f8b4382d19..e7e0976c9b 100644 --- a/packages/xrpl/test/fixtures/rippled/index.ts +++ b/packages/xrpl/test/fixtures/rippled/index.ts @@ -23,6 +23,7 @@ import peerStatusStream from './streams/peerStatusChange.json' import transactionStream from './streams/transaction.json' import validationStream from './streams/validation.json' import successSubmit from './submit.json' +import temErrorSubmit from './submitTemError.json' import successSubscribe from './subscribe.json' import errorSubscribe from './subscribeError.json' import transaction_entry from './transactionEntry.json' @@ -36,6 +37,7 @@ import unsubscribe from './unsubscribe.json' const submit = { success: successSubmit, + temError: temErrorSubmit, } const ledger = { diff --git a/packages/xrpl/test/fixtures/rippled/submitTemError.json b/packages/xrpl/test/fixtures/rippled/submitTemError.json new file mode 100644 index 0000000000..452d81d017 --- /dev/null +++ b/packages/xrpl/test/fixtures/rippled/submitTemError.json @@ -0,0 +1,28 @@ +{ + "id": 0, + "status": "success", + "type": "response", + "result": { + "success": false, + "engine_result": "temMALFORMED", + "engine_result_code": -299, + "engine_result_message": "Malformed transaction.", + "tx_blob": "1200002280000000240000016861D4838D7EA4C6800000000000000000000000000055534400000000004B4E9C06F24296074F7BC48F92A97916C6DC5EA9684000000000002710732103AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB7446304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F858081144B4E9C06F24296074F7BC48F92A97916C6DC5EA983143E9D4A2B8AA0780F682D136F7A56D6724EF53754", + "tx_json": { + "Account": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "Amount": { + "currency": "USD", + "issuer": "rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn", + "value": "1" + }, + "Destination": "ra5nK24KXen9AHvsdFTKHSANinZseWnPcX", + "Fee": "10000", + "Flags": 2147483648, + "Sequence": 360, + "SigningPubKey": "03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB", + "TransactionType": "Payment", + "TxnSignature": "304402200E5C2DD81FDF0BE9AB2A8D797885ED49E804DBF28E806604D878756410CA98B102203349581946B0DDA06B36B35DBC20EDA27552C1F167BCF5C6ECFF49C6A46F8580", + "hash": "4D5D90890F8D49519E4151938601EF3D0B30B16CD6A519D9C99102C9FA77F7E0" + } + } +} diff --git a/packages/xrpl/test/fixtures/transactions/mptokenMetadataEncodeDecodeData.json b/packages/xrpl/test/fixtures/transactions/mptokenMetadataEncodeDecodeData.json new file mode 100644 index 0000000000..7b0742cfef --- /dev/null +++ b/packages/xrpl/test/fixtures/transactions/mptokenMetadataEncodeDecodeData.json @@ -0,0 +1,298 @@ +[ + { + "testName": "valid long MPTokenMetadata", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "expectedLongForm": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "hex": "7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D" + }, + { + "testName": "valid MPTokenMetadata with all short field names", + "mptMetadata": { + "t": "TBILL", + "n": "T-Bill Yield Token", + "d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "i": "https://example.org/tbill-icon.png", + "ac": "rwa", + "as": "treasury", + "in": "Example Yield Co.", + "us": [ + { + "u": "https://exampleyield.co/tbill", + "c": "website", + "t": "Product Page" + }, + { + "u": "https://exampleyield.co/docs", + "c": "docs", + "t": "Yield Token Docs" + } + ], + "ai": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "expectedLongForm": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "hex": "7B226163223A22727761222C226169223A7B226375736970223A22393132373936525830222C22696E7465726573745F72617465223A22352E303025222C22696E7465726573745F74797065223A227661726961626C65222C226D617475726974795F64617465223A22323034352D30362D3330222C227969656C645F736F75726365223A22552E532E2054726561737572792042696C6C73227D2C226173223A227472656173757279222C2264223A2241207969656C642D62656172696E6720737461626C65636F696E206261636B65642062792073686F72742D7465726D20552E532E205472656173757269657320616E64206D6F6E6579206D61726B657420696E737472756D656E74732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F7462696C6C2D69636F6E2E706E67222C22696E223A224578616D706C65205969656C6420436F2E222C226E223A22542D42696C6C205969656C6420546F6B656E222C2274223A225442494C4C222C227573223A5B7B2263223A2277656273697465222C2274223A2250726F647563742050616765222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F7462696C6C227D2C7B2263223A22646F6373222C2274223A225969656C6420546F6B656E20446F6373222C2275223A2268747470733A2F2F6578616D706C657969656C642E636F2F646F6373227D5D7D" + }, + { + "testName": "valid MPTokenMetadata with mixed short and long field names", + "mptMetadata": { + "ticker": "CRYPTO", + "n": "Crypto Token", + "icon": "https://example.org/crypto-icon.png", + "asset_class": "gaming", + "d": "A gaming token for virtual worlds.", + "issuer_name": "Gaming Studios Inc.", + "as": "equity", + "uris": [ + { + "uri": "https://gamingstudios.com", + "c": "website", + "title": "Main Website" + }, + { + "uri": "https://gamingstudios.com", + "category": "website", + "t": "Main Website" + } + ], + "ai": "Gaming ecosystem token" + }, + "expectedLongForm": { + "ticker": "CRYPTO", + "name": "Crypto Token", + "icon": "https://example.org/crypto-icon.png", + "asset_class": "gaming", + "desc": "A gaming token for virtual worlds.", + "issuer_name": "Gaming Studios Inc.", + "asset_subclass": "equity", + "uris": [ + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + }, + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + } + ], + "additional_info": "Gaming ecosystem token" + }, + "hex": "7B226163223A2267616D696E67222C226169223A2247616D696E672065636F73797374656D20746F6B656E222C226173223A22657175697479222C2264223A22412067616D696E6720746F6B656E20666F72207669727475616C20776F726C64732E222C2269223A2268747470733A2F2F6578616D706C652E6F72672F63727970746F2D69636F6E2E706E67222C22696E223A2247616D696E672053747564696F7320496E632E222C226E223A2243727970746F20546F6B656E222C2274223A2243525950544F222C227573223A5B7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D2C7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D5D7D" + }, + { + "testName": "with extra fields", + "mptMetadata": { + "ticker": "CRYPTO", + "n": "Crypto Token", + "icon": "https://example.org/crypto-icon.png", + "asset_class": "gaming", + "d": "A gaming token for virtual worlds.", + "issuer_name": "Gaming Studios Inc.", + "as": "equity", + "uris": [ + { + "uri": "https://gamingstudios.com", + "c": "website", + "title": "Main Website" + }, + { + "uri": "https://gamingstudios.com", + "category": "website", + "t": "Main Website" + } + ], + "ai": "Gaming ecosystem token", + "extra": { + "extra": "extra" + } + }, + "expectedLongForm": { + "ticker": "CRYPTO", + "name": "Crypto Token", + "icon": "https://example.org/crypto-icon.png", + "asset_class": "gaming", + "desc": "A gaming token for virtual worlds.", + "issuer_name": "Gaming Studios Inc.", + "asset_subclass": "equity", + "uris": [ + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + }, + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + } + ], + "additional_info": "Gaming ecosystem token", + "extra": { + "extra": "extra" + } + }, + "hex": "7B226163223A2267616D696E67222C226169223A2247616D696E672065636F73797374656D20746F6B656E222C226173223A22657175697479222C2264223A22412067616D696E6720746F6B656E20666F72207669727475616C20776F726C64732E222C226578747261223A7B226578747261223A226578747261227D2C2269223A2268747470733A2F2F6578616D706C652E6F72672F63727970746F2D69636F6E2E706E67222C22696E223A2247616D696E672053747564696F7320496E632E222C226E223A2243727970746F20546F6B656E222C2274223A2243525950544F222C227573223A5B7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D2C7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D5D7D" + }, + { + "testName": "with unkown null fields", + "mptMetadata": { + "t": "CRYPTO", + "extra": null + }, + "expectedLongForm": { + "ticker": "CRYPTO", + "extra": null + }, + "hex": "7B226578747261223A6E756C6C2C2274223A2243525950544F227D" + }, + { + "testName": "multiple uris and us", + "mptMetadata": { + "t": "CRYPTO", + "uris": [ + { + "u": "https://gamingstudios.com", + "c": "website", + "t": "Main Website" + } + ], + "us": [ + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + } + ] + }, + "expectedLongForm": { + "ticker": "CRYPTO", + "uris": [ + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + } + ], + "us": [ + { + "uri": "https://gamingstudios.com", + "category": "website", + "title": "Main Website" + } + ] + }, + "hex": "7B2274223A2243525950544F222C2275726973223A5B7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D5D2C227573223A5B7B2263223A2277656273697465222C2274223A224D61696E2057656273697465222C2275223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D5D7D" + }, + { + "testName": "multiple keys in uri", + "mptMetadata": { + "us": [ + { + "uri": "https://gamingstudios.com", + "u": "website", + "category": "Main Website", + "c": "Main Website" + } + ] + }, + "expectedLongForm": { + "uris": [ + { + "uri": "https://gamingstudios.com", + "u": "website", + "category": "Main Website", + "c": "Main Website" + } + ] + }, + "hex": "7B227573223A5B7B2263223A224D61696E2057656273697465222C2263617465676F7279223A224D61696E2057656273697465222C2275223A2277656273697465222C22757269223A2268747470733A2F2F67616D696E6773747564696F732E636F6D227D5D7D" + } +] diff --git a/packages/xrpl/test/fixtures/transactions/mptokenMetadataValidationData.json b/packages/xrpl/test/fixtures/transactions/mptokenMetadataValidationData.json new file mode 100644 index 0000000000..6f3a28934e --- /dev/null +++ b/packages/xrpl/test/fixtures/transactions/mptokenMetadataValidationData.json @@ -0,0 +1,562 @@ +[ + { + "testName": "valid MPTokenMetadata", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [] + }, + { + "testName": "valid MPTokenMetadata with all short field names", + "mptMetadata": { + "t": "TBILL", + "n": "T-Bill Yield Token", + "d": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "i": "https://example.org/tbill-icon.png", + "ac": "rwa", + "as": "treasury", + "in": "Example Yield Co.", + "us": [ + { + "u": "https://exampleyield.co/tbill", + "c": "website", + "t": "Product Page" + }, + { + "u": "https://exampleyield.co/docs", + "c": "docs", + "t": "Yield Token Docs" + } + ], + "ai": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [] + }, + { + "testName": "valid MPTokenMetadata with mixed short and long field names", + "mptMetadata": { + "ticker": "CRYPTO", + "n": "Crypto Token", + "icon": "https://example.org/crypto-icon.png", + "asset_class": "gaming", + "d": "A gaming token for virtual worlds.", + "issuer_name": "Gaming Studios Inc.", + "as": "equity", + "uris": [ + { + "uri": "https://gamingstudios.com", + "c": "website", + "title": "Main Website" + }, + { + "uri": "https://gamingstudios.com", + "category": "website", + "t": "Main Website" + } + ], + "ai": "Gaming ecosystem token" + }, + "validationMessages": [] + }, + { + "testName": "conflicting short and long fields - ticker and t", + "mptMetadata": { + "ticker": "TBILL", + "t": "BILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "ticker/t: both long and compact forms present. expected only one." + ] + }, + { + "testName": "missing ticker", + "mptMetadata": { + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "ticker/t: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended." + ] + }, + { + "testName": "ticker has lowercase letters", + "mptMetadata": { + "ticker": "tbill", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "ticker/t: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended." + ] + }, + { + "testName": "icon not present", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": null, + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "icon/i: should be a non-empty string." + ] + }, + { + "testName": "invalid asset_class", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "invalid", + "asset_subclass": "treasury", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "asset_class/ac: should be one of rwa, memes, wrapped, gaming, defi, other." + ] + }, + { + "testName": "invalid asset_subclass", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "rwa", + "asset_subclass": "junk", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "asset_subclass/as: should be one of stablecoin, commodity, real_estate, private_credit, equity, treasury, other." + ] + }, + { + "testName": "missing asset_subclass for rwa", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "rwa", + "issuer_name": "Issuer" + }, + "validationMessages": [ + "asset_subclass/as: required when asset_class is rwa." + ] + }, + { + "testName": "uris empty", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "defi", + "issuer_name": "Issuer", + "asset_subclass": "stablecoin", + "uris": [] + }, + "validationMessages": [ + "uris/us: should be a non-empty array." + ] + }, + { + "testName": "additional_info is invalid type - array", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "defi", + "issuer_name": "Issuer", + "additional_info": [ + "not", + "valid" + ] + }, + "validationMessages": [ + "additional_info/ai: should be a string or JSON object." + ] + }, + { + "testName": "additional_info is invalid type - number", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Token", + "icon": "https://example.com/icon.png", + "asset_class": "defi", + "issuer_name": "Issuer", + "additional_info": 123 + }, + "validationMessages": [ + "additional_info/ai: should be a string or JSON object." + ] + }, + { + "testName": "multiple warnings", + "mptMetadata": { + "ticker": "TBILLLLLLL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https/example.org/tbill-icon.png", + "asset_class": "rwamemes", + "asset_subclass": "treasurymemes", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "http://notsecure.com", + "type": "website", + "title": "Homepage" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "ticker/t: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.", + "asset_class/ac: should be one of rwa, memes, wrapped, gaming, defi, other.", + "asset_subclass/as: should be one of stablecoin, commodity, real_estate, private_credit, equity, treasury, other.", + "uris/us: should be an array of objects each with uri/u, category/c, and title/t properties." + ] + }, + { + "testName": "null mptMetadata", + "mptMetadata": null, + "validationMessages": [ + "MPTokenMetadata is not properly formatted JSON object as per XLS-89." + ] + }, + { + "testName": "empty mptMetadata", + "mptMetadata": {}, + "validationMessages": [ + "ticker/t: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.", + "name/n: should be a non-empty string.", + "icon/i: should be a non-empty string.", + "asset_class/ac: should be one of rwa, memes, wrapped, gaming, defi, other.", + "issuer_name/in: should be a non-empty string." + ] + }, + { + "testName": "incorrect JSON", + "mptMetadata": "not a json", + "validationMessages": [ + "MPTokenMetadata is not properly formatted as JSON - SyntaxError: Unexpected token 'o', \"not a json\" is not valid JSON" + ] + }, + { + "testName": "more than 9 fields", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "issuer_address": "123 Example Yield Co.", + "issuer_account": "321 Example Yield Co.", + "uris": [ + { + "uri": "http://notsecure.com", + "category": "website", + "title": "Homepage" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "MPTokenMetadata must not contain more than 9 top-level fields (found 11)." + ] + }, + { + "testName": "more than 3 uri fields", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://notsecure.com", + "category": "website", + "title": "Homepage", + "footer": "footer" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "uris/us: should be an array of objects each with uri/u, category/c, and title/t properties." + ] + }, + { + "testName": "invalid uris structure", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": "uris", + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "uris/us: should be a non-empty array." + ] + }, + { + "testName": "invalid uri inner structure", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + 1, + 2 + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "uris/us: should be an array of objects each with uri/u, category/c, and title/t properties.", + "uris/us: should be an array of objects each with uri/u, category/c, and title/t properties." + ] + }, + { + "testName": "conflicting uri long and compact forms", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "u": "website", + "title": "Product Page" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "uris/us: should not have both uri and u fields.", + "uris/us: should be an array of objects each with uri/u, category/c, and title/t properties." + ] + }, + { + "testName": "exceeds 1024 bytes", + "mptMetadata": { + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "desc": "A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co.", + "uris": [ + { + "uri": "https://exampleyield.co/tbill", + "category": "website", + "title": "Product Page" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + }, + { + "uri": "https://exampleyield.co/docs", + "category": "docs", + "title": "Yield Token Docs" + } + ], + "additional_info": { + "interest_rate": "5.00%", + "interest_type": "variable", + "yield_source": "U.S. Treasury Bills", + "maturity_date": "2045-06-30", + "cusip": "912796RX0" + } + }, + "validationMessages": [ + "MPTokenMetadata must be max 1024 bytes." + ] + }, + { + "testName": "null values", + "mptMetadata": { + "ticker": null, + "name": null, + "desc": null, + "icon": null, + "asset_class": null, + "asset_subclass": null, + "issuer_name": null, + "uris": null, + "additional_info": null + }, + "validationMessages": [ + "ticker/t: should have uppercase letters (A-Z) and digits (0-9) only. Max 6 characters recommended.", + "name/n: should be a non-empty string.", + "icon/i: should be a non-empty string.", + "asset_class/ac: should be one of rwa, memes, wrapped, gaming, defi, other.", + "issuer_name/in: should be a non-empty string.", + "desc/d: should be a non-empty string.", + "asset_subclass/as: should be one of stablecoin, commodity, real_estate, private_credit, equity, treasury, other.", + "uris/us: should be a non-empty array.", + "additional_info/ai: should be a string or JSON object." + ] + } +] diff --git a/packages/xrpl/test/integration/README.md b/packages/xrpl/test/integration/README.md index e4bdec3e33..cece8ff40c 100644 --- a/packages/xrpl/test/integration/README.md +++ b/packages/xrpl/test/integration/README.md @@ -1,7 +1,7 @@ To run integration tests: 1. Run rippled in standalone node, either in a docker container (preferred) or by installing rippled. * Go to the top-level of the `xrpl.js` repo, just above the `packages` folder. - * With docker, run `docker run -p 6006:6006 --interactive -t --volume $PWD/.ci-config:/opt/ripple/etc/ --platform linux/amd64 rippleci/rippled:2.2.0-b3 /opt/ripple/bin/rippled -a --conf /opt/ripple/etc/rippled.cfg` + * With docker, run `docker run -p 6006:6006 --rm -it --name rippled_standalone --volume $PWD/.ci-config:/etc/opt/ripple/ --entrypoint bash rippleci/rippled:2.3.0-rc1 -c 'rippled -a'` * Or [download and build rippled](https://xrpl.org/install-rippled.html) and run `./rippled -a --start` * If you'd like to use the latest rippled amendments, you should modify your `rippled.cfg` file to enable amendments in the `[amendments]` section. You can view `.ci-config/rippled.cfg` in the top level folder as an example of this. 2. Run `npm run test:integration` or `npm run test:browser` diff --git a/packages/xrpl/test/integration/requests/accountTx.test.ts b/packages/xrpl/test/integration/requests/accountTx.test.ts index a0af38444b..4d578d8603 100644 --- a/packages/xrpl/test/integration/requests/accountTx.test.ts +++ b/packages/xrpl/test/integration/requests/accountTx.test.ts @@ -100,7 +100,6 @@ describe('account_tx', function () { responseTx.Flags, responseTx.TransactionType, responseTx.Account, - // @ts-expect-error -- DeliverMax is a valid field on Payment response responseTx.DeliverMax, responseTx.Destination, ], diff --git a/packages/xrpl/test/integration/requests/ammInfo.test.ts b/packages/xrpl/test/integration/requests/ammInfo.test.ts index 6f580812a1..eb354a2d0b 100644 --- a/packages/xrpl/test/integration/requests/ammInfo.test.ts +++ b/packages/xrpl/test/integration/requests/ammInfo.test.ts @@ -37,7 +37,6 @@ describe('AMMInfo', function () { assert.equal(amm.amount, '1250') assert.deepEqual(amm.amount2, { currency: asset2.currency, - // @ts-expect-error: asset2.issuer should be defined at this point issuer: asset2.issuer, value: '250', }) diff --git a/packages/xrpl/test/integration/requests/fee.test.ts b/packages/xrpl/test/integration/requests/fee.test.ts index 3ba557e8bf..40936f514e 100644 --- a/packages/xrpl/test/integration/requests/fee.test.ts +++ b/packages/xrpl/test/integration/requests/fee.test.ts @@ -1,7 +1,9 @@ +import BigNumber from 'bignumber.js' import { assert } from 'chai' import omit from 'lodash/omit' -import { FeeRequest } from '../../../src' +import { FeeRequest, xrpToDrops } from '../../../src' +import getFeeXrp from '../../../src/sugar/getFeeXrp' import serverUrl from '../serverUrl' import { setupClient, @@ -26,6 +28,8 @@ describe('fee', function () { const request: FeeRequest = { command: 'fee', } + const referenceFee = xrpToDrops(await getFeeXrp(testContext.client, 1)) + const MEDIAN_FEE_MULTIPLIER = 500 const response = await testContext.client.request(request) const expected = { id: 0, @@ -33,10 +37,12 @@ describe('fee', function () { current_ledger_size: '0', current_queue_size: '0', drops: { - base_fee: '10', - median_fee: '5000', - minimum_fee: '10', - open_ledger_fee: '10', + base_fee: referenceFee, + median_fee: new BigNumber(referenceFee) + .times(MEDIAN_FEE_MULTIPLIER) + .toString(), + minimum_fee: referenceFee, + open_ledger_fee: referenceFee, }, expected_ledger_size: '1000', ledger_current_index: 2925, diff --git a/packages/xrpl/test/integration/requests/getAggregatePrice.test.ts b/packages/xrpl/test/integration/requests/getAggregatePrice.test.ts index 8bfee665a0..e7b374ab79 100644 --- a/packages/xrpl/test/integration/requests/getAggregatePrice.test.ts +++ b/packages/xrpl/test/integration/requests/getAggregatePrice.test.ts @@ -24,11 +24,18 @@ describe('get_aggregate_price', function () { it( 'base', async () => { + const closeTime: string = ( + await testContext.client.request({ + command: 'ledger', + ledger_index: 'validated', + }) + ).result.ledger.close_time_iso + const tx: OracleSet = { TransactionType: 'OracleSet', Account: testContext.wallet.classicAddress, OracleDocumentID: 1234, - LastUpdateTime: Math.floor(Date.now() / 1000), + LastUpdateTime: Math.floor(new Date(closeTime).getTime() / 1000) + 20, PriceDataSeries: [ { PriceData: { diff --git a/packages/xrpl/test/integration/requests/ledgerCurrent.test.ts b/packages/xrpl/test/integration/requests/ledgerCurrent.test.ts index a4c4adcd36..e1a22234c7 100644 --- a/packages/xrpl/test/integration/requests/ledgerCurrent.test.ts +++ b/packages/xrpl/test/integration/requests/ledgerCurrent.test.ts @@ -26,9 +26,8 @@ describe('ledger_current', function () { command: 'ledger_current', } - const ledgerCurrentResponse = await testContext.client.request( - ledgerCurrentRequest, - ) + const ledgerCurrentResponse = + await testContext.client.request(ledgerCurrentRequest) const expectedResponse: LedgerCurrentResponse = { id: ledgerCurrentResponse.id, diff --git a/packages/xrpl/test/integration/requests/ledgerData.test.ts b/packages/xrpl/test/integration/requests/ledgerData.test.ts index 9cb91c2584..151420ba47 100644 --- a/packages/xrpl/test/integration/requests/ledgerData.test.ts +++ b/packages/xrpl/test/integration/requests/ledgerData.test.ts @@ -29,9 +29,8 @@ describe('ledger_data', function () { binary: true, } - const ledgerDataResponse = await testContext.client.request( - ledgerDataRequest, - ) + const ledgerDataResponse = + await testContext.client.request(ledgerDataRequest) const expected = { id: 0, diff --git a/packages/xrpl/test/integration/requests/ledgerEntry.test.ts b/packages/xrpl/test/integration/requests/ledgerEntry.test.ts index 8eb34fcd62..5890d72a83 100644 --- a/packages/xrpl/test/integration/requests/ledgerEntry.test.ts +++ b/packages/xrpl/test/integration/requests/ledgerEntry.test.ts @@ -35,9 +35,8 @@ describe('ledger_entry', function () { index: ledgerEntryIndex, } - const ledgerEntryResponse = await testContext.client.request( - ledgerEntryRequest, - ) + const ledgerEntryResponse = + await testContext.client.request(ledgerEntryRequest) const expectedResponse: LedgerEntryResponse = { api_version: 2, diff --git a/packages/xrpl/test/integration/requests/serverInfo.test.ts b/packages/xrpl/test/integration/requests/serverInfo.test.ts index 465301abd6..d0011d6a12 100644 --- a/packages/xrpl/test/integration/requests/serverInfo.test.ts +++ b/packages/xrpl/test/integration/requests/serverInfo.test.ts @@ -53,6 +53,7 @@ describe('server_info (rippled)', function () { threads: 1, }, load_factor: 1, + network_id: 0, peer_disconnects: '0', peer_disconnects_resources: '0', peers: 0, @@ -125,6 +126,7 @@ describe('server_info (rippled)', function () { 'build_version', 'node_size', 'initial_sync_duration_us', + 'git', ] assert.deepEqual( omit(response.result.info, removeKeys), @@ -137,18 +139,18 @@ describe('server_info (rippled)', function () { assert.equal(typeof obj.job_type, 'string') } // state_accounting - Object.keys(response.result.info.state_accounting).forEach(function ( - key, - ) { - assert.equal( - typeof response.result.info.state_accounting[key].duration_us, - 'string', - ) - assert.equal( - typeof response.result.info.state_accounting[key].transitions, - 'string', - ) - }) + Object.keys(response.result.info.state_accounting).forEach( + function (key) { + assert.equal( + typeof response.result.info.state_accounting[key].duration_us, + 'string', + ) + assert.equal( + typeof response.result.info.state_accounting[key].transitions, + 'string', + ) + }, + ) // validated_ledger assert.equal(typeof response.result.info.validated_ledger?.hash, 'string') diff --git a/packages/xrpl/test/integration/requests/serverState.test.ts b/packages/xrpl/test/integration/requests/serverState.test.ts index a5ceeee31e..436f04b6d1 100644 --- a/packages/xrpl/test/integration/requests/serverState.test.ts +++ b/packages/xrpl/test/integration/requests/serverState.test.ts @@ -60,6 +60,7 @@ describe('server_state', function () { load_factor_fee_queue: 256, load_factor_fee_reference: 256, load_factor_server: 256, + network_id: 0, peer_disconnects: '0', peer_disconnects_resources: '0', peers: 0, @@ -116,6 +117,7 @@ describe('server_state', function () { 'node_size', 'initial_sync_duration_us', 'ports', + 'git', ] assert.deepEqual( omit(response.result.state, removeKeys), @@ -128,18 +130,18 @@ describe('server_state', function () { assert.equal(typeof obj.job_type, 'string') } // state_accounting - Object.keys(response.result.state.state_accounting).forEach(function ( - key, - ) { - assert.equal( - typeof response.result.state.state_accounting[key].duration_us, - 'string', - ) - assert.equal( - typeof response.result.state.state_accounting[key].transitions, - 'string', - ) - }) + Object.keys(response.result.state.state_accounting).forEach( + function (key) { + assert.equal( + typeof response.result.state.state_accounting[key].duration_us, + 'string', + ) + assert.equal( + typeof response.result.state.state_accounting[key].transitions, + 'string', + ) + }, + ) // validated_ledger assert.equal( diff --git a/packages/xrpl/test/integration/requests/simulate.test.ts b/packages/xrpl/test/integration/requests/simulate.test.ts new file mode 100644 index 0000000000..d6ea013996 --- /dev/null +++ b/packages/xrpl/test/integration/requests/simulate.test.ts @@ -0,0 +1,85 @@ +import { assert } from 'chai' + +import { AccountSet, SimulateRequest } from '../../../src' +import { SimulateBinaryRequest } from '../../../src/models/methods/simulate' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('simulate', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'json', + async () => { + const simulateRequest: SimulateRequest = { + command: 'simulate', + tx_json: { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + NFTokenMinter: testContext.wallet.address, + }, + } + const simulateResponse = await testContext.client.request(simulateRequest) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta, 'object') + assert.typeOf(simulateResponse.result.tx_json, 'object') + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) + + it( + 'binary', + async () => { + const simulateRequest: SimulateBinaryRequest = { + command: 'simulate', + tx_json: { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + }, + binary: true, + } + const simulateResponse = await testContext.client.request(simulateRequest) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta_blob, 'string') + assert.typeOf(simulateResponse.result.tx_blob, 'string') + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) + + it( + 'sugar', + async () => { + const tx: AccountSet = { + TransactionType: 'AccountSet', + Account: testContext.wallet.address, + NFTokenMinter: testContext.wallet.address, + } + const simulateResponse = await testContext.client.simulate(tx) + + assert.equal(simulateResponse.type, 'response') + assert.typeOf(simulateResponse.result.meta, 'object') + assert.typeOf(simulateResponse.result.tx_json, 'object') + assert.equal(simulateResponse.result.engine_result, 'tesSUCCESS') + assert.isFalse(simulateResponse.result.applied) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/requests/subscribe.test.ts b/packages/xrpl/test/integration/requests/subscribe.test.ts index 8cc53aeef1..93880ab0de 100644 --- a/packages/xrpl/test/integration/requests/subscribe.test.ts +++ b/packages/xrpl/test/integration/requests/subscribe.test.ts @@ -164,6 +164,7 @@ describe('subscribe', function () { reserve_base: ledgerResponse.reserve_base, reserve_inc: ledgerResponse.reserve_inc, validated_ledgers: ledgerResponse.validated_ledgers, + network_id: ledgerResponse.network_id, } if (ledgerResponse.fee_ref) { expectedResult.fee_ref = ledgerResponse.fee_ref diff --git a/packages/xrpl/test/integration/requests/vaultInfo.test.ts b/packages/xrpl/test/integration/requests/vaultInfo.test.ts new file mode 100644 index 0000000000..e061e5d4bc --- /dev/null +++ b/packages/xrpl/test/integration/requests/vaultInfo.test.ts @@ -0,0 +1,211 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + VaultCreate, + VaultInfoResponse, + VaultWithdrawalPolicy, + AccountSet, + AccountSetAsfFlags, +} from '../../../src' +import { Vault } from '../../../src/models/ledger' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +describe('Single Asset Vault', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + // eslint-disable-next-line max-statements -- comprehensive vault_info test requires multiple assertions + it('base', async function () { + const tx: VaultCreate = { + TransactionType: 'VaultCreate', + Account: testContext.wallet.classicAddress, + Asset: { currency: 'XRP' }, + WithdrawalPolicy: VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + Data: stringToHex('vault metadata'), + MPTokenMetadata: stringToHex('share metadata'), + AssetsMaximum: '1000000000', + } + + await testTransaction(testContext.client, tx, testContext.wallet) + + // Fetch the vault ledger entry to get its ID + const result = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'vault', + }) + assert.equal( + result.result.account_objects.length, + 1, + 'Should find one vault', + ) + const vaultObj = result.result.account_objects[0] as Vault + const vaultId = vaultObj.index + + // Fetch vault_info using vault_id + const vaultInfoRes: VaultInfoResponse = await testContext.client.request({ + command: 'vault_info', + vault_id: vaultId, + }) + const { vault } = vaultInfoRes.result + + assert.isDefined( + vault, + 'vault_info (vault_id) response should include a vault', + ) + assert.isDefined(vault.Account) + assert.equal( + vault.Owner, + testContext.wallet.classicAddress, + 'Vault Owner should match', + ) + assert.equal(vault.LedgerEntryType, 'Vault') + assert.deepEqual( + vault.Asset, + { currency: 'XRP' }, + 'Vault Asset should be XRP', + ) + assert.equal( + vault.WithdrawalPolicy, + VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + ) + assert.equal( + vault.AssetsTotal ?? '0', + '0', + 'New Vault should have zero total assets', + ) + assert.equal( + vault.AssetsAvailable ?? '0', + '0', + 'New Vault should have zero available assets', + ) + assert.equal( + vault.ShareMPTID, + vault.shares.mpt_issuance_id, + 'ShareMPTID should match mpt_issuance_id', + ) + assert.isDefined(vault.shares, 'Shares subobject should be present') + assert.equal( + vault.shares.Issuer, + vault.Account, + 'shares.Issuer should match vault account', + ) + assert.equal( + vault.shares.LedgerEntryType, + 'MPTokenIssuance', + 'shares entry type should be MPTokenIssuance', + ) + assert.equal( + vault.shares.OutstandingAmount, + '0', + 'New Vault should have zero shares outstanding', + ) + assert.equal( + vault.shares.mpt_issuance_id, + vault.ShareMPTID, + 'mpt_issuance_id should match ShareMPTID', + ) + + assert.equal( + vault.AssetsMaximum, + '1000000000', + 'AssetsMaximum should match the value from VaultCreate', + ) + + assert.equal( + vault.Data, + stringToHex('vault metadata'), + 'Data should match the value from VaultCreate', + ) + + // Fetch vault_info using owner and seq + const vaultInfoRes2: VaultInfoResponse = await testContext.client.request({ + command: 'vault_info', + owner: vaultObj.Owner, + seq: vaultObj.Sequence, + }) + assert.isDefined( + vaultInfoRes2.result.vault, + 'vault_info (owner, seq) response should include a vault', + ) + assert.equal(vaultInfoRes2.result.vault.index, vault.index) + }) + + it('IOU asset with Scale', async function () { + // Set DefaultRipple flag on the issuer account for IOU support + const accountSetTx: AccountSet = { + TransactionType: 'AccountSet', + Account: testContext.wallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfDefaultRipple, + } + await testTransaction(testContext.client, accountSetTx, testContext.wallet) + + const tx: VaultCreate = { + TransactionType: 'VaultCreate', + Account: testContext.wallet.classicAddress, + Asset: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + }, + WithdrawalPolicy: VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + Scale: 10, + Data: stringToHex('iou vault metadata'), + } + + await testTransaction(testContext.client, tx, testContext.wallet) + + // Fetch the vault ledger entry to get its ID + const result = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'vault', + }) + const vaultObj = result.result.account_objects.find((obj) => { + const vault = obj as Vault + const asset = vault.Asset as unknown as Record + return ( + asset.currency === 'USD' && + asset.issuer === testContext.wallet.classicAddress + ) + }) as Vault + assert.isDefined(vaultObj, 'Should find IOU vault') + + // Fetch vault_info using vault_id + const vaultInfoRes: VaultInfoResponse = await testContext.client.request({ + command: 'vault_info', + vault_id: vaultObj.index, + }) + const { vault } = vaultInfoRes.result + + assert.isDefined(vault, 'vault_info response should include a vault') + assert.deepEqual( + vault.Asset, + { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + }, + 'Vault Asset should be USD', + ) + assert.equal( + vault.Scale, + 10, + 'Scale should match the value from VaultCreate', + ) + assert.equal( + vault.Data, + stringToHex('iou vault metadata'), + 'Data should match the value from VaultCreate', + ) + }) +}) diff --git a/packages/xrpl/test/integration/serverUrl.ts b/packages/xrpl/test/integration/serverUrl.ts index 98adbc3dc3..b9231f52b9 100644 --- a/packages/xrpl/test/integration/serverUrl.ts +++ b/packages/xrpl/test/integration/serverUrl.ts @@ -1,4 +1,4 @@ -/* eslint-disable node/no-process-env -- needed to find standalone connection */ +/* eslint-disable n/no-process-env -- needed to find standalone connection */ const HOST = process.env.HOST ?? '0.0.0.0' const PORT = process.env.PORT ?? '6006' const serverUrl = `ws://${HOST}:${PORT}` diff --git a/packages/xrpl/test/integration/setup.ts b/packages/xrpl/test/integration/setup.ts index 40eb53fbef..ce4af53677 100644 --- a/packages/xrpl/test/integration/setup.ts +++ b/packages/xrpl/test/integration/setup.ts @@ -4,11 +4,12 @@ import { AMMDeposit, AMMDepositFlags, Client, - Currency, + IssuedCurrency, SignerListSet, Wallet, XChainBridge, XChainCreateBridge, + XRP, } from '../../src' import serverUrl from './serverUrl' @@ -24,8 +25,8 @@ export interface TestAMMPool { issuerWallet: Wallet lpWallet: Wallet testWallet: Wallet - asset: Currency - asset2: Currency + asset: XRP + asset2: IssuedCurrency } interface TestBridge { diff --git a/packages/xrpl/test/integration/submitAndWait.test.ts b/packages/xrpl/test/integration/submitAndWait.test.ts index bae32f7d0c..2006eca3d9 100644 --- a/packages/xrpl/test/integration/submitAndWait.test.ts +++ b/packages/xrpl/test/integration/submitAndWait.test.ts @@ -59,7 +59,6 @@ describe('client.submitAndWait', function () { retries = 0 break } catch (err) { - // eslint-disable-next-line max-depth -- Necessary if (!(err instanceof Error)) { throw err } @@ -69,8 +68,8 @@ describe('client.submitAndWait', function () { const errorCode = matches?.groups?.errorCode // Retry if another transaction finished before this one - // eslint-disable-next-line max-depth -- Testing - if (['tefPAST_SEQ', 'tefMAX_LEDGER'].includes(errorCode || '')) { + + if (['tefPAST_SEQ', 'tefMAX_LEDGER'].includes(errorCode ?? '')) { // eslint-disable-next-line no-await-in-loop, no-promise-executor-return -- We are waiting on retries await new Promise((resolve) => setTimeout(resolve, 1000)) } else { diff --git a/packages/xrpl/test/integration/transactions/ammBid.test.ts b/packages/xrpl/test/integration/transactions/ammBid.test.ts index 2cbf40ba48..8284140405 100644 --- a/packages/xrpl/test/integration/transactions/ammBid.test.ts +++ b/packages/xrpl/test/integration/transactions/ammBid.test.ts @@ -56,11 +56,9 @@ describe('AMMBid', function () { assert.ok(auction_slot) - // @ts-expect-error: auction_slot should be defined at this point const afterPriceValue = parseFloat(auction_slot.price.value) - // @ts-expect-error: preAuctionSlot should be defined at this point const beforePriceValue = parseFloat(preAuctionSlot.price.value) - const diffPriceValue = 0.00268319257224121 + const diffPriceValue = 0.002683192572241211 const expectedPriceValue = beforePriceValue + diffPriceValue const afterLPTokenValue = parseFloat(lp_token.value) @@ -115,9 +113,7 @@ describe('AMMBid', function () { assert.ok(auction_slot) - // @ts-expect-error: auction_slot should be defined at this point const afterPriceValue = parseFloat(auction_slot.price.value) - // @ts-expect-error: auction_slot should be defined at this point const beforePriceValue = parseFloat(preAuctionSlot.price.value) const diffPriceValue = 4.997316807427759 const expectedPriceValue = beforePriceValue + diffPriceValue @@ -129,7 +125,6 @@ describe('AMMBid', function () { assert.equal(afterPriceValue, expectedPriceValue) assert.equal(afterLPTokenValue, expectedLPTokenValue) - // @ts-expect-error: auction_slot should be defined at this point assert.deepEqual(auction_slot.auth_accounts, [ { account: issuerWallet.classicAddress, diff --git a/packages/xrpl/test/integration/transactions/ammClawback.test.ts b/packages/xrpl/test/integration/transactions/ammClawback.test.ts new file mode 100644 index 0000000000..211c4c6f83 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/ammClawback.test.ts @@ -0,0 +1,57 @@ +import { AMMClawback, AMMDeposit, AMMDepositFlags, XRP } from 'xrpl' + +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { createAMMPool, testTransaction } from '../utils' + +describe('AMMClawback', function () { + let testContext: XrplIntegrationTestContext + + beforeAll(async () => { + testContext = await setupClient(serverUrl) + }) + afterAll(async () => teardownClient(testContext)) + + it('base', async function () { + const ammPool = await createAMMPool(testContext.client, true) + const { issuerWallet } = ammPool + const holderWallet = ammPool.lpWallet + + const asset = { + currency: 'USD', + issuer: issuerWallet.classicAddress, + } + const asset2 = { + currency: 'XRP', + } as XRP + + const ammDepositTx: AMMDeposit = { + TransactionType: 'AMMDeposit', + Account: holderWallet.classicAddress, + Asset: asset, + Asset2: asset2, + Amount: { + currency: 'USD', + issuer: issuerWallet.address, + value: '10', + }, + Flags: AMMDepositFlags.tfSingleAsset, + } + + await testTransaction(testContext.client, ammDepositTx, holderWallet) + + const ammClawback: AMMClawback = { + TransactionType: 'AMMClawback', + Account: issuerWallet.address, + Holder: holderWallet.address, + Asset: asset, + Asset2: asset2, + } + + await testTransaction(testContext.client, ammClawback, issuerWallet) + }) +}) diff --git a/packages/xrpl/test/integration/transactions/ammCreate.test.ts b/packages/xrpl/test/integration/transactions/ammCreate.test.ts index f063101120..c53add91eb 100644 --- a/packages/xrpl/test/integration/transactions/ammCreate.test.ts +++ b/packages/xrpl/test/integration/transactions/ammCreate.test.ts @@ -36,7 +36,6 @@ describe('AMMCreate', function () { assert.equal(amm.amount, '250') assert.deepEqual(amm.amount2, { currency: asset2.currency, - // @ts-expect-error: asset2.issuer should be defined at this point issuer: asset2.issuer, value: '250', }) diff --git a/packages/xrpl/test/integration/transactions/ammDeposit.test.ts b/packages/xrpl/test/integration/transactions/ammDeposit.test.ts index aa05c535d4..4fdcd72051 100644 --- a/packages/xrpl/test/integration/transactions/ammDeposit.test.ts +++ b/packages/xrpl/test/integration/transactions/ammDeposit.test.ts @@ -102,7 +102,6 @@ describe('AMMDeposit', function () { Amount: '100', Amount2: { currency: asset2.currency, - // @ts-expect-error: asset2.issuer should be defined at this point issuer: asset2.issuer, value: '100', }, diff --git a/packages/xrpl/test/integration/transactions/ammVote.test.ts b/packages/xrpl/test/integration/transactions/ammVote.test.ts index 861e95a170..c8b8c18157 100644 --- a/packages/xrpl/test/integration/transactions/ammVote.test.ts +++ b/packages/xrpl/test/integration/transactions/ammVote.test.ts @@ -42,7 +42,6 @@ describe('AMMVote', function () { assert.ok(preAuctionSlot) assert.ok(preVoteSlots) - // @ts-expect-error: preAuctionSlot should be defined at this point const { discounted_fee: preDiscountedFee } = preAuctionSlot const ammVoteTx: AMMVote = { @@ -66,7 +65,6 @@ describe('AMMVote', function () { assert.ok(auction_slot) - // @ts-expect-error: auction_slot should be defined at this point const { discounted_fee } = auction_slot assert.ok(vote_slots) @@ -79,12 +77,11 @@ describe('AMMVote', function () { const afterDiscountedFee = discounted_fee const beforeDiscountedFee = preDiscountedFee const diffDiscountedFee = 7 - // eslint-disable-next-line @typescript-eslint/restrict-plus-operands -- this is valid + const expectedDiscountedFee = beforeDiscountedFee + diffDiscountedFee assert.equal(afterTradingFee, expectedTradingFee) assert.equal(afterDiscountedFee, expectedDiscountedFee) - // @ts-expect-error: preVoteSlots should be defined at this point assert.equal(vote_slots.length - preVoteSlots.length, 1) }) }) diff --git a/packages/xrpl/test/integration/transactions/ammWithdraw.test.ts b/packages/xrpl/test/integration/transactions/ammWithdraw.test.ts index 7748513202..b244fa0e6d 100644 --- a/packages/xrpl/test/integration/transactions/ammWithdraw.test.ts +++ b/packages/xrpl/test/integration/transactions/ammWithdraw.test.ts @@ -110,7 +110,6 @@ describe('AMMWithdraw', function () { Amount: '50', Amount2: { currency: asset2.currency, - // @ts-expect-error: asset2.issuer should be defined at this point issuer: asset2.issuer, value: '50', }, diff --git a/packages/xrpl/test/integration/transactions/batch.test.ts b/packages/xrpl/test/integration/transactions/batch.test.ts new file mode 100644 index 0000000000..d0535f5e39 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/batch.test.ts @@ -0,0 +1,100 @@ +import { Batch, Payment, Wallet } from '../../../src' +import { BatchFlags } from '../../../src/models/transactions/batch' +import { signMultiBatch } from '../../../src/Wallet/batchSigner' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { + generateFundedWallet, + testTransaction, + verifySubmittedTransaction, +} from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('Batch', function () { + let testContext: XrplIntegrationTestContext + let destination: Wallet + let wallet2: Wallet + + async function testBatchTransaction( + batch: Batch, + wallet: Wallet, + retry?: { + count: number + delayMs: number + }, + ): Promise { + await testTransaction(testContext.client, batch, wallet, retry) + const promises: Array> = [] + for (const rawTx of batch.RawTransactions) { + promises.push( + verifySubmittedTransaction(testContext.client, rawTx.RawTransaction), + ) + } + await Promise.all(promises) + } + + beforeAll(async () => { + testContext = await setupClient(serverUrl) + wallet2 = await generateFundedWallet(testContext.client) + destination = await generateFundedWallet(testContext.client) + }, TIMEOUT) + afterAll(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + const payment: Payment = { + TransactionType: 'Payment', + Flags: 0x40000000, + Account: testContext.wallet.classicAddress, + Destination: destination.classicAddress, + Amount: '10000000', + } + const tx: Batch = { + TransactionType: 'Batch', + Account: testContext.wallet.classicAddress, + Flags: BatchFlags.tfAllOrNothing, + RawTransactions: [payment, { ...payment }, { ...payment }].map( + (rawTx) => ({ + RawTransaction: rawTx, + }), + ), + } + const autofilled = await testContext.client.autofill(tx) + await testBatchTransaction(autofilled, testContext.wallet) + }, + TIMEOUT, + ) + + it( + 'batch multisign', + async () => { + const payment: Payment = { + TransactionType: 'Payment', + Flags: 0x40000000, + Account: testContext.wallet.classicAddress, + Destination: destination.classicAddress, + Amount: '10000000', + } + const payment2: Payment = { ...payment, Account: wallet2.classicAddress } + const tx: Batch = { + TransactionType: 'Batch', + Account: testContext.wallet.classicAddress, + Flags: BatchFlags.tfAllOrNothing, + RawTransactions: [payment, payment2].map((rawTx) => ({ + RawTransaction: rawTx, + })), + } + const autofilled = await testContext.client.autofill(tx, 1) + signMultiBatch(wallet2, autofilled) + await testBatchTransaction(autofilled, testContext.wallet) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/clawback.test.ts b/packages/xrpl/test/integration/transactions/clawback.test.ts index e0b3aedc43..58935a2782 100644 --- a/packages/xrpl/test/integration/transactions/clawback.test.ts +++ b/packages/xrpl/test/integration/transactions/clawback.test.ts @@ -6,6 +6,11 @@ import { TrustSet, Payment, Clawback, + MPTokenIssuanceCreate, + MPTokenIssuanceCreateFlags, + MPTokenAuthorize, + TransactionMetadata, + LedgerEntryResponse, } from '../../../src' import serverUrl from '../serverUrl' import { @@ -112,4 +117,92 @@ describe('Clawback', function () { }, TIMEOUT, ) + + it( + 'MPToken', + async () => { + const wallet2 = await generateFundedWallet(testContext.client) + const createTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + Flags: MPTokenIssuanceCreateFlags.tfMPTCanClawback, + } + + const mptCreateRes = await testTransaction( + testContext.client, + createTx, + testContext.wallet, + ) + const txHash = mptCreateRes.result.tx_json.hash + + const txResponse = await testContext.client.request({ + command: 'tx', + transaction: txHash, + }) + + const meta = txResponse.result + .meta as TransactionMetadata + + const mptID = meta.mpt_issuance_id + + const holderAuthTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: wallet2.classicAddress, + MPTokenIssuanceID: mptID!, + } + + await testTransaction(testContext.client, holderAuthTx, wallet2) + + const paymentTx: Payment = { + TransactionType: 'Payment', + Account: testContext.wallet.classicAddress, + Amount: { mpt_issuance_id: mptID!, value: '9223372036854775807' }, + Destination: wallet2.classicAddress, + } + + await testTransaction(testContext.client, paymentTx, testContext.wallet) + + let ledgerEntryResponse: LedgerEntryResponse = + await testContext.client.request({ + command: 'ledger_entry', + mptoken: { + mpt_issuance_id: mptID!, + account: wallet2.classicAddress, + }, + }) + + assert.equal( + // @ts-expect-error: Known issue with unknown object type + ledgerEntryResponse.result.node.MPTAmount, + '9223372036854775807', + ) + + // actual test - clawback + const clawTx: Clawback = { + TransactionType: 'Clawback', + Account: testContext.wallet.classicAddress, + Amount: { + mpt_issuance_id: mptID!, + value: '500', + }, + Holder: wallet2.classicAddress, + } + await testTransaction(testContext.client, clawTx, testContext.wallet) + + ledgerEntryResponse = await testContext.client.request({ + command: 'ledger_entry', + mptoken: { + mpt_issuance_id: mptID!, + account: wallet2.classicAddress, + }, + }) + + assert.equal( + // @ts-expect-error: Known issue with unknown object type + ledgerEntryResponse.result.node.MPTAmount, + '9223372036854775307', + ) + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/transactions/credentialAccept.test.ts b/packages/xrpl/test/integration/transactions/credentialAccept.test.ts new file mode 100644 index 0000000000..7e8967c57d --- /dev/null +++ b/packages/xrpl/test/integration/transactions/credentialAccept.test.ts @@ -0,0 +1,62 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + AccountObjectsResponse, + CredentialAccept, + CredentialCreate, +} from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +describe('CredentialAccept', function () { + // testContext wallet acts as issuer in this test + let testContext: XrplIntegrationTestContext + + beforeAll(async () => { + testContext = await setupClient(serverUrl) + }) + afterAll(async () => teardownClient(testContext)) + + it('base', async function () { + const subjectWallet = await generateFundedWallet(testContext.client) + + const credentialCreateTx: CredentialCreate = { + TransactionType: 'CredentialCreate', + Account: testContext.wallet.classicAddress, + Subject: subjectWallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialCreateTx, + testContext.wallet, + ) + + const credentialAcceptTx: CredentialAccept = { + TransactionType: 'CredentialAccept', + Account: subjectWallet.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction(testContext.client, credentialAcceptTx, subjectWallet) + + // Credential is now an object in recipient's wallet after accept + const accountObjectsResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: subjectWallet.classicAddress, + type: 'credential', + }) + const { account_objects } = accountObjectsResponse.result + + assert.equal(account_objects.length, 1) + }) +}) diff --git a/packages/xrpl/test/integration/transactions/credentialCreate.test.ts b/packages/xrpl/test/integration/transactions/credentialCreate.test.ts new file mode 100644 index 0000000000..1d26595853 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/credentialCreate.test.ts @@ -0,0 +1,49 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { AccountObjectsResponse, CredentialCreate } from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +describe('CredentialCreate', function () { + // testContext wallet acts as issuer in this test + let testContext: XrplIntegrationTestContext + + beforeAll(async () => { + testContext = await setupClient(serverUrl) + }) + afterAll(async () => teardownClient(testContext)) + + it('base', async function () { + const subjectWallet = await generateFundedWallet(testContext.client) + + const credentialCreateTx: CredentialCreate = { + TransactionType: 'CredentialCreate', + Account: testContext.wallet.classicAddress, + Subject: subjectWallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialCreateTx, + testContext.wallet, + ) + + // Unaccepted credential still belongs to issuer's account + const accountObjectsResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'credential', + }) + const { account_objects } = accountObjectsResponse.result + + assert.equal(account_objects.length, 1) + }) +}) diff --git a/packages/xrpl/test/integration/transactions/credentialDelete.test.ts b/packages/xrpl/test/integration/transactions/credentialDelete.test.ts new file mode 100644 index 0000000000..246397c66f --- /dev/null +++ b/packages/xrpl/test/integration/transactions/credentialDelete.test.ts @@ -0,0 +1,105 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + AccountObjectsResponse, + CredentialAccept, + CredentialCreate, +} from '../../../src' +import { CredentialDelete } from '../../../src/models/transactions/CredentialDelete' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +describe('CredentialDelete', function () { + // testContext wallet acts as issuer in this test + let testContext: XrplIntegrationTestContext + + beforeAll(async () => { + testContext = await setupClient(serverUrl) + }) + afterAll(async () => teardownClient(testContext)) + + it('base', async function () { + const subjectWallet = await generateFundedWallet(testContext.client) + + const credentialCreateTx: CredentialCreate = { + TransactionType: 'CredentialCreate', + Account: testContext.wallet.classicAddress, + Subject: subjectWallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialCreateTx, + testContext.wallet, + ) + + const createAccountObjectsResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'credential', + }) + + assert.equal(createAccountObjectsResponse.result.account_objects.length, 1) + + const credentialAcceptTx: CredentialAccept = { + TransactionType: 'CredentialAccept', + Account: subjectWallet.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction(testContext.client, credentialAcceptTx, subjectWallet) + + // Credential is now an object in recipient's wallet after accept + const acceptAccountObjectsResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: subjectWallet.classicAddress, + type: 'credential', + }) + + assert.equal(acceptAccountObjectsResponse.result.account_objects.length, 1) + + const credentialDeleteTx: CredentialDelete = { + TransactionType: 'CredentialDelete', + Account: subjectWallet.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction(testContext.client, credentialDeleteTx, subjectWallet) + + // Check both issuer and subject no longer have a credential tied to the account + const SubjectAccountObjectsDeleteResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: subjectWallet.classicAddress, + type: 'credential', + }) + + assert.equal( + SubjectAccountObjectsDeleteResponse.result.account_objects.length, + 0, + ) + + const IssuerAccountObjectsDeleteResponse: AccountObjectsResponse = + await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'credential', + }) + + assert.equal( + IssuerAccountObjectsDeleteResponse.result.account_objects.length, + 0, + ) + }) +}) diff --git a/packages/xrpl/test/integration/transactions/delegateSet.test.ts b/packages/xrpl/test/integration/transactions/delegateSet.test.ts new file mode 100644 index 0000000000..961627b2f1 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/delegateSet.test.ts @@ -0,0 +1,102 @@ +import { assert } from 'chai' + +import { + AccountSet, + DelegateSet, + LedgerEntryResponse, + Payment, + Wallet, + xrpToDrops, +} from '../../../src' +import { Delegate } from '../../../src/models/ledger' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('DelegateSet', function () { + let testContext: XrplIntegrationTestContext + let alice: Wallet + let bob: Wallet + let carol: Wallet + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + alice = testContext.wallet + bob = await generateFundedWallet(testContext.client) + carol = await generateFundedWallet(testContext.client) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + // Authorize Bob account to execute Payment transactions and + // modify the domain of an account behalf of Alice's account. + const delegateTx: DelegateSet = { + TransactionType: 'DelegateSet', + Account: alice.address, + Authorize: bob.address, + Permissions: [ + { Permission: { PermissionValue: 'Payment' } }, + { Permission: { PermissionValue: 'AccountDomainSet' } }, + ], + } + await testTransaction(testContext.client, delegateTx, alice) + + // Verify Delegate ledger entry + const ledgerEntryRes: LedgerEntryResponse = + await testContext.client.request({ + command: 'ledger_entry', + delegate: { + account: alice.address, + authorize: bob.address, + }, + }) + const delegateLedgerEntry = ledgerEntryRes.result.node as Delegate + assert.equal(delegateLedgerEntry.LedgerEntryType, 'Delegate') + assert.equal(delegateLedgerEntry.Account, alice.address) + assert.equal(delegateLedgerEntry.Authorize, bob.address) + assert.equal(delegateLedgerEntry.Permissions.length, 2) + + // Use Bob's account to execute a transaction on behalf of Alice + const paymentTx: Payment = { + TransactionType: 'Payment', + Account: alice.address, + Amount: xrpToDrops(1), + Destination: carol.address, + Delegate: bob.address, + } + const response = await testTransaction(testContext.client, paymentTx, bob) + + // Validate that the transaction was signed by Bob + assert.equal(response.result.tx_json.Account, alice.address) + assert.equal(response.result.tx_json.Delegate, bob.address) + assert.equal(response.result.tx_json.SigningPubKey, bob.publicKey) + + // Use Bob's account to execute a transaction on behalf of Alice + const accountSetTx: AccountSet = { + TransactionType: 'AccountSet', + Account: alice.address, + Delegate: bob.address, + EmailHash: '10000000002000000000300000000012', + } + + // Expect transaction to fail with terNO_DELEGATE_PERMISSION error + await testTransaction( + testContext.client, + accountSetTx, + bob, + undefined, + 'terNO_DELEGATE_PERMISSION', + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/depositPreauth.test.ts b/packages/xrpl/test/integration/transactions/depositPreauth.test.ts index 4a8c8dcc3e..13960ffe01 100644 --- a/packages/xrpl/test/integration/transactions/depositPreauth.test.ts +++ b/packages/xrpl/test/integration/transactions/depositPreauth.test.ts @@ -1,11 +1,19 @@ -import { DepositPreauth, Wallet } from '../../../src' +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { + AuthorizeCredential, + CredentialAccept, + CredentialCreate, + DepositPreauth, + Wallet, +} from '../../../src' import serverUrl from '../serverUrl' import { setupClient, teardownClient, type XrplIntegrationTestContext, } from '../setup' -import { fundAccount, testTransaction } from '../utils' +import { fundAccount, generateFundedWallet, testTransaction } from '../utils' // how long before each test case times out const TIMEOUT = 20000 @@ -32,4 +40,119 @@ describe('DepositPreauth', function () { }, TIMEOUT, ) + + it( + 'AuthorizeCredential base case', + async () => { + const subjectWallet = await generateFundedWallet(testContext.client) + + const credentialCreateTx: CredentialCreate = { + TransactionType: 'CredentialCreate', + Account: testContext.wallet.classicAddress, + Subject: subjectWallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialCreateTx, + testContext.wallet, + ) + + const credentialAcceptTx: CredentialAccept = { + TransactionType: 'CredentialAccept', + Account: subjectWallet.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialAcceptTx, + subjectWallet, + ) + + const authorizeCredentialObj: AuthorizeCredential = { + Credential: { + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + }, + } + + const wallet2 = Wallet.generate() + await fundAccount(testContext.client, wallet2) + const tx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: testContext.wallet.classicAddress, + AuthorizeCredentials: [authorizeCredentialObj], + } + await testTransaction(testContext.client, tx, testContext.wallet) + }, + TIMEOUT, + ) + + it( + 'UnauthorizeCredential base case', + async () => { + const subjectWallet = await generateFundedWallet(testContext.client) + + const credentialCreateTx: CredentialCreate = { + TransactionType: 'CredentialCreate', + Account: testContext.wallet.classicAddress, + Subject: subjectWallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialCreateTx, + testContext.wallet, + ) + + const credentialAcceptTx: CredentialAccept = { + TransactionType: 'CredentialAccept', + Account: subjectWallet.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + } + + await testTransaction( + testContext.client, + credentialAcceptTx, + subjectWallet, + ) + + const authorizeCredentialObj: AuthorizeCredential = { + Credential: { + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Test Credential Type'), + }, + } + + const wallet2 = Wallet.generate() + await fundAccount(testContext.client, wallet2) + const authCredDepositPreauthTx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: testContext.wallet.classicAddress, + AuthorizeCredentials: [authorizeCredentialObj], + } + await testTransaction( + testContext.client, + authCredDepositPreauthTx, + testContext.wallet, + ) + + const UnauthCredDepositPreauthTx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: testContext.wallet.classicAddress, + UnauthorizeCredentials: [authorizeCredentialObj], + } + await testTransaction( + testContext.client, + UnauthCredDepositPreauthTx, + testContext.wallet, + ) + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/transactions/escrowCreate.test.ts b/packages/xrpl/test/integration/transactions/escrowCreate.test.ts index 43a593f8f2..36e1337d0a 100644 --- a/packages/xrpl/test/integration/transactions/escrowCreate.test.ts +++ b/packages/xrpl/test/integration/transactions/escrowCreate.test.ts @@ -1,13 +1,26 @@ import { assert } from 'chai' -import { EscrowCreate } from '../../../src' +import { + AccountSet, + AccountSetAsfFlags, + TrustSet, + Payment, + EscrowFinish, + EscrowCreate, + EscrowCancel, +} from '../../../src' import serverUrl from '../serverUrl' import { setupClient, teardownClient, type XrplIntegrationTestContext, } from '../setup' -import { generateFundedWallet, testTransaction } from '../utils' +import { + generateFundedWallet, + testTransaction, + sendLedgerAccept, + waitForAndForceProgressLedgerTime, +} from '../utils' // how long before each test case times out const TIMEOUT = 20000 @@ -56,4 +69,282 @@ describe('EscrowCreate', function () { }, TIMEOUT, ) + + it( + 'escrow with IOU -- validate EscrowCreate and EscrowFinish transactions', + async () => { + const escrowSourceWallet = await generateFundedWallet(testContext.client) + const escrowDestinationWallet = await generateFundedWallet( + testContext.client, + ) + + const issuerWallet = testContext.wallet + + // Step-1: configure issuerWallet (testContext.wallet.classicAddress) to allow their IOUs to be used as escrow amounts + const setupAccountSetTx: AccountSet = { + TransactionType: 'AccountSet', + Account: issuerWallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfAllowTrustLineLocking, + } + await testTransaction(testContext.client, setupAccountSetTx, issuerWallet) + + // Step-2: setup appropriate trust lines to transfer the IOU. + // This is needed for both escrowSourceWallet and escrowDestinationWallet to hold the USD IOU token. + const setupTrustSetTx1: TrustSet = { + TransactionType: 'TrustSet', + Account: escrowSourceWallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction( + testContext.client, + setupTrustSetTx1, + escrowSourceWallet, + ) + + const setupTrustSetTx2: TrustSet = { + TransactionType: 'TrustSet', + Account: escrowDestinationWallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction( + testContext.client, + setupTrustSetTx2, + escrowDestinationWallet, + ) + + // Step-3: transfer the USD IOU token to from Issuer to escrowSourceWallet + const setupPaymentTx: Payment = { + TransactionType: 'Payment', + Account: issuerWallet.classicAddress, + Destination: escrowSourceWallet.classicAddress, + Amount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction(testContext.client, setupPaymentTx, issuerWallet) + + // Step-4: create the escrow + // get the most recent close_time from the standalone container for finish after. + const CLOSE_TIME: number = ( + await testContext.client.request({ + command: 'ledger', + ledger_index: 'validated', + }) + ).result.ledger.close_time + + const tx: EscrowCreate = { + Account: escrowSourceWallet.classicAddress, + TransactionType: 'EscrowCreate', + Amount: { + currency: 'USD', + value: '111', + issuer: issuerWallet.classicAddress, + }, + Destination: escrowDestinationWallet.classicAddress, + FinishAfter: CLOSE_TIME + 2, + CancelAfter: CLOSE_TIME + 4, + } + + const txnResponse = await testTransaction( + testContext.client, + tx, + escrowSourceWallet, + ) + + // Step-5: fetch the escrow object + const wallet1Objects = await testContext.client.request({ + command: 'account_objects', + account: escrowSourceWallet.classicAddress, + type: 'escrow', + }) + assert.equal(wallet1Objects.result.account_objects.length, 1) + + // Step-6: check that the escrow object has the correct particulars + const escrowObject = wallet1Objects.result.account_objects[0] + assert.equal(escrowObject.LedgerEntryType, 'Escrow') + assert.equal(escrowObject.PreviousTxnID, txnResponse.result.tx_json.hash) + + // Step-7: Execute the EscrowFinish transaction + const escrowFinishTx: EscrowFinish = { + TransactionType: 'EscrowFinish', + Account: escrowSourceWallet.classicAddress, + Owner: escrowSourceWallet.classicAddress, + OfferSequence: Number(txnResponse.result.tx_json.Sequence), + } + + // Step 7.1: wait for the escrow to be ready to finish + await waitForAndForceProgressLedgerTime( + testContext.client, + CLOSE_TIME + 2, + ) + + // Step 7.2: rippled uses the close time of the previous ledger + await sendLedgerAccept(testContext.client) + + // Step 7.3: execute the EscrowFinish transaction + await testTransaction( + testContext.client, + escrowFinishTx, + escrowSourceWallet, + ) + + // Step 8: check that the escrow object has been removed + const escrowObjectsSourceWallet = await testContext.client.request({ + command: 'account_objects', + account: escrowSourceWallet.classicAddress, + type: 'escrow', + }) + assert.equal(escrowObjectsSourceWallet.result.account_objects.length, 0) + }, + TIMEOUT, + ) + + it( + 'escrow with IOU -- validate EscrowCancel transaction (Identical to previous test, except for Step 7-8)', + async () => { + const escrowSourceWallet = await generateFundedWallet(testContext.client) + const escrowDestinationWallet = await generateFundedWallet( + testContext.client, + ) + + const issuerWallet = testContext.wallet + + // Step-1: configure issuerWallet (testContext.wallet.classicAddress) to allow their IOUs to be used as escrow amounts + const setupAccountSetTx: AccountSet = { + TransactionType: 'AccountSet', + Account: issuerWallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfAllowTrustLineLocking, + } + await testTransaction(testContext.client, setupAccountSetTx, issuerWallet) + + // Step-2: setup appropriate trust lines to transfer the IOU. + // This is needed for both escrowSourceWallet and escrowDestinationWallet to hold the USD IOU token. + const setupTrustSetTx1: TrustSet = { + TransactionType: 'TrustSet', + Account: escrowSourceWallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction( + testContext.client, + setupTrustSetTx1, + escrowSourceWallet, + ) + + const setupTrustSetTx2: TrustSet = { + TransactionType: 'TrustSet', + Account: escrowDestinationWallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction( + testContext.client, + setupTrustSetTx2, + escrowDestinationWallet, + ) + + // Step-3: transfer the USD IOU token to from Issuer to escrowSourceWallet + const setupPaymentTx: Payment = { + TransactionType: 'Payment', + Account: issuerWallet.classicAddress, + Destination: escrowSourceWallet.classicAddress, + Amount: { + currency: 'USD', + issuer: issuerWallet.classicAddress, + value: '1000', + }, + } + await testTransaction(testContext.client, setupPaymentTx, issuerWallet) + + // Step-4: create the escrow + // get the most recent close_time from the standalone container for finish after. + const CLOSE_TIME: number = ( + await testContext.client.request({ + command: 'ledger', + ledger_index: 'validated', + }) + ).result.ledger.close_time + + const tx: EscrowCreate = { + Account: escrowSourceWallet.classicAddress, + TransactionType: 'EscrowCreate', + Amount: { + currency: 'USD', + value: '100', + issuer: issuerWallet.classicAddress, + }, + Destination: escrowDestinationWallet.classicAddress, + FinishAfter: CLOSE_TIME + 2, + CancelAfter: CLOSE_TIME + 4, + } + + const txnResponse = await testTransaction( + testContext.client, + tx, + escrowSourceWallet, + ) + + // Step-5: fetch the escrow object + const wallet1Objects = await testContext.client.request({ + command: 'account_objects', + account: escrowSourceWallet.classicAddress, + type: 'escrow', + }) + assert.equal(wallet1Objects.result.account_objects.length, 1) + + // Step-6: check that the escrow object has the correct particulars + const escrowObject = wallet1Objects.result.account_objects[0] + assert.equal(escrowObject.LedgerEntryType, 'Escrow') + assert.equal(escrowObject.PreviousTxnID, txnResponse.result.tx_json.hash) + + // Step-7: Execute the EscrowCancel transaction + const escrowCancelTx: EscrowCancel = { + TransactionType: 'EscrowCancel', + Account: escrowSourceWallet.classicAddress, + Owner: escrowSourceWallet.classicAddress, + OfferSequence: Number(txnResponse.result.tx_json.Sequence), + } + + // Step 7.1: wait for the escrow to be "cancellable" + await waitForAndForceProgressLedgerTime( + testContext.client, + CLOSE_TIME + 4, + ) + + // Step 7.2: rippled uses the close time of the previous ledger + await sendLedgerAccept(testContext.client) + + // Step 7.3: execute the EscrowCancel transaction + await testTransaction( + testContext.client, + escrowCancelTx, + escrowSourceWallet, + ) + + // Step 8: check that the escrow object has been removed + const escrowObjectsSourceWallet = await testContext.client.request({ + command: 'account_objects', + account: escrowSourceWallet.classicAddress, + type: 'escrow', + }) + assert.equal(escrowObjectsSourceWallet.result.account_objects.length, 0) + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/transactions/lendingProtocol.test.ts b/packages/xrpl/test/integration/transactions/lendingProtocol.test.ts new file mode 100644 index 0000000000..d8040d4fec --- /dev/null +++ b/packages/xrpl/test/integration/transactions/lendingProtocol.test.ts @@ -0,0 +1,720 @@ +/* eslint-disable max-statements -- required to test entire flow */ + +import { assert } from 'chai' + +import { + type MPTokenAuthorize, + type MPTokenIssuanceCreate, + type Payment, + type TxResponse, + type VaultCreate, + type VaultDeposit, + type LoanBrokerSet, + type LoanBrokerDelete, + type LoanBrokerCoverDeposit, + type LoanBrokerCoverWithdraw, + type LoanBrokerCoverClawback, + Wallet, + type LoanSet, + type LoanDelete, + type LoanManage, + type LoanPay, + verifySignature, + type SignerListSet, + LoanManageFlags, + type MPTAmount, + signLoanSetByCounterparty, + combineLoanSetCounterpartySigners, +} from '../../../src' +import { + LoanFlags, + type Loan, + type LoanBroker, +} from '../../../src/models/ledger' +import { type MPTokenIssuanceCreateMetadata } from '../../../src/models/transactions/MPTokenIssuanceCreate' +import { hashLoan, hashLoanBroker, hashVault } from '../../../src/utils/hashes' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +interface VaultObject { + mptIssuanceId: string + vaultObjectId: string +} + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('Lending Protocol IT', () => { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }, TIMEOUT) + + afterEach(async () => { + await teardownClient(testContext) + }, TIMEOUT) + + it( + 'Lending protocol integration test with single signing', + async () => { + const vaultOwnerWallet = await generateFundedWallet(testContext.client) + const depositorWallet = await generateFundedWallet(testContext.client) + const borrowerWallet = await generateFundedWallet(testContext.client) + + // The Vault Owner and Loan Broker must be on the same account. + const loanBrokerWallet = vaultOwnerWallet + + // ========== STEP 1: Create Vault ========== + // The vault is the pool of funds that the loan broker will lend from + const vaultCreateTx: VaultCreate = { + TransactionType: 'VaultCreate', + Asset: { + currency: 'XRP', + }, + Account: vaultOwnerWallet.address, + AssetsMaximum: '1e17', + } + + const vaultCreateResp = await testTransaction( + testContext.client, + vaultCreateTx, + vaultOwnerWallet, + ) + + const vaultObjectId = hashVault( + vaultCreateResp.result.tx_json.Account, + vaultCreateResp.result.tx_json.Sequence as number, + ) + + // ========== STEP 2: Deposit Funds into Vault ========== + // The depositor funds the vault with 10 XRP that will be lent to borrowers + const vaultDepositTx: VaultDeposit = { + TransactionType: 'VaultDeposit', + Account: depositorWallet.address, + VaultID: vaultObjectId, + Amount: '10000000', + } + + await testTransaction(testContext.client, vaultDepositTx, depositorWallet) + + // ========== STEP 3: Create Loan Broker ========== + // The loan broker manages the lending protocol and sets debt limits + const loanBrokerSetTx: LoanBrokerSet = { + TransactionType: 'LoanBrokerSet', + Account: loanBrokerWallet.address, + VaultID: vaultObjectId, + DebtMaximum: '25000000', + ManagementFeeRate: 10000, + } + + const loanBrokerTxResp = await testTransaction( + testContext.client, + loanBrokerSetTx, + loanBrokerWallet, + ) + + const loanBrokerObjectId = hashLoanBroker( + loanBrokerTxResp.result.tx_json.Account, + loanBrokerTxResp.result.tx_json.Sequence as number, + ) + + // Verify LoanBroker object was created + const loanBrokerObjects = await testContext.client.request({ + command: 'account_objects', + account: loanBrokerWallet.address, + type: 'loan_broker', + }) + + const loanBrokerObject: LoanBroker = + loanBrokerObjects.result.account_objects.find( + (obj) => obj.index === loanBrokerObjectId, + ) as LoanBroker + + assert.equal(loanBrokerObject.index, loanBrokerObjectId) + assert.equal(loanBrokerObject.DebtMaximum, loanBrokerSetTx.DebtMaximum) + + // ========== STEP 4: Create Loan ========== + // The loan broker initiates a loan for the borrower + // This requires dual signatures: broker and borrower + let loanSetTx: LoanSet = { + TransactionType: 'LoanSet', + Account: loanBrokerWallet.address, + LoanBrokerID: loanBrokerObjectId, + PrincipalRequested: '5000000', + Counterparty: borrowerWallet.address, + PaymentTotal: 3, + Data: '010203', + } + loanSetTx = await testContext.client.autofill(loanSetTx) + const { tx_blob } = loanBrokerWallet.sign(loanSetTx) + + assert.isTrue(verifySignature(tx_blob)) + + const { tx: borrowerSignedTx } = signLoanSetByCounterparty( + borrowerWallet, + tx_blob, + ) + + await testTransaction( + testContext.client, + borrowerSignedTx, + loanBrokerWallet, + ) + + const loanObjectId = hashLoan( + loanBrokerObjectId, + loanBrokerObject.LoanSequence, + ) + const loanObjects = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + + const loanObject: Loan = loanObjects.result.account_objects.find( + (obj) => obj.index === loanObjectId, + ) as Loan + + // Verify Loan object was created with correct fields + assert.equal(loanObject.index, loanObjectId) + assert.equal( + loanObject.PrincipalOutstanding, + loanSetTx.PrincipalRequested, + ) + assert.equal(loanObject.LoanBrokerID, loanBrokerObject.index) + assert.equal(loanObject.Borrower, borrowerWallet.address) + assert.equal(loanObject.PaymentRemaining, loanSetTx.PaymentTotal) + + // ========== STEP 5: Make Loan Payment ========== + // Borrower makes a periodic payment on the loan + const paymentAmount = '2500000' + const loanPayTx: LoanPay = { + TransactionType: 'LoanPay', + Account: borrowerWallet.address, + LoanID: loanObjectId, + Amount: paymentAmount, + } + + await testTransaction(testContext.client, loanPayTx, borrowerWallet) + + // Verify loan state after payment + const updatedLoanObjects = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + + const paidLoan: Loan = updatedLoanObjects.result.account_objects.find( + (obj) => obj.index === loanObjectId, + ) as Loan + + // After payment, the principal outstanding should be reduced + assert.isTrue( + parseInt(paidLoan.PrincipalOutstanding, 10) < + parseInt(loanObject.PrincipalOutstanding, 10), + 'Principal should decrease after payment', + ) + // Payment remaining should be decremented + assert.equal( + paidLoan.PaymentRemaining, + loanObject.PaymentRemaining - 1, + 'Payment remaining should decrease by 1', + ) + + // assert principal outstanding is not zero + assert.isTrue( + parseInt(paidLoan.PrincipalOutstanding, 10) > 0, + 'Principal should not be zero', + ) + + assert.equal( + paidLoan.PrincipalOutstanding, + paidLoan.TotalValueOutstanding, + 'Principal should equal TotalValueOutstanding', + ) + + // ManagementFeeOutstanding = (TotalValueOutstanding - PrincipalOutstanding) * ManagementFeeRate + // In this case, ManagementFeeOutstanding should be zero, thus unspecified + assert.isUndefined(paidLoan.ManagementFeeOutstanding) + + // ========== STEP 5B: Make Second Payment with tfLoanFullPayment Flag ========== + // Borrower makes the final payment with tfLoanFullPayment flag + // This flag indicates the borrower is making a full early repayment + const finalPaymentAmount = paidLoan.PrincipalOutstanding + const fullPaymentTx: LoanPay = { + TransactionType: 'LoanPay', + Account: borrowerWallet.address, + LoanID: loanObjectId, + Amount: finalPaymentAmount, + Flags: { + tfLoanFullPayment: true, + }, + } + + await testTransaction(testContext.client, fullPaymentTx, borrowerWallet) + + // Verify loan state after full payment + const finalLoanObjects = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + + const finalLoan: Loan = finalLoanObjects.result.account_objects.find( + (obj) => obj.index === loanObjectId, + ) as Loan + + assert.isUndefined(finalLoan.PrincipalOutstanding) + assert.isUndefined(finalLoan.PaymentRemaining) + }, + TIMEOUT, + ) + + it( + 'Lending protocol integration test with multi-signing', + async () => { + const vaultOwnerWallet = await generateFundedWallet(testContext.client) + const mptIssuerWallet = await generateFundedWallet(testContext.client) + const depositorWallet = await generateFundedWallet(testContext.client) + const borrowerWallet = await generateFundedWallet(testContext.client) + const signer1 = await generateFundedWallet(testContext.client) + const signer2 = await generateFundedWallet(testContext.client) + + // Setup Multi-Signing + await setupMultiSigning(testContext, borrowerWallet, signer1, signer2) + + // The Vault Owner and Loan Broker must be on the same account. + const loanBrokerWallet = vaultOwnerWallet + + // Create a vault + const vaultObj: VaultObject = await createSingleAssetVault( + testContext, + vaultOwnerWallet, + mptIssuerWallet, + ) + + // Depositor Authorizes to hold MPT + const mptAuthorizeTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + MPTokenIssuanceID: vaultObj.mptIssuanceId, + Account: depositorWallet.address, + } + await testTransaction(testContext.client, mptAuthorizeTx, depositorWallet) + + // Transfer some MPTs from the issuer to depositor + const paymentTx: Payment = { + TransactionType: 'Payment', + Account: mptIssuerWallet.address, + Destination: depositorWallet.address, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '500000', + }, + } + await testTransaction(testContext.client, paymentTx, mptIssuerWallet) + + // Loan Broker Authorizes to hold MPT + const loanBrokerMptAuthorizeTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + MPTokenIssuanceID: vaultObj.mptIssuanceId, + Account: loanBrokerWallet.address, + } + await testTransaction( + testContext.client, + loanBrokerMptAuthorizeTx, + loanBrokerWallet, + ) + + // Transfer some MPTs from the issuer to Loan Broker + const loanBrokerPaymentTx: Payment = { + TransactionType: 'Payment', + Account: mptIssuerWallet.address, + Destination: loanBrokerWallet.address, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '500000', + }, + } + await testTransaction( + testContext.client, + loanBrokerPaymentTx, + mptIssuerWallet, + ) + + // Depositor deposits 200000 MPTs into the vault + const depositAmount = '200000' + const vaultDepositTx: VaultDeposit = { + TransactionType: 'VaultDeposit', + Account: depositorWallet.address, + VaultID: vaultObj.vaultObjectId, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: depositAmount, + }, + } + await testTransaction(testContext.client, vaultDepositTx, depositorWallet) + + // Create LoanBroker ledger object to capture attributes of the Lending Protocol + const loanBrokerSetTx: LoanBrokerSet = { + TransactionType: 'LoanBrokerSet', + Account: loanBrokerWallet.address, + VaultID: vaultObj.vaultObjectId, + DebtMaximum: '100000', + } + + const loanBrokerTxResp = await testTransaction( + testContext.client, + loanBrokerSetTx, + loanBrokerWallet, + ) + + const loanBrokerObjectId = hashLoanBroker( + loanBrokerTxResp.result.tx_json.Account, + loanBrokerTxResp.result.tx_json.Sequence as number, + ) + + const loanBrokerObjects = await testContext.client.request({ + command: 'account_objects', + account: loanBrokerWallet.address, + type: 'loan_broker', + }) + + const loanBrokerObject: LoanBroker = + loanBrokerObjects.result.account_objects.find( + (obj) => obj.index === loanBrokerObjectId, + ) as LoanBroker + + // Assert LoanBroker object exists in objects tracked by Lender. + assert.equal(loanBrokerObject.index, loanBrokerObjectId) + assert.equal(loanBrokerObject.DebtMaximum, loanBrokerSetTx.DebtMaximum) + + // Create a Loan object + let loanSetTx: LoanSet = { + TransactionType: 'LoanSet', + Account: loanBrokerWallet.address, + LoanBrokerID: loanBrokerObjectId, + PrincipalRequested: '100000', + InterestRate: 0, + Counterparty: borrowerWallet.address, + PaymentTotal: 1, + } + + // Fails as loan borrower has not signed yet. + await testTransaction( + testContext.client, + loanSetTx, + loanBrokerWallet, + undefined, + 'temBAD_SIGNER', + ) + + // Loan broker signs the transaction and sends it to the borrower + loanSetTx = await testContext.client.autofill(loanSetTx) + const { tx_blob } = loanBrokerWallet.sign(loanSetTx) + + // Borrower first verifies the TxnSignature for to make sure that it came from the loan broker. + assert.isTrue(verifySignature(tx_blob)) + + // Borrower signs the transaction and fills in the CounterpartySignature to confirm the + // loan terms. + const { tx: signer1SignedTx } = signLoanSetByCounterparty( + signer1, + tx_blob, + { multisign: true }, + ) + + const { tx: signer2SignedTx } = signLoanSetByCounterparty( + signer2, + tx_blob, + { multisign: true }, + ) + + const { tx: combinedSignedTx } = combineLoanSetCounterpartySigners([ + signer1SignedTx, + signer2SignedTx, + ]) + + await testTransaction( + testContext.client, + combinedSignedTx, + borrowerWallet, + ) + + // Assert Loan object exists in objects tracked by Borrower. + const loanObjectId = hashLoan( + loanBrokerObjectId, + loanBrokerObject.LoanSequence, + ) + const loanObjects = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + + let loanObject: Loan = loanObjects.result.account_objects.find( + (obj) => obj.index === loanObjectId, + ) as Loan + + assert.equal(loanObject.index, loanObjectId) + assert.equal( + loanObject.PrincipalOutstanding, + loanSetTx.PrincipalRequested, + ) + assert.equal(loanObject.LoanBrokerID, loanBrokerObject.index) + assert.equal(loanObject.Borrower, borrowerWallet.address) + assert.equal(loanObject.PaymentRemaining, loanSetTx.PaymentTotal) + + // Test LoanBrokerCoverDeposit + const loanBrokerCoverDepositTx: LoanBrokerCoverDeposit = { + TransactionType: 'LoanBrokerCoverDeposit', + Account: loanBrokerWallet.address, + LoanBrokerID: loanBrokerObjectId, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '50000', + }, + } + await testTransaction( + testContext.client, + loanBrokerCoverDepositTx, + loanBrokerWallet, + ) + + // Assert LoanBroker object has updated CoverAvailable + const loanBrokerCoverDepositResult = await testContext.client.request({ + command: 'ledger_entry', + index: loanBrokerObjectId, + }) + const loanBrokerCoverDepositObject = loanBrokerCoverDepositResult.result + .node as LoanBroker + assert.equal( + loanBrokerCoverDepositObject.CoverAvailable, + (loanBrokerCoverDepositTx.Amount as MPTAmount).value, + ) + + // Test LoanBrokerCoverWithdraw + const loanBrokerCoverWithdrawTx: LoanBrokerCoverWithdraw = { + TransactionType: 'LoanBrokerCoverWithdraw', + Account: loanBrokerWallet.address, + LoanBrokerID: loanBrokerObjectId, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '25000', + }, + Destination: loanBrokerWallet.address, + DestinationTag: 10, + } + await testTransaction( + testContext.client, + loanBrokerCoverWithdrawTx, + loanBrokerWallet, + ) + + // Assert LoanBroker object has updated CoverAvailable + const loanBrokerCoverWithdrawResult = await testContext.client.request({ + command: 'ledger_entry', + index: loanBrokerObjectId, + }) + const loanBrokerCoverWithdrawObject = loanBrokerCoverWithdrawResult.result + .node as LoanBroker + assert.equal( + loanBrokerCoverWithdrawObject.CoverAvailable, + ( + BigInt(loanBrokerCoverDepositObject.CoverAvailable as string) - + BigInt((loanBrokerCoverWithdrawTx.Amount as MPTAmount).value) + ).toString(), + ) + + // Test LoanManage - Mark loan as impaired + const loanManageTx: LoanManage = { + TransactionType: 'LoanManage', + Account: loanBrokerWallet.address, + LoanID: loanObjectId, + Flags: LoanManageFlags.tfLoanImpair, + } + await testTransaction(testContext.client, loanManageTx, loanBrokerWallet) + + // Assert Loan object is impaired + const loanManageResult = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + loanObject = loanManageResult.result.account_objects.find( + (obj) => obj.index === loanObjectId, + ) as Loan + assert.equal(loanObject.Flags, LoanFlags.lsfLoanImpaired) + + // Test LoanPay + const loanPayTx: LoanPay = { + TransactionType: 'LoanPay', + Account: borrowerWallet.address, + LoanID: loanObjectId, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '100000', + }, + } + await testTransaction(testContext.client, loanPayTx, borrowerWallet) + + loanObject = ( + await testContext.client.request({ + command: 'ledger_entry', + index: loanObjectId, + }) + ).result.node as Loan + // Loan gets un-impaired when a payment is made + assert.equal(loanObject.Flags, 0) + // Entire loan is paid off + assert.isUndefined(loanObject.TotalValueOutstanding) + + // Test LoanDelete + const loanDeleteTx: LoanDelete = { + TransactionType: 'LoanDelete', + Account: borrowerWallet.address, + LoanID: loanObjectId, + } + await testTransaction(testContext.client, loanDeleteTx, borrowerWallet) + + // Assert Loan object is deleted + const loanDeleteResult = await testContext.client.request({ + command: 'account_objects', + account: borrowerWallet.address, + type: 'loan', + }) + assert.equal(loanDeleteResult.result.account_objects.length, 0) + + // Test LoanBrokerCoverClawback + const loanBrokerCoverClawbackTx: LoanBrokerCoverClawback = { + TransactionType: 'LoanBrokerCoverClawback', + Account: mptIssuerWallet.address, + LoanBrokerID: loanBrokerObjectId, + Amount: { + mpt_issuance_id: vaultObj.mptIssuanceId, + value: '10000', + }, + } + await testTransaction( + testContext.client, + loanBrokerCoverClawbackTx, + mptIssuerWallet, + ) + const loanBrokerCoverClawbackResult = await testContext.client.request({ + command: 'ledger_entry', + index: loanBrokerObjectId, + }) + + const loanBrokerCoverClawbackObject = loanBrokerCoverClawbackResult.result + .node as LoanBroker + assert.equal( + loanBrokerCoverClawbackObject.CoverAvailable, + ( + BigInt(loanBrokerCoverWithdrawObject.CoverAvailable as string) - + BigInt((loanBrokerCoverClawbackTx.Amount as MPTAmount).value) + ).toString(), + ) + + // Test LoanBrokerDelete + const loanBrokerDeleteTx: LoanBrokerDelete = { + TransactionType: 'LoanBrokerDelete', + Account: loanBrokerWallet.address, + LoanBrokerID: loanBrokerObjectId, + } + await testTransaction( + testContext.client, + loanBrokerDeleteTx, + loanBrokerWallet, + ) + const loanBrokerDeleteResult = await testContext.client.request({ + command: 'account_objects', + account: loanBrokerWallet.address, + type: 'loan_broker', + }) + assert.equal(loanBrokerDeleteResult.result.account_objects.length, 0) + }, + TIMEOUT, + ) +}) + +async function createSingleAssetVault( + testContext: XrplIntegrationTestContext, + vaultOwnerWallet: Wallet, + mptIssuerWallet: Wallet, +): Promise { + const mptIssuanceId = await createMPToken(testContext, mptIssuerWallet) + + const vaultCreateTx: VaultCreate = { + TransactionType: 'VaultCreate', + Asset: { + mpt_issuance_id: mptIssuanceId, + }, + Account: vaultOwnerWallet.address, + } + + const vaultCreateResp = await testTransaction( + testContext.client, + vaultCreateTx, + vaultOwnerWallet, + ) + + const vaultObjectId = hashVault( + vaultCreateResp.result.tx_json.Account, + vaultCreateResp.result.tx_json.Sequence as number, + ) + + return { mptIssuanceId, vaultObjectId } +} + +async function createMPToken( + testContext: XrplIntegrationTestContext, + mptIssuerWallet: Wallet, +): Promise { + const mptCreateTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Flags: { + tfMPTCanTransfer: true, + tfMPTCanClawback: true, + }, + Account: mptIssuerWallet.address, + } + + const response = await testTransaction( + testContext.client, + mptCreateTx, + mptIssuerWallet, + ) + + const txResponse: TxResponse = await testContext.client.request({ + command: 'tx', + transaction: response.result.tx_json.hash, + }) + + return (txResponse.result.meta as MPTokenIssuanceCreateMetadata) + .mpt_issuance_id as string +} + +// eslint-disable-next-line max-params -- required here for three wallets +async function setupMultiSigning( + testContext: XrplIntegrationTestContext, + wallet: Wallet, + signer1: Wallet, + signer2: Wallet, +): Promise { + const transaction: SignerListSet = { + TransactionType: 'SignerListSet', + Account: wallet.address, + SignerQuorum: 2, + SignerEntries: [ + { SignerEntry: { Account: signer1.address, SignerWeight: 1 } }, + { SignerEntry: { Account: signer2.address, SignerWeight: 1 } }, + ], + } + + await testTransaction(testContext.client, transaction, wallet) +} diff --git a/packages/xrpl/test/integration/transactions/mptokenAuthorize.test.ts b/packages/xrpl/test/integration/transactions/mptokenAuthorize.test.ts new file mode 100644 index 0000000000..57d310c556 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/mptokenAuthorize.test.ts @@ -0,0 +1,119 @@ +import { assert } from 'chai' + +import { + MPTokenIssuanceCreate, + MPTokenAuthorize, + MPTokenIssuanceCreateFlags, + MPTokenAuthorizeFlags, + TransactionMetadata, +} from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction, generateFundedWallet } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('MPTokenAuthorize', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + const wallet2 = await generateFundedWallet(testContext.client) + + const createTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + Flags: MPTokenIssuanceCreateFlags.tfMPTRequireAuth, + } + + const mptCreateRes = await testTransaction( + testContext.client, + createTx, + testContext.wallet, + ) + + const txHash = mptCreateRes.result.tx_json.hash + + const txResponse = await testContext.client.request({ + command: 'tx', + transaction: txHash, + }) + + const meta = txResponse.result + .meta as TransactionMetadata + + const mptID = meta.mpt_issuance_id + + let accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Should be exactly one issuance on the ledger', + ) + + let authTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: wallet2.classicAddress, + MPTokenIssuanceID: mptID!, + } + + await testTransaction(testContext.client, authTx, wallet2) + + accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: wallet2.classicAddress, + type: 'mptoken', + }) + + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Holder owns 1 MPToken on the ledger', + ) + + authTx = { + TransactionType: 'MPTokenAuthorize', + Account: testContext.wallet.classicAddress, + MPTokenIssuanceID: mptID!, + Holder: wallet2.classicAddress, + } + + await testTransaction(testContext.client, authTx, testContext.wallet) + authTx = { + TransactionType: 'MPTokenAuthorize', + Account: wallet2.classicAddress, + MPTokenIssuanceID: mptID!, + Flags: MPTokenAuthorizeFlags.tfMPTUnauthorize, + } + + await testTransaction(testContext.client, authTx, wallet2) + + accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: wallet2.classicAddress, + }) + + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 0, + 'Holder owns nothing on the ledger', + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/mptokenIssuanceCreate.test.ts b/packages/xrpl/test/integration/transactions/mptokenIssuanceCreate.test.ts new file mode 100644 index 0000000000..51208dad55 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/mptokenIssuanceCreate.test.ts @@ -0,0 +1,96 @@ +import { assert } from 'chai' + +import { + decodeMPTokenMetadata, + encodeMPTokenMetadata, + MPTokenIssuanceCreate, + MPTokenMetadata, +} from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('MPTokenIssuanceCreate', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + const metadata: MPTokenMetadata = { + ticker: 'TBILL', + name: 'T-Bill Yield Token', + desc: 'A yield-bearing stablecoin backed by short-term U.S. Treasuries and money market instruments.', + icon: 'example.org/tbill-icon.png', + asset_class: 'rwa', + asset_subclass: 'treasury', + issuer_name: 'Example Yield Co.', + uris: [ + { + uri: 'exampleyield.co/tbill', + category: 'website', + title: 'Product Page', + }, + { + uri: 'exampleyield.co/docs', + category: 'docs', + title: 'Yield Token Docs', + }, + ], + additional_info: { + interest_rate: '5.00%', + interest_type: 'variable', + yield_source: 'U.S. Treasury Bills', + maturity_date: '2045-06-30', + cusip: '912796RX0', + }, + } + const tx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + // 0x7fffffffffffffff + MaximumAmount: '9223372036854775807', + AssetScale: 2, + MPTokenMetadata: encodeMPTokenMetadata(metadata), + } + + await testTransaction(testContext.client, tx, testContext.wallet) + + const accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Should be exactly one issuance on the ledger', + ) + assert.equal( + // @ts-expect-error: Known issue with unknown object type + accountObjectsResponse.result.account_objects[0].MaximumAmount, + `9223372036854775807`, + ) + + assert.deepStrictEqual( + decodeMPTokenMetadata( + // @ts-expect-error: Known issue with unknown object type + accountObjectsResponse.result.account_objects[0].MPTokenMetadata, + ), + metadata, + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/mptokenIssuanceDestroy.test.ts b/packages/xrpl/test/integration/transactions/mptokenIssuanceDestroy.test.ts new file mode 100644 index 0000000000..03e5d30a78 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/mptokenIssuanceDestroy.test.ts @@ -0,0 +1,85 @@ +import { assert } from 'chai' + +import { + MPTokenIssuanceCreate, + MPTokenIssuanceDestroy, + TransactionMetadata, +} from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('MPTokenIssuanceDestroy', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + const createTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + } + + const mptCreateRes = await testTransaction( + testContext.client, + createTx, + testContext.wallet, + ) + + const txHash = mptCreateRes.result.tx_json.hash + + const txResponse = await testContext.client.request({ + command: 'tx', + transaction: txHash, + }) + + const meta = txResponse.result + .meta as TransactionMetadata + + const mptID = meta.mpt_issuance_id + + let accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Should be exactly one issuance on the ledger', + ) + + const destroyTx: MPTokenIssuanceDestroy = { + TransactionType: 'MPTokenIssuanceDestroy', + Account: testContext.wallet.classicAddress, + MPTokenIssuanceID: mptID!, + } + + await testTransaction(testContext.client, destroyTx, testContext.wallet) + + accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 0, + 'Should be zero issuance on the ledger', + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/mptokenIssuanceSet.test.ts b/packages/xrpl/test/integration/transactions/mptokenIssuanceSet.test.ts new file mode 100644 index 0000000000..195fbe5949 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/mptokenIssuanceSet.test.ts @@ -0,0 +1,78 @@ +import { assert } from 'chai' + +import { + MPTokenIssuanceCreate, + MPTokenIssuanceSet, + MPTokenIssuanceCreateFlags, + MPTokenIssuanceSetFlags, + TransactionMetadata, +} from '../../../src' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('MPTokenIssuanceDestroy', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + async () => { + const createTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + Flags: MPTokenIssuanceCreateFlags.tfMPTCanLock, + } + + const mptCreateRes = await testTransaction( + testContext.client, + createTx, + testContext.wallet, + ) + + const txHash = mptCreateRes.result.tx_json.hash + + const txResponse = await testContext.client.request({ + command: 'tx', + transaction: txHash, + }) + + const meta = txResponse.result + .meta as TransactionMetadata + + const mptID = meta.mpt_issuance_id + + const accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Should be exactly one issuance on the ledger', + ) + + const setTx: MPTokenIssuanceSet = { + TransactionType: 'MPTokenIssuanceSet', + Account: testContext.wallet.classicAddress, + MPTokenIssuanceID: mptID!, + Flags: MPTokenIssuanceSetFlags.tfMPTLock, + } + + await testTransaction(testContext.client, setTx, testContext.wallet) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/nftokenMint.test.ts b/packages/xrpl/test/integration/transactions/nftokenMint.test.ts index daf1f29c00..09b558d675 100644 --- a/packages/xrpl/test/integration/transactions/nftokenMint.test.ts +++ b/packages/xrpl/test/integration/transactions/nftokenMint.test.ts @@ -1,11 +1,15 @@ import { assert } from 'chai' import { + AccountInfoRequest, convertStringToHex, getNFTokenID, NFTokenMint, TransactionMetadata, TxRequest, + unixTimeToRippleTime, + Wallet, + xrpToDrops, } from '../../../src' import { hashSignedTx } from '../../../src/utils/hashes' import serverUrl from '../serverUrl' @@ -14,16 +18,18 @@ import { teardownClient, type XrplIntegrationTestContext, } from '../setup' -import { testTransaction } from '../utils' +import { generateFundedWallet, testTransaction } from '../utils' // how long before each test case times out const TIMEOUT = 20000 describe('NFTokenMint', function () { let testContext: XrplIntegrationTestContext + let destinationWallet: Wallet beforeEach(async () => { testContext = await setupClient(serverUrl) + destinationWallet = await generateFundedWallet(testContext.client) }) afterEach(async () => teardownClient(testContext)) @@ -43,6 +49,8 @@ describe('NFTokenMint', function () { ) assert.equal(response.type, 'response') + const mintTransactionSeq = response.result.tx_json.Sequence + const txRequest: TxRequest = { command: 'tx', transaction: hashSignedTx(response.result.tx_blob), @@ -88,6 +96,84 @@ describe('NFTokenMint', function () { getNFTokenID(binaryTxResponse.result.meta_blob) ?? 'undefined', `getNFTokenID produced a different outcome when decoding the metadata in binary format.`, ) + + // Check if AccountRoot ledger object reflects minted token + const accountInfoRequest: AccountInfoRequest = { + command: 'account_info', + account: testContext.wallet.address, + ledger_index: 'validated', + } + const accountInfoResponse = + await testContext.client.request(accountInfoRequest) + assert.equal( + accountInfoResponse.result.account_data.FirstNFTokenSequence, + mintTransactionSeq, + `FirstNFTokenSequence is not same as NFTokenMint's transaction sequence.`, + ) + assert.equal( + accountInfoResponse.result.account_data.MintedNFTokens, + 1, + `MintedNFTokens is not 1.`, + ) + }, + TIMEOUT, + ) + + it( + 'test with Amount', + async function () { + const tx: NFTokenMint = { + TransactionType: 'NFTokenMint', + Account: testContext.wallet.address, + URI: convertStringToHex('https://www.google.com'), + NFTokenTaxon: 0, + Amount: xrpToDrops(1), + Expiration: unixTimeToRippleTime(Date.now() + 1000 * 60 * 60 * 24), + Destination: destinationWallet.address, + } + const response = await testTransaction( + testContext.client, + tx, + testContext.wallet, + ) + assert.equal(response.type, 'response') + + const txRequest: TxRequest = { + command: 'tx', + transaction: hashSignedTx(response.result.tx_blob), + } + const txResponse = await testContext.client.request(txRequest) + + assert.equal( + (txResponse.result.meta as TransactionMetadata).TransactionResult, + 'tesSUCCESS', + ) + + const nftokenID = + getNFTokenID( + txResponse.result.meta as TransactionMetadata, + ) ?? 'undefined' + + const nftokenOfferID = ( + txResponse.result.meta as TransactionMetadata + ).offer_id + + const sellOffers = await testContext.client.request({ + command: 'nft_sell_offers', + nft_id: nftokenID, + }) + + const existsOffer = sellOffers.result.offers.some( + (value) => value.nft_offer_index === nftokenOfferID, + ) + + assert.isTrue( + existsOffer, + `Expected to exist an offer for NFT with NFTokenID ${nftokenID} but did not find it. + \n\nHere's what was returned from 'nft_sell_offers': ${JSON.stringify( + sellOffers, + )}`, + ) }, TIMEOUT, ) diff --git a/packages/xrpl/test/integration/transactions/nftokenModify.test.ts b/packages/xrpl/test/integration/transactions/nftokenModify.test.ts new file mode 100644 index 0000000000..d87b11e59f --- /dev/null +++ b/packages/xrpl/test/integration/transactions/nftokenModify.test.ts @@ -0,0 +1,104 @@ +import { assert } from 'chai' + +import { + NFTokenModify, + NFTokenMintFlags, + convertStringToHex, + getNFTokenID, + NFTokenMint, + TransactionMetadata, + TxRequest, +} from '../../../src' +import { hashSignedTx } from '../../../src/utils/hashes' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('NFTokenModify', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + // Mint an NFToken with tfMutable flag and modify URI later + it( + 'modify NFToken URI', + async function () { + const oldUri = convertStringToHex('https://www.google.com') + const newUri = convertStringToHex('https://www.youtube.com') + + const mutableMint: NFTokenMint = { + TransactionType: 'NFTokenMint', + Account: testContext.wallet.address, + Flags: NFTokenMintFlags.tfMutable, + URI: oldUri, + NFTokenTaxon: 0, + } + const response = await testTransaction( + testContext.client, + mutableMint, + testContext.wallet, + ) + assert.equal(response.type, 'response') + + const mutableTx: TxRequest = { + command: 'tx', + transaction: hashSignedTx(response.result.tx_blob), + } + const mutableTxResponse = await testContext.client.request(mutableTx) + + const mutableNFTokenID = + getNFTokenID( + mutableTxResponse.result.meta as TransactionMetadata, + ) ?? 'undefined' + + const accountNFTs = await testContext.client.request({ + command: 'account_nfts', + account: testContext.wallet.address, + }) + + assert.equal( + accountNFTs.result.account_nfts.find( + (nft) => nft.NFTokenID === mutableNFTokenID, + )?.URI, + oldUri, + ) + + const modifyTx: NFTokenModify = { + TransactionType: 'NFTokenModify', + Account: testContext.wallet.address, + NFTokenID: mutableNFTokenID, + URI: newUri, + } + + const modifyResponse = await testTransaction( + testContext.client, + modifyTx, + testContext.wallet, + ) + assert.equal(modifyResponse.type, 'response') + + const nfts = await testContext.client.request({ + command: 'account_nfts', + account: testContext.wallet.address, + }) + + assert.equal( + nfts.result.account_nfts.find( + (nft) => nft.NFTokenID === mutableNFTokenID, + )?.URI, + newUri, + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/offerCreate.test.ts b/packages/xrpl/test/integration/transactions/offerCreate.test.ts index 7d7bf0f2bf..22e664a954 100644 --- a/packages/xrpl/test/integration/transactions/offerCreate.test.ts +++ b/packages/xrpl/test/integration/transactions/offerCreate.test.ts @@ -1,24 +1,34 @@ import { assert } from 'chai' -import { OfferCreate } from '../../../src' +import { OfferCreate, TrustSet, Wallet } from '../../../src' import serverUrl from '../serverUrl' import { setupClient, teardownClient, type XrplIntegrationTestContext, } from '../setup' -import { testTransaction } from '../utils' +import { + testTransaction, + generateFundedWallet, + submitTransaction, +} from '../utils' // how long before each test case times out const TIMEOUT = 20000 describe('OfferCreate', function () { let testContext: XrplIntegrationTestContext + let wallet_deep_freeze_trustline: Wallet | undefined - beforeEach(async () => { + beforeAll(async () => { testContext = await setupClient(serverUrl) + // eslint-disable-next-line require-atomic-updates -- race condition doesn't really matter + wallet_deep_freeze_trustline ??= await generateFundedWallet( + testContext.client, + ) }) - afterEach(async () => teardownClient(testContext)) + + afterAll(async () => teardownClient(testContext)) it( 'base', @@ -49,4 +59,52 @@ describe('OfferCreate', function () { }, TIMEOUT, ) + + it( + 'OfferCreate with Deep-Frozen trustline must fail', + async () => { + assert(wallet_deep_freeze_trustline != null) + + // deep-freeze the trust line + const trust_set_tx: TrustSet = { + TransactionType: 'TrustSet', + Account: testContext.wallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: wallet_deep_freeze_trustline.classicAddress, + value: '10', + }, + Flags: { + tfSetFreeze: true, + tfSetDeepFreeze: true, + }, + } + + await testTransaction( + testContext.client, + trust_set_tx, + testContext.wallet, + ) + + const offer_create_tx: OfferCreate = { + TransactionType: 'OfferCreate', + Account: testContext.wallet.classicAddress, + TakerGets: '13100000', + TakerPays: { + currency: 'USD', + issuer: wallet_deep_freeze_trustline.classicAddress, + value: '10', + }, + } + + const response = await submitTransaction({ + client: testContext.client, + transaction: offer_create_tx, + wallet: testContext.wallet, + }) + + assert.equal(response.result.engine_result, 'tecFROZEN') + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/transactions/oracleDelete.test.ts b/packages/xrpl/test/integration/transactions/oracleDelete.test.ts index 5629873285..8df2b75df9 100644 --- a/packages/xrpl/test/integration/transactions/oracleDelete.test.ts +++ b/packages/xrpl/test/integration/transactions/oracleDelete.test.ts @@ -24,11 +24,18 @@ describe('OracleDelete', function () { it( 'base', async () => { + const closeTime: string = ( + await testContext.client.request({ + command: 'ledger', + ledger_index: 'validated', + }) + ).result.ledger.close_time_iso + const setTx: OracleSet = { TransactionType: 'OracleSet', Account: testContext.wallet.classicAddress, OracleDocumentID: 1234, - LastUpdateTime: Math.floor(Date.now() / 1000), + LastUpdateTime: Math.floor(new Date(closeTime).getTime() / 1000) + 20, PriceDataSeries: [ { PriceData: { diff --git a/packages/xrpl/test/integration/transactions/oracleSet.test.ts b/packages/xrpl/test/integration/transactions/oracleSet.test.ts index 5927963d26..2e1d6cf1c1 100644 --- a/packages/xrpl/test/integration/transactions/oracleSet.test.ts +++ b/packages/xrpl/test/integration/transactions/oracleSet.test.ts @@ -25,11 +25,18 @@ describe('OracleSet', function () { it( 'base', async () => { + const closeTime: string = ( + await testContext.client.request({ + command: 'ledger', + ledger_index: 'validated', + }) + ).result.ledger.close_time_iso + const tx: OracleSet = { TransactionType: 'OracleSet', Account: testContext.wallet.classicAddress, OracleDocumentID: 1234, - LastUpdateTime: Math.floor(Date.now() / 1000), + LastUpdateTime: Math.floor(new Date(closeTime).getTime() / 1000) + 20, PriceDataSeries: [ { PriceData: { @@ -39,6 +46,17 @@ describe('OracleSet', function () { Scale: 3, }, }, + { + PriceData: { + BaseAsset: 'XRP', + QuoteAsset: 'INR', + // Upper bound admissible value for AssetPrice field + // large numeric values necessarily have to use str type in Javascript + // number type uses double-precision floating point representation, hence represents a smaller range of values + AssetPrice: 'ffffffffffffffff', + Scale: 3, + }, + }, ], Provider: stringToHex('chainlink'), URI: '6469645F6578616D706C65', @@ -62,12 +80,18 @@ describe('OracleSet', function () { assert.equal(oracle.Owner, testContext.wallet.classicAddress) assert.equal(oracle.AssetClass, tx.AssetClass) assert.equal(oracle.Provider, tx.Provider) - assert.equal(oracle.PriceDataSeries.length, 1) + assert.equal(oracle.PriceDataSeries.length, 2) assert.equal(oracle.PriceDataSeries[0].PriceData.BaseAsset, 'XRP') assert.equal(oracle.PriceDataSeries[0].PriceData.QuoteAsset, 'USD') assert.equal(oracle.PriceDataSeries[0].PriceData.AssetPrice, '2e4') assert.equal(oracle.PriceDataSeries[0].PriceData.Scale, 3) assert.equal(oracle.Flags, 0) + + // validate the serialization of large AssetPrice values + assert.equal( + oracle.PriceDataSeries[1].PriceData.AssetPrice, + 'ffffffffffffffff', + ) }, TIMEOUT, ) diff --git a/packages/xrpl/test/integration/transactions/payment.test.ts b/packages/xrpl/test/integration/transactions/payment.test.ts index 391ab317b2..17b9f7e494 100644 --- a/packages/xrpl/test/integration/transactions/payment.test.ts +++ b/packages/xrpl/test/integration/transactions/payment.test.ts @@ -1,13 +1,23 @@ import { assert } from 'chai' -import { Payment, Wallet } from '../../../src' +import { + Payment, + Wallet, + MPTokenIssuanceCreate, + MPTokenAuthorize, + TransactionMetadata, +} from '../../../src' import serverUrl from '../serverUrl' import { setupClient, teardownClient, type XrplIntegrationTestContext, } from '../setup' -import { generateFundedWallet, testTransaction } from '../utils' +import { + fetchAccountReserveFee, + generateFundedWallet, + testTransaction, +} from '../utils' // how long before each test case times out const TIMEOUT = 20000 @@ -15,7 +25,8 @@ const TIMEOUT = 20000 describe('Payment', function () { let testContext: XrplIntegrationTestContext let paymentTx: Payment - const AMOUNT = '10000000' + let amount: string + const DEFAULT_AMOUNT = '10000000' // This wallet is used for DeliverMax related tests let senderWallet: Wallet @@ -25,7 +36,7 @@ describe('Payment', function () { paymentTx = { TransactionType: 'Payment', Account: senderWallet.classicAddress, - Amount: AMOUNT, + Amount: amount, Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', } }) @@ -33,6 +44,9 @@ describe('Payment', function () { beforeAll(async () => { testContext = await setupClient(serverUrl) senderWallet = await generateFundedWallet(testContext.client) + // Make sure the amount sent satisfies minimum reserve requirement to fund an account. + amount = + (await fetchAccountReserveFee(testContext.client)) ?? DEFAULT_AMOUNT }) afterAll(async () => teardownClient(testContext)) @@ -60,7 +74,7 @@ describe('Payment', function () { ) assert.equal(result.result.engine_result_code, 0) - assert.equal((result.result.tx_json as Payment).Amount, AMOUNT) + assert.equal((result.result.tx_json as Payment).Amount, amount) }, TIMEOUT, ) @@ -68,7 +82,6 @@ describe('Payment', function () { it( 'Validate Payment transaction API v2: Payment Transaction: Specify Only DeliverMax field', async () => { - // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions paymentTx.DeliverMax = paymentTx.Amount // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions delete paymentTx.Amount @@ -80,7 +93,7 @@ describe('Payment', function () { ) assert.equal(result.result.engine_result_code, 0) - assert.equal((result.result.tx_json as Payment).Amount, AMOUNT) + assert.equal((result.result.tx_json as Payment).Amount, amount) }, TIMEOUT, ) @@ -88,7 +101,6 @@ describe('Payment', function () { it( 'Validate Payment transaction API v2: Payment Transaction: identical DeliverMax and Amount fields', async () => { - // @ts-expect-error -- DeliverMax is a non-protocol, RPC level field in Payment transactions paymentTx.DeliverMax = paymentTx.Amount const result = await testTransaction( @@ -98,7 +110,92 @@ describe('Payment', function () { ) assert.equal(result.result.engine_result_code, 0) - assert.equal((result.result.tx_json as Payment).Amount, AMOUNT) + assert.equal((result.result.tx_json as Payment).Amount, amount) + }, + TIMEOUT, + ) + + it( + 'Validate MPT Payment ', + async () => { + const wallet2 = await generateFundedWallet(testContext.client) + + const createTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: testContext.wallet.classicAddress, + } + + const mptCreateRes = await testTransaction( + testContext.client, + createTx, + testContext.wallet, + ) + + const txHash = mptCreateRes.result.tx_json.hash + + const txResponse = await testContext.client.request({ + command: 'tx', + transaction: txHash, + }) + + const meta = txResponse.result + .meta as TransactionMetadata + + const mptID = meta.mpt_issuance_id! + + let accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Should be exactly one issuance on the ledger', + ) + + const authTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: wallet2.classicAddress, + MPTokenIssuanceID: mptID, + } + + await testTransaction(testContext.client, authTx, wallet2) + + accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: wallet2.classicAddress, + type: 'mptoken', + }) + + assert.lengthOf( + accountObjectsResponse.result.account_objects, + 1, + 'Holder owns 1 MPToken on the ledger', + ) + + const payTx: Payment = { + TransactionType: 'Payment', + Account: testContext.wallet.classicAddress, + Destination: wallet2.classicAddress, + Amount: { + mpt_issuance_id: mptID, + value: '100', + }, + } + + await testTransaction(testContext.client, payTx, testContext.wallet) + + accountObjectsResponse = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'mpt_issuance', + }) + assert.equal( + // @ts-expect-error -- Object type not known + accountObjectsResponse.result.account_objects[0].OutstandingAmount, + `100`, + ) }, TIMEOUT, ) diff --git a/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts b/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts new file mode 100644 index 0000000000..7c90b405ac --- /dev/null +++ b/packages/xrpl/test/integration/transactions/permissionedDEX.test.ts @@ -0,0 +1,370 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + PermissionedDomainSet, + AuthorizeCredential, + Wallet, + IssuedCurrencyAmount, + AccountSetAsfFlags, +} from '../../../src' +import DirectoryNode from '../../../src/models/ledger/DirectoryNode' +import Offer from '../../../src/models/ledger/Offer' +import PermissionedDomain from '../../../src/models/ledger/PermissionedDomain' +import { + BookOffersRequest, + BookOffersResponse, +} from '../../../src/models/methods/bookOffers' +import { SubmitResponse } from '../../../src/models/methods/submit' +import { + SubscribeBook, + SubscribeRequest, +} from '../../../src/models/methods/subscribe' +import { CredentialAccept } from '../../../src/models/transactions/CredentialAccept' +import { CredentialCreate } from '../../../src/models/transactions/CredentialCreate' +import { + OfferCreate, + OfferCreateFlags, +} from '../../../src/models/transactions/offerCreate' +import { Payment } from '../../../src/models/transactions/payment' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('PermissionedDEX', function () { + let testContext: XrplIntegrationTestContext + let wallet1: Wallet + let wallet2: Wallet + let permDomainLedgerObject: PermissionedDomain + let offerCreateTxResponse: SubmitResponse + let offerLedgerObject: Offer + + beforeAll(async () => { + // this section describes the pre-requisites for testing PermissionedDEX features + testContext = await setupClient(serverUrl) + wallet1 = await generateFundedWallet(testContext.client) + wallet2 = await generateFundedWallet(testContext.client) + + // set the default ripple flag on the issuer's wallet + await testTransaction( + testContext.client, + { + TransactionType: 'AccountSet', + Account: testContext.wallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfDefaultRipple, + }, + testContext.wallet, + ) + + // Create a Credential from the issuer's wallet into Wallet1 + await testTransaction( + testContext.client, + { + TransactionType: 'CredentialCreate', + Subject: wallet1.classicAddress, + Account: testContext.wallet.classicAddress, + CredentialType: stringToHex('Passport'), + } as CredentialCreate, + testContext.wallet, + ) + + // Create a Credential from the issuer's wallet into Wallet2 + await testTransaction( + testContext.client, + { + TransactionType: 'CredentialCreate', + Subject: wallet2.classicAddress, + Account: testContext.wallet.classicAddress, + CredentialType: stringToHex('Passport'), + } as CredentialCreate, + testContext.wallet, + ) + + // Create a Permissioned Domain ledger object + await testTransaction( + testContext.client, + { + TransactionType: 'PermissionedDomainSet', + Account: testContext.wallet.classicAddress, + AcceptedCredentials: [ + { + Credential: { + CredentialType: stringToHex('Passport'), + Issuer: testContext.wallet.classicAddress, + }, + } as AuthorizeCredential, + ], + } as PermissionedDomainSet, + testContext.wallet, + ) + + // Execute CredentialAccept transactions from wallet1 and wallet2 accounts + await testTransaction( + testContext.client, + { + TransactionType: 'CredentialAccept', + Account: wallet1.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Passport'), + } as CredentialAccept, + wallet1, + ) + + await testTransaction( + testContext.client, + { + TransactionType: 'CredentialAccept', + Account: wallet2.classicAddress, + Issuer: testContext.wallet.classicAddress, + CredentialType: stringToHex('Passport'), + } as CredentialAccept, + wallet2, + ) + // fetch the domainID from the of the PermissionedDomain ledger object + const result = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'permissioned_domain', + }) + + permDomainLedgerObject = result.result + .account_objects[0] as PermissionedDomain + + // wallet1 establishes a trust line for USD IOU Token + await testTransaction( + testContext.client, + { + TransactionType: 'TrustSet', + Account: wallet1.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10000', + }, + }, + wallet1, + ) + + // wallet2 establishes a trust line for USD IOU Token + await testTransaction( + testContext.client, + { + TransactionType: 'TrustSet', + Account: wallet2.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10000', + }, + }, + wallet2, + ) + + // Ensure sufficient USD Token funds are available in wallet1 and wallet2 + await testTransaction( + testContext.client, + { + TransactionType: 'Payment', + Account: testContext.wallet.classicAddress, + Amount: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10000', + }, + Destination: wallet1.classicAddress, + } as Payment, + testContext.wallet, + ) + + await testTransaction( + testContext.client, + { + TransactionType: 'Payment', + Account: testContext.wallet.classicAddress, + Amount: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10000', + }, + Destination: wallet2.classicAddress, + } as Payment, + testContext.wallet, + ) + + // Execute an OfferCreate transaction to create a hybrid offer + offerCreateTxResponse = await testTransaction( + testContext.client, + { + TransactionType: 'OfferCreate', + Account: wallet1.classicAddress, + TakerGets: '1000', + TakerPays: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10', + }, + Flags: OfferCreateFlags.tfHybrid, + DomainID: permDomainLedgerObject.index, + } as OfferCreate, + wallet1, + ) + }) + + afterAll(async () => teardownClient(testContext)) + + it( + 'Validate characteristics of the PermissionedDEX Offer', + // eslint-disable-next-line max-statements -- this feature is complex and requires multiple assertions + async () => { + // Validate the domainID of the Offer ledger object + offerLedgerObject = ( + await testContext.client.request({ + command: 'ledger_entry', + offer: { + account: wallet1.classicAddress, + seq: offerCreateTxResponse.result.tx_json.Sequence as number, + }, + }) + ).result.node as Offer + + assert.equal(offerLedgerObject.LedgerEntryType, 'Offer') + assert.equal(offerLedgerObject.DomainID, permDomainLedgerObject.index) + assert.equal(offerLedgerObject.Account, wallet1.classicAddress) + + // Validate the contents and structure of the AdditionalBooks field + assert.isNotNull(offerLedgerObject.AdditionalBooks) + assert.equal(offerLedgerObject.AdditionalBooks?.length, 1) + assert.isNotNull(offerLedgerObject.AdditionalBooks?.[0].Book.BookNode) + + assert.isNotNull( + offerLedgerObject.AdditionalBooks?.[0].Book.BookDirectory, + ) + // The book directory of the open-book is different from the book directory of the in-domain offer + assert.notEqual( + offerLedgerObject.AdditionalBooks?.[0].Book.BookDirectory, + offerLedgerObject.BookDirectory, + ) + + // Validate the properties of the DirectoryNode ledger object (contains the PermissionedDEX Offer object) + const ledgerEntryResponse = await testContext.client.request({ + command: 'ledger_entry', + directory: offerLedgerObject.BookDirectory, + }) + + assert.equal( + (ledgerEntryResponse.result.node as DirectoryNode).index, + offerLedgerObject.BookDirectory, + ) + assert.equal( + (ledgerEntryResponse.result.node as DirectoryNode).LedgerEntryType, + 'DirectoryNode', + ) + assert.equal( + (ledgerEntryResponse.result.node as DirectoryNode).DomainID, + permDomainLedgerObject.index, + ) + + // Validate the bookOffers method + const bookOffersResponse: BookOffersResponse = + await testContext.client.request({ + command: 'book_offers', + taker: wallet2.classicAddress, + taker_pays: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + }, + taker_gets: { + currency: 'XRP', + }, + domain: permDomainLedgerObject.index, + } as BookOffersRequest) + + assert.equal(bookOffersResponse.result.offers.length, 1) + assert.equal(bookOffersResponse.result.offers[0].TakerGets, '1000') + assert.equal( + (bookOffersResponse.result.offers[0].TakerPays as IssuedCurrencyAmount) + .value, + '10', + ) + assert.equal( + (bookOffersResponse.result.offers[0].TakerPays as IssuedCurrencyAmount) + .currency, + 'USD', + ) + assert.equal( + (bookOffersResponse.result.offers[0].TakerPays as IssuedCurrencyAmount) + .issuer, + testContext.wallet.classicAddress, + ) + + assert.equal( + bookOffersResponse.result.offers[0].DomainID, + permDomainLedgerObject.index, + ) + + // Validate the subscribe command + const request: SubscribeRequest = { + command: 'subscribe', + books: [ + { + taker_gets: { currency: 'XRP' }, + taker_pays: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + }, + taker: wallet1.classicAddress, + domain: permDomainLedgerObject.index, + } as SubscribeBook, + ], + } + + const response = await testContext.client.request(request) + assert.equal(response.type, 'response') + + // Note: The result is empty because no Offer has been created after the creation of the Subscription stream. + // This case is tested in the rippled code. To avoid the additional complexity, validating the contents + // of the response is skipped in this test. + // This test validates that domain_id is an acceptable input parameter to the subscribe command. + assert.isEmpty(response.result) + + // Validate the "crossing" of a PermissionedDEX Offer + // wallet2 "crosses" the offer within the domain + const offerCreateTx: OfferCreate = { + TransactionType: 'OfferCreate', + Account: wallet2.classicAddress, + TakerPays: '1000', + TakerGets: { + currency: 'USD', + issuer: testContext.wallet.classicAddress, + value: '10', + }, + DomainID: permDomainLedgerObject.index, + } + + await testTransaction(testContext.client, offerCreateTx, wallet2) + + // Validate that Offer ledger objects are consumed in both wallets + const wallet1Objects = await testContext.client.request({ + command: 'account_objects', + account: wallet1.classicAddress, + type: 'offer', + }) + assert.isEmpty(wallet1Objects.result.account_objects) + + const wallet2Objects = await testContext.client.request({ + command: 'account_objects', + account: wallet2.classicAddress, + type: 'offer', + }) + assert.isEmpty(wallet2Objects.result.account_objects) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/permissionedDomain.test.ts b/packages/xrpl/test/integration/transactions/permissionedDomain.test.ts new file mode 100644 index 0000000000..688f4a1fe3 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/permissionedDomain.test.ts @@ -0,0 +1,85 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + LedgerEntryRequest, + PermissionedDomainDelete, + PermissionedDomainSet, + AuthorizeCredential, +} from '../../../src' +import PermissionedDomain from '../../../src/models/ledger/PermissionedDomain' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('PermissionedDomainSet', function () { + let testContext: XrplIntegrationTestContext + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'Lifecycle of PermissionedDomain ledger object', + async () => { + const sampleCredential: AuthorizeCredential = { + Credential: { + CredentialType: stringToHex('Passport'), + Issuer: testContext.wallet.classicAddress, + }, + } + + // Step-1: Test the PermissionedDomainSet transaction + const pdSet: PermissionedDomainSet = { + TransactionType: 'PermissionedDomainSet', + Account: testContext.wallet.classicAddress, + AcceptedCredentials: [sampleCredential], + } + + await testTransaction(testContext.client, pdSet, testContext.wallet) + + // Step-2: Validate the ledger_entry, account_objects RPC methods + // validate the account_objects RPC + const result = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + type: 'permissioned_domain', + }) + + assert.equal(result.result.account_objects.length, 1) + const pd = result.result.account_objects[0] as PermissionedDomain + + assert.equal(pd.Flags, 0) + expect(pd.AcceptedCredentials).toEqual([sampleCredential]) + + // validate the ledger_entry RPC + const ledgerEntryRequest: LedgerEntryRequest = { + command: 'ledger_entry', + // fetch the PD `index` from the previous account_objects RPC response + index: pd.index, + } + const ledgerEntryResult = + await testContext.client.request(ledgerEntryRequest) + assert.deepEqual(pd, ledgerEntryResult.result.node) + + // Step-3: Test the PDDelete transaction + const pdDelete: PermissionedDomainDelete = { + TransactionType: 'PermissionedDomainDelete', + Account: testContext.wallet.classicAddress, + // fetch the PD `index` from the previous account_objects RPC response + DomainID: pd.index, + } + + await testTransaction(testContext.client, pdDelete, testContext.wallet) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/singleAssetVault.test.ts b/packages/xrpl/test/integration/transactions/singleAssetVault.test.ts new file mode 100644 index 0000000000..b2e58e3b38 --- /dev/null +++ b/packages/xrpl/test/integration/transactions/singleAssetVault.test.ts @@ -0,0 +1,540 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' +import { assert } from 'chai' + +import { + AccountSet, + AccountSetAsfFlags, + MPTCurrency, + MPTokenAuthorize, + MPTokenIssuanceCreate, + Payment, + TrustSet, + TrustSetFlags, + TxResponse, + VaultClawback, + VaultCreate, + VaultCreateFlags, + VaultDelete, + VaultDeposit, + VaultSet, + VaultWithdraw, + VaultWithdrawalPolicy, + Wallet, + XRP, +} from '../../../src' +import { Vault, VaultFlags } from '../../../src/models/ledger' +import { MPTokenIssuanceCreateMetadata } from '../../../src/models/transactions/MPTokenIssuanceCreate' +import serverUrl from '../serverUrl' +import { + setupClient, + teardownClient, + type XrplIntegrationTestContext, +} from '../setup' +import { generateFundedWallet, testTransaction } from '../utils' + +// how long before each test case times out +const TIMEOUT = 20000 + +describe('Single Asset Vault', function () { + let testContext: XrplIntegrationTestContext + let issuerWallet: Wallet + let vaultOwnerWallet: Wallet + let holderWallet: Wallet + + beforeEach(async () => { + testContext = await setupClient(serverUrl) + issuerWallet = await generateFundedWallet(testContext.client) + vaultOwnerWallet = await generateFundedWallet(testContext.client) + holderWallet = await generateFundedWallet(testContext.client) + }) + afterEach(async () => teardownClient(testContext)) + + it( + 'base', + // eslint-disable-next-line max-statements -- needed to test all Vault transactions in one sequence flow + async () => { + // --- Issue an IOU --- + const currencyCode = 'USD' + const accountSetTx: AccountSet = { + TransactionType: 'AccountSet', + Account: issuerWallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfDefaultRipple, + } + + await testTransaction(testContext.client, accountSetTx, issuerWallet) + + const accountSetTx2: AccountSet = { + TransactionType: 'AccountSet', + Account: issuerWallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfAllowTrustLineClawback, + } + + await testTransaction(testContext.client, accountSetTx2, issuerWallet) + + const trustSetTx: TrustSet = { + TransactionType: 'TrustSet', + Flags: TrustSetFlags.tfClearNoRipple, + Account: holderWallet.classicAddress, + LimitAmount: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + value: '9999999999999999e80', + }, + } + + await testTransaction(testContext.client, trustSetTx, holderWallet) + + const paymentTx: Payment = { + TransactionType: 'Payment', + Account: issuerWallet.classicAddress, + Destination: holderWallet.classicAddress, + Amount: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + value: '9999999999', + }, + } + + await testTransaction(testContext.client, paymentTx, issuerWallet) + + // --- VaultCreate --- + const tx: VaultCreate = { + TransactionType: 'VaultCreate', + Account: vaultOwnerWallet.classicAddress, + Asset: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + }, + WithdrawalPolicy: + VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + Data: stringToHex('vault metadata'), + MPTokenMetadata: stringToHex('share metadata'), + AssetsMaximum: '9999900000000000000000000', + Scale: 2, + } + + await testTransaction(testContext.client, tx, vaultOwnerWallet) + + const result = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const vault = result.result.account_objects[0] as Vault + const vaultId = vault.index + const asset = vault.Asset as XRP + const assetsMaximum = vault.AssetsMaximum as string + + // confirm that the Vault was actually created + assert.equal(result.result.account_objects.length, 1) + assert.isDefined(vault, 'Vault ledger object should exist') + assert.equal(vault.Owner, vaultOwnerWallet.classicAddress) + assert.equal(asset.currency, currencyCode) + assert.equal(asset.issuer, issuerWallet.classicAddress) + assert.equal( + vault.WithdrawalPolicy, + VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + ) + assert.equal(vault.Data, tx.Data) + assert.equal(assetsMaximum, '99999e20') + assert.equal(vault.Scale, 2) + + // --- VaultSet Transaction --- + // Increase the AssetsMaximum to 1000 and update Data + const vaultSetTx: VaultSet = { + TransactionType: 'VaultSet', + Account: vaultOwnerWallet.classicAddress, + VaultID: vaultId, + AssetsMaximum: '1000', + Data: stringToHex('updated metadata'), + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultSetTx, vaultOwnerWallet) + + // Fetch the vault again to confirm updates + const updatedResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const updatedVault = updatedResult.result.account_objects[0] as Vault + + assert.equal(updatedVault.AssetsMaximum, '1000') + assert.equal(updatedVault.Data, stringToHex('updated metadata')) + + // --- VaultDeposit Transaction --- + // Deposit 10 USD to the vault + const depositAmount = '10' + const vaultDepositTx: VaultDeposit = { + TransactionType: 'VaultDeposit', + Account: holderWallet.classicAddress, + VaultID: vaultId, + Amount: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + value: depositAmount, + }, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultDepositTx, holderWallet) + + // Fetch the vault again to confirm deposit + const afterDepositResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const afterDepositVault = afterDepositResult.result + .account_objects[0] as Vault + + // Should have new balance after deposit (this assumes AssetsTotal tracks deposits) + assert.equal( + afterDepositVault.AssetsTotal ?? '0', + depositAmount, + 'Vault should reflect deposited assets', + ) + + // --- VaultWithdraw Transaction --- + // Withdraw 5 USD from the vault + const withdrawAmount = '5' + const vaultWithdrawTx: VaultWithdraw = { + TransactionType: 'VaultWithdraw', + Account: holderWallet.classicAddress, + VaultID: vaultId, + Amount: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + value: withdrawAmount, + }, + Destination: holderWallet.classicAddress, + DestinationTag: 10, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultWithdrawTx, holderWallet) + + // Fetch the vault again to confirm withdrawal + const afterWithdrawResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const afterWithdrawVault = afterWithdrawResult.result + .account_objects[0] as Vault + + // Should have reduced balance after withdrawal (should be 0 if all withdrawn) + assert.equal( + afterWithdrawVault.AssetsTotal ?? '0', + ( + BigInt(afterDepositVault.AssetsTotal ?? '0') - BigInt(withdrawAmount) + ).toString(), + 'Vault should reflect withdrawn assets', + ) + + // --- VaultClawback Transaction --- + // Claw back 5 USD from the vault + const clawbackAmount = '5' + const vaultClawbackTx: VaultClawback = { + TransactionType: 'VaultClawback', + Account: issuerWallet.classicAddress, + VaultID: vaultId, + Holder: holderWallet.classicAddress, + Amount: { + currency: currencyCode, + issuer: issuerWallet.classicAddress, + value: clawbackAmount, + }, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultClawbackTx, issuerWallet) + + // Fetch the vault again to confirm clawback + const afterClawbackResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + + const afterClawbackVault = afterClawbackResult.result + .account_objects[0] as Vault + + assert.equal( + afterClawbackVault.AssetsTotal ?? '0', + ( + BigInt(afterWithdrawVault.AssetsTotal ?? '0') - BigInt(clawbackAmount) + ).toString(), + 'Vault should reflect assets after clawback', + ) + + // --- VaultDelete Transaction --- + const vaultDeleteTx: VaultDelete = { + TransactionType: 'VaultDelete', + Account: vaultOwnerWallet.classicAddress, + VaultID: vaultId, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultDeleteTx, vaultOwnerWallet) + + // Fetch the vault again to confirm deletion (should be empty) + const afterDeleteResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + + assert.equal( + afterDeleteResult.result.account_objects.length, + 0, + 'Vault should be deleted from account objects', + ) + }, + TIMEOUT, + ) + + it( + 'MPT in vault', + // eslint-disable-next-line max-statements -- needed to test all Vault transactions in one sequence flow + async () => { + // --- Issue MPT --- + const mptCreateTx: MPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + AssetScale: 2, + Flags: { + tfMPTCanTransfer: true, + tfMPTCanClawback: true, + }, + Account: issuerWallet.address, + } + + const response = await testTransaction( + testContext.client, + mptCreateTx, + issuerWallet, + ) + + const txResponse: TxResponse = await testContext.client.request({ + command: 'tx', + transaction: response.result.tx_json.hash, + }) + + const mptIssuanceId = ( + txResponse.result.meta as MPTokenIssuanceCreateMetadata + ).mpt_issuance_id as string + + // --- Holder Authorizes to hold MPT --- + const mptAuthorizeTx: MPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + MPTokenIssuanceID: mptIssuanceId, + Account: holderWallet.classicAddress, + } + + await testTransaction(testContext.client, mptAuthorizeTx, holderWallet) + + // --- Send some MPTs to Holder --- + const paymentTx: Payment = { + TransactionType: 'Payment', + Account: issuerWallet.classicAddress, + Destination: holderWallet.classicAddress, + Amount: { + mpt_issuance_id: mptIssuanceId, + value: '1000', + }, + } + + await testTransaction(testContext.client, paymentTx, issuerWallet) + + // --- VaultCreate --- + const vaultCreateTx: VaultCreate = { + TransactionType: 'VaultCreate', + Account: vaultOwnerWallet.classicAddress, + Asset: { + mpt_issuance_id: mptIssuanceId, + }, + WithdrawalPolicy: + VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + Data: stringToHex('vault metadata'), + MPTokenMetadata: stringToHex('share metadata'), + AssetsMaximum: '500', + Flags: VaultCreateFlags.tfVaultShareNonTransferable, + } + + await testTransaction(testContext.client, vaultCreateTx, vaultOwnerWallet) + + const result = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const vault = result.result.account_objects[0] as Vault + const vaultId = vault.index + const asset = vault.Asset as MPTCurrency + const assetsMaximum = vault.AssetsMaximum as string + const vaultFlags = vault.Flags + + // confirm that the Vault was actually created + assert.equal(result.result.account_objects.length, 1) + assert.isDefined(vault, 'Vault ledger object should exist') + assert.equal(vault.Owner, vaultOwnerWallet.classicAddress) + assert.equal(asset.mpt_issuance_id, mptIssuanceId) + assert.equal( + vault.WithdrawalPolicy, + VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + ) + assert.equal(vault.Data, vaultCreateTx.Data) + assert.equal(assetsMaximum, '500') + assert.notEqual(vaultFlags, VaultFlags.lsfVaultPrivate) + + // --- VaultSet Transaction --- + // Increase the AssetsMaximum to 1000 and update Data + const vaultSetTx: VaultSet = { + TransactionType: 'VaultSet', + Account: vaultOwnerWallet.classicAddress, + VaultID: vaultId, + AssetsMaximum: '1000', + Data: stringToHex('updated metadata'), + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultSetTx, vaultOwnerWallet) + + // Fetch the vault again to confirm updates + const updatedResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const updatedVault = updatedResult.result.account_objects[0] as Vault + + assert.equal(updatedVault.AssetsMaximum, '1000') + assert.equal(updatedVault.Data, stringToHex('updated metadata')) + + // --- VaultDeposit Transaction --- + // Deposit 10 MPT to the vault + const depositAmount = '10' + const vaultDepositTx: VaultDeposit = { + TransactionType: 'VaultDeposit', + Account: holderWallet.classicAddress, + VaultID: vaultId, + Amount: { + mpt_issuance_id: mptIssuanceId, + value: depositAmount, + }, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultDepositTx, holderWallet) + + // Fetch the vault again to confirm deposit + const afterDepositResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const afterDepositVault = afterDepositResult.result + .account_objects[0] as Vault + + // Should have new balance after deposit (this assumes AssetsTotal tracks deposits) + assert.equal( + afterDepositVault.AssetsTotal, + depositAmount, + 'Vault should reflect deposited assets', + ) + + // --- VaultWithdraw Transaction --- + // Withdraw 5 MPT from the vault + const withdrawAmount = '5' + const vaultWithdrawTx: VaultWithdraw = { + TransactionType: 'VaultWithdraw', + Account: holderWallet.classicAddress, + VaultID: vaultId, + Amount: { + mpt_issuance_id: mptIssuanceId, + value: withdrawAmount, + }, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultWithdrawTx, holderWallet) + + // Fetch the vault again to confirm withdrawal + const afterWithdrawResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const afterWithdrawVault = afterWithdrawResult.result + .account_objects[0] as Vault + + // Should have reduced balance after withdrawal (should be 0 if all withdrawn) + assert.equal( + afterWithdrawVault.AssetsTotal ?? '0', + ( + BigInt(afterDepositVault.AssetsTotal ?? '0') - BigInt(withdrawAmount) + ).toString(), + 'Vault should reflect withdrawn assets', + ) + + // --- VaultClawback Transaction --- + // Claw back 5 MPT from the vault + const clawbackAmount = '5' + const vaultClawbackTx: VaultClawback = { + TransactionType: 'VaultClawback', + Account: issuerWallet.classicAddress, + VaultID: vaultId, + Holder: holderWallet.classicAddress, + Amount: { + mpt_issuance_id: mptIssuanceId, + value: clawbackAmount, + }, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultClawbackTx, issuerWallet) + + // Fetch the vault again to confirm clawback + const afterClawbackResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + const afterClawbackVault = afterClawbackResult.result + .account_objects[0] as Vault + + assert.equal( + afterClawbackVault.AssetsTotal ?? '0', + ( + BigInt(afterWithdrawVault.AssetsTotal ?? '0') - BigInt(clawbackAmount) + ).toString(), + 'Vault should reflect assets after clawback', + ) + + // --- VaultDelete Transaction --- + const vaultDeleteTx: VaultDelete = { + TransactionType: 'VaultDelete', + Account: vaultOwnerWallet.classicAddress, + VaultID: vaultId, + Fee: '5000000', + } + + await testTransaction(testContext.client, vaultDeleteTx, vaultOwnerWallet) + + // Fetch the vault again to confirm deletion (should be empty) + const afterDeleteResult = await testContext.client.request({ + command: 'account_objects', + account: vaultOwnerWallet.classicAddress, + type: 'vault', + }) + + assert.equal( + afterDeleteResult.result.account_objects.length, + 0, + 'Vault should be deleted from account objects', + ) + }, + TIMEOUT, + ) +}) diff --git a/packages/xrpl/test/integration/transactions/trustSet.test.ts b/packages/xrpl/test/integration/transactions/trustSet.test.ts index 7736d0d107..1e18503929 100644 --- a/packages/xrpl/test/integration/transactions/trustSet.test.ts +++ b/packages/xrpl/test/integration/transactions/trustSet.test.ts @@ -1,6 +1,8 @@ import { assert } from 'chai' import { TrustSet, percentToQuality, Wallet } from '../../../src' +import { RippleState } from '../../../src/models/ledger/index' +import { RippleStateFlags } from '../../../src/models/ledger/RippleState' import serverUrl from '../serverUrl' import { setupClient, @@ -18,10 +20,8 @@ describe('TrustSet', function () { beforeEach(async () => { testContext = await setupClient(serverUrl) - if (!wallet2) { - // eslint-disable-next-line require-atomic-updates -- race condition doesn't really matter - wallet2 = await generateFundedWallet(testContext.client) - } + // eslint-disable-next-line require-atomic-updates -- race condition doesn't really matter + wallet2 ??= await generateFundedWallet(testContext.client) }) afterEach(async () => teardownClient(testContext)) @@ -85,4 +85,60 @@ describe('TrustSet', function () { }, TIMEOUT, ) + + it( + 'Create a Deep-Frozen trustline', + async () => { + assert(wallet2 != null) + // deep-freeze a trustline with the specified counter-party/currency-code + const tx: TrustSet = { + TransactionType: 'TrustSet', + Account: testContext.wallet.classicAddress, + LimitAmount: { + currency: 'USD', + issuer: wallet2.classicAddress, + value: '10', + }, + Flags: { + tfSetFreeze: true, + tfSetDeepFreeze: true, + }, + } + + const response = await testTransaction( + testContext.client, + tx, + testContext.wallet, + ) + assert.equal(response.result.engine_result, 'tesSUCCESS') + + // assert that the trustline is frozen + const trustLine = await testContext.client.request({ + command: 'account_lines', + account: testContext.wallet.classicAddress, + }) + assert.equal(trustLine.result.lines[0].freeze, true) + + // verify that the trust-line is deep-frozen + // this operation cannot be done with the account_lines RPC + const account_objects = await testContext.client.request({ + command: 'account_objects', + account: testContext.wallet.classicAddress, + }) + + const rippleState = account_objects.result + .account_objects[0] as RippleState + + // Depending on the pseudo-random generation of accounts, + // either of the below leger-object flags must be set + + const hasDeepFreeze = + // eslint-disable-next-line no-bitwise -- required to validate flag + (rippleState.Flags & RippleStateFlags.lsfHighDeepFreeze) | + // eslint-disable-next-line no-bitwise -- required to validate flag + (rippleState.Flags & RippleStateFlags.lsfLowDeepFreeze) + assert.isTrue(hasDeepFreeze !== 0) + }, + TIMEOUT, + ) }) diff --git a/packages/xrpl/test/integration/transactions/xchainClaim.test.ts b/packages/xrpl/test/integration/transactions/xchainClaim.test.ts index 1987ceec4a..3465ed4724 100644 --- a/packages/xrpl/test/integration/transactions/xchainClaim.test.ts +++ b/packages/xrpl/test/integration/transactions/xchainClaim.test.ts @@ -9,6 +9,7 @@ import { XChainCreateClaimID, xrpToDrops, } from '../../../src' +import getFeeXrp from '../../../src/sugar/getFeeXrp' import serverUrl from '../serverUrl' import { setupBridge, @@ -39,6 +40,7 @@ describe('XChainCreateBridge', function () { const destination = await generateFundedWallet(testContext.client) const otherChainSource = Wallet.generate() const amount = xrpToDrops(10) + const netFee = xrpToDrops(await getFeeXrp(testContext.client)) const claimIdTx: XChainCreateClaimID = { TransactionType: 'XChainCreateClaimID', @@ -103,7 +105,10 @@ describe('XChainCreateBridge', function () { ) assert.equal( finalBalance, - initialBalance + Number(amount) - Number(signatureReward) - 12, + initialBalance + + Number(amount) - + Number(signatureReward) - + Number(netFee), "The destination's balance should not change yet", ) }, diff --git a/packages/xrpl/test/integration/utils.ts b/packages/xrpl/test/integration/utils.ts index 87f4529acb..43266526e1 100644 --- a/packages/xrpl/test/integration/utils.ts +++ b/packages/xrpl/test/integration/utils.ts @@ -1,3 +1,4 @@ +import BigNumber from 'bignumber.js' import { assert } from 'chai' import omit from 'lodash/omit' import throttle from 'lodash/throttle' @@ -13,7 +14,7 @@ import { ECDSA, AccountLinesRequest, IssuedCurrency, - Currency, + XRP, } from '../../src' import { AMMCreate, @@ -92,6 +93,38 @@ export function subscribeDone(client: Client): void { client.removeAllListeners() } +/** + * Checks if a specific amendment is enabled on the server. + * + * @param client - The XRPL client. + * @param amendmentName - The name of the amendment to check (e.g., 'PermissionDelegation'). + * @returns True if the amendment is enabled, false otherwise. + */ +export async function isAmendmentEnabled( + client: Client, + amendmentName: string, +): Promise { + try { + const featureResponse = await client.request({ + command: 'feature', + }) + + // Search through all features to find the one with the matching name + const features = featureResponse.result.features + for (const feature of Object.values(features)) { + if (feature.name === amendmentName) { + return feature.enabled + } + } + + // Amendment not found + return false + } catch (error) { + // If the feature command fails, assume the amendment is not enabled + return false + } +} + export async function submitTransaction({ client, transaction, @@ -231,6 +264,8 @@ export async function verifySubmittedTransaction( * the server's sequence numbers. This is a fix to retry the transaction if it fails due to tefPAST_SEQ. * @param retry.count - How many times the request should be retried. * @param retry.delayMs - How long to wait between retries. + * @param errCode - When this parameter is defined, it signifies the transaction should fail with the expected + * errCode (e.g. tecNO_PERMISSION). * @returns The response of the transaction. */ // eslint-disable-next-line max-params -- Test function, many params are needed @@ -242,6 +277,7 @@ export async function testTransaction( count: number delayMs: number }, + errCode?: string, ): Promise { // Accept any un-validated changes. @@ -256,6 +292,11 @@ export async function testTransaction( // check that the transaction was successful assert.equal(response.type, 'response') + if (errCode) { + assert.equal(errCode, response.result.engine_result) + return response + } + if (response.result.engine_result !== 'tesSUCCESS') { // eslint-disable-next-line no-console -- See output console.error( @@ -373,11 +414,14 @@ export async function getIOUBalance( return (await client.request(request)).result.lines[0].balance } -export async function createAMMPool(client: Client): Promise<{ +export async function createAMMPool( + client: Client, + enableAMMClawback = false, +): Promise<{ issuerWallet: Wallet lpWallet: Wallet - asset: Currency - asset2: Currency + asset: XRP + asset2: IssuedCurrency }> { const lpWallet = await generateFundedWallet(client) const issuerWallet = await generateFundedWallet(client) @@ -391,6 +435,16 @@ export async function createAMMPool(client: Client): Promise<{ await testTransaction(client, accountSetTx, issuerWallet) + if (enableAMMClawback) { + const accountSetTx2: AccountSet = { + TransactionType: 'AccountSet', + Account: issuerWallet.classicAddress, + SetFlag: AccountSetAsfFlags.asfAllowTrustLineClawback, + } + + await testTransaction(client, accountSetTx2, issuerWallet) + } + const trustSetTx: TrustSet = { TransactionType: 'TrustSet', Flags: TrustSetFlags.tfClearNoRipple, @@ -431,8 +485,8 @@ export async function createAMMPool(client: Client): Promise<{ await testTransaction(client, ammCreateTx, lpWallet) - const asset: Currency = { currency: 'XRP' } - const asset2: Currency = { + const asset: XRP = { currency: 'XRP' } + const asset2: IssuedCurrency = { currency: currencyCode, issuer: issuerWallet.classicAddress, } @@ -444,3 +498,16 @@ export async function createAMMPool(client: Client): Promise<{ asset2, } } + +export async function fetchAccountReserveFee( + client: Client, +): Promise { + const response = await client.request({ command: 'server_state' }) + const fee = response.result.state.validated_ledger?.reserve_base + + if (fee == null) { + return null + } + + return new BigNumber(fee).dp(0, BigNumber.ROUND_CEIL).toString(10) +} diff --git a/packages/xrpl/test/models/AMMBid.test.ts b/packages/xrpl/test/models/AMMBid.test.ts index d7f0ea7385..9cb95cfea1 100644 --- a/packages/xrpl/test/models/AMMBid.test.ts +++ b/packages/xrpl/test/models/AMMBid.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAMMBid } from '../../src/models/transactions/AMMBid' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMBid) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMBid, message) /** * AMMBid Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateAMMBid } from '../../src/models/transactions/AMMBid' * Providing runtime verification testing for each specific transaction type. */ describe('AMMBid', function () { - let bid + let bid: any beforeEach(function () { bid = { @@ -55,54 +57,47 @@ describe('AMMBid', function () { }, ], Sequence: 1337, - } as any + } }) it(`verifies valid AMMBid`, function () { - assert.doesNotThrow(() => validateAMMBid(bid)) - assert.doesNotThrow(() => validate(bid)) + assertValid(bid) }) it(`throws w/ missing field Asset`, function () { delete bid.Asset const errorMessage = 'AMMBid: missing field Asset' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ Asset must be a Currency`, function () { bid.Asset = 1234 const errorMessage = 'AMMBid: Asset must be a Currency' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ missing field Asset2`, function () { delete bid.Asset2 const errorMessage = 'AMMBid: missing field Asset2' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ Asset2 must be a Currency`, function () { bid.Asset2 = 1234 const errorMessage = 'AMMBid: Asset2 must be a Currency' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ BidMin must be an Amount`, function () { bid.BidMin = 5 const errorMessage = 'AMMBid: BidMin must be an Amount' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ BidMax must be an Amount`, function () { bid.BidMax = 10 const errorMessage = 'AMMBid: BidMax must be an Amount' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ AuthAccounts length must not be greater than 4`, function () { @@ -113,15 +108,13 @@ describe('AMMBid', function () { }) const errorMessage = 'AMMBid: AuthAccounts length must not be greater than 4' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ AuthAccounts must be an AuthAccount array`, function () { bid.AuthAccounts = 1234 const errorMessage = 'AMMBid: AuthAccounts must be an AuthAccount array' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ invalid AuthAccounts when AuthAccount is null`, function () { @@ -129,8 +122,7 @@ describe('AMMBid', function () { AuthAccount: null, } const errorMessage = 'AMMBid: invalid AuthAccounts' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ invalid AuthAccounts when AuthAccount is undefined`, function () { @@ -138,8 +130,7 @@ describe('AMMBid', function () { AuthAccount: undefined, } const errorMessage = 'AMMBid: invalid AuthAccounts' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ invalid AuthAccounts when AuthAccount is not an object`, function () { @@ -147,8 +138,7 @@ describe('AMMBid', function () { AuthAccount: 1234, } const errorMessage = 'AMMBid: invalid AuthAccounts' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ invalid AuthAccounts when AuthAccount.Account is not a string`, function () { @@ -158,8 +148,7 @@ describe('AMMBid', function () { }, } const errorMessage = 'AMMBid: invalid AuthAccounts' - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) it(`throws w/ AuthAccounts must not include sender's address`, function () { @@ -170,7 +159,6 @@ describe('AMMBid', function () { } const errorMessage = "AMMBid: AuthAccounts must not include sender's address" - assert.throws(() => validateAMMBid(bid), ValidationError, errorMessage) - assert.throws(() => validate(bid), ValidationError, errorMessage) + assertInvalid(bid, errorMessage) }) }) diff --git a/packages/xrpl/test/models/AMMClawback.test.ts b/packages/xrpl/test/models/AMMClawback.test.ts new file mode 100644 index 0000000000..065839ee8f --- /dev/null +++ b/packages/xrpl/test/models/AMMClawback.test.ts @@ -0,0 +1,120 @@ +import { + AMMClawbackFlags, + validateAMMClawback, +} from '../../src/models/transactions/AMMClawback' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMClawback) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMClawback, message) + +/** + * AMMClawback Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('AMMClawback', function () { + let ammClawback: any + + beforeEach(function () { + ammClawback = { + TransactionType: 'AMMClawback', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Holder: 'rPyfep3gcLzkosKC9XiE77Y8DZWG6iWDT9', + Asset: { + currency: 'USD', + issuer: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + }, + Asset2: { + currency: 'XRP', + }, + Amount: { + currency: 'USD', + issuer: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + value: '1000', + }, + Sequence: 1337, + } + }) + + it(`verifies valid AMMClawback`, function () { + assertValid(ammClawback) + }) + + it(`verifies valid AMMClawback without Amount`, function () { + delete ammClawback.Amount + assertValid(ammClawback) + }) + + it(`verifies valid AMMClawback with tfClawTwoAssets`, function () { + ammClawback.flags = AMMClawbackFlags.tfClawTwoAssets + assertValid(ammClawback) + }) + + it(`throws w/ missing Holder`, function () { + delete ammClawback.Holder + const errorMessage = 'AMMClawback: missing field Holder' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ invalid field Holder`, function () { + ammClawback.Holder = 1234 + const errorMessage = 'AMMClawback: invalid field Holder' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ Holder and Asset.issuer must be distinct`, function () { + ammClawback.Holder = ammClawback.Asset.issuer + const errorMessage = 'AMMClawback: Holder and Asset.issuer must be distinct' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ missing Asset`, function () { + delete ammClawback.Asset + const errorMessage = 'AMMClawback: missing field Asset' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ invalid field Asset`, function () { + ammClawback.Asset = '1000' + const errorMessage = 'AMMClawback: invalid field Asset' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ Account must be the same as Asset.issuer`, function () { + ammClawback.Account = 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn' + const errorMessage = 'AMMClawback: Account must be the same as Asset.issuer' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ missing Asset2`, function () { + delete ammClawback.Asset2 + const errorMessage = 'AMMClawback: missing field Asset2' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ invalid field Asset2`, function () { + ammClawback.Asset2 = '1000' + const errorMessage = 'AMMClawback: invalid field Asset2' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ invalid field Amount`, function () { + ammClawback.Amount = 1000 + const errorMessage = 'AMMClawback: invalid field Amount' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ Amount.currency must match Asset.currency`, function () { + ammClawback.Amount.currency = 'ETH' + const errorMessage = + 'AMMClawback: Amount.currency must match Asset.currency' + assertInvalid(ammClawback, errorMessage) + }) + + it(`throws w/ Amount.issuer must match Amount.issuer`, function () { + ammClawback.Amount.issuer = 'rnYgaEtpqpNRt3wxE39demVpDAA817rQEY' + const errorMessage = 'AMMClawback: Amount.issuer must match Amount.issuer' + assertInvalid(ammClawback, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/AMMCreate.test.ts b/packages/xrpl/test/models/AMMCreate.test.ts index 56242140ab..d785bf001d 100644 --- a/packages/xrpl/test/models/AMMCreate.test.ts +++ b/packages/xrpl/test/models/AMMCreate.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAMMCreate } from '../../src/models/transactions/AMMCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMCreate, message) /** * AMMCreate Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateAMMCreate } from '../../src/models/transactions/AMMCreate' * Providing runtime verification testing for each specific transaction type. */ describe('AMMCreate', function () { - let ammCreate + let ammCreate: any beforeEach(function () { ammCreate = { @@ -23,99 +25,58 @@ describe('AMMCreate', function () { }, TradingFee: 12, Sequence: 1337, - } as any + } }) it(`verifies valid AMMCreate`, function () { - assert.doesNotThrow(() => validateAMMCreate(ammCreate)) - assert.doesNotThrow(() => validate(ammCreate)) + assertValid(ammCreate) }) it(`throws w/ missing Amount`, function () { delete ammCreate.Amount const errorMessage = 'AMMCreate: missing field Amount' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws w/ Amount must be an Amount`, function () { ammCreate.Amount = 1000 const errorMessage = 'AMMCreate: Amount must be an Amount' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws w/ missing Amount2`, function () { delete ammCreate.Amount2 const errorMessage = 'AMMCreate: missing field Amount2' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws w/ Amount2 must be an Amount`, function () { ammCreate.Amount2 = 1000 const errorMessage = 'AMMCreate: Amount2 must be an Amount' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws w/ missing TradingFee`, function () { delete ammCreate.TradingFee const errorMessage = 'AMMCreate: missing field TradingFee' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws w/ TradingFee must be a number`, function () { ammCreate.TradingFee = '12' const errorMessage = 'AMMCreate: TradingFee must be a number' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws when TradingFee is greater than 1000`, function () { ammCreate.TradingFee = 1001 const errorMessage = 'AMMCreate: TradingFee must be between 0 and 1000' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) it(`throws when TradingFee is a negative number`, function () { ammCreate.TradingFee = -1 const errorMessage = 'AMMCreate: TradingFee must be between 0 and 1000' - assert.throws( - () => validateAMMCreate(ammCreate), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammCreate), ValidationError, errorMessage) + assertInvalid(ammCreate, errorMessage) }) }) diff --git a/packages/xrpl/test/models/AMMDelete.test.ts b/packages/xrpl/test/models/AMMDelete.test.ts index 8c4c9936c8..4d81bfaa39 100644 --- a/packages/xrpl/test/models/AMMDelete.test.ts +++ b/packages/xrpl/test/models/AMMDelete.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAMMDelete } from '../../src/models/transactions/AMMDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMDelete, message) /** * AMMDelete Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateAMMDelete } from '../../src/models/transactions/AMMDelete' * Providing runtime verification testing for each specific transaction type. */ describe('AMMDelete', function () { - let ammDelete + let ammDelete: any beforeEach(function () { ammDelete = { @@ -28,51 +30,30 @@ describe('AMMDelete', function () { }) it(`verifies valid AMMDelete`, function () { - assert.doesNotThrow(() => validateAMMDelete(ammDelete)) - assert.doesNotThrow(() => validate(ammDelete)) + assertValid(ammDelete) }) it(`throws w/ missing field Asset`, function () { delete ammDelete.Asset const errorMessage = 'AMMDelete: missing field Asset' - assert.throws( - () => validateAMMDelete(ammDelete), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammDelete), ValidationError, errorMessage) + assertInvalid(ammDelete, errorMessage) }) it(`throws w/ Asset must be a Currency`, function () { ammDelete.Asset = 1234 const errorMessage = 'AMMDelete: Asset must be a Currency' - assert.throws( - () => validateAMMDelete(ammDelete), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammDelete), ValidationError, errorMessage) + assertInvalid(ammDelete, errorMessage) }) it(`throws w/ missing field Asset2`, function () { delete ammDelete.Asset2 const errorMessage = 'AMMDelete: missing field Asset2' - assert.throws( - () => validateAMMDelete(ammDelete), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammDelete), ValidationError, errorMessage) + assertInvalid(ammDelete, errorMessage) }) it(`throws w/ Asset2 must be a Currency`, function () { ammDelete.Asset2 = 1234 const errorMessage = 'AMMDelete: Asset2 must be a Currency' - assert.throws( - () => validateAMMDelete(ammDelete), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(ammDelete), ValidationError, errorMessage) + assertInvalid(ammDelete, errorMessage) }) }) diff --git a/packages/xrpl/test/models/AMMDeposit.test.ts b/packages/xrpl/test/models/AMMDeposit.test.ts index 0f041d86f4..d80a49b0d3 100644 --- a/packages/xrpl/test/models/AMMDeposit.test.ts +++ b/packages/xrpl/test/models/AMMDeposit.test.ts @@ -1,8 +1,12 @@ /* eslint-disable no-bitwise -- bitwise necessary for enabling flags */ -import { assert } from 'chai' -import { AMMDepositFlags, validate, ValidationError } from '../../src' +import { AMMDepositFlags } from '../../src' import { validateAMMDeposit } from '../../src/models/transactions/AMMDeposit' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMDeposit) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMDeposit, message) /** * AMMDeposit Transaction Verification Testing. @@ -15,7 +19,7 @@ describe('AMMDeposit', function () { issuer: 'rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg', value: '1000', } - let deposit + let deposit: any beforeEach(function () { deposit = { @@ -36,15 +40,13 @@ describe('AMMDeposit', function () { it(`verifies valid AMMDeposit with LPTokenOut`, function () { deposit.LPTokenOut = LPTokenOut deposit.Flags |= AMMDepositFlags.tfLPToken - assert.doesNotThrow(() => validateAMMDeposit(deposit)) - assert.doesNotThrow(() => validate(deposit)) + assertValid(deposit) }) it(`verifies valid AMMDeposit with Amount`, function () { deposit.Amount = '1000' deposit.Flags |= AMMDepositFlags.tfSingleAsset - assert.doesNotThrow(() => validateAMMDeposit(deposit)) - assert.doesNotThrow(() => validate(deposit)) + assertValid(deposit) }) it(`verifies valid AMMDeposit with Amount and Amount2`, function () { @@ -55,78 +57,50 @@ describe('AMMDeposit', function () { value: '2.5', } deposit.Flags |= AMMDepositFlags.tfTwoAsset - assert.doesNotThrow(() => validateAMMDeposit(deposit)) - assert.doesNotThrow(() => validate(deposit)) + assertValid(deposit) }) it(`verifies valid AMMDeposit with Amount and LPTokenOut`, function () { deposit.Amount = '1000' deposit.LPTokenOut = LPTokenOut deposit.Flags |= AMMDepositFlags.tfOneAssetLPToken - assert.doesNotThrow(() => validateAMMDeposit(deposit)) - assert.doesNotThrow(() => validate(deposit)) + assertValid(deposit) }) it(`verifies valid AMMDeposit with Amount and EPrice`, function () { deposit.Amount = '1000' deposit.EPrice = '25' deposit.Flags |= AMMDepositFlags.tfLimitLPToken - assert.doesNotThrow(() => validateAMMDeposit(deposit)) - assert.doesNotThrow(() => validate(deposit)) + assertValid(deposit) }) it(`throws w/ missing field Asset`, function () { delete deposit.Asset const errorMessage = 'AMMDeposit: missing field Asset' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ Asset must be a Currency`, function () { deposit.Asset = 1234 const errorMessage = 'AMMDeposit: Asset must be a Currency' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ missing field Asset2`, function () { delete deposit.Asset2 const errorMessage = 'AMMDeposit: missing field Asset2' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ Asset2 must be a Currency`, function () { deposit.Asset2 = 1234 const errorMessage = 'AMMDeposit: Asset2 must be a Currency' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ must set at least LPTokenOut or Amount`, function () { const errorMessage = 'AMMDeposit: must set at least LPTokenOut or Amount' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ must set Amount with Amount2`, function () { @@ -136,69 +110,39 @@ describe('AMMDeposit', function () { value: '2.5', } const errorMessage = 'AMMDeposit: must set Amount with Amount2' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ must set Amount with EPrice`, function () { deposit.EPrice = '25' const errorMessage = 'AMMDeposit: must set Amount with EPrice' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ LPTokenOut must be an IssuedCurrencyAmount`, function () { deposit.LPTokenOut = 1234 const errorMessage = 'AMMDeposit: LPTokenOut must be an IssuedCurrencyAmount' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ Amount must be an Amount`, function () { deposit.Amount = 1234 const errorMessage = 'AMMDeposit: Amount must be an Amount' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ Amount2 must be an Amount`, function () { deposit.Amount = '1000' deposit.Amount2 = 1234 const errorMessage = 'AMMDeposit: Amount2 must be an Amount' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) it(`throws w/ EPrice must be an Amount`, function () { deposit.Amount = '1000' deposit.EPrice = 1234 const errorMessage = 'AMMDeposit: EPrice must be an Amount' - assert.throws( - () => validateAMMDeposit(deposit), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(deposit), ValidationError, errorMessage) + assertInvalid(deposit, errorMessage) }) }) diff --git a/packages/xrpl/test/models/AMMVote.test.ts b/packages/xrpl/test/models/AMMVote.test.ts index 25f6cdeffe..71a4e78f27 100644 --- a/packages/xrpl/test/models/AMMVote.test.ts +++ b/packages/xrpl/test/models/AMMVote.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAMMVote } from '../../src/models/transactions/AMMVote' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMVote) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMVote, message) /** * AMMVote Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateAMMVote } from '../../src/models/transactions/AMMVote' * Providing runtime verification testing for each specific transaction type. */ describe('AMMVote', function () { - let vote + let vote: any beforeEach(function () { vote = { @@ -28,63 +30,54 @@ describe('AMMVote', function () { }) it(`verifies valid AMMVote`, function () { - assert.doesNotThrow(() => validateAMMVote(vote)) - assert.doesNotThrow(() => validate(vote)) + assertValid(vote) }) it(`throws w/ missing field Asset`, function () { delete vote.Asset const errorMessage = 'AMMVote: missing field Asset' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws w/ Asset must be a Currency`, function () { vote.Asset = 1234 const errorMessage = 'AMMVote: Asset must be a Currency' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws w/ missing field Asset2`, function () { delete vote.Asset2 const errorMessage = 'AMMVote: missing field Asset2' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws w/ Asset2 must be a Currency`, function () { vote.Asset2 = 1234 const errorMessage = 'AMMVote: Asset2 must be a Currency' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws w/ missing field TradingFee`, function () { delete vote.TradingFee const errorMessage = 'AMMVote: missing field TradingFee' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws w/ TradingFee must be a number`, function () { vote.TradingFee = '25' const errorMessage = 'AMMVote: TradingFee must be a number' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws when TradingFee is greater than AMM_MAX_TRADING_FEE`, function () { vote.TradingFee = 1001 const errorMessage = 'AMMVote: TradingFee must be between 0 and 1000' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) it(`throws when TradingFee is a negative number`, function () { vote.TradingFee = -1 const errorMessage = 'AMMVote: TradingFee must be between 0 and 1000' - assert.throws(() => validateAMMVote(vote), ValidationError, errorMessage) - assert.throws(() => validate(vote), ValidationError, errorMessage) + assertInvalid(vote, errorMessage) }) }) diff --git a/packages/xrpl/test/models/AMMWithdraw.test.ts b/packages/xrpl/test/models/AMMWithdraw.test.ts index 47092ef724..bf126b1085 100644 --- a/packages/xrpl/test/models/AMMWithdraw.test.ts +++ b/packages/xrpl/test/models/AMMWithdraw.test.ts @@ -1,8 +1,12 @@ /* eslint-disable no-bitwise -- bitwise necessary for enabling flags */ -import { assert } from 'chai' -import { AMMWithdrawFlags, validate, ValidationError } from '../../src' +import { AMMWithdrawFlags } from '../../src' import { validateAMMWithdraw } from '../../src/models/transactions/AMMWithdraw' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAMMWithdraw) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAMMWithdraw, message) /** * AMMWithdraw Transaction Verification Testing. @@ -15,7 +19,7 @@ describe('AMMWithdraw', function () { issuer: 'rH438jEAzTs5PYtV6CHZqpDpwCKQmPW9Cg', value: '1000', } - let withdraw + let withdraw: any beforeEach(function () { withdraw = { @@ -36,15 +40,13 @@ describe('AMMWithdraw', function () { it(`verifies valid AMMWithdraw with LPTokenIn`, function () { withdraw.LPTokenIn = LPTokenIn withdraw.Flags |= AMMWithdrawFlags.tfLPToken - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw with Amount`, function () { withdraw.Amount = '1000' withdraw.Flags |= AMMWithdrawFlags.tfSingleAsset - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw with Amount and Amount2`, function () { @@ -55,81 +57,56 @@ describe('AMMWithdraw', function () { value: '2.5', } withdraw.Flags |= AMMWithdrawFlags.tfTwoAsset - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw with Amount and LPTokenIn`, function () { withdraw.Amount = '1000' withdraw.LPTokenIn = LPTokenIn withdraw.Flags |= AMMWithdrawFlags.tfOneAssetLPToken - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw with Amount and EPrice`, function () { withdraw.Amount = '1000' withdraw.EPrice = '25' withdraw.Flags |= AMMWithdrawFlags.tfLimitLPToken - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw one asset withdraw all`, function () { withdraw.Amount = '1000' withdraw.Flags |= AMMWithdrawFlags.tfOneAssetWithdrawAll - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`verifies valid AMMWithdraw withdraw all`, function () { withdraw.Flags |= AMMWithdrawFlags.tfWithdrawAll - assert.doesNotThrow(() => validateAMMWithdraw(withdraw)) - assert.doesNotThrow(() => validate(withdraw)) + assertValid(withdraw) }) it(`throws w/ missing field Asset`, function () { delete withdraw.Asset const errorMessage = 'AMMWithdraw: missing field Asset' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ Asset must be a Currency`, function () { withdraw.Asset = 1234 const errorMessage = 'AMMWithdraw: Asset must be a Currency' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ missing field Asset2`, function () { delete withdraw.Asset2 const errorMessage = 'AMMWithdraw: missing field Asset2' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ Asset2 must be a Currency`, function () { withdraw.Asset2 = 1234 const errorMessage = 'AMMWithdraw: Asset2 must be a Currency' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ must set Amount with Amount2`, function () { @@ -139,69 +116,39 @@ describe('AMMWithdraw', function () { value: '2.5', } const errorMessage = 'AMMWithdraw: must set Amount with Amount2' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ must set Amount with EPrice`, function () { withdraw.EPrice = '25' const errorMessage = 'AMMWithdraw: must set Amount with EPrice' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ LPTokenIn must be an IssuedCurrencyAmount`, function () { withdraw.LPTokenIn = 1234 const errorMessage = 'AMMWithdraw: LPTokenIn must be an IssuedCurrencyAmount' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ Amount must be an Amount`, function () { withdraw.Amount = 1234 const errorMessage = 'AMMWithdraw: Amount must be an Amount' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ Amount2 must be an Amount`, function () { withdraw.Amount = '1000' withdraw.Amount2 = 1234 const errorMessage = 'AMMWithdraw: Amount2 must be an Amount' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) it(`throws w/ EPrice must be an Amount`, function () { withdraw.Amount = '1000' withdraw.EPrice = 1234 const errorMessage = 'AMMWithdraw: EPrice must be an Amount' - assert.throws( - () => validateAMMWithdraw(withdraw), - ValidationError, - errorMessage, - ) - assert.throws(() => validate(withdraw), ValidationError, errorMessage) + assertInvalid(withdraw, errorMessage) }) }) diff --git a/packages/xrpl/test/models/CredentialAccept.test.ts b/packages/xrpl/test/models/CredentialAccept.test.ts new file mode 100644 index 0000000000..fbf4f80668 --- /dev/null +++ b/packages/xrpl/test/models/CredentialAccept.test.ts @@ -0,0 +1,84 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { validateCredentialAccept } from '../../src/models/transactions/CredentialAccept' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateCredentialAccept) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCredentialAccept, message) + +/** + * CredentialAccept Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('CredentialAccept', function () { + let credentialAccept: any + + beforeEach(function () { + credentialAccept = { + TransactionType: 'CredentialAccept', + Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Account: 'rNdY9XDnQ4Dr1EgefwU3CBRuAjt3sAutGg', + CredentialType: stringToHex('Passport'), + Sequence: 1337, + Flags: 0, + } as any + }) + + it(`verifies valid CredentialAccept`, function () { + assertValid(credentialAccept) + }) + + it(`throws w/ missing field Account`, function () { + credentialAccept.Account = undefined + const errorMessage = 'CredentialAccept: missing field Account' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ Account not a string`, function () { + credentialAccept.Account = 123 + const errorMessage = 'CredentialAccept: invalid field Account' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ missing field Issuer`, function () { + credentialAccept.Issuer = undefined + const errorMessage = 'CredentialAccept: missing field Issuer' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ Issuer not a string`, function () { + credentialAccept.Issuer = 123 + const errorMessage = 'CredentialAccept: invalid field Issuer' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ missing field CredentialType`, function () { + credentialAccept.CredentialType = undefined + const errorMessage = 'CredentialAccept: missing field CredentialType' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ credentialType field too long`, function () { + credentialAccept.CredentialType = stringToHex('A'.repeat(129)) + const errorMessage = + 'CredentialAccept: CredentialType length cannot be > 128' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ credentialType field empty`, function () { + credentialAccept.CredentialType = '' + const errorMessage = + 'CredentialAccept: CredentialType cannot be an empty string' + assertInvalid(credentialAccept, errorMessage) + }) + + it(`throws w/ credentialType field not hex`, function () { + credentialAccept.CredentialType = 'this is not hex' + const errorMessage = + 'CredentialAccept: CredentialType must be encoded in hex' + assertInvalid(credentialAccept, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/CredentialCreate.test.ts b/packages/xrpl/test/models/CredentialCreate.test.ts new file mode 100644 index 0000000000..4debc22a86 --- /dev/null +++ b/packages/xrpl/test/models/CredentialCreate.test.ts @@ -0,0 +1,116 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { validateCredentialCreate } from '../../src/models/transactions/CredentialCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateCredentialCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCredentialCreate, message) + +/** + * CredentialCreate Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('credentialCreate', function () { + let credentialCreate: any + + beforeEach(function () { + credentialCreate = { + TransactionType: 'CredentialCreate', + Account: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Subject: 'rNdY9XDnQ4Dr1EgefwU3CBRuAjt3sAutGg', + CredentialType: stringToHex('Passport'), + Expiration: 1212025, + URI: stringToHex('TestURI'), + Sequence: 1337, + Flags: 0, + } as any + }) + + it(`verifies valid credentialCreate`, function () { + assertValid(credentialCreate) + }) + + it(`throws w/ missing field Account`, function () { + credentialCreate.Account = undefined + const errorMessage = 'CredentialCreate: missing field Account' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ Account not string`, function () { + credentialCreate.Account = 123 + const errorMessage = 'CredentialCreate: invalid field Account' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ missing field Subject`, function () { + credentialCreate.Subject = undefined + const errorMessage = 'CredentialCreate: missing field Subject' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ Subject not string`, function () { + credentialCreate.Subject = 123 + const errorMessage = 'CredentialCreate: invalid field Subject' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ missing field credentialType`, function () { + credentialCreate.CredentialType = undefined + const errorMessage = 'CredentialCreate: missing field CredentialType' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ credentialType field too long`, function () { + credentialCreate.CredentialType = stringToHex('A'.repeat(129)) + const errorMessage = + 'CredentialCreate: CredentialType length cannot be > 128' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ credentialType field empty`, function () { + credentialCreate.CredentialType = '' + const errorMessage = + 'CredentialCreate: CredentialType cannot be an empty string' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ credentialType field not hex`, function () { + credentialCreate.CredentialType = 'this is not hex' + const errorMessage = + 'CredentialCreate: CredentialType must be encoded in hex' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ Expiration field not number`, function () { + credentialCreate.Expiration = 'this is not a number' + const errorMessage = 'CredentialCreate: invalid field Expiration' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ URI field not a string`, function () { + credentialCreate.URI = 123 + const errorMessage = 'CredentialCreate: invalid field URI' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ URI field empty`, function () { + credentialCreate.URI = '' + const errorMessage = 'CredentialCreate: URI cannot be an empty string' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ URI field too long`, function () { + credentialCreate.URI = stringToHex('A'.repeat(129)) + const errorMessage = 'CredentialCreate: URI length must be <= 256' + assertInvalid(credentialCreate, errorMessage) + }) + + it(`throws w/ URI field not hex`, function () { + credentialCreate.URI = 'this is not hex' + const errorMessage = 'CredentialCreate: URI must be encoded in hex' + assertInvalid(credentialCreate, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/CredentialDelete.test.ts b/packages/xrpl/test/models/CredentialDelete.test.ts new file mode 100644 index 0000000000..4b08bd1949 --- /dev/null +++ b/packages/xrpl/test/models/CredentialDelete.test.ts @@ -0,0 +1,93 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { validateCredentialDelete } from '../../src/models/transactions/CredentialDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateCredentialDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCredentialDelete, message) + +/** + * CredentialDelete Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('CredentialDelete', function () { + let credentialDelete: any + + beforeEach(function () { + credentialDelete = { + TransactionType: 'CredentialDelete', + Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Subject: 'rNdY9XDnQ4Dr1EgefwU3CBRuAjt3sAutGg', + Account: 'rNdY9XDnQ4Dr1EgefwU3CBRuAjt3sAutGg', + CredentialType: stringToHex('Passport'), + Sequence: 1337, + Flags: 0, + } as any + }) + + it(`verifies valid credentialDelete`, function () { + assertValid(credentialDelete) + }) + + it(`throws w/ missing field Account`, function () { + credentialDelete.Account = undefined + const errorMessage = 'CredentialDelete: missing field Account' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ Account not string`, function () { + credentialDelete.Account = 123 + const errorMessage = 'CredentialDelete: invalid field Account' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ Subject not string`, function () { + credentialDelete.Subject = 123 + const errorMessage = 'CredentialDelete: invalid field Subject' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ Issuer not string`, function () { + credentialDelete.Issuer = 123 + const errorMessage = 'CredentialDelete: invalid field Issuer' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ missing field Subject and Issuer`, function () { + credentialDelete.Subject = undefined + credentialDelete.Issuer = undefined + const errorMessage = + 'CredentialDelete: either `Issuer` or `Subject` must be provided' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ missing field credentialType`, function () { + credentialDelete.CredentialType = undefined + const errorMessage = 'CredentialDelete: missing field CredentialType' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ credentialType field too long`, function () { + credentialDelete.CredentialType = stringToHex('A'.repeat(129)) + const errorMessage = + 'CredentialDelete: CredentialType length cannot be > 128' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ credentialType field empty`, function () { + credentialDelete.CredentialType = '' + const errorMessage = + 'CredentialDelete: CredentialType cannot be an empty string' + assertInvalid(credentialDelete, errorMessage) + }) + + it(`throws w/ credentialType field not hex`, function () { + credentialDelete.CredentialType = 'this is not hex' + const errorMessage = + 'CredentialDelete: CredentialType must be encoded in hex' + assertInvalid(credentialDelete, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/DIDDelete.test.ts b/packages/xrpl/test/models/DIDDelete.test.ts index 7248579b43..a3d079a3ba 100644 --- a/packages/xrpl/test/models/DIDDelete.test.ts +++ b/packages/xrpl/test/models/DIDDelete.test.ts @@ -1,7 +1,7 @@ -import { assert } from 'chai' - -import { validate } from '../../src' import { validateDIDDelete } from '../../src/models/transactions/DIDDelete' +import { assertTxIsValid } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateDIDDelete) /** * DIDDelete Transaction Verification Testing. @@ -9,7 +9,7 @@ import { validateDIDDelete } from '../../src/models/transactions/DIDDelete' * Providing runtime verification testing for each specific transaction type. */ describe('DIDDelete', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -22,13 +22,6 @@ describe('DIDDelete', function () { }) it('verifies valid DIDDelete', function () { - assert.doesNotThrow(() => validateDIDDelete(tx)) - assert.doesNotThrow(() => validate(tx)) - }) - - it('throws on invalid DIDDelete', function () { - tx.FakeField = 'blah' - assert.doesNotThrow(() => validateDIDDelete(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) }) diff --git a/packages/xrpl/test/models/DIDSet.test.ts b/packages/xrpl/test/models/DIDSet.test.ts index 2fc16ca597..0aae8287b2 100644 --- a/packages/xrpl/test/models/DIDSet.test.ts +++ b/packages/xrpl/test/models/DIDSet.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateDIDSet } from '../../src/models/transactions/DIDSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateDIDSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateDIDSet, message) /** * DIDSet Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateDIDSet } from '../../src/models/transactions/DIDSet' * Providing runtime verification testing for each specific transaction type. */ describe('DIDSet', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -25,53 +27,25 @@ describe('DIDSet', function () { }) it('verifies valid DIDSet', function () { - assert.doesNotThrow(() => validateDIDSet(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ invalid Data', function () { tx.Data = 123 - assert.throws( - () => validateDIDSet(tx), - ValidationError, - 'DIDSet: invalid field Data', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'DIDSet: invalid field Data', - ) + assertInvalid(tx, 'DIDSet: invalid field Data') }) it('throws w/ invalid DIDDocument', function () { tx.DIDDocument = 123 - assert.throws( - () => validateDIDSet(tx), - ValidationError, - 'DIDSet: invalid field DIDDocument', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'DIDSet: invalid field DIDDocument', - ) + assertInvalid(tx, 'DIDSet: invalid field DIDDocument') }) it('throws w/ invalid URI', function () { tx.URI = 123 - assert.throws( - () => validateDIDSet(tx), - ValidationError, - 'DIDSet: invalid field URI', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'DIDSet: invalid field URI', - ) + assertInvalid(tx, 'DIDSet: invalid field URI') }) it('throws w/ empty DID', function () { @@ -79,14 +53,8 @@ describe('DIDSet', function () { delete tx.DIDDocument delete tx.URI - assert.throws( - () => validateDIDSet(tx), - ValidationError, - 'DIDSet: Must have at least one of `Data`, `DIDDocument`, and `URI`', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'DIDSet: Must have at least one of `Data`, `DIDDocument`, and `URI`', ) }) diff --git a/packages/xrpl/test/models/MPTokenAuthorize.test.ts b/packages/xrpl/test/models/MPTokenAuthorize.test.ts new file mode 100644 index 0000000000..c722128b65 --- /dev/null +++ b/packages/xrpl/test/models/MPTokenAuthorize.test.ts @@ -0,0 +1,64 @@ +import { MPTokenAuthorizeFlags } from '../../src' +import { validateMPTokenAuthorize } from '../../src/models/transactions/MPTokenAuthorize' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateMPTokenAuthorize) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateMPTokenAuthorize, message) + +const TOKEN_ID = '000004C463C52827307480341125DA0577DEFC38405B0E3E' + +/** + * MPTokenAuthorize Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('MPTokenAuthorize', function () { + it(`verifies valid MPTokenAuthorize`, function () { + let validMPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + } as any + + assertValid(validMPTokenAuthorize) + + validMPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Holder: 'rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG', + MPTokenIssuanceID: TOKEN_ID, + } as any + + assertValid(validMPTokenAuthorize) + + validMPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + Flags: MPTokenAuthorizeFlags.tfMPTUnauthorize, + } as any + + assertValid(validMPTokenAuthorize) + + validMPTokenAuthorize = { + TransactionType: 'MPTokenAuthorize', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + Holder: 'rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG', + Flags: MPTokenAuthorizeFlags.tfMPTUnauthorize, + } as any + + assertValid(validMPTokenAuthorize) + }) + + it(`throws w/ missing MPTokenIssuanceID`, function () { + const invalid = { + TransactionType: 'MPTokenAuthorize', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + } as any + + assertInvalid(invalid, 'MPTokenAuthorize: missing field MPTokenIssuanceID') + }) +}) diff --git a/packages/xrpl/test/models/MPTokenIssuanceCreate.test.ts b/packages/xrpl/test/models/MPTokenIssuanceCreate.test.ts new file mode 100644 index 0000000000..3e3c241e6d --- /dev/null +++ b/packages/xrpl/test/models/MPTokenIssuanceCreate.test.ts @@ -0,0 +1,187 @@ +import { stringToHex } from '@xrplf/isomorphic/src/utils' + +import { MPTokenIssuanceCreateFlags, MPTokenMetadata } from '../../src' +import { validateMPTokenIssuanceCreate } from '../../src/models/transactions/MPTokenIssuanceCreate' +import { + MAX_MPT_META_BYTE_LENGTH, + MPT_META_WARNING_HEADER, +} from '../../src/models/utils/mptokenMetadata' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateMPTokenIssuanceCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateMPTokenIssuanceCreate, message) + +/** + * MPTokenIssuanceCreate Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('MPTokenIssuanceCreate', function () { + it(`verifies valid MPTokenIssuanceCreate`, function () { + const validMPTokenIssuanceCreate = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + // 0x7fffffffffffffff + MaximumAmount: '9223372036854775807', + AssetScale: 2, + TransferFee: 1, + Flags: MPTokenIssuanceCreateFlags.tfMPTCanTransfer, + MPTokenMetadata: stringToHex(`{ + "ticker": "TBILL", + "name": "T-Bill Yield Token", + "icon": "https://example.org/tbill-icon.png", + "asset_class": "rwa", + "asset_subclass": "treasury", + "issuer_name": "Example Yield Co." + }`), + } as any + + assertValid(validMPTokenIssuanceCreate) + }) + + it(`throws w/ MPTokenMetadata being an empty string`, function () { + const invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Flags: MPTokenIssuanceCreateFlags.tfMPTCanLock, + MPTokenMetadata: '', + } as any + + assertInvalid( + invalid, + `MPTokenIssuanceCreate: MPTokenMetadata (hex format) must be non-empty and no more than ${MAX_MPT_META_BYTE_LENGTH} bytes.`, + ) + }) + + it(`throws w/ MPTokenMetadata not in hex format`, function () { + const invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Flags: MPTokenIssuanceCreateFlags.tfMPTCanLock, + MPTokenMetadata: 'http://xrpl.org', + } as any + + assertInvalid( + invalid, + `MPTokenIssuanceCreate: MPTokenMetadata (hex format) must be non-empty and no more than ${MAX_MPT_META_BYTE_LENGTH} bytes.`, + ) + }) + + it(`throws w/ Invalid MaximumAmount`, function () { + let invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MaximumAmount: '9223372036854775808', + } as any + + assertInvalid(invalid, 'MPTokenIssuanceCreate: MaximumAmount out of range') + + invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MaximumAmount: '-1', + } as any + + assertInvalid(invalid, 'MPTokenIssuanceCreate: Invalid MaximumAmount') + + invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MaximumAmount: '0x12', + } as any + + assertInvalid(invalid, 'MPTokenIssuanceCreate: Invalid MaximumAmount') + }) + + it(`throws w/ Invalid TransferFee`, function () { + let invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + TransferFee: -1, + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceCreate: TransferFee must be between 0 and 50000', + ) + + invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + TransferFee: 50001, + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceCreate: TransferFee must be between 0 and 50000', + ) + + invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + TransferFee: 100, + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceCreate: TransferFee cannot be provided without enabling tfMPTCanTransfer flag', + ) + + invalid = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + TransferFee: 100, + Flags: { tfMPTCanClawback: true }, + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceCreate: TransferFee cannot be provided without enabling tfMPTCanTransfer flag', + ) + }) +}) + +/** + * Test console warning is logged while validating MPTokenIssuanceCreate for MPTokenMetadata field. + */ +/* eslint-disable no-console -- Require to test console warnings */ +describe('MPTokenMetadata warnings', function () { + beforeEach(() => { + jest.spyOn(console, 'warn') + }) + + afterEach(() => { + jest.restoreAllMocks() + }) + + it(`logs console warning`, function () { + const mptMetaData: MPTokenMetadata = { + ticker: 'TBILL', + name: 'T-Bill Token', + icon: 'http://example.com/icon.png', + asset_class: 'rwa', + asset_subclass: 'treasury', + issuer_name: 'Issuer', + uris: ['apple'], + } as unknown as MPTokenMetadata + const tx = { + TransactionType: 'MPTokenIssuanceCreate', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenMetadata: stringToHex(JSON.stringify(mptMetaData)), + } + + assertValid(tx) + + const expectedMessage = [ + MPT_META_WARNING_HEADER, + '- uris/us: should be an array of objects each with uri/u, category/c, and title/t properties.', + ].join('\n') + + expect(console.warn).toHaveBeenCalledWith( + expect.stringContaining(expectedMessage), + ) + }) +}) +/* eslint-enable no-console */ diff --git a/packages/xrpl/test/models/MPTokenIssuanceDestroy.test.ts b/packages/xrpl/test/models/MPTokenIssuanceDestroy.test.ts new file mode 100644 index 0000000000..2fbc858738 --- /dev/null +++ b/packages/xrpl/test/models/MPTokenIssuanceDestroy.test.ts @@ -0,0 +1,38 @@ +import { validateMPTokenIssuanceDestroy } from '../../src/models/transactions/MPTokenIssuanceDestroy' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateMPTokenIssuanceDestroy) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateMPTokenIssuanceDestroy, message) + +const TOKEN_ID = '000004C463C52827307480341125DA0577DEFC38405B0E3E' + +/** + * MPTokenIssuanceDestroy Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('MPTokenIssuanceDestroy', function () { + it(`verifies valid MPTokenIssuanceDestroy`, function () { + const validMPTokenIssuanceDestroy = { + TransactionType: 'MPTokenIssuanceDestroy', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + } as any + + assertValid(validMPTokenIssuanceDestroy) + }) + + it(`throws w/ missing MPTokenIssuanceID`, function () { + const invalid = { + TransactionType: 'MPTokenIssuanceDestroy', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceDestroy: missing field MPTokenIssuanceID', + ) + }) +}) diff --git a/packages/xrpl/test/models/MPTokenIssuanceSet.test.ts b/packages/xrpl/test/models/MPTokenIssuanceSet.test.ts new file mode 100644 index 0000000000..2a05f2a71a --- /dev/null +++ b/packages/xrpl/test/models/MPTokenIssuanceSet.test.ts @@ -0,0 +1,78 @@ +import { MPTokenIssuanceSetFlags } from '../../src' +import { validateMPTokenIssuanceSet } from '../../src/models/transactions/MPTokenIssuanceSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateMPTokenIssuanceSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateMPTokenIssuanceSet, message) + +const TOKEN_ID = '000004C463C52827307480341125DA0577DEFC38405B0E3E' + +/** + * MPTokenIssuanceSet Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('MPTokenIssuanceSet', function () { + it(`verifies valid MPTokenIssuanceSet`, function () { + let validMPTokenIssuanceSet = { + TransactionType: 'MPTokenIssuanceSet', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + Flags: MPTokenIssuanceSetFlags.tfMPTLock, + } as any + + assertValid(validMPTokenIssuanceSet) + + validMPTokenIssuanceSet = { + TransactionType: 'MPTokenIssuanceSet', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + Holder: 'rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG', + Flags: MPTokenIssuanceSetFlags.tfMPTLock, + } as any + + assertValid(validMPTokenIssuanceSet) + + // It's fine to not specify any flag, it means only tx fee is deducted + validMPTokenIssuanceSet = { + TransactionType: 'MPTokenIssuanceSet', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + Holder: 'rajgkBmMxmz161r8bWYH7CQAFZP5bA9oSG', + } as any + + assertValid(validMPTokenIssuanceSet) + }) + + it(`throws w/ missing MPTokenIssuanceID`, function () { + const invalid = { + TransactionType: 'MPTokenIssuanceSet', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + } as any + + assertInvalid( + invalid, + 'MPTokenIssuanceSet: missing field MPTokenIssuanceID', + ) + }) + + it(`throws w/ conflicting flags`, function () { + const invalid = { + TransactionType: 'MPTokenIssuanceSet', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + MPTokenIssuanceID: TOKEN_ID, + } as any + + invalid.Flags = + // eslint-disable-next-line no-bitwise -- not needed + MPTokenIssuanceSetFlags.tfMPTLock | MPTokenIssuanceSetFlags.tfMPTUnlock + + assertInvalid(invalid, 'MPTokenIssuanceSet: flag conflict') + + invalid.Flags = { tfMPTLock: true, tfMPTUnlock: true } + + assertInvalid(invalid, 'MPTokenIssuanceSet: flag conflict') + }) +}) diff --git a/packages/xrpl/test/models/NFTokenAcceptOffer.test.ts b/packages/xrpl/test/models/NFTokenAcceptOffer.test.ts index f53b14c340..6a91d8ef4f 100644 --- a/packages/xrpl/test/models/NFTokenAcceptOffer.test.ts +++ b/packages/xrpl/test/models/NFTokenAcceptOffer.test.ts @@ -1,6 +1,10 @@ -import { assert } from 'chai' +import { validateNFTokenAcceptOffer } from '../../src/models/transactions/NFTokenAcceptOffer' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError } from '../../src' +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateNFTokenAcceptOffer) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenAcceptOffer, message) const NFTOKEN_BUY_OFFER = 'AED08CC1F50DD5F23A1948AF86153A3F3B7593E5EC77D65A02BB1B29E05AB6AF' @@ -23,7 +27,7 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenAcceptOffer)) + assertValid(validNFTokenAcceptOffer) }) it(`verifies valid NFTokenAcceptOffer with NFTokenSellOffer`, function () { @@ -36,7 +40,7 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenAcceptOffer)) + assertValid(validNFTokenAcceptOffer) }) it(`throws w/ missing NFTokenSellOffer and NFTokenBuyOffer`, function () { @@ -48,9 +52,8 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenAcceptOffer: must set either NFTokenSellOffer or NFTokenBuyOffer', ) }) @@ -66,9 +69,8 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenAcceptOffer: both NFTokenSellOffer and NFTokenBuyOffer must be set if using brokered mode', ) }) @@ -84,9 +86,8 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenAcceptOffer: both NFTokenSellOffer and NFTokenBuyOffer must be set if using brokered mode', ) }) @@ -102,7 +103,7 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenAcceptOffer)) + assertValid(validNFTokenAcceptOffer) }) it(`verifies valid NFTokenAcceptOffer with NFTokenBrokerFee`, function () { @@ -117,7 +118,7 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenAcceptOffer)) + assertValid(validNFTokenAcceptOffer) }) it(`throws w/ NFTokenBrokerFee === 0`, function () { @@ -132,9 +133,8 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenAcceptOffer: NFTokenBrokerFee must be greater than 0; omit if there is no fee', ) }) @@ -151,9 +151,8 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenAcceptOffer: NFTokenBrokerFee must be greater than 0; omit if there is no fee', ) }) @@ -170,10 +169,6 @@ describe('NFTokenAcceptOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenAcceptOffer: invalid NFTokenBrokerFee', - ) + assertInvalid(invalid, 'NFTokenAcceptOffer: invalid NFTokenBrokerFee') }) }) diff --git a/packages/xrpl/test/models/NFTokenBurn.test.ts b/packages/xrpl/test/models/NFTokenBurn.test.ts index 9d799a3262..33d56c26da 100644 --- a/packages/xrpl/test/models/NFTokenBurn.test.ts +++ b/packages/xrpl/test/models/NFTokenBurn.test.ts @@ -1,6 +1,9 @@ -import { assert } from 'chai' +import { validateNFTokenBurn } from '../../src/models/transactions/NFTokenBurn' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError } from '../../src' +const assertValid = (tx: any): void => assertTxIsValid(tx, validateNFTokenBurn) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenBurn, message) const TOKEN_ID = '00090032B5F762798A53D543A014CAF8B297CFF8F2F937E844B17C9E00000003' @@ -21,7 +24,7 @@ describe('NFTokenBurn', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenBurn)) + assertValid(validNFTokenBurn) }) it(`throws w/ missing NFTokenID`, function () { @@ -33,10 +36,6 @@ describe('NFTokenBurn', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenBurn: missing field NFTokenID', - ) + assertInvalid(invalid, 'NFTokenBurn: missing field NFTokenID') }) }) diff --git a/packages/xrpl/test/models/NFTokenCancelOffer.test.ts b/packages/xrpl/test/models/NFTokenCancelOffer.test.ts index d020299529..e488dcee20 100644 --- a/packages/xrpl/test/models/NFTokenCancelOffer.test.ts +++ b/packages/xrpl/test/models/NFTokenCancelOffer.test.ts @@ -1,6 +1,10 @@ -import { assert } from 'chai' +import { validateNFTokenCancelOffer } from '../../src/models/transactions/NFTokenCancelOffer' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError } from '../../src' +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateNFTokenCancelOffer) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenCancelOffer, message) const BUY_OFFER = 'AED08CC1F50DD5F23A1948AF86153A3F3B7593E5EC77D65A02BB1B29E05AB6AF' @@ -21,7 +25,7 @@ describe('NFTokenCancelOffer', function () { Flags: 2147483648, } as any - assert.doesNotThrow(() => validate(validNFTokenCancelOffer)) + assertValid(validNFTokenCancelOffer) }) it(`throws w/ missing NFTokenOffers`, function () { @@ -33,11 +37,7 @@ describe('NFTokenCancelOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenCancelOffer: missing field NFTokenOffers', - ) + assertInvalid(invalid, 'NFTokenCancelOffer: missing field NFTokenOffers') }) it(`throws w/ empty NFTokenOffers`, function () { @@ -50,10 +50,6 @@ describe('NFTokenCancelOffer', function () { Flags: 2147483648, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenCancelOffer: empty field NFTokenOffers', - ) + assertInvalid(invalid, 'NFTokenCancelOffer: empty field NFTokenOffers') }) }) diff --git a/packages/xrpl/test/models/NFTokenCreateOffer.test.ts b/packages/xrpl/test/models/NFTokenCreateOffer.test.ts index 6260861608..b287e70cce 100644 --- a/packages/xrpl/test/models/NFTokenCreateOffer.test.ts +++ b/packages/xrpl/test/models/NFTokenCreateOffer.test.ts @@ -1,6 +1,11 @@ -import { assert } from 'chai' +import { NFTokenCreateOfferFlags } from '../../src' +import { validateNFTokenCreateOffer } from '../../src/models/transactions/NFTokenCreateOffer' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError, NFTokenCreateOfferFlags } from '../../src' +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateNFTokenCreateOffer) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenCreateOffer, message) const NFTOKEN_ID = '00090032B5F762798A53D543A014CAF8B297CFF8F2F937E844B17C9E00000003' @@ -24,7 +29,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.doesNotThrow(() => validate(validNFTokenCreateOffer)) + assertValid(validNFTokenCreateOffer) }) it(`verifies valid NFTokenCreateOffer sellside`, function () { @@ -42,7 +47,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.doesNotThrow(() => validate(validNFTokenCreateOffer)) + assertValid(validNFTokenCreateOffer) }) it(`verifies w/ 0 Amount NFTokenCreateOffer sellside`, function () { @@ -58,7 +63,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.doesNotThrow(() => validate(validNFTokenCreateOffer)) + assertValid(validNFTokenCreateOffer) }) it(`throws w/ Account === Owner`, function () { @@ -73,9 +78,8 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenCreateOffer: Owner and Account must not be equal', ) }) @@ -93,9 +97,8 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenCreateOffer: Destination and Account must not be equal', ) }) @@ -112,11 +115,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenCreateOffer: missing field NFTokenID', - ) + assertInvalid(invalid, 'NFTokenCreateOffer: missing field NFTokenID') }) it(`throws w/ invalid Amount`, function () { @@ -132,11 +131,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenCreateOffer: invalid Amount', - ) + assertInvalid(invalid, 'NFTokenCreateOffer: invalid Amount') }) it(`throws w/ missing Amount`, function () { @@ -151,11 +146,7 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenCreateOffer: invalid Amount', - ) + assertInvalid(invalid, 'NFTokenCreateOffer: invalid Amount') }) it(`throws w/ Owner for sell offer`, function () { @@ -171,9 +162,8 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenCreateOffer: Owner must not be present for sell offers', ) }) @@ -189,9 +179,8 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenCreateOffer: Owner must be present for buy offers', ) }) @@ -208,9 +197,8 @@ describe('NFTokenCreateOffer', function () { Sequence: 2470665, } as any - assert.throws( - () => validate(invalid), - ValidationError, + assertInvalid( + invalid, 'NFTokenCreateOffer: Amount must be greater than 0 for buy offers', ) }) diff --git a/packages/xrpl/test/models/NFTokenMint.test.ts b/packages/xrpl/test/models/NFTokenMint.test.ts index 82dbd001f5..74fc586d17 100644 --- a/packages/xrpl/test/models/NFTokenMint.test.ts +++ b/packages/xrpl/test/models/NFTokenMint.test.ts @@ -1,11 +1,12 @@ -import { assert } from 'chai' +import { stringToHex } from '@xrplf/isomorphic/src/utils' -import { - convertStringToHex, - validate, - ValidationError, - NFTokenMintFlags, -} from '../../src' +import { NFTokenMintFlags } from '../../src' +import { validateNFTokenMint } from '../../src/models/transactions/NFTokenMint' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateNFTokenMint) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenMint, message) /** * NFTokenMint Transaction Verification Testing. @@ -25,10 +26,26 @@ describe('NFTokenMint', function () { NFTokenTaxon: 0, Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', TransferFee: 1, - URI: convertStringToHex('http://xrpl.org'), + URI: stringToHex('http://xrpl.org'), } as any - assert.doesNotThrow(() => validate(validNFTokenMint)) + assertValid(validNFTokenMint) + }) + + it(`verifies valid NFTokenMint with Amount, Destination and Expiration`, function () { + const valid = { + TransactionType: 'NFTokenMint', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Fee: '5000000', + Sequence: 2470665, + NFTokenTaxon: 0, + Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Amount: '1000000', + Destination: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', + Expiration: 123456, + } as any + + assertValid(valid) }) it(`throws w/ missing NFTokenTaxon`, function () { @@ -40,14 +57,10 @@ describe('NFTokenMint', function () { Flags: NFTokenMintFlags.tfTransferable, Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', TransferFee: 1, - URI: convertStringToHex('http://xrpl.org'), + URI: stringToHex('http://xrpl.org'), } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenMint: missing field NFTokenTaxon', - ) + assertInvalid(invalid, 'NFTokenMint: missing field NFTokenTaxon') }) it(`throws w/ Account === Issuer`, function () { @@ -60,14 +73,10 @@ describe('NFTokenMint', function () { Issuer: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', TransferFee: 1, NFTokenTaxon: 0, - URI: convertStringToHex('http://xrpl.org'), + URI: stringToHex('http://xrpl.org'), } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenMint: Issuer must not be equal to Account', - ) + assertInvalid(invalid, 'NFTokenMint: Issuer must not be equal to Account') }) it(`throws w/ URI being an empty string`, function () { @@ -83,11 +92,7 @@ describe('NFTokenMint', function () { URI: '', } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenMint: URI must not be empty string', - ) + assertInvalid(invalid, 'NFTokenMint: URI must not be empty string') }) it(`throws w/ URI not in hex format`, function () { @@ -103,10 +108,40 @@ describe('NFTokenMint', function () { URI: 'http://xrpl.org', } as any - assert.throws( - () => validate(invalid), - ValidationError, - 'NFTokenMint: URI must be in hex format', + assertInvalid(invalid, 'NFTokenMint: URI must be in hex format') + }) + + it(`throws when Amount is null but Expiration is present`, function () { + const invalid = { + TransactionType: 'NFTokenMint', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Fee: '5000000', + Sequence: 2470665, + NFTokenTaxon: 0, + Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Expiration: 123456, + } as any + + assertInvalid( + invalid, + 'NFTokenMint: Amount is required when Expiration or Destination is present', + ) + }) + + it(`throws when Amount is null but Destination is present`, function () { + const invalid = { + TransactionType: 'NFTokenMint', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Fee: '5000000', + Sequence: 2470665, + NFTokenTaxon: 0, + Issuer: 'r9LqNeG6qHxjeUocjvVki2XR35weJ9mZgQ', + Destination: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', + } as any + + assertInvalid( + invalid, + 'NFTokenMint: Amount is required when Expiration or Destination is present', ) }) }) diff --git a/packages/xrpl/test/models/NFTokenModify.test.ts b/packages/xrpl/test/models/NFTokenModify.test.ts new file mode 100644 index 0000000000..e8168c1bd7 --- /dev/null +++ b/packages/xrpl/test/models/NFTokenModify.test.ts @@ -0,0 +1,69 @@ +import { stringToHex } from '@xrplf/isomorphic/src/utils' + +import { validateNFTokenModify } from '../../src/models/transactions/NFTokenModify' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateNFTokenModify) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateNFTokenModify, message) + +const TOKEN_ID = + '00090032B5F762798A53D543A014CAF8B297CFF8F2F937E844B17C9E00000003' + +/** + * NFTokenModify Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('NFTokenModify', function () { + it(`verifies valid NFTokenModify`, function () { + const validNFTokenModify = { + TransactionType: 'NFTokenModify', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + NFTokenID: TOKEN_ID, + Fee: '5000000', + Sequence: 2470665, + URI: stringToHex('http://xrpl.org'), + } as any + + assertValid(validNFTokenModify) + }) + + it(`throws w/ missing NFTokenID`, function () { + const invalid = { + TransactionType: 'NFTokenModify', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Fee: '5000000', + Sequence: 2470665, + } as any + + assertInvalid(invalid, 'NFTokenModify: missing field NFTokenID') + }) + + it(`throws w/ URI being an empty string`, function () { + const invalid = { + TransactionType: 'NFTokenModify', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + NFTokenID: TOKEN_ID, + Fee: '5000000', + Sequence: 2470665, + URI: '', + } as any + + assertInvalid(invalid, 'NFTokenModify: URI must not be empty string') + }) + + it(`throws w/ URI not in hex format`, function () { + const invalid = { + TransactionType: 'NFTokenModify', + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + NFTokenID: TOKEN_ID, + Fee: '5000000', + Sequence: 2470665, + URI: '--', + } as any + + assertInvalid(invalid, 'NFTokenModify: URI must be in hex format') + }) +}) diff --git a/packages/xrpl/test/models/XChainAccountCreateCommit.test.ts b/packages/xrpl/test/models/XChainAccountCreateCommit.test.ts index 454458fdae..fa75c98e26 100644 --- a/packages/xrpl/test/models/XChainAccountCreateCommit.test.ts +++ b/packages/xrpl/test/models/XChainAccountCreateCommit.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainAccountCreateCommit } from '../../src/models/transactions/XChainAccountCreateCommit' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainAccountCreateCommit) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainAccountCreateCommit, message) /** * XChainAccountCreateCommit Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateXChainAccountCreateCommit } from '../../src/models/transactions * Providing runtime verification testing for each specific transaction type. */ describe('XChainAccountCreateCommit', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -35,51 +38,26 @@ describe('XChainAccountCreateCommit', function () { }) it('verifies valid XChainAccountCreateCommit', function () { - assert.doesNotThrow(() => validateXChainAccountCreateCommit(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: invalid field XChainBridge') }) it('throws w/ missing SignatureReward', function () { delete tx.SignatureReward - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAccountCreateCommit: missing field SignatureReward', ) }) @@ -87,14 +65,8 @@ describe('XChainAccountCreateCommit', function () { it('throws w/ invalid SignatureReward', function () { tx.SignatureReward = { currency: 'ETH' } - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAccountCreateCommit: invalid field SignatureReward', ) }) @@ -102,60 +74,24 @@ describe('XChainAccountCreateCommit', function () { it('throws w/ missing Destination', function () { delete tx.Destination - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field Destination', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: missing field Destination') }) it('throws w/ invalid Destination', function () { tx.Destination = 123 - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field Destination', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: invalid field Destination') }) it('throws w/ missing Amount', function () { delete tx.Amount - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: missing field Amount', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: missing field Amount') }) it('throws w/ invalid Amount', function () { tx.Amount = { currency: 'ETH' } - assert.throws( - () => validateXChainAccountCreateCommit(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAccountCreateCommit: invalid field Amount', - ) + assertInvalid(tx, 'XChainAccountCreateCommit: invalid field Amount') }) }) diff --git a/packages/xrpl/test/models/XChainAddAccountCreateAttestation.test.ts b/packages/xrpl/test/models/XChainAddAccountCreateAttestation.test.ts index 4fb98fd584..144a43a584 100644 --- a/packages/xrpl/test/models/XChainAddAccountCreateAttestation.test.ts +++ b/packages/xrpl/test/models/XChainAddAccountCreateAttestation.test.ts @@ -1,7 +1,14 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainAddAccountCreateAttestation } from '../../src/models/transactions/XChainAddAccountCreateAttestation' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainAddAccountCreateAttestation) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError( + tx, + validateXChainAddAccountCreateAttestation, + message, + ) /** * XChainAddAccountCreateAttestation Transaction Verification Testing. @@ -9,7 +16,7 @@ import { validateXChainAddAccountCreateAttestation } from '../../src/models/tran * Providing runtime verification testing for each specific transaction type. */ describe('XChainAddAccountCreateAttestation', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -45,51 +52,26 @@ describe('XChainAddAccountCreateAttestation', function () { }) it('verifies valid XChainAddAccountCreateAttestation', function () { - assert.doesNotThrow(() => validateXChainAddAccountCreateAttestation(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing Amount', function () { delete tx.Amount - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field Amount', - ) + assertInvalid(tx, 'XChainAddAccountCreateAttestation: missing field Amount') }) it('throws w/ invalid Amount', function () { tx.Amount = { currency: 'ETH' } - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field Amount', - ) + assertInvalid(tx, 'XChainAddAccountCreateAttestation: invalid field Amount') }) it('throws w/ missing AttestationRewardAccount', function () { delete tx.AttestationRewardAccount - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field AttestationRewardAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field AttestationRewardAccount', ) }) @@ -97,14 +79,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid AttestationRewardAccount', function () { tx.AttestationRewardAccount = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field AttestationRewardAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field AttestationRewardAccount', ) }) @@ -112,14 +88,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing AttestationSignerAccount', function () { delete tx.AttestationSignerAccount - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field AttestationSignerAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field AttestationSignerAccount', ) }) @@ -127,14 +97,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid AttestationSignerAccount', function () { tx.AttestationSignerAccount = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field AttestationSignerAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field AttestationSignerAccount', ) }) @@ -142,14 +106,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing Destination', function () { delete tx.Destination - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field Destination', ) }) @@ -157,14 +115,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid Destination', function () { tx.Destination = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field Destination', ) }) @@ -172,14 +124,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing OtherChainSource', function () { delete tx.OtherChainSource - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field OtherChainSource', ) }) @@ -187,14 +133,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid OtherChainSource', function () { tx.OtherChainSource = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field OtherChainSource', ) }) @@ -202,14 +142,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing PublicKey', function () { delete tx.PublicKey - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field PublicKey', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field PublicKey', ) }) @@ -217,14 +151,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid PublicKey', function () { tx.PublicKey = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field PublicKey', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field PublicKey', ) }) @@ -232,14 +160,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing Signature', function () { delete tx.Signature - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field Signature', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field Signature', ) }) @@ -247,14 +169,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid Signature', function () { tx.Signature = 123 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field Signature', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field Signature', ) }) @@ -262,14 +178,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing SignatureReward', function () { delete tx.SignatureReward - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field SignatureReward', ) }) @@ -277,14 +187,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid SignatureReward', function () { tx.SignatureReward = { currency: 'ETH' } - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field SignatureReward', ) }) @@ -292,14 +196,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing WasLockingChainSend', function () { delete tx.WasLockingChainSend - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field WasLockingChainSend', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field WasLockingChainSend', ) }) @@ -307,14 +205,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid WasLockingChainSend', function () { tx.WasLockingChainSend = 2 - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field WasLockingChainSend', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field WasLockingChainSend', ) }) @@ -322,14 +214,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing XChainAccountCreateCount', function () { delete tx.XChainAccountCreateCount - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field XChainAccountCreateCount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field XChainAccountCreateCount', ) }) @@ -337,14 +223,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid XChainAccountCreateCount', function () { tx.XChainAccountCreateCount = { currency: 'ETH' } - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field XChainAccountCreateCount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field XChainAccountCreateCount', ) }) @@ -352,14 +232,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: missing field XChainBridge', ) }) @@ -367,14 +241,8 @@ describe('XChainAddAccountCreateAttestation', function () { it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainAddAccountCreateAttestation(tx), - ValidationError, - 'XChainAddAccountCreateAttestation: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddAccountCreateAttestation: invalid field XChainBridge', ) }) diff --git a/packages/xrpl/test/models/XChainAddClaimAttestation.test.ts b/packages/xrpl/test/models/XChainAddClaimAttestation.test.ts index 4e7d1aeb7a..92783d9219 100644 --- a/packages/xrpl/test/models/XChainAddClaimAttestation.test.ts +++ b/packages/xrpl/test/models/XChainAddClaimAttestation.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainAddClaimAttestation } from '../../src/models/transactions/XChainAddClaimAttestation' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainAddClaimAttestation) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainAddClaimAttestation, message) /** * XChainAddClaimAttestation Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateXChainAddClaimAttestation } from '../../src/models/transactions * Providing runtime verification testing for each specific transaction type. */ describe('XChainAddClaimAttestation', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -43,51 +46,26 @@ describe('XChainAddClaimAttestation', function () { }) it('verifies valid XChainAddClaimAttestation', function () { - assert.doesNotThrow(() => validateXChainAddClaimAttestation(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing Amount', function () { delete tx.Amount - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field Amount', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: missing field Amount') }) it('throws w/ invalid Amount', function () { tx.Amount = { currency: 'ETH' } - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Amount', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field Amount') }) it('throws w/ missing AttestationRewardAccount', function () { delete tx.AttestationRewardAccount - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field AttestationRewardAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: missing field AttestationRewardAccount', ) }) @@ -95,14 +73,8 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ invalid AttestationRewardAccount', function () { tx.AttestationRewardAccount = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field AttestationRewardAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: invalid field AttestationRewardAccount', ) }) @@ -110,14 +82,8 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ missing AttestationSignerAccount', function () { delete tx.AttestationSignerAccount - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field AttestationSignerAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: missing field AttestationSignerAccount', ) }) @@ -125,14 +91,8 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ invalid AttestationSignerAccount', function () { tx.AttestationSignerAccount = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field AttestationSignerAccount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: invalid field AttestationSignerAccount', ) }) @@ -140,29 +100,14 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ invalid Destination', function () { tx.Destination = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Destination', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field Destination') }) it('throws w/ missing OtherChainSource', function () { delete tx.OtherChainSource - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: missing field OtherChainSource', ) }) @@ -170,14 +115,8 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ invalid OtherChainSource', function () { tx.OtherChainSource = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: invalid field OtherChainSource', ) }) @@ -185,74 +124,32 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ missing PublicKey', function () { delete tx.PublicKey - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field PublicKey', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field PublicKey', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: missing field PublicKey') }) it('throws w/ invalid PublicKey', function () { tx.PublicKey = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field PublicKey', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field PublicKey', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field PublicKey') }) it('throws w/ missing Signature', function () { delete tx.Signature - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field Signature', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field Signature', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: missing field Signature') }) it('throws w/ invalid Signature', function () { tx.Signature = 123 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Signature', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field Signature', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field Signature') }) it('throws w/ missing WasLockingChainSend', function () { delete tx.WasLockingChainSend - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field WasLockingChainSend', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: missing field WasLockingChainSend', ) }) @@ -260,14 +157,8 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ invalid WasLockingChainSend', function () { tx.WasLockingChainSend = 2 - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field WasLockingChainSend', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainAddClaimAttestation: invalid field WasLockingChainSend', ) }) @@ -275,60 +166,24 @@ describe('XChainAddClaimAttestation', function () { it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field XChainBridge') }) it('throws w/ missing XChainClaimID', function () { delete tx.XChainClaimID - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: missing field XChainClaimID', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: missing field XChainClaimID') }) it('throws w/ invalid XChainClaimID', function () { tx.XChainClaimID = { currency: 'ETH' } - assert.throws( - () => validateXChainAddClaimAttestation(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainAddClaimAttestation: invalid field XChainClaimID', - ) + assertInvalid(tx, 'XChainAddClaimAttestation: invalid field XChainClaimID') }) }) diff --git a/packages/xrpl/test/models/XChainClaim.test.ts b/packages/xrpl/test/models/XChainClaim.test.ts index 7b854ea786..8ec461224d 100644 --- a/packages/xrpl/test/models/XChainClaim.test.ts +++ b/packages/xrpl/test/models/XChainClaim.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainClaim } from '../../src/models/transactions/XChainClaim' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateXChainClaim) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainClaim, message) /** * XChainClaim Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateXChainClaim } from '../../src/models/transactions/XChainClaim' * Providing runtime verification testing for each specific transaction type. */ describe('XChainClaim', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -35,142 +37,60 @@ describe('XChainClaim', function () { }) it('verifies valid XChainClaim', function () { - assert.doesNotThrow(() => validateXChainClaim(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainClaim: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainClaim: invalid field XChainBridge') }) it('throws w/ missing XChainClaimID', function () { delete tx.XChainClaimID - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: missing field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: missing field XChainClaimID', - ) + assertInvalid(tx, 'XChainClaim: missing field XChainClaimID') }) it('throws w/ invalid XChainClaimID', function () { tx.XChainClaimID = { currency: 'ETH' } - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: invalid field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: invalid field XChainClaimID', - ) + assertInvalid(tx, 'XChainClaim: invalid field XChainClaimID') }) it('throws w/ missing Destination', function () { delete tx.Destination - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: missing field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: missing field Destination', - ) + assertInvalid(tx, 'XChainClaim: missing field Destination') }) it('throws w/ invalid Destination', function () { tx.Destination = 123 - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: invalid field Destination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: invalid field Destination', - ) + assertInvalid(tx, 'XChainClaim: invalid field Destination') }) it('throws w/ invalid DestinationTag', function () { tx.DestinationTag = 'number' - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: invalid field DestinationTag', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: invalid field DestinationTag', - ) + assertInvalid(tx, 'XChainClaim: invalid field DestinationTag') }) it('throws w/ missing Amount', function () { delete tx.Amount - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: missing field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: missing field Amount', - ) + assertInvalid(tx, 'XChainClaim: missing field Amount') }) it('throws w/ invalid Amount', function () { tx.Amount = { currency: 'ETH' } - assert.throws( - () => validateXChainClaim(tx), - ValidationError, - 'XChainClaim: invalid field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainClaim: invalid field Amount', - ) + assertInvalid(tx, 'XChainClaim: invalid field Amount') }) }) diff --git a/packages/xrpl/test/models/XChainCommit.test.ts b/packages/xrpl/test/models/XChainCommit.test.ts index 4963cf1bef..2d2952a8eb 100644 --- a/packages/xrpl/test/models/XChainCommit.test.ts +++ b/packages/xrpl/test/models/XChainCommit.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainCommit } from '../../src/models/transactions/XChainCommit' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateXChainCommit) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainCommit, message) /** * XChainCommit Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateXChainCommit } from '../../src/models/transactions/XChainCommit * Providing runtime verification testing for each specific transaction type. */ describe('XChainCommit', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -34,112 +36,48 @@ describe('XChainCommit', function () { }) it('verifies valid XChainCommit', function () { - assert.doesNotThrow(() => validateXChainCommit(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainCommit: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainCommit: invalid field XChainBridge') }) it('throws w/ missing XChainClaimID', function () { delete tx.XChainClaimID - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: missing field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: missing field XChainClaimID', - ) + assertInvalid(tx, 'XChainCommit: missing field XChainClaimID') }) it('throws w/ invalid XChainClaimID', function () { tx.XChainClaimID = { currency: 'ETH' } - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: invalid field XChainClaimID', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: invalid field XChainClaimID', - ) + assertInvalid(tx, 'XChainCommit: invalid field XChainClaimID') }) it('throws w/ invalid OtherChainDestination', function () { tx.OtherChainDestination = 123 - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: invalid field OtherChainDestination', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: invalid field OtherChainDestination', - ) + assertInvalid(tx, 'XChainCommit: invalid field OtherChainDestination') }) it('throws w/ missing Amount', function () { delete tx.Amount - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: missing field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: missing field Amount', - ) + assertInvalid(tx, 'XChainCommit: missing field Amount') }) it('throws w/ invalid Amount', function () { tx.Amount = { currency: 'ETH' } - assert.throws( - () => validateXChainCommit(tx), - ValidationError, - 'XChainCommit: invalid field Amount', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCommit: invalid field Amount', - ) + assertInvalid(tx, 'XChainCommit: invalid field Amount') }) }) diff --git a/packages/xrpl/test/models/XChainCreateBridge.test.ts b/packages/xrpl/test/models/XChainCreateBridge.test.ts index dfd174058e..740c92030d 100644 --- a/packages/xrpl/test/models/XChainCreateBridge.test.ts +++ b/packages/xrpl/test/models/XChainCreateBridge.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainCreateBridge } from '../../src/models/transactions/XChainCreateBridge' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainCreateBridge) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainCreateBridge, message) /** * XChainCreateBridge Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateXChainCreateBridge } from '../../src/models/transactions/XChain * Providing runtime verification testing for each specific transaction type. */ describe('XChainCreateBridge', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -34,81 +37,38 @@ describe('XChainCreateBridge', function () { }) it('verifies valid XChainCreateBridge', function () { - assert.doesNotThrow(() => validateXChainCreateBridge(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainCreateBridge(tx), - ValidationError, - 'XChainCreateBridge: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateBridge: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainCreateBridge: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainCreateBridge(tx), - ValidationError, - 'XChainCreateBridge: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateBridge: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainCreateBridge: invalid field XChainBridge') }) it('throws w/ missing SignatureReward', function () { delete tx.SignatureReward - assert.throws( - () => validateXChainCreateBridge(tx), - ValidationError, - 'XChainCreateBridge: missing field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateBridge: missing field SignatureReward', - ) + assertInvalid(tx, 'XChainCreateBridge: missing field SignatureReward') }) it('throws w/ invalid SignatureReward', function () { tx.SignatureReward = { currency: 'ETH' } - assert.throws( - () => validateXChainCreateBridge(tx), - ValidationError, - 'XChainCreateBridge: invalid field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateBridge: invalid field SignatureReward', - ) + assertInvalid(tx, 'XChainCreateBridge: invalid field SignatureReward') }) it('throws w/ invalid MinAccountCreateAmount', function () { tx.MinAccountCreateAmount = { currency: 'ETH' } - assert.throws( - () => validateXChainCreateBridge(tx), - ValidationError, - 'XChainCreateBridge: invalid field MinAccountCreateAmount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainCreateBridge: invalid field MinAccountCreateAmount', ) }) diff --git a/packages/xrpl/test/models/XChainCreateClaimID.test.ts b/packages/xrpl/test/models/XChainCreateClaimID.test.ts index 503fae0130..620e830954 100644 --- a/packages/xrpl/test/models/XChainCreateClaimID.test.ts +++ b/packages/xrpl/test/models/XChainCreateClaimID.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainCreateClaimID } from '../../src/models/transactions/XChainCreateClaimID' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainCreateClaimID) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainCreateClaimID, message) /** * XChainCreateClaimID Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateXChainCreateClaimID } from '../../src/models/transactions/XChai * Providing runtime verification testing for each specific transaction type. */ describe('XChainCreateClaimID', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -34,97 +37,42 @@ describe('XChainCreateClaimID', function () { }) it('verifies valid XChainCreateClaimID', function () { - assert.doesNotThrow(() => validateXChainCreateClaimID(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainCreateClaimID: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainCreateClaimID: invalid field XChainBridge') }) it('throws w/ missing SignatureReward', function () { delete tx.SignatureReward - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: missing field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: missing field SignatureReward', - ) + assertInvalid(tx, 'XChainCreateClaimID: missing field SignatureReward') }) it('throws w/ invalid SignatureReward', function () { tx.SignatureReward = { currency: 'ETH' } - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: invalid field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: invalid field SignatureReward', - ) + assertInvalid(tx, 'XChainCreateClaimID: invalid field SignatureReward') }) it('throws w/ missing OtherChainSource', function () { delete tx.OtherChainSource - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: missing field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: missing field OtherChainSource', - ) + assertInvalid(tx, 'XChainCreateClaimID: missing field OtherChainSource') }) it('throws w/ invalid OtherChainSource', function () { tx.OtherChainSource = 123 - assert.throws( - () => validateXChainCreateClaimID(tx), - ValidationError, - 'XChainCreateClaimID: invalid field OtherChainSource', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainCreateClaimID: invalid field OtherChainSource', - ) + assertInvalid(tx, 'XChainCreateClaimID: invalid field OtherChainSource') }) }) diff --git a/packages/xrpl/test/models/XChainModifyBridge.test.ts b/packages/xrpl/test/models/XChainModifyBridge.test.ts index 57eeb50823..4ad095c999 100644 --- a/packages/xrpl/test/models/XChainModifyBridge.test.ts +++ b/packages/xrpl/test/models/XChainModifyBridge.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateXChainModifyBridge } from '../../src/models/transactions/XChainModifyBridge' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateXChainModifyBridge) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateXChainModifyBridge, message) /** * XChainModifyBridge Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateXChainModifyBridge } from '../../src/models/transactions/XChain * Providing runtime verification testing for each specific transaction type. */ describe('XChainModifyBridge', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -34,66 +37,32 @@ describe('XChainModifyBridge', function () { }) it('verifies valid XChainModifyBridge', function () { - assert.doesNotThrow(() => validateXChainModifyBridge(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it('throws w/ missing XChainBridge', function () { delete tx.XChainBridge - assert.throws( - () => validateXChainModifyBridge(tx), - ValidationError, - 'XChainModifyBridge: missing field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainModifyBridge: missing field XChainBridge', - ) + assertInvalid(tx, 'XChainModifyBridge: missing field XChainBridge') }) it('throws w/ invalid XChainBridge', function () { tx.XChainBridge = { XChainDoor: 'test' } - assert.throws( - () => validateXChainModifyBridge(tx), - ValidationError, - 'XChainModifyBridge: invalid field XChainBridge', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainModifyBridge: invalid field XChainBridge', - ) + assertInvalid(tx, 'XChainModifyBridge: invalid field XChainBridge') }) it('throws w/ invalid SignatureReward', function () { tx.SignatureReward = { currency: 'ETH' } - assert.throws( - () => validateXChainModifyBridge(tx), - ValidationError, - 'XChainModifyBridge: invalid field SignatureReward', - ) - assert.throws( - () => validate(tx), - ValidationError, - 'XChainModifyBridge: invalid field SignatureReward', - ) + assertInvalid(tx, 'XChainModifyBridge: invalid field SignatureReward') }) it('throws w/ invalid MinAccountCreateAmount', function () { tx.MinAccountCreateAmount = { currency: 'ETH' } - assert.throws( - () => validateXChainModifyBridge(tx), - ValidationError, - 'XChainModifyBridge: invalid field MinAccountCreateAmount', - ) - assert.throws( - () => validate(tx), - ValidationError, + assertInvalid( + tx, 'XChainModifyBridge: invalid field MinAccountCreateAmount', ) }) diff --git a/packages/xrpl/test/models/accountDelete.test.ts b/packages/xrpl/test/models/accountDelete.test.ts index 4729bd7f03..d309706905 100644 --- a/packages/xrpl/test/models/accountDelete.test.ts +++ b/packages/xrpl/test/models/accountDelete.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAccountDelete } from '../../src/models/transactions/accountDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateAccountDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAccountDelete, message) /** * AccountDelete Transaction Verification Testing. @@ -9,8 +12,10 @@ import { validateAccountDelete } from '../../src/models/transactions/accountDele * Providing runtime verification testing for each specific transaction type. */ describe('AccountDelete', function () { - it(`verifies valid AccountDelete`, function () { - const validAccountDelete = { + let validAccountDelete: any + + beforeEach(() => { + validAccountDelete = { TransactionType: 'AccountDelete', Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', Destination: 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe', @@ -18,76 +23,84 @@ describe('AccountDelete', function () { Fee: '5000000', Sequence: 2470665, Flags: 2147483648, - } as any - - assert.doesNotThrow(() => validateAccountDelete(validAccountDelete)) + CredentialIDs: [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + ], + } + }) + it(`verifies valid AccountDelete`, function () { + assertValid(validAccountDelete) }) it(`throws w/ missing Destination`, function () { - const invalidDestination = { - TransactionType: 'AccountDelete', - Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', - Fee: '5000000', - Sequence: 2470665, - Flags: 2147483648, - } as any - - assert.throws( - () => validateAccountDelete(invalidDestination), - ValidationError, - 'AccountDelete: missing field Destination', - ) - - assert.throws( - () => validate(invalidDestination), - ValidationError, - 'AccountDelete: missing field Destination', - ) + validAccountDelete.Destination = undefined + const errorMessage = 'AccountDelete: missing field Destination' + assertInvalid(validAccountDelete, errorMessage) }) it(`throws w/ invalid Destination`, function () { - const invalidDestination = { - TransactionType: 'AccountDelete', - Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', - Destination: 65478965, - Fee: '5000000', - Sequence: 2470665, - Flags: 2147483648, - } as any - - assert.throws( - () => validateAccountDelete(invalidDestination), - ValidationError, - 'AccountDelete: invalid field Destination', - ) - assert.throws( - () => validate(invalidDestination), - ValidationError, - 'AccountDelete: invalid field Destination', - ) + validAccountDelete.Destination = 65478965 + const errorMessage = 'AccountDelete: invalid field Destination' + assertInvalid(validAccountDelete, errorMessage) }) it(`throws w/ invalid DestinationTag`, function () { - const invalidDestinationTag = { - TransactionType: 'AccountDelete', - Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', - Destination: 'rPT1Sjq2YGrBMTttX4GZHjKu9dyfzbpAYe', - DestinationTag: 'gvftyujnbv', - Fee: '5000000', - Sequence: 2470665, - Flags: 2147483648, - } as any - - assert.throws( - () => validateAccountDelete(invalidDestinationTag), - ValidationError, - 'AccountDelete: invalid field DestinationTag', - ) - - assert.throws( - () => validate(invalidDestinationTag), - ValidationError, - 'AccountDelete: invalid field DestinationTag', - ) + validAccountDelete.DestinationTag = 'gvftyujnbv' + const errorMessage = 'AccountDelete: invalid field DestinationTag' + assertInvalid(validAccountDelete, errorMessage) + }) + + it(`throws w/ non-array CredentialIDs`, function () { + validAccountDelete.CredentialIDs = + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A' + + const errorMessage = 'AccountDelete: Credentials must be an array' + assertInvalid(validAccountDelete, errorMessage) + }) + + it(`throws CredentialIDs length exceeds max length`, function () { + validAccountDelete.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66B', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66C', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66D', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66E', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66F', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F660', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F661', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = + 'AccountDelete: Credentials length cannot exceed 8 elements' + assertInvalid(validAccountDelete, errorMessage) + }) + + it(`throws w/ empty CredentialIDs`, function () { + validAccountDelete.CredentialIDs = [] + + const errorMessage = 'AccountDelete: Credentials cannot be an empty array' + assertInvalid(validAccountDelete, errorMessage) + }) + + it(`throws w/ non-string CredentialIDs`, function () { + validAccountDelete.CredentialIDs = [ + 123123, + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = 'AccountDelete: Invalid Credentials ID list format' + assertInvalid(validAccountDelete, errorMessage) + }) + + it(`throws w/ duplicate CredentialIDs`, function () { + validAccountDelete.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = + 'AccountDelete: Credentials cannot contain duplicate elements' + assertInvalid(validAccountDelete, errorMessage) }) }) diff --git a/packages/xrpl/test/models/accountSet.test.ts b/packages/xrpl/test/models/accountSet.test.ts index b3ce24eadd..7bd25952e4 100644 --- a/packages/xrpl/test/models/accountSet.test.ts +++ b/packages/xrpl/test/models/accountSet.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateAccountSet } from '../../src/models/transactions/accountSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateAccountSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateAccountSet, message) /** * AccountSet Transaction Verification Testing. @@ -9,10 +11,10 @@ import { validateAccountSet } from '../../src/models/transactions/accountSet' * Providing runtime verification testing for each specific transaction type. */ describe('AccountSet', function () { - let account + let tx: any beforeEach(function () { - account = { + tx = { TransactionType: 'AccountSet', Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', Fee: '12', @@ -21,146 +23,55 @@ describe('AccountSet', function () { SetFlag: 5, MessageKey: '03AB40A0490F9B7ED8DF29D246BF2D6269820A0EE7742ACDD457BEA7C7D0931EDB', - } as any + } }) it(`verifies valid AccountSet`, function () { - assert.doesNotThrow(() => validateAccountSet(account)) - assert.doesNotThrow(() => validate(account)) + assertValid(tx) }) it(`throws w/ invalid SetFlag (out of range)`, function () { - account.SetFlag = 20 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid SetFlag', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid SetFlag', - ) + tx.SetFlag = 20 + assertInvalid(tx, 'AccountSet: invalid SetFlag') }) it(`throws w/ invalid SetFlag (incorrect type)`, function () { - account.SetFlag = 'abc' - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid SetFlag', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid SetFlag', - ) + tx.SetFlag = 'abc' + assertInvalid(tx, 'AccountSet: invalid SetFlag') }) it(`throws w/ invalid ClearFlag`, function () { - account.ClearFlag = 20 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid ClearFlag', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid ClearFlag', - ) + tx.ClearFlag = 20 + assertInvalid(tx, 'AccountSet: invalid ClearFlag') }) it(`throws w/ invalid Domain`, function () { - account.Domain = 6578616 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid Domain', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid Domain', - ) + tx.Domain = 6578616 + assertInvalid(tx, 'AccountSet: invalid Domain') }) it(`throws w/ invalid EmailHash`, function () { - account.EmailHash = 6578656789876543 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid EmailHash', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid EmailHash', - ) + tx.EmailHash = 6578656789876543 + assertInvalid(tx, 'AccountSet: invalid EmailHash') }) it(`throws w/ invalid MessageKey`, function () { - account.MessageKey = 6578656789876543 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid MessageKey', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid MessageKey', - ) + tx.MessageKey = 6578656789876543 + assertInvalid(tx, 'AccountSet: invalid MessageKey') }) it(`throws w/ invalid TransferRate`, function () { - account.TransferRate = '1000000001' - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid TransferRate', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid TransferRate', - ) + tx.TransferRate = '1000000001' + assertInvalid(tx, 'AccountSet: invalid TransferRate') }) it(`throws w/ invalid TickSize`, function () { - account.TickSize = 20 - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid TickSize', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid TickSize', - ) + tx.TickSize = 20 + assertInvalid(tx, 'AccountSet: invalid TickSize') }) it(`throws w/ invalid NFTokenMinter`, function () { - account.NFTokenMinter = '' - - assert.throws( - () => validateAccountSet(account), - ValidationError, - 'AccountSet: invalid field NFTokenMinter', - ) - assert.throws( - () => validate(account), - ValidationError, - 'AccountSet: invalid field NFTokenMinter', - ) + tx.NFTokenMinter = '' + assertInvalid(tx, 'AccountSet: invalid field NFTokenMinter') }) }) diff --git a/packages/xrpl/test/models/baseTransaction.test.ts b/packages/xrpl/test/models/baseTransaction.test.ts index 10e272f7f2..0d85f44a33 100644 --- a/packages/xrpl/test/models/baseTransaction.test.ts +++ b/packages/xrpl/test/models/baseTransaction.test.ts @@ -3,6 +3,11 @@ import { assert } from 'chai' import { ValidationError } from '../../src' import { validateBaseTransaction } from '../../src/models/transactions/common' +const assertValid = (tx: any): void => + assert.doesNotThrow(() => validateBaseTransaction(tx)) +const assertInvalid = (tx: any, message: string): void => + assert.throws(() => validateBaseTransaction(tx), ValidationError, message) + /** * Transaction Verification Testing. * @@ -10,7 +15,7 @@ import { validateBaseTransaction } from '../../src/models/transactions/common' */ describe('BaseTransaction', function () { it(`Verifies all optional BaseTransaction`, function () { - const txJson = { + const txJson: any = { Account: 'r97KeayHuEsDwyU1yPBVtMLLoQr79QcRFe', TransactionType: 'Payment', Fee: '12', @@ -56,7 +61,7 @@ describe('BaseTransaction', function () { '3045022100C6708538AE5A697895937C758E99A595B57A16393F370F11B8D4C032E80B532002207776A8E85BB9FAF460A92113B9C60F170CD964196B1F084E0DAB65BAEC368B66', } - assert.doesNotThrow(() => validateBaseTransaction(txJson)) + assertValid(txJson) }) it(`Verifies only required BaseTransaction`, function () { @@ -65,7 +70,7 @@ describe('BaseTransaction', function () { TransactionType: 'Payment', } - assert.doesNotThrow(() => validateBaseTransaction(txJson)) + assertValid(txJson) }) it(`Handles invalid Fee`, function () { @@ -75,11 +80,7 @@ describe('BaseTransaction', function () { Fee: 1000, } as any - assert.throws( - () => validateBaseTransaction(invalidFee), - ValidationError, - 'Payment: invalid field Fee', - ) + assertInvalid(invalidFee, 'Payment: invalid field Fee') }) it(`Handles invalid Sequence`, function () { @@ -89,11 +90,7 @@ describe('BaseTransaction', function () { Sequence: '145', } as any - assert.throws( - () => validateBaseTransaction(invalidSeq), - ValidationError, - 'Payment: invalid field Sequence', - ) + assertInvalid(invalidSeq, 'Payment: invalid field Sequence') }) it(`Handles invalid AccountTxnID`, function () { @@ -103,11 +100,7 @@ describe('BaseTransaction', function () { AccountTxnID: ['WRONG'], } as any - assert.throws( - () => validateBaseTransaction(invalidID), - ValidationError, - 'Payment: invalid field AccountTxnID', - ) + assertInvalid(invalidID, 'Payment: invalid field AccountTxnID') }) it(`Handles invalid LastLedgerSequence`, function () { @@ -117,9 +110,8 @@ describe('BaseTransaction', function () { LastLedgerSequence: '1000', } as any - assert.throws( - () => validateBaseTransaction(invalidLastLedgerSequence), - ValidationError, + assertInvalid( + invalidLastLedgerSequence, 'Payment: invalid field LastLedgerSequence', ) }) @@ -131,11 +123,7 @@ describe('BaseTransaction', function () { SourceTag: ['ARRAY'], } as any - assert.throws( - () => validateBaseTransaction(invalidSourceTag), - ValidationError, - 'Payment: invalid field SourceTag', - ) + assertInvalid(invalidSourceTag, 'Payment: invalid field SourceTag') }) it(`Handles invalid SigningPubKey`, function () { @@ -145,11 +133,7 @@ describe('BaseTransaction', function () { SigningPubKey: 1000, } as any - assert.throws( - () => validateBaseTransaction(invalidSigningPubKey), - ValidationError, - 'Payment: invalid field SigningPubKey', - ) + assertInvalid(invalidSigningPubKey, 'Payment: invalid field SigningPubKey') }) it(`Handles invalid TicketSequence`, function () { @@ -159,9 +143,8 @@ describe('BaseTransaction', function () { TicketSequence: '1000', } as any - assert.throws( - () => validateBaseTransaction(invalidTicketSequence), - ValidationError, + assertInvalid( + invalidTicketSequence, 'Payment: invalid field TicketSequence', ) }) @@ -173,11 +156,7 @@ describe('BaseTransaction', function () { TxnSignature: 1000, } as any - assert.throws( - () => validateBaseTransaction(invalidTxnSignature), - ValidationError, - 'Payment: invalid field TxnSignature', - ) + assertInvalid(invalidTxnSignature, 'Payment: invalid field TxnSignature') }) it(`Handles invalid Signers`, function () { @@ -187,11 +166,7 @@ describe('BaseTransaction', function () { Signers: [], } as any - assert.throws( - () => validateBaseTransaction(invalidSigners), - ValidationError, - 'BaseTransaction: invalid Signers', - ) + assertInvalid(invalidSigners, 'BaseTransaction: invalid Signers') const invalidSigners2 = { Account: 'r97KeayHuEsDwyU1yPBVtMLLoQr79QcRFe', @@ -205,11 +180,7 @@ describe('BaseTransaction', function () { ], } as any - assert.throws( - () => validateBaseTransaction(invalidSigners2), - ValidationError, - 'BaseTransaction: invalid Signers', - ) + assertInvalid(invalidSigners2, 'BaseTransaction: invalid Signers') }) it(`Handles invalid Memo`, function () { @@ -226,11 +197,7 @@ describe('BaseTransaction', function () { ], } as any - assert.throws( - () => validateBaseTransaction(invalidMemo), - ValidationError, - 'BaseTransaction: invalid Memos', - ) + assertInvalid(invalidMemo, 'BaseTransaction: invalid Memos') }) it(`Handles invalid NetworkID`, function () { @@ -239,10 +206,28 @@ describe('BaseTransaction', function () { TransactionType: 'Payment', NetworkID: '1024', } - assert.throws( - () => validateBaseTransaction(invalidNetworkID), - ValidationError, - 'Payment: invalid field NetworkID', + assertInvalid(invalidNetworkID, 'Payment: invalid field NetworkID') + }) + + it(`Handles invalid Delegate`, function () { + const invalidDelegate = { + Account: 'r97KeayHuEsDwyU1yPBVtMLLoQr79QcRFe', + TransactionType: 'Payment', + Delegate: 1234, + } + assertInvalid(invalidDelegate, 'Payment: invalid field Delegate') + }) + + it(`Handles Account and Delegate being the same error`, function () { + const account = 'r97KeayHuEsDwyU1yPBVtMLLoQr79QcRFe' + const invalidDelegate = { + Account: account, + TransactionType: 'Payment', + Delegate: account, + } + assertInvalid( + invalidDelegate, + 'BaseTransaction: Account and Delegate addresses cannot be the same', ) }) }) diff --git a/packages/xrpl/test/models/batch.test.ts b/packages/xrpl/test/models/batch.test.ts new file mode 100644 index 0000000000..25e386c8cc --- /dev/null +++ b/packages/xrpl/test/models/batch.test.ts @@ -0,0 +1,149 @@ +import { validateBatch } from '../../src/models/transactions/batch' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateBatch) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateBatch, message) + +/** + * Batch Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('Batch', function () { + let tx: any + + beforeEach(function () { + tx = { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + BatchSigners: [ + { + BatchSigner: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + SigningPubKey: + '02691AC5AE1C4C333AE5DF8A93BDC495F0EEBFC6DB0DA7EB6EF808F3AFC006E3FE', + TxnSignature: + '30450221008E595499C334127A23190F61FB9ADD8B8C501D543E37945B11FABB66B097A6130220138C908E8C4929B47E994A46D611FAC17AB295CFB8D9E0828B32F2947B97394B', + }, + }, + ], + Flags: 1, + RawTransactions: [ + { + RawTransaction: { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Amount: '5000000', + Destination: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Fee: '0', + Flags: 0x40000000, + NetworkID: 21336, + Sequence: 0, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + { + RawTransaction: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '1000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Flags: 0x40000000, + NetworkID: 21336, + Sequence: 1, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + ], + TransactionType: 'Batch', + } + }) + + it('verifies valid Batch', function () { + assertValid(tx) + }) + + it('verifies single-account Batch', function () { + tx = { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Flags: 1, + RawTransactions: [ + { + RawTransaction: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '5000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Flags: 0x40000000, + NetworkID: 21336, + Sequence: 0, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + { + RawTransaction: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '1000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Flags: 0x40000000, + NetworkID: 21336, + Sequence: 1, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + ], + TransactionType: 'Batch', + } + assertValid(tx) + }) + + it('throws w/ invalid BatchSigners', function () { + tx.BatchSigners = 0 + assertInvalid(tx, 'Batch: invalid field BatchSigners') + }) + + it('throws w/ missing RawTransactions', function () { + delete tx.RawTransactions + assertInvalid(tx, 'Batch: missing field RawTransactions') + }) + + it('throws w/ invalid RawTransactions', function () { + tx.RawTransactions = 0 + assertInvalid(tx, 'Batch: invalid field RawTransactions') + }) + + it('throws w/ invalid RawTransactions object', function () { + tx.RawTransactions = [0] + assertInvalid(tx, 'Batch: RawTransactions[0] is not object') + }) + + it('throws w/ invalid RawTransactions.RawTransaction object', function () { + tx.RawTransactions = [{ RawTransaction: 0 }] + assertInvalid(tx, 'Batch: invalid field RawTransactions[0].RawTransaction') + }) + + it('throws w/ nested Batch', function () { + tx.RawTransactions = [{ RawTransaction: tx }] + assertInvalid( + tx, + 'Batch: RawTransactions[0] is a Batch transaction. Cannot nest Batch transactions.', + ) + }) + + it('throws w/ non-object in BatchSigner list', function () { + tx.BatchSigners = [1] + assertInvalid(tx, 'Batch: BatchSigners[0] is not object.') + }) + + it('throws w/ no `tfInnerBatchTxn` flag in inner transaction', function () { + tx.RawTransactions[0].RawTransaction.Flags = 0 + assertInvalid( + tx, + 'Batch: RawTransactions[0] must contain the `tfInnerBatchTxn` flag.', + ) + }) +}) diff --git a/packages/xrpl/test/models/checkCancel.test.ts b/packages/xrpl/test/models/checkCancel.test.ts index 1cf87834a7..ed180d5629 100644 --- a/packages/xrpl/test/models/checkCancel.test.ts +++ b/packages/xrpl/test/models/checkCancel.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateCheckCancel } from '../../src/models/transactions/checkCancel' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateCheckCancel) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCheckCancel, message) /** * CheckCancel Transaction Verification Testing. @@ -17,8 +19,7 @@ describe('CheckCancel', function () { '49647F0D748DC3FE26BDACBC57F251AADEFFF391403EC9BF87C97F67E9977FB0', } as any - assert.doesNotThrow(() => validateCheckCancel(validCheckCancel)) - assert.doesNotThrow(() => validate(validCheckCancel)) + assertValid(validCheckCancel) }) it(`throws w/ invalid CheckCancel`, function () { @@ -28,15 +29,6 @@ describe('CheckCancel', function () { CheckID: 4964734566545678, } as any - assert.throws( - () => validateCheckCancel(invalidCheckID), - ValidationError, - 'CheckCancel: invalid CheckID', - ) - assert.throws( - () => validate(invalidCheckID), - ValidationError, - 'CheckCancel: invalid CheckID', - ) + assertInvalid(invalidCheckID, 'CheckCancel: invalid CheckID') }) }) diff --git a/packages/xrpl/test/models/checkCash.test.ts b/packages/xrpl/test/models/checkCash.test.ts index 918bdeb300..401cd0df18 100644 --- a/packages/xrpl/test/models/checkCash.test.ts +++ b/packages/xrpl/test/models/checkCash.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateCheckCash } from '../../src/models/transactions/checkCash' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateCheckCash) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCheckCash, message) /** * CheckCash Transaction Verification Testing. @@ -19,8 +21,7 @@ describe('CheckCash', function () { Fee: '12', } as any - assert.doesNotThrow(() => validateCheckCash(validCheckCash)) - assert.doesNotThrow(() => validate(validCheckCash)) + assertValid(validCheckCash) }) it(`throws w/ invalid CheckID`, function () { @@ -31,16 +32,7 @@ describe('CheckCash', function () { CheckID: 83876645678567890, } as any - assert.throws( - () => validateCheckCash(invalidCheckID), - ValidationError, - 'CheckCash: invalid CheckID', - ) - assert.throws( - () => validate(invalidCheckID), - ValidationError, - 'CheckCash: invalid CheckID', - ) + assertInvalid(invalidCheckID, 'CheckCash: invalid CheckID') }) it(`throws w/ invalid Amount`, function () { @@ -52,16 +44,7 @@ describe('CheckCash', function () { '838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334', } as any - assert.throws( - () => validateCheckCash(invalidAmount), - ValidationError, - 'CheckCash: invalid Amount', - ) - assert.throws( - () => validate(invalidAmount), - ValidationError, - 'CheckCash: invalid Amount', - ) + assertInvalid(invalidAmount, 'CheckCash: invalid Amount') }) it(`throws w/ having both Amount and DeliverMin`, function () { @@ -74,14 +57,8 @@ describe('CheckCash', function () { '838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334', } as any - assert.throws( - () => validateCheckCash(invalidDeliverMin), - ValidationError, - 'CheckCash: cannot have both Amount and DeliverMin', - ) - assert.throws( - () => validate(invalidDeliverMin), - ValidationError, + assertInvalid( + invalidDeliverMin, 'CheckCash: cannot have both Amount and DeliverMin', ) }) @@ -95,15 +72,6 @@ describe('CheckCash', function () { '838766BA2B995C00744175F69A1B11E32C3DBC40E64801A4056FCBD657F57334', } as any - assert.throws( - () => validateCheckCash(invalidDeliverMin), - ValidationError, - 'CheckCash: invalid DeliverMin', - ) - assert.throws( - () => validate(invalidDeliverMin), - ValidationError, - 'CheckCash: invalid DeliverMin', - ) + assertInvalid(invalidDeliverMin, 'CheckCash: invalid DeliverMin') }) }) diff --git a/packages/xrpl/test/models/checkCreate.test.ts b/packages/xrpl/test/models/checkCreate.test.ts index a97be25184..812973705f 100644 --- a/packages/xrpl/test/models/checkCreate.test.ts +++ b/packages/xrpl/test/models/checkCreate.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateCheckCreate } from '../../src/models/transactions/checkCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateCheckCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateCheckCreate, message) /** * CheckCreate Transaction Verification Testing. @@ -22,8 +24,7 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.doesNotThrow(() => validateCheckCreate(validCheck)) - assert.doesNotThrow(() => validate(validCheck)) + assertValid(validCheck) }) it(`throws w/ invalid Destination`, function () { @@ -39,16 +40,7 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.throws( - () => validateCheckCreate(invalidDestination), - ValidationError, - 'CheckCreate: invalid field Destination', - ) - assert.throws( - () => validate(invalidDestination), - ValidationError, - 'CheckCreate: invalid field Destination', - ) + assertInvalid(invalidDestination, 'CheckCreate: invalid field Destination') }) it(`throws w/ invalid SendMax`, function () { @@ -64,16 +56,7 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.throws( - () => validateCheckCreate(invalidSendMax), - ValidationError, - 'CheckCreate: invalid SendMax', - ) - assert.throws( - () => validate(invalidSendMax), - ValidationError, - 'CheckCreate: invalid SendMax', - ) + assertInvalid(invalidSendMax, 'CheckCreate: invalid SendMax') }) it(`throws w/ invalid DestinationTag`, function () { @@ -89,14 +72,8 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.throws( - () => validateCheckCreate(invalidDestinationTag), - ValidationError, - 'CheckCreate: invalid field DestinationTag', - ) - assert.throws( - () => validate(invalidDestinationTag), - ValidationError, + assertInvalid( + invalidDestinationTag, 'CheckCreate: invalid field DestinationTag', ) }) @@ -114,16 +91,7 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.throws( - () => validateCheckCreate(invalidExpiration), - ValidationError, - 'CheckCreate: invalid Expiration', - ) - assert.throws( - () => validate(invalidExpiration), - ValidationError, - 'CheckCreate: invalid Expiration', - ) + assertInvalid(invalidExpiration, 'CheckCreate: invalid Expiration') }) it(`throws w/ invalid InvoiceID`, function () { @@ -138,15 +106,6 @@ describe('CheckCreate', function () { Fee: '12', } as any - assert.throws( - () => validateCheckCreate(invalidInvoiceID), - ValidationError, - 'CheckCreate: invalid InvoiceID', - ) - assert.throws( - () => validate(invalidInvoiceID), - ValidationError, - 'CheckCreate: invalid InvoiceID', - ) + assertInvalid(invalidInvoiceID, 'CheckCreate: invalid InvoiceID') }) }) diff --git a/packages/xrpl/test/models/clawback.test.ts b/packages/xrpl/test/models/clawback.test.ts index b60f765311..c957b6a916 100644 --- a/packages/xrpl/test/models/clawback.test.ts +++ b/packages/xrpl/test/models/clawback.test.ts @@ -1,6 +1,9 @@ -import { assert } from 'chai' +import { validateClawback } from '../../src/models/transactions/clawback' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError } from '../../src' +const assertValid = (tx: any): void => assertTxIsValid(tx, validateClawback) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateClawback, message) /** * Clawback Transaction Verification Testing. @@ -19,7 +22,7 @@ describe('Clawback', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', } as any - assert.doesNotThrow(() => validate(validClawback)) + assertValid(validClawback) }) it(`throws w/ missing Amount`, function () { @@ -28,11 +31,7 @@ describe('Clawback', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', } as any - assert.throws( - () => validate(missingAmount), - ValidationError, - 'Clawback: missing field Amount', - ) + assertInvalid(missingAmount, 'Clawback: missing field Amount') }) it(`throws w/ invalid Amount`, function () { @@ -42,11 +41,7 @@ describe('Clawback', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', } as any - assert.throws( - () => validate(invalidAmount), - ValidationError, - 'Clawback: invalid Amount', - ) + assertInvalid(invalidAmount, 'Clawback: invalid field Amount') const invalidStrAmount = { TransactionType: 'Clawback', @@ -54,11 +49,7 @@ describe('Clawback', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', } as any - assert.throws( - () => validate(invalidStrAmount), - ValidationError, - 'Clawback: invalid Amount', - ) + assertInvalid(invalidStrAmount, 'Clawback: invalid field Amount') }) it(`throws w/ invalid holder Account`, function () { @@ -72,10 +63,62 @@ describe('Clawback', function () { Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', } as any - assert.throws( - () => validate(invalidAccount), - ValidationError, - 'Clawback: invalid holder Account', - ) + assertInvalid(invalidAccount, 'Clawback: invalid holder Account') + }) + + it(`verifies valid MPT Clawback`, function () { + const validClawback = { + TransactionType: 'Clawback', + Amount: { + mpt_issuance_id: '000004C463C52827307480341125DA0577DEFC38405B0E3E', + value: '10', + }, + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Holder: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + } as any + + assertValid(validClawback) + }) + + it(`throws w/ invalid Holder Account`, function () { + const invalidAccount = { + TransactionType: 'Clawback', + Amount: { + mpt_issuance_id: '000004C463C52827307480341125DA0577DEFC38405B0E3E', + value: '10', + }, + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Holder: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + } as any + + assertInvalid(invalidAccount, 'Clawback: invalid holder Account') + }) + + it(`throws w/ invalid Holder`, function () { + const invalidAccount = { + TransactionType: 'Clawback', + Amount: { + mpt_issuance_id: '000004C463C52827307480341125DA0577DEFC38405B0E3E', + value: '10', + }, + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + } as any + + assertInvalid(invalidAccount, 'Clawback: missing Holder') + }) + + it(`throws w/ invalid currency Holder`, function () { + const invalidAccount = { + TransactionType: 'Clawback', + Amount: { + currency: 'DSH', + issuer: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + value: '43.11584856965009', + }, + Account: 'rWYkbWkCeg8dP6rXALnjgZSjjLyih5NXm', + Holder: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + } as any + + assertInvalid(invalidAccount, 'Clawback: cannot have Holder for currency') }) }) diff --git a/packages/xrpl/test/models/delegateSet.test.ts b/packages/xrpl/test/models/delegateSet.test.ts new file mode 100644 index 0000000000..5b9cbb3dff --- /dev/null +++ b/packages/xrpl/test/models/delegateSet.test.ts @@ -0,0 +1,117 @@ +import { validateDelegateSet } from '../../src/models/transactions/delegateSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateDelegateSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateDelegateSet, message) + +/** + * DelegateSet Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('DelegateSet', function () { + let tx: any + + beforeEach(function () { + tx = { + TransactionType: 'DelegateSet', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + Authorize: 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW', + Permissions: [ + { Permission: { PermissionValue: 'TrustlineAuthorize' } }, + { Permission: { PermissionValue: 'Payment' } }, + ], + } + }) + + it('verifies valid DelegateSet', function () { + assertValid(tx) + }) + + it(`throws w/ missing field Authorize`, function () { + delete tx.Authorize + const errorMessage = 'DelegateSet: missing field Authorize' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ Authorize and Account must be different`, function () { + tx.Authorize = tx.Account + const errorMessage = 'DelegateSet: Authorize and Account must be different.' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ missing field Permissions`, function () { + delete tx.Permissions + const errorMessage = 'DelegateSet: missing field Permissions' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ invalid field Permissions`, function () { + tx.Permissions = 'TrustlineAuthorize' + const errorMessage = 'DelegateSet: invalid field Permissions' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ Permissions array length cannot be greater than max`, function () { + tx.Permissions = [ + { Permission: { PermissionValue: 'Payment' } }, + { Permission: { PermissionValue: 'TrustSet' } }, + { Permission: { PermissionValue: 'TrustlineFreeze' } }, + { Permission: { PermissionValue: 'TrustlineUnfreeze' } }, + { Permission: { PermissionValue: 'TrustlineAuthorize' } }, + { Permission: { PermissionValue: 'AccountDomainSet' } }, + { Permission: { PermissionValue: 'AccountEmailHashSet' } }, + { Permission: { PermissionValue: 'AccountMessageKeySet' } }, + { Permission: { PermissionValue: 'AccountTransferRateSet' } }, + { Permission: { PermissionValue: 'AccountTickSizeSet' } }, + { Permission: { PermissionValue: 'PaymentMint' } }, + ] + const errorMessage = + 'DelegateSet: Permissions array length cannot be greater than 10.' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ Permissions array element is malformed`, function () { + tx.Permissions = ['Payment'] + const errorMessage = 'DelegateSet: Permissions array element is malformed' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ PermissionValue must be defined`, function () { + tx.Permissions = [{ Permission: { PermissionValue: null } }] + const errorMessage = 'DelegateSet: PermissionValue must be defined' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ PermissionValue must be a string`, function () { + tx.Permissions = [{ Permission: { PermissionValue: 123 } }] + const errorMessage = 'DelegateSet: PermissionValue must be a string' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ PermissionValue contains a non-delegatable transaction`, function () { + tx.Permissions = [{ Permission: { PermissionValue: 'AccountSet' } }] + const errorMessage = + 'DelegateSet: PermissionValue contains a non-delegatable transaction AccountSet' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ PermissionValue contains a non-delegatable pseudo transaction`, function () { + tx.Permissions = [{ Permission: { PermissionValue: 'EnableAmendment' } }] + const errorMessage = + 'DelegateSet: PermissionValue contains a non-delegatable transaction EnableAmendment' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ Permissions array cannot contain duplicate values`, function () { + tx.Permissions = [ + { Permission: { PermissionValue: 'Payment' } }, + { Permission: { PermissionValue: 'TrustSet' } }, + { Permission: { PermissionValue: 'Payment' } }, + ] + const errorMessage = + 'DelegateSet: Permissions array cannot contain duplicate values' + assertInvalid(tx, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/depositPreauth.test.ts b/packages/xrpl/test/models/depositPreauth.test.ts index 11e3305713..01737f8a59 100644 --- a/packages/xrpl/test/models/depositPreauth.test.ts +++ b/packages/xrpl/test/models/depositPreauth.test.ts @@ -1,7 +1,13 @@ -import { assert } from 'chai' +import { stringToHex } from '@xrplf/isomorphic/utils' -import { validate, ValidationError } from '../../src' +import { AuthorizeCredential } from '../../src' import { validateDepositPreauth } from '../../src/models/transactions/depositPreauth' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateDepositPreauth) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateDepositPreauth, message) /** * DepositPreauth Transaction Verification Testing. @@ -9,7 +15,14 @@ import { validateDepositPreauth } from '../../src/models/transactions/depositPre * Providing runtime verification testing for each specific transaction type. */ describe('DepositPreauth', function () { - let depositPreauth + let depositPreauth: any + + const validCredential = { + Credential: { + Issuer: 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW', + CredentialType: stringToHex('Passport'), + }, + } beforeEach(function () { depositPreauth = { @@ -20,92 +33,177 @@ describe('DepositPreauth', function () { it('verifies valid DepositPreauth when only Authorize is provided', function () { depositPreauth.Authorize = 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW' - assert.doesNotThrow(() => validateDepositPreauth(depositPreauth)) - assert.doesNotThrow(() => validate(depositPreauth)) + assertValid(depositPreauth) }) it('verifies valid DepositPreauth when only Unauthorize is provided', function () { depositPreauth.Unauthorize = 'raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n' - assert.doesNotThrow(() => validateDepositPreauth(depositPreauth)) - assert.doesNotThrow(() => validate(depositPreauth)) + assertValid(depositPreauth) + }) + + it('verifies valid DepositPreauth when only AuthorizeCredentials is provided', function () { + depositPreauth.AuthorizeCredentials = [validCredential] + assertValid(depositPreauth) }) - it('throws when both Authorize and Unauthorize are provided', function () { + it('verifies valid DepositPreauth when only UnauthorizeCredentials is provided', function () { + depositPreauth.UnauthorizeCredentials = [validCredential] + assertValid(depositPreauth) + }) + + it('throws when multiple of Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials are provided', function () { + const errorMessage = + 'DepositPreauth: Requires exactly one field of the following: Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials.' + depositPreauth.Authorize = 'rsA2LpzuawewSBQXkiju3YQTMzW13pAAdW' + depositPreauth.UnauthorizeCredentials = [validCredential] + assertInvalid(depositPreauth, errorMessage) + depositPreauth.Unauthorize = 'raKEEVSGnKSD9Zyvxu4z6Pqpm4ABH8FS6n' - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, - "DepositPreauth: can't provide both Authorize and Unauthorize fields", - ) - assert.throws( - () => validate(depositPreauth), - ValidationError, - "DepositPreauth: can't provide both Authorize and Unauthorize fields", - ) + assertInvalid(depositPreauth, errorMessage) + + depositPreauth.AuthorizeCredentials = [validCredential] + assertInvalid(depositPreauth, errorMessage) + + depositPreauth.Authorize = undefined + assertInvalid(depositPreauth, errorMessage) + + depositPreauth.UnauthorizeCredentials = undefined + assertInvalid(depositPreauth, errorMessage) }) - it('throws when neither Authorize nor Unauthorize are provided', function () { - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, - 'DepositPreauth: must provide either Authorize or Unauthorize field', - ) - assert.throws( - () => validate(depositPreauth), - ValidationError, - 'DepositPreauth: must provide either Authorize or Unauthorize field', - ) + it('throws when none of Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials are provided', function () { + const errorMessage = + 'DepositPreauth: Requires exactly one field of the following: Authorize, Unauthorize, AuthorizeCredentials, UnauthorizeCredentials.' + assertInvalid(depositPreauth, errorMessage) }) it('throws when Authorize is not a string', function () { depositPreauth.Authorize = 1234 - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, - 'DepositPreauth: Authorize must be a string', - ) - assert.throws( - () => validate(depositPreauth), - ValidationError, - 'DepositPreauth: Authorize must be a string', - ) + assertInvalid(depositPreauth, 'DepositPreauth: Authorize must be a string') }) it('throws when an Account attempts to preauthorize its own address', function () { depositPreauth.Authorize = depositPreauth.Account - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, + assertInvalid( + depositPreauth, "DepositPreauth: Account can't preauthorize its own address", ) }) it('throws when Unauthorize is not a string', function () { depositPreauth.Unauthorize = 1234 - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, - 'DepositPreauth: Unauthorize must be a string', - ) - assert.throws( - () => validate(depositPreauth), - ValidationError, + assertInvalid( + depositPreauth, 'DepositPreauth: Unauthorize must be a string', ) }) it('throws when an Account attempts to unauthorize its own address', function () { depositPreauth.Unauthorize = depositPreauth.Account - assert.throws( - () => validateDepositPreauth(depositPreauth), - ValidationError, - "DepositPreauth: Account can't unauthorize its own address", - ) - assert.throws( - () => validate(depositPreauth), - ValidationError, + assertInvalid( + depositPreauth, "DepositPreauth: Account can't unauthorize its own address", ) }) + + it('throws when AuthorizeCredentials is not an array', function () { + const errorMessage = 'DepositPreauth: Credentials must be an array' + depositPreauth.AuthorizeCredentials = validCredential + + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when UnauthorizeCredentials is not an array', function () { + const errorMessage = 'DepositPreauth: Credentials must be an array' + depositPreauth.UnauthorizeCredentials = validCredential + + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when AuthorizeCredentials is empty array', function () { + const errorMessage = 'DepositPreauth: Credentials cannot be an empty array' + depositPreauth.AuthorizeCredentials = [] + + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when UnauthorizeCredentials is empty array', function () { + const errorMessage = 'DepositPreauth: Credentials cannot be an empty array' + depositPreauth.UnauthorizeCredentials = [] + + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when AuthorizeCredentials is too long', function () { + const sampleCredentials: AuthorizeCredential[] = [] + const errorMessage = + 'DepositPreauth: Credentials length cannot exceed 8 elements' + for (let index = 0; index < 9; index++) { + sampleCredentials.push({ + Credential: { + Issuer: `SampleIssuer${index}`, + CredentialType: stringToHex('Passport'), + }, + }) + } + depositPreauth.AuthorizeCredentials = sampleCredentials + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when UnauthorizeCredentials is too long', function () { + const sampleCredentials: AuthorizeCredential[] = [] + const errorMessage = + 'DepositPreauth: Credentials length cannot exceed 8 elements' + for (let index = 0; index < 9; index++) { + sampleCredentials.push({ + Credential: { + Issuer: `SampleIssuer${index}`, + CredentialType: stringToHex('Passport'), + }, + }) + } + depositPreauth.UnauthorizeCredentials = sampleCredentials + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when AuthorizeCredentials is invalid shape', function () { + const invalidCredentials = [ + { Credential: 'Invalid Shape' }, + { Credential: 'Another Invalid Shape' }, + ] + const errorMessage = 'DepositPreauth: Invalid Credentials format' + + depositPreauth.AuthorizeCredentials = invalidCredentials + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when UnauthorizeCredentials is invalid shape', function () { + const invalidCredentials = [ + { Credential: 'Invalid Shape' }, + { Credential: 'Another Invalid Shape' }, + ] + const errorMessage = 'DepositPreauth: Invalid Credentials format' + + depositPreauth.UnauthorizeCredentials = invalidCredentials + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when AuthorizeCredentials has duplicates', function () { + const invalidCredentials = [validCredential, validCredential] + const errorMessage = + 'DepositPreauth: Credentials cannot contain duplicate elements' + + depositPreauth.AuthorizeCredentials = invalidCredentials + assertInvalid(depositPreauth, errorMessage) + }) + + it('throws when UnauthorizeCredentials has duplicates', function () { + const invalidCredentials = [validCredential, validCredential] + const errorMessage = + 'DepositPreauth: Credentials cannot contain duplicate elements' + + depositPreauth.UnauthorizeCredentials = invalidCredentials + assertInvalid(depositPreauth, errorMessage) + }) }) diff --git a/packages/xrpl/test/models/escrowCancel.test.ts b/packages/xrpl/test/models/escrowCancel.test.ts index 8ec73fe45f..1a679c77b0 100644 --- a/packages/xrpl/test/models/escrowCancel.test.ts +++ b/packages/xrpl/test/models/escrowCancel.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateEscrowCancel } from '../../src/models/transactions/escrowCancel' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateEscrowCancel) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateEscrowCancel, message) /** * Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateEscrowCancel } from '../../src/models/transactions/escrowCancel * Providing runtime verification testing for each specific transaction type. */ describe('EscrowCancel', function () { - let cancel + let cancel: any beforeEach(function () { cancel = { @@ -21,74 +23,36 @@ describe('EscrowCancel', function () { }) it(`Valid EscrowCancel`, function () { - assert.doesNotThrow(() => validateEscrowCancel(cancel)) - assert.doesNotThrow(() => validate(cancel)) + assertValid(cancel) }) it(`Valid EscrowCancel with string OfferSequence`, function () { cancel.OfferSequence = '7' - assert.doesNotThrow(() => validateEscrowCancel(cancel)) - assert.doesNotThrow(() => validate(cancel)) + assertValid(cancel) }) it(`Invalid EscrowCancel missing owner`, function () { delete cancel.Owner - assert.throws( - () => validateEscrowCancel(cancel), - ValidationError, - 'EscrowCancel: missing field Owner', - ) - assert.throws( - () => validate(cancel), - ValidationError, - 'EscrowCancel: missing field Owner', - ) + assertInvalid(cancel, 'EscrowCancel: missing field Owner') }) it(`Invalid EscrowCancel missing offerSequence`, function () { delete cancel.OfferSequence - assert.throws( - () => validateEscrowCancel(cancel), - ValidationError, - 'EscrowCancel: missing OfferSequence', - ) - assert.throws( - () => validate(cancel), - ValidationError, - 'EscrowCancel: missing OfferSequence', - ) + assertInvalid(cancel, 'EscrowCancel: missing OfferSequence') }) it(`Invalid Owner`, function () { cancel.Owner = 10 - assert.throws( - () => validateEscrowCancel(cancel), - ValidationError, - 'EscrowCancel: invalid field Owner', - ) - assert.throws( - () => validate(cancel), - ValidationError, - 'EscrowCancel: invalid field Owner', - ) + assertInvalid(cancel, 'EscrowCancel: invalid field Owner') }) it(`Invalid OfferSequence`, function () { cancel.OfferSequence = 'random' - assert.throws( - () => validateEscrowCancel(cancel), - ValidationError, - 'EscrowCancel: OfferSequence must be a number', - ) - assert.throws( - () => validate(cancel), - ValidationError, - 'EscrowCancel: OfferSequence must be a number', - ) + assertInvalid(cancel, 'EscrowCancel: OfferSequence must be a number') }) }) diff --git a/packages/xrpl/test/models/escrowCreate.test.ts b/packages/xrpl/test/models/escrowCreate.test.ts index 4458fdd128..bb0d4e207b 100644 --- a/packages/xrpl/test/models/escrowCreate.test.ts +++ b/packages/xrpl/test/models/escrowCreate.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateEscrowCreate } from '../../src/models/transactions/escrowCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateEscrowCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateEscrowCreate, message) /** * EscrowCreate Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateEscrowCreate } from '../../src/models/transactions/escrowCreate * Providing runtime verification testing for each specific transaction type. */ describe('EscrowCreate', function () { - let escrow + let escrow: any beforeEach(function () { escrow = { @@ -27,137 +29,63 @@ describe('EscrowCreate', function () { }) it(`verifies valid EscrowCreate`, function () { - assert.doesNotThrow(() => validateEscrowCreate(escrow)) - assert.doesNotThrow(() => validate(escrow)) + assertValid(escrow) }) it(`Missing amount`, function () { delete escrow.Amount - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: missing field Amount', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: missing field Amount', - ) + assertInvalid(escrow, 'EscrowCreate: missing field Amount') }) it(`Missing destination`, function () { delete escrow.Destination - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: missing field Destination', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: missing field Destination', - ) + assertInvalid(escrow, 'EscrowCreate: missing field Destination') }) it(`throws w/ invalid Destination`, function () { escrow.Destination = 10 - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: invalid field Destination', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: invalid field Destination', - ) + assertInvalid(escrow, 'EscrowCreate: invalid field Destination') }) it(`throws w/ invalid Amount`, function () { escrow.Amount = 1000 - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: Amount must be a string', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: Amount must be a string', - ) + assertInvalid(escrow, 'EscrowCreate: invalid field Amount') }) it(`invalid CancelAfter`, function () { escrow.CancelAfter = '100' - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: CancelAfter must be a number', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: CancelAfter must be a number', - ) + assertInvalid(escrow, 'EscrowCreate: CancelAfter must be a number') }) it(`invalid FinishAfter`, function () { escrow.FinishAfter = '1000' - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: FinishAfter must be a number', - ) + assertInvalid(escrow, 'EscrowCreate: FinishAfter must be a number') }) it(`invalid Condition`, function () { escrow.Condition = 0x141243 - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: Condition must be a string', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: Condition must be a string', - ) + assertInvalid(escrow, 'EscrowCreate: Condition must be a string') }) it(`invalid DestinationTag`, function () { escrow.DestinationTag = '100' - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: invalid field DestinationTag', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowCreate: invalid field DestinationTag', - ) + assertInvalid(escrow, 'EscrowCreate: invalid field DestinationTag') }) it(`Missing both CancelAfter and FinishAfter`, function () { delete escrow.CancelAfter delete escrow.FinishAfter - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: Either CancelAfter or FinishAfter must be specified', - ) - assert.throws( - () => validate(escrow), - ValidationError, + assertInvalid( + escrow, 'EscrowCreate: Either CancelAfter or FinishAfter must be specified', ) }) @@ -166,14 +94,8 @@ describe('EscrowCreate', function () { delete escrow.Condition delete escrow.FinishAfter - assert.throws( - () => validateEscrowCreate(escrow), - ValidationError, - 'EscrowCreate: Either Condition or FinishAfter must be specified', - ) - assert.throws( - () => validate(escrow), - ValidationError, + assertInvalid( + escrow, 'EscrowCreate: Either Condition or FinishAfter must be specified', ) }) diff --git a/packages/xrpl/test/models/escrowFinish.test.ts b/packages/xrpl/test/models/escrowFinish.test.ts index e9d772a872..252858315e 100644 --- a/packages/xrpl/test/models/escrowFinish.test.ts +++ b/packages/xrpl/test/models/escrowFinish.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateEscrowFinish } from '../../src/models/transactions/escrowFinish' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateEscrowFinish) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateEscrowFinish, message) /** * EscrowFinish Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateEscrowFinish } from '../../src/models/transactions/escrowFinish * Providing runtime verification testing for each specific transaction type. */ describe('EscrowFinish', function () { - let escrow + let escrow: any beforeEach(function () { escrow = { @@ -20,85 +22,109 @@ describe('EscrowFinish', function () { Condition: 'A0258020E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855810100', Fulfillment: 'A0028000', + CredentialIDs: [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + ], } }) it(`verifies valid EscrowFinish`, function () { - assert.doesNotThrow(() => validateEscrowFinish(escrow)) - assert.doesNotThrow(() => validate(escrow)) + assertValid(escrow) }) it(`verifies valid EscrowFinish w/o optional`, function () { - delete escrow.Condition - delete escrow.Fulfillment + escrow.Condition = undefined + escrow.Fulfillment = undefined + escrow.CredentialIDs = undefined - assert.doesNotThrow(() => validateEscrowFinish(escrow)) - assert.doesNotThrow(() => validate(escrow)) + assertValid(escrow) }) it(`verifies valid EscrowFinish w/string OfferSequence`, function () { escrow.OfferSequence = '7' - assert.doesNotThrow(() => validateEscrowFinish(escrow)) - assert.doesNotThrow(() => validate(escrow)) + assertValid(escrow) }) it(`throws w/ invalid Owner`, function () { escrow.Owner = 0x15415253 - assert.throws( - () => validateEscrowFinish(escrow), - ValidationError, - 'EscrowFinish: invalid field Owner', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowFinish: invalid field Owner', - ) + assertInvalid(escrow, 'EscrowFinish: invalid field Owner') }) it(`throws w/ invalid OfferSequence`, function () { escrow.OfferSequence = 'random' - assert.throws( - () => validateEscrowFinish(escrow), - ValidationError, - 'EscrowFinish: OfferSequence must be a number', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowFinish: OfferSequence must be a number', - ) + assertInvalid(escrow, 'EscrowFinish: OfferSequence must be a number') }) it(`throws w/ invalid Condition`, function () { escrow.Condition = 10 - assert.throws( - () => validateEscrowFinish(escrow), - ValidationError, - 'EscrowFinish: Condition must be a string', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowFinish: Condition must be a string', - ) + assertInvalid(escrow, 'EscrowFinish: Condition must be a string') }) it(`throws w/ invalid Fulfillment`, function () { escrow.Fulfillment = 0x142341 - assert.throws( - () => validateEscrowFinish(escrow), - ValidationError, - 'EscrowFinish: Fulfillment must be a string', - ) - assert.throws( - () => validate(escrow), - ValidationError, - 'EscrowFinish: Fulfillment must be a string', - ) + assertInvalid(escrow, 'EscrowFinish: Fulfillment must be a string') + }) + + it(`throws w/ non-array CredentialIDs`, function () { + escrow.CredentialIDs = + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A' + + const errorMessage = 'EscrowFinish: Credentials must be an array' + + assertInvalid(escrow, errorMessage) + }) + + it(`throws CredentialIDs length exceeds max length`, function () { + escrow.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66B', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66C', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66D', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66E', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66F', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F660', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F661', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = + 'EscrowFinish: Credentials length cannot exceed 8 elements' + + assertInvalid(escrow, errorMessage) + }) + + it(`throws w/ empty CredentialIDs`, function () { + escrow.CredentialIDs = [] + + const errorMessage = 'EscrowFinish: Credentials cannot be an empty array' + + assertInvalid(escrow, errorMessage) + }) + + it(`throws w/ non-string CredentialIDs`, function () { + escrow.CredentialIDs = [ + 123123, + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = 'EscrowFinish: Invalid Credentials ID list format' + + assertInvalid(escrow, errorMessage) + }) + + it(`throws w/ duplicate CredentialIDs`, function () { + escrow.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = + 'EscrowFinish: Credentials cannot contain duplicate elements' + + assertInvalid(escrow, errorMessage) }) }) diff --git a/packages/xrpl/test/models/loanBrokerCoverClawback.test.ts b/packages/xrpl/test/models/loanBrokerCoverClawback.test.ts new file mode 100644 index 0000000000..7bd9a99fbf --- /dev/null +++ b/packages/xrpl/test/models/loanBrokerCoverClawback.test.ts @@ -0,0 +1,57 @@ +import { validateLoanBrokerCoverClawback } from '../../src/models/transactions/loanBrokerCoverClawback' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateLoanBrokerCoverClawback) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanBrokerCoverClawback, errorMessage) + +describe('unit test LoanBrokerCoverClawback', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanBrokerCoverClawback', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + Amount: { + mpt_issuance_id: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + }, + } + }) + + test('valid tx', () => { + assertValid(tx) + }) + + test('incorrect LoanBrokerID', () => { + tx.LoanBrokerID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerCoverClawback: LoanBrokerID must be 64 characters hexadecimal string', + ) + }) + + test('incorrect Amount', () => { + tx.Amount = { + mpt_issuanceId: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + } + assertInvalid(tx, 'LoanBrokerCoverClawback: invalid field Amount') + + tx.Amount = '100' + assertInvalid(tx, 'LoanBrokerCoverClawback: invalid field Amount') + }) + + test('missing LoanBrokerId and Amount', () => { + delete tx.LoanBrokerID + delete tx.Amount + assertInvalid( + tx, + 'LoanBrokerCoverClawback: Either LoanBrokerID or Amount is required', + ) + }) +}) diff --git a/packages/xrpl/test/models/loanBrokerCoverDeposit.test.ts b/packages/xrpl/test/models/loanBrokerCoverDeposit.test.ts new file mode 100644 index 0000000000..fac3bcc802 --- /dev/null +++ b/packages/xrpl/test/models/loanBrokerCoverDeposit.test.ts @@ -0,0 +1,51 @@ +import { validateLoanBrokerCoverDeposit } from '../../src/models/transactions/loanBrokerCoverDeposit' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateLoanBrokerCoverDeposit) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanBrokerCoverDeposit, errorMessage) + +describe('unit test LoanBrokerCoverDeposit', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanBrokerCoverDeposit', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + Amount: { + mpt_issuance_id: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + }, + } + }) + + test('valid tx', () => { + assertValid(tx) + }) + + test('incorrect LoanBrokerID', () => { + tx.LoanBrokerID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerCoverDeposit: LoanBrokerID must be 64 characters hexadecimal string', + ) + + delete tx.LoanBrokerID + assertInvalid(tx, 'LoanBrokerCoverDeposit: missing field LoanBrokerID') + }) + + test('incorrect Amount', () => { + tx.Amount = { + mpt_issuanceId: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + } + assertInvalid(tx, 'LoanBrokerCoverDeposit: invalid field Amount') + + delete tx.Amount + assertInvalid(tx, 'LoanBrokerCoverDeposit: missing field Amount') + }) +}) diff --git a/packages/xrpl/test/models/loanBrokerCoverWithdraw.test.ts b/packages/xrpl/test/models/loanBrokerCoverWithdraw.test.ts new file mode 100644 index 0000000000..5e82d972f9 --- /dev/null +++ b/packages/xrpl/test/models/loanBrokerCoverWithdraw.test.ts @@ -0,0 +1,52 @@ +import { validateLoanBrokerCoverWithdraw } from '../../src/models/transactions/loanBrokerCoverWithdraw' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateLoanBrokerCoverWithdraw) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanBrokerCoverWithdraw, errorMessage) + +describe('unit test LoanBrokerCoverWithdraw', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanBrokerCoverWithdraw', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + Amount: { + mpt_issuance_id: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + }, + Destination: 'rPvt4Ff6G7Y1kxjk6h3jjwTvtmDSaNa8Wh', + } + }) + + test('valid tx', () => { + assertValid(tx) + }) + + test('incorrect LoanBrokerID', () => { + tx.LoanBrokerID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerCoverWithdraw: LoanBrokerID must be 64 characters hexadecimal string', + ) + + delete tx.LoanBrokerID + assertInvalid(tx, 'LoanBrokerCoverWithdraw: missing field LoanBrokerID') + }) + + test('incorrect Amount', () => { + tx.Amount = { + mpt_issuanceId: '0000012FFD9EE5DA93AC614B4DB94D7E0FCE415CA51BED47', + value: '1000000', + } + assertInvalid(tx, 'LoanBrokerCoverWithdraw: invalid field Amount') + + delete tx.Amount + assertInvalid(tx, 'LoanBrokerCoverWithdraw: missing field Amount') + }) +}) diff --git a/packages/xrpl/test/models/loanBrokerDelete.test.ts b/packages/xrpl/test/models/loanBrokerDelete.test.ts new file mode 100644 index 0000000000..3584bbd029 --- /dev/null +++ b/packages/xrpl/test/models/loanBrokerDelete.test.ts @@ -0,0 +1,36 @@ +import { validateLoanBrokerDelete } from '../../src/models/transactions/loanBrokerDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateLoanBrokerDelete) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanBrokerDelete, errorMessage) + +describe('unit test LoanBrokerDelete', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanBrokerDelete', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + } + }) + + test('valid tx', () => { + assertValid(tx) + }) + + test('incorrect LoanBrokerID', () => { + tx.LoanBrokerID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerDelete: LoanBrokerID must be 64 characters hexadecimal string', + ) + + delete tx.LoanBrokerID + assertInvalid(tx, 'LoanBrokerDelete: missing field LoanBrokerID') + }) +}) diff --git a/packages/xrpl/test/models/loanBrokerSet.test.ts b/packages/xrpl/test/models/loanBrokerSet.test.ts new file mode 100644 index 0000000000..1243c7f749 --- /dev/null +++ b/packages/xrpl/test/models/loanBrokerSet.test.ts @@ -0,0 +1,130 @@ +import { validateLoanBrokerSet } from '../../src/models/transactions/loanBrokerSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateLoanBrokerSet) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanBrokerSet, errorMessage) + +describe('unit test LoanBrokerSet', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanBrokerSet', + VaultID: + '000004D417A9CE049C9A71A62B004659B5F1AAAB1BEA1EFDE4E01EB3497FD999', + LoanBrokerID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Data: 'ABCD', + ManagementFeeRate: 500, + DebtMaximum: '10e10', + CoverRateMinimum: 50, + CoverRateLiquidation: 20, + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + } + }) + + test('valid tx', () => { + assertValid(tx) + }) + + test('incorrect VaultID', () => { + tx.VaultID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerSet: VaultID must be 64 characters hexadecimal string', + ) + + delete tx.VaultID + assertInvalid(tx, 'LoanBrokerSet: missing field VaultID') + }) + + test('incorrect LoanBrokerID', () => { + tx.LoanBrokerID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerSet: LoanBrokerID must be 64 characters hexadecimal string', + ) + }) + + test('incorrect Data', () => { + tx.Data = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanBrokerSet: Data must be a valid non-empty hex string up to 512 characters', + ) + + tx.Data = '' + assertInvalid( + tx, + 'LoanBrokerSet: Data must be a valid non-empty hex string up to 512 characters', + ) + + tx.Data = 'A'.repeat(513) + assertInvalid( + tx, + 'LoanBrokerSet: Data must be a valid non-empty hex string up to 512 characters', + ) + }) + + test('incorrect ManagementFeeRate', () => { + tx.ManagementFeeRate = 123324 + assertInvalid( + tx, + 'LoanBrokerSet: ManagementFeeRate must be between 0 and 10000 inclusive', + ) + }) + + test('incorrect DebtMaximum', () => { + tx.DebtMaximum = '-1e10' + assertInvalid(tx, 'LoanBrokerSet: DebtMaximum must be a non-negative value') + }) + + test('incorrect CoverRateMinimum', () => { + tx.CoverRateMinimum = 12323487 + assertInvalid( + tx, + 'LoanBrokerSet: CoverRateMinimum must be between 0 and 100000 inclusive', + ) + }) + + test('incorrect CoverRateLiquidation', () => { + tx.CoverRateLiquidation = 12323487 + assertInvalid( + tx, + 'LoanBrokerSet: CoverRateLiquidation must be between 0 and 100000 inclusive', + ) + }) + + test('CoverRateMinimum and CoverRateLiquidation both zero', () => { + tx.CoverRateMinimum = 0 + tx.CoverRateLiquidation = 0 + assertValid(tx) + }) + + test('CoverRateMinimum and CoverRateLiquidation both non-zero', () => { + tx.CoverRateMinimum = 10 + tx.CoverRateLiquidation = 20 + assertValid(tx) + }) + + test('CoverRateMinimum is zero and CoverRateLiquidation is non-zero', () => { + tx.CoverRateMinimum = 0 + tx.CoverRateLiquidation = 10 + assertInvalid( + tx, + 'LoanBrokerSet: CoverRateMinimum and CoverRateLiquidation must both be zero or both be non-zero', + ) + }) + + test('CoverRateMinimum is non-zero and CoverRateLiquidation is zero', () => { + tx.CoverRateMinimum = 10 + tx.CoverRateLiquidation = 0 + assertInvalid( + tx, + 'LoanBrokerSet: CoverRateMinimum and CoverRateLiquidation must both be zero or both be non-zero', + ) + }) +}) diff --git a/packages/xrpl/test/models/loanManage.test.ts b/packages/xrpl/test/models/loanManage.test.ts new file mode 100644 index 0000000000..07a5020b7b --- /dev/null +++ b/packages/xrpl/test/models/loanManage.test.ts @@ -0,0 +1,49 @@ +import { + LoanManageFlags, + validateLoanManage, +} from '../../src/models/transactions/loanManage' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateLoanManage) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanManage, errorMessage) + +describe('unit test LoanManage', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanManage', + LoanID: + 'E9A08C918E26407493CC4ADD381BA979CFEB7E440D0863B01FB31C231D167E42', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + } + }) + + test('valid tx with no flags', () => { + assertValid(tx) + }) + + test('invalid tx with both tfLoanImpair and tfLoanUnimpair flags', () => { + // eslint-disable-next-line no-bitwise -- needed here + tx.Flags = LoanManageFlags.tfLoanImpair | LoanManageFlags.tfLoanUnimpair + assertInvalid( + tx, + 'LoanManage: tfLoanImpair and tfLoanUnimpair cannot both be present', + ) + }) + + test('incorrect LoanID', () => { + tx.LoanID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanManage: LoanID must be 64 characters hexadecimal string', + ) + }) + + test('missing LoanID', () => { + delete tx.LoanID + assertInvalid(tx, 'LoanManage: missing field LoanID') + }) +}) diff --git a/packages/xrpl/test/models/loanPay.test.ts b/packages/xrpl/test/models/loanPay.test.ts new file mode 100644 index 0000000000..897269d220 --- /dev/null +++ b/packages/xrpl/test/models/loanPay.test.ts @@ -0,0 +1,86 @@ +import { + validateLoanPay, + LoanPayFlags, +} from '../../src/models/transactions/loanPay' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateLoanPay) + +const assertInvalid = (tx: any, errorMessage: string): void => + assertTxValidationError(tx, validateLoanPay, errorMessage) + +describe('unit test LoanPay', () => { + let tx: any + + beforeEach(() => { + tx = { + TransactionType: 'LoanPay', + LoanID: + '000004D417A9CE049C9A71A62B004659B5F1AAAB1BEA1EFDE4E01EB3497FD999', + Amount: '1000000', + Account: 'rPGxCzMicNJRe1U1CD5QyNjXdLUtdgSa7B', + } + }) + + test('valid tx with no flags', () => { + assertValid(tx) + }) + + test('valid tx with tfLoanOverpayment flag (numeric)', () => { + tx.Flags = LoanPayFlags.tfLoanOverpayment + assertValid(tx) + }) + + test('valid tx with tfLoanFullPayment flag (numeric)', () => { + tx.Flags = LoanPayFlags.tfLoanFullPayment + assertValid(tx) + }) + + test('valid tx with tfLoanLatePayment flag (numeric)', () => { + tx.Flags = LoanPayFlags.tfLoanLatePayment + assertValid(tx) + }) + + test('throws w/ multiple flags set (numeric) - tfLoanOverpayment and tfLoanFullPayment', () => { + // eslint-disable-next-line no-bitwise -- testing flag combinations + tx.Flags = LoanPayFlags.tfLoanOverpayment | LoanPayFlags.tfLoanFullPayment + assertInvalid( + tx, + 'LoanPay: Only one of tfLoanLatePayment, tfLoanFullPayment, or tfLoanOverpayment flags can be set', + ) + }) + + test('valid tx with tfLoanOverpayment flag (object)', () => { + tx.Flags = { tfLoanOverpayment: true } + assertValid(tx) + }) + + test('invalid tx with tfLoanFullPayment and tfLoanOverpayment flag (object)', () => { + tx.Flags = { tfLoanFullPayment: true, tfLoanOverpayment: true } + assertInvalid( + tx, + 'LoanPay: Only one of tfLoanLatePayment, tfLoanFullPayment, or tfLoanOverpayment flags can be set', + ) + }) + + test('incorrect LoanID', () => { + tx.LoanID = 'INCORRECT_VALUE' + assertInvalid( + tx, + 'LoanPay: LoanID must be 64 characters hexadecimal string', + ) + + delete tx.LoanID + assertInvalid(tx, 'LoanPay: missing field LoanID') + }) + + test('missing Amount', () => { + delete tx.Amount + assertInvalid(tx, 'LoanPay: missing field Amount') + }) + + test('invalid Amount', () => { + tx.Amount = 123 + assertInvalid(tx, 'LoanPay: invalid field Amount') + }) +}) diff --git a/packages/xrpl/test/models/offerCancel.test.ts b/packages/xrpl/test/models/offerCancel.test.ts index 2aea40c3cc..3d1c91b971 100644 --- a/packages/xrpl/test/models/offerCancel.test.ts +++ b/packages/xrpl/test/models/offerCancel.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateOfferCancel } from '../../src/models/transactions/offerCancel' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateOfferCancel) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateOfferCancel, message) /** * OfferCancel Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateOfferCancel } from '../../src/models/transactions/offerCancel' * Providing runtime verification testing for each specific transaction type. */ describe('OfferCancel', function () { - let offer + let offer: any beforeEach(function () { offer = { @@ -24,45 +26,25 @@ describe('OfferCancel', function () { TransactionType: 'OfferCancel', TxnSignature: '304402203EC848BD6AB42DC8509285245804B15E1652092CC0B189D369E12E563771D049022046DF40C16EA05DC99D01E553EA2E218FCA1C5B38927889A2BDF064D1F44D60F0', - } as any + } }) it(`verifies valid OfferCancel`, function () { - assert.doesNotThrow(() => validateOfferCancel(offer)) - assert.doesNotThrow(() => validate(offer)) + assertValid(offer) }) it(`verifies valid OfferCancel with flags`, function () { offer.Flags = 2147483648 - assert.doesNotThrow(() => validateOfferCancel(offer)) - assert.doesNotThrow(() => validate(offer)) + assertValid(offer) }) it(`throws w/ OfferSequence must be a number`, function () { - offer.OfferSequence = '99' - assert.throws( - () => validateOfferCancel(offer), - ValidationError, - 'OfferCancel: OfferSequence must be a number', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCancel: OfferSequence must be a number', - ) + offer.OfferSequence = 'abcd' + assertInvalid(offer, 'OfferCancel: OfferSequence must be a number') }) it(`throws w/ missing OfferSequence`, function () { delete offer.OfferSequence - assert.throws( - () => validateOfferCancel(offer), - ValidationError, - 'OfferCancel: missing field OfferSequence', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCancel: missing field OfferSequence', - ) + assertInvalid(offer, 'OfferCancel: missing field OfferSequence') }) }) diff --git a/packages/xrpl/test/models/offerCreate.test.ts b/packages/xrpl/test/models/offerCreate.test.ts index d3fa1c9d11..035891b6bb 100644 --- a/packages/xrpl/test/models/offerCreate.test.ts +++ b/packages/xrpl/test/models/offerCreate.test.ts @@ -1,7 +1,12 @@ -import { assert } from 'chai' +import { + OfferCreateFlags, + validateOfferCreate, +} from '../../src/models/transactions/offerCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' -import { validate, ValidationError } from '../../src' -import { validateOfferCreate } from '../../src/models/transactions/offerCreate' +const assertValid = (tx: any): void => assertTxIsValid(tx, validateOfferCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateOfferCreate, message) /** * OfferCreate Transaction Verification Testing. @@ -10,7 +15,7 @@ import { validateOfferCreate } from '../../src/models/transactions/offerCreate' */ describe('OfferCreate', function () { it(`verifies valid OfferCreate`, function () { - const offer = { + const offerTx = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', Flags: 0, @@ -29,11 +34,12 @@ describe('OfferCreate', function () { TransactionType: 'OfferCreate', TxnSignature: '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', - } as any + } - assert.doesNotThrow(() => validateOfferCreate(offer)) - assert.doesNotThrow(() => validate(offer)) + assertValid(offerTx) + }) + it(`verifies valid OfferCreate with flags`, function () { const offer2 = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', @@ -53,9 +59,10 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.doesNotThrow(() => validateOfferCreate(offer2)) - assert.doesNotThrow(() => validate(offer2)) + assertValid(offer2) + }) + it(`verifies valid OfferCreate with TakerGets and TakerPays as IOUs`, function () { const offer3 = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', @@ -79,12 +86,116 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.doesNotThrow(() => validateOfferCreate(offer3)) - assert.doesNotThrow(() => validate(offer3)) + assertValid(offer3) + }) + + it(`verfies valid offerCreate within permissioned domain`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + Flags: 0, + Expiration: 10, + DomainID: + '5D0177045A8750FC5892032A3BA15885B38A88BE315B7DF6A44BB24D67141180', + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertValid(offerTx) + }) + + it(`throws -- invalid DomainID type`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + DomainID: { sampleDictKey: 1 }, + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertInvalid(offerTx, 'OfferCreate: invalid field DomainID') + }) + + it(`throws -- invalid DomainID , exceeds expected length`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + DomainID: '5'.repeat(65), + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertInvalid(offerTx, 'OfferCreate: invalid field DomainID') + }) + + it(`throws -- invalid DomainID , falls short of expected length`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + DomainID: '5'.repeat(63), + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertInvalid(offerTx, 'OfferCreate: invalid field DomainID') + }) + + it(`throws -- invalid flag (interface) specified without DomainID`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + Flags: OfferCreateFlags.tfHybrid, + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertInvalid( + offerTx, + 'OfferCreate: tfHybrid flag cannot be set if DomainID is not present', + ) + }) + + it(`throws -- invalid flag (number) specified without DomainID`, function () { + const offerTx = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + Flags: 0x00100000, + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + } as any + + assertInvalid( + offerTx, + 'OfferCreate: tfHybrid flag cannot be set if DomainID is not present', + ) }) it(`throws w/ invalid Expiration`, function () { - const offer = { + const offerTx = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', Flags: 0, @@ -104,20 +215,11 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.throws( - () => validateOfferCreate(offer), - ValidationError, - 'OfferCreate: invalid Expiration', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCreate: invalid Expiration', - ) + assertInvalid(offerTx, 'OfferCreate: invalid Expiration') }) it(`throws w/ invalid OfferSequence`, function () { - const offer = { + const offerTx = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', Flags: 0, @@ -137,20 +239,11 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.throws( - () => validateOfferCreate(offer), - ValidationError, - 'OfferCreate: invalid OfferSequence', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCreate: invalid OfferSequence', - ) + assertInvalid(offerTx, 'OfferCreate: invalid OfferSequence') }) it(`throws w/ invalid TakerPays`, function () { - const offer = { + const offerTx = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', Flags: 0, @@ -166,20 +259,11 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.throws( - () => validateOfferCreate(offer), - ValidationError, - 'OfferCreate: invalid TakerPays', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCreate: invalid TakerPays', - ) + assertInvalid(offerTx, 'OfferCreate: invalid TakerPays') }) it(`throws w/ invalid TakerGets`, function () { - const offer = { + const offerTx = { Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', Fee: '10', Flags: 0, @@ -199,15 +283,6 @@ describe('OfferCreate', function () { '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', } as any - assert.throws( - () => validateOfferCreate(offer), - ValidationError, - 'OfferCreate: invalid TakerGets', - ) - assert.throws( - () => validate(offer), - ValidationError, - 'OfferCreate: invalid TakerGets', - ) + assertInvalid(offerTx, 'OfferCreate: invalid TakerGets') }) }) diff --git a/packages/xrpl/test/models/oracleDelete.test.ts b/packages/xrpl/test/models/oracleDelete.test.ts index 78188638bc..91d1561a7e 100644 --- a/packages/xrpl/test/models/oracleDelete.test.ts +++ b/packages/xrpl/test/models/oracleDelete.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateOracleDelete } from '../../src/models/transactions/oracleDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateOracleDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateOracleDelete, message) /** * OracleDelete Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateOracleDelete } from '../../src/models/transactions/oracleDelete * Providing runtime verification testing for each specific transaction type. */ describe('OracleDelete', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -20,21 +22,18 @@ describe('OracleDelete', function () { }) it('verifies valid OracleDelete', function () { - assert.doesNotThrow(() => validateOracleDelete(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it(`throws w/ missing field OracleDocumentID`, function () { delete tx.OracleDocumentID const errorMessage = 'OracleDelete: missing field OracleDocumentID' - assert.throws(() => validateOracleDelete(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid OracleDocumentID`, function () { tx.OracleDocumentID = '1234' const errorMessage = 'OracleDelete: invalid field OracleDocumentID' - assert.throws(() => validateOracleDelete(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) }) diff --git a/packages/xrpl/test/models/oracleSet.test.ts b/packages/xrpl/test/models/oracleSet.test.ts index 18ce5d87e8..84c18b26e2 100644 --- a/packages/xrpl/test/models/oracleSet.test.ts +++ b/packages/xrpl/test/models/oracleSet.test.ts @@ -1,8 +1,11 @@ -import { stringToHex } from '@xrplf/isomorphic/dist/utils' -import { assert } from 'chai' +import { stringToHex } from '@xrplf/isomorphic/utils' -import { validate, ValidationError } from '../../src' import { validateOracleSet } from '../../src/models/transactions/oracleSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateOracleSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateOracleSet, message) /** * OracleSet Transaction Verification Testing. @@ -10,7 +13,7 @@ import { validateOracleSet } from '../../src/models/transactions/oracleSet' * Providing runtime verification testing for each specific transaction type. */ describe('OracleSet', function () { - let tx + let tx: any beforeEach(function () { tx = { @@ -35,72 +38,62 @@ describe('OracleSet', function () { }) it('verifies valid OracleSet', function () { - assert.doesNotThrow(() => validateOracleSet(tx)) - assert.doesNotThrow(() => validate(tx)) + assertValid(tx) }) it(`throws w/ missing field OracleDocumentID`, function () { delete tx.OracleDocumentID const errorMessage = 'OracleSet: missing field OracleDocumentID' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid OracleDocumentID`, function () { tx.OracleDocumentID = '1234' const errorMessage = 'OracleSet: invalid field OracleDocumentID' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing field LastUpdateTime`, function () { delete tx.LastUpdateTime const errorMessage = 'OracleSet: missing field LastUpdateTime' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid LastUpdateTime`, function () { tx.LastUpdateTime = '768062172' const errorMessage = 'OracleSet: invalid field LastUpdateTime' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing invalid Provider`, function () { tx.Provider = 1234 const errorMessage = 'OracleSet: invalid field Provider' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing invalid URI`, function () { tx.URI = 1234 const errorMessage = 'OracleSet: invalid field URI' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing invalid AssetClass`, function () { tx.AssetClass = 1234 const errorMessage = 'OracleSet: invalid field AssetClass' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid PriceDataSeries must be an array`, function () { tx.PriceDataSeries = 1234 const errorMessage = 'OracleSet: PriceDataSeries must be an array' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid PriceDataSeries must be an array of objects`, function () { tx.PriceDataSeries = [1234] const errorMessage = 'OracleSet: PriceDataSeries must be an array of objects' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ PriceDataSeries must have at most 10 PriceData objects`, function () { @@ -114,83 +107,87 @@ describe('OracleSet', function () { }) const errorMessage = 'OracleSet: PriceDataSeries must have at most 10 PriceData objects' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ PriceDataSeries must have a PriceData object`, function () { delete tx.PriceDataSeries[0].PriceData const errorMessage = 'OracleSet: PriceDataSeries must have a `PriceData` object' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ PriceDataSeries must only have a single PriceData object`, function () { tx.PriceDataSeries[0].ExtraProp = 'extraprop' const errorMessage = 'OracleSet: PriceDataSeries must only have a single PriceData object' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing BaseAsset of PriceDataSeries`, function () { delete tx.PriceDataSeries[0].PriceData.BaseAsset const errorMessage = 'OracleSet: PriceDataSeries must have a `BaseAsset` string' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing QuoteAsset of PriceDataSeries`, function () { delete tx.PriceDataSeries[0].PriceData.QuoteAsset const errorMessage = 'OracleSet: PriceDataSeries must have a `QuoteAsset` string' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing AssetPrice with Scale present of PriceDataSeries`, function () { delete tx.PriceDataSeries[0].PriceData.AssetPrice const errorMessage = 'OracleSet: PriceDataSeries must have both `AssetPrice` and `Scale` if any are present' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ missing Scale with AssetPrice present of PriceDataSeries`, function () { delete tx.PriceDataSeries[0].PriceData.Scale const errorMessage = 'OracleSet: PriceDataSeries must have both `AssetPrice` and `Scale` if any are present' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid AssetPrice of PriceDataSeries`, function () { - tx.PriceDataSeries[0].PriceData.AssetPrice = '1234' - const errorMessage = 'OracleSet: invalid field AssetPrice' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + // value cannot be parsed as hexadecimal number + tx.PriceDataSeries[0].PriceData.AssetPrice = 'ghij' + const errorMessage = + 'OracleSet: Field AssetPrice must be a valid hex string' + assertInvalid(tx, errorMessage) + }) + + it(`verifies valid AssetPrice of PriceDataSeries`, function () { + // valid string which can be parsed as hexadecimal number + tx.PriceDataSeries[0].PriceData.AssetPrice = 'ab15' + assertValid(tx) + }) + + it(`throws w/ invalid AssetPrice type in PriceDataSeries`, function () { + tx.PriceDataSeries[0].PriceData.AssetPrice = ['sample', 'invalid', 'type'] + const errorMessage = + 'OracleSet: Field AssetPrice must be a string or a number' + assertInvalid(tx, errorMessage) }) it(`throws w/ invalid Scale of PriceDataSeries`, function () { tx.PriceDataSeries[0].PriceData.Scale = '1234' const errorMessage = 'OracleSet: invalid field Scale' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ Scale must be in range 0-10 when above max`, function () { tx.PriceDataSeries[0].PriceData.Scale = 11 const errorMessage = 'OracleSet: Scale must be in range 0-10' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) it(`throws w/ Scale must be in range 0-10 when below min`, function () { tx.PriceDataSeries[0].PriceData.Scale = -1 const errorMessage = 'OracleSet: Scale must be in range 0-10' - assert.throws(() => validateOracleSet(tx), ValidationError, errorMessage) - assert.throws(() => validate(tx), ValidationError, errorMessage) + assertInvalid(tx, errorMessage) }) }) diff --git a/packages/xrpl/test/models/payment.test.ts b/packages/xrpl/test/models/payment.test.ts index a21eaddaf6..274dc097a3 100644 --- a/packages/xrpl/test/models/payment.test.ts +++ b/packages/xrpl/test/models/payment.test.ts @@ -1,7 +1,12 @@ -import { assert } from 'chai' +/* eslint-disable max-statements -- need additional tests for optional fields */ -import { validate, PaymentFlags, ValidationError } from '../../src' +import { PaymentFlags } from '../../src' import { validatePayment } from '../../src/models/transactions/payment' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validatePayment) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePayment, message) /** * PaymentTransaction Verification Testing. @@ -9,10 +14,10 @@ import { validatePayment } from '../../src/models/transactions/payment' * Providing runtime verification testing for each specific transaction type. */ describe('Payment', function () { - let paymentTransaction + let payment: any beforeEach(function () { - paymentTransaction = { + payment = { TransactionType: 'Payment', Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', Amount: '1234', @@ -32,16 +37,57 @@ describe('Payment', function () { [{ currency: 'BTC', issuer: 'r9vbV3EHvXWjSkeQ6CAcYVPGeq7TuiXY2X' }], ], SendMax: '100000000', + DomainID: '5'.repeat(64), + } as any + }) + + it(`verifies valid Payment`, function () { + assertValid(payment) + }) + + it(`verifies DeliverMax is valid`, function () { + payment.DeliverMax = '1234' + assertValid(payment) + }) + + it(`throws -- invalid DomainID type`, function () { + const paymentTx = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: '1234', + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + DomainID: { sampleDictKey: 1 }, } as any + + assertInvalid(paymentTx, 'PaymentTransaction: invalid field DomainID') }) - it(`verifies valid PaymentTransaction`, function () { - assert.doesNotThrow(() => validatePayment(paymentTransaction)) - assert.doesNotThrow(() => validate(paymentTransaction)) + it(`throws -- invalid DomainID , exceeds expected length`, function () { + const paymentTx = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: '1234', + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + DomainID: '5'.repeat(65), + } as any + + assertInvalid(paymentTx, 'PaymentTransaction: invalid field DomainID') + }) + + it(`throws -- invalid DomainID , falls short of expected length`, function () { + const paymentTx = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: '1234', + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + DomainID: '5'.repeat(63), + } as any + + assertInvalid(paymentTx, 'PaymentTransaction: invalid field DomainID') }) it(`Verifies memos correctly`, function () { - paymentTransaction.Memos = [ + payment.Memos = [ { Memo: { MemoData: '32324324', @@ -49,11 +95,11 @@ describe('Payment', function () { }, ] - assert.doesNotThrow(() => validate(paymentTransaction)) + assertValid(payment) }) it(`Verifies memos correctly`, function () { - paymentTransaction.Memos = [ + payment.Memos = [ { Memo: { MemoData: '32324324', @@ -62,200 +108,153 @@ describe('Payment', function () { }, ] - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'BaseTransaction: invalid Memos', - ) + assertInvalid(payment, 'BaseTransaction: invalid Memos') }) it(`throws when Amount is missing`, function () { - delete paymentTransaction.Amount - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: missing field Amount', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: missing field Amount', - ) + delete payment.Amount + assertInvalid(payment, 'PaymentTransaction: missing field Amount') }) it(`throws when Amount is invalid`, function () { - paymentTransaction.Amount = 1234 - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid Amount', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid Amount', - ) + payment.Amount = 1234 + assertInvalid(payment, 'PaymentTransaction: invalid Amount') }) it(`throws when Destination is missing`, function () { - delete paymentTransaction.Destination - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'Payment: missing field Destination', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'Payment: missing field Destination', - ) + delete payment.Destination + assertInvalid(payment, 'Payment: missing field Destination') }) it(`throws when Destination is invalid`, function () { - paymentTransaction.Destination = 7896214 - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) + payment.Destination = 7896214 + assertInvalid(payment, 'Payment: invalid field Destination') }) it(`throws when Destination is invalid classic address`, function () { - paymentTransaction.Destination = 'rABCD' - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) + payment.Destination = 'rABCD' + assertInvalid(payment, 'Payment: invalid field Destination') }) it(`does not throw when Destination is a valid x-address`, function () { - paymentTransaction.Destination = - 'X7WZKEeNVS2p9Tire9DtNFkzWBZbFtSiS2eDBib7svZXuc2' - assert.doesNotThrow(() => validatePayment(paymentTransaction)) - assert.doesNotThrow(() => validate(paymentTransaction)) + payment.Destination = 'X7WZKEeNVS2p9Tire9DtNFkzWBZbFtSiS2eDBib7svZXuc2' + assertValid(payment) }) it(`throws when Destination is an empty string`, function () { - paymentTransaction.Destination = '' - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'Payment: invalid field Destination', - ) + payment.Destination = '' + assertInvalid(payment, 'Payment: invalid field Destination') }) it(`throws when DestinationTag is not a number`, function () { - paymentTransaction.DestinationTag = '1' - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'Payment: invalid field DestinationTag', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'Payment: invalid field DestinationTag', - ) + payment.DestinationTag = '1' + assertInvalid(payment, 'Payment: invalid field DestinationTag') }) it(`throws when InvoiceID is not a string`, function () { - paymentTransaction.InvoiceID = 19832 - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: InvoiceID must be a string', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: InvoiceID must be a string', - ) + payment.InvoiceID = 19832 + assertInvalid(payment, 'PaymentTransaction: InvoiceID must be a string') }) it(`throws when Paths is invalid`, function () { - paymentTransaction.Paths = [[{ account: 123 }]] - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid Paths', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid Paths', - ) + payment.Paths = [[{ account: 123 }]] + assertInvalid(payment, 'PaymentTransaction: invalid Paths') }) it(`throws when SendMax is invalid`, function () { - paymentTransaction.SendMax = 100000000 - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid SendMax', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid SendMax', - ) + payment.SendMax = 100000000 + assertInvalid(payment, 'PaymentTransaction: invalid SendMax') }) it(`verifies valid DeliverMin with tfPartialPayment flag set as a number`, function () { - paymentTransaction.DeliverMin = '10000' - paymentTransaction.Flags = PaymentFlags.tfPartialPayment - assert.doesNotThrow(() => validatePayment(paymentTransaction)) - assert.doesNotThrow(() => validate(paymentTransaction)) + payment.DeliverMin = '10000' + payment.Flags = PaymentFlags.tfPartialPayment + assertValid(payment) }) it(`verifies valid DeliverMin with tfPartialPayment flag set as a boolean`, function () { - paymentTransaction.DeliverMin = '10000' - paymentTransaction.Flags = { tfPartialPayment: true } - assert.doesNotThrow(() => validatePayment(paymentTransaction)) - assert.doesNotThrow(() => validate(paymentTransaction)) + payment.DeliverMin = '10000' + payment.Flags = { tfPartialPayment: true } + assertValid(payment) }) it(`throws when DeliverMin is invalid`, function () { - paymentTransaction.DeliverMin = 10000 - paymentTransaction.Flags = { tfPartialPayment: true } - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid DeliverMin', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, - 'PaymentTransaction: invalid DeliverMin', - ) + payment.DeliverMin = 10000 + payment.Flags = { tfPartialPayment: true } + assertInvalid(payment, 'PaymentTransaction: invalid DeliverMin') }) it(`throws when tfPartialPayment flag is missing with valid DeliverMin`, function () { - paymentTransaction.DeliverMin = '10000' - assert.throws( - () => validatePayment(paymentTransaction), - ValidationError, - 'PaymentTransaction: tfPartialPayment flag required with DeliverMin', - ) - assert.throws( - () => validate(paymentTransaction), - ValidationError, + payment.DeliverMin = '10000' + assertInvalid( + payment, 'PaymentTransaction: tfPartialPayment flag required with DeliverMin', ) }) + + it(`verifies valid MPT PaymentTransaction`, function () { + const mptPayment = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: { + mpt_issuance_id: '000004C463C52827307480341125DA0577DEFC38405B0E3E', + value: '10', + }, + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + } as any + assertValid(mptPayment) + }) + + it(`throws w/ non-array CredentialIDs`, function () { + payment.CredentialIDs = + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A' + + const errorMessage = 'Payment: Credentials must be an array' + assertInvalid(payment, errorMessage) + }) + + it(`throws CredentialIDs length exceeds max length`, function () { + payment.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66B', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66C', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66D', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66E', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66F', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F660', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F661', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = 'Payment: Credentials length cannot exceed 8 elements' + assertInvalid(payment, errorMessage) + }) + + it(`throws w/ empty CredentialIDs`, function () { + payment.CredentialIDs = [] + + const errorMessage = 'Payment: Credentials cannot be an empty array' + assertInvalid(payment, errorMessage) + }) + + it(`throws w/ non-string CredentialIDs`, function () { + payment.CredentialIDs = [ + 123123, + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = 'Payment: Invalid Credentials ID list format' + assertInvalid(payment, errorMessage) + }) + + it(`throws w/ duplicate CredentialIDs`, function () { + payment.CredentialIDs = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F662', + ] + + const errorMessage = + 'Payment: Credentials cannot contain duplicate elements' + assertInvalid(payment, errorMessage) + }) }) diff --git a/packages/xrpl/test/models/paymentChannelClaim.test.ts b/packages/xrpl/test/models/paymentChannelClaim.test.ts index af9c973556..2c5e0bdf4a 100644 --- a/packages/xrpl/test/models/paymentChannelClaim.test.ts +++ b/packages/xrpl/test/models/paymentChannelClaim.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validatePaymentChannelClaim } from '../../src/models/transactions/paymentChannelClaim' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validatePaymentChannelClaim) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePaymentChannelClaim, message) /** * PaymentChannelClaim Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validatePaymentChannelClaim } from '../../src/models/transactions/payme * Providing runtime verification testing for each specific transaction type. */ describe('PaymentChannelClaim', function () { - let channel + let channel: any beforeEach(function () { channel = { @@ -27,8 +30,7 @@ describe('PaymentChannelClaim', function () { }) it(`verifies valid PaymentChannelClaim`, function () { - assert.doesNotThrow(() => validatePaymentChannelClaim(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`verifies valid PaymentChannelClaim w/o optional`, function () { @@ -37,97 +39,42 @@ describe('PaymentChannelClaim', function () { delete channel.Signature delete channel.PublicKey - assert.doesNotThrow(() => validatePaymentChannelClaim(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`throws w/ missing Channel`, function () { delete channel.Channel - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: missing Channel', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: missing Channel', - ) + assertInvalid(channel, 'PaymentChannelClaim: missing Channel') }) it(`throws w/ invalid Channel`, function () { channel.Channel = 100 - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: Channel must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: Channel must be a string', - ) + assertInvalid(channel, 'PaymentChannelClaim: Channel must be a string') }) it(`throws w/ invalid Balance`, function () { channel.Balance = 100 - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: Balance must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: Balance must be a string', - ) + assertInvalid(channel, 'PaymentChannelClaim: Balance must be a string') }) it(`throws w/ invalid Amount`, function () { channel.Amount = 1000 - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: Amount must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: Amount must be a string', - ) + assertInvalid(channel, 'PaymentChannelClaim: Amount must be a string') }) it(`throws w/ invalid Signature`, function () { channel.Signature = 1000 - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: Signature must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: Signature must be a string', - ) + assertInvalid(channel, 'PaymentChannelClaim: Signature must be a string') }) it(`throws w/ invalid PublicKey`, function () { channel.PublicKey = ['100000'] - assert.throws( - () => validatePaymentChannelClaim(channel), - ValidationError, - 'PaymentChannelClaim: PublicKey must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelClaim: PublicKey must be a string', - ) + assertInvalid(channel, 'PaymentChannelClaim: PublicKey must be a string') }) }) diff --git a/packages/xrpl/test/models/paymentChannelCreate.test.ts b/packages/xrpl/test/models/paymentChannelCreate.test.ts index b3947cb9d4..18b560deff 100644 --- a/packages/xrpl/test/models/paymentChannelCreate.test.ts +++ b/packages/xrpl/test/models/paymentChannelCreate.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validatePaymentChannelCreate } from '../../src/models/transactions/paymentChannelCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validatePaymentChannelCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePaymentChannelCreate, message) /** * PaymentChannelCreate Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validatePaymentChannelCreate } from '../../src/models/transactions/paym * Providing runtime verification testing for each specific transaction type. */ describe('PaymentChannelCreate', function () { - let channel + let channel: any beforeEach(function () { channel = { @@ -27,8 +30,7 @@ describe('PaymentChannelCreate', function () { }) it(`verifies valid PaymentChannelCreate`, function () { - assert.doesNotThrow(() => validatePaymentChannelCreate(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`verifies valid PaymentChannelCreate w/o optional`, function () { @@ -36,157 +38,66 @@ describe('PaymentChannelCreate', function () { delete channel.DestinationTag delete channel.SourceTag - assert.doesNotThrow(() => validatePaymentChannelCreate(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`missing Amount`, function () { delete channel.Amount - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: missing Amount', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: missing Amount', - ) + assertInvalid(channel, 'PaymentChannelCreate: missing Amount') }) it(`missing Destination`, function () { delete channel.Destination - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: missing field Destination', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: missing field Destination', - ) + assertInvalid(channel, 'PaymentChannelCreate: missing field Destination') }) it(`missing SettleDelay`, function () { delete channel.SettleDelay - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: missing SettleDelay', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: missing SettleDelay', - ) + assertInvalid(channel, 'PaymentChannelCreate: missing SettleDelay') }) it(`missing PublicKey`, function () { delete channel.PublicKey - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: missing PublicKey', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: missing PublicKey', - ) + assertInvalid(channel, 'PaymentChannelCreate: missing PublicKey') }) it(`invalid Amount`, function () { channel.Amount = 1000 - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: Amount must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: Amount must be a string', - ) + assertInvalid(channel, 'PaymentChannelCreate: Amount must be a string') }) it(`invalid Destination`, function () { channel.Destination = 10 - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: invalid field Destination', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: invalid field Destination', - ) + assertInvalid(channel, 'PaymentChannelCreate: invalid field Destination') }) it(`invalid SettleDelay`, function () { channel.SettleDelay = '10' - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: SettleDelay must be a number', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: SettleDelay must be a number', - ) + assertInvalid(channel, 'PaymentChannelCreate: SettleDelay must be a number') }) it(`invalid PublicKey`, function () { channel.PublicKey = 10 - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: PublicKey must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: PublicKey must be a string', - ) + assertInvalid(channel, 'PaymentChannelCreate: PublicKey must be a string') }) it(`invalid DestinationTag`, function () { channel.DestinationTag = '10' - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: invalid field DestinationTag', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: invalid field DestinationTag', - ) + assertInvalid(channel, 'PaymentChannelCreate: invalid field DestinationTag') }) it(`invalid CancelAfter`, function () { channel.CancelAfter = '100' - assert.throws( - () => validatePaymentChannelCreate(channel), - ValidationError, - 'PaymentChannelCreate: CancelAfter must be a number', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelCreate: CancelAfter must be a number', - ) + assertInvalid(channel, 'PaymentChannelCreate: CancelAfter must be a number') }) }) diff --git a/packages/xrpl/test/models/paymentChannelFund.test.ts b/packages/xrpl/test/models/paymentChannelFund.test.ts index 65c39c9878..b7e5e4a38a 100644 --- a/packages/xrpl/test/models/paymentChannelFund.test.ts +++ b/packages/xrpl/test/models/paymentChannelFund.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validatePaymentChannelFund } from '../../src/models/transactions/paymentChannelFund' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validatePaymentChannelFund) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePaymentChannelFund, message) /** * PaymentChannelFund Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validatePaymentChannelFund } from '../../src/models/transactions/paymen * Providing runtime verification testing for each specific transaction type. */ describe('PaymentChannelFund', function () { - let channel + let channel: any beforeEach(function () { channel = { @@ -23,89 +26,42 @@ describe('PaymentChannelFund', function () { }) it(`verifies valid PaymentChannelFund`, function () { - assert.doesNotThrow(() => validatePaymentChannelFund(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`verifies valid PaymentChannelFund w/o optional`, function () { delete channel.Expiration - assert.doesNotThrow(() => validatePaymentChannelFund(channel)) - assert.doesNotThrow(() => validate(channel)) + assertValid(channel) }) it(`throws w/ missing Amount`, function () { delete channel.Amount - assert.throws( - () => validatePaymentChannelFund(channel), - ValidationError, - 'PaymentChannelFund: missing Amount', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelFund: missing Amount', - ) + assertInvalid(channel, 'PaymentChannelFund: missing Amount') }) it(`throws w/ missing Channel`, function () { delete channel.Channel - assert.throws( - () => validatePaymentChannelFund(channel), - ValidationError, - 'PaymentChannelFund: missing Channel', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelFund: missing Channel', - ) + assertInvalid(channel, 'PaymentChannelFund: missing Channel') }) it(`throws w/ invalid Amount`, function () { channel.Amount = 100 - assert.throws( - () => validatePaymentChannelFund(channel), - ValidationError, - 'PaymentChannelFund: Amount must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelFund: Amount must be a string', - ) + assertInvalid(channel, 'PaymentChannelFund: Amount must be a string') }) it(`throws w/ invalid Channel`, function () { channel.Channel = 1000 - assert.throws( - () => validatePaymentChannelFund(channel), - ValidationError, - 'PaymentChannelFund: Channel must be a string', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelFund: Channel must be a string', - ) + assertInvalid(channel, 'PaymentChannelFund: Channel must be a string') }) it(`throws w/ invalid Expiration`, function () { channel.Expiration = '1000' - assert.throws( - () => validatePaymentChannelFund(channel), - ValidationError, - 'PaymentChannelFund: Expiration must be a number', - ) - assert.throws( - () => validate(channel), - ValidationError, - 'PaymentChannelFund: Expiration must be a number', - ) + assertInvalid(channel, 'PaymentChannelFund: Expiration must be a number') }) }) diff --git a/packages/xrpl/test/models/permissionedDomainDelete.test.ts b/packages/xrpl/test/models/permissionedDomainDelete.test.ts new file mode 100644 index 0000000000..269f873dd9 --- /dev/null +++ b/packages/xrpl/test/models/permissionedDomainDelete.test.ts @@ -0,0 +1,41 @@ +import { validatePermissionedDomainDelete } from '../../src/models/transactions/permissionedDomainDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validatePermissionedDomainDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePermissionedDomainDelete, message) + +/** + * PermissionedDomainDelete Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('PermissionedDomainDelete', function () { + let tx: any + + beforeEach(function () { + tx = { + TransactionType: 'PermissionedDomainDelete', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + DomainID: + 'D88930B33C2B6831660BFD006D91FF100011AD4E67CBB78B460AF0A215103737', + } as any + }) + + it('verifies valid PermissionedDomainDelete', function () { + assertValid(tx) + }) + + it(`throws w/ missing field DomainID`, function () { + delete tx.DomainID + const errorMessage = 'PermissionedDomainDelete: missing field DomainID' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ invalid DomainID`, function () { + tx.DomainID = 1234 + const errorMessage = 'PermissionedDomainDelete: invalid field DomainID' + assertInvalid(tx, errorMessage) + }) +}) diff --git a/packages/xrpl/test/models/permissionedDomainSet.test.ts b/packages/xrpl/test/models/permissionedDomainSet.test.ts new file mode 100644 index 0000000000..74e1cecba7 --- /dev/null +++ b/packages/xrpl/test/models/permissionedDomainSet.test.ts @@ -0,0 +1,91 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { AuthorizeCredential } from '../../src' +import { validatePermissionedDomainSet } from '../../src/models/transactions/permissionedDomainSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validatePermissionedDomainSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validatePermissionedDomainSet, message) + +/** + * PermissionedDomainSet Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('PermissionedDomainSet', function () { + let tx: any + const sampleCredential: AuthorizeCredential = { + Credential: { + CredentialType: stringToHex('Passport'), + Issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + }, + } + + beforeEach(function () { + tx = { + TransactionType: 'PermissionedDomainSet', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + DomainID: + 'D88930B33C2B6831660BFD006D91FF100011AD4E67CBB78B460AF0A215103737', + AcceptedCredentials: [sampleCredential], + } + }) + + it('verifies valid PermissionedDomainSet', function () { + assertValid(tx) + }) + + it(`throws with invalid field DomainID`, function () { + // DomainID is expected to be a string + tx.DomainID = 1234 + const errorMessage = 'PermissionedDomainSet: invalid field DomainID' + assertInvalid(tx, errorMessage) + }) + + it(`throws w/ missing field AcceptedCredentials`, function () { + delete tx.AcceptedCredentials + const errorMessage = + 'PermissionedDomainSet: missing field AcceptedCredentials' + assertInvalid(tx, errorMessage) + }) + + it('throws when AcceptedCredentials exceeds maximum length', function () { + tx.AcceptedCredentials = Array(11).fill(sampleCredential) + + assertInvalid( + tx, + 'PermissionedDomainSet: Credentials length cannot exceed 10 elements', + ) + }) + + it('throws when AcceptedCredentials is empty', function () { + tx.AcceptedCredentials = [] + assertInvalid( + tx, + 'PermissionedDomainSet: Credentials cannot be an empty array', + ) + }) + + it('throws when AcceptedCredentials is not an array type', function () { + tx.AcceptedCredentials = 'AcceptedCredentials is not an array' + assertInvalid( + tx, + 'PermissionedDomainSet: invalid field AcceptedCredentials', + ) + }) + + it('throws when AcceptedCredentials contains duplicates', function () { + tx.AcceptedCredentials = [sampleCredential, sampleCredential] + assertInvalid( + tx, + 'PermissionedDomainSet: Credentials cannot contain duplicate elements', + ) + }) + + it('throws when AcceptedCredentials contains invalid format', function () { + tx.AcceptedCredentials = [{ Field1: 'Value1', Field2: 'Value2' }] + assertInvalid(tx, 'PermissionedDomainSet: Invalid Credentials format') + }) +}) diff --git a/packages/xrpl/test/models/setRegularKey.test.ts b/packages/xrpl/test/models/setRegularKey.test.ts index 1dcb859891..66a75c8d5e 100644 --- a/packages/xrpl/test/models/setRegularKey.test.ts +++ b/packages/xrpl/test/models/setRegularKey.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateSetRegularKey } from '../../src/models/transactions/setRegularKey' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateSetRegularKey) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateSetRegularKey, message) /** * SetRegularKey Transaction Verification Testing. @@ -9,10 +12,10 @@ import { validateSetRegularKey } from '../../src/models/transactions/setRegularK * Providing runtime verification testing for each specific transaction type. */ describe('SetRegularKey', function () { - let account + let tx: any beforeEach(function () { - account = { + tx = { TransactionType: 'SetRegularKey', Account: 'rf1BiGeXwwQoi8Z2ueFYTEXSwuJYfV2Jpn', Fee: '12', @@ -22,28 +25,17 @@ describe('SetRegularKey', function () { }) it(`verifies valid SetRegularKey`, function () { - assert.doesNotThrow(() => validateSetRegularKey(account)) - assert.doesNotThrow(() => validate(account)) + assertValid(tx) }) it(`verifies w/o SetRegularKey`, function () { - account.RegularKey = undefined - assert.doesNotThrow(() => validateSetRegularKey(account)) - assert.doesNotThrow(() => validate(account)) + tx.RegularKey = undefined + assertValid(tx) }) it(`throws w/ invalid RegularKey`, function () { - account.RegularKey = 12369846963 + tx.RegularKey = 12369846963 - assert.throws( - () => validateSetRegularKey(account), - ValidationError, - 'SetRegularKey: RegularKey must be a string', - ) - assert.throws( - () => validate(account), - ValidationError, - 'SetRegularKey: RegularKey must be a string', - ) + assertInvalid(tx, 'SetRegularKey: RegularKey must be a string') }) }) diff --git a/packages/xrpl/test/models/signerListSet.test.ts b/packages/xrpl/test/models/signerListSet.test.ts index d99062c586..6d605d5291 100644 --- a/packages/xrpl/test/models/signerListSet.test.ts +++ b/packages/xrpl/test/models/signerListSet.test.ts @@ -1,7 +1,10 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateSignerListSet } from '../../src/models/transactions/signerListSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateSignerListSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateSignerListSet, message) /** * SignerListSet Transaction Verification Testing. @@ -9,7 +12,7 @@ import { validateSignerListSet } from '../../src/models/transactions/signerListS * Providing runtime verification testing for each specific transaction type. */ describe('SignerListSet', function () { - let signerListSetTx + let signerListSetTx: any beforeEach(function () { signerListSetTx = { @@ -42,36 +45,20 @@ describe('SignerListSet', function () { }) it(`verifies valid SignerListSet`, function () { - assert.doesNotThrow(() => validateSignerListSet(signerListSetTx)) - assert.doesNotThrow(() => validate(signerListSetTx)) + assertValid(signerListSetTx) }) it(`throws w/ missing SignerQuorum`, function () { signerListSetTx.SignerQuorum = undefined - assert.throws( - () => validateSignerListSet(signerListSetTx), - ValidationError, - 'SignerListSet: missing field SignerQuorum', - ) - assert.throws( - () => validate(signerListSetTx), - ValidationError, - 'SignerListSet: missing field SignerQuorum', - ) + assertInvalid(signerListSetTx, 'SignerListSet: missing field SignerQuorum') }) it(`throws w/ empty SignerEntries`, function () { signerListSetTx.SignerEntries = [] - assert.throws( - () => validateSignerListSet(signerListSetTx), - ValidationError, - 'SignerListSet: need at least 1 member in SignerEntries', - ) - assert.throws( - () => validate(signerListSetTx), - ValidationError, + assertInvalid( + signerListSetTx, 'SignerListSet: need at least 1 member in SignerEntries', ) }) @@ -79,16 +66,7 @@ describe('SignerListSet', function () { it(`throws w/ invalid SignerEntries`, function () { signerListSetTx.SignerEntries = 'khgfgyhujk' - assert.throws( - () => validateSignerListSet(signerListSetTx), - ValidationError, - 'SignerListSet: invalid SignerEntries', - ) - assert.throws( - () => validate(signerListSetTx), - ValidationError, - 'SignerListSet: invalid SignerEntries', - ) + assertInvalid(signerListSetTx, 'SignerListSet: invalid field SignerEntries') }) it(`throws w/ maximum of 32 members allowed in SignerEntries`, function () { @@ -140,16 +118,7 @@ describe('SignerListSet', function () { const errorMessage = 'SignerListSet: maximum of 32 members allowed in SignerEntries' - assert.throws( - () => validateSignerListSet(signerListSetTx), - ValidationError, - errorMessage, - ) - assert.throws( - () => validate(signerListSetTx), - ValidationError, - errorMessage, - ) + assertInvalid(signerListSetTx, errorMessage) }) it(`verifies valid WalletLocator in SignerEntries`, function () { @@ -179,8 +148,7 @@ describe('SignerListSet', function () { }, ] - assert.doesNotThrow(() => validateSignerListSet(signerListSetTx)) - assert.doesNotThrow(() => validate(signerListSetTx)) + assertValid(signerListSetTx) }) it(`throws w/ invalid WalletLocator in SignerEntries`, function () { @@ -202,15 +170,6 @@ describe('SignerListSet', function () { ] const errorMessage = 'SignerListSet: WalletLocator in SignerEntry must be a 256-bit (32-byte) hexadecimal value' - assert.throws( - () => validateSignerListSet(signerListSetTx), - ValidationError, - errorMessage, - ) - assert.throws( - () => validate(signerListSetTx), - ValidationError, - errorMessage, - ) + assertInvalid(signerListSetTx, errorMessage) }) }) diff --git a/packages/xrpl/test/models/ticketCreate.test.ts b/packages/xrpl/test/models/ticketCreate.test.ts index 4ec21a8bf4..1cecf2dc12 100644 --- a/packages/xrpl/test/models/ticketCreate.test.ts +++ b/packages/xrpl/test/models/ticketCreate.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateTicketCreate } from '../../src/models/transactions/ticketCreate' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateTicketCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateTicketCreate, message) /** * TicketCreate Transaction Verification Testing. @@ -9,87 +11,50 @@ import { validateTicketCreate } from '../../src/models/transactions/ticketCreate * Providing runtime verification testing for each specific transaction type. */ describe('TicketCreate', function () { - let ticketCreate + let ticketCreate: any beforeEach(function () { ticketCreate = { TransactionType: 'TicketCreate', Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', TicketCount: 150, - } as any + } }) it('verifies valid TicketCreate', function () { - assert.doesNotThrow(() => validateTicketCreate(ticketCreate)) - assert.doesNotThrow(() => validate(ticketCreate)) + assertValid(ticketCreate) }) it('throws when TicketCount is missing', function () { delete ticketCreate.TicketCount - assert.throws( - () => validateTicketCreate(ticketCreate), - ValidationError, - 'TicketCreate: missing field TicketCount', - ) - assert.throws( - () => validate(ticketCreate), - ValidationError, - 'TicketCreate: missing field TicketCount', - ) + assertInvalid(ticketCreate, 'TicketCreate: missing field TicketCount') }) it('throws when TicketCount is not a number', function () { ticketCreate.TicketCount = '150' - assert.throws( - () => validateTicketCreate(ticketCreate), - ValidationError, - 'TicketCreate: TicketCount must be a number', - ) - assert.throws( - () => validate(ticketCreate), - ValidationError, - 'TicketCreate: TicketCount must be a number', - ) + assertInvalid(ticketCreate, 'TicketCreate: TicketCount must be a number') }) it('throws when TicketCount is not an integer', function () { ticketCreate.TicketCount = 12.5 - assert.throws( - () => validateTicketCreate(ticketCreate), - ValidationError, - 'TicketCreate: TicketCount must be an integer from 1 to 250', - ) - assert.throws( - () => validate(ticketCreate), - ValidationError, + assertInvalid( + ticketCreate, 'TicketCreate: TicketCount must be an integer from 1 to 250', ) }) it('throws when TicketCount is < 1', function () { ticketCreate.TicketCount = 0 - assert.throws( - () => validateTicketCreate(ticketCreate), - ValidationError, - 'TicketCreate: TicketCount must be an integer from 1 to 250', - ) - assert.throws( - () => validate(ticketCreate), - ValidationError, + assertInvalid( + ticketCreate, 'TicketCreate: TicketCount must be an integer from 1 to 250', ) }) it('throws when TicketCount is > 250', function () { ticketCreate.TicketCount = 251 - assert.throws( - () => validateTicketCreate(ticketCreate), - ValidationError, - 'TicketCreate: TicketCount must be an integer from 1 to 250', - ) - assert.throws( - () => validate(ticketCreate), - ValidationError, + assertInvalid( + ticketCreate, 'TicketCreate: TicketCount must be an integer from 1 to 250', ) }) diff --git a/packages/xrpl/test/models/trustSet.test.ts b/packages/xrpl/test/models/trustSet.test.ts index ce1b05ebcd..8ea965e76c 100644 --- a/packages/xrpl/test/models/trustSet.test.ts +++ b/packages/xrpl/test/models/trustSet.test.ts @@ -1,7 +1,9 @@ -import { assert } from 'chai' - -import { validate, ValidationError } from '../../src' import { validateTrustSet } from '../../src/models/transactions/trustSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateTrustSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateTrustSet, message) /** * TrustSet Transaction Verification Testing. @@ -9,7 +11,7 @@ import { validateTrustSet } from '../../src/models/transactions/trustSet' * Providing runtime verification testing for each specific transaction type. */ describe('TrustSet', function () { - let trustSet + let trustSet: any beforeEach(function () { trustSet = { @@ -22,67 +24,35 @@ describe('TrustSet', function () { }, QualityIn: 1234, QualityOut: 4321, - } as any + // an example of deep-frozen trustline + Flags: { + tfSetFreeze: true, + tfSetDeepFreeze: true, + }, + } }) it('verifies valid TrustSet', function () { - assert.doesNotThrow(() => validateTrustSet(trustSet)) - assert.doesNotThrow(() => validate(trustSet)) + assertValid(trustSet) }) it('throws when LimitAmount is missing', function () { delete trustSet.LimitAmount - assert.throws( - () => validateTrustSet(trustSet), - ValidationError, - 'TrustSet: missing field LimitAmount', - ) - assert.throws( - () => validate(trustSet), - ValidationError, - 'TrustSet: missing field LimitAmount', - ) + assertInvalid(trustSet, 'TrustSet: missing field LimitAmount') }) it('throws when LimitAmount is invalid', function () { trustSet.LimitAmount = 1234 - assert.throws( - () => validateTrustSet(trustSet), - ValidationError, - 'TrustSet: invalid LimitAmount', - ) - assert.throws( - () => validate(trustSet), - ValidationError, - 'TrustSet: invalid LimitAmount', - ) + assertInvalid(trustSet, 'TrustSet: invalid LimitAmount') }) it('throws when QualityIn is not a number', function () { trustSet.QualityIn = '1234' - assert.throws( - () => validateTrustSet(trustSet), - ValidationError, - 'TrustSet: QualityIn must be a number', - ) - assert.throws( - () => validate(trustSet), - ValidationError, - 'TrustSet: QualityIn must be a number', - ) + assertInvalid(trustSet, 'TrustSet: QualityIn must be a number') }) it('throws when QualityOut is not a number', function () { trustSet.QualityOut = '4321' - assert.throws( - () => validateTrustSet(trustSet), - ValidationError, - 'TrustSet: QualityOut must be a number', - ) - assert.throws( - () => validate(trustSet), - ValidationError, - 'TrustSet: QualityOut must be a number', - ) + assertInvalid(trustSet, 'TrustSet: QualityOut must be a number') }) }) diff --git a/packages/xrpl/test/models/utils.test.ts b/packages/xrpl/test/models/utils.test.ts index c4313610b7..3af9a5f2e0 100644 --- a/packages/xrpl/test/models/utils.test.ts +++ b/packages/xrpl/test/models/utils.test.ts @@ -1,4 +1,6 @@ +/* eslint-disable import/no-deprecated -- using deprecated setTransactionFlagsToNumbers to ensure no breaking changes */ /* eslint-disable no-bitwise -- flags require bitwise operations */ +import { stringToHex } from '@xrplf/isomorphic/src/utils' import { assert } from 'chai' import { @@ -12,13 +14,26 @@ import { TrustSet, TrustSetFlags, } from '../../src' +import { AuthorizeCredential, MPTokenMetadata } from '../../src/models/common' import { AccountRootFlags } from '../../src/models/ledger' +import { + containsDuplicates, + GlobalFlags, +} from '../../src/models/transactions/common' import { isFlagEnabled } from '../../src/models/utils' import { setTransactionFlagsToNumber, + convertTxFlagsToNumber, parseAccountRootFlags, parseTransactionFlags, } from '../../src/models/utils/flags' +import { + decodeMPTokenMetadata, + encodeMPTokenMetadata, + validateMPTokenMetadata, +} from '../../src/models/utils/mptokenMetadata' +import mptMetadataEncodeDecodeTests from '../fixtures/transactions/mptokenMetadataEncodeDecodeData.json' +import mptMetadataValidationTests from '../fixtures/transactions/mptokenMetadataValidationData.json' /** * Utils Testing. @@ -26,6 +41,43 @@ import { * Provides tests for utils used in models. */ describe('Models Utils', function () { + describe('validate containsDuplicates utility method', function () { + it(`use nested-objects for input parameters, list contains duplicates`, function () { + // change the order of the inner-objects in the list + const list_with_duplicates: AuthorizeCredential[] = [ + { Credential: { Issuer: 'alice', CredentialType: 'Passport' } }, + { Credential: { CredentialType: 'Passport', Issuer: 'alice' } }, + ] + + assert.isTrue(containsDuplicates(list_with_duplicates)) + }) + + it(`use nested-objects for input parameters, no duplicates`, function () { + const list_without_dups: AuthorizeCredential[] = [ + { Credential: { Issuer: 'alice', CredentialType: 'Passport' } }, + { Credential: { CredentialType: 'DMV_license', Issuer: 'bob' } }, + ] + + assert.isFalse(containsDuplicates(list_without_dups)) + }) + + it(`use string-IDs for input parameters`, function () { + const list_without_dups: string[] = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + 'F9F89FBB1426210D58D6A06E5EEF1783D6A90EE403B79AEDF0FED36A6DE238D2', + '5328F2D1D6EBBC6093DC10F1EA3DD630666F5B2491EB9BDD7DF9A6C45AC12C46', + ] + + const list_with_duplicates: string[] = [ + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + 'EA85602C1B41F6F1F5E83C0E6B87142FB8957BD209469E4CC347BA2D0C26F66A', + ] + + assert.isFalse(containsDuplicates(list_without_dups)) + assert.isTrue(containsDuplicates(list_with_duplicates)) + }) + }) + describe('isFlagEnabled', function () { let flags: number const flag1 = 0x00010000 @@ -46,6 +98,65 @@ describe('Models Utils', function () { }) }) + describe('parseAccountRootFlags', function () { + // eslint-disable-next-line complexity -- Simpler to list them all out at once. + it('all flags enabled', function () { + const accountRootFlags = + AccountRootFlags.lsfDefaultRipple | + AccountRootFlags.lsfDepositAuth | + AccountRootFlags.lsfDisableMaster | + AccountRootFlags.lsfDisallowXRP | + AccountRootFlags.lsfGlobalFreeze | + AccountRootFlags.lsfNoFreeze | + AccountRootFlags.lsfPasswordSpent | + AccountRootFlags.lsfRequireAuth | + AccountRootFlags.lsfRequireDestTag | + AccountRootFlags.lsfDisallowIncomingNFTokenOffer | + AccountRootFlags.lsfDisallowIncomingCheck | + AccountRootFlags.lsfDisallowIncomingPayChan | + AccountRootFlags.lsfDisallowIncomingTrustline | + AccountRootFlags.lsfAllowTrustLineClawback + + const parsed = parseAccountRootFlags(accountRootFlags) + + assert.isTrue( + parsed.lsfDefaultRipple && + parsed.lsfDepositAuth && + parsed.lsfDisableMaster && + parsed.lsfDisallowXRP && + parsed.lsfGlobalFreeze && + parsed.lsfNoFreeze && + parsed.lsfPasswordSpent && + parsed.lsfRequireAuth && + parsed.lsfRequireDestTag && + parsed.lsfDisallowIncomingNFTokenOffer && + parsed.lsfDisallowIncomingCheck && + parsed.lsfDisallowIncomingPayChan && + parsed.lsfDisallowIncomingTrustline && + parsed.lsfAllowTrustLineClawback, + ) + }) + + it('no flags set', function () { + const parsed = parseAccountRootFlags(0) + + assert.isUndefined(parsed.lsfDefaultRipple) + assert.isUndefined(parsed.lsfDepositAuth) + assert.isUndefined(parsed.lsfDisableMaster) + assert.isUndefined(parsed.lsfDisallowXRP) + assert.isUndefined(parsed.lsfGlobalFreeze) + assert.isUndefined(parsed.lsfNoFreeze) + assert.isUndefined(parsed.lsfPasswordSpent) + assert.isUndefined(parsed.lsfRequireAuth) + assert.isUndefined(parsed.lsfRequireDestTag) + assert.isUndefined(parsed.lsfDisallowIncomingNFTokenOffer) + assert.isUndefined(parsed.lsfDisallowIncomingCheck) + assert.isUndefined(parsed.lsfDisallowIncomingPayChan) + assert.isUndefined(parsed.lsfDisallowIncomingTrustline) + assert.isUndefined(parsed.lsfAllowTrustLineClawback) + }) + }) + describe('setTransactionFlagsToNumber', function () { it('sets OfferCreateFlags to its numeric value', function () { const tx: OfferCreate = { @@ -94,7 +205,7 @@ describe('Models Utils', function () { assert.strictEqual(tx.Flags, expected) }) - it('sets PaymentTransactionFlags to its numeric value', function () { + it('sets PaymentFlags to its numeric value', function () { const tx: Payment = { TransactionType: 'Payment', Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', @@ -152,64 +263,42 @@ describe('Models Utils', function () { assert.strictEqual(tx.Flags, 0) }) - // eslint-disable-next-line complexity -- Simpler to list them all out at once. - it('parseAccountRootFlags all enabled', function () { - const accountRootFlags = - AccountRootFlags.lsfDefaultRipple | - AccountRootFlags.lsfDepositAuth | - AccountRootFlags.lsfDisableMaster | - AccountRootFlags.lsfDisallowXRP | - AccountRootFlags.lsfGlobalFreeze | - AccountRootFlags.lsfNoFreeze | - AccountRootFlags.lsfPasswordSpent | - AccountRootFlags.lsfRequireAuth | - AccountRootFlags.lsfRequireDestTag | - AccountRootFlags.lsfDisallowIncomingNFTokenOffer | - AccountRootFlags.lsfDisallowIncomingCheck | - AccountRootFlags.lsfDisallowIncomingPayChan | - AccountRootFlags.lsfDisallowIncomingTrustline | - AccountRootFlags.lsfAllowTrustLineClawback - - const parsed = parseAccountRootFlags(accountRootFlags) - - assert.isTrue( - parsed.lsfDefaultRipple && - parsed.lsfDepositAuth && - parsed.lsfDisableMaster && - parsed.lsfDisallowXRP && - parsed.lsfGlobalFreeze && - parsed.lsfNoFreeze && - parsed.lsfPasswordSpent && - parsed.lsfRequireAuth && - parsed.lsfRequireDestTag && - parsed.lsfDisallowIncomingNFTokenOffer && - parsed.lsfDisallowIncomingCheck && - parsed.lsfDisallowIncomingPayChan && - parsed.lsfDisallowIncomingTrustline && - parsed.lsfAllowTrustLineClawback, - ) - }) + it('handles global flags', function () { + const tx: TrustSet = { + TransactionType: 'TrustSet', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + LimitAmount: { + currency: 'XRP', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '4329.23', + }, + QualityIn: 1234, + QualityOut: 4321, + Flags: { + tfSetfAuth: true, + tfSetNoRipple: false, + tfClearNoRipple: true, + tfSetFreeze: false, + tfClearFreeze: true, + // Global flag + tfInnerBatchTxn: true, + }, + } - it('parseAccountFlags all false', function () { - const parsed = parseAccountRootFlags(0) + const { tfSetfAuth, tfClearNoRipple, tfClearFreeze } = TrustSetFlags + const expected: number = + tfSetfAuth | + tfClearNoRipple | + tfClearFreeze | + GlobalFlags.tfInnerBatchTxn - assert.isUndefined(parsed.lsfDefaultRipple) - assert.isUndefined(parsed.lsfDepositAuth) - assert.isUndefined(parsed.lsfDisableMaster) - assert.isUndefined(parsed.lsfDisallowXRP) - assert.isUndefined(parsed.lsfGlobalFreeze) - assert.isUndefined(parsed.lsfNoFreeze) - assert.isUndefined(parsed.lsfPasswordSpent) - assert.isUndefined(parsed.lsfRequireAuth) - assert.isUndefined(parsed.lsfRequireDestTag) - assert.isUndefined(parsed.lsfDisallowIncomingNFTokenOffer) - assert.isUndefined(parsed.lsfDisallowIncomingCheck) - assert.isUndefined(parsed.lsfDisallowIncomingPayChan) - assert.isUndefined(parsed.lsfDisallowIncomingTrustline) - assert.isUndefined(parsed.lsfAllowTrustLineClawback) + setTransactionFlagsToNumber(tx) + assert.strictEqual(tx.Flags, expected) }) + }) - it('parseTransactionFlags all enabled', function () { + describe('parseTransactionFlags', function () { + it('parseTransactionFlags not all enabled', function () { const tx: PaymentChannelClaim = { Account: 'r...', TransactionType: 'PaymentChannelClaim', @@ -226,7 +315,7 @@ describe('Models Utils', function () { } const flagsMap = parseTransactionFlags(tx) - assert.notStrictEqual(flagsMap, expected) + assert.deepEqual(flagsMap, expected) }) it('parseTransactionFlags all false', function () { @@ -244,7 +333,7 @@ describe('Models Utils', function () { const expected = {} const flagsMap = parseTransactionFlags(tx) - assert.notStrictEqual(flagsMap, expected) + assert.deepEqual(flagsMap, expected) }) it('parseTransactionFlags flag is already numeric', function () { @@ -261,7 +350,289 @@ describe('Models Utils', function () { } const flagsMap = parseTransactionFlags(tx) - assert.notStrictEqual(flagsMap, expected) + assert.deepEqual(flagsMap, expected) + }) + + it('parseTransactionFlags including GlobalFlag', function () { + const tx: PaymentChannelClaim = { + Account: 'r...', + TransactionType: 'PaymentChannelClaim', + Channel: + 'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198', + Flags: { + tfRenew: true, + tfClose: false, + // Global flag + tfInnerBatchTxn: true, + }, + } + + const expected = { + tfRenew: true, + tfInnerBatchTxn: true, + } + + const flagsMap = parseTransactionFlags(tx) + assert.deepEqual(flagsMap, expected) + }) + + it('parseTransactionFlags flag numeric including global flag', function () { + const tx: PaymentChannelClaim = { + Account: 'r...', + TransactionType: 'PaymentChannelClaim', + Channel: + 'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198', + Flags: PaymentChannelClaimFlags.tfRenew + GlobalFlags.tfInnerBatchTxn, + } + + const expected = { + tfRenew: true, + tfInnerBatchTxn: true, + } + + const flagsMap = parseTransactionFlags(tx) + assert.deepEqual(flagsMap, expected) + }) + }) + + describe('convertTxFlagsToNumber', function () { + it('null case', function () { + const tx: PaymentChannelClaim = { + Account: 'r...', + TransactionType: 'PaymentChannelClaim', + Channel: + 'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198', + // no Flags field + } + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, 0) + }) + + it('throws error for invalid flag', function () { + const tx: PaymentChannelClaim = { + Account: 'r...', + TransactionType: 'PaymentChannelClaim', + Channel: + 'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198', + Flags: { + // @ts-expect-error -- intentionally invalid flag + tfNonExistentFlag: true, + }, + } + + assert.throws(() => convertTxFlagsToNumber(tx)) + }) + + it('converts OfferCreateFlags to its numeric value', function () { + const tx: OfferCreate = { + Account: 'r3rhWeE31Jt5sWmi4QiGLMZnY3ENgqw96W', + Fee: '10', + TakerGets: { + currency: 'DSH', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '43.11584856965009', + }, + TakerPays: '12928290425', + TransactionType: 'OfferCreate', + TxnSignature: + '3045022100D874CDDD6BB24ED66E83B1D3574D3ECAC753A78F26DB7EBA89EAB8E7D72B95F802207C8CCD6CEA64E4AE2014E59EE9654E02CA8F03FE7FCE0539E958EAE182234D91', + Flags: { + tfPassive: true, + tfImmediateOrCancel: false, + tfFillOrKill: true, + tfSell: false, + }, + } + + const { tfPassive, tfFillOrKill } = OfferCreateFlags + const expected: number = tfPassive | tfFillOrKill + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, expected) + }) + + it('converts PaymentChannelClaimFlags to its numeric value', function () { + const tx: PaymentChannelClaim = { + Account: 'r...', + TransactionType: 'PaymentChannelClaim', + Channel: + 'C1AE6DDDEEC05CF2978C0BAD6FE302948E9533691DC749DCDD3B9E5992CA6198', + Flags: { + tfRenew: true, + tfClose: false, + }, + } + + const { tfRenew } = PaymentChannelClaimFlags + const expected: number = tfRenew + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, expected) + }) + + it('converts PaymentFlags to its numeric value', function () { + const tx: Payment = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: '1234', + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + Flags: { + tfNoRippleDirect: false, + tfPartialPayment: true, + tfLimitQuality: true, + }, + } + + const { tfPartialPayment, tfLimitQuality } = PaymentFlags + const expected: number = tfPartialPayment | tfLimitQuality + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, expected) + }) + + it('converts TrustSetFlags to its numeric value', function () { + const tx: TrustSet = { + TransactionType: 'TrustSet', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + LimitAmount: { + currency: 'XRP', + issuer: 'rcXY84C4g14iFp6taFXjjQGVeHqSCh9RX', + value: '4329.23', + }, + QualityIn: 1234, + QualityOut: 4321, + Flags: { + tfSetfAuth: true, + tfSetNoRipple: false, + tfClearNoRipple: true, + tfSetFreeze: false, + tfClearFreeze: true, + }, + } + + const { tfSetfAuth, tfClearNoRipple, tfClearFreeze } = TrustSetFlags + const expected: number = tfSetfAuth | tfClearNoRipple | tfClearFreeze + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, expected) + }) + + it('converts other transaction types flags to its numeric value', function () { + const tx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Flags: {}, + } + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, 0) + }) + + it('handles global flags', function () { + const tx: Payment = { + TransactionType: 'Payment', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Amount: '1234', + Destination: 'rfkE1aSy9G8Upk4JssnwBxhEv5p4mn2KTy', + Flags: { + tfNoRippleDirect: false, + tfPartialPayment: true, + tfLimitQuality: true, + // Global flag + tfInnerBatchTxn: true, + }, + } + + const { tfPartialPayment, tfLimitQuality } = PaymentFlags + const expected: number = + tfPartialPayment | tfLimitQuality | GlobalFlags.tfInnerBatchTxn + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, expected) + }) + + it('handles only global flags', function () { + const tx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Flags: { + tfInnerBatchTxn: true, + }, + } + + const result = convertTxFlagsToNumber(tx) + assert.strictEqual(result, GlobalFlags.tfInnerBatchTxn) + }) + + it('throws error for bad global flag', function () { + const tx: DepositPreauth = { + TransactionType: 'DepositPreauth', + Account: 'rUn84CUYbNjRoTQ6mSW7BVJPSVJNLb1QLo', + Flags: { + // @ts-expect-error -- intentionally invalid flag + tfNonExistent: true, + }, + } + + assert.throws(() => convertTxFlagsToNumber(tx)) + }) + }) + + describe('MPTokenMetadata validation messages', function () { + for (const testCase of mptMetadataValidationTests) { + const testName: string = testCase.testName + it(`should validate messages for: ${testName}`, function () { + const validationMessages = validateMPTokenMetadata( + stringToHex( + typeof testCase.mptMetadata === 'string' + ? testCase.mptMetadata + : JSON.stringify(testCase.mptMetadata), + ), + ) + + assert.deepStrictEqual(validationMessages, testCase.validationMessages) + }) + } + }) + + describe('MPTokenMetadata encode/decode', function () { + for (const testCase of mptMetadataEncodeDecodeTests) { + const testName: string = testCase.testName + it(`encode/decode: ${testName}`, function () { + const encodedHex = encodeMPTokenMetadata( + testCase.mptMetadata as MPTokenMetadata, + ) + assert.equal(encodedHex, testCase.hex) + + const decoded = decodeMPTokenMetadata(encodedHex) as unknown as Record< + string, + unknown + > + assert.deepStrictEqual(decoded, testCase.expectedLongForm) + }) + } + + it('throws error for invalid JSON', function () { + assert.throws( + () => + encodeMPTokenMetadata('invalid json' as unknown as MPTokenMetadata), + `MPTokenMetadata must be JSON object.`, + ) + }) + + it('throws error for invalid hex', function () { + assert.throws( + () => decodeMPTokenMetadata('invalid'), + `MPTokenMetadata must be in hex format.`, + ) + }) + + it('throws error for invalid JSON underneath hex', function () { + assert.throws( + () => decodeMPTokenMetadata('464F4F'), + `MPTokenMetadata is not properly formatted as JSON - SyntaxError: Unexpected token 'F', "FOO" is not valid JSON`, + ) }) }) }) diff --git a/packages/xrpl/test/models/vaultClawback.test.ts b/packages/xrpl/test/models/vaultClawback.test.ts new file mode 100644 index 0000000000..2b63bfdfa2 --- /dev/null +++ b/packages/xrpl/test/models/vaultClawback.test.ts @@ -0,0 +1,65 @@ +import { VaultClawback } from '../../src/models/transactions' +import { validateVaultClawback } from '../../src/models/transactions/vaultClawback' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateVaultClawback) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultClawback, message) + +/** + * VaultClawback Transaction Verification Testing. + * + * Provides runtime verification testing for VaultClawback transaction type. + */ +describe('VaultClawback', function () { + let tx: VaultClawback + + beforeEach(function () { + tx = { + TransactionType: 'VaultClawback', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + VaultID: 'ABCDEF1234567890', + Holder: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + Amount: { + currency: 'USD', + issuer: 'rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh', + value: '1234', + }, + } + }) + + it('verifies valid VaultClawback', function () { + assertValid(tx) + }) + + it('throws w/ missing VaultID', function () { + // @ts-expect-error for test + tx.VaultID = undefined + assertInvalid(tx, 'VaultClawback: missing field VaultID') + }) + + it('throws w/ invalid VaultID', function () { + // @ts-expect-error for test + tx.VaultID = 123 + assertInvalid(tx, 'VaultClawback: invalid field VaultID') + }) + + it('throws w/ missing Holder', function () { + // @ts-expect-error for test + tx.Holder = undefined + assertInvalid(tx, 'VaultClawback: missing field Holder') + }) + + it('throws w/ invalid Holder', function () { + // @ts-expect-error for test + tx.Holder = 123 + assertInvalid(tx, 'VaultClawback: invalid field Holder') + }) + + it('throws w/ string Amount', function () { + // @ts-expect-error for test + tx.Amount = '123456' + assertInvalid(tx, 'VaultClawback: invalid field Amount') + }) +}) diff --git a/packages/xrpl/test/models/vaultCreate.test.ts b/packages/xrpl/test/models/vaultCreate.test.ts new file mode 100644 index 0000000000..530590416f --- /dev/null +++ b/packages/xrpl/test/models/vaultCreate.test.ts @@ -0,0 +1,245 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { MPTokenMetadata } from '../../src' +import { + VaultCreate, + VaultCreateFlags, + VaultWithdrawalPolicy, +} from '../../src/models/transactions' +import { validateVaultCreate } from '../../src/models/transactions/vaultCreate' +import { MPT_META_WARNING_HEADER } from '../../src/models/utils/mptokenMetadata' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateVaultCreate) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultCreate, message) + +/** + * VaultCreate Transaction Verification Testing. + * + * Providing runtime verification testing for each specific transaction type. + */ +describe('VaultCreate', function () { + let tx: VaultCreate + + beforeEach(function () { + tx = { + TransactionType: 'VaultCreate', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + Asset: { currency: 'XRP' }, + WithdrawalPolicy: VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + } + }) + + it('verifies valid VaultCreate', function () { + assertValid(tx) + }) + + it('verifies MPT/IOU Currency as Asset', function () { + tx.Asset = { + mpt_issuance_id: + '983F536DBB46D5BBF43A0B5890576874EE1CF48CE31CA508A529EC17CD1A90EF', + } + assertValid(tx) + + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + assertValid(tx) + }) + + it('throws w/ missing Asset', function () { + // @ts-expect-error for test + tx.Asset = undefined + assertInvalid(tx, 'VaultCreate: missing field Asset') + }) + + it('throws w/ invalid Asset', function () { + // @ts-expect-error for test + tx.Asset = 123 + assertInvalid(tx, 'VaultCreate: invalid field Asset') + }) + + it('throws w/ Data field not hex', function () { + tx.Data = 'zznothex' + assertInvalid(tx, 'VaultCreate: Data must be a valid hex string') + }) + + it('throws w/ Data field too large', function () { + tx.Data = stringToHex('a'.repeat(257)) + assertInvalid(tx, 'VaultCreate: Data exceeds 256 bytes (actual: 257)') + }) + + it('throws w/ MPTokenMetadata not hex', function () { + tx.MPTokenMetadata = 'ggnothex' + assertInvalid( + tx, + 'VaultCreate: MPTokenMetadata must be a valid non-empty hex string', + ) + }) + + it('throws w/ MPTokenMetadata field too large', function () { + tx.MPTokenMetadata = stringToHex('a'.repeat(1025)) + assertInvalid( + tx, + 'VaultCreate: MPTokenMetadata exceeds 1024 bytes (actual: 1025)', + ) + }) + + it('throws w/ non-number WithdrawalPolicy', function () { + // @ts-expect-error for test + tx.WithdrawalPolicy = 'invalid' + assertInvalid(tx, 'VaultCreate: invalid field WithdrawalPolicy') + }) + + it('allows DomainID when tfVaultPrivate flag set', function () { + tx.DomainID = 'ABCDEF1234567890' + tx.Flags = VaultCreateFlags.tfVaultPrivate + assertValid(tx) + }) + + it('throws w/ DomainID set but tfVaultPrivate flag missing', function () { + tx.DomainID = 'ABCDEF1234567890' + tx.Flags = 0 + assertInvalid( + tx, + 'VaultCreate: Cannot set DomainID unless tfVaultPrivate flag is set.', + ) + }) + + describe('Scale field validation', function () { + it('throws w/ Scale provided for XRP asset', function () { + tx.Asset = { currency: 'XRP' } + tx.Scale = 5 + assertInvalid( + tx, + 'VaultCreate: Scale parameter must not be provided for XRP or MPT assets', + ) + }) + + it('throws w/ Scale provided for MPT asset', function () { + tx.Asset = { + mpt_issuance_id: + '983F536DBB46D5BBF43A0B5890576874EE1CF48CE31CA508A529EC17CD1A90EF', + } + tx.Scale = 5 + assertInvalid( + tx, + 'VaultCreate: Scale parameter must not be provided for XRP or MPT assets', + ) + }) + + it('allows Scale for IOU asset with valid value (0)', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + tx.Scale = 0 + assertValid(tx) + }) + + it('allows Scale for IOU asset with valid value (18)', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + tx.Scale = 18 + assertValid(tx) + }) + + it('allows Scale for IOU asset with valid value (10)', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + tx.Scale = 10 + assertValid(tx) + }) + + it('throws w/ Scale less than 0 for IOU asset', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + tx.Scale = -1 + assertInvalid( + tx, + 'VaultCreate: Scale must be a number between 0 and 18 inclusive for IOU assets', + ) + }) + + it('throws w/ Scale greater than 18 for IOU asset', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + tx.Scale = 19 + assertInvalid( + tx, + 'VaultCreate: Scale must be a number between 0 and 18 inclusive for IOU assets', + ) + }) + + it('throws w/ non-number Scale for IOU asset', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + // @ts-expect-error for test + tx.Scale = 'invalid' + assertInvalid(tx, 'VaultCreate: invalid field Scale') + }) + + it('allows no Scale for IOU asset', function () { + tx.Asset = { + currency: 'USD', + issuer: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + } + assertValid(tx) + }) + }) +}) + +/** + * Test console warning is logged while validating VaultCreate for MPTokenMetadata field. + */ +/* eslint-disable no-console -- Require to test console warnings */ +describe('MPTokenMetadata warnings', function () { + beforeEach(() => { + jest.spyOn(console, 'warn') + }) + + afterEach(() => { + jest.restoreAllMocks() + }) + + it(`logs console warning`, function () { + const mptMetaData: MPTokenMetadata = { + ticker: 'TBILL', + name: 'T-Bill Token', + asset_class: 'rwa', + asset_subclass: 'treasury', + issuer_name: 'Issuer', + } as MPTokenMetadata + const tx = { + TransactionType: 'VaultCreate', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + Asset: { currency: 'XRP' }, + WithdrawalPolicy: VaultWithdrawalPolicy.vaultStrategyFirstComeFirstServe, + MPTokenMetadata: stringToHex(JSON.stringify(mptMetaData)), + } + + assertValid(tx) + + const expectedMessage = [ + MPT_META_WARNING_HEADER, + '- icon/i: should be a non-empty string.', + ].join('\n') + + expect(console.warn).toHaveBeenCalledWith( + expect.stringContaining(expectedMessage), + ) + }) +}) +/* eslint-enable no-console */ diff --git a/packages/xrpl/test/models/vaultDelete.test.ts b/packages/xrpl/test/models/vaultDelete.test.ts new file mode 100644 index 0000000000..da3c7f77d1 --- /dev/null +++ b/packages/xrpl/test/models/vaultDelete.test.ts @@ -0,0 +1,40 @@ +import { VaultDelete } from '../../src/models/transactions' +import { validateVaultDelete } from '../../src/models/transactions/vaultDelete' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateVaultDelete) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultDelete, message) + +/** + * VaultDelete Transaction Verification Testing. + * + * Provides runtime verification testing for VaultDelete transaction type. + */ +describe('VaultDelete', function () { + let tx: VaultDelete + + beforeEach(function () { + tx = { + TransactionType: 'VaultDelete', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + VaultID: 'ABCDEF1234567890', + } + }) + + it('verifies valid VaultDelete', function () { + assertValid(tx) + }) + + it('throws w/ missing VaultID', function () { + // @ts-expect-error for test + tx.VaultID = undefined + assertInvalid(tx, 'VaultDelete: missing field VaultID') + }) + + it('throws w/ invalid VaultID', function () { + // @ts-expect-error for test + tx.VaultID = 123 + assertInvalid(tx, 'VaultDelete: invalid field VaultID') + }) +}) diff --git a/packages/xrpl/test/models/vaultDeposit.test.ts b/packages/xrpl/test/models/vaultDeposit.test.ts new file mode 100644 index 0000000000..4ebe5b97ee --- /dev/null +++ b/packages/xrpl/test/models/vaultDeposit.test.ts @@ -0,0 +1,53 @@ +import { VaultDeposit } from '../../src/models/transactions' +import { validateVaultDeposit } from '../../src/models/transactions/vaultDeposit' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateVaultDeposit) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultDeposit, message) + +/** + * VaultDeposit Transaction Verification Testing. + * + * Provides runtime verification testing for VaultDeposit transaction type. + */ +describe('VaultDeposit', function () { + let tx: VaultDeposit + + beforeEach(function () { + tx = { + TransactionType: 'VaultDeposit', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + VaultID: 'ABCDEF1234567890', + Amount: '1234.567', + } + }) + + it('verifies valid VaultDeposit', function () { + assertValid(tx) + }) + + it('throws w/ missing VaultID', function () { + // @ts-expect-error for test + tx.VaultID = undefined + assertInvalid(tx, 'VaultDeposit: missing field VaultID') + }) + + it('throws w/ invalid VaultID', function () { + // @ts-expect-error for test + tx.VaultID = 123 + assertInvalid(tx, 'VaultDeposit: invalid field VaultID') + }) + + it('throws w/ missing Amount', function () { + // @ts-expect-error for test + tx.Amount = undefined + assertInvalid(tx, 'VaultDeposit: missing field Amount') + }) + + it('throws w/ non-string Amount', function () { + // @ts-expect-error for test + tx.Amount = 123 + assertInvalid(tx, 'VaultDeposit: invalid field Amount') + }) +}) diff --git a/packages/xrpl/test/models/vaultSet.test.ts b/packages/xrpl/test/models/vaultSet.test.ts new file mode 100644 index 0000000000..3261ec8d74 --- /dev/null +++ b/packages/xrpl/test/models/vaultSet.test.ts @@ -0,0 +1,69 @@ +import { stringToHex } from '@xrplf/isomorphic/utils' + +import { VaultSet } from '../../src' +import { validateVaultSet } from '../../src/models/transactions/vaultSet' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => assertTxIsValid(tx, validateVaultSet) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultSet, message) + +/** + * VaultSet Transaction Verification Testing. + * + * Providing runtime verification testing for the VaultSet transaction type. + */ +describe('VaultSet', function () { + let tx: VaultSet + + beforeEach(function () { + tx = { + TransactionType: 'VaultSet', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + VaultID: 'ABCDEF1234567890', + } + }) + + it('verifies valid VaultSet', function () { + assertValid(tx) + }) + + it('throws w/ missing VaultID', function () { + // @ts-expect-error for test + tx.VaultID = undefined + assertInvalid(tx, 'VaultSet: missing field VaultID') + }) + + it('throws w/ non-string VaultID', function () { + // @ts-expect-error for test + tx.VaultID = 123456 + assertInvalid(tx, 'VaultSet: invalid field VaultID') + }) + + it('throws w/ Data field not hex', function () { + tx.Data = 'zznothex' + assertInvalid(tx, 'VaultSet: Data must be a valid hex string') + }) + + it('throws w/ Data field too large', function () { + tx.Data = stringToHex('a'.repeat(257)) + assertInvalid(tx, 'VaultSet: Data exceeds 256 bytes (actual: 257)') + }) + + it('throws w/ non-XRPLNumber AssetsMaximum', function () { + tx.AssetsMaximum = 'notanumber' + assertInvalid(tx, 'VaultSet: invalid field AssetsMaximum') + }) + + it('throws w/ non-string Data', function () { + // @ts-expect-error for test + tx.Data = 1234 + assertInvalid(tx, 'VaultSet: invalid field Data') + }) + + it('throws w/ non-string DomainID', function () { + // @ts-expect-error for test + tx.DomainID = 1234 + assertInvalid(tx, 'VaultSet: invalid field DomainID') + }) +}) diff --git a/packages/xrpl/test/models/vaultWithdraw.test.ts b/packages/xrpl/test/models/vaultWithdraw.test.ts new file mode 100644 index 0000000000..81341b199c --- /dev/null +++ b/packages/xrpl/test/models/vaultWithdraw.test.ts @@ -0,0 +1,70 @@ +import { assert } from 'chai' + +import { validate } from '../../src' +import { VaultWithdraw } from '../../src/models/transactions' +import { validateVaultWithdraw } from '../../src/models/transactions/vaultWithdraw' +import { assertTxIsValid, assertTxValidationError } from '../testUtils' + +const assertValid = (tx: any): void => + assertTxIsValid(tx, validateVaultWithdraw) +const assertInvalid = (tx: any, message: string): void => + assertTxValidationError(tx, validateVaultWithdraw, message) + +/** + * VaultWithdraw Transaction Verification Testing. + * + * Provides runtime verification testing for VaultWithdraw transaction type. + */ +describe('VaultWithdraw', function () { + let tx: VaultWithdraw + + beforeEach(function () { + tx = { + TransactionType: 'VaultWithdraw', + Account: 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8', + VaultID: 'ABCDEF1234567890', + Amount: '1234.567', + } + }) + + it('verifies valid VaultWithdraw', function () { + assertValid(tx) + }) + + it('throws w/ missing VaultID', function () { + // @ts-expect-error for test + tx.VaultID = undefined + assertInvalid(tx, 'VaultWithdraw: missing field VaultID') + }) + + it('throws w/ invalid VaultID', function () { + // @ts-expect-error for test + tx.VaultID = 123 + assertInvalid(tx, 'VaultWithdraw: invalid field VaultID') + }) + + it('throws w/ missing Amount', function () { + // @ts-expect-error for test + tx.Amount = undefined + assertInvalid(tx, 'VaultWithdraw: missing field Amount') + }) + + it('throws w/ non-string Amount', function () { + // @ts-expect-error for test + tx.Amount = 123 + assertInvalid(tx, 'VaultWithdraw: invalid field Amount') + }) + + it('verifies valid VaultWithdraw with Destination', function () { + tx.Destination = 'rfmDuhDyLGgx94qiwf3YF8BUV5j6KSvE8' + assert.doesNotThrow(() => validateVaultWithdraw(tx)) + assert.doesNotThrow(() => validate(tx)) + assertValid(tx) + }) + + it('throws w/ invalid Destination', function () { + // @ts-expect-error for test + tx.Destination = 123 + assertInvalid(tx, 'VaultWithdraw: invalid field Destination') + }) +}) diff --git a/packages/xrpl/test/setupClient.ts b/packages/xrpl/test/setupClient.ts index ca365be25f..0da756ddf0 100644 --- a/packages/xrpl/test/setupClient.ts +++ b/packages/xrpl/test/setupClient.ts @@ -1,4 +1,4 @@ -import { Client } from '../src/client' +import { Client, ClientOptions } from '../src/client' import createMockRippled, { type MockedWebSocketServer, @@ -16,11 +16,14 @@ export interface XrplTestContext { async function setupMockRippledConnection( port: number, + options: { + clientOptions?: ClientOptions + } = {}, ): Promise { const context: XrplTestContext = { mockRippled: createMockRippled(port), _mockedServerPort: port, - client: new Client(`ws://localhost:${port}`), + client: new Client(`ws://localhost:${port}`, options.clientOptions ?? {}), servers: [port], } @@ -35,9 +38,13 @@ async function setupMockRippledConnection( return context.client.connect().then(() => context) } -async function setupClient(): Promise { +async function setupClient( + options: { + clientOptions?: ClientOptions + } = {}, +): Promise { return getFreePort().then(async (port) => { - return setupMockRippledConnection(port) + return setupMockRippledConnection(port, options) }) } diff --git a/packages/xrpl/test/testUtils.ts b/packages/xrpl/test/testUtils.ts index ee922a63e4..782ca590c8 100644 --- a/packages/xrpl/test/testUtils.ts +++ b/packages/xrpl/test/testUtils.ts @@ -5,7 +5,12 @@ import net from 'net' import { assert } from 'chai' import omit from 'lodash/omit' -import { rippleTimeToUnixTime, unixTimeToRippleTime } from '../src' +import { + rippleTimeToUnixTime, + unixTimeToRippleTime, + validate, + ValidationError, +} from '../src' import addresses from './fixtures/addresses.json' @@ -52,6 +57,33 @@ export function assertResultMatch( ) } +/** + * Check that a transaction error validation fails properly. + * + * @param tx The transaction that should fail validation. + * @param validateTx The transaction-specific validation function (e.g. `validatePayment`). + */ +export function assertTxIsValid(tx: any, validateTx: (tx: any) => void): void { + assert.doesNotThrow(() => validateTx(tx)) + assert.doesNotThrow(() => validate(tx)) +} + +/** + * Check that a transaction error validation fails properly. + * + * @param tx The transaction that should fail validation. + * @param validateTx The transaction-specific validation function (e.g. `validatePayment`). + * @param errorMessage The error message that should be included in the error. + */ +export function assertTxValidationError( + tx: any, + validateTx: (tx: any) => void, + errorMessage: string, +): void { + assert.throws(() => validateTx(tx), ValidationError, errorMessage) + assert.throws(() => validate(tx), ValidationError, errorMessage) +} + /** * Check that the promise rejects with an expected error. * @@ -190,7 +222,6 @@ export function ignoreWebSocketDisconnect(error: Error): void { * for example, an Escrow could successfully finish at a real-world time that is up to about 10 seconds later than the time-based * expiration specified in the Escrow object. * - * * @param closeTime - ledger close time in ripple time * @returns The difference between last ledger close time and current time in seconds */ diff --git a/packages/xrpl/test/utils/hashes.test.ts b/packages/xrpl/test/utils/hashes.test.ts index daa42301d4..1ab3b9f024 100644 --- a/packages/xrpl/test/utils/hashes.test.ts +++ b/packages/xrpl/test/utils/hashes.test.ts @@ -7,6 +7,7 @@ import { encode } from 'ripple-binary-codec' import { EnableAmendment, OfferCreate, + Payment, Transaction, ValidationError, } from '../../src' @@ -20,6 +21,9 @@ import { hashAccountRoot, hashOfferId, hashSignerListId, + hashVault, + hashLoanBroker, + hashLoan, } from '../../src/utils/hashes' import fixtures from '../fixtures/rippled' import { assertResultMatch } from '../testUtils' @@ -37,7 +41,7 @@ function createLedgerTest(ledgerIndex: number): void { `fixtures/rippled/ledgerFull${ledgerIndex}.json`, ) - // eslint-disable-next-line node/no-sync -- must be sync version when not in async method + // eslint-disable-next-line n/no-sync -- must be sync version when not in async method const ledgerRaw = fs.readFileSync(fileLocation, { encoding: 'utf8' }) const ledgerJSON = JSON.parse(ledgerRaw) @@ -148,6 +152,37 @@ describe('Hashes', function () { assert.equal(actualEntryHash, expectedEntryHash) }) + it('calcVaultEntryHash', function () { + const account = 'rDcMtA1XpH5DGwiaqFif2cYCvgk5vxHraS' + const sequence = 18 + const expectedEntryHash = + '9C3208D7F99E5644643542518859401A96C93D80CC5F757AF0DF1781046C0A6A' + const actualEntryHash = hashVault(account, sequence) + + assert.equal(actualEntryHash, expectedEntryHash) + }) + + it('calcLoanBrokerHash', function () { + const account = 'rNTrjogemt4dZD13PaqphezBWSmiApNH4K' + const sequence = 84 + const expectedEntryHash = + 'E799B84AC949CE2D8F27435C784F15C72E6A23ACA6841BA6D2F37A1E5DA4110F' + const actualEntryHash = hashLoanBroker(account, sequence) + + assert.equal(actualEntryHash, expectedEntryHash) + }) + + it('calcLoanHash', function () { + const loanBrokerId = + 'AEB642A65066A6E6F03D312713475D958E0B320B74AD1A76B5B2EABB752E52AA' + const loanSequence = 1 + const expectedEntryHash = + 'E93874AB62125DF2E86FB6C724B261F8E654E0334715C4D7160C0F148CDC9B47' + const actualEntryHash = hashLoan(loanBrokerId, loanSequence) + + assert.equal(actualEntryHash, expectedEntryHash) + }) + it('Hash a signed transaction correctly', function () { const expected_hash = '458101D51051230B1D56E9ACAFAA34451BF65FA000F95DF6F0FF5B3A62D83FC2' @@ -211,4 +246,22 @@ describe('Hashes', function () { 'CA4562711E4679FE9317DD767871E90A404C7A8B84FAFD35EC2CF0231F1F6DAF', ) }) + + it('hashSignedTx - batch transaction', function () { + const transaction: Payment = { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '1000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Flags: 0x40000000, + Sequence: 470, + SigningPubKey: '', + TransactionType: 'Payment', + } + + assert.equal( + hashSignedTx(transaction), + '9EDF5DB29F536DD3919037F1E8A72B040D075571A10C9000294C57B5ECEEA791', + ) + }) }) diff --git a/packages/xrpl/test/wallet/authorizeChannel.test.ts b/packages/xrpl/test/wallet/authorizeChannel.test.ts index f8fd1cb9ca..e838921f94 100644 --- a/packages/xrpl/test/wallet/authorizeChannel.test.ts +++ b/packages/xrpl/test/wallet/authorizeChannel.test.ts @@ -3,27 +3,49 @@ import { assert } from 'chai' import { ECDSA, Wallet } from '../../src' import { authorizeChannel } from '../../src/Wallet/authorizeChannel' -it('authorizeChannel succeeds with secp256k1 seed', function () { - const secpWallet = Wallet.fromSeed('snGHNrPbHrdUcszeuDEigMdC1Lyyd', { - algorithm: ECDSA.secp256k1, +describe('authorizeChannel', function () { + it('succeeds with secp256k1 seed', function () { + const secpWallet = Wallet.fromSeed('snGHNrPbHrdUcszeuDEigMdC1Lyyd', { + algorithm: ECDSA.secp256k1, + }) + const channelId = + '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3' + const amount = '1000000' + + assert.equal( + authorizeChannel(secpWallet, channelId, amount), + '304402204E7052F33DDAFAAA55C9F5B132A5E50EE95B2CF68C0902F61DFE77299BC893740220353640B951DCD24371C16868B3F91B78D38B6F3FD1E826413CDF891FA8250AAC', + ) }) - const channelId = - '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3' - const amount = '1000000' - assert.equal( - authorizeChannel(secpWallet, channelId, amount), - '304402204E7052F33DDAFAAA55C9F5B132A5E50EE95B2CF68C0902F61DFE77299BC893740220353640B951DCD24371C16868B3F91B78D38B6F3FD1E826413CDF891FA8250AAC', - ) -}) + it('succeeds with ed25519 seed', function () { + const edWallet = Wallet.fromSeed('sEdSuqBPSQaood2DmNYVkwWTn1oQTj2') + const channelId = + '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3' + const amount = '1000000' + assert.equal( + authorizeChannel(edWallet, channelId, amount), + '7E1C217A3E4B3C107B7A356E665088B4FBA6464C48C58267BEF64975E3375EA338AE22E6714E3F5E734AE33E6B97AAD59058E1E196C1F92346FC1498D0674404', + ) + }) -it('authorizeChannel succeeds with ed25519 seed', function () { - const edWallet = Wallet.fromSeed('sEdSuqBPSQaood2DmNYVkwWTn1oQTj2') - const channelId = - '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3' - const amount = '1000000' - assert.equal( - authorizeChannel(edWallet, channelId, amount), - '7E1C217A3E4B3C107B7A356E665088B4FBA6464C48C58267BEF64975E3375EA338AE22E6714E3F5E734AE33E6B97AAD59058E1E196C1F92346FC1498D0674404', - ) + it('throws on invalid channel ID format', function () { + const wallet = Wallet.fromSeed('snGHNrPbHrdUcszeuDEigMdC1Lyyd', { + algorithm: ECDSA.secp256k1, + }) + assert.throws(() => { + authorizeChannel(wallet, 'invalid-id', '1000000') + }) + }) + + it('throws on invalid amount format', function () { + const wallet = Wallet.fromSeed('snGHNrPbHrdUcszeuDEigMdC1Lyyd', { + algorithm: ECDSA.secp256k1, + }) + const channelId = + '5DB01B7FFED6B67E6B0414DED11E051D2EE2B7619CE0EAA6286D67A3A4D5BDB3' + assert.throws(() => { + authorizeChannel(wallet, channelId, 'invalid-amount') + }) + }) }) diff --git a/packages/xrpl/test/wallet/batchSigner.test.ts b/packages/xrpl/test/wallet/batchSigner.test.ts new file mode 100644 index 0000000000..c5428ca9d6 --- /dev/null +++ b/packages/xrpl/test/wallet/batchSigner.test.ts @@ -0,0 +1,372 @@ +import { assert } from 'chai' + +import { + Batch, + decode, + ECDSA, + encode, + SubmittableTransaction, + ValidationError, + Wallet, +} from '../../src' +import { BatchFlags, BatchSigner } from '../../src/models/transactions/batch' +import { + combineBatchSigners, + signMultiBatch, +} from '../../src/Wallet/batchSigner' + +// rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK +const secpWallet = Wallet.fromSeed('spkcsko6Ag3RbCSVXV2FJ8Pd4Zac1', { + algorithm: ECDSA.secp256k1, +}) + +// rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7 +const edWallet = Wallet.fromSeed('spkcsko6Ag3RbCSVXV2FJ8Pd4Zac1', { + algorithm: ECDSA.ed25519, +}) + +// rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp +const submitWallet = Wallet.fromSeed('sEd7HmQFsoyj5TAm6d98gytM9LJA1MF', { + algorithm: ECDSA.ed25519, +}) + +// rwRNeznwHzdfYeKWpevYmax2NSDioyeEtT +const regkeyWallet = Wallet.fromSeed('sEdStM1pngFcLQqVfH3RQcg2Qr6ov9e', { + algorithm: ECDSA.ed25519, +}) +const otherWallet = Wallet.generate() + +const nonBatchTx = { + TransactionType: 'Payment', + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + Destination: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '1000', +} + +describe('Wallet batch operations', function () { + describe('signMultiBatch', function () { + let transaction: Batch + + beforeEach(() => { + transaction = { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Flags: 1, + RawTransactions: [ + { + RawTransaction: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + Flags: 0x40000000, + Amount: '5000000', + Destination: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Fee: '0', + Sequence: 215, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + { + RawTransaction: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Flags: 0x40000000, + Amount: '1000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Sequence: 470, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + ], + TransactionType: 'Batch', + } + }) + it('succeeds with secp256k1 seed', function () { + signMultiBatch(secpWallet, transaction) + const expected = [ + { + BatchSigner: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + SigningPubKey: + '02691AC5AE1C4C333AE5DF8A93BDC495F0EEBFC6DB0DA7EB6EF808F3AFC006E3FE', + TxnSignature: + '304402207E8238D3D2B24B98BA925D69DDAFA3E7D07F85C8ABF1C040B3D1BEBE2C36E92B02200C122F7F3F86AB8FF89207539CAFB4613D665FF336796F99283ED94C66FB3094', + }, + }, + ] + assert.property(transaction, 'BatchSigners') + assert.strictEqual( + JSON.stringify(transaction.BatchSigners), + JSON.stringify(expected), + ) + }) + + it('succeeds with ed25519 seed', function () { + signMultiBatch(edWallet, transaction) + const expected = [ + { + BatchSigner: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + SigningPubKey: + 'ED3CC3D14FD80C213BC92A98AFE13A405A030F845EDCFD5E395286A6E9E62BA638', + TxnSignature: + '744FF09C11399F3AC1484F909A92F2D836EA979CB7655BC8F6BC3793F18892F92A16FE41C60EDCD6C2B757FF85D179F1589824ECA397EEA208B94C9D108CDF0A', + }, + }, + ] + assert.property(transaction, 'BatchSigners') + assert.strictEqual( + JSON.stringify(transaction.BatchSigners), + JSON.stringify(expected), + ) + }) + + it('succeeds with a different account', function () { + signMultiBatch(regkeyWallet, transaction, { + batchAccount: edWallet.address, + }) + const expected = [ + { + BatchSigner: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + SigningPubKey: + 'ED37D3F048B7F1E680B0A97F70C7843160B9F25D6398D07E68B9A2C83AA8E1B156', + TxnSignature: + 'E53E2821CE46C98638E46CA0E6DB712CE45CEC45A697830A5028873D2BA51E1FA008F20526AC16B609401E2F1F8938AE60603223BC9D82A0221CFA5E58C90807', + }, + }, + ] + assert.property(transaction, 'BatchSigners') + assert.strictEqual( + JSON.stringify(transaction.BatchSigners), + JSON.stringify(expected), + ) + }) + + it('succeeds with multisign', function () { + signMultiBatch(regkeyWallet, transaction, { + batchAccount: edWallet.address, + multisign: true, + }) + const expected = [ + { + BatchSigner: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + Signers: [ + { + Signer: { + Account: 'rwRNeznwHzdfYeKWpevYmax2NSDioyeEtT', + SigningPubKey: + 'ED37D3F048B7F1E680B0A97F70C7843160B9F25D6398D07E68B9A2C83AA8E1B156', + TxnSignature: + 'E53E2821CE46C98638E46CA0E6DB712CE45CEC45A697830A5028873D2BA51E1FA008F20526AC16B609401E2F1F8938AE60603223BC9D82A0221CFA5E58C90807', + }, + }, + ], + }, + }, + ] + assert.property(transaction, 'BatchSigners') + assert.strictEqual( + JSON.stringify(transaction.BatchSigners), + JSON.stringify(expected), + ) + }) + + it('succeeds with multisign + regular key', function () { + signMultiBatch(regkeyWallet, transaction, { + batchAccount: edWallet.address, + multisign: submitWallet.address, + }) + const expected = [ + { + BatchSigner: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + Signers: [ + { + Signer: { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + SigningPubKey: + 'ED37D3F048B7F1E680B0A97F70C7843160B9F25D6398D07E68B9A2C83AA8E1B156', + TxnSignature: + 'E53E2821CE46C98638E46CA0E6DB712CE45CEC45A697830A5028873D2BA51E1FA008F20526AC16B609401E2F1F8938AE60603223BC9D82A0221CFA5E58C90807', + }, + }, + ], + }, + }, + ] + assert.property(transaction, 'BatchSigners') + assert.strictEqual( + JSON.stringify(transaction.BatchSigners), + JSON.stringify(expected), + ) + }) + + it('fails with not-included account', function () { + assert.throws( + () => signMultiBatch(otherWallet, transaction), + ValidationError, + 'Must be signing for an address submitting a transaction in the Batch.', + ) + }) + + it('fails with non-Batch transaction', function () { + assert.throws( + // @ts-expect-error - needed for JS/codecov + () => signMultiBatch(edWallet, nonBatchTx), + ValidationError, + 'Must be a Batch transaction.', + ) + }) + }) + + describe('combineBatchSigners', function () { + let tx1: Batch + let tx2: Batch + const originalTx: Batch = { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Flags: BatchFlags.tfAllOrNothing, + LastLedgerSequence: 14973, + NetworkID: 21336, + RawTransactions: [ + { + RawTransaction: { + Account: 'rJy554HmWFFJQGnRfZuoo8nV97XSMq77h7', + Amount: '5000000', + Destination: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Fee: '0', + Flags: 0x40000000, + Sequence: 215, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + { + RawTransaction: { + Account: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Amount: '1000000', + Destination: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Fee: '0', + Flags: 0x40000000, + Sequence: 470, + SigningPubKey: '', + TransactionType: 'Payment', + }, + }, + ], + Sequence: 215, + TransactionType: 'Batch', + } + let expectedValid: BatchSigner[] + + beforeEach(() => { + tx1 = { ...originalTx } + tx2 = { ...originalTx } + signMultiBatch(edWallet, tx1) + signMultiBatch(secpWallet, tx2) + expectedValid = (tx1.BatchSigners ?? []).concat(tx2.BatchSigners ?? []) + }) + + it('combines valid transactions', function () { + const result = combineBatchSigners([tx1, tx2]) + assert.deepEqual(decode(result).BatchSigners, expectedValid) + }) + + it('combines valid serialized transactions', function () { + const result = combineBatchSigners([encode(tx1), encode(tx2)]) + assert.deepEqual(decode(result).BatchSigners, expectedValid) + }) + + it('sorts the signers', function () { + const result = combineBatchSigners([tx2, tx1]) + assert.deepEqual(decode(result).BatchSigners, expectedValid) + }) + + it('removes signer for Batch submitter', function () { + // add a third inner transaction from the transaction submitter + const rawTx3: { RawTransaction: SubmittableTransaction } = { + RawTransaction: { + Account: 'rJCxK2hX9tDMzbnn3cg1GU2g19Kfmhzxkp', + Amount: '1000000', + Destination: 'rPMh7Pi9ct699iZUTWaytJUoHcJ7cgyziK', + Fee: '0', + Flags: 0x40000000, + Sequence: 470, + SigningPubKey: '', + TransactionType: 'Payment', + }, + } + const rawTxs = originalTx.RawTransactions.concat(rawTx3) + + // set up all the transactions again (repeat what's done in `beforeEach`) + const newTx = { + ...originalTx, + RawTransactions: rawTxs, + } + tx1 = { ...newTx } + tx2 = { ...newTx } + const tx3 = { ...newTx } + signMultiBatch(edWallet, tx1) + signMultiBatch(secpWallet, tx2) + signMultiBatch(submitWallet, tx3) + + // run test + const result = combineBatchSigners([tx1, tx2, tx3]) + const expected = (tx1.BatchSigners ?? []).concat(tx2.BatchSigners ?? []) + assert.deepEqual(decode(result).BatchSigners, expected) + }) + + it('fails with no transactions provided', function () { + assert.throws( + () => combineBatchSigners([]), + ValidationError, + 'There are 0 transactions to combine.', + ) + }) + + it('fails with non-Batch transaction provided', function () { + assert.throws( + // @ts-expect-error - needed for JS/codecov + () => combineBatchSigners([tx1, tx2, nonBatchTx]), + ValidationError, + 'TransactionType must be `Batch`.', + ) + }) + + it('fails with no BatchSigners provided in a transaction', function () { + const badTx1 = { ...tx1 } + delete badTx1.BatchSigners + assert.throws( + () => combineBatchSigners([badTx1, tx2]), + ValidationError, + 'For combining Batch transaction signatures, all transactions must include a BatchSigners field containing an array of signatures.', + ) + + badTx1.BatchSigners = [] + assert.throws( + () => combineBatchSigners([badTx1, tx2]), + ValidationError, + 'For combining Batch transaction signatures, all transactions must include a BatchSigners field containing an array of signatures.', + ) + }) + + it('fails with signed inner transaction', function () { + assert.throws( + () => combineBatchSigners([secpWallet.sign(tx1).tx_blob, tx2]), + ValidationError, + 'Batch transaction must be unsigned.', + ) + }) + + it('fails with different flags signed', function () { + const badTx2 = { ...tx2 } + badTx2.Flags = BatchFlags.tfIndependent + signMultiBatch(secpWallet, tx2) + assert.throws( + () => combineBatchSigners([tx1, badTx2]), + ValidationError, + 'Flags and transaction hashes are not the same for all provided transactions.', + ) + }) + }) +}) diff --git a/packages/xrpl/test/wallet/counterpartySigner.test.ts b/packages/xrpl/test/wallet/counterpartySigner.test.ts new file mode 100644 index 0000000000..8f233532d2 --- /dev/null +++ b/packages/xrpl/test/wallet/counterpartySigner.test.ts @@ -0,0 +1,171 @@ +// Add one test for single signing and one test for multi-signing + +import { assert } from 'chai' + +import { LoanSet, Wallet } from '../../src' +import { + combineLoanSetCounterpartySigners, + signLoanSetByCounterparty, +} from '../../src/Wallet/counterpartySigner' + +describe('counterpartySigner', function () { + it('single sign', function () { + const borrowerWallet = Wallet.fromSeed('sEd7FqVHfNZ2UdGAwjssxPev2ujwJoT') + const singedLoanSet = { + TransactionType: 'LoanSet', + Flags: 0, + Sequence: 1702, + LastLedgerSequence: 1725, + PaymentTotal: 1, + LoanBrokerID: + '033D9B59DBDC4F48FB6708892E7DB0E8FBF9710C3A181B99D9FAF7B9C82EF077', + Fee: '480', + Account: 'rpfK3KEEBwXjUXKQnvAs1SbQhVKu7CSkY1', + Counterparty: 'rp7Tj3Uu1RDrDd1tusge3bVBhUjNvzD19Y', + PrincipalRequested: '5000000', + } + + const expectedLoanSet = { + TransactionType: 'LoanSet', + Flags: 0, + Sequence: 1702, + LastLedgerSequence: 1725, + PaymentTotal: 1, + LoanBrokerID: + '033D9B59DBDC4F48FB6708892E7DB0E8FBF9710C3A181B99D9FAF7B9C82EF077', + Fee: '480', + SigningPubKey: + 'EDFF8D8C5AC309EAA4F3A0C6D2AAF9A9DFA0724063398110365D4631971F604C4C', + TxnSignature: + '1AF5B3118F5F292EDCEAB34A4180792240AF86258C6BC8340D7523D396424F63B4BD4EAF20DE7C5AA9B472DB86AC36E956DAD02288638E59D90C7A0F6BF6E802', + Account: 'rpfK3KEEBwXjUXKQnvAs1SbQhVKu7CSkY1', + Counterparty: 'rp7Tj3Uu1RDrDd1tusge3bVBhUjNvzD19Y', + PrincipalRequested: '5000000', + CounterpartySignature: { + SigningPubKey: + 'ED1139D765C2C8F175153EE663D2CBE574685D5FCF61A6A33DF7AC72C9903D3F94', + TxnSignature: + '440B839B41834A9292B23A8DB547EA34DC89FC8313056C96812384A860848381C4F11867F1092594D3E263DB2433CEB07E2AD312944FF68F2E2EF995ABAE9C05', + }, + } + + assert.throws(() => { + signLoanSetByCounterparty(borrowerWallet, singedLoanSet as LoanSet) + }, 'Transaction must be first signed by first party.') + + assert.throws(() => { + signLoanSetByCounterparty(borrowerWallet, { + ...singedLoanSet, + TransactionType: 'Payment', + } as unknown as LoanSet) + }, 'Transaction must be a LoanSet transaction.') + + assert.throws(() => { + signLoanSetByCounterparty(borrowerWallet, { + ...singedLoanSet, + CounterpartySignature: { + SigningPubKey: '', + TxnSignature: '', + }, + } as LoanSet) + }, 'Transaction is already signed by the counterparty.') + + const { tx: borrowerSignedTx } = signLoanSetByCounterparty(borrowerWallet, { + ...singedLoanSet, + TxnSignature: + '1AF5B3118F5F292EDCEAB34A4180792240AF86258C6BC8340D7523D396424F63B4BD4EAF20DE7C5AA9B472DB86AC36E956DAD02288638E59D90C7A0F6BF6E802', + SigningPubKey: + 'EDFF8D8C5AC309EAA4F3A0C6D2AAF9A9DFA0724063398110365D4631971F604C4C', + } as LoanSet) + + assert.deepEqual(borrowerSignedTx, expectedLoanSet as LoanSet) + }) + + it('multi sign', function () { + const signerWallet1 = Wallet.fromSeed('sEdSyBUScyy9msTU36wdR68XkskQky5') + const signerWallet2 = Wallet.fromSeed('sEdT8LubWzQv3VAx1JQqctv78N28zLA') + + const singedLoanSet = { + TransactionType: 'LoanSet', + Flags: 0, + Sequence: 1807, + LastLedgerSequence: 1838, + PaymentTotal: 1, + InterestRate: 0, + LoanBrokerID: + 'D1902EFBFF8C6536322D48B9F3B974AEC29AC826CF6BEA6218C886581A712AFE', + Fee: '720', + SigningPubKey: + 'EDE7E70883C11FFDEB28A1FEDA20C89352E3FCFEAABFF9EF890A08664E5687ECD2', + TxnSignature: + '0438178AF327FC54C42638A4EDB0EB9A701B2D6192388BE8A4C7A61DD82EA4510D10C0CADAD3D8A7EBC7B08C3F2A50F12F686B47ED2562EE6792434322E94B0E', + Account: 'rpmFCkiUFiufA3HdLagJCWGbzByaQLJKKJ', + Counterparty: 'rQnFUSfgnLNA2KzvKUjRX69tbv7WX76UXW', + PrincipalRequested: '100000', + } + + const expectedLoanSet = { + TransactionType: 'LoanSet', + Flags: 0, + Sequence: 1807, + LastLedgerSequence: 1838, + PaymentTotal: 1, + InterestRate: 0, + LoanBrokerID: + 'D1902EFBFF8C6536322D48B9F3B974AEC29AC826CF6BEA6218C886581A712AFE', + Fee: '720', + SigningPubKey: + 'EDE7E70883C11FFDEB28A1FEDA20C89352E3FCFEAABFF9EF890A08664E5687ECD2', + TxnSignature: + '0438178AF327FC54C42638A4EDB0EB9A701B2D6192388BE8A4C7A61DD82EA4510D10C0CADAD3D8A7EBC7B08C3F2A50F12F686B47ED2562EE6792434322E94B0E', + Account: 'rpmFCkiUFiufA3HdLagJCWGbzByaQLJKKJ', + Counterparty: 'rQnFUSfgnLNA2KzvKUjRX69tbv7WX76UXW', + PrincipalRequested: '100000', + CounterpartySignature: { + Signers: [ + { + Signer: { + SigningPubKey: + 'EDD184F5FE58EC1375AB1CF17A3C5A12A8DEE89DD5228772D69E28EE37438FE59E', + TxnSignature: + 'C3A989FFA24CE21AE9E1734653387B34044A82B13F34B7B1175CB20118F9EF904ABEA691E4D3EFFD1EBF63C3B50F29AA89B68AF4A70CF74601CD326772D1680E', + Account: 'rBJMcbqnAaxcUeEPF7WiaoHCtFiTmga7un', + }, + }, + { + Signer: { + SigningPubKey: + 'ED121AF03981F6496E47854955F65FC8763232D74EBF73877889514137BB72720A', + TxnSignature: + '3A3D91798FCF56289BBF53A97D0CB07CFB5050CFBA05451A1C9A3A9E370AE81DCC3134E6CC35579ACA8937F15DF358DAB728054AC17C3858177C6947C1E21806', + Account: 'rKQhhSnRXJyqDq5BFtWG2E6zxAdq6wDyQC', + }, + }, + ], + }, + } + + const { tx: signer1SignedTx } = signLoanSetByCounterparty( + signerWallet1, + singedLoanSet as LoanSet, + { multisign: true }, + ) + + const { tx: signer2SignedTx } = signLoanSetByCounterparty( + signerWallet2, + singedLoanSet as LoanSet, + { multisign: true }, + ) + + assert.throws(() => { + combineLoanSetCounterpartySigners([]) + }, 'There are 0 transactions to combine.') + + const { tx: combinedSignedTx } = combineLoanSetCounterpartySigners([ + signer1SignedTx, + signer2SignedTx, + ]) + + assert.deepEqual(combinedSignedTx, expectedLoanSet as LoanSet) + }) +}) diff --git a/packages/xrpl/test/wallet/fundWallet.test.ts b/packages/xrpl/test/wallet/fundWallet.test.ts index 3e061faad8..777c60d13e 100644 --- a/packages/xrpl/test/wallet/fundWallet.test.ts +++ b/packages/xrpl/test/wallet/fundWallet.test.ts @@ -2,9 +2,9 @@ import { assert } from 'chai' import { FaucetNetwork, - FaucetNetworkPaths, + faucetNetworkPaths, getFaucetHost, - getDefaultFaucetPath, + getFaucetPath, } from '../../src/Wallet/defaultFaucets' import { setupClient, @@ -22,35 +22,24 @@ describe('Get Faucet host ', function () { it('returns the Devnet host', function () { const expectedFaucet = FaucetNetwork.Devnet - // @ts-expect-error Intentionally modifying private data for test - testContext.client.connection.url = FaucetNetwork.Devnet + testContext.client.networkID = 2 assert.strictEqual(getFaucetHost(testContext.client), expectedFaucet) }) it('returns the Testnet host', function () { const expectedFaucet = FaucetNetwork.Testnet - // @ts-expect-error Intentionally modifying private data for test - testContext.client.connection.url = FaucetNetwork.Testnet - - assert.strictEqual(getFaucetHost(testContext.client), expectedFaucet) - }) - - it('returns the Testnet host with the XRPL Labs server', function () { - const expectedFaucet = FaucetNetwork.Testnet - // @ts-expect-error Intentionally modifying private data for test - testContext.client.connection.url = 'wss://testnet.xrpl-labs.com' + testContext.client.networkID = 1 assert.strictEqual(getFaucetHost(testContext.client), expectedFaucet) }) it('returns the correct faucetPath for Devnet host', function () { - const expectedFaucetPath = FaucetNetworkPaths[FaucetNetwork.Devnet] - // @ts-expect-error Intentionally modifying private data for test - testContext.client.connection.url = FaucetNetwork.Devnet + const expectedFaucetPath = faucetNetworkPaths[FaucetNetwork.Devnet] + testContext.client.networkID = 2 assert.strictEqual( - getDefaultFaucetPath(getFaucetHost(testContext.client)), + getFaucetPath(getFaucetHost(testContext.client)), expectedFaucetPath, ) }) @@ -58,11 +47,16 @@ describe('Get Faucet host ', function () { it('returns the correct faucetPath for undefined host', function () { const expectedFaucetPath = '/accounts' - assert.strictEqual(getDefaultFaucetPath(undefined), expectedFaucetPath) + assert.strictEqual(getFaucetPath(undefined), expectedFaucetPath) + }) + + it('throws if connected to mainnet', function () { + testContext.client.networkID = 0 + assert.throws(() => getFaucetHost(testContext.client)) }) it('throws if not connected to a known faucet host', function () { - // Info: setupClient.setup creates a connection to 'localhost' + testContext.client.networkID = 300 assert.throws(() => getFaucetHost(testContext.client)) }) }) diff --git a/packages/xrpl/test/wallet/index.test.ts b/packages/xrpl/test/wallet/index.test.ts index bbb454108f..cf564173ea 100644 --- a/packages/xrpl/test/wallet/index.test.ts +++ b/packages/xrpl/test/wallet/index.test.ts @@ -513,7 +513,7 @@ describe('Wallet', function () { } assert.throws(() => { Wallet.fromSeed(secret).sign(lowercaseMemoTx) - }, /MemoType field must be a hex value/u) + }, /BaseTransaction: invalid Memos/u) }) it('sign throws when MemoData is not a hex value', async function () { @@ -539,7 +539,7 @@ describe('Wallet', function () { } assert.throws(() => { Wallet.fromSeed(secret).sign(lowercaseMemoTx) - }, /MemoData field must be a hex value/u) + }, /BaseTransaction: invalid Memos/u) }) it('sign throws when MemoFormat is not a hex value', async function () { @@ -565,7 +565,7 @@ describe('Wallet', function () { } assert.throws(() => { Wallet.fromSeed(secret).sign(lowercaseMemoTx) - }, /MemoFormat field must be a hex value/u) + }, /BaseTransaction: invalid Memos/u) }) it('sign with EscrowFinish', async function () { @@ -598,6 +598,17 @@ describe('Wallet', function () { }) }) + it('sign with regular address for multisignAddress', async function () { + const signature = wallet.sign( + REQUEST_FIXTURES.signAs as Transaction, + wallet.address, + ) + assert.deepEqual(signature, { + tx_blob: RESPONSE_FIXTURES.signAs.signedTransaction, + hash: 'D8CF5FC93CFE5E131A34599AFB7CE186A5B8D1B9F069E35F4634AD3B27837E35', + }) + }) + it('sign with X Address and tag for multisignAddress', async function () { const signature = wallet.sign( REQUEST_FIXTURES.signAs as Transaction, diff --git a/packages/xrpl/test/webpack.config.js b/packages/xrpl/test/webpack.config.js index 624550acd0..0dea7c72fc 100644 --- a/packages/xrpl/test/webpack.config.js +++ b/packages/xrpl/test/webpack.config.js @@ -1,5 +1,5 @@ const { merge } = require('webpack-merge') -const { webpackForTest } = require('../../../weback.test.config') +const { webpackForTest } = require('../../../webpack.test.config') module.exports = merge( require('../webpack.base.config'), diff --git a/packages/xrpl/tools/generateModels.js b/packages/xrpl/tools/generateModels.js index dca58317dd..0dd4ea67d1 100644 --- a/packages/xrpl/tools/generateModels.js +++ b/packages/xrpl/tools/generateModels.js @@ -2,51 +2,74 @@ * A script that generates models and model unit tests. * To run it, clone the rippled branch with the source code and run this script against that repo. */ -const fs = require('fs') +const fs = require('fs/promises') const path = require('path') const createValidate = require('./createValidate') const createValidateTests = require('./createValidateTests') -function readFile(filename) { - return fs.readFileSync(filename, 'utf-8') +async function readFileFromGitHub(repo, filename) { + if (!repo.includes('tree')) { + repo += '/tree/HEAD' + } + let url = repo.replace('github.com', 'raw.githubusercontent.com') + url = url.replace('tree/', '') + url += '/' + filename + + if (!url.startsWith('http')) { + url = 'https://' + url + } + + try { + const response = await fetch(url) + if (!response.ok) { + throw new Error(`${response.status} ${response.statusText}`) + } + return await response.text() + } catch (e) { + console.error(`Error reading ${url}: ${e.message}`) + process.exit(1) + } } -let jsTransactionFile +async function readFile(folder, filename) { + const filePath = path.join(folder, filename) + try { + return await fs.readFile(filePath, 'utf-8') + } catch (e) { + throw new Error(`File not found: ${filePath}, ${e.message}`) + } +} -function processRippledSource(folder) { - const sfieldCpp = readFile( - path.join(folder, 'src/libxrpl/protocol/SField.cpp'), +async function processRippledSource(folder) { + const folderUrl = new URL(folder) + const read = folderUrl.host === 'github.com' ? readFileFromGitHub : readFile + const sfieldMacroFile = await read( + folder, + 'include/xrpl/protocol/detail/sfields.macro', ) - const sfieldHits = sfieldCpp.match( - /^ *CONSTRUCT_[^\_]+_SFIELD *\( *[^,\n]*,[ \n]*"([^\"\n ]+)"[ \n]*,[ \n]*([^, \n]+)[ \n]*,[ \n]*([0-9]+)(,.*?(notSigning))?/gm, + const sfieldHits = sfieldMacroFile.matchAll( + /^ *[A-Z]*TYPED_SFIELD *\( *sf([^,\n]*),[ \n]*([^, \n]+)[ \n]*,[ \n]*([0-9]+)(,.*?(notSigning))?/gm, ) const sfields = {} for (const hit of sfieldHits) { - const matches = hit.match( - /^ *CONSTRUCT_[^\_]+_SFIELD *\( *[^,\n]*,[ \n]*"([^\"\n ]+)"[ \n]*,[ \n]*([^, \n]+)[ \n]*,[ \n]*([0-9]+)(,.*?(notSigning))?/, - ) - sfields[matches[1]] = matches.slice(2) + sfields[hit[1]] = hit[2] } - const txFormatsCpp = readFile( - path.join(folder, 'src/libxrpl/protocol/TxFormats.cpp'), + const transactionsMacroFile = await read( + folder, + 'include/xrpl/protocol/detail/transactions.macro', ) - const txFormatsHits = txFormatsCpp.match( - /^ *add\(jss::([^\"\n, ]+),[ \n]*tt[A-Z_]+,[ \n]*{[ \n]*(({sf[A-Za-z0-9]+, soe(OPTIONAL|REQUIRED|DEFAULT)},[ \n]+)*)},[ \n]*[pseudocC]+ommonFields\);/gm, + const txFormatsHits = transactionsMacroFile.matchAll( + /^ *TRANSACTION\(tt[A-Z_]+ *,* [0-9]+ *, *([A-Za-z]+)[ \n]*,[ \n]*Delegation::[A-Za-z]+[ \n]*,[ \n]*\({[ \n]*(({sf[A-Za-z0-9]+, soe(OPTIONAL|REQUIRED|DEFAULT)(, soeMPT(None|Supported|NotSupported))?},[ \n]+)*)}\)\)$/gm, ) const txFormats = {} for (const hit of txFormatsHits) { - const matches = hit.match( - /^ *add\(jss::([^\"\n, ]+),[ \n]*tt[A-Z_]+,[ \n]*{[ \n]*(({sf[A-Za-z0-9]+, soe(OPTIONAL|REQUIRED|DEFAULT)},[ \n]+)*)},[ \n]*[pseudocC]+ommonFields\);/, - ) - txFormats[matches[1]] = formatTxFormat(matches[2]) + txFormats[hit[1]] = formatTxFormat(hit[2]) } - jsTransactionFile = readFile( - path.join( - path.dirname(__filename), - '../src/models/transactions/transaction.ts', - ), + const jsTransactionFile = await readFile( + path.dirname(__filename), + '../src/models/transactions/transaction.ts', ) const transactionMatch = jsTransactionFile.match( /export type SubmittableTransaction =([| \nA-Za-z]+)\n\/\*\*/, @@ -66,7 +89,7 @@ function processRippledSource(folder) { } } - return [txsToAdd, txFormats, sfields, transactionMatch] + return [txsToAdd, txFormats, sfields, transactionMatch, jsTransactionFile] } function formatTxFormat(rawTxFormat) { @@ -98,7 +121,7 @@ const typeMap = { const allCommonImports = ['Amount', 'Currency', 'Path', 'XChainBridge'] const additionalValidationImports = ['string', 'number'] -function updateTransactionFile(transactionMatch, tx) { +async function updateTransactionFile(transactionMatch, jsTransactionFile, tx) { const transactionMatchSplit = transactionMatch.split('\n | ') const firstLine = transactionMatchSplit[0] const allTransactions = transactionMatchSplit.slice(1) @@ -128,7 +151,7 @@ import { ) const validationMatch = newJsTxFile.match( - /switch \(tx.TransactionType\) {\n([ \nA-Za-z':()]+)default/, + /switch \(tx.TransactionType\) {\n([ \nA-Za-z':()\/@\-\.<>=\{\},]+)default/, )[1] const caseValidations = validationMatch.split('\n\n') caseValidations.push( @@ -140,7 +163,7 @@ import { caseValidations.join('\n\n') + '\n\n ', ) - fs.writeFileSync( + await fs.writeFile( path.join( path.dirname(__filename), '../src/models/transactions/transaction.ts', @@ -152,30 +175,32 @@ import { jsTransactionFile = newJsTxFile } -function updateIndexFile(tx) { - const filename = path.join( +async function updateIndexFile(tx) { + let indexFile = await readFile( path.dirname(__filename), '../src/models/transactions/index.ts', ) - let indexFile = readFile(filename) indexFile = indexFile.replace( `} from './XChainModifyBridge'`, `} from './XChainModifyBridge' export { ${tx} } from './${tx}'`, ) - fs.writeFileSync(filename, indexFile) + await fs.writeFile( + path.join(path.dirname(__filename), '../src/models/transactions/index.ts'), + indexFile, + ) } function generateParamLine(sfields, param, isRequired) { const paramName = param.slice(2) - const paramType = sfields[paramName][0] + const paramType = sfields[paramName] ?? 'any' const paramTypeOutput = typeMap[paramType] return ` ${paramName}${isRequired ? '' : '?'}: ${paramTypeOutput}\n` } async function main(folder) { - const [txsToAdd, txFormats, sfields, transactionMatch] = - processRippledSource(folder) + const [txsToAdd, txFormats, sfields, transactionMatch, jsTransactionFile] = + await processRippledSource(folder) txsToAdd.forEach(async (tx) => { const txFormat = txFormats[tx] const paramLines = txFormat @@ -230,7 +255,7 @@ ${validationImportLine}` imported_models = imported_models.replace('\n\n\n\n', '\n\n') imported_models = imported_models.replace('\n\n\n', '\n\n') model = model.replace('\n\n\n\n', '\n\n') - fs.writeFileSync( + await fs.writeFile( path.join( path.dirname(__filename), `../src/models/transactions/${tx}.ts`, @@ -239,7 +264,7 @@ ${validationImportLine}` ) const validate = await createValidate(tx) - fs.appendFileSync( + await fs.appendFile( path.join( path.dirname(__filename), `../src/models/transactions/${tx}.ts`, @@ -249,14 +274,14 @@ ${validationImportLine}` const validateTests = createValidateTests(tx) if (validateTests !== '') - fs.writeFileSync( + await fs.writeFile( path.join(path.dirname(__filename), `../test/models/${tx}.test.ts`), validateTests, ) - updateTransactionFile(transactionMatch, tx) + await updateTransactionFile(transactionMatch, jsTransactionFile, tx) - updateIndexFile(tx) + await updateIndexFile(tx) console.log(`Added ${tx}`) }) diff --git a/packages/xrpl/tsconfig.docs.json b/packages/xrpl/tsconfig.docs.json index 3958554c4f..5a5711fce4 100644 --- a/packages/xrpl/tsconfig.docs.json +++ b/packages/xrpl/tsconfig.docs.json @@ -4,10 +4,10 @@ "jsx": "react", "jsxFactory": "JSX.createElement", "jsxFragmentFactory": "JSX.Fragment", - "lib": ["es2015", "dom"], - "module": "commonjs", - "esModuleInterop": true, - "target": "ES2015" + "lib": ["es2021"], + "module": "Node16", + "target": "ES2021", + "skipLibCheck": true }, - "include": ["./typedoc.tsx"] + "include": ["./typedoc.mts"] } diff --git a/packages/xrpl/tsconfig.eslint.json b/packages/xrpl/tsconfig.eslint.json index 70b9b96580..effe018622 100644 --- a/packages/xrpl/tsconfig.eslint.json +++ b/packages/xrpl/tsconfig.eslint.json @@ -5,8 +5,6 @@ "./test/**/*.ts", "./test/**/*.json", "./src/**/*.json", - "./snippets/src/**/*.ts", - ".eslintrc.js", ], "exclude": ["./tools/*.js"] } diff --git a/packages/xrpl/typedoc.json b/packages/xrpl/typedoc.json index 20a856c098..9b89a5716b 100644 --- a/packages/xrpl/typedoc.json +++ b/packages/xrpl/typedoc.json @@ -16,5 +16,5 @@ ], "categorizeByGroup": false, "readme": "../../README.md", - "plugin": ["./dist/docs/typedoc.js"] + "plugin": ["./dist/docs/typedoc.mjs"] } diff --git a/packages/xrpl/typedoc.mts b/packages/xrpl/typedoc.mts new file mode 100644 index 0000000000..e22f4a57bc --- /dev/null +++ b/packages/xrpl/typedoc.mts @@ -0,0 +1,49 @@ +import { Application, JSX } from 'typedoc' + +/** + * Google Tag Manager container ID used for analytics + */ +const GTM_CONTAINER_ID = 'GTM-M7HKJJ3' + +const GTMScript = ` +(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': +new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], +j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= +'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); +})(window,document,'script','dataLayer','${GTM_CONTAINER_ID}'); +` + +/** + * TypeDoc plugin that integrates Google Tag Manager and Osano script + * into the generated documentation. + * + * @param app - The TypeDoc application instance + */ +export function load(app: Application) { + app.renderer.hooks.on('head.begin', () => + JSX.createElement( + JSX.Fragment, + null, + JSX.createElement('script', { + src: 'https://cmp.osano.com/AzyjT6TIZMlgyLyy8/ad2447d5-f101-40df-b92e-d6452b5ecac0/osano.js', + }), + JSX.createElement( + 'script', + null, + JSX.createElement(JSX.Raw, { html: GTMScript }), + ), + ), + ) + app.renderer.hooks.on('body.begin', () => + JSX.createElement( + 'noscript', + null, + JSX.createElement('iframe', { + src: `https://www.googletagmanager.com/ns.html?id=${GTM_CONTAINER_ID}`, + height: 0, + width: 0, + style: 'display:none;visibility:hidden', + }), + ), + ) +} diff --git a/packages/xrpl/typedoc.tsx b/packages/xrpl/typedoc.tsx deleted file mode 100644 index 015e7aa8cd..0000000000 --- a/packages/xrpl/typedoc.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import React from 'react' -import { Application, JSX } from 'typedoc' - -const GTMScript = ` -(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': -new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], -j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= -'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); -})(window,document,'script','dataLayer','GTM-M7HKJJ3'); -` - -export function load(app: Application) { - app.renderer.hooks.on('head.begin', () => ( - <> - - - - )) - - app.renderer.hooks.on('body.begin', () => ( - - )) -} diff --git a/webpack.config.js b/webpack.config.js index 63bb0dbaef..13a05b2f33 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -48,7 +48,7 @@ module.exports = { const localConfig = merge(config, { mode: "production", output: { - filename: `${filename}-latest.min.js`, + filename: `${filename}-latest-min.js`, }, }); @@ -57,7 +57,7 @@ module.exports = { new BundleAnalyzerPlugin({ analyzerPort: `auto`, analyzerMode: "static", - }), + }) ); } return localConfig; diff --git a/weback.test.config.js b/webpack.test.config.js similarity index 100% rename from weback.test.config.js rename to webpack.test.config.js