diff --git a/.eslintignore b/.eslintignore index c684d095051..aec808745ea 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,3 +1,6 @@ # also ignored in packages/cosmic-proto/.eslintignore, but IDE's pick up the root config -packages/cosmic-proto/dist +packages/cosmic-proto/node_modules/ +packages/cosmic-proto/coverage/ +packages/cosmic-proto/dist/ +packages/cosmic-proto/proto/ packages/cosmic-proto/src/codegen/ diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 1711f4831b6..7754fc3e201 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -141,6 +141,9 @@ module.exports = { // CI has a separate format check but keep this warn to maintain that "eslint --fix" prettifies // UNTIL https://github.com/Agoric/agoric-sdk/issues/4339 'prettier/prettier': 'warn', + + // Not a risk with our coding style + 'no-use-before-define': 'off', }, settings: { jsdoc: { @@ -174,8 +177,8 @@ module.exports = { { files: [ 'packages/**/demo/**/*.js', - 'packages/*/test/**/*.js', - 'packages/*/test/**/*.test.js', + 'packages/*/test/**/*.*s', + 'packages/*/test/**/*.test.*s', 'packages/wallet/api/test/**/*.js', ], rules: { @@ -185,12 +188,23 @@ module.exports = { // NOTE: This rule is enabled for the repository in general. We turn it // off for test code for now. '@jessie.js/safe-await-separator': 'off', + + // Like `'ava/no-only-test`, but works with @endo/ses-ava + 'no-restricted-properties': [ + 'error', + { + object: 'test', + property: 'only', + message: + 'Do not commit .only tests - they prevent other tests from running', + }, + ], }, }, { // These tests use EV() instead of E(), which are easy to confuse. // Help by erroring when E() packages are imported. - files: ['packages/boot/test/**/*.test.*'], + files: ['packages/boot/test/**/*.test.*s'], rules: { 'no-restricted-imports': [ 'error', @@ -226,8 +240,6 @@ module.exports = { { files: ['*.d.ts'], rules: { - // Irrelevant in a typedef - 'no-use-before-define': 'off', // Linter confuses the type declaration with value declaration 'no-redeclare': 'off', }, diff --git a/.github/PULL_REQUEST_TEMPLATE.md b/.github/PULL_REQUEST_TEMPLATE.md index 40cda1dc8a9..dc1ce3900b3 100644 --- a/.github/PULL_REQUEST_TEMPLATE.md +++ b/.github/PULL_REQUEST_TEMPLATE.md @@ -32,4 +32,4 @@ refs: #XXXX ### Upgrade Considerations - + diff --git a/.github/workflows/after-merge.yml b/.github/workflows/after-merge.yml index 1c8747d8cee..ed37c3c2506 100644 --- a/.github/workflows/after-merge.yml +++ b/.github/workflows/after-merge.yml @@ -105,10 +105,8 @@ jobs: with: node-version: ${{ matrix.node-version }} - - name: generate coverage for all tests - run: 'yarn test:c8-all || :' - - name: generate coverage/html reports - run: mkdir -p coverage/tmp && yarn c8 report --reporter=html-spa --reports-dir=coverage/html --temp-directory=coverage/tmp + - name: generate test coverage report + run: ./scripts/ci/generate-test-coverage-report.sh - uses: actions/upload-artifact@v4 with: name: coverage diff --git a/.github/workflows/dump-ci-stats.yml b/.github/workflows/dump-ci-stats.yml index d0ffb31691a..4565e0f6fe3 100644 --- a/.github/workflows/dump-ci-stats.yml +++ b/.github/workflows/dump-ci-stats.yml @@ -21,10 +21,10 @@ jobs: runs-on: ubuntu-latest steps: - name: Checkout Code - uses: actions/checkout@v2 + uses: actions/checkout@v4 - name: Set up Node.js - uses: actions/setup-node@v3 + uses: actions/setup-node@v4 with: node-version: '18' diff --git a/.github/workflows/test-all-packages.yml b/.github/workflows/test-all-packages.yml index ec0b88ac680..e775350bab0 100644 --- a/.github/workflows/test-all-packages.yml +++ b/.github/workflows/test-all-packages.yml @@ -82,7 +82,7 @@ jobs: # We split the package tests into two jobs because type linting # is inefficient and slow https://github.com/typescript-eslint/typescript-eslint/issues/2094 lint-primary: - timeout-minutes: 15 + timeout-minutes: 20 needs: build runs-on: ubuntu-latest steps: @@ -91,22 +91,13 @@ jobs: with: node-version: '18.x' - # first job also does repo-level linting - name: lint repo format run: yarn lint:format - # eslint - - name: yarn lint primary - run: ./scripts/lint-with-types.sh primary - # build the API docs to verify it works - - name: build API docs - run: yarn docs - # build the API docs in markdown for agoric/documentation repo to verify it works - - name: build API docs in markdown - run: yarn docs:markdown-for-agoric-documentation-repo + # eslint and tsc + - run: yarn lint:packages + # A second job for what's not covered in primary lint-rest: - timeout-minutes: 15 - needs: build runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 @@ -117,8 +108,6 @@ jobs: # Check some of a3p-integration in this job that runs on PRs instead of # waiting for the slow integration test that by default only runs in the # master merge check - - name: yarn lint rest of packages/* - run: ./scripts/lint-with-types.sh rest - name: Lint a3p-integration run: yarn install && yarn lint && yarn doctor working-directory: a3p-integration @@ -126,6 +115,13 @@ jobs: run: yarn run build:submissions working-directory: a3p-integration + # Attempt the doc generation to catch build errors before + # landing on master + - name: build API docs + run: yarn docs + - name: build API docs in markdown + run: yarn docs:markdown-for-agoric-documentation-repo + ################## # Fast-running tests run as a group: test-quick: diff --git a/COVERAGE.md b/COVERAGE.md index 59d8019d78d..3dcda91d4ed 100644 --- a/COVERAGE.md +++ b/COVERAGE.md @@ -2,59 +2,36 @@ ## Caveat -Until each module can be migrated to support Node.js's builtin ESM -implementation (`nesm`), the coverage line numbers will be out-of-sync with -reality. - -In addition, we will have to implement source maps in all of our +Lines from bundled code cannot be detected until we implement source maps in all of our source-to-source transforms (such as `@endo/bundle-source`, `@agoric/transform-metering`, and `@agoric/static-module-record`). ## Reports -Coverage reports for the current main branch (whose packages support `nesm`) are +### Whole repo +Coverage reports for the current main branch are published by CI to: https://agoric-sdk-coverage.netlify.app -You can create a report in any package (including the top-level directory): +See `scripts/ci/generate-test-coverage-report.sh` + +## Per package +You can create a report in any package: + +```sh +yarn test:c8 +``` +For more flexibility: ```sh # Get options available for coverage: yarn c8 --help -# Run ava under Node.js coverage and display a summary: -yarn c8 -a ava +# Run a particular test +yarn c8 -a ava test/foo.test.js # Generate a nice, detailed HTML report: yarn c8 report --reporter=html-spa open coverage/html/index.html ``` -## Node.js ESM Support - -With the current `patches/esm+3.2.25.diff`, it is possible to migrate packages -to support both resm (`-r esm`) and nesm (Node.js ESM Support). If an -`agoric-sdk` package has dependencies that support nesm, you can attempt to make -it also support nesm by: - -1. Create `ava-nesm.config.js` removing `"require": ["esm"]`: - -```sh -../../scripts/ava-nesm.cjs > ava-nesm.config.js -``` - -2. Make the following changes to its `package.json` (omitting comments): - -```js -{ - // Enable nesm support. - "type": "module", - "scripts": { - // The following line enables coverage generation from the top. - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js" - } -} -``` - -3. Test that both `yarn test` and `yarn test:c8` run correctly. - ## Planned Implementation Our runtime source transforms can be conditional on the `$NODE_V8_COVERAGE` diff --git a/MAINTAINERS.md b/MAINTAINERS.md index 6f3ac44d1ba..12624d0d2c0 100644 --- a/MAINTAINERS.md +++ b/MAINTAINERS.md @@ -95,7 +95,7 @@ For each set of changes to include after the base branch point: - If encountering a commit with conflicts that do not have a straightforward resolution, check if picking any prior commit would help resolve the conflicts. - Abort the rebase, update the authored `rebase-todo`, and restart the interactive rebase. - Avoid authoring manual changes unless absolutely necessary. If authoring changes, keep them as separate commits and indicate them as such on the authored rebase todo (insert either a `pick` instruction with the id of the commit you just authored or an `exec` instruction that makes the modifications and ends with `git commit -m $message`, in either case prefixing with an explanatory `##` comment). - - For `exec`, make portable in-place edits with either `ed` or `alias sed-i="sed -i $(sed --help 2>&1 | sed 2q | grep -qe '-i ' && echo "''")"`, e.g. `printf 'H\n/\( *\)foo/ s##\\1// prettier-ignore\\\n&#\nw\n' | ed -s packages/path/to/file'` or `sed-i -E "$(printf 's#( *)foo#\\1// prettier-ignore\\\n&#')" packages/path/to/file`. + - For `exec`, make portable in-place edits with either `ed` or `alias sedi="sed -i $(sed --help 2>&1 | sed 2q | grep -qe '-i ' && echo "''")"`, e.g. `printf 'H\n/\( *\)foo/ s##\\1// prettier-ignore\\\n&#\nw\n' | ed -s packages/path/to/file'` or `sedi -E "$(printf 's#( *)foo#\\1// prettier-ignore\\\n&#')" packages/path/to/file`. - If a commit is empty, skip it and comment it out in the rebase todo. - [ ] Verify that tests pass. In particular: - Linting locally can catch incompatibilities in the cherry-pick, often requiring some changes to be reverted or more commits from `master` to be included. In those cases, update the authored `rebase-todo`, and redo the interactive rebase as necessary. diff --git a/a3p-integration/.eslintignore b/a3p-integration/.eslintignore new file mode 100644 index 00000000000..f14a44ccd20 --- /dev/null +++ b/a3p-integration/.eslintignore @@ -0,0 +1 @@ +agoric-sdk/ diff --git a/a3p-integration/README.md b/a3p-integration/README.md index 5318bbba750..c5c2a3d4a29 100644 --- a/a3p-integration/README.md +++ b/a3p-integration/README.md @@ -1,8 +1,12 @@ -# Overview +# a3p-integration overview This directory contains an end-to-end integration test executed against a synthetic agoric-3 chain. The test performs a chain software upgrade to the software contained in the enclosing `agoric-sdk` repository, then executes a series of functional tests verifying the upgrade accomplished its goal. -# How to run +## Quick-Start: How to Get a Chain Running + +To get a chain running with an existing proposal such as `f:fast-usdc`, run `yarn test -m fast-usdc --debug`; likewise `yarn test -m --debug` for any other proposal name. + +## How to run The synthetic chain testing infrastructure relies on Docker, Docker Buildx extended build capabilities, and the experimental Buildx Bake extension. Make sure you have a recent Docker engine installed for your system. @@ -153,12 +157,12 @@ make -C ../packages/deployment docker-build-sdk In a3p-integration, many core-eval proposals' `submission` content has to be generated from the local `agoric-sdk`, and must be rebuilt every time there is a -change. The `scripts/build-all-submissions.sh` script contains commands to -generate the core-eval content and move it to the expected proposal package's -submission directory. The generation is executed as part of `a3p-integration`'s -`build:submissions` step. Each proposal that requires such a build step should -add an entry to the `sdk-generate` array in the `agoricProposal` section of -`package.json`. +change. This package's package.json `build:submissions` script runs +`scripts/build-all-submissions.sh` to generate that content and move it into +submission subdirectories under the corresponding [proposal +directories](#package-layering). Each proposal that requires such a build step +should have a corresponding entry in the `sdk-generate` array of its proposal +directory's package.json `agoricProposal` section. Submissions that don't need to pass in options or generate references to source bundles can be written directly in a `foo-submission` subdirectory of the @@ -172,15 +176,17 @@ provided, it should be written as two parts: a core eval (in one of the `.../proposals` directories) and a builder for it (under `.../builders/scripts`). The `build-all-submissions.sh` script reads instructions from -`agoricProposal.sdk-generate` in `package.json`. That field contains a list of -strings, each of which describes a single submission. If there is only one -submission, it can use the default directory name `submission` by specifying -only the name of the script file in `builders/scripts/vars`: +`agoricProposal.sdk-generate` in package.json. That field contains a list of +strings, each of which describes a single submission as a list of +space-separated fields. If there is only one submission, it can use the default +directory name `submission` by specifying just one field, containing the path of +a builder script file relative to +[packages/builders/scripts](../packages/builders/scripts): ```json "sdk-generate": ["test-localchain"], ``` -If there are multiple submissions, each entry has to specify the script name and -a distinct directory name. +If there are multiple submissions, each entry has to specify a distinct +directory name in the second field: ```json "sdk-generate": [ "probe-zcf-bundle probe-submission", @@ -188,8 +194,7 @@ a distinct directory name. "add-auction newAuction-submission" ], ``` -A third argument can be used to provide additional parameters to the -build script. +Any remaining fields provide additional arguments to the build script: ```json "sdk-generate": [ "inter-protocol/updatePriceFeeds.js submission/main main", diff --git a/a3p-integration/debug-current.sh b/a3p-integration/debug-current.sh index 93a15440a4c..6fabda024e6 100755 --- a/a3p-integration/debug-current.sh +++ b/a3p-integration/debug-current.sh @@ -1,8 +1,12 @@ -#!/bin/sh +#!/bin/bash +set -ueo pipefail # Convenience script to debug the current proposal being worked on. -scripts/build-submission.sh proposals/z:acceptance testing/start-valueVow.js start-valueVow -scripts/build-submission.sh proposals/z:acceptance testing/restart-valueVow.js restart-valueVow +( + cd 'proposals/z:acceptance' + ../../scripts/build-submission.sh testing/start-valueVow.js start-valueVow + ../../scripts/build-submission.sh testing/restart-valueVow.js restart-valueVow +) yarn test -m acceptance --debug diff --git a/a3p-integration/package.json b/a3p-integration/package.json index ad61ebdafb4..7c36b3494af 100644 --- a/a3p-integration/package.json +++ b/a3p-integration/package.json @@ -8,14 +8,17 @@ "build:sdk": "make -C ../packages/deployment docker-build-sdk", "build:submissions": "scripts/build-all-submissions.sh", "build:synthetic-chain": "yarn synthetic-chain build", - "lint": "../node_modules/.bin/eslint proposals", + "lint-fix": "yarn lint:eslint --fix", + "lint": "../node_modules/.bin/run-s --continue-on-error 'lint:*'", + "lint:types": "find proposals -maxdepth 2 -name package.json -type f -exec ../node_modules/.bin/tsc -p '{}'/.. ';'", + "lint:eslint": "../node_modules/.bin/eslint .", "test": "yarn synthetic-chain test", "doctor": "yarn synthetic-chain doctor" }, "dependencies": { - "@agoric/synthetic-chain": "^0.4.0", + "@agoric/synthetic-chain": "^0.4.3", "@types/better-sqlite3": "^7.6.11" }, - "packageManager": "yarn@4.5.1", + "packageManager": "yarn@4.5.3", "license": "Apache-2.0" } diff --git a/a3p-integration/proposals/f:fast-usdc/.yarnrc.yml b/a3p-integration/proposals/f:fast-usdc/.yarnrc.yml new file mode 100644 index 00000000000..3186f3f0795 --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/.yarnrc.yml @@ -0,0 +1 @@ +nodeLinker: node-modules diff --git a/a3p-integration/proposals/f:fast-usdc/deploy.test.js b/a3p-integration/proposals/f:fast-usdc/deploy.test.js new file mode 100644 index 00000000000..2fc6fd8ec8d --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/deploy.test.js @@ -0,0 +1,18 @@ +// @ts-check +/* global globalThis */ +import test from 'ava'; +import '@endo/init/legacy.js'; // axios compat +import { makeVstorageKit } from '@agoric/client-utils'; + +const io = { fetch: globalThis.fetch }; +const networkConfig = { + rpcAddrs: ['http://0.0.0.0:26657'], + chainName: 'agoriclocal', +}; + +test('fastUsdc is in agoricNames.instance', async t => { + const { agoricNames } = await makeVstorageKit(io, networkConfig); + + t.log('agoricNames.instance keys', Object.keys(agoricNames.instance)); + t.truthy(agoricNames.instance.fastUsdc); +}); diff --git a/a3p-integration/proposals/f:fast-usdc/package.json b/a3p-integration/proposals/f:fast-usdc/package.json new file mode 100644 index 00000000000..6d5c1a0fc64 --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/package.json @@ -0,0 +1,30 @@ +{ + "agoricProposal": { + "source": "subdir", + "$UNTIL": "write-chain-info to agoricNames until #10445 and chainHub setup", + "sdk-generate": [ + "orchestration/write-chain-info.js", + "fast-usdc/init-fast-usdc.js submission --net A3P_INTEGRATION" + ], + "type": "/agoric.swingset.CoreEvalProposal" + }, + "type": "module", + "license": "Apache-2.0", + "dependencies": { + "@agoric/client-utils": "dev", + "@agoric/synthetic-chain": "^0.4.3", + "@endo/init": "^1.1.7", + "ava": "^5.3.1" + }, + "ava": { + "concurrency": 1, + "timeout": "2m", + "files": [ + "!submission" + ] + }, + "scripts": { + "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" + }, + "packageManager": "yarn@4.5.3" +} diff --git a/a3p-integration/proposals/f:fast-usdc/test-cli.sh b/a3p-integration/proposals/f:fast-usdc/test-cli.sh new file mode 100755 index 00000000000..eb7bbc315ee --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/test-cli.sh @@ -0,0 +1,15 @@ +#!/bin/bash + +# FIXME these commands are run against the `@agoric/fast-usdc` pulled from NPM +# but should be run against the local SDK. The `yarn link` command described in +# a3p-integration/README.md is supposed to make that work but it's not working. + +yarn @agoric/fast-usdc operator accept >| accept.json +cat accept.json +yarn agoric wallet send --offer accept.json --from gov1 --keyring-backend="test" +ACCEPT_OFFER_ID=$(agoric wallet extract-id --offer accept.json) + +# FIXME attest something +yarn @agoric/fast-usdc operator attest --previousOfferId "$ACCEPT_OFFER_ID" >| attest.json +cat attest.json +yarn agoric wallet send --offer attest.json --from gov1 --keyring-backend="test" diff --git a/a3p-integration/proposals/f:fast-usdc/test.sh b/a3p-integration/proposals/f:fast-usdc/test.sh new file mode 100755 index 00000000000..eb9d0be8634 --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/test.sh @@ -0,0 +1,5 @@ +#!/bin/bash +yarn ava + +# TODO get CLI test passing and part of CI +./test-cli.sh || echo "CLI test failed" diff --git a/a3p-integration/proposals/f:fast-usdc/yarn.lock b/a3p-integration/proposals/f:fast-usdc/yarn.lock new file mode 100644 index 00000000000..ade53b2d760 --- /dev/null +++ b/a3p-integration/proposals/f:fast-usdc/yarn.lock @@ -0,0 +1,4331 @@ +# This file is generated by running "yarn install" inside your project. +# Manual changes might be lost - proceed with caution! + +__metadata: + version: 8 + cacheKey: 10c0 + +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" + dependencies: + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/59db151ae737bd9b1f21c1589df4c7da9cbf484de5b5cc8352052825c2d977283d975303f55acb54d0210c176cb405da263073ceba1d3a6db65c6e21cc6e663f + languageName: node + linkType: hard + +"@agoric/base-zone@npm:0.1.1-dev-9c61393.0+9c61393": + version: 0.1.1-dev-9c61393.0 + resolution: "@agoric/base-zone@npm:0.1.1-dev-9c61393.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/cb872856e25ddb0ea00714194d58db5058fefc306f6a74cb048de7fd75ff06e6283ad990e20c845b0633fadd9ef07f35d59e44a632dc763e9d506214772dc5d7 + languageName: node + linkType: hard + +"@agoric/casting@npm:0.4.3-dev-9c61393.0+9c61393": + version: 0.4.3-dev-9c61393.0 + resolution: "@agoric/casting@npm:0.4.3-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/lockdown": "npm:^1.0.13" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/2d491ae19f8264ec368bdb16db5f120a8f94de7c8fd54614434439a7f457f7d5539c123e8429b7af5a28fefe13e9543cba177f48fe0b0feb469e2482c8c1b7b7 + languageName: node + linkType: hard + +"@agoric/client-utils@npm:dev": + version: 0.1.1-dev-9c61393.0 + resolution: "@agoric/client-utils@npm:0.1.1-dev-9c61393.0" + dependencies: + "@agoric/casting": "npm:0.4.3-dev-9c61393.0+9c61393" + "@agoric/ertp": "npm:0.16.3-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/smart-wallet": "npm:0.5.4-dev-9c61393.0+9c61393" + "@agoric/vats": "npm:0.15.2-dev-9c61393.0+9c61393" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/41792664f534d9e07e442ce726d6af675e967b4986aedc1b66758b0315c7fd10b4fe1ad2b509f8ddf54759f218f1da2d8a5347c1514c13ccfe56288b6c63e257 + languageName: node + linkType: hard + +"@agoric/cosmic-proto@npm:0.4.1-dev-9c61393.0+9c61393": + version: 0.4.1-dev-9c61393.0 + resolution: "@agoric/cosmic-proto@npm:0.4.1-dev-9c61393.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/init": "npm:^1.1.7" + checksum: 10c0/55d09b61206feccfab98a67d41aa90381fa724d8b7018f5bf7d93db92f485f9fe8e1513c96be94be1e5377c3bc462d05aaf7a78064647166450e949150903603 + languageName: node + linkType: hard + +"@agoric/ertp@npm:0.16.3-dev-9c61393.0+9c61393": + version: 0.16.3-dev-9c61393.0 + resolution: "@agoric/ertp@npm:0.16.3-dev-9c61393.0" + dependencies: + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/zone": "npm:0.2.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c54db24d131c3f703e8d363650e747fbaa0ffb91e675169a90073483d28a6a1324c80085eb3c2a382971a918990202bcbda9e8548549e37db9ea54adeafd26da + languageName: node + linkType: hard + +"@agoric/governance@npm:0.10.4-dev-9c61393.0+9c61393": + version: 0.10.4-dev-9c61393.0 + resolution: "@agoric/governance@npm:0.10.4-dev-9c61393.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/time": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/zoe": "npm:0.26.3-dev-9c61393.0+9c61393" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + import-meta-resolve: "npm:^2.2.1" + checksum: 10c0/374a3e54c2b332feb515dc25afeb316c0db8304337b07f9161e7ef9d833246d5f3a6bd89df23e143b3d6d78787028c47f38bfd77aafc215a4721aaa29b44e123 + languageName: node + linkType: hard + +"@agoric/internal@npm:0.3.3-dev-9c61393.0+9c61393": + version: 0.3.3-dev-9c61393.0 + resolution: "@agoric/internal@npm:0.3.3-dev-9c61393.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-9c61393.0+9c61393" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/stream": "npm:^1.2.8" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + checksum: 10c0/5dab64b83cb6a6a311f53722ce5283e61a8a9a3142c2065d9e9baee277a1fecbc3f5edb6fd99e0c3215e897fdfb9e1dce00e5369797a9374e315b3a899dac64e + languageName: node + linkType: hard + +"@agoric/kmarshal@npm:0.1.1-dev-9c61393.0+9c61393": + version: 0.1.1-dev-9c61393.0 + resolution: "@agoric/kmarshal@npm:0.1.1-dev-9c61393.0" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + checksum: 10c0/38006a8dc82a32e5445c7ef9253ef2a66e53d5ae9e58d6ca5224b79b3155878f3a3ef53e476878ea95270a494a582ce036af78a1440f7f4573a36ac78f456cf4 + languageName: node + linkType: hard + +"@agoric/network@npm:0.1.1-dev-9c61393.0+9c61393": + version: 0.1.1-dev-9c61393.0 + resolution: "@agoric/network@npm:0.1.1-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@endo/base64": "npm:^1.0.9" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/935ec80ad05ea3297f456af1d4e5491eb89725b2bb9984dfdbcedc2ba757ae06e9927b3cfc94dd3b2bada4b8de4b33dedb2dd00cb33a1d6bf113c48a213afb3b + languageName: node + linkType: hard + +"@agoric/notifier@npm:0.6.3-dev-9c61393.0+9c61393": + version: 0.6.3-dev-9c61393.0 + resolution: "@agoric/notifier@npm:0.6.3-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/9e28ffad908521f8289afde305248ec93d386b631f0e9271ee64bf56940c67bfbc25cb874ce1aeb9177155331a27663ae1c45eb41bd82a2258a7b68e5953523c + languageName: node + linkType: hard + +"@agoric/smart-wallet@npm:0.5.4-dev-9c61393.0+9c61393": + version: 0.5.4-dev-9c61393.0 + resolution: "@agoric/smart-wallet@npm:0.5.4-dev-9c61393.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/vats": "npm:0.15.2-dev-9c61393.0+9c61393" + "@agoric/vow": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/zoe": "npm:0.26.3-dev-9c61393.0+9c61393" + "@agoric/zone": "npm:0.2.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/2f197adcc84f5dbc32347e2d6e4c4b5626141c283a77793e33fd1562d412034c01d4f3c0110649dc05db843cc404a96213b2f96ee79cef21ee3ee56eb825453d + languageName: node + linkType: hard + +"@agoric/store@npm:0.9.3-dev-9c61393.0+9c61393": + version: 0.9.3-dev-9c61393.0 + resolution: "@agoric/store@npm:0.9.3-dev-9c61393.0" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/3772d5502c47734edc27b7cc64ccf890fcaf3130c21804140b45e7d227dafb83ee1028dc02dff84ad0e14b3155bed1548e0852606dbde9bf414ab699ccadc504 + languageName: node + linkType: hard + +"@agoric/swing-store@npm:0.9.2-dev-9c61393.0+9c61393": + version: 0.9.2-dev-9c61393.0 + resolution: "@agoric/swing-store@npm:0.9.2-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + better-sqlite3: "npm:^9.1.1" + checksum: 10c0/422c32d0efd6f053292d8207cc58a989da314ec613a333b6c8a5b415d9bb3df9adeb0c9b7864ff1b8995c53cbb1d1a9552cf1041b27a7a7f1992084014b20dc6 + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:0.10.3-dev-9c61393.0+9c61393": + version: 0.10.3-dev-9c61393.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/576708817e95f8de695b0e7dfdc09d099b51aa71e708e485f4a324f9fdeacfff395057e0a1180711471c0d32d6c5cd46d84316f535654b32192b7e3f5338937d + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:0.32.3-dev-9c61393.0+9c61393": + version: 0.32.3-dev-9c61393.0 + resolution: "@agoric/swingset-vat@npm:0.32.3-dev-9c61393.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/kmarshal": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/swing-store": "npm:0.9.2-dev-9c61393.0+9c61393" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-9c61393.0+9c61393" + "@agoric/swingset-xsnap-supervisor": "npm:0.10.3-dev-9c61393.0+9c61393" + "@agoric/time": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/xsnap-lockdown": "npm:0.14.1-dev-9c61393.0+9c61393" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/ses-ava": "npm:^1.2.8" + "@endo/stream": "npm:^1.2.8" + "@endo/zip": "npm:^1.0.9" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^9.1.1" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@agoric/xsnap": ^0.14.2 + ava: ^5.3.0 + bin: + vat: bin/vat + checksum: 10c0/64cc1dd51a40f7617a793b141dec9b8c4ea006b594e86691f06a859b163cb58ee289e11c4e8666faaa5c48b129b69ae4d0d86f561b861f06501c3ed838c125c0 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-9c61393.0+9c61393": + version: 0.10.3-dev-9c61393.0 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-9c61393.0" + checksum: 10c0/9710fbb28e35949b786835ecbcc4179853a968b0bb63a759213450993c1ca69d08b4cbdf3745c0710640b42d7790ea9984cec4ae2dc0631c1327b6019bb5c134 + languageName: node + linkType: hard + +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" + dependencies: + "@endo/zip": "npm:^1.0.7" + better-sqlite3: "npm:^9.6.0" + chalk: "npm:^5.3.0" + cosmjs-types: "npm:^0.9.0" + execa: "npm:^9.3.1" + bin: + synthetic-chain: dist/cli/cli.js + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b + languageName: node + linkType: hard + +"@agoric/time@npm:0.3.3-dev-9c61393.0+9c61393": + version: 0.3.3-dev-9c61393.0 + resolution: "@agoric/time@npm:0.3.3-dev-9c61393.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/9c89e51041829351c9698b96f624362d3712d2c959780db1a3d5ce29d45f83077fba192b8157da4055e1832f269799e7c621ad0d526ce16b7be254004b5116cb + languageName: node + linkType: hard + +"@agoric/vat-data@npm:0.5.3-dev-9c61393.0+9c61393": + version: 0.5.3-dev-9c61393.0 + resolution: "@agoric/vat-data@npm:0.5.3-dev-9c61393.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/ba27f0acd8c148279067dd47755776a70a26d88b5e45e0675e5e23da610626b6c5169f057591c6992a7744d8ee05f7fd230fc6c20665da34502f5c787648f209 + languageName: node + linkType: hard + +"@agoric/vats@npm:0.15.2-dev-9c61393.0+9c61393": + version: 0.15.2-dev-9c61393.0 + resolution: "@agoric/vats@npm:0.15.2-dev-9c61393.0" + dependencies: + "@agoric/cosmic-proto": "npm:0.4.1-dev-9c61393.0+9c61393" + "@agoric/ertp": "npm:0.16.3-dev-9c61393.0+9c61393" + "@agoric/governance": "npm:0.10.4-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/network": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/swingset-vat": "npm:0.32.3-dev-9c61393.0+9c61393" + "@agoric/time": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/vow": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/zoe": "npm:0.26.3-dev-9c61393.0+9c61393" + "@agoric/zone": "npm:0.2.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + import-meta-resolve: "npm:^2.2.1" + jessie.js: "npm:^0.3.4" + checksum: 10c0/e96d1c83c0b6907c69c0f85e87e3b477b50eba49f4d76db98cb4e7f605938f275e3830a5992c057882d12faa54f983ac63ad02e3e6c05d2ef2c9d3b2839caa09 + languageName: node + linkType: hard + +"@agoric/vow@npm:0.1.1-dev-9c61393.0+9c61393": + version: 0.1.1-dev-9c61393.0 + resolution: "@agoric/vow@npm:0.1.1-dev-9c61393.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/7ad19095660f8312224b2a19e892d296da292e66146f3aab8127fdaf6e2ec999958401b5e8052b465e8eb97ff49a0db9f4db9aa445abbd8a51bc9a1216036f57 + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:0.14.1-dev-9c61393.0+9c61393": + version: 0.14.1-dev-9c61393.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.1-dev-9c61393.0" + checksum: 10c0/f53416887d03a9b96586d96ac47917a898613722a99b6a1f9cb74712f788fd077d0f9530169b46bc40b40ec68fd001446561260799dc1d65a57eb08144069913 + languageName: node + linkType: hard + +"@agoric/zoe@npm:0.26.3-dev-9c61393.0+9c61393": + version: 0.26.3-dev-9c61393.0 + resolution: "@agoric/zoe@npm:0.26.3-dev-9c61393.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/ertp": "npm:0.16.3-dev-9c61393.0+9c61393" + "@agoric/internal": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/notifier": "npm:0.6.3-dev-9c61393.0+9c61393" + "@agoric/store": "npm:0.9.3-dev-9c61393.0+9c61393" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-9c61393.0+9c61393" + "@agoric/swingset-vat": "npm:0.32.3-dev-9c61393.0+9c61393" + "@agoric/time": "npm:0.3.3-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@agoric/vow": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/zone": "npm:0.2.3-dev-9c61393.0+9c61393" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/945a3480ca196bf94552c63c37dba97eea5d8cb21e5f9aed4a6d8a6b627a07b83cc2ee0e8ebaa735e3b73e90a1dc1c645d06b89e61f62cc4e838f77ee2ce3e80 + languageName: node + linkType: hard + +"@agoric/zone@npm:0.2.3-dev-9c61393.0+9c61393": + version: 0.2.3-dev-9c61393.0 + resolution: "@agoric/zone@npm:0.2.3-dev-9c61393.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-9c61393.0+9c61393" + "@agoric/vat-data": "npm:0.5.3-dev-9c61393.0+9c61393" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/a3434bf4b2d8be2d2325af3a19fde83b06fdb6b6922e5ec1cf3355ffc15a79a9a4ee6c6968349d92f039808ab521dc7ec20830cc34d2356c5771d9f69c5e3e20 + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" + dependencies: + "@babel/parser": "npm:^7.26.2" + "@babel/types": "npm:^7.26.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" + dependencies: + "@babel/types": "npm:^7.26.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.6": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 + languageName: node + linkType: hard + +"@confio/ics23@npm:^0.6.8": + version: 0.6.8 + resolution: "@confio/ics23@npm:0.6.8" + dependencies: + "@noble/hashes": "npm:^1.0.0" + protobufjs: "npm:^6.8.8" + checksum: 10c0/2f3f5032cd6a34c9b2fbd64bbf7e1cdec75ca71f348a770f7b5474b5027b12202bfbcd404eca931efddb5901f769af035a87cb8bddbf3f23d7e5d93c9d3d7f6f + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/amino@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + checksum: 10c0/cd8e215b0406f5c7b73ab0a21106d06b6f76b1da12f1ab7b612884e1dd8bc626966dc67d4e7580090ade131546cbec70000f854e6596935299d054b788929a7e + languageName: node + linkType: hard + +"@cosmjs/crypto@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/crypto@npm:0.32.4" + dependencies: + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + "@noble/hashes": "npm:^1" + bn.js: "npm:^5.2.0" + elliptic: "npm:^6.5.4" + libsodium-wrappers-sumo: "npm:^0.7.11" + checksum: 10c0/94e742285eb8c7c5393055ba0635f10c06bf87710e953aedc71e3edc2b8e21a12a0d9b5e8eff37e326765f57c9eb3c7fd358f24f639efad4f1a6624eb8189534 + languageName: node + linkType: hard + +"@cosmjs/encoding@npm:^0.32.3, @cosmjs/encoding@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/encoding@npm:0.32.4" + dependencies: + base64-js: "npm:^1.3.0" + bech32: "npm:^1.1.4" + readonly-date: "npm:^1.0.0" + checksum: 10c0/4a30d5ae1a2d1247d44bda46101ce208c7666d8801ca9a33de94edc35cc22460c16b4834ec84d5a65ffef5e2a4b58605e0a0a056c46bc0a042979ec84acf20cd + languageName: node + linkType: hard + +"@cosmjs/json-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/json-rpc@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + xstream: "npm:^11.14.0" + checksum: 10c0/b3ebd240f4fb21260e284d2e503ecc61bac898842187ab717f0efb9a5f21272f161f267cc145629caeb9735f80946844384e2bd410275a4744147a44518c0fa0 + languageName: node + linkType: hard + +"@cosmjs/math@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/math@npm:0.32.4" + dependencies: + bn.js: "npm:^5.2.0" + checksum: 10c0/91e47015be5634d27d71d14c5a05899fb4992b69db02cab1558376dedf8254f96d5e24f097c5601804ae18ed33c7c25d023653ac2bf9d20250fd3e5637f6b101 + languageName: node + linkType: hard + +"@cosmjs/proto-signing@npm:^0.32.3, @cosmjs/proto-signing@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/proto-signing@npm:0.32.4" + dependencies: + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + checksum: 10c0/6915059d2e6dbe1abda4a747c3b1abd47a9eff4f8cb2cf9a5545f939b656b4a15bbde2bfc1364357f9b2a081a066280c3b469f6d13dd5fc51b429b0f90a54913 + languageName: node + linkType: hard + +"@cosmjs/socket@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/socket@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + isomorphic-ws: "npm:^4.0.1" + ws: "npm:^7" + xstream: "npm:^11.14.0" + checksum: 10c0/2d94c1fb39016bea3c7c145f4565c8a0fed20c805ac569ea604cd3646c15147b82b8db18a4e3c832d6ae0c3dd14363d4db3d91bcacac922679efba164ed49386 + languageName: node + linkType: hard + +"@cosmjs/stargate@npm:^0.32.3": + version: 0.32.4 + resolution: "@cosmjs/stargate@npm:0.32.4" + dependencies: + "@confio/ics23": "npm:^0.6.8" + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + xstream: "npm:^11.14.0" + checksum: 10c0/c30a3519516aaa7eae58ba827c80fcf74c7fe7a9d3aa5cc8138c3a2768f5f241f59c2f5cec27e9037b4df12b1c6605b4fac9eadb4de97bd84edddc3a80a02e24 + languageName: node + linkType: hard + +"@cosmjs/stream@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stream@npm:0.32.4" + dependencies: + xstream: "npm:^11.14.0" + checksum: 10c0/c677c53f9101c2a36fa03a475d92dea2fa69c475f896751b5e18a5d07087eeecbf6bca2e62a8940003da53fa235a9b2dd78c8257bf19c3f96e3f69fa8d5f183d + languageName: node + linkType: hard + +"@cosmjs/tendermint-rpc@npm:^0.32.3, @cosmjs/tendermint-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/tendermint-rpc@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/json-rpc": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/socket": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + axios: "npm:^1.6.0" + readonly-date: "npm:^1.0.0" + xstream: "npm:^11.14.0" + checksum: 10c0/5fae7afcdf98cc7dd36922aa1586254cc8c202cf8fe66804e61d793d31dcff816f40d33f7a0eb72c1b9226c7c361d4848e4ff12d0489f6fa66f47f0c86ae18dd + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/utils@npm:0.32.4" + checksum: 10c0/d5ff8b235094be1150853a715116049f73eb5cdfeea8ce8e22ecccc61ec99792db457404d4307782b1a2f935dcf438f5c485beabfcfbc1dc5df26eb6e6da9062 + languageName: node + linkType: hard + +"@endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 + languageName: node + linkType: hard + +"@endo/bundle-source@npm:^3.5.0": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" + bin: + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 + languageName: node + linkType: hard + +"@endo/captp@npm:^4.4.3": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^1.0.12": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 + languageName: node + linkType: hard + +"@endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 + languageName: node + linkType: hard + +"@endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 + languageName: node + linkType: hard + +"@endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 + languageName: node + linkType: hard + +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 + languageName: node + linkType: hard + +"@endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd + languageName: node + linkType: hard + +"@endo/exo@npm:^1.5.7": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 + languageName: node + linkType: hard + +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e + languageName: node + linkType: hard + +"@endo/import-bundle@npm:^1.3.2": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a + languageName: node + linkType: hard + +"@endo/init@npm:^1.1.7": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f + languageName: node + linkType: hard + +"@endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 + languageName: node + linkType: hard + +"@endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + +"@endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 + languageName: node + linkType: hard + +"@endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + "@fast-check/ava": "npm:^1.1.5" + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e + languageName: node + linkType: hard + +"@endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 + languageName: node + linkType: hard + +"@endo/ses-ava@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" + peerDependencies: + ava: ^5.3.0 || ^6.1.2 + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf + languageName: node + linkType: hard + +"@endo/stream@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" + dependencies: + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 + languageName: node + linkType: hard + +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + +"@fast-check/ava@npm:^1.1.5": + version: 1.2.1 + resolution: "@fast-check/ava@npm:1.2.1" + dependencies: + fast-check: "npm:^3.0.0" + peerDependencies: + ava: ^4 || ^5 || ^6 + checksum: 10c0/3800098fd7e8098102544a2f7a595351d063a7ebaeca18ed4901df5ec2679da2330ba8c0db2c820721d4cbb3e23d817ba22fec6d058957930e229f44fa71a684 + languageName: node + linkType: hard + +"@isaacs/cliui@npm:^8.0.2": + version: 8.0.2 + resolution: "@isaacs/cliui@npm:8.0.2" + dependencies: + string-width: "npm:^5.1.2" + string-width-cjs: "npm:string-width@^4.2.0" + strip-ansi: "npm:^7.0.1" + strip-ansi-cjs: "npm:strip-ansi@^6.0.1" + wrap-ansi: "npm:^8.1.0" + wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" + checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e + languageName: node + linkType: hard + +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0": + version: 1.5.0 + resolution: "@noble/hashes@npm:1.5.0" + checksum: 10c0/1b46539695fbfe4477c0822d90c881a04d4fa2921c08c552375b444a48cac9930cb1ee68de0a3c7859e676554d0f3771999716606dc4d8f826e414c11692cdd9 + languageName: node + linkType: hard + +"@nodelib/fs.scandir@npm:2.1.5": + version: 2.1.5 + resolution: "@nodelib/fs.scandir@npm:2.1.5" + dependencies: + "@nodelib/fs.stat": "npm:2.0.5" + run-parallel: "npm:^1.1.9" + checksum: 10c0/732c3b6d1b1e967440e65f284bd06e5821fedf10a1bea9ed2bb75956ea1f30e08c44d3def9d6a230666574edbaf136f8cfd319c14fd1f87c66e6a44449afb2eb + languageName: node + linkType: hard + +"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": + version: 2.0.5 + resolution: "@nodelib/fs.stat@npm:2.0.5" + checksum: 10c0/88dafe5e3e29a388b07264680dc996c17f4bda48d163a9d4f5c1112979f0ce8ec72aa7116122c350b4e7976bc5566dc3ddb579be1ceaacc727872eb4ed93926d + languageName: node + linkType: hard + +"@nodelib/fs.walk@npm:^1.2.3": + version: 1.2.8 + resolution: "@nodelib/fs.walk@npm:1.2.8" + dependencies: + "@nodelib/fs.scandir": "npm:2.1.5" + fastq: "npm:^1.6.0" + checksum: 10c0/db9de047c3bb9b51f9335a7bb46f4fcfb6829fb628318c12115fbaf7d369bfce71c15b103d1fc3b464812d936220ee9bc1c8f762d032c9f6be9acc99249095b1 + languageName: node + linkType: hard + +"@npmcli/agent@npm:^2.0.0": + version: 2.2.2 + resolution: "@npmcli/agent@npm:2.2.2" + dependencies: + agent-base: "npm:^7.1.0" + http-proxy-agent: "npm:^7.0.0" + https-proxy-agent: "npm:^7.0.1" + lru-cache: "npm:^10.0.1" + socks-proxy-agent: "npm:^8.0.3" + checksum: 10c0/325e0db7b287d4154ecd164c0815c08007abfb07653cc57bceded17bb7fd240998a3cbdbe87d700e30bef494885eccc725ab73b668020811d56623d145b524ae + languageName: node + linkType: hard + +"@npmcli/fs@npm:^3.1.0": + version: 3.1.1 + resolution: "@npmcli/fs@npm:3.1.1" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/c37a5b4842bfdece3d14dfdb054f73fe15ed2d3da61b34ff76629fb5b1731647c49166fd2a8bf8b56fcfa51200382385ea8909a3cbecdad612310c114d3f6c99 + languageName: node + linkType: hard + +"@pkgjs/parseargs@npm:^0.11.0": + version: 0.11.0 + resolution: "@pkgjs/parseargs@npm:0.11.0" + checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd + languageName: node + linkType: hard + +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10c0/26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10c0/64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10c0/9adccf77ad835cbe565da4385212f1e54c3e0dca2be174b5c2cfe89cfaeb240f42c7673e97e49b21b7c66ed901cc1c711552b6727f60b43a953ce996eb2868a7 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10c0/6caa32a8304a20f1c9953111b25e9543f4de7d254958d81ce0158ad909e4493946bc2060c4ace23d9748b560ebc84c920ee7bc1b7d50dbf8ba852ef13c91af58 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.3 + resolution: "@rollup/pluginutils@npm:5.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + languageName: node + linkType: hard + +"@sec-ant/readable-stream@npm:^0.4.1": + version: 0.4.1 + resolution: "@sec-ant/readable-stream@npm:0.4.1" + checksum: 10c0/64e9e9cf161e848067a5bf60cdc04d18495dc28bb63a8d9f8993e4dd99b91ad34e4b563c85de17d91ffb177ec17a0664991d2e115f6543e73236a906068987af + languageName: node + linkType: hard + +"@sindresorhus/merge-streams@npm:^4.0.0": + version: 4.0.0 + resolution: "@sindresorhus/merge-streams@npm:4.0.0" + checksum: 10c0/482ee543629aa1933b332f811a1ae805a213681ecdd98c042b1c1b89387df63e7812248bb4df3910b02b3cc5589d3d73e4393f30e197c9dde18046ccd471fc6b + languageName: node + linkType: hard + +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: 10c0/42ec66ade1f72ff9d143c5a519a65efc7c1c77be7b1ac5455c530ae9acd87baba065542f8847522af2e3ace2cc999f3ad464ef86e6b7352eece34daf88f8c924 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 22.9.0 + resolution: "@types/node@npm:22.9.0" + dependencies: + undici-types: "npm:~6.19.8" + checksum: 10c0/3f46cbe0a49bab4ba30494025e4c8a6e699b98ac922857aa1f0209ce11a1313ee46e6808b8f13fe5b8b960a9d7796b77c8d542ad4e9810e85ef897d5593b5d51 + languageName: node + linkType: hard + +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6eeb9c27d99bf4b393bf168d43208f63e78cefca5644662a0bdb2bdbf8352386f4f3aca66add138fc41bce5f66fd48a0de430a1473f11b612fbed0375ae78031 + languageName: node + linkType: hard + +"abbrev@npm:^2.0.0": + version: 2.0.0 + resolution: "abbrev@npm:2.0.0" + checksum: 10c0/f742a5a107473946f426c691c08daba61a1d15942616f300b5d32fd735be88fef5cba24201757b6c407fd564555fb48c751cfa33519b2605c8a7aadd22baf372 + languageName: node + linkType: hard + +"acorn-walk@npm:^8.2.0": + version: 8.3.4 + resolution: "acorn-walk@npm:8.3.4" + dependencies: + acorn: "npm:^8.11.0" + checksum: 10c0/76537ac5fb2c37a64560feaf3342023dadc086c46da57da363e64c6148dc21b57d49ace26f949e225063acb6fb441eabffd89f7a3066de5ad37ab3e328927c62 + languageName: node + linkType: hard + +"acorn@npm:^8.11.0, acorn@npm:^8.8.2": + version: 8.13.0 + resolution: "acorn@npm:8.13.0" + bin: + acorn: bin/acorn + checksum: 10c0/f35dd53d68177c90699f4c37d0bb205b8abe036d955d0eb011ddb7f14a81e6fd0f18893731c457c1b5bd96754683f4c3d80d9a5585ddecaa53cdf84e0b3d68f7 + languageName: node + linkType: hard + +"acorn@npm:^8.2.4": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + +"agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.1": + version: 7.1.1 + resolution: "agent-base@npm:7.1.1" + dependencies: + debug: "npm:^4.3.4" + checksum: 10c0/e59ce7bed9c63bf071a30cc471f2933862044c97fd9958967bfe22521d7a0f601ce4ed5a8c011799d0c726ca70312142ae193bbebb60f576b52be19d4a363b50 + languageName: node + linkType: hard + +"aggregate-error@npm:^3.0.0": + version: 3.1.0 + resolution: "aggregate-error@npm:3.1.0" + dependencies: + clean-stack: "npm:^2.0.0" + indent-string: "npm:^4.0.0" + checksum: 10c0/a42f67faa79e3e6687a4923050e7c9807db3848a037076f791d10e092677d65c1d2d863b7848560699f40fc0502c19f40963fb1cd1fb3d338a7423df8e45e039 + languageName: node + linkType: hard + +"aggregate-error@npm:^4.0.0": + version: 4.0.1 + resolution: "aggregate-error@npm:4.0.1" + dependencies: + clean-stack: "npm:^4.0.0" + indent-string: "npm:^5.0.0" + checksum: 10c0/75fd739f5c4c60a667cce35ccaf0edf135e147ef0be9a029cab75de14ac9421779b15339d562e58d25b233ea0ef2bbd4c916f149fdbcb73c2b9a62209e611343 + languageName: node + linkType: hard + +"ansi-regex@npm:^5.0.1": + version: 5.0.1 + resolution: "ansi-regex@npm:5.0.1" + checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 + languageName: node + linkType: hard + +"ansi-regex@npm:^6.0.1": + version: 6.1.0 + resolution: "ansi-regex@npm:6.1.0" + checksum: 10c0/a91daeddd54746338478eef88af3439a7edf30f8e23196e2d6ed182da9add559c601266dbef01c2efa46a958ad6f1f8b176799657616c702b5b02e799e7fd8dc + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0": + version: 4.3.0 + resolution: "ansi-styles@npm:4.3.0" + dependencies: + color-convert: "npm:^2.0.1" + checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 + languageName: node + linkType: hard + +"ansi-styles@npm:^6.0.0, ansi-styles@npm:^6.1.0, ansi-styles@npm:^6.2.1": + version: 6.2.1 + resolution: "ansi-styles@npm:6.2.1" + checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c + languageName: node + linkType: hard + +"anylogger@npm:^0.21.0": + version: 0.21.0 + resolution: "anylogger@npm:0.21.0" + checksum: 10c0/1ca7fcf5bc2b78d1e1d9b8c8cc7ce50b5c6cc67a8da5a28c9c975b7b46fff255a04abab02de38a5139190c9d8b34b3d6c59af6724521b077f7d7dfbad9b47a9c + languageName: node + linkType: hard + +"anymatch@npm:~3.1.2": + version: 3.1.3 + resolution: "anymatch@npm:3.1.3" + dependencies: + normalize-path: "npm:^3.0.0" + picomatch: "npm:^2.0.4" + checksum: 10c0/57b06ae984bc32a0d22592c87384cd88fe4511b1dd7581497831c56d41939c8a001b28e7b853e1450f2bf61992dfcaa8ae2d0d161a0a90c4fb631ef07098fbac + languageName: node + linkType: hard + +"argparse@npm:^1.0.7": + version: 1.0.10 + resolution: "argparse@npm:1.0.10" + dependencies: + sprintf-js: "npm:~1.0.2" + checksum: 10c0/b2972c5c23c63df66bca144dbc65d180efa74f25f8fd9b7d9a0a6c88ae839db32df3d54770dcb6460cf840d232b60695d1a6b1053f599d84e73f7437087712de + languageName: node + linkType: hard + +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: 10c0/86b9485c74ddd324feab807e10a6de3f9c1683856267236fac4bb4d4667ada6463e106db3f6c540ae6b720e0442b590ec701d13676df4c6af30ebf4da09b4f57 + languageName: node + linkType: hard + +"arrgv@npm:^1.0.2": + version: 1.0.2 + resolution: "arrgv@npm:1.0.2" + checksum: 10c0/7e6e782e6b749923ac7cbc4048ef6fe0844c4a59bfc8932fcd4c44566ba25eed46501f94dd7cf3c7297da88f3f599ca056bfb77d0c2484aebc92f04239f69124 + languageName: node + linkType: hard + +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: 10c0/2e26601b8486f29780f1f70f7ac05a226755814c2a3ab42e196748f650af1dc310cd575a11dd4b9841c70fd7460b2dd2b8fe6fb7a3375878e2660706efafa58e + languageName: node + linkType: hard + +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + +"ava@npm:^5.3.1": + version: 5.3.1 + resolution: "ava@npm:5.3.1" + dependencies: + acorn: "npm:^8.8.2" + acorn-walk: "npm:^8.2.0" + ansi-styles: "npm:^6.2.1" + arrgv: "npm:^1.0.2" + arrify: "npm:^3.0.0" + callsites: "npm:^4.0.0" + cbor: "npm:^8.1.0" + chalk: "npm:^5.2.0" + chokidar: "npm:^3.5.3" + chunkd: "npm:^2.0.1" + ci-info: "npm:^3.8.0" + ci-parallel-vars: "npm:^1.0.1" + clean-yaml-object: "npm:^0.1.0" + cli-truncate: "npm:^3.1.0" + code-excerpt: "npm:^4.0.0" + common-path-prefix: "npm:^3.0.0" + concordance: "npm:^5.0.4" + currently-unhandled: "npm:^0.4.1" + debug: "npm:^4.3.4" + emittery: "npm:^1.0.1" + figures: "npm:^5.0.0" + globby: "npm:^13.1.4" + ignore-by-default: "npm:^2.1.0" + indent-string: "npm:^5.0.0" + is-error: "npm:^2.2.2" + is-plain-object: "npm:^5.0.0" + is-promise: "npm:^4.0.0" + matcher: "npm:^5.0.0" + mem: "npm:^9.0.2" + ms: "npm:^2.1.3" + p-event: "npm:^5.0.1" + p-map: "npm:^5.5.0" + picomatch: "npm:^2.3.1" + pkg-conf: "npm:^4.0.0" + plur: "npm:^5.1.0" + pretty-ms: "npm:^8.0.0" + resolve-cwd: "npm:^3.0.0" + stack-utils: "npm:^2.0.6" + strip-ansi: "npm:^7.0.1" + supertap: "npm:^3.0.1" + temp-dir: "npm:^3.0.0" + write-file-atomic: "npm:^5.0.1" + yargs: "npm:^17.7.2" + peerDependencies: + "@ava/typescript": "*" + peerDependenciesMeta: + "@ava/typescript": + optional: true + bin: + ava: entrypoints/cli.mjs + checksum: 10c0/262cbdb9e8c3ce7177be91b92ba521e9d5aef577dcc8095cc591f86baaa291b91c88925928f5d26832c4d1b381a6ae99f2e8804077c592d0d32322c1212605cc + languageName: node + linkType: hard + +"axios@npm:^1.6.0": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7 + languageName: node + linkType: hard + +"balanced-match@npm:^1.0.0": + version: 1.0.2 + resolution: "balanced-match@npm:1.0.2" + checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee + languageName: node + linkType: hard + +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": + version: 1.5.1 + resolution: "base64-js@npm:1.5.1" + checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf + languageName: node + linkType: hard + +"bech32@npm:^1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 10c0/5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.1.1, better-sqlite3@npm:^9.6.0": + version: 9.6.0 + resolution: "better-sqlite3@npm:9.6.0" + dependencies: + bindings: "npm:^1.5.0" + node-gyp: "npm:latest" + prebuild-install: "npm:^7.1.1" + checksum: 10c0/8db9b38f414e26a56d4c40fc16e94a253118491dae0e2c054338a9e470f1a883c7eb4cb330f2f5737db30f704d4f2e697c59071ca04e03364ee9fe04375aa9c8 + languageName: node + linkType: hard + +"binary-extensions@npm:^2.0.0": + version: 2.3.0 + resolution: "binary-extensions@npm:2.3.0" + checksum: 10c0/75a59cafc10fb12a11d510e77110c6c7ae3f4ca22463d52487709ca7f18f69d886aa387557cc9864fbdb10153d0bdb4caacabf11541f55e89ed6e18d12ece2b5 + languageName: node + linkType: hard + +"bindings@npm:^1.5.0": + version: 1.5.0 + resolution: "bindings@npm:1.5.0" + dependencies: + file-uri-to-path: "npm:1.0.0" + checksum: 10c0/3dab2491b4bb24124252a91e656803eac24292473e56554e35bbfe3cc1875332cfa77600c3bac7564049dc95075bf6fcc63a4609920ff2d64d0fe405fcf0d4ba + languageName: node + linkType: hard + +"bl@npm:^4.0.3": + version: 4.1.0 + resolution: "bl@npm:4.1.0" + dependencies: + buffer: "npm:^5.5.0" + inherits: "npm:^2.0.4" + readable-stream: "npm:^3.4.0" + checksum: 10c0/02847e1d2cb089c9dc6958add42e3cdeaf07d13f575973963335ac0fdece563a50ac770ac4c8fa06492d2dd276f6cc3b7f08c7cd9c7a7ad0f8d388b2a28def5f + languageName: node + linkType: hard + +"blueimp-md5@npm:^2.10.0": + version: 2.19.0 + resolution: "blueimp-md5@npm:2.19.0" + checksum: 10c0/85d04343537dd99a288c62450341dcce7380d3454c81f8e5a971ddd80307d6f9ef51b5b92ad7d48aaaa92fd6d3a1f6b2f4fada068faae646887f7bfabc17a346 + languageName: node + linkType: hard + +"bn.js@npm:^4.11.9": + version: 4.12.1 + resolution: "bn.js@npm:4.12.1" + checksum: 10c0/b7f37a0cd5e4b79142b6f4292d518b416be34ae55d6dd6b0f66f96550c8083a50ffbbf8bda8d0ab471158cb81aa74ea4ee58fe33c7802e4a30b13810e98df116 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.0": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + +"brace-expansion@npm:^2.0.1": + version: 2.0.1 + resolution: "brace-expansion@npm:2.0.1" + dependencies: + balanced-match: "npm:^1.0.0" + checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f + languageName: node + linkType: hard + +"braces@npm:^3.0.3, braces@npm:~3.0.2": + version: 3.0.3 + resolution: "braces@npm:3.0.3" + dependencies: + fill-range: "npm:^7.1.1" + checksum: 10c0/7c6dfd30c338d2997ba77500539227b9d1f85e388a5f43220865201e407e076783d0881f2d297b9f80951b4c957fcf0b51c1d2d24227631643c3f7c284b0aa04 + languageName: node + linkType: hard + +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + +"buffer@npm:^5.5.0": + version: 5.7.1 + resolution: "buffer@npm:5.7.1" + dependencies: + base64-js: "npm:^1.3.1" + ieee754: "npm:^1.1.13" + checksum: 10c0/27cac81cff434ed2876058d72e7c4789d11ff1120ef32c9de48f59eab58179b66710c488987d295ae89a228f835fc66d088652dffeb8e3ba8659f80eb091d55e + languageName: node + linkType: hard + +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + +"cacache@npm:^18.0.0": + version: 18.0.4 + resolution: "cacache@npm:18.0.4" + dependencies: + "@npmcli/fs": "npm:^3.1.0" + fs-minipass: "npm:^3.0.0" + glob: "npm:^10.2.2" + lru-cache: "npm:^10.0.1" + minipass: "npm:^7.0.3" + minipass-collect: "npm:^2.0.1" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + p-map: "npm:^4.0.0" + ssri: "npm:^10.0.0" + tar: "npm:^6.1.11" + unique-filename: "npm:^3.0.0" + checksum: 10c0/6c055bafed9de4f3dcc64ac3dc7dd24e863210902b7c470eb9ce55a806309b3efff78033e3d8b4f7dcc5d467f2db43c6a2857aaaf26f0094b8a351d44c42179f + languageName: node + linkType: hard + +"callsites@npm:^4.0.0": + version: 4.2.0 + resolution: "callsites@npm:4.2.0" + checksum: 10c0/8f7e269ec09fc0946bb22d838a8bc7932e1909ab4a833b964749f4d0e8bdeaa1f253287c4f911f61781f09620b6925ccd19a5ea4897489c4e59442c660c312a3 + languageName: node + linkType: hard + +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" + dependencies: + nofilter: "npm:^3.1.0" + checksum: 10c0/a836e2e7ea0efb1b9c4e5a4be906c57113d730cc42293a34072e0164ed110bb8ac035dc7dca2e3ebb641bd4b37e00fdbbf09c951aa864b3d4888a6ed8c6243f7 + languageName: node + linkType: hard + +"chalk@npm:^5.2.0, chalk@npm:^5.3.0": + version: 5.3.0 + resolution: "chalk@npm:5.3.0" + checksum: 10c0/8297d436b2c0f95801103ff2ef67268d362021b8210daf8ddbe349695333eb3610a71122172ff3b0272f1ef2cf7cc2c41fdaa4715f52e49ffe04c56340feed09 + languageName: node + linkType: hard + +"chokidar@npm:^3.5.3": + version: 3.6.0 + resolution: "chokidar@npm:3.6.0" + dependencies: + anymatch: "npm:~3.1.2" + braces: "npm:~3.0.2" + fsevents: "npm:~2.3.2" + glob-parent: "npm:~5.1.2" + is-binary-path: "npm:~2.1.0" + is-glob: "npm:~4.0.1" + normalize-path: "npm:~3.0.0" + readdirp: "npm:~3.6.0" + dependenciesMeta: + fsevents: + optional: true + checksum: 10c0/8361dcd013f2ddbe260eacb1f3cb2f2c6f2b0ad118708a343a5ed8158941a39cb8fb1d272e0f389712e74ee90ce8ba864eece9e0e62b9705cb468a2f6d917462 + languageName: node + linkType: hard + +"chownr@npm:^1.1.1": + version: 1.1.4 + resolution: "chownr@npm:1.1.4" + checksum: 10c0/ed57952a84cc0c802af900cf7136de643d3aba2eecb59d29344bc2f3f9bf703a301b9d84cdc71f82c3ffc9ccde831b0d92f5b45f91727d6c9da62f23aef9d9db + languageName: node + linkType: hard + +"chownr@npm:^2.0.0": + version: 2.0.0 + resolution: "chownr@npm:2.0.0" + checksum: 10c0/594754e1303672171cc04e50f6c398ae16128eb134a88f801bf5354fd96f205320f23536a045d9abd8b51024a149696e51231565891d4efdab8846021ecf88e6 + languageName: node + linkType: hard + +"chunkd@npm:^2.0.1": + version: 2.0.1 + resolution: "chunkd@npm:2.0.1" + checksum: 10c0/4e0c5aac6048ecedfa4cd0a5f6c4f010c70a7b7645aeca7bfeb47cb0733c3463054f0ced3f2667b2e0e67edd75d68a8e05481b01115ba3f8a952a93026254504 + languageName: node + linkType: hard + +"ci-info@npm:^3.8.0": + version: 3.9.0 + resolution: "ci-info@npm:3.9.0" + checksum: 10c0/6f0109e36e111684291d46123d491bc4e7b7a1934c3a20dea28cba89f1d4a03acd892f5f6a81ed3855c38647e285a150e3c9ba062e38943bef57fee6c1554c3a + languageName: node + linkType: hard + +"ci-parallel-vars@npm:^1.0.1": + version: 1.0.1 + resolution: "ci-parallel-vars@npm:1.0.1" + checksum: 10c0/80952f699cbbc146092b077b4f3e28d085620eb4e6be37f069b4dbb3db0ee70e8eec3beef4ebe70ff60631e9fc743b9d0869678489f167442cac08b260e5ac08 + languageName: node + linkType: hard + +"clean-stack@npm:^2.0.0": + version: 2.2.0 + resolution: "clean-stack@npm:2.2.0" + checksum: 10c0/1f90262d5f6230a17e27d0c190b09d47ebe7efdd76a03b5a1127863f7b3c9aec4c3e6c8bb3a7bbf81d553d56a1fd35728f5a8ef4c63f867ac8d690109742a8c1 + languageName: node + linkType: hard + +"clean-stack@npm:^4.0.0": + version: 4.2.0 + resolution: "clean-stack@npm:4.2.0" + dependencies: + escape-string-regexp: "npm:5.0.0" + checksum: 10c0/2bdf981a0fef0a23c14255df693b30eb9ae27eedf212470d8c400a0c0b6fb82fbf1ff8c5216ccd5721e3670b700389c886b1dce5070776dc9fbcc040957758c0 + languageName: node + linkType: hard + +"clean-yaml-object@npm:^0.1.0": + version: 0.1.0 + resolution: "clean-yaml-object@npm:0.1.0" + checksum: 10c0/a6505310590038afb9f0adc7f17a4c66787719c94d23f8491267ea4d9c405cdd378bd576ae1926169b6d997d4c59a8b86516bf4d16ba228280cf615598c58e05 + languageName: node + linkType: hard + +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: "npm:^5.0.0" + string-width: "npm:^5.0.0" + checksum: 10c0/a19088878409ec0e5dc2659a5166929629d93cfba6d68afc9cde2282fd4c751af5b555bf197047e31c87c574396348d011b7aa806fec29c4139ea4f7f00b324c + languageName: node + linkType: hard + +"cliui@npm:^8.0.1": + version: 8.0.1 + resolution: "cliui@npm:8.0.1" + dependencies: + string-width: "npm:^4.2.0" + strip-ansi: "npm:^6.0.1" + wrap-ansi: "npm:^7.0.0" + checksum: 10c0/4bda0f09c340cbb6dfdc1ed508b3ca080f12992c18d68c6be4d9cf51756033d5266e61ec57529e610dacbf4da1c634423b0c1b11037709cc6b09045cbd815df5 + languageName: node + linkType: hard + +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: "npm:^2.0.1" + checksum: 10c0/b6c5a06e039cecd2ab6a0e10ee0831de8362107d1f298ca3558b5f9004cb8e0260b02dd6c07f57b9a0e346c76864d2873311ee1989809fdeb05bd5fbbadde773 + languageName: node + linkType: hard + +"color-convert@npm:^2.0.1": + version: 2.0.1 + resolution: "color-convert@npm:2.0.1" + dependencies: + color-name: "npm:~1.1.4" + checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 + languageName: node + linkType: hard + +"color-name@npm:~1.1.4": + version: 1.1.4 + resolution: "color-name@npm:1.1.4" + checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 + languageName: node + linkType: hard + +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + +"common-path-prefix@npm:^3.0.0": + version: 3.0.0 + resolution: "common-path-prefix@npm:3.0.0" + checksum: 10c0/c4a74294e1b1570f4a8ab435285d185a03976c323caa16359053e749db4fde44e3e6586c29cd051100335e11895767cbbd27ea389108e327d62f38daf4548fdb + languageName: node + linkType: hard + +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + +"concordance@npm:^5.0.4": + version: 5.0.4 + resolution: "concordance@npm:5.0.4" + dependencies: + date-time: "npm:^3.1.0" + esutils: "npm:^2.0.3" + fast-diff: "npm:^1.2.0" + js-string-escape: "npm:^1.0.1" + lodash: "npm:^4.17.15" + md5-hex: "npm:^3.0.1" + semver: "npm:^7.3.2" + well-known-symbols: "npm:^2.0.0" + checksum: 10c0/59b440f330df3a7c9aa148ba588b3e99aed86acab225b4f01ffcea34ace4cf11f817e31153254e8f38ed48508998dad40b9106951a743c334d751f7ab21afb8a + languageName: node + linkType: hard + +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: 10c0/d90aa0e3b6a27f9d5265a8d32def3c5c855b3e823a9db1f26d772f8146d6b91020a2fdfd905ce8048a73fad3aaf836fef8188c67602c374405e2ae8396c4ac46 + languageName: node + linkType: hard + +"cosmjs-types@npm:^0.9.0": + version: 0.9.0 + resolution: "cosmjs-types@npm:0.9.0" + checksum: 10c0/bc20f4293fb34629d7c5f96bafe533987f753df957ff68eb078d0128ae5a418320cb945024441769a07bb9bc5dde9d22b972fd40d485933e5706ea191c43727b + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.0": + version: 7.0.3 + resolution: "cross-spawn@npm:7.0.3" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/5738c312387081c98d69c98e105b6327b069197f864a60593245d64c8089c8a0a744e16349281210d56835bb9274130d825a78b2ad6853ca13cfbeffc0c31750 + languageName: node + linkType: hard + +"cross-spawn@npm:^7.0.3": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: "npm:^1.0.1" + checksum: 10c0/32d197689ec32f035910202c1abb0dc6424dce01d7b51779c685119b380d98535c110ffff67a262fc7e367612a7dfd30d3d3055f9a6634b5a9dd1302de7ef11c + languageName: node + linkType: hard + +"date-time@npm:^3.1.0": + version: 3.1.0 + resolution: "date-time@npm:3.1.0" + dependencies: + time-zone: "npm:^1.0.0" + checksum: 10c0/aa3e2e930d74b0b9e90f69de7a16d3376e30f21f1f4ce9a2311d8fec32d760e776efea752dafad0ce188187265235229013036202be053fc2d7979813bfb6ded + languageName: node + linkType: hard + +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.4": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + +"decompress-response@npm:^6.0.0": + version: 6.0.0 + resolution: "decompress-response@npm:6.0.0" + dependencies: + mimic-response: "npm:^3.1.0" + checksum: 10c0/bd89d23141b96d80577e70c54fb226b2f40e74a6817652b80a116d7befb8758261ad073a8895648a29cc0a5947021ab66705cb542fa9c143c82022b27c5b175e + languageName: node + linkType: hard + +"deep-extend@npm:^0.6.0": + version: 0.6.0 + resolution: "deep-extend@npm:0.6.0" + checksum: 10c0/1c6b0abcdb901e13a44c7d699116d3d4279fdb261983122a3783e7273844d5f2537dc2e1c454a23fcf645917f93fbf8d07101c1d03c015a87faa662755212566 + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + +"detect-libc@npm:^2.0.0": + version: 2.0.3 + resolution: "detect-libc@npm:2.0.3" + checksum: 10c0/88095bda8f90220c95f162bf92cad70bd0e424913e655c20578600e35b91edc261af27531cf160a331e185c0ced93944bc7e09939143225f56312d7fd800fdb7 + languageName: node + linkType: hard + +"dir-glob@npm:^3.0.1": + version: 3.0.1 + resolution: "dir-glob@npm:3.0.1" + dependencies: + path-type: "npm:^4.0.0" + checksum: 10c0/dcac00920a4d503e38bb64001acb19df4efc14536ada475725e12f52c16777afdee4db827f55f13a908ee7efc0cb282e2e3dbaeeb98c0993dd93d1802d3bf00c + languageName: node + linkType: hard + +"eastasianwidth@npm:^0.2.0": + version: 0.2.0 + resolution: "eastasianwidth@npm:0.2.0" + checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 + languageName: node + linkType: hard + +"elliptic@npm:^6.5.4": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/8b24ef782eec8b472053793ea1e91ae6bee41afffdfcb78a81c0a53b191e715cbe1292aa07165958a9bbe675bd0955142560b1a007ffce7d6c765bcaf951a867 + languageName: node + linkType: hard + +"emittery@npm:^1.0.1": + version: 1.0.3 + resolution: "emittery@npm:1.0.3" + checksum: 10c0/91605d044f3891dd1f8ab731aeb94b520488b21e707f7064dcbcf5303bac3b4e7133dfa23c343ede1fc970340bd78a9b1aed522b805bc15104606bba630dd71e + languageName: node + linkType: hard + +"emoji-regex@npm:^8.0.0": + version: 8.0.0 + resolution: "emoji-regex@npm:8.0.0" + checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 + languageName: node + linkType: hard + +"emoji-regex@npm:^9.2.2": + version: 9.2.2 + resolution: "emoji-regex@npm:9.2.2" + checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 + languageName: node + linkType: hard + +"encoding@npm:^0.1.13": + version: 0.1.13 + resolution: "encoding@npm:0.1.13" + dependencies: + iconv-lite: "npm:^0.6.2" + checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 + languageName: node + linkType: hard + +"end-of-stream@npm:^1.1.0, end-of-stream@npm:^1.4.1": + version: 1.4.4 + resolution: "end-of-stream@npm:1.4.4" + dependencies: + once: "npm:^1.4.0" + checksum: 10c0/870b423afb2d54bb8d243c63e07c170409d41e20b47eeef0727547aea5740bd6717aca45597a9f2745525667a6b804c1e7bede41f856818faee5806dd9ff3975 + languageName: node + linkType: hard + +"env-paths@npm:^2.2.0": + version: 2.2.1 + resolution: "env-paths@npm:2.2.1" + checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 + languageName: node + linkType: hard + +"err-code@npm:^2.0.2": + version: 2.0.3 + resolution: "err-code@npm:2.0.3" + checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"escalade@npm:^3.1.1": + version: 3.2.0 + resolution: "escalade@npm:3.2.0" + checksum: 10c0/ced4dd3a78e15897ed3be74e635110bbf3b08877b0a41be50dcb325ee0e0b5f65fc2d50e9845194d7c4633f327e2e1c6cce00a71b617c5673df0374201d67f65 + languageName: node + linkType: hard + +"escape-string-regexp@npm:5.0.0, escape-string-regexp@npm:^5.0.0": + version: 5.0.0 + resolution: "escape-string-regexp@npm:5.0.0" + checksum: 10c0/6366f474c6f37a802800a435232395e04e9885919873e382b157ab7e8f0feb8fed71497f84a6f6a81a49aab41815522f5839112bd38026d203aea0c91622df95 + languageName: node + linkType: hard + +"escape-string-regexp@npm:^2.0.0": + version: 2.0.0 + resolution: "escape-string-regexp@npm:2.0.0" + checksum: 10c0/2530479fe8db57eace5e8646c9c2a9c80fa279614986d16dcc6bcaceb63ae77f05a851ba6c43756d816c61d7f4534baf56e3c705e3e0d884818a46808811c507 + languageName: node + linkType: hard + +"esprima@npm:^4.0.0": + version: 4.0.1 + resolution: "esprima@npm:4.0.1" + bin: + esparse: ./bin/esparse.js + esvalidate: ./bin/esvalidate.js + checksum: 10c0/ad4bab9ead0808cf56501750fd9d3fb276f6b105f987707d059005d57e182d18a7c9ec7f3a01794ebddcca676773e42ca48a32d67a250c9d35e009ca613caba3 + languageName: node + linkType: hard + +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.3": + version: 2.0.3 + resolution: "esutils@npm:2.0.3" + checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 + languageName: node + linkType: hard + +"execa@npm:^9.3.1": + version: 9.5.1 + resolution: "execa@npm:9.5.1" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^8.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^6.0.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/1a628d535c5a088f9e17a735bb3143efc4198095392b319ba877b2975d5c3c57724536dccb6f68f1cd9b3af331c5a9e8c1aeb338d52ab316b1e008ff453374a7 + languageName: node + linkType: hard + +"expand-template@npm:^2.0.3": + version: 2.0.3 + resolution: "expand-template@npm:2.0.3" + checksum: 10c0/1c9e7afe9acadf9d373301d27f6a47b34e89b3391b1ef38b7471d381812537ef2457e620ae7f819d2642ce9c43b189b3583813ec395e2938319abe356a9b2f51 + languageName: node + linkType: hard + +"exponential-backoff@npm:^3.1.1": + version: 3.1.1 + resolution: "exponential-backoff@npm:3.1.1" + checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 + languageName: node + linkType: hard + +"fast-check@npm:^3.0.0": + version: 3.23.1 + resolution: "fast-check@npm:3.23.1" + dependencies: + pure-rand: "npm:^6.1.0" + checksum: 10c0/d61ee4a7a2e1abc5126bf2f1894413f532f686b3d1fc15c67fefb60dcca66024934b69a6454d3eba92e6568ac1abbb9882080e212d255865c3b3bbe52c5bf702 + languageName: node + linkType: hard + +"fast-diff@npm:^1.2.0": + version: 1.3.0 + resolution: "fast-diff@npm:1.3.0" + checksum: 10c0/5c19af237edb5d5effda008c891a18a585f74bf12953be57923f17a3a4d0979565fc64dbc73b9e20926b9d895f5b690c618cbb969af0cf022e3222471220ad29 + languageName: node + linkType: hard + +"fast-glob@npm:^3.3.0": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": "npm:^2.0.2" + "@nodelib/fs.walk": "npm:^1.2.3" + glob-parent: "npm:^5.1.2" + merge2: "npm:^1.3.0" + micromatch: "npm:^4.0.4" + checksum: 10c0/42baad7b9cd40b63e42039132bde27ca2cb3a4950d0a0f9abe4639ea1aa9d3e3b40f98b1fe31cbc0cc17b664c9ea7447d911a152fa34ec5b72977b125a6fc845 + languageName: node + linkType: hard + +"fastq@npm:^1.6.0": + version: 1.17.1 + resolution: "fastq@npm:1.17.1" + dependencies: + reusify: "npm:^1.0.4" + checksum: 10c0/1095f16cea45fb3beff558bb3afa74ca7a9250f5a670b65db7ed585f92b4b48381445cd328b3d87323da81e43232b5d5978a8201bde84e0cd514310f1ea6da34 + languageName: node + linkType: hard + +"figures@npm:^5.0.0": + version: 5.0.0 + resolution: "figures@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + is-unicode-supported: "npm:^1.2.0" + checksum: 10c0/ce0f17d4ea8b0fc429c5207c343534a2f5284ecfb22aa08607da7dc84ed9e1cf754f5b97760e8dcb98d3c9d1a1e4d3d578fe3b5b99c426f05d0f06c7ba618e16 + languageName: node + linkType: hard + +"figures@npm:^6.1.0": + version: 6.1.0 + resolution: "figures@npm:6.1.0" + dependencies: + is-unicode-supported: "npm:^2.0.0" + checksum: 10c0/9159df4264d62ef447a3931537de92f5012210cf5135c35c010df50a2169377581378149abfe1eb238bd6acbba1c0d547b1f18e0af6eee49e30363cedaffcfe4 + languageName: node + linkType: hard + +"file-uri-to-path@npm:1.0.0": + version: 1.0.0 + resolution: "file-uri-to-path@npm:1.0.0" + checksum: 10c0/3b545e3a341d322d368e880e1c204ef55f1d45cdea65f7efc6c6ce9e0c4d22d802d5629320eb779d006fe59624ac17b0e848d83cc5af7cd101f206cb704f5519 + languageName: node + linkType: hard + +"fill-range@npm:^7.1.1": + version: 7.1.1 + resolution: "fill-range@npm:7.1.1" + dependencies: + to-regex-range: "npm:^5.0.1" + checksum: 10c0/b75b691bbe065472f38824f694c2f7449d7f5004aa950426a2c28f0306c60db9b880c0b0e4ed819997ffb882d1da02cfcfc819bddc94d71627f5269682edf018 + languageName: node + linkType: hard + +"find-up@npm:^6.0.0": + version: 6.3.0 + resolution: "find-up@npm:6.3.0" + dependencies: + locate-path: "npm:^7.1.0" + path-exists: "npm:^5.0.0" + checksum: 10c0/07e0314362d316b2b13f7f11ea4692d5191e718ca3f7264110127520f3347996349bf9e16805abae3e196805814bc66ef4bff2b8904dc4a6476085fc9b0eba07 + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"foreground-child@npm:^3.1.0": + version: 3.3.0 + resolution: "foreground-child@npm:3.3.0" + dependencies: + cross-spawn: "npm:^7.0.0" + signal-exit: "npm:^4.0.1" + checksum: 10c0/028f1d41000553fcfa6c4bb5c372963bf3d9bf0b1f25a87d1a6253014343fb69dfb1b42d9625d7cf44c8ba429940f3d0ff718b62105d4d4a4f6ef8ca0a53faa2 + languageName: node + linkType: hard + +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + +"fs-constants@npm:^1.0.0": + version: 1.0.0 + resolution: "fs-constants@npm:1.0.0" + checksum: 10c0/a0cde99085f0872f4d244e83e03a46aa387b74f5a5af750896c6b05e9077fac00e9932fdf5aef84f2f16634cd473c63037d7a512576da7d5c2b9163d1909f3a8 + languageName: node + linkType: hard + +"fs-minipass@npm:^2.0.0": + version: 2.1.0 + resolution: "fs-minipass@npm:2.1.0" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/703d16522b8282d7299337539c3ed6edddd1afe82435e4f5b76e34a79cd74e488a8a0e26a636afc2440e1a23b03878e2122e3a2cfe375a5cf63c37d92b86a004 + languageName: node + linkType: hard + +"fs-minipass@npm:^3.0.0": + version: 3.0.3 + resolution: "fs-minipass@npm:3.0.3" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 + languageName: node + linkType: hard + +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + +"fsevents@npm:~2.3.2": + version: 2.3.3 + resolution: "fsevents@npm:2.3.3" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 + conditions: os=darwin + languageName: node + linkType: hard + +"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin": + version: 2.3.3 + resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" + dependencies: + node-gyp: "npm:latest" + conditions: os=darwin + languageName: node + linkType: hard + +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"get-caller-file@npm:^2.0.5": + version: 2.0.5 + resolution: "get-caller-file@npm:2.0.5" + checksum: 10c0/c6c7b60271931fa752aeb92f2b47e355eac1af3a2673f47c9589e8f8a41adc74d45551c1bc57b5e66a80609f10ffb72b6f575e4370d61cc3f7f3aaff01757cde + languageName: node + linkType: hard + +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + languageName: node + linkType: hard + +"get-stream@npm:^9.0.0": + version: 9.0.1 + resolution: "get-stream@npm:9.0.1" + dependencies: + "@sec-ant/readable-stream": "npm:^0.4.1" + is-stream: "npm:^4.0.1" + checksum: 10c0/d70e73857f2eea1826ac570c3a912757dcfbe8a718a033fa0c23e12ac8e7d633195b01710e0559af574cbb5af101009b42df7b6f6b29ceec8dbdf7291931b948 + languageName: node + linkType: hard + +"github-from-package@npm:0.0.0": + version: 0.0.0 + resolution: "github-from-package@npm:0.0.0" + checksum: 10c0/737ee3f52d0a27e26332cde85b533c21fcdc0b09fb716c3f8e522cfaa9c600d4a631dec9fcde179ec9d47cca89017b7848ed4d6ae6b6b78f936c06825b1fcc12 + languageName: node + linkType: hard + +"glob-parent@npm:^5.1.2, glob-parent@npm:~5.1.2": + version: 5.1.2 + resolution: "glob-parent@npm:5.1.2" + dependencies: + is-glob: "npm:^4.0.1" + checksum: 10c0/cab87638e2112bee3f839ef5f6e0765057163d39c66be8ec1602f3823da4692297ad4e972de876ea17c44d652978638d2fd583c6713d0eb6591706825020c9ee + languageName: node + linkType: hard + +"glob@npm:^10.2.2, glob@npm:^10.3.10": + version: 10.4.5 + resolution: "glob@npm:10.4.5" + dependencies: + foreground-child: "npm:^3.1.0" + jackspeak: "npm:^3.1.2" + minimatch: "npm:^9.0.4" + minipass: "npm:^7.1.2" + package-json-from-dist: "npm:^1.0.0" + path-scurry: "npm:^1.11.1" + bin: + glob: dist/esm/bin.mjs + checksum: 10c0/19a9759ea77b8e3ca0a43c2f07ecddc2ad46216b786bb8f993c445aee80d345925a21e5280c7b7c6c59e860a0154b84e4b2b60321fea92cd3c56b4a7489f160e + languageName: node + linkType: hard + +"glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + +"globby@npm:^13.1.4": + version: 13.2.2 + resolution: "globby@npm:13.2.2" + dependencies: + dir-glob: "npm:^3.0.1" + fast-glob: "npm:^3.3.0" + ignore: "npm:^5.2.4" + merge2: "npm:^1.4.1" + slash: "npm:^4.0.0" + checksum: 10c0/a8d7cc7cbe5e1b2d0f81d467bbc5bc2eac35f74eaded3a6c85fc26d7acc8e6de22d396159db8a2fc340b8a342e74cac58de8f4aee74146d3d146921a76062664 + languageName: node + linkType: hard + +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.2.6": + version: 4.2.11 + resolution: "graceful-fs@npm:4.2.11" + checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"http-cache-semantics@npm:^4.1.1": + version: 4.1.1 + resolution: "http-cache-semantics@npm:4.1.1" + checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc + languageName: node + linkType: hard + +"http-proxy-agent@npm:^7.0.0": + version: 7.0.2 + resolution: "http-proxy-agent@npm:7.0.2" + dependencies: + agent-base: "npm:^7.1.0" + debug: "npm:^4.3.4" + checksum: 10c0/4207b06a4580fb85dd6dff521f0abf6db517489e70863dca1a0291daa7f2d3d2d6015a57bd702af068ea5cf9f1f6ff72314f5f5b4228d299c0904135d2aef921 + languageName: node + linkType: hard + +"https-proxy-agent@npm:^7.0.1": + version: 7.0.5 + resolution: "https-proxy-agent@npm:7.0.5" + dependencies: + agent-base: "npm:^7.0.2" + debug: "npm:4" + checksum: 10c0/2490e3acec397abeb88807db52cac59102d5ed758feee6df6112ab3ccd8325e8a1ce8bce6f4b66e5470eca102d31e425ace904242e4fa28dbe0c59c4bafa7b2c + languageName: node + linkType: hard + +"human-signals@npm:^8.0.0": + version: 8.0.0 + resolution: "human-signals@npm:8.0.0" + checksum: 10c0/e4dac4f7d3eb791ed04129fc6a85bd454a9102d3e3b76c911d0db7057ebd60b2956b435b5b5712aec18960488ede3c21ef7c56e42cdd70760c0d84d3c05cd92e + languageName: node + linkType: hard + +"iconv-lite@npm:^0.6.2": + version: 0.6.3 + resolution: "iconv-lite@npm:0.6.3" + dependencies: + safer-buffer: "npm:>= 2.1.2 < 3.0.0" + checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 + languageName: node + linkType: hard + +"ieee754@npm:^1.1.13": + version: 1.2.1 + resolution: "ieee754@npm:1.2.1" + checksum: 10c0/b0782ef5e0935b9f12883a2e2aa37baa75da6e66ce6515c168697b42160807d9330de9a32ec1ed73149aea02e0d822e572bca6f1e22bdcbd2149e13b050b17bb + languageName: node + linkType: hard + +"ignore-by-default@npm:^2.1.0": + version: 2.1.0 + resolution: "ignore-by-default@npm:2.1.0" + checksum: 10c0/3a6040dac25ed9da39dee73bf1634fdd1e15b0eb7cf52a6bdec81c310565782d8811c104ce40acb3d690d61c5fc38a91c78e6baee830a8a2232424dbc6b66981 + languageName: node + linkType: hard + +"ignore@npm:^5.2.4": + version: 5.3.2 + resolution: "ignore@npm:5.3.2" + checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.2.1": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 10c0/80873aebf0d2a66e824e278fb6cbb16a6660f86df49b367404e5de80928720ecb44f643243b46dc5c5fae506abb666ef54d6f281b45ee0f1034951acb2261eb5 + languageName: node + linkType: hard + +"imurmurhash@npm:^0.1.4": + version: 0.1.4 + resolution: "imurmurhash@npm:0.1.4" + checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 + languageName: node + linkType: hard + +"indent-string@npm:^4.0.0": + version: 4.0.0 + resolution: "indent-string@npm:4.0.0" + checksum: 10c0/1e1904ddb0cb3d6cce7cd09e27a90184908b7a5d5c21b92e232c93579d314f0b83c246ffb035493d0504b1e9147ba2c9b21df0030f48673fba0496ecd698161f + languageName: node + linkType: hard + +"indent-string@npm:^5.0.0": + version: 5.0.0 + resolution: "indent-string@npm:5.0.0" + checksum: 10c0/8ee77b57d92e71745e133f6f444d6fa3ed503ad0e1bcd7e80c8da08b42375c07117128d670589725ed07b1978065803fa86318c309ba45415b7fe13e7f170220 + languageName: node + linkType: hard + +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": + version: 2.0.4 + resolution: "inherits@npm:2.0.4" + checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 + languageName: node + linkType: hard + +"ini@npm:~1.3.0": + version: 1.3.8 + resolution: "ini@npm:1.3.8" + checksum: 10c0/ec93838d2328b619532e4f1ff05df7909760b6f66d9c9e2ded11e5c1897d6f2f9980c54dd638f88654b00919ce31e827040631eab0a3969e4d1abefa0719516a + languageName: node + linkType: hard + +"ip-address@npm:^9.0.5": + version: 9.0.5 + resolution: "ip-address@npm:9.0.5" + dependencies: + jsbn: "npm:1.1.0" + sprintf-js: "npm:^1.1.3" + checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc + languageName: node + linkType: hard + +"irregular-plurals@npm:^3.3.0": + version: 3.5.0 + resolution: "irregular-plurals@npm:3.5.0" + checksum: 10c0/7c033bbe7325e5a6e0a26949cc6863b6ce273403d4cd5b93bd99b33fecb6605b0884097c4259c23ed0c52c2133bf7d1cdcdd7a0630e8c325161fe269b3447918 + languageName: node + linkType: hard + +"is-binary-path@npm:~2.1.0": + version: 2.1.0 + resolution: "is-binary-path@npm:2.1.0" + dependencies: + binary-extensions: "npm:^2.0.0" + checksum: 10c0/a16eaee59ae2b315ba36fad5c5dcaf8e49c3e27318f8ab8fa3cdb8772bf559c8d1ba750a589c2ccb096113bb64497084361a25960899cb6172a6925ab6123d38 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 + languageName: node + linkType: hard + +"is-error@npm:^2.2.2": + version: 2.2.2 + resolution: "is-error@npm:2.2.2" + checksum: 10c0/475d3463968bf16e94485555d7cb7a879ed68685e08d365a3370972e626054f1846ebbb3934403091e06682445568601fe919e41646096e5007952d0c1f4fd9b + languageName: node + linkType: hard + +"is-extglob@npm:^2.1.1": + version: 2.1.1 + resolution: "is-extglob@npm:2.1.1" + checksum: 10c0/5487da35691fbc339700bbb2730430b07777a3c21b9ebaecb3072512dfd7b4ba78ac2381a87e8d78d20ea08affb3f1971b4af629173a6bf435ff8a4c47747912 + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^3.0.0": + version: 3.0.0 + resolution: "is-fullwidth-code-point@npm:3.0.0" + checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc + languageName: node + linkType: hard + +"is-fullwidth-code-point@npm:^4.0.0": + version: 4.0.0 + resolution: "is-fullwidth-code-point@npm:4.0.0" + checksum: 10c0/df2a717e813567db0f659c306d61f2f804d480752526886954a2a3e2246c7745fd07a52b5fecf2b68caf0a6c79dcdace6166fdf29cc76ed9975cc334f0a018b8 + languageName: node + linkType: hard + +"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": + version: 4.0.3 + resolution: "is-glob@npm:4.0.3" + dependencies: + is-extglob: "npm:^2.1.1" + checksum: 10c0/17fb4014e22be3bbecea9b2e3a76e9e34ff645466be702f1693e8f1ee1adac84710d0be0bd9f967d6354036fd51ab7c2741d954d6e91dae6bb69714de92c197a + languageName: node + linkType: hard + +"is-lambda@npm:^1.0.1": + version: 1.0.1 + resolution: "is-lambda@npm:1.0.1" + checksum: 10c0/85fee098ae62ba6f1e24cf22678805473c7afd0fb3978a3aa260e354cb7bcb3a5806cf0a98403188465efedec41ab4348e8e4e79305d409601323855b3839d4d + languageName: node + linkType: hard + +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + +"is-number@npm:^7.0.0": + version: 7.0.0 + resolution: "is-number@npm:7.0.0" + checksum: 10c0/b4686d0d3053146095ccd45346461bc8e53b80aeb7671cc52a4de02dbbf7dc0d1d2a986e2fe4ae206984b4d34ef37e8b795ebc4f4295c978373e6575e295d811 + languageName: node + linkType: hard + +"is-plain-obj@npm:^4.1.0": + version: 4.1.0 + resolution: "is-plain-obj@npm:4.1.0" + checksum: 10c0/32130d651d71d9564dc88ba7e6fda0e91a1010a3694648e9f4f47bb6080438140696d3e3e15c741411d712e47ac9edc1a8a9de1fe76f3487b0d90be06ac9975e + languageName: node + linkType: hard + +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + +"is-stream@npm:^4.0.1": + version: 4.0.1 + resolution: "is-stream@npm:4.0.1" + checksum: 10c0/2706c7f19b851327ba374687bc4a3940805e14ca496dc672b9629e744d143b1ad9c6f1b162dece81c7bfbc0f83b32b61ccc19ad2e05aad2dd7af347408f60c7f + languageName: node + linkType: hard + +"is-unicode-supported@npm:^1.2.0": + version: 1.3.0 + resolution: "is-unicode-supported@npm:1.3.0" + checksum: 10c0/b8674ea95d869f6faabddc6a484767207058b91aea0250803cbf1221345cb0c56f466d4ecea375dc77f6633d248d33c47bd296fb8f4cdba0b4edba8917e83d8a + languageName: node + linkType: hard + +"is-unicode-supported@npm:^2.0.0": + version: 2.1.0 + resolution: "is-unicode-supported@npm:2.1.0" + checksum: 10c0/a0f53e9a7c1fdbcf2d2ef6e40d4736fdffff1c9f8944c75e15425118ff3610172c87bf7bc6c34d3903b04be59790bb2212ddbe21ee65b5a97030fc50370545a5 + languageName: node + linkType: hard + +"isexe@npm:^2.0.0": + version: 2.0.0 + resolution: "isexe@npm:2.0.0" + checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d + languageName: node + linkType: hard + +"isexe@npm:^3.1.1": + version: 3.1.1 + resolution: "isexe@npm:3.1.1" + checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 + languageName: node + linkType: hard + +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + +"jackspeak@npm:^3.1.2": + version: 3.4.3 + resolution: "jackspeak@npm:3.4.3" + dependencies: + "@isaacs/cliui": "npm:^8.0.2" + "@pkgjs/parseargs": "npm:^0.11.0" + dependenciesMeta: + "@pkgjs/parseargs": + optional: true + checksum: 10c0/6acc10d139eaefdbe04d2f679e6191b3abf073f111edf10b1de5302c97ec93fffeb2fdd8681ed17f16268aa9dd4f8c588ed9d1d3bffbbfa6e8bf897cbb3149b9 + languageName: node + linkType: hard + +"jessie.js@npm:^0.3.4": + version: 0.3.4 + resolution: "jessie.js@npm:0.3.4" + dependencies: + "@endo/far": "npm:^1.0.0" + checksum: 10c0/853ab3f8a0e30df11742882f5e11479d1303033a5a203a247d8ffbf4c6f3f3d4bcbefa53084ae4632e6ab106e348f23dc988280486cbeaaf5d16487fa3d40e96 + languageName: node + linkType: hard + +"js-string-escape@npm:^1.0.1": + version: 1.0.1 + resolution: "js-string-escape@npm:1.0.1" + checksum: 10c0/2c33b9ff1ba6b84681c51ca0997e7d5a1639813c95d5b61cb7ad47e55cc28fa4a0b1935c3d218710d8e6bcee5d0cd8c44755231e3a4e45fc604534d9595a3628 + languageName: node + linkType: hard + +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + +"js-yaml@npm:^3.14.1": + version: 3.14.1 + resolution: "js-yaml@npm:3.14.1" + dependencies: + argparse: "npm:^1.0.7" + esprima: "npm:^4.0.0" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/6746baaaeac312c4db8e75fa22331d9a04cccb7792d126ed8ce6a0bbcfef0cedaddd0c5098fade53db067c09fe00aa1c957674b4765610a8b06a5a189e46433b + languageName: node + linkType: hard + +"jsbn@npm:1.1.0": + version: 1.1.0 + resolution: "jsbn@npm:1.1.0" + checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"libsodium-sumo@npm:^0.7.15": + version: 0.7.15 + resolution: "libsodium-sumo@npm:0.7.15" + checksum: 10c0/5a1437ccff03c72669e7b49da702034e171df9ff6a4e65698297ab63ad0bf8f889d3dd51494e29418c643143526d8d7f08cbba3929d220334cddbe3e74a1560e + languageName: node + linkType: hard + +"libsodium-wrappers-sumo@npm:^0.7.11": + version: 0.7.15 + resolution: "libsodium-wrappers-sumo@npm:0.7.15" + dependencies: + libsodium-sumo: "npm:^0.7.15" + checksum: 10c0/6da919a13395346d54f2ce4841adda8feb3fbb8a8c378ec5c93b7e6dc6353b379289349e659f3e017a9f1995ef396bf43f89c7ab4aab4e3b5ed85df62407d810 + languageName: node + linkType: hard + +"load-json-file@npm:^7.0.0": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: 10c0/7117459608a0b6329c7f78e6e1f541b3162dd901c29dd5af721fec8b270177d2e3d7999c971f344fff04daac368d052732e2c7146014bc84d15e0b636975e19a + languageName: node + linkType: hard + +"locate-path@npm:^7.1.0": + version: 7.2.0 + resolution: "locate-path@npm:7.2.0" + dependencies: + p-locate: "npm:^6.0.0" + checksum: 10c0/139e8a7fe11cfbd7f20db03923cacfa5db9e14fa14887ea121345597472b4a63c1a42a8a5187defeeff6acf98fd568da7382aa39682d38f0af27433953a97751 + languageName: node + linkType: hard + +"lodash@npm:^4.17.15": + version: 4.17.21 + resolution: "lodash@npm:4.17.21" + checksum: 10c0/d8cbea072bb08655bb4c989da418994b073a608dffa608b09ac04b43a791b12aeae7cd7ad919aa4c925f33b48490b5cfe6c1f71d827956071dae2e7bb3a6b74c + languageName: node + linkType: hard + +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + +"lru-cache@npm:^10.0.1, lru-cache@npm:^10.2.0": + version: 10.4.3 + resolution: "lru-cache@npm:10.4.3" + checksum: 10c0/ebd04fbca961e6c1d6c0af3799adcc966a1babe798f685bb84e6599266599cd95d94630b10262f5424539bc4640107e8a33aa28585374abf561d30d16f4b39fb + languageName: node + linkType: hard + +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + +"make-fetch-happen@npm:^13.0.0": + version: 13.0.1 + resolution: "make-fetch-happen@npm:13.0.1" + dependencies: + "@npmcli/agent": "npm:^2.0.0" + cacache: "npm:^18.0.0" + http-cache-semantics: "npm:^4.1.1" + is-lambda: "npm:^1.0.1" + minipass: "npm:^7.0.2" + minipass-fetch: "npm:^3.0.0" + minipass-flush: "npm:^1.0.5" + minipass-pipeline: "npm:^1.2.4" + negotiator: "npm:^0.6.3" + proc-log: "npm:^4.2.0" + promise-retry: "npm:^2.0.1" + ssri: "npm:^10.0.0" + checksum: 10c0/df5f4dbb6d98153b751bccf4dc4cc500de85a96a9331db9805596c46aa9f99d9555983954e6c1266d9f981ae37a9e4647f42b9a4bb5466f867f4012e582c9e7e + languageName: node + linkType: hard + +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: "npm:^1.0.0" + checksum: 10c0/7495236c7b0950956c144fd8b4bc6399d4e78072a8840a4232fe1c4faccbb5eb5d842e5c0a56a60afc36d723f315c1c672325ca03c1b328650f7fcc478f385fd + languageName: node + linkType: hard + +"matcher@npm:^5.0.0": + version: 5.0.0 + resolution: "matcher@npm:5.0.0" + dependencies: + escape-string-regexp: "npm:^5.0.0" + checksum: 10c0/eda5471fc9d5b7264d63c81727824adc3585ddb5cfdc5fce5a9b7c86f946ff181610735d330b1c37a84811df872d1290bf4e9401d2be2a414204343701144b18 + languageName: node + linkType: hard + +"md5-hex@npm:^3.0.1": + version: 3.0.1 + resolution: "md5-hex@npm:3.0.1" + dependencies: + blueimp-md5: "npm:^2.10.0" + checksum: 10c0/ee2b4d8da16b527b3a3fe4d7a96720f43afd07b46a82d49421208b5a126235fb75cfb30b80d4029514772c8844273f940bddfbf4155c787f968f3be4060d01e4 + languageName: node + linkType: hard + +"mem@npm:^9.0.2": + version: 9.0.2 + resolution: "mem@npm:9.0.2" + dependencies: + map-age-cleaner: "npm:^0.1.3" + mimic-fn: "npm:^4.0.0" + checksum: 10c0/c2c56141399e520d8f0e50186bb7e4b49300b33984dc919682f3f13e53dec0e6608fbd327d5ae99494f45061a3a05a8ee04ccba6dcf795c3c215b5aa906eb41f + languageName: node + linkType: hard + +"merge2@npm:^1.3.0, merge2@npm:^1.4.1": + version: 1.4.1 + resolution: "merge2@npm:1.4.1" + checksum: 10c0/254a8a4605b58f450308fc474c82ac9a094848081bf4c06778200207820e5193726dc563a0d2c16468810516a5c97d9d3ea0ca6585d23c58ccfff2403e8dbbeb + languageName: node + linkType: hard + +"micromatch@npm:^4.0.4": + version: 4.0.8 + resolution: "micromatch@npm:4.0.8" + dependencies: + braces: "npm:^3.0.3" + picomatch: "npm:^2.3.1" + checksum: 10c0/166fa6eb926b9553f32ef81f5f531d27b4ce7da60e5baf8c021d043b27a388fb95e46a8038d5045877881e673f8134122b59624d5cecbd16eb50a42e7a6b5ca8 + languageName: node + linkType: hard + +"microtime@npm:^3.1.0": + version: 3.1.1 + resolution: "microtime@npm:3.1.1" + dependencies: + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.4.0" + checksum: 10c0/02512993de914c6f71424d3b8b28ce53de44ba5895b904a213420fd4fc86a084c1d08ec0876ac60cdae6427022766e1b9b86d9b3442bf408701120bd61455e26 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + +"mimic-fn@npm:^4.0.0": + version: 4.0.0 + resolution: "mimic-fn@npm:4.0.0" + checksum: 10c0/de9cc32be9996fd941e512248338e43407f63f6d497abe8441fa33447d922e927de54d4cc3c1a3c6d652857acd770389d5a3823f311a744132760ce2be15ccbf + languageName: node + linkType: hard + +"mimic-response@npm:^3.1.0": + version: 3.1.0 + resolution: "mimic-response@npm:3.1.0" + checksum: 10c0/0d6f07ce6e03e9e4445bee655202153bdb8a98d67ee8dc965ac140900d7a2688343e6b4c9a72cfc9ef2f7944dfd76eef4ab2482eb7b293a68b84916bac735362 + languageName: node + linkType: hard + +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.1.1": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + +"minimatch@npm:^9.0.4": + version: 9.0.5 + resolution: "minimatch@npm:9.0.5" + dependencies: + brace-expansion: "npm:^2.0.1" + checksum: 10c0/de96cf5e35bdf0eab3e2c853522f98ffbe9a36c37797778d2665231ec1f20a9447a7e567cb640901f89e4daaa95ae5d70c65a9e8aa2bb0019b6facbc3c0575ed + languageName: node + linkType: hard + +"minimist@npm:^1.2.0, minimist@npm:^1.2.3": + version: 1.2.8 + resolution: "minimist@npm:1.2.8" + checksum: 10c0/19d3fcdca050087b84c2029841a093691a91259a47def2f18222f41e7645a0b7c44ef4b40e88a1e58a40c84d2ef0ee6047c55594d298146d0eb3f6b737c20ce6 + languageName: node + linkType: hard + +"minipass-collect@npm:^2.0.1": + version: 2.0.1 + resolution: "minipass-collect@npm:2.0.1" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e + languageName: node + linkType: hard + +"minipass-fetch@npm:^3.0.0": + version: 3.0.5 + resolution: "minipass-fetch@npm:3.0.5" + dependencies: + encoding: "npm:^0.1.13" + minipass: "npm:^7.0.3" + minipass-sized: "npm:^1.0.3" + minizlib: "npm:^2.1.2" + dependenciesMeta: + encoding: + optional: true + checksum: 10c0/9d702d57f556274286fdd97e406fc38a2f5c8d15e158b498d7393b1105974b21249289ec571fa2b51e038a4872bfc82710111cf75fae98c662f3d6f95e72152b + languageName: node + linkType: hard + +"minipass-flush@npm:^1.0.5": + version: 1.0.5 + resolution: "minipass-flush@npm:1.0.5" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd + languageName: node + linkType: hard + +"minipass-pipeline@npm:^1.2.4": + version: 1.2.4 + resolution: "minipass-pipeline@npm:1.2.4" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 + languageName: node + linkType: hard + +"minipass-sized@npm:^1.0.3": + version: 1.0.3 + resolution: "minipass-sized@npm:1.0.3" + dependencies: + minipass: "npm:^3.0.0" + checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb + languageName: node + linkType: hard + +"minipass@npm:^3.0.0": + version: 3.3.6 + resolution: "minipass@npm:3.3.6" + dependencies: + yallist: "npm:^4.0.0" + checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c + languageName: node + linkType: hard + +"minipass@npm:^5.0.0": + version: 5.0.0 + resolution: "minipass@npm:5.0.0" + checksum: 10c0/a91d8043f691796a8ac88df039da19933ef0f633e3d7f0d35dcd5373af49131cf2399bfc355f41515dc495e3990369c3858cd319e5c2722b4753c90bf3152462 + languageName: node + linkType: hard + +"minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.1.2": + version: 7.1.2 + resolution: "minipass@npm:7.1.2" + checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 + languageName: node + linkType: hard + +"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": + version: 2.1.2 + resolution: "minizlib@npm:2.1.2" + dependencies: + minipass: "npm:^3.0.0" + yallist: "npm:^4.0.0" + checksum: 10c0/64fae024e1a7d0346a1102bb670085b17b7f95bf6cfdf5b128772ec8faf9ea211464ea4add406a3a6384a7d87a0cd1a96263692134323477b4fb43659a6cab78 + languageName: node + linkType: hard + +"mkdirp-classic@npm:^0.5.2, mkdirp-classic@npm:^0.5.3": + version: 0.5.3 + resolution: "mkdirp-classic@npm:0.5.3" + checksum: 10c0/95371d831d196960ddc3833cc6907e6b8f67ac5501a6582f47dfae5eb0f092e9f8ce88e0d83afcae95d6e2b61a01741ba03714eeafb6f7a6e9dcc158ac85b168 + languageName: node + linkType: hard + +"mkdirp@npm:^1.0.3": + version: 1.0.4 + resolution: "mkdirp@npm:1.0.4" + bin: + mkdirp: bin/cmd.js + checksum: 10c0/46ea0f3ffa8bc6a5bc0c7081ffc3907777f0ed6516888d40a518c5111f8366d97d2678911ad1a6882bf592fa9de6c784fea32e1687bb94e1f4944170af48a5cf + languageName: node + linkType: hard + +"ms@npm:^2.1.3": + version: 2.1.3 + resolution: "ms@npm:2.1.3" + checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 + languageName: node + linkType: hard + +"napi-build-utils@npm:^1.0.1": + version: 1.0.2 + resolution: "napi-build-utils@npm:1.0.2" + checksum: 10c0/37fd2cd0ff2ad20073ce78d83fd718a740d568b225924e753ae51cb69d68f330c80544d487e5e5bd18e28702ed2ca469c2424ad948becd1862c1b0209542b2e9 + languageName: node + linkType: hard + +"negotiator@npm:^0.6.3": + version: 0.6.3 + resolution: "negotiator@npm:0.6.3" + checksum: 10c0/3ec9fd413e7bf071c937ae60d572bc67155262068ed522cf4b3be5edbe6ddf67d095ec03a3a14ebf8fc8e95f8e1d61be4869db0dbb0de696f6b837358bd43fc2 + languageName: node + linkType: hard + +"node-abi@npm:^3.3.0": + version: 3.71.0 + resolution: "node-abi@npm:3.71.0" + dependencies: + semver: "npm:^7.3.5" + checksum: 10c0/dbd0792ea729329cd9d099f28a5681ff9e8a6db48cf64e1437bf6a7fd669009d1e758a784619a1c4cc8bfd1ed17162f042c787654edf19a1f64b5018457c9c1f + languageName: node + linkType: hard + +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.4.0": + version: 4.8.3 + resolution: "node-gyp-build@npm:4.8.3" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/a7f43c4128d817db80bb0884f631121449ac586b4a3e708eab0db6fcb7fa0d2e66f6d7d4ee1f49469409de4a9b2e413926befe2dce70b850c6c583a3bbe228d2 + languageName: node + linkType: hard + +"node-gyp@npm:latest": + version: 10.2.0 + resolution: "node-gyp@npm:10.2.0" + dependencies: + env-paths: "npm:^2.2.0" + exponential-backoff: "npm:^3.1.1" + glob: "npm:^10.3.10" + graceful-fs: "npm:^4.2.6" + make-fetch-happen: "npm:^13.0.0" + nopt: "npm:^7.0.0" + proc-log: "npm:^4.1.0" + semver: "npm:^7.3.5" + tar: "npm:^6.2.1" + which: "npm:^4.0.0" + bin: + node-gyp: bin/node-gyp.js + checksum: 10c0/00630d67dbd09a45aee0a5d55c05e3916ca9e6d427ee4f7bc392d2d3dc5fad7449b21fc098dd38260a53d9dcc9c879b36704a1994235d4707e7271af7e9a835b + languageName: node + linkType: hard + +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 10c0/92459f3864a067b347032263f0b536223cbfc98153913b5dce350cb39c8470bc1813366e41993f22c33cc6400c0f392aa324a4b51e24c22040635c1cdb046499 + languageName: node + linkType: hard + +"nopt@npm:^7.0.0": + version: 7.2.1 + resolution: "nopt@npm:7.2.1" + dependencies: + abbrev: "npm:^2.0.0" + bin: + nopt: bin/nopt.js + checksum: 10c0/a069c7c736767121242037a22a788863accfa932ab285a1eb569eb8cd534b09d17206f68c37f096ae785647435e0c5a5a0a67b42ec743e481a455e5ae6a6df81 + languageName: node + linkType: hard + +"normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": + version: 3.0.0 + resolution: "normalize-path@npm:3.0.0" + checksum: 10c0/e008c8142bcc335b5e38cf0d63cfd39d6cf2d97480af9abdbe9a439221fd4d749763bab492a8ee708ce7a194bb00c9da6d0a115018672310850489137b3da046 + languageName: node + linkType: hard + +"npm-run-path@npm:^6.0.0": + version: 6.0.0 + resolution: "npm-run-path@npm:6.0.0" + dependencies: + path-key: "npm:^4.0.0" + unicorn-magic: "npm:^0.3.0" + checksum: 10c0/b223c8a0dcd608abf95363ea5c3c0ccc3cd877daf0102eaf1b0f2390d6858d8337fbb7c443af2403b067a7d2c116d10691ecd22ab3c5273c44da1ff8d07753bd + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": + version: 1.4.0 + resolution: "once@npm:1.4.0" + dependencies: + wrappy: "npm:1" + checksum: 10c0/5d48aca287dfefabd756621c5dfce5c91a549a93e9fdb7b8246bc4c4790aa2ec17b34a260530474635147aeb631a2dcc8b32c613df0675f96041cbb8244517d0 + languageName: node + linkType: hard + +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 10c0/ed603c3790e74b061ac2cb07eb6e65802cf58dce0fbee646c113a7b71edb711101329ad38f99e462bd2e343a74f6e9366b496a35f1d766c187084d3109900487 + languageName: node + linkType: hard + +"p-event@npm:^5.0.1": + version: 5.0.1 + resolution: "p-event@npm:5.0.1" + dependencies: + p-timeout: "npm:^5.0.2" + checksum: 10c0/2317171489537f316661fa863f3bb711b2ceb89182937238422cec10223cbb958c432d6c26a238446a622d788187bdd295b1d8ecedbe2e467e045930d60202b0 + languageName: node + linkType: hard + +"p-limit@npm:^4.0.0": + version: 4.0.0 + resolution: "p-limit@npm:4.0.0" + dependencies: + yocto-queue: "npm:^1.0.0" + checksum: 10c0/a56af34a77f8df2ff61ddfb29431044557fcbcb7642d5a3233143ebba805fc7306ac1d448de724352861cb99de934bc9ab74f0d16fe6a5460bdbdf938de875ad + languageName: node + linkType: hard + +"p-locate@npm:^6.0.0": + version: 6.0.0 + resolution: "p-locate@npm:6.0.0" + dependencies: + p-limit: "npm:^4.0.0" + checksum: 10c0/d72fa2f41adce59c198270aa4d3c832536c87a1806e0f69dffb7c1a7ca998fb053915ca833d90f166a8c082d3859eabfed95f01698a3214c20df6bb8de046312 + languageName: node + linkType: hard + +"p-map@npm:^4.0.0": + version: 4.0.0 + resolution: "p-map@npm:4.0.0" + dependencies: + aggregate-error: "npm:^3.0.0" + checksum: 10c0/592c05bd6262c466ce269ff172bb8de7c6975afca9b50c975135b974e9bdaafbfe80e61aaaf5be6d1200ba08b30ead04b88cfa7e25ff1e3b93ab28c9f62a2c75 + languageName: node + linkType: hard + +"p-map@npm:^5.5.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" + dependencies: + aggregate-error: "npm:^4.0.0" + checksum: 10c0/410bce846b1e3db6bb2ccab6248372ecf4e635fc2b31331c8f56478e73fec9e146e8b4547585e635703160a3d252a6a65b8f855834aebc2c3408eb5789630cc4 + languageName: node + linkType: hard + +"p-timeout@npm:^5.0.2": + version: 5.1.0 + resolution: "p-timeout@npm:5.1.0" + checksum: 10c0/1b026cf9d5878c64bec4341ca9cda8ec6b8b3aea8a57885ca0fe2b35753a20d767fb6f9d3aa41e1252f42bc95432c05ea33b6b18f271fb10bfb0789591850a41 + languageName: node + linkType: hard + +"package-json-from-dist@npm:^1.0.0": + version: 1.0.1 + resolution: "package-json-from-dist@npm:1.0.1" + checksum: 10c0/62ba2785eb655fec084a257af34dbe24292ab74516d6aecef97ef72d4897310bc6898f6c85b5cd22770eaa1ce60d55a0230e150fb6a966e3ecd6c511e23d164b + languageName: node + linkType: hard + +"parse-ms@npm:^3.0.0": + version: 3.0.0 + resolution: "parse-ms@npm:3.0.0" + checksum: 10c0/056b4a32a9d3749f3f4cfffefb45c45540491deaa8e1d8ad43c2ddde7ba04edd076bd1b298f521238bb5fb084a9b2c4a2ebb78aefa651afbc4c2b0af4232fc54 + languageName: node + linkType: hard + +"parse-ms@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-ms@npm:4.0.0" + checksum: 10c0/a7900f4f1ebac24cbf5e9708c16fb2fd482517fad353aecd7aefb8c2ba2f85ce017913ccb8925d231770404780df46244ea6fec598b3bde6490882358b4d2d16 + languageName: node + linkType: hard + +"path-exists@npm:^5.0.0": + version: 5.0.0 + resolution: "path-exists@npm:5.0.0" + checksum: 10c0/b170f3060b31604cde93eefdb7392b89d832dfbc1bed717c9718cbe0f230c1669b7e75f87e19901da2250b84d092989a0f9e44d2ef41deb09aa3ad28e691a40a + languageName: node + linkType: hard + +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^3.1.0": + version: 3.1.1 + resolution: "path-key@npm:3.1.1" + checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c + languageName: node + linkType: hard + +"path-key@npm:^4.0.0": + version: 4.0.0 + resolution: "path-key@npm:4.0.0" + checksum: 10c0/794efeef32863a65ac312f3c0b0a99f921f3e827ff63afa5cb09a377e202c262b671f7b3832a4e64731003fa94af0263713962d317b9887bd1e0c48a342efba3 + languageName: node + linkType: hard + +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + +"path-scurry@npm:^1.11.1": + version: 1.11.1 + resolution: "path-scurry@npm:1.11.1" + dependencies: + lru-cache: "npm:^10.2.0" + minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" + checksum: 10c0/32a13711a2a505616ae1cc1b5076801e453e7aae6ac40ab55b388bb91b9d0547a52f5aaceff710ea400205f18691120d4431e520afbe4266b836fadede15872d + languageName: node + linkType: hard + +"path-type@npm:^4.0.0": + version: 4.0.0 + resolution: "path-type@npm:4.0.0" + checksum: 10c0/666f6973f332f27581371efaf303fd6c272cc43c2057b37aa99e3643158c7e4b2626549555d88626e99ea9e046f82f32e41bbde5f1508547e9a11b149b52387c + languageName: node + linkType: hard + +"picocolors@npm:^1.0.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": + version: 2.3.1 + resolution: "picomatch@npm:2.3.1" + checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be + languageName: node + linkType: hard + +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pkg-conf@npm:^4.0.0": + version: 4.0.0 + resolution: "pkg-conf@npm:4.0.0" + dependencies: + find-up: "npm:^6.0.0" + load-json-file: "npm:^7.0.0" + checksum: 10c0/27d027609f27228edcde121f6f707b4ba1f5488e95e98f2e58652ae4e99792081bd1de67d591f4a0f05b02c0b66d745591d49f82041cbc8d41e2238ef5d73eb4 + languageName: node + linkType: hard + +"plur@npm:^5.1.0": + version: 5.1.0 + resolution: "plur@npm:5.1.0" + dependencies: + irregular-plurals: "npm:^3.3.0" + checksum: 10c0/26bb622b8545fcfd47bbf56fbcca66c08693708a232e403fa3589e00003c56c14231ac57c7588ca5db83ef4be1f61383402c4ea954000768f779f8aef6eb6da8 + languageName: node + linkType: hard + +"prebuild-install@npm:^7.1.1": + version: 7.1.2 + resolution: "prebuild-install@npm:7.1.2" + dependencies: + detect-libc: "npm:^2.0.0" + expand-template: "npm:^2.0.3" + github-from-package: "npm:0.0.0" + minimist: "npm:^1.2.3" + mkdirp-classic: "npm:^0.5.3" + napi-build-utils: "npm:^1.0.1" + node-abi: "npm:^3.3.0" + pump: "npm:^3.0.0" + rc: "npm:^1.2.7" + simple-get: "npm:^4.0.0" + tar-fs: "npm:^2.0.0" + tunnel-agent: "npm:^0.6.0" + bin: + prebuild-install: bin.js + checksum: 10c0/e64868ba9ef2068fd7264f5b03e5298a901e02a450acdb1f56258d88c09dea601eefdb3d1dfdff8513fdd230a92961712be0676192626a3b4d01ba154d48bdd3 + languageName: node + linkType: hard + +"pretty-ms@npm:^8.0.0": + version: 8.0.0 + resolution: "pretty-ms@npm:8.0.0" + dependencies: + parse-ms: "npm:^3.0.0" + checksum: 10c0/e960d633ecca45445cf5c6dffc0f5e4bef6744c92449ab0e8c6c704800675ab71e181c5e02ece5265e02137a33e313d3f3e355fbf8ea30b4b5b23de423329f8d + languageName: node + linkType: hard + +"pretty-ms@npm:^9.0.0": + version: 9.2.0 + resolution: "pretty-ms@npm:9.2.0" + dependencies: + parse-ms: "npm:^4.0.0" + checksum: 10c0/ab6d066f90e9f77020426986e1b018369f41575674544c539aabec2e63a20fec01166d8cf6571d0e165ad11cfe5a8134a2a48a36d42ab291c59c6deca5264cbb + languageName: node + linkType: hard + +"proc-log@npm:^4.1.0, proc-log@npm:^4.2.0": + version: 4.2.0 + resolution: "proc-log@npm:4.2.0" + checksum: 10c0/17db4757c2a5c44c1e545170e6c70a26f7de58feb985091fb1763f5081cab3d01b181fb2dd240c9f4a4255a1d9227d163d5771b7e69c9e49a561692db865efb9 + languageName: node + linkType: hard + +"promise-retry@npm:^2.0.1": + version: 2.0.1 + resolution: "promise-retry@npm:2.0.1" + dependencies: + err-code: "npm:^2.0.2" + retry: "npm:^0.12.0" + checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 + languageName: node + linkType: hard + +"protobufjs@npm:^6.8.8": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/c244d7b9b6d3258193da5c0d1e558dfb47f208ae345e209f90ec45c9dca911b90fa17e937892a9a39a4136ab9886981aae9efdf6039f7baff4f7225f5eeb9812 + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + +"pump@npm:^3.0.0": + version: 3.0.2 + resolution: "pump@npm:3.0.2" + dependencies: + end-of-stream: "npm:^1.1.0" + once: "npm:^1.3.1" + checksum: 10c0/5ad655cb2a7738b4bcf6406b24ad0970d680649d996b55ad20d1be8e0c02394034e4c45ff7cd105d87f1e9b96a0e3d06fd28e11fae8875da26e7f7a8e2c9726f + languageName: node + linkType: hard + +"pure-rand@npm:^6.1.0": + version: 6.1.0 + resolution: "pure-rand@npm:6.1.0" + checksum: 10c0/1abe217897bf74dcb3a0c9aba3555fe975023147b48db540aa2faf507aee91c03bf54f6aef0eb2bf59cc259a16d06b28eca37f0dc426d94f4692aeff02fb0e65 + languageName: node + linkType: hard + +"queue-microtask@npm:^1.2.2": + version: 1.2.3 + resolution: "queue-microtask@npm:1.2.3" + checksum: 10c0/900a93d3cdae3acd7d16f642c29a642aea32c2026446151f0778c62ac089d4b8e6c986811076e1ae180a694cedf077d453a11b58ff0a865629a4f82ab558e102 + languageName: node + linkType: hard + +"rc@npm:^1.2.7": + version: 1.2.8 + resolution: "rc@npm:1.2.8" + dependencies: + deep-extend: "npm:^0.6.0" + ini: "npm:~1.3.0" + minimist: "npm:^1.2.0" + strip-json-comments: "npm:~2.0.1" + bin: + rc: ./cli.js + checksum: 10c0/24a07653150f0d9ac7168e52943cc3cb4b7a22c0e43c7dff3219977c2fdca5a2760a304a029c20811a0e79d351f57d46c9bde216193a0f73978496afc2b85b15 + languageName: node + linkType: hard + +"readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": + version: 3.6.2 + resolution: "readable-stream@npm:3.6.2" + dependencies: + inherits: "npm:^2.0.3" + string_decoder: "npm:^1.1.1" + util-deprecate: "npm:^1.0.1" + checksum: 10c0/e37be5c79c376fdd088a45fa31ea2e423e5d48854be7a22a58869b4e84d25047b193f6acb54f1012331e1bcd667ffb569c01b99d36b0bd59658fb33f513511b7 + languageName: node + linkType: hard + +"readdirp@npm:~3.6.0": + version: 3.6.0 + resolution: "readdirp@npm:3.6.0" + dependencies: + picomatch: "npm:^2.2.1" + checksum: 10c0/6fa848cf63d1b82ab4e985f4cf72bd55b7dcfd8e0a376905804e48c3634b7e749170940ba77b32804d5fe93b3cc521aa95a8d7e7d725f830da6d93f3669ce66b + languageName: node + linkType: hard + +"readonly-date@npm:^1.0.0": + version: 1.0.0 + resolution: "readonly-date@npm:1.0.0" + checksum: 10c0/7ab32bf19f6bfec102584a524fa79a289e6ede0bf20c80fd90ab309962e45b71d19dd0e3915dff6e81edf226f08fda65e890539b4aca74668921790b10471356 + languageName: node + linkType: hard + +"require-directory@npm:^2.1.1": + version: 2.1.1 + resolution: "require-directory@npm:2.1.1" + checksum: 10c0/83aa76a7bc1531f68d92c75a2ca2f54f1b01463cb566cf3fbc787d0de8be30c9dbc211d1d46be3497dac5785fe296f2dd11d531945ac29730643357978966e99 + languageName: node + linkType: hard + +"resolve-cwd@npm:^3.0.0": + version: 3.0.0 + resolution: "resolve-cwd@npm:3.0.0" + dependencies: + resolve-from: "npm:^5.0.0" + checksum: 10c0/e608a3ebd15356264653c32d7ecbc8fd702f94c6703ea4ac2fb81d9c359180cba0ae2e6b71faa446631ed6145454d5a56b227efc33a2d40638ac13f8beb20ee4 + languageName: node + linkType: hard + +"resolve-from@npm:^5.0.0": + version: 5.0.0 + resolution: "resolve-from@npm:5.0.0" + checksum: 10c0/b21cb7f1fb746de8107b9febab60095187781137fd803e6a59a76d421444b1531b641bba5857f5dc011974d8a5c635d61cec49e6bd3b7fc20e01f0fafc4efbf2 + languageName: node + linkType: hard + +"resolve@npm:^1.17.0, resolve@npm:^1.19.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + +"retry@npm:^0.12.0": + version: 0.12.0 + resolution: "retry@npm:0.12.0" + checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe + languageName: node + linkType: hard + +"reusify@npm:^1.0.4": + version: 1.0.4 + resolution: "reusify@npm:1.0.4" + checksum: 10c0/c19ef26e4e188f408922c46f7ff480d38e8dfc55d448310dfb518736b23ed2c4f547fb64a6ed5bdba92cd7e7ddc889d36ff78f794816d5e71498d645ef476107 + languageName: node + linkType: hard + +"rollup@npm:^2.79.1": + version: 2.79.2 + resolution: "rollup@npm:2.79.2" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/bc3746c988d903c2211266ddc539379d53d92689b9cc5c2b4e3ae161689de9af491957a567c629b6cc81f48d0928a7591fc4c383fba68a48d2966c9fb8a2bce9 + languageName: node + linkType: hard + +"root-workspace-0b6124@workspace:.": + version: 0.0.0-use.local + resolution: "root-workspace-0b6124@workspace:." + dependencies: + "@agoric/client-utils": "npm:dev" + "@agoric/synthetic-chain": "npm:^0.4.3" + "@endo/init": "npm:^1.1.7" + ava: "npm:^5.3.1" + languageName: unknown + linkType: soft + +"run-parallel@npm:^1.1.9": + version: 1.2.0 + resolution: "run-parallel@npm:1.2.0" + dependencies: + queue-microtask: "npm:^1.2.2" + checksum: 10c0/200b5ab25b5b8b7113f9901bfe3afc347e19bb7475b267d55ad0eb86a62a46d77510cb0f232507c9e5d497ebda569a08a9867d0d14f57a82ad5564d991588b39 + languageName: node + linkType: hard + +"safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": + version: 5.2.1 + resolution: "safe-buffer@npm:5.2.1" + checksum: 10c0/6501914237c0a86e9675d4e51d89ca3c21ffd6a31642efeba25ad65720bce6921c9e7e974e5be91a786b25aa058b5303285d3c15dbabf983a919f5f630d349f3 + languageName: node + linkType: hard + +"safer-buffer@npm:>= 2.1.2 < 3.0.0": + version: 2.1.2 + resolution: "safer-buffer@npm:2.1.2" + checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 + languageName: node + linkType: hard + +"semver@npm:^6.3.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + +"semver@npm:^7.3.2, semver@npm:^7.3.5": + version: 7.6.3 + resolution: "semver@npm:7.6.3" + bin: + semver: bin/semver.js + checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf + languageName: node + linkType: hard + +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: "npm:^0.13.1" + checksum: 10c0/7982937d578cd901276c8ab3e2c6ed8a4c174137730f1fb0402d005af209a0e84d04acc874e317c936724c7b5b26c7a96ff7e4b8d11a469f4924a4b0ea814c05 + languageName: node + linkType: hard + +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 + languageName: node + linkType: hard + +"shebang-command@npm:^2.0.0": + version: 2.0.0 + resolution: "shebang-command@npm:2.0.0" + dependencies: + shebang-regex: "npm:^3.0.0" + checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e + languageName: node + linkType: hard + +"shebang-regex@npm:^3.0.0": + version: 3.0.0 + resolution: "shebang-regex@npm:3.0.0" + checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 + languageName: node + linkType: hard + +"signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": + version: 4.1.0 + resolution: "signal-exit@npm:4.1.0" + checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 + languageName: node + linkType: hard + +"simple-concat@npm:^1.0.0": + version: 1.0.1 + resolution: "simple-concat@npm:1.0.1" + checksum: 10c0/62f7508e674414008910b5397c1811941d457dfa0db4fd5aa7fa0409eb02c3609608dfcd7508cace75b3a0bf67a2a77990711e32cd213d2c76f4fd12ee86d776 + languageName: node + linkType: hard + +"simple-get@npm:^4.0.0": + version: 4.0.1 + resolution: "simple-get@npm:4.0.1" + dependencies: + decompress-response: "npm:^6.0.0" + once: "npm:^1.3.1" + simple-concat: "npm:^1.0.0" + checksum: 10c0/b0649a581dbca741babb960423248899203165769747142033479a7dc5e77d7b0fced0253c731cd57cf21e31e4d77c9157c3069f4448d558ebc96cf9e1eebcf0 + languageName: node + linkType: hard + +"slash@npm:^4.0.0": + version: 4.0.0 + resolution: "slash@npm:4.0.0" + checksum: 10c0/b522ca75d80d107fd30d29df0549a7b2537c83c4c4ecd12cd7d4ea6c8aaca2ab17ada002e7a1d78a9d736a0261509f26ea5b489082ee443a3a810586ef8eff18 + languageName: node + linkType: hard + +"slice-ansi@npm:^5.0.0": + version: 5.0.0 + resolution: "slice-ansi@npm:5.0.0" + dependencies: + ansi-styles: "npm:^6.0.0" + is-fullwidth-code-point: "npm:^4.0.0" + checksum: 10c0/2d4d40b2a9d5cf4e8caae3f698fe24ae31a4d778701724f578e984dcb485ec8c49f0c04dab59c401821e80fcdfe89cace9c66693b0244e40ec485d72e543914f + languageName: node + linkType: hard + +"smart-buffer@npm:^4.2.0": + version: 4.2.0 + resolution: "smart-buffer@npm:4.2.0" + checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 + languageName: node + linkType: hard + +"socks-proxy-agent@npm:^8.0.3": + version: 8.0.4 + resolution: "socks-proxy-agent@npm:8.0.4" + dependencies: + agent-base: "npm:^7.1.1" + debug: "npm:^4.3.4" + socks: "npm:^2.8.3" + checksum: 10c0/345593bb21b95b0508e63e703c84da11549f0a2657d6b4e3ee3612c312cb3a907eac10e53b23ede3557c6601d63252103494caa306b66560f43af7b98f53957a + languageName: node + linkType: hard + +"socks@npm:^2.8.3": + version: 2.8.3 + resolution: "socks@npm:2.8.3" + dependencies: + ip-address: "npm:^9.0.5" + smart-buffer: "npm:^4.2.0" + checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 + languageName: node + linkType: hard + +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + +"sprintf-js@npm:^1.1.3": + version: 1.1.3 + resolution: "sprintf-js@npm:1.1.3" + checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec + languageName: node + linkType: hard + +"sprintf-js@npm:~1.0.2": + version: 1.0.3 + resolution: "sprintf-js@npm:1.0.3" + checksum: 10c0/ecadcfe4c771890140da5023d43e190b7566d9cf8b2d238600f31bec0fc653f328da4450eb04bd59a431771a8e9cc0e118f0aa3974b683a4981b4e07abc2a5bb + languageName: node + linkType: hard + +"ssri@npm:^10.0.0": + version: 10.0.6 + resolution: "ssri@npm:10.0.6" + dependencies: + minipass: "npm:^7.0.3" + checksum: 10c0/e5a1e23a4057a86a97971465418f22ea89bd439ac36ade88812dd920e4e61873e8abd6a9b72a03a67ef50faa00a2daf1ab745c5a15b46d03e0544a0296354227 + languageName: node + linkType: hard + +"stack-utils@npm:^2.0.6": + version: 2.0.6 + resolution: "stack-utils@npm:2.0.6" + dependencies: + escape-string-regexp: "npm:^2.0.0" + checksum: 10c0/651c9f87667e077584bbe848acaecc6049bc71979f1e9a46c7b920cad4431c388df0f51b8ad7cfd6eed3db97a2878d0fc8b3122979439ea8bac29c61c95eec8a + languageName: node + linkType: hard + +"string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": + version: 4.2.3 + resolution: "string-width@npm:4.2.3" + dependencies: + emoji-regex: "npm:^8.0.0" + is-fullwidth-code-point: "npm:^3.0.0" + strip-ansi: "npm:^6.0.1" + checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b + languageName: node + linkType: hard + +"string-width@npm:^5.0.0, string-width@npm:^5.0.1, string-width@npm:^5.1.2": + version: 5.1.2 + resolution: "string-width@npm:5.1.2" + dependencies: + eastasianwidth: "npm:^0.2.0" + emoji-regex: "npm:^9.2.2" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca + languageName: node + linkType: hard + +"string_decoder@npm:^1.1.1": + version: 1.3.0 + resolution: "string_decoder@npm:1.3.0" + dependencies: + safe-buffer: "npm:~5.2.0" + checksum: 10c0/810614ddb030e271cd591935dcd5956b2410dd079d64ff92a1844d6b7588bf992b3e1b69b0f4d34a3e06e0bd73046ac646b5264c1987b20d0601f81ef35d731d + languageName: node + linkType: hard + +"strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": + version: 6.0.1 + resolution: "strip-ansi@npm:6.0.1" + dependencies: + ansi-regex: "npm:^5.0.1" + checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 + languageName: node + linkType: hard + +"strip-ansi@npm:^7.0.1": + version: 7.1.0 + resolution: "strip-ansi@npm:7.1.0" + dependencies: + ansi-regex: "npm:^6.0.1" + checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 + languageName: node + linkType: hard + +"strip-final-newline@npm:^4.0.0": + version: 4.0.0 + resolution: "strip-final-newline@npm:4.0.0" + checksum: 10c0/b0cf2b62d597a1b0e3ebc42b88767f0a0d45601f89fd379a928a1812c8779440c81abba708082c946445af1d6b62d5f16e2a7cf4f30d9d6587b89425fae801ff + languageName: node + linkType: hard + +"strip-json-comments@npm:~2.0.1": + version: 2.0.1 + resolution: "strip-json-comments@npm:2.0.1" + checksum: 10c0/b509231cbdee45064ff4f9fd73609e2bcc4e84a4d508e9dd0f31f70356473fde18abfb5838c17d56fb236f5a06b102ef115438de0600b749e818a35fbbc48c43 + languageName: node + linkType: hard + +"supertap@npm:^3.0.1": + version: 3.0.1 + resolution: "supertap@npm:3.0.1" + dependencies: + indent-string: "npm:^5.0.0" + js-yaml: "npm:^3.14.1" + serialize-error: "npm:^7.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/8164674f2e280cab875f0fef5bb36c15553c13e29697ff92f4e0d6bc62149f0303a89eee47535413ed145ea72e14a24d065bab233059d48a499ec5ebb4566b0f + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"symbol-observable@npm:^2.0.3": + version: 2.0.3 + resolution: "symbol-observable@npm:2.0.3" + checksum: 10c0/03fb8766b75bfa65a3c7d68ae1e51a13a5ff71b40d6d53b17a0c9c77b1685c20a3bfbf45547ab36214a079665c3f551e250798f6b2f83a2a40762d864ed87f78 + languageName: node + linkType: hard + +"tar-fs@npm:^2.0.0": + version: 2.1.1 + resolution: "tar-fs@npm:2.1.1" + dependencies: + chownr: "npm:^1.1.1" + mkdirp-classic: "npm:^0.5.2" + pump: "npm:^3.0.0" + tar-stream: "npm:^2.1.4" + checksum: 10c0/871d26a934bfb7beeae4c4d8a09689f530b565f79bd0cf489823ff0efa3705da01278160da10bb006d1a793fa0425cf316cec029b32a9159eacbeaff4965fb6d + languageName: node + linkType: hard + +"tar-stream@npm:^2.1.4": + version: 2.2.0 + resolution: "tar-stream@npm:2.2.0" + dependencies: + bl: "npm:^4.0.3" + end-of-stream: "npm:^1.4.1" + fs-constants: "npm:^1.0.0" + inherits: "npm:^2.0.3" + readable-stream: "npm:^3.1.1" + checksum: 10c0/2f4c910b3ee7196502e1ff015a7ba321ec6ea837667220d7bcb8d0852d51cb04b87f7ae471008a6fb8f5b1a1b5078f62f3a82d30c706f20ada1238ac797e7692 + languageName: node + linkType: hard + +"tar@npm:^6.1.11, tar@npm:^6.2.1": + version: 6.2.1 + resolution: "tar@npm:6.2.1" + dependencies: + chownr: "npm:^2.0.0" + fs-minipass: "npm:^2.0.0" + minipass: "npm:^5.0.0" + minizlib: "npm:^2.1.1" + mkdirp: "npm:^1.0.3" + yallist: "npm:^4.0.0" + checksum: 10c0/a5eca3eb50bc11552d453488344e6507156b9193efd7635e98e867fab275d527af53d8866e2370cd09dfe74378a18111622ace35af6a608e5223a7d27fe99537 + languageName: node + linkType: hard + +"temp-dir@npm:^3.0.0": + version: 3.0.0 + resolution: "temp-dir@npm:3.0.0" + checksum: 10c0/a86978a400984cd5f315b77ebf3fe53bb58c61f192278cafcb1f3fb32d584a21dc8e08b93171d7874b7cc972234d3455c467306cc1bfc4524b622e5ad3bfd671 + languageName: node + linkType: hard + +"time-zone@npm:^1.0.0": + version: 1.0.0 + resolution: "time-zone@npm:1.0.0" + checksum: 10c0/d00ebd885039109011b6e2423ebbf225160927333c2ade6d833e9cc4676db20759f1f3855fafde00d1bd668c243a6aa68938ce71fe58aab0d514e820d59c1d81 + languageName: node + linkType: hard + +"tmp@npm:^0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + +"to-regex-range@npm:^5.0.1": + version: 5.0.1 + resolution: "to-regex-range@npm:5.0.1" + dependencies: + is-number: "npm:^7.0.0" + checksum: 10c0/487988b0a19c654ff3e1961b87f471702e708fa8a8dd02a298ef16da7206692e8552a0250e8b3e8759270f62e9d8314616f6da274734d3b558b1fc7b7724e892 + languageName: node + linkType: hard + +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + +"tunnel-agent@npm:^0.6.0": + version: 0.6.0 + resolution: "tunnel-agent@npm:0.6.0" + dependencies: + safe-buffer: "npm:^5.0.1" + checksum: 10c0/4c7a1b813e7beae66fdbf567a65ec6d46313643753d0beefb3c7973d66fcec3a1e7f39759f0a0b4465883499c6dc8b0750ab8b287399af2e583823e40410a17a + languageName: node + linkType: hard + +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: 10c0/0c0fa07ae53d4e776cf4dac30d25ad799443e9eef9226f9fddbb69242db86b08584084a99885cfa5a9dfe4c063ebdc9aa7b69da348e735baede8d43f1aeae93b + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + +"unicorn-magic@npm:^0.3.0": + version: 0.3.0 + resolution: "unicorn-magic@npm:0.3.0" + checksum: 10c0/0a32a997d6c15f1c2a077a15b1c4ca6f268d574cf5b8975e778bb98e6f8db4ef4e86dfcae4e158cd4c7e38fb4dd383b93b13eefddc7f178dea13d3ac8a603271 + languageName: node + linkType: hard + +"unique-filename@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-filename@npm:3.0.0" + dependencies: + unique-slug: "npm:^4.0.0" + checksum: 10c0/6363e40b2fa758eb5ec5e21b3c7fb83e5da8dcfbd866cc0c199d5534c42f03b9ea9ab069769cc388e1d7ab93b4eeef28ef506ab5f18d910ef29617715101884f + languageName: node + linkType: hard + +"unique-slug@npm:^4.0.0": + version: 4.0.0 + resolution: "unique-slug@npm:4.0.0" + dependencies: + imurmurhash: "npm:^0.1.4" + checksum: 10c0/cb811d9d54eb5821b81b18205750be84cb015c20a4a44280794e915f5a0a70223ce39066781a354e872df3572e8155c228f43ff0cce94c7cbf4da2cc7cbdd635 + languageName: node + linkType: hard + +"util-deprecate@npm:^1.0.1": + version: 1.0.2 + resolution: "util-deprecate@npm:1.0.2" + checksum: 10c0/41a5bdd214df2f6c3ecf8622745e4a366c4adced864bc3c833739791aeeeb1838119af7daed4ba36428114b5c67dcda034a79c882e97e43c03e66a4dd7389942 + languageName: node + linkType: hard + +"well-known-symbols@npm:^2.0.0": + version: 2.0.0 + resolution: "well-known-symbols@npm:2.0.0" + checksum: 10c0/cb6c12e98877e8952ec28d13ae6f4fdb54ae1cb49b16a728720276dadd76c930e6cb0e174af3a4620054dd2752546f842540122920c6e31410208abd4958ee6b + languageName: node + linkType: hard + +"which@npm:^2.0.1": + version: 2.0.2 + resolution: "which@npm:2.0.2" + dependencies: + isexe: "npm:^2.0.0" + bin: + node-which: ./bin/node-which + checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f + languageName: node + linkType: hard + +"which@npm:^4.0.0": + version: 4.0.0 + resolution: "which@npm:4.0.0" + dependencies: + isexe: "npm:^3.1.1" + bin: + node-which: bin/which.js + checksum: 10c0/449fa5c44ed120ccecfe18c433296a4978a7583bf2391c50abce13f76878d2476defde04d0f79db8165bdf432853c1f8389d0485ca6e8ebce3bbcded513d5e6a + languageName: node + linkType: hard + +"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": + version: 7.0.0 + resolution: "wrap-ansi@npm:7.0.0" + dependencies: + ansi-styles: "npm:^4.0.0" + string-width: "npm:^4.1.0" + strip-ansi: "npm:^6.0.0" + checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da + languageName: node + linkType: hard + +"wrap-ansi@npm:^8.1.0": + version: 8.1.0 + resolution: "wrap-ansi@npm:8.1.0" + dependencies: + ansi-styles: "npm:^6.1.0" + string-width: "npm:^5.0.1" + strip-ansi: "npm:^7.0.1" + checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 + languageName: node + linkType: hard + +"wrappy@npm:1": + version: 1.0.2 + resolution: "wrappy@npm:1.0.2" + checksum: 10c0/56fece1a4018c6a6c8e28fbc88c87e0fbf4ea8fd64fc6c63b18f4acc4bd13e0ad2515189786dd2c30d3eec9663d70f4ecf699330002f8ccb547e4a18231fc9f0 + languageName: node + linkType: hard + +"write-file-atomic@npm:^5.0.1": + version: 5.0.1 + resolution: "write-file-atomic@npm:5.0.1" + dependencies: + imurmurhash: "npm:^0.1.4" + signal-exit: "npm:^4.0.1" + checksum: 10c0/e8c850a8e3e74eeadadb8ad23c9d9d63e4e792bd10f4836ed74189ef6e996763959f1249c5650e232f3c77c11169d239cbfc8342fc70f3fe401407d23810505d + languageName: node + linkType: hard + +"ws@npm:^7": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"xstream@npm:^11.14.0": + version: 11.14.0 + resolution: "xstream@npm:11.14.0" + dependencies: + globalthis: "npm:^1.0.1" + symbol-observable: "npm:^2.0.3" + checksum: 10c0/7a28baedc64385dc17597d04c7130ec3135db298e66d6dcf33821eb1953d5ad1b83c5fa08f1ce4d36e75fd219f2e9ef81ee0721aa8d4ccf619acc1760ba37f71 + languageName: node + linkType: hard + +"y18n@npm:^5.0.5": + version: 5.0.8 + resolution: "y18n@npm:5.0.8" + checksum: 10c0/4df2842c36e468590c3691c894bc9cdbac41f520566e76e24f59401ba7d8b4811eb1e34524d57e54bc6d864bcb66baab7ffd9ca42bf1eda596618f9162b91249 + languageName: node + linkType: hard + +"yallist@npm:^4.0.0": + version: 4.0.0 + resolution: "yallist@npm:4.0.0" + checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a + languageName: node + linkType: hard + +"yargs-parser@npm:^21.1.1": + version: 21.1.1 + resolution: "yargs-parser@npm:21.1.1" + checksum: 10c0/f84b5e48169479d2f402239c59f084cfd1c3acc197a05c59b98bab067452e6b3ea46d4dd8ba2985ba7b3d32a343d77df0debd6b343e5dae3da2aab2cdf5886b2 + languageName: node + linkType: hard + +"yargs@npm:^17.7.2": + version: 17.7.2 + resolution: "yargs@npm:17.7.2" + dependencies: + cliui: "npm:^8.0.1" + escalade: "npm:^3.1.1" + get-caller-file: "npm:^2.0.5" + require-directory: "npm:^2.1.1" + string-width: "npm:^4.2.3" + y18n: "npm:^5.0.5" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/ccd7e723e61ad5965fffbb791366db689572b80cca80e0f96aad968dfff4156cd7cd1ad18607afe1046d8241e6fb2d6c08bf7fa7bfb5eaec818735d8feac8f05 + languageName: node + linkType: hard + +"yocto-queue@npm:^1.0.0": + version: 1.1.1 + resolution: "yocto-queue@npm:1.1.1" + checksum: 10c0/cb287fe5e6acfa82690acb43c283de34e945c571a78a939774f6eaba7c285bacdf6c90fbc16ce530060863984c906d2b4c6ceb069c94d1e0a06d5f2b458e2a92 + languageName: node + linkType: hard + +"yoctocolors@npm:^2.0.0": + version: 2.1.1 + resolution: "yoctocolors@npm:2.1.1" + checksum: 10c0/85903f7fa96f1c70badee94789fade709f9d83dab2ec92753d612d84fcea6d34c772337a9f8914c6bed2f5fc03a428ac5d893e76fab636da5f1236ab725486d0 + languageName: node + linkType: hard diff --git a/a3p-integration/proposals/n:upgrade-next/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch b/a3p-integration/proposals/n:upgrade-next/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch new file mode 100644 index 00000000000..9c00803d7a3 --- /dev/null +++ b/a3p-integration/proposals/n:upgrade-next/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch @@ -0,0 +1,45 @@ +diff --git a/dist/node/axios.cjs b/dist/node/axios.cjs +index db4997bee1aa48aca215c6b2e7443292c94c086f..fb39f7e0046c66b1c0275c1a82ed49d3cc7cff83 100644 +--- a/dist/node/axios.cjs ++++ b/dist/node/axios.cjs +@@ -371,9 +371,18 @@ function merge(/* obj1, obj2, obj3, ... */) { + const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { +- a[key] = bind(val, thisArg); +- } else { ++ val = bind(val, thisArg); ++ } ++ const oldDesc = Object.getOwnPropertyDescriptor(a, key); ++ if (oldDesc) { + a[key] = val; ++ } else { ++ Object.defineProperty(a, key, { ++ value: val, ++ writable: true, ++ enumerable: true, ++ configurable: true ++ }); + } + }, {allOwnKeys}); + return a; +@@ -404,7 +413,9 @@ const stripBOM = (content) => { + */ + const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); +- constructor.prototype.constructor = constructor; ++ Object.defineProperty(constructor.prototype, 'constructor', { ++ value: constructor ++ }); + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); +@@ -566,7 +577,7 @@ const isRegExp = kindOfTest('RegExp'); + + const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); +- const reducedDescriptors = {}; ++ const reducedDescriptors = Object.create(null); + + forEach(descriptors, (descriptor, name) => { + let ret; diff --git a/a3p-integration/proposals/n:upgrade-next/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch b/a3p-integration/proposals/n:upgrade-next/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch new file mode 100644 index 00000000000..1122600ffe5 --- /dev/null +++ b/a3p-integration/proposals/n:upgrade-next/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch @@ -0,0 +1,36 @@ +diff --git a/src/util/minimal.js b/src/util/minimal.js +index 3c406dee753b5c6fb29dda2e64d4482e754e7873..564e5dadaa50e4ad05fc18b767ee276c99e9f0f9 100644 +--- a/src/util/minimal.js ++++ b/src/util/minimal.js +@@ -280,7 +280,30 @@ function newError(name) { + merge(this, properties); + } + +- (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError; ++ CustomError.prototype = Object.create(Error.prototype, { ++ constructor: { ++ value: CustomError, ++ writable: true, ++ enumerable: false, ++ configurable: true, ++ }, ++ name: { ++ get() { return name; }, ++ set: undefined, ++ enumerable: false, ++ // configurable: false would accurately preserve the behavior of ++ // the original, but I'm guessing that was not intentional. ++ // For an actual error subclass, this property would ++ // be configurable. ++ configurable: true, ++ }, ++ toString: { ++ value() { return this.name + ": " + this.message; }, ++ writable: true, ++ enumerable: false, ++ configurable: true, ++ }, ++ }); + + Object.defineProperty(CustomError.prototype, "name", { get: function() { return name; } }); + diff --git a/a3p-integration/proposals/n:upgrade-next/acceptInvites.js b/a3p-integration/proposals/n:upgrade-next/acceptInvites.js index 72245bf6d3e..5f61566a150 100644 --- a/a3p-integration/proposals/n:upgrade-next/acceptInvites.js +++ b/a3p-integration/proposals/n:upgrade-next/acceptInvites.js @@ -1,5 +1,5 @@ #!/usr/bin/env node -import '@endo/init'; +import '@endo/init/debug.js'; import { agops, GOV1ADDR, GOV2ADDR } from '@agoric/synthetic-chain'; import { GOV4ADDR } from './agoric-tools.js'; diff --git a/a3p-integration/proposals/n:upgrade-next/addGov4.js b/a3p-integration/proposals/n:upgrade-next/addGov4.js index d84ec7f5890..f95c383fd52 100644 --- a/a3p-integration/proposals/n:upgrade-next/addGov4.js +++ b/a3p-integration/proposals/n:upgrade-next/addGov4.js @@ -1,4 +1,4 @@ -import '@endo/init'; +import '@endo/init/debug.js'; import { execFileSync } from 'node:child_process'; import { makeAgd } from './synthetic-chain-excerpt.js'; import { GOV4ADDR } from './agoric-tools.js'; diff --git a/a3p-integration/proposals/n:upgrade-next/initial.test.js b/a3p-integration/proposals/n:upgrade-next/initial.test.js index e86b4dd9993..c68207a949b 100644 --- a/a3p-integration/proposals/n:upgrade-next/initial.test.js +++ b/a3p-integration/proposals/n:upgrade-next/initial.test.js @@ -1,4 +1,5 @@ import test from 'ava'; +import '@endo/init/debug.js'; import { getVatDetails } from '@agoric/synthetic-chain'; diff --git a/a3p-integration/proposals/n:upgrade-next/package.json b/a3p-integration/proposals/n:upgrade-next/package.json index fccfe2b2701..7a3510e8791 100644 --- a/a3p-integration/proposals/n:upgrade-next/package.json +++ b/a3p-integration/proposals/n:upgrade-next/package.json @@ -11,12 +11,13 @@ "type": "module", "license": "Apache-2.0", "dependencies": { - "@agoric/synthetic-chain": "^0.3.0", + "@agoric/client-utils": "dev", + "@agoric/synthetic-chain": "^0.4.3", "@endo/init": "^1.1.6", "@endo/marshal": "^1.6.1", "ava": "^5.3.1", "better-sqlite3": "^9.6.0", - "execa": "^9.5.1" + "execa": "9.1.0" }, "ava": { "concurrency": 1, @@ -28,8 +29,14 @@ "scripts": { "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" }, - "packageManager": "yarn@4.5.1", + "packageManager": "yarn@4.5.3", "devDependencies": { + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", "typescript": "^5.6.3" + }, + "resolutions": { + "axios@npm:^1.6.0": "patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch", + "protobufjs@npm:^6.8.8": "patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch" } } diff --git a/a3p-integration/proposals/n:upgrade-next/priceFeed-follower-auction.test.js b/a3p-integration/proposals/n:upgrade-next/priceFeed-follower-auction.test.js index 1dc0df73472..2844ec3d04b 100644 --- a/a3p-integration/proposals/n:upgrade-next/priceFeed-follower-auction.test.js +++ b/a3p-integration/proposals/n:upgrade-next/priceFeed-follower-auction.test.js @@ -1,4 +1,5 @@ import test from 'ava'; +import '@endo/init/debug.js'; import { getDetailsMatchingVats } from './vatDetails.js'; test('new auction vat', async t => { diff --git a/a3p-integration/proposals/n:upgrade-next/priceFeedUpdate.test.js b/a3p-integration/proposals/n:upgrade-next/priceFeedUpdate.test.js index 104ff759465..e27264cff04 100644 --- a/a3p-integration/proposals/n:upgrade-next/priceFeedUpdate.test.js +++ b/a3p-integration/proposals/n:upgrade-next/priceFeedUpdate.test.js @@ -1,4 +1,5 @@ import test from 'ava'; +import '@endo/init/debug.js'; import { agops, diff --git a/a3p-integration/proposals/n:upgrade-next/replaceElectorate.test.js b/a3p-integration/proposals/n:upgrade-next/replaceElectorate.test.js index 422287dc8b3..b34272901fc 100644 --- a/a3p-integration/proposals/n:upgrade-next/replaceElectorate.test.js +++ b/a3p-integration/proposals/n:upgrade-next/replaceElectorate.test.js @@ -1,5 +1,5 @@ import test from 'ava'; -import '@endo/init'; +import '@endo/init/debug.js'; import { GOV1ADDR, GOV2ADDR } from '@agoric/synthetic-chain'; import { passStyleOf } from '@endo/marshal'; import { GOV4ADDR, queryVstorageFormatted } from './agoric-tools.js'; diff --git a/a3p-integration/proposals/n:upgrade-next/synthetic-chain-excerpt.js b/a3p-integration/proposals/n:upgrade-next/synthetic-chain-excerpt.js index 0c65ed69d5f..832d5e54ffb 100644 --- a/a3p-integration/proposals/n:upgrade-next/synthetic-chain-excerpt.js +++ b/a3p-integration/proposals/n:upgrade-next/synthetic-chain-excerpt.js @@ -32,22 +32,20 @@ const waitForBootstrap = async () => { } }; -export const waitForBlock = async (times = 1) => { - console.log(times); - let time = 0; - while (time < times) { - const block1 = await waitForBootstrap(); +export const waitForBlock = async (n = 1) => { + console.log(`waitForBlock waiting for ${n} new block(s)...`); + const h0 = await waitForBootstrap(); + let lastHeight = h0; + for (let i = 0; i < n; i += 1) { while (true) { - const block2 = await waitForBootstrap(); - - if (block1 !== block2) { - console.log('block produced'); + await new Promise(r => setTimeout(r, 1000)); + const currentHeight = await waitForBootstrap(); + if (currentHeight !== lastHeight) { + console.log(`waitForBlock saw new height ${currentHeight}`); + lastHeight = currentHeight; break; } - - await new Promise(r => setTimeout(r, 1000)); } - time += 1; } }; @@ -57,7 +55,6 @@ const agdBinary = 'agd'; /** * @param {{execFileSync: typeof import('child_process').execFileSync }} io - * @returns */ export const makeAgd = ({ execFileSync }) => { /** diff --git a/a3p-integration/proposals/n:upgrade-next/test-lib/price-feed.js b/a3p-integration/proposals/n:upgrade-next/test-lib/price-feed.js index c0e2acd311d..0fefd5ca52e 100644 --- a/a3p-integration/proposals/n:upgrade-next/test-lib/price-feed.js +++ b/a3p-integration/proposals/n:upgrade-next/test-lib/price-feed.js @@ -6,7 +6,7 @@ import { pushPrices, getPriceQuote, } from '@agoric/synthetic-chain'; -import { retryUntilCondition } from './sync-tools.js'; +import { retryUntilCondition } from '@agoric/client-utils'; export const scale6 = x => BigInt(x * 1_000_000); @@ -57,6 +57,6 @@ export const getPriceFeedRoundId = async brand => { prefix: '', }); - console.log('latestRound: ', latestRound); + console.log(latestRoundPath, latestRound); return Number(latestRound.roundId); }; diff --git a/a3p-integration/proposals/n:upgrade-next/test-lib/sync-tools.js b/a3p-integration/proposals/n:upgrade-next/test-lib/sync-tools.js deleted file mode 100644 index 4a0e727c465..00000000000 --- a/a3p-integration/proposals/n:upgrade-next/test-lib/sync-tools.js +++ /dev/null @@ -1,72 +0,0 @@ -/* eslint-env node */ - -/** - * @file These tools mostly duplicate code that will be added in other PRs - * and eventually migrated to synthetic-chain. Sorry for the duplication. - */ - -/** - * @typedef {object} RetryOptions - * @property {number} [maxRetries] - * @property {number} [retryIntervalMs] - * @property {(...arg0: string[]) => void} log - * @property {(object) => void} [setTimeout] - * @property {string} [errorMessage=Error] - */ - -const ambientSetTimeout = global.setTimeout; - -/** - * From https://github.com/Agoric/agoric-sdk/blob/442f07c8f0af03281b52b90e90c27131eef6f331/multichain-testing/tools/sleep.ts#L10 - * - * @param {number} ms - * @param {*} sleepOptions - */ -const sleep = (ms, { log = () => {}, setTimeout = ambientSetTimeout }) => - new Promise(resolve => { - log(`Sleeping for ${ms}ms...`); - setTimeout(resolve, ms); - }); - -/** - * From https://github.com/Agoric/agoric-sdk/blob/442f07c8f0af03281b52b90e90c27131eef6f331/multichain-testing/tools/sleep.ts#L24 - * - * @param {() => Promise} operation - * @param {(result: any) => boolean} condition - * @param {string} message - * @param {RetryOptions} options - */ -export const retryUntilCondition = async ( - operation, - condition, - message, - { maxRetries = 6, retryIntervalMs = 3500, log, setTimeout }, -) => { - console.log({ maxRetries, retryIntervalMs, message }); - let retries = 0; - - await null; - while (retries < maxRetries) { - try { - const result = await operation(); - log('RESULT', result); - if (condition(result)) { - return result; - } - } catch (error) { - if (error instanceof Error) { - log(`Error: ${error.message}`); - } else { - log(`Unknown error: ${String(error)}`); - } - } - - retries += 1; - console.log( - `Retry ${retries}/${maxRetries} - Waiting for ${retryIntervalMs}ms for ${message}...`, - ); - await sleep(retryIntervalMs, { log, setTimeout }); - } - - throw Error(`${message} condition failed after ${maxRetries} retries.`); -}; diff --git a/a3p-integration/proposals/n:upgrade-next/verifyPushedPrice.js b/a3p-integration/proposals/n:upgrade-next/verifyPushedPrice.js index 98449c316a5..ca4ceee38ff 100644 --- a/a3p-integration/proposals/n:upgrade-next/verifyPushedPrice.js +++ b/a3p-integration/proposals/n:upgrade-next/verifyPushedPrice.js @@ -1,5 +1,6 @@ #!/usr/bin/env node +import '@endo/init/debug.js'; import { registerOraclesForBrand, generateOracleMap, diff --git a/a3p-integration/proposals/n:upgrade-next/yarn.lock b/a3p-integration/proposals/n:upgrade-next/yarn.lock index 2c0ecacf2c3..761d692aa51 100644 --- a/a3p-integration/proposals/n:upgrade-next/yarn.lock +++ b/a3p-integration/proposals/n:upgrade-next/yarn.lock @@ -5,132 +5,1022 @@ __metadata: version: 8 cacheKey: 10c0 -"@agoric/synthetic-chain@npm:^0.3.0": - version: 0.3.0 - resolution: "@agoric/synthetic-chain@npm:0.3.0" +"@agoric/babel-generator@npm:^7.17.6": + version: 7.17.6 + resolution: "@agoric/babel-generator@npm:7.17.6" dependencies: - "@endo/zip": "npm:^1.0.7" - better-sqlite3: "npm:^9.6.0" - chalk: "npm:^5.3.0" - cosmjs-types: "npm:^0.9.0" - execa: "npm:^9.3.1" - bin: - synthetic-chain: dist/cli/cli.js - checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + "@babel/types": "npm:^7.17.0" + jsesc: "npm:^2.5.1" + source-map: "npm:^0.5.0" + checksum: 10c0/59db151ae737bd9b1f21c1589df4c7da9cbf484de5b5cc8352052825c2d977283d975303f55acb54d0210c176cb405da263073ceba1d3a6db65c6e21cc6e663f languageName: node linkType: hard -"@endo/base64@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/base64@npm:1.0.8" - checksum: 10c0/3501efbf866acc25b9ad0912ec2383e3b976c890a18dc67b5c6eb128433708db69e8ed1cc57190305266bdcbd132659aa87edfc6d02a9886b711e8b86adc21c0 +"@agoric/base-zone@npm:0.1.1-dev-ef0668a.0+ef0668a": + version: 0.1.1-dev-ef0668a.0 + resolution: "@agoric/base-zone@npm:0.1.1-dev-ef0668a.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/36e876bad26963d49a69c50af976a1f1c2b47a1769de812da8f88508fb6bb47be73b48d3a6c95fbe1497ffea3664067e3fbf23bd51c25e9b4811227d36d74a47 languageName: node linkType: hard -"@endo/common@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/common@npm:1.2.7" +"@agoric/casting@npm:0.4.3-dev-ef0668a.0+ef0668a": + version: 0.4.3-dev-ef0668a.0 + resolution: "@agoric/casting@npm:0.4.3-dev-ef0668a.0" dependencies: + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@cosmjs/encoding": "npm:^0.32.3" + "@cosmjs/proto-signing": "npm:^0.32.3" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/lockdown": "npm:^1.0.12" + "@endo/marshal": "npm:^1.6.1" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/ee3c96a1b10a0566e4b67d157d1bd8dc70a8582ec8a3f33b0d9213ff5b108f1a971f194e41daa9b027fb3649fbad0c67c765a964c8a84e1498b27d9b4054e312 + languageName: node + linkType: hard + +"@agoric/client-utils@npm:dev": + version: 0.1.1-dev-ef0668a.0 + resolution: "@agoric/client-utils@npm:0.1.1-dev-ef0668a.0" + dependencies: + "@agoric/casting": "npm:0.4.3-dev-ef0668a.0+ef0668a" + "@agoric/ertp": "npm:0.16.3-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/smart-wallet": "npm:0.5.4-dev-ef0668a.0+ef0668a" + "@agoric/vats": "npm:0.15.2-dev-ef0668a.0+ef0668a" + "@cosmjs/stargate": "npm:^0.32.3" + "@cosmjs/tendermint-rpc": "npm:^0.32.3" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/e6c722a89ddf059797d30793ebdbf33a06e0a646cffa14a1a87f72bd170a500e67f1c414a4fb944444bad6e93c8202f280a069526de09a6a42d5fe92aeac0585 + languageName: node + linkType: hard + +"@agoric/cosmic-proto@npm:0.4.1-dev-ef0668a.0+ef0668a": + version: 0.4.1-dev-ef0668a.0 + resolution: "@agoric/cosmic-proto@npm:0.4.1-dev-ef0668a.0" + dependencies: + "@endo/base64": "npm:^1.0.8" + "@endo/init": "npm:^1.1.6" + checksum: 10c0/da5409e4afad2d60852d3ab9193c35f863fbfd764093e84b167898bf3fff096f584645903e3a2d7db04b3ce10cc275a06a3fd4bd9a9a6ba3f09aab13794e4113 + languageName: node + linkType: hard + +"@agoric/ertp@npm:0.16.3-dev-ef0668a.0+ef0668a": + version: 0.16.3-dev-ef0668a.0 + resolution: "@agoric/ertp@npm:0.16.3-dev-ef0668a.0" + dependencies: + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/zone": "npm:0.2.3-dev-ef0668a.0+ef0668a" "@endo/errors": "npm:^1.2.7" "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/2bd25ffc528afd6308b6168650583977139c64e56547b3ea2fee313e01650fb1a041d7b7ce54c6bb70f26c9e78345db2a50fbe3ebccabe9a5c5696eda2cca706 + checksum: 10c0/6331be13e0ab784722842afe64879e093fc025919e208656a838573369e111a79beb74afab56b35059cde504776c37daa12c12d3bed87435ecc9196612126562 languageName: node linkType: hard -"@endo/env-options@npm:^1.1.7": - version: 1.1.7 - resolution: "@endo/env-options@npm:1.1.7" - checksum: 10c0/5784bd68790041b08d9ead4f6c29cc7871d2e554c23fc44fff38cb20b6b4e55cdba2f78d844ba5ad4b0818185c32475ff318c1b77890d628690d7c7a6ede9475 +"@agoric/governance@npm:0.10.4-dev-ef0668a.0+ef0668a": + version: 0.10.4-dev-ef0668a.0 + resolution: "@agoric/governance@npm:0.10.4-dev-ef0668a.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/time": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/zoe": "npm:0.26.3-dev-ef0668a.0+ef0668a" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + checksum: 10c0/c6717cf600e3a765d056828a6fb0b1389f6cd89086b09626ae5820f946b8f52ca2fa89d822741492b056778c8c21f9cda83ec6e9931171668b38be87d4c7ea41 languageName: node linkType: hard -"@endo/errors@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/errors@npm:1.2.7" +"@agoric/internal@npm:0.3.3-dev-ef0668a.0+ef0668a": + version: 0.3.3-dev-ef0668a.0 + resolution: "@agoric/internal@npm:0.3.3-dev-ef0668a.0" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/17eed5d01dd968d8e266db37ac44e76859d14894a2b70457d120f2f05021819671aaf1bdf7dc7c2506b84f6df616402e029695d62309fbdbdd13ed4ba34890dd + "@agoric/base-zone": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + "@endo/stream": "npm:^1.2.7" + anylogger: "npm:^0.21.0" + jessie.js: "npm:^0.3.4" + checksum: 10c0/3756679ace880447f6f4bc3b8b669a09ee65b6a3020d64db87294255aac4c154bc24e7c81832ad5fe74d9ba66147e464319065d9f569f0e3cc1443fa88466b86 languageName: node linkType: hard -"@endo/eventual-send@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/eventual-send@npm:1.2.7" +"@agoric/kmarshal@npm:0.1.1-dev-ef0668a.0+ef0668a": + version: 0.1.1-dev-ef0668a.0 + resolution: "@agoric/kmarshal@npm:0.1.1-dev-ef0668a.0" dependencies: - "@endo/env-options": "npm:^1.1.7" - checksum: 10c0/4a483169bcd9ead47a7a07d3f69bdebdc0d1e2a3198f35ad422b82c1646b64528234bdddc9e0544ac38c2ede84a50af1e126eb4086aa8b4ae4b0002895b55e86 + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + checksum: 10c0/c1827c9c31957b79a847daf4b63b17a5890c6a661bf866fa628821f490f983bf9ef989da3e75e757ba582759dadc8b27c41a969092651aec88d3d7fcc8af2cd6 languageName: node linkType: hard -"@endo/init@npm:^1.1.6": - version: 1.1.6 - resolution: "@endo/init@npm:1.1.6" +"@agoric/network@npm:0.1.1-dev-ef0668a.0+ef0668a": + version: 0.1.1-dev-ef0668a.0 + resolution: "@agoric/network@npm:0.1.1-dev-ef0668a.0" dependencies: + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" "@endo/base64": "npm:^1.0.8" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/5c6b1017a94919d4f9587bbc6efbe2fcd0d8765057cd5dc9466e2a6033c095a16d388edbabf902b19e67b38bb69a5747e6700d62761b7615864833f39c30f35d + languageName: node + linkType: hard + +"@agoric/notifier@npm:0.6.3-dev-ef0668a.0+ef0668a": + version: 0.6.3-dev-ef0668a.0 + resolution: "@agoric/notifier@npm:0.6.3-dev-ef0668a.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/a978638a15bd476aa8e42a315409c1e789c7f84bf7335868794e260103294a28eaa8cf65adb2a12fb9e2fad9ce1809557a7740694f1006726627f631c5202aad + languageName: node + linkType: hard + +"@agoric/smart-wallet@npm:0.5.4-dev-ef0668a.0+ef0668a": + version: 0.5.4-dev-ef0668a.0 + resolution: "@agoric/smart-wallet@npm:0.5.4-dev-ef0668a.0" + dependencies: + "@agoric/ertp": "npm:0.16.3-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/vats": "npm:0.15.2-dev-ef0668a.0+ef0668a" + "@agoric/vow": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/zoe": "npm:0.26.3-dev-ef0668a.0+ef0668a" + "@agoric/zone": "npm:0.2.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" "@endo/eventual-send": "npm:^1.2.7" - "@endo/lockdown": "npm:^1.0.12" + "@endo/far": "npm:^1.1.8" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/1885429e475c780bb5b7ff0fd4fcd5d76bc3a5cb1c3c2f9f2dfc06152ff1c8c3be512b6760483c8c18598e1977129cb3dd766a32c9f6efb19d70b54a1844c683 + checksum: 10c0/28453a0aa2a29d5f9588a283eb1b6e73af8c511c490a47dd568a23b1b8899577f96aac1b2bd67c08776847f59bd006f8cff251439081c15dea54af7224d28e45 languageName: node linkType: hard -"@endo/lockdown@npm:^1.0.12": - version: 1.0.12 - resolution: "@endo/lockdown@npm:1.0.12" +"@agoric/store@npm:0.9.3-dev-ef0668a.0+ef0668a": + version: 0.9.3-dev-ef0668a.0 + resolution: "@agoric/store@npm:0.9.3-dev-ef0668a.0" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/0b9d36f359ffe8eadd1e799aa0340ccb0680d48c9b6249c380c27724824c4d875dada9fbec096fb4e2ac76b32c7536955524d3eb6579451a618707602fb958f4 + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/a53429b482acb2567e2c925e038025ea9ba9d6be4ca61246aff4b7ca604536032cd74938a50e3bd2b56890e8787da7d1364bb9c2d3e3a22d2bce97a241f351e3 languageName: node linkType: hard -"@endo/marshal@npm:^1.6.1": - version: 1.6.1 - resolution: "@endo/marshal@npm:1.6.1" +"@agoric/swing-store@npm:0.9.2-dev-ef0668a.0+ef0668a": + version: 0.9.2-dev-ef0668a.0 + resolution: "@agoric/swing-store@npm:0.9.2-dev-ef0668a.0" dependencies: - "@endo/common": "npm:^1.2.7" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + better-sqlite3: "npm:^9.1.1" + checksum: 10c0/7ea0117c65bea2afe106621fc942e398d2930319ec5246798b79c58fa7a125e1d0af186fefd0441372092ecc4bffdcb8ed90df69d03e3718819f3c4d14df7d68 + languageName: node + linkType: hard + +"@agoric/swingset-liveslots@npm:0.10.3-dev-ef0668a.0+ef0668a": + version: 0.10.3-dev-ef0668a.0 + resolution: "@agoric/swingset-liveslots@npm:0.10.3-dev-ef0668a.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@endo/env-options": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + checksum: 10c0/3eae88a06b0e0e697d9197a46ecdcad56e0d892f6adbcd7849a5b29eabb9d14f31f31a3a271ebbc9d1947e90885f1818cf0fa87a6b8e325b86b4fb3b44b32d59 + languageName: node + linkType: hard + +"@agoric/swingset-vat@npm:0.32.3-dev-ef0668a.0+ef0668a": + version: 0.32.3-dev-ef0668a.0 + resolution: "@agoric/swingset-vat@npm:0.32.3-dev-ef0668a.0" + dependencies: + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/kmarshal": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/swing-store": "npm:0.9.2-dev-ef0668a.0+ef0668a" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-ef0668a.0+ef0668a" + "@agoric/swingset-xsnap-supervisor": "npm:0.10.3-dev-ef0668a.0+ef0668a" + "@agoric/time": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/xsnap-lockdown": "npm:0.14.1-dev-ef0668a.0+ef0668a" + "@endo/base64": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/check-bundle": "npm:^1.0.11" + "@endo/compartment-mapper": "npm:^1.3.1" "@endo/errors": "npm:^1.2.7" "@endo/eventual-send": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" "@endo/nat": "npm:^5.0.12" "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/e64983abccd833b2a7eb63547e8c5a629f073d3e422229475d470ace95c2640a89e9a9879c46e8389cca8c9e75823ea1c27e27cbeeb8c1c4005146b2c530c530 + "@endo/ses-ava": "npm:^1.2.7" + "@endo/stream": "npm:^1.2.7" + "@endo/zip": "npm:^1.0.8" + ansi-styles: "npm:^6.2.1" + anylogger: "npm:^0.21.0" + better-sqlite3: "npm:^9.1.1" + import-meta-resolve: "npm:^2.2.1" + microtime: "npm:^3.1.0" + semver: "npm:^6.3.0" + tmp: "npm:^0.2.1" + yargs-parser: "npm:^21.1.1" + peerDependencies: + "@agoric/xsnap": ^0.14.2 + ava: ^5.3.0 + bin: + vat: bin/vat + checksum: 10c0/2d7a80fc325b03c1b026c840a34e1e65edc484972bc03408044806021764e8e384161bb89222819550821e73bfe56fb168741df62b3e002cb1ebb4906b8119e5 + languageName: node + linkType: hard + +"@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-ef0668a.0+ef0668a": + version: 0.10.3-dev-ef0668a.0 + resolution: "@agoric/swingset-xsnap-supervisor@npm:0.10.3-dev-ef0668a.0" + checksum: 10c0/5331abc0640a4469c3a00ffcab6daeaa426136ee97107dad0ea806e977aa79e6982de0fe2ccedf86efae7bda98eab37399974bd93e0772b8433ae656873fac80 + languageName: node + linkType: hard + +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" + dependencies: + "@endo/zip": "npm:^1.0.7" + better-sqlite3: "npm:^9.6.0" + chalk: "npm:^5.3.0" + cosmjs-types: "npm:^0.9.0" + execa: "npm:^9.3.1" + bin: + synthetic-chain: dist/cli/cli.js + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b languageName: node linkType: hard -"@endo/nat@npm:^5.0.12": - version: 5.0.12 - resolution: "@endo/nat@npm:5.0.12" - checksum: 10c0/deb792b6a0c9fe9c0e7cf74cc725d8bc36934571f4f06ac3b6def2a0622ac79b0278753c574f9b55a88b063d1186fd6971bbe63326077a7d37982c4c37a1a24c +"@agoric/time@npm:0.3.3-dev-ef0668a.0+ef0668a": + version: 0.3.3-dev-ef0668a.0 + resolution: "@agoric/time@npm:0.3.3-dev-ef0668a.0" + dependencies: + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" + "@endo/nat": "npm:^5.0.12" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/55e011779445011ec4aead1c2cb2b001cf3ae45c8a859d652b53820da63841e77a44617c8824a9e661369a620071ab6d480c7369d087c42856b0a19677856aa8 languageName: node linkType: hard -"@endo/pass-style@npm:^1.4.6": - version: 1.4.6 - resolution: "@endo/pass-style@npm:1.4.6" +"@agoric/vat-data@npm:0.5.3-dev-ef0668a.0+ef0668a": + version: 0.5.3-dev-ef0668a.0 + resolution: "@agoric/vat-data@npm:0.5.3-dev-ef0668a.0" dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/patterns": "npm:^1.4.6" + checksum: 10c0/90147b5df25a8cbb4bbb1525fa2231c0674da749e30d114ed15e7a963afcaba9d6b2fc914af8471d5aa147031fc2bd6906da0e1f8a3f8456a95f90d71cc016f7 + languageName: node + linkType: hard + +"@agoric/vats@npm:0.15.2-dev-ef0668a.0+ef0668a": + version: 0.15.2-dev-ef0668a.0 + resolution: "@agoric/vats@npm:0.15.2-dev-ef0668a.0" + dependencies: + "@agoric/cosmic-proto": "npm:0.4.1-dev-ef0668a.0+ef0668a" + "@agoric/ertp": "npm:0.16.3-dev-ef0668a.0+ef0668a" + "@agoric/governance": "npm:0.10.4-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/network": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/swingset-vat": "npm:0.32.3-dev-ef0668a.0+ef0668a" + "@agoric/time": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/vow": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/zoe": "npm:0.26.3-dev-ef0668a.0+ef0668a" + "@agoric/zone": "npm:0.2.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + import-meta-resolve: "npm:^2.2.1" + jessie.js: "npm:^0.3.4" + checksum: 10c0/01c52d6d0615171986bae163f5bff8e754d419219742f1566542784a4de8f517be4dc0cb6a8d1c41f69ec09e3eb4de137546a22ac4c4c51f3b04a20e67353ac3 + languageName: node + linkType: hard + +"@agoric/vow@npm:0.1.1-dev-ef0668a.0+ef0668a": + version: 0.1.1-dev-ef0668a.0 + resolution: "@agoric/vow@npm:0.1.1-dev-ef0668a.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" "@endo/env-options": "npm:^1.1.7" "@endo/errors": "npm:^1.2.7" "@endo/eventual-send": "npm:^1.2.7" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" "@endo/promise-kit": "npm:^1.1.7" - "@fast-check/ava": "npm:^1.1.5" - checksum: 10c0/fec9d21bb4c70314e92c72f7ae41ec147ac839a23d54f613d689b84f81206e49e657f3fb414db454cbd6ab67dd2a319b1ae25c42b3a1c881edd5de120496b8b4 + checksum: 10c0/2e19e69c3ffb8f5742238f6b40a1da4abaa6c65ae98369a20417980bb147fb675effd1cd9223ad13707b496ef0673a9adf751292830f30ab9f4685623b32a83f + languageName: node + linkType: hard + +"@agoric/xsnap-lockdown@npm:0.14.1-dev-ef0668a.0+ef0668a": + version: 0.14.1-dev-ef0668a.0 + resolution: "@agoric/xsnap-lockdown@npm:0.14.1-dev-ef0668a.0" + checksum: 10c0/a4c11bbfece91f8ef0d082520e5dc70a55a553407d658e13de370f411fc061e7d67ea536bc7095bc18a280049687c3a16a49c1c9d6f33ee2938dbcad3e4ec5e0 + languageName: node + linkType: hard + +"@agoric/zoe@npm:0.26.3-dev-ef0668a.0+ef0668a": + version: 0.26.3-dev-ef0668a.0 + resolution: "@agoric/zoe@npm:0.26.3-dev-ef0668a.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/ertp": "npm:0.16.3-dev-ef0668a.0+ef0668a" + "@agoric/internal": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/notifier": "npm:0.6.3-dev-ef0668a.0+ef0668a" + "@agoric/store": "npm:0.9.3-dev-ef0668a.0+ef0668a" + "@agoric/swingset-liveslots": "npm:0.10.3-dev-ef0668a.0+ef0668a" + "@agoric/swingset-vat": "npm:0.32.3-dev-ef0668a.0+ef0668a" + "@agoric/time": "npm:0.3.3-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@agoric/vow": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/zone": "npm:0.2.3-dev-ef0668a.0+ef0668a" + "@endo/bundle-source": "npm:^3.4.2" + "@endo/captp": "npm:^4.4.2" + "@endo/common": "npm:^1.2.7" + "@endo/errors": "npm:^1.2.7" + "@endo/eventual-send": "npm:^1.2.7" + "@endo/exo": "npm:^1.5.6" + "@endo/far": "npm:^1.1.8" + "@endo/import-bundle": "npm:^1.3.1" + "@endo/marshal": "npm:^1.6.1" + "@endo/nat": "npm:^5.0.12" + "@endo/pass-style": "npm:^1.4.6" + "@endo/patterns": "npm:^1.4.6" + "@endo/promise-kit": "npm:^1.1.7" + yargs-parser: "npm:^21.1.1" + checksum: 10c0/2f24a636b6511a31263d76d98bdca09332b8f46b6630ff5e9405d35849e2b72c90d2a33cf5565ded734d8a63bb6fb1bf39c60e312e3025751c81159a24957746 + languageName: node + linkType: hard + +"@agoric/zone@npm:0.2.3-dev-ef0668a.0+ef0668a": + version: 0.2.3-dev-ef0668a.0 + resolution: "@agoric/zone@npm:0.2.3-dev-ef0668a.0" + dependencies: + "@agoric/base-zone": "npm:0.1.1-dev-ef0668a.0+ef0668a" + "@agoric/vat-data": "npm:0.5.3-dev-ef0668a.0+ef0668a" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/pass-style": "npm:^1.4.6" + checksum: 10c0/669d94b5f00e3c16b7b14c456b20496011612d875d0d2e989d2cf7402d5cae52cc89aecd1d26e7c0c6a8433d0a11e0368a456c8567ad881645212318b005871e + languageName: node + linkType: hard + +"@babel/code-frame@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/code-frame@npm:7.26.2" + dependencies: + "@babel/helper-validator-identifier": "npm:^7.25.9" + js-tokens: "npm:^4.0.0" + picocolors: "npm:^1.0.0" + checksum: 10c0/7d79621a6849183c415486af99b1a20b84737e8c11cd55b6544f688c51ce1fd710e6d869c3dd21232023da272a79b91efb3e83b5bc2dc65c1187c5fcd1b72ea8 + languageName: node + linkType: hard + +"@babel/generator@npm:^7.25.9": + version: 7.26.2 + resolution: "@babel/generator@npm:7.26.2" + dependencies: + "@babel/parser": "npm:^7.26.2" + "@babel/types": "npm:^7.26.0" + "@jridgewell/gen-mapping": "npm:^0.3.5" + "@jridgewell/trace-mapping": "npm:^0.3.25" + jsesc: "npm:^3.0.2" + checksum: 10c0/167ebce8977142f5012fad6bd91da51ac52bcd752f2261a54b7ab605d928aebe57e21636cdd2a9c7757e552652c68d9fcb5d40b06fcb66e02d9ee7526e118a5c + languageName: node + linkType: hard + +"@babel/helper-string-parser@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-string-parser@npm:7.25.9" + checksum: 10c0/7244b45d8e65f6b4338a6a68a8556f2cb161b782343e97281a5f2b9b93e420cad0d9f5773a59d79f61d0c448913d06f6a2358a87f2e203cf112e3c5b53522ee6 + languageName: node + linkType: hard + +"@babel/helper-validator-identifier@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/helper-validator-identifier@npm:7.25.9" + checksum: 10c0/4fc6f830177b7b7e887ad3277ddb3b91d81e6c4a24151540d9d1023e8dc6b1c0505f0f0628ae653601eb4388a8db45c1c14b2c07a9173837aef7e4116456259d + languageName: node + linkType: hard + +"@babel/parser@npm:^7.23.6, @babel/parser@npm:^7.25.9, @babel/parser@npm:^7.26.2": + version: 7.26.2 + resolution: "@babel/parser@npm:7.26.2" + dependencies: + "@babel/types": "npm:^7.26.0" + bin: + parser: ./bin/babel-parser.js + checksum: 10c0/751a743087b3a9172a7599f1421830d44c38f065ef781588d2bfb1c98f9b461719a226feb13c868d7a284783eee120c88ea522593118f2668f46ebfb1105c4d7 + languageName: node + linkType: hard + +"@babel/template@npm:^7.25.9": + version: 7.25.9 + resolution: "@babel/template@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + checksum: 10c0/ebe677273f96a36c92cc15b7aa7b11cc8bc8a3bb7a01d55b2125baca8f19cae94ff3ce15f1b1880fb8437f3a690d9f89d4e91f16fc1dc4d3eb66226d128983ab + languageName: node + linkType: hard + +"@babel/traverse@npm:^7.23.6": + version: 7.25.9 + resolution: "@babel/traverse@npm:7.25.9" + dependencies: + "@babel/code-frame": "npm:^7.25.9" + "@babel/generator": "npm:^7.25.9" + "@babel/parser": "npm:^7.25.9" + "@babel/template": "npm:^7.25.9" + "@babel/types": "npm:^7.25.9" + debug: "npm:^4.3.1" + globals: "npm:^11.1.0" + checksum: 10c0/e90be586a714da4adb80e6cb6a3c5cfcaa9b28148abdafb065e34cc109676fc3db22cf98cd2b2fff66ffb9b50c0ef882cab0f466b6844be0f6c637b82719bba1 + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.0, @babel/types@npm:^7.24.0, @babel/types@npm:^7.25.9, @babel/types@npm:^7.26.0": + version: 7.26.0 + resolution: "@babel/types@npm:7.26.0" + dependencies: + "@babel/helper-string-parser": "npm:^7.25.9" + "@babel/helper-validator-identifier": "npm:^7.25.9" + checksum: 10c0/b694f41ad1597127e16024d766c33a641508aad037abd08d0d1f73af753e1119fa03b4a107d04b5f92cc19c095a594660547ae9bead1db2299212d644b0a5cb8 + languageName: node + linkType: hard + +"@confio/ics23@npm:^0.6.8": + version: 0.6.8 + resolution: "@confio/ics23@npm:0.6.8" + dependencies: + "@noble/hashes": "npm:^1.0.0" + protobufjs: "npm:^6.8.8" + checksum: 10c0/2f3f5032cd6a34c9b2fbd64bbf7e1cdec75ca71f348a770f7b5474b5027b12202bfbcd404eca931efddb5901f769af035a87cb8bddbf3f23d7e5d93c9d3d7f6f + languageName: node + linkType: hard + +"@cosmjs/amino@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/amino@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + checksum: 10c0/cd8e215b0406f5c7b73ab0a21106d06b6f76b1da12f1ab7b612884e1dd8bc626966dc67d4e7580090ade131546cbec70000f854e6596935299d054b788929a7e + languageName: node + linkType: hard + +"@cosmjs/crypto@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/crypto@npm:0.32.4" + dependencies: + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + "@noble/hashes": "npm:^1" + bn.js: "npm:^5.2.0" + elliptic: "npm:^6.5.4" + libsodium-wrappers-sumo: "npm:^0.7.11" + checksum: 10c0/94e742285eb8c7c5393055ba0635f10c06bf87710e953aedc71e3edc2b8e21a12a0d9b5e8eff37e326765f57c9eb3c7fd358f24f639efad4f1a6624eb8189534 + languageName: node + linkType: hard + +"@cosmjs/encoding@npm:^0.32.3, @cosmjs/encoding@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/encoding@npm:0.32.4" + dependencies: + base64-js: "npm:^1.3.0" + bech32: "npm:^1.1.4" + readonly-date: "npm:^1.0.0" + checksum: 10c0/4a30d5ae1a2d1247d44bda46101ce208c7666d8801ca9a33de94edc35cc22460c16b4834ec84d5a65ffef5e2a4b58605e0a0a056c46bc0a042979ec84acf20cd + languageName: node + linkType: hard + +"@cosmjs/json-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/json-rpc@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + xstream: "npm:^11.14.0" + checksum: 10c0/b3ebd240f4fb21260e284d2e503ecc61bac898842187ab717f0efb9a5f21272f161f267cc145629caeb9735f80946844384e2bd410275a4744147a44518c0fa0 + languageName: node + linkType: hard + +"@cosmjs/math@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/math@npm:0.32.4" + dependencies: + bn.js: "npm:^5.2.0" + checksum: 10c0/91e47015be5634d27d71d14c5a05899fb4992b69db02cab1558376dedf8254f96d5e24f097c5601804ae18ed33c7c25d023653ac2bf9d20250fd3e5637f6b101 + languageName: node + linkType: hard + +"@cosmjs/proto-signing@npm:^0.32.3, @cosmjs/proto-signing@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/proto-signing@npm:0.32.4" + dependencies: + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + checksum: 10c0/6915059d2e6dbe1abda4a747c3b1abd47a9eff4f8cb2cf9a5545f939b656b4a15bbde2bfc1364357f9b2a081a066280c3b469f6d13dd5fc51b429b0f90a54913 + languageName: node + linkType: hard + +"@cosmjs/socket@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/socket@npm:0.32.4" + dependencies: + "@cosmjs/stream": "npm:^0.32.4" + isomorphic-ws: "npm:^4.0.1" + ws: "npm:^7" + xstream: "npm:^11.14.0" + checksum: 10c0/2d94c1fb39016bea3c7c145f4565c8a0fed20c805ac569ea604cd3646c15147b82b8db18a4e3c832d6ae0c3dd14363d4db3d91bcacac922679efba164ed49386 + languageName: node + linkType: hard + +"@cosmjs/stargate@npm:^0.32.3": + version: 0.32.4 + resolution: "@cosmjs/stargate@npm:0.32.4" + dependencies: + "@confio/ics23": "npm:^0.6.8" + "@cosmjs/amino": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/proto-signing": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/tendermint-rpc": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + cosmjs-types: "npm:^0.9.0" + xstream: "npm:^11.14.0" + checksum: 10c0/c30a3519516aaa7eae58ba827c80fcf74c7fe7a9d3aa5cc8138c3a2768f5f241f59c2f5cec27e9037b4df12b1c6605b4fac9eadb4de97bd84edddc3a80a02e24 + languageName: node + linkType: hard + +"@cosmjs/stream@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/stream@npm:0.32.4" + dependencies: + xstream: "npm:^11.14.0" + checksum: 10c0/c677c53f9101c2a36fa03a475d92dea2fa69c475f896751b5e18a5d07087eeecbf6bca2e62a8940003da53fa235a9b2dd78c8257bf19c3f96e3f69fa8d5f183d + languageName: node + linkType: hard + +"@cosmjs/tendermint-rpc@npm:^0.32.3, @cosmjs/tendermint-rpc@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/tendermint-rpc@npm:0.32.4" + dependencies: + "@cosmjs/crypto": "npm:^0.32.4" + "@cosmjs/encoding": "npm:^0.32.4" + "@cosmjs/json-rpc": "npm:^0.32.4" + "@cosmjs/math": "npm:^0.32.4" + "@cosmjs/socket": "npm:^0.32.4" + "@cosmjs/stream": "npm:^0.32.4" + "@cosmjs/utils": "npm:^0.32.4" + axios: "npm:^1.6.0" + readonly-date: "npm:^1.0.0" + xstream: "npm:^11.14.0" + checksum: 10c0/5fae7afcdf98cc7dd36922aa1586254cc8c202cf8fe66804e61d793d31dcff816f40d33f7a0eb72c1b9226c7c361d4848e4ff12d0489f6fa66f47f0c86ae18dd + languageName: node + linkType: hard + +"@cosmjs/utils@npm:^0.32.4": + version: 0.32.4 + resolution: "@cosmjs/utils@npm:0.32.4" + checksum: 10c0/d5ff8b235094be1150853a715116049f73eb5cdfeea8ce8e22ecccc61ec99792db457404d4307782b1a2f935dcf438f5c485beabfcfbc1dc5df26eb6e6da9062 + languageName: node + linkType: hard + +"@endo/base64@npm:^1.0.8, @endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 + languageName: node + linkType: hard + +"@endo/bundle-source@npm:^3.4.2": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" + "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" + "@rollup/plugin-node-resolve": "npm:^13.0.0" + acorn: "npm:^8.2.4" + rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" + bin: + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 + languageName: node + linkType: hard + +"@endo/captp@npm:^4.4.2": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 + languageName: node + linkType: hard + +"@endo/check-bundle@npm:^1.0.11": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c + languageName: node + linkType: hard + +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 + languageName: node + linkType: hard + +"@endo/common@npm:^1.2.7, @endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b + languageName: node + linkType: hard + +"@endo/compartment-mapper@npm:^1.3.1, @endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" + dependencies: + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 + languageName: node + linkType: hard + +"@endo/env-options@npm:^1.1.7, @endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 + languageName: node + linkType: hard + +"@endo/errors@npm:^1.2.7, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 + languageName: node + linkType: hard + +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 + languageName: node + linkType: hard + +"@endo/eventual-send@npm:^1.2.7, @endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd languageName: node linkType: hard -"@endo/promise-kit@npm:^1.1.7": +"@endo/exo@npm:^1.5.6": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 + languageName: node + linkType: hard + +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.8, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" + dependencies: + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e + languageName: node + linkType: hard + +"@endo/import-bundle@npm:^1.3.1": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a + languageName: node + linkType: hard + +"@endo/init@npm:^1.1.6, @endo/init@npm:^1.1.7": version: 1.1.7 - resolution: "@endo/promise-kit@npm:1.1.7" + resolution: "@endo/init@npm:1.1.7" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/98a8d743c437f106f266871874acd811c0e028fc89553738bbd46a0fea5871b9ba7ef0449ec38e7e3768fc21684993ecdbbd06f5f3429cd69fbe4b867d4c2bd5 + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f languageName: node linkType: hard -"@endo/zip@npm:^1.0.7": - version: 1.0.7 - resolution: "@endo/zip@npm:1.0.7" - checksum: 10c0/a1c0d155448ce877012b34c8fe8cd3a58de9eb807514c81cddeebb802ee8e552b27d8a9a40fab3f3e4c49e0cb7fea6902fa1dd12a23ff6f30b56161fc3edc1f8 +"@endo/lockdown@npm:^1.0.12, @endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 + languageName: node + linkType: hard + +"@endo/marshal@npm:^1.6.1, @endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 + languageName: node + linkType: hard + +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + +"@endo/nat@npm:^5.0.12, @endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 + languageName: node + linkType: hard + +"@endo/pass-style@npm:^1.4.6, @endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + "@fast-check/ava": "npm:^1.1.5" + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e + languageName: node + linkType: hard + +"@endo/patterns@npm:^1.4.6, @endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" + dependencies: + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b + languageName: node + linkType: hard + +"@endo/promise-kit@npm:^1.1.7, @endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 + languageName: node + linkType: hard + +"@endo/ses-ava@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" + dependencies: + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" + peerDependencies: + ava: ^5.3.0 || ^6.1.2 + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf + languageName: node + linkType: hard + +"@endo/stream@npm:^1.2.7": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" + dependencies: + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 + languageName: node + linkType: hard + +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 + languageName: node + linkType: hard + +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 + languageName: node + linkType: hard + +"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.8, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard @@ -145,6 +1035,31 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -159,6 +1074,55 @@ __metadata: languageName: node linkType: hard +"@jridgewell/gen-mapping@npm:^0.3.5": + version: 0.3.5 + resolution: "@jridgewell/gen-mapping@npm:0.3.5" + dependencies: + "@jridgewell/set-array": "npm:^1.2.1" + "@jridgewell/sourcemap-codec": "npm:^1.4.10" + "@jridgewell/trace-mapping": "npm:^0.3.24" + checksum: 10c0/1be4fd4a6b0f41337c4f5fdf4afc3bd19e39c3691924817108b82ffcb9c9e609c273f936932b9fba4b3a298ce2eb06d9bff4eb1cc3bd81c4f4ee1b4917e25feb + languageName: node + linkType: hard + +"@jridgewell/resolve-uri@npm:^3.1.0": + version: 3.1.2 + resolution: "@jridgewell/resolve-uri@npm:3.1.2" + checksum: 10c0/d502e6fb516b35032331406d4e962c21fe77cdf1cbdb49c6142bcbd9e30507094b18972778a6e27cbad756209cfe34b1a27729e6fa08a2eb92b33943f680cf1e + languageName: node + linkType: hard + +"@jridgewell/set-array@npm:^1.2.1": + version: 1.2.1 + resolution: "@jridgewell/set-array@npm:1.2.1" + checksum: 10c0/2a5aa7b4b5c3464c895c802d8ae3f3d2b92fcbe84ad12f8d0bfbb1f5ad006717e7577ee1fd2eac00c088abe486c7adb27976f45d2941ff6b0b92b2c3302c60f4 + languageName: node + linkType: hard + +"@jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.14": + version: 1.5.0 + resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" + checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 + languageName: node + linkType: hard + +"@jridgewell/trace-mapping@npm:^0.3.24, @jridgewell/trace-mapping@npm:^0.3.25": + version: 0.3.25 + resolution: "@jridgewell/trace-mapping@npm:0.3.25" + dependencies: + "@jridgewell/resolve-uri": "npm:^3.1.0" + "@jridgewell/sourcemap-codec": "npm:^1.4.14" + checksum: 10c0/3d1ce6ebc69df9682a5a8896b414c6537e428a1d68b02fcc8363b04284a8ca0df04d0ee3013132252ab14f2527bc13bea6526a912ecb5658f0e39fd2860b4df4 + languageName: node + linkType: hard + +"@noble/hashes@npm:^1, @noble/hashes@npm:^1.0.0": + version: 1.5.0 + resolution: "@noble/hashes@npm:1.5.0" + checksum: 10c0/1b46539695fbfe4477c0822d90c881a04d4fa2921c08c552375b444a48cac9930cb1ee68de0a3c7859e676554d0f3771999716606dc4d8f826e414c11692cdd9 + languageName: node + linkType: hard + "@nodelib/fs.scandir@npm:2.1.5": version: 2.1.5 resolution: "@nodelib/fs.scandir@npm:2.1.5" @@ -176,7 +1140,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -215,6 +1179,155 @@ __metadata: languageName: node linkType: hard +"@protobufjs/aspromise@npm:^1.1.1, @protobufjs/aspromise@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/aspromise@npm:1.1.2" + checksum: 10c0/a83343a468ff5b5ec6bff36fd788a64c839e48a07ff9f4f813564f58caf44d011cd6504ed2147bf34835bd7a7dd2107052af755961c6b098fd8902b4f6500d0f + languageName: node + linkType: hard + +"@protobufjs/base64@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/base64@npm:1.1.2" + checksum: 10c0/eec925e681081af190b8ee231f9bad3101e189abbc182ff279da6b531e7dbd2a56f1f306f37a80b1be9e00aa2d271690d08dcc5f326f71c9eed8546675c8caf6 + languageName: node + linkType: hard + +"@protobufjs/codegen@npm:^2.0.4": + version: 2.0.4 + resolution: "@protobufjs/codegen@npm:2.0.4" + checksum: 10c0/26ae337c5659e41f091606d16465bbcc1df1f37cc1ed462438b1f67be0c1e28dfb2ca9f294f39100c52161aef82edf758c95d6d75650a1ddf31f7ddee1440b43 + languageName: node + linkType: hard + +"@protobufjs/eventemitter@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/eventemitter@npm:1.1.0" + checksum: 10c0/1eb0a75180e5206d1033e4138212a8c7089a3d418c6dfa5a6ce42e593a4ae2e5892c4ef7421f38092badba4040ea6a45f0928869989411001d8c1018ea9a6e70 + languageName: node + linkType: hard + +"@protobufjs/fetch@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/fetch@npm:1.1.0" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.1" + "@protobufjs/inquire": "npm:^1.1.0" + checksum: 10c0/cda6a3dc2d50a182c5865b160f72077aac197046600091dbb005dd0a66db9cce3c5eaed6d470ac8ed49d7bcbeef6ee5f0bc288db5ff9a70cbd003e5909065233 + languageName: node + linkType: hard + +"@protobufjs/float@npm:^1.0.2": + version: 1.0.2 + resolution: "@protobufjs/float@npm:1.0.2" + checksum: 10c0/18f2bdede76ffcf0170708af15c9c9db6259b771e6b84c51b06df34a9c339dbbeec267d14ce0bddd20acc142b1d980d983d31434398df7f98eb0c94a0eb79069 + languageName: node + linkType: hard + +"@protobufjs/inquire@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/inquire@npm:1.1.0" + checksum: 10c0/64372482efcba1fb4d166a2664a6395fa978b557803857c9c03500e0ac1013eb4b1aacc9ed851dd5fc22f81583670b4f4431bae186f3373fedcfde863ef5921a + languageName: node + linkType: hard + +"@protobufjs/path@npm:^1.1.2": + version: 1.1.2 + resolution: "@protobufjs/path@npm:1.1.2" + checksum: 10c0/cece0a938e7f5dfd2fa03f8c14f2f1cf8b0d6e13ac7326ff4c96ea311effd5fb7ae0bba754fbf505312af2e38500250c90e68506b97c02360a43793d88a0d8b4 + languageName: node + linkType: hard + +"@protobufjs/pool@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/pool@npm:1.1.0" + checksum: 10c0/eda2718b7f222ac6e6ad36f758a92ef90d26526026a19f4f17f668f45e0306a5bd734def3f48f51f8134ae0978b6262a5c517c08b115a551756d1a3aadfcf038 + languageName: node + linkType: hard + +"@protobufjs/utf8@npm:^1.1.0": + version: 1.1.0 + resolution: "@protobufjs/utf8@npm:1.1.0" + checksum: 10c0/a3fe31fe3fa29aa3349e2e04ee13dc170cc6af7c23d92ad49e3eeaf79b9766264544d3da824dba93b7855bd6a2982fb40032ef40693da98a136d835752beb487 + languageName: node + linkType: hard + +"@rollup/plugin-commonjs@npm:^19.0.0": + version: 19.0.2 + resolution: "@rollup/plugin-commonjs@npm:19.0.2" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + commondir: "npm:^1.0.1" + estree-walker: "npm:^2.0.1" + glob: "npm:^7.1.6" + is-reference: "npm:^1.2.1" + magic-string: "npm:^0.25.7" + resolve: "npm:^1.17.0" + peerDependencies: + rollup: ^2.38.3 + checksum: 10c0/9adccf77ad835cbe565da4385212f1e54c3e0dca2be174b5c2cfe89cfaeb240f42c7673e97e49b21b7c66ed901cc1c711552b6727f60b43a953ce996eb2868a7 + languageName: node + linkType: hard + +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + +"@rollup/plugin-node-resolve@npm:^13.0.0": + version: 13.3.0 + resolution: "@rollup/plugin-node-resolve@npm:13.3.0" + dependencies: + "@rollup/pluginutils": "npm:^3.1.0" + "@types/resolve": "npm:1.17.1" + deepmerge: "npm:^4.2.2" + is-builtin-module: "npm:^3.1.0" + is-module: "npm:^1.0.0" + resolve: "npm:^1.19.0" + peerDependencies: + rollup: ^2.42.0 + checksum: 10c0/6caa32a8304a20f1c9953111b25e9543f4de7d254958d81ce0158ad909e4493946bc2060c4ace23d9748b560ebc84c920ee7bc1b7d50dbf8ba852ef13c91af58 + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^3.1.0": + version: 3.1.0 + resolution: "@rollup/pluginutils@npm:3.1.0" + dependencies: + "@types/estree": "npm:0.0.39" + estree-walker: "npm:^1.0.1" + picomatch: "npm:^2.2.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0 + checksum: 10c0/7151753160d15ba2b259461a6c25b3932150994ea52dba8fd3144f634c7647c2e56733d986e2c15de67c4d96a9ee7d6278efa6d2e626a7169898fd64adc0f90c + languageName: node + linkType: hard + +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.3 + resolution: "@rollup/pluginutils@npm:5.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + languageName: node + linkType: hard + "@sec-ant/readable-stream@npm:^0.4.1": version: 0.4.1 resolution: "@sec-ant/readable-stream@npm:0.4.1" @@ -229,6 +1342,52 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:*, @types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + +"@types/estree@npm:0.0.39": + version: 0.0.39 + resolution: "@types/estree@npm:0.0.39" + checksum: 10c0/f0af6c95ac1988c4827964bd9d3b51d24da442e2188943f6dfcb1e1559103d5d024d564b2e9d3f84c53714a02a0a7435c7441138eb63d9af5de4dfc66cdc0d92 + languageName: node + linkType: hard + +"@types/long@npm:^4.0.1": + version: 4.0.2 + resolution: "@types/long@npm:4.0.2" + checksum: 10c0/42ec66ade1f72ff9d143c5a519a65efc7c1c77be7b1ac5455c530ae9acd87baba065542f8847522af2e3ace2cc999f3ad464ef86e6b7352eece34daf88f8c924 + languageName: node + linkType: hard + +"@types/node@npm:*, @types/node@npm:>=13.7.0": + version: 22.9.0 + resolution: "@types/node@npm:22.9.0" + dependencies: + undici-types: "npm:~6.19.8" + checksum: 10c0/3f46cbe0a49bab4ba30494025e4c8a6e699b98ac922857aa1f0209ce11a1313ee46e6808b8f13fe5b8b960a9d7796b77c8d542ad4e9810e85ef897d5593b5d51 + languageName: node + linkType: hard + +"@types/resolve@npm:1.17.1": + version: 1.17.1 + resolution: "@types/resolve@npm:1.17.1" + dependencies: + "@types/node": "npm:*" + checksum: 10c0/6eeb9c27d99bf4b393bf168d43208f63e78cefca5644662a0bdb2bdbf8352386f4f3aca66add138fc41bce5f66fd48a0de430a1473f11b612fbed0375ae78031 + languageName: node + linkType: hard + +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -236,6 +1395,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + "acorn-walk@npm:^8.2.0": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -254,6 +1422,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.2.4, acorn@npm:^8.9.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 10c0/6d4ee461a7734b2f48836ee0fbb752903606e576cc100eb49340295129ca0b452f3ba91ddd4424a1d4406a98adfb2ebb6bd0ff4c49d7a0930c10e462719bbfd7 + languageName: node + linkType: hard + "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0": version: 7.1.0 resolution: "agent-base@npm:7.1.0" @@ -283,6 +1460,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -297,7 +1486,16 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0": +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -313,6 +1511,13 @@ __metadata: languageName: node linkType: hard +"anylogger@npm:^0.21.0": + version: 0.21.0 + resolution: "anylogger@npm:0.21.0" + checksum: 10c0/1ca7fcf5bc2b78d1e1d9b8c8cc7ce50b5c6cc67a8da5a28c9c975b7b46fff255a04abab02de38a5139190c9d8b34b3d6c59af6724521b077f7d7dfbad9b47a9c + languageName: node + linkType: hard + "anymatch@npm:~3.1.2": version: 3.1.3 resolution: "anymatch@npm:3.1.3" @@ -332,6 +1537,23 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -339,6 +1561,22 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 + languageName: node + linkType: hard + "arrgv@npm:^1.0.2": version: 1.0.2 resolution: "arrgv@npm:1.0.2" @@ -353,6 +1591,13 @@ __metadata: languageName: node linkType: hard +"asynckit@npm:^0.4.0": + version: 0.4.0 + resolution: "asynckit@npm:0.4.0" + checksum: 10c0/d73e2ddf20c4eb9337e1b3df1a0f6159481050a5de457c55b14ea2e5cb6d90bb69e004c9af54737a5ee0917fcf2c9e25de67777bbe58261847846066ba75bc9d + languageName: node + linkType: hard + "ava@npm:^5.3.1": version: 5.3.1 resolution: "ava@npm:5.3.1" @@ -411,6 +1656,37 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"axios@npm:1.7.7": + version: 1.7.7 + resolution: "axios@npm:1.7.7" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/4499efc89e86b0b49ffddc018798de05fab26e3bf57913818266be73279a6418c3ce8f9e934c7d2d707ab8c095e837fc6c90608fb7715b94d357720b5f568af7 + languageName: node + linkType: hard + +"axios@patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch": + version: 1.7.7 + resolution: "axios@patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch::version=1.7.7&hash=df7a05" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/49964e1025a39e845ad1824cdf49f313202de26e55bbc4a67e81aaeaba78a8efcbfe3da42ca61c14fdbc249bdbd62b5478e9e54ea3456711d159ec068b12c392 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -418,14 +1694,21 @@ __metadata: languageName: node linkType: hard -"base64-js@npm:^1.3.1": +"base64-js@npm:^1.3.0, base64-js@npm:^1.3.1": version: 1.5.1 resolution: "base64-js@npm:1.5.1" checksum: 10c0/f23823513b63173a001030fae4f2dabe283b99a9d324ade3ad3d148e218134676f1ee8568c877cd79ec1c53158dcf2d2ba527a97c606618928ba99dd930102bf languageName: node linkType: hard -"better-sqlite3@npm:^9.6.0": +"bech32@npm:^1.1.4": + version: 1.1.4 + resolution: "bech32@npm:1.1.4" + checksum: 10c0/5f62ca47b8df99ace9c0e0d8deb36a919d91bf40066700aaa9920a45f86bb10eb56d537d559416fd8703aa0fb60dddb642e58f049701e7291df678b2033e5ee5 + languageName: node + linkType: hard + +"better-sqlite3@npm:^9.1.1, better-sqlite3@npm:^9.6.0": version: 9.6.0 resolution: "better-sqlite3@npm:9.6.0" dependencies: @@ -470,6 +1753,30 @@ __metadata: languageName: node linkType: hard +"bn.js@npm:^4.11.9": + version: 4.12.1 + resolution: "bn.js@npm:4.12.1" + checksum: 10c0/b7f37a0cd5e4b79142b6f4292d518b416be34ae55d6dd6b0f66f96550c8083a50ffbbf8bda8d0ab471158cb81aa74ea4ee58fe33c7802e4a30b13810e98df116 + languageName: node + linkType: hard + +"bn.js@npm:^5.2.0": + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 10c0/bed3d8bd34ec89dbcf9f20f88bd7d4a49c160fda3b561c7bb227501f974d3e435a48fb9b61bc3de304acab9215a3bda0803f7017ffb4d0016a0c3a740a283caa + languageName: node + linkType: hard + +"brace-expansion@npm:^1.1.7": + version: 1.1.11 + resolution: "brace-expansion@npm:1.1.11" + dependencies: + balanced-match: "npm:^1.0.0" + concat-map: "npm:0.0.1" + checksum: 10c0/695a56cd058096a7cb71fb09d9d6a7070113c7be516699ed361317aca2ec169f618e28b8af352e02ab4233fb54eb0168460a40dc320bab0034b36ab59aaad668 + languageName: node + linkType: hard + "brace-expansion@npm:^2.0.1": version: 2.0.1 resolution: "brace-expansion@npm:2.0.1" @@ -488,6 +1795,13 @@ __metadata: languageName: node linkType: hard +"brorand@npm:^1.1.0": + version: 1.1.0 + resolution: "brorand@npm:1.1.0" + checksum: 10c0/6f366d7c4990f82c366e3878492ba9a372a73163c09871e80d82fb4ae0d23f9f8924cb8a662330308206e6b3b76ba1d528b4601c9ef73c2166b440b2ea3b7571 + languageName: node + linkType: hard + "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -498,6 +1812,13 @@ __metadata: languageName: node linkType: hard +"builtin-modules@npm:^3.3.0": + version: 3.3.0 + resolution: "builtin-modules@npm:3.3.0" + checksum: 10c0/2cb3448b4f7306dc853632a4fcddc95e8d4e4b9868c139400027b71938fc6806d4ff44007deffb362ac85724bd40c2c6452fb6a0aa4531650eeddb98d8e5ee8a + languageName: node + linkType: hard + "cacache@npm:^18.0.0": version: 18.0.1 resolution: "cacache@npm:18.0.1" @@ -518,6 +1839,26 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + "callsites@npm:^4.0.0": version: 4.2.0 resolution: "callsites@npm:4.2.0" @@ -534,6 +1875,27 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -648,6 +2010,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -657,6 +2028,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -664,6 +2042,15 @@ __metadata: languageName: node linkType: hard +"combined-stream@npm:^1.0.8": + version: 1.0.8 + resolution: "combined-stream@npm:1.0.8" + dependencies: + delayed-stream: "npm:~1.0.0" + checksum: 10c0/0dbb829577e1b1e839fa82b40c07ffaf7de8a09b935cadd355a73652ae70a88b4320db322f6634a4ad93424292fa80973ac6480986247f1734a1137debf271d5 + languageName: node + linkType: hard + "common-path-prefix@npm:^3.0.0": version: 3.0.0 resolution: "common-path-prefix@npm:3.0.0" @@ -671,6 +2058,20 @@ __metadata: languageName: node linkType: hard +"commondir@npm:^1.0.1": + version: 1.0.1 + resolution: "commondir@npm:1.0.1" + checksum: 10c0/33a124960e471c25ee19280c9ce31ccc19574b566dc514fe4f4ca4c34fa8b0b57cf437671f5de380e11353ea9426213fca17687dd2ef03134fea2dbc53809fd6 + languageName: node + linkType: hard + +"concat-map@npm:0.0.1": + version: 0.0.1 + resolution: "concat-map@npm:0.0.1" + checksum: 10c0/c996b1cfdf95b6c90fee4dae37e332c8b6eb7d106430c17d538034c0ad9a1630cb194d2ab37293b1bdd4d779494beee7786d586a50bd9376fd6f7bcc2bd4c98f + languageName: node + linkType: hard + "concordance@npm:^5.0.4": version: 5.0.4 resolution: "concordance@npm:5.0.4" @@ -701,6 +2102,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -712,6 +2126,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.2": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + "currently-unhandled@npm:^0.4.1": version: 0.4.1 resolution: "currently-unhandled@npm:0.4.1" @@ -721,6 +2146,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + "date-time@npm:^3.1.0": version: 3.1.0 resolution: "date-time@npm:3.1.0" @@ -742,6 +2200,18 @@ __metadata: languageName: node linkType: hard +"debug@npm:^4.3.1, debug@npm:^4.3.2": + version: 4.3.7 + resolution: "debug@npm:4.3.7" + dependencies: + ms: "npm:^2.1.3" + peerDependenciesMeta: + supports-color: + optional: true + checksum: 10c0/1471db19c3b06d485a622d62f65947a19a23fbd0dd73f7fd3eafb697eec5360cde447fb075919987899b1a2096e85d35d4eb5a4de09a57600ac9cf7e6c8e768b + languageName: node + linkType: hard + "decompress-response@npm:^6.0.0": version: 6.0.0 resolution: "decompress-response@npm:6.0.0" @@ -758,6 +2228,49 @@ __metadata: languageName: node linkType: hard +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + +"deepmerge@npm:^4.2.2": + version: 4.3.1 + resolution: "deepmerge@npm:4.3.1" + checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 + languageName: node + linkType: hard + +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": + version: 1.1.4 + resolution: "define-data-property@npm:1.1.4" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + gopd: "npm:^1.0.1" + checksum: 10c0/dea0606d1483eb9db8d930d4eac62ca0fa16738b0b3e07046cddfacf7d8c868bbe13fa0cb263eb91c7d0d527960dc3f2f2471a69ed7816210307f6744fe62e37 + languageName: node + linkType: hard + +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": + version: 1.2.1 + resolution: "define-properties@npm:1.2.1" + dependencies: + define-data-property: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.0" + object-keys: "npm:^1.1.1" + checksum: 10c0/88a152319ffe1396ccc6ded510a3896e77efac7a1bfbaa174a7b00414a1747377e0bb525d303794a47cf30e805c2ec84e575758512c6e44a993076d29fd4e6c3 + languageName: node + linkType: hard + +"delayed-stream@npm:~1.0.0": + version: 1.0.0 + resolution: "delayed-stream@npm:1.0.0" + checksum: 10c0/d758899da03392e6712f042bec80aa293bbe9e9ff1b2634baae6a360113e708b91326594c8a486d475c69d6259afb7efacdc3537bfcda1c6c648e390ce601b19 + languageName: node + linkType: hard + "detect-libc@npm:^2.0.0": version: 2.0.2 resolution: "detect-libc@npm:2.0.2" @@ -774,6 +2287,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -781,6 +2303,21 @@ __metadata: languageName: node linkType: hard +"elliptic@npm:^6.5.4": + version: 6.6.1 + resolution: "elliptic@npm:6.6.1" + dependencies: + bn.js: "npm:^4.11.9" + brorand: "npm:^1.1.0" + hash.js: "npm:^1.0.0" + hmac-drbg: "npm:^1.0.1" + inherits: "npm:^2.0.4" + minimalistic-assert: "npm:^1.0.1" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/8b24ef782eec8b472053793ea1e91ae6bee41afffdfcb78a81c0a53b191e715cbe1292aa07165958a9bbe675bd0955142560b1a007ffce7d6c765bcaf951a867 + languageName: node + linkType: hard + "emittery@npm:^1.0.1": version: 1.0.3 resolution: "emittery@npm:1.0.3" @@ -834,6 +2371,116 @@ __metadata: languageName: node linkType: hard +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.5 + resolution: "es-abstract@npm:1.23.5" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10c0/1f6f91da9cf7ee2c81652d57d3046621d598654d1d1b05c1578bafe5c4c2d3d69513901679bdca2de589f620666ec21de337e4935cec108a4ed0871d5ef04a5d + languageName: node + linkType: hard + +"es-define-property@npm:^1.0.0": + version: 1.0.0 + resolution: "es-define-property@npm:1.0.0" + dependencies: + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/6bf3191feb7ea2ebda48b577f69bdfac7a2b3c9bcf97307f55fd6ef1bbca0b49f0c219a935aca506c993d8c5d8bddd937766cb760cd5e5a1071351f2df9f9aa4 + languageName: node + linkType: hard + +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": + version: 1.3.0 + resolution: "es-errors@npm:1.3.0" + checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 + languageName: node + linkType: hard + +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: "npm:^1.1.4" + is-date-object: "npm:^1.0.1" + is-symbol: "npm:^1.0.2" + checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -848,6 +2495,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + "escape-string-regexp@npm:^2.0.0": version: 2.0.0 resolution: "escape-string-regexp@npm:2.0.0" @@ -855,6 +2509,89 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.57.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -865,36 +2602,75 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.3": +"esquery@npm:^1.4.2": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + +"estree-walker@npm:^1.0.1": + version: 1.0.1 + resolution: "estree-walker@npm:1.0.1" + checksum: 10c0/fa9e5f8c1bbe8d01e314c0f03067b64a4f22d4c58410fc5237060d0c15b81e58c23921c41acc60abbdab490f1fdfcbd6408ede2d03ca704454272e0244d61a55 + languageName: node + linkType: hard + +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": + version: 2.0.2 + resolution: "estree-walker@npm:2.0.2" + checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af + languageName: node + linkType: hard + +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 languageName: node linkType: hard -"execa@npm:^9.3.1": - version: 9.4.0 - resolution: "execa@npm:9.4.0" +"execa@npm:9.1.0": + version: 9.1.0 + resolution: "execa@npm:9.1.0" dependencies: "@sindresorhus/merge-streams": "npm:^4.0.0" cross-spawn: "npm:^7.0.3" figures: "npm:^6.1.0" get-stream: "npm:^9.0.0" - human-signals: "npm:^8.0.0" + human-signals: "npm:^7.0.0" is-plain-obj: "npm:^4.1.0" is-stream: "npm:^4.0.1" - npm-run-path: "npm:^6.0.0" + npm-run-path: "npm:^5.2.0" pretty-ms: "npm:^9.0.0" signal-exit: "npm:^4.1.0" strip-final-newline: "npm:^4.0.0" yoctocolors: "npm:^2.0.0" - checksum: 10c0/6ad06c627b5d7bb007bc7b6cc35d7e32b5a3365375ffc8ddbcc12d2423651fa9928ba0c447cc9e60079e505e9b24fbe0a57f80371511d7d20302c04c2d3ce95e + checksum: 10c0/9a4810b93d098eb0bed48793b61c3aa3e5804867c2c5808cd2a597a6e71738151a74dc792909085ce1d38e89f4b0e078d93ffd165aaca2d9a6728f3616f8e5c0 languageName: node linkType: hard -"execa@npm:^9.5.1": - version: 9.5.1 - resolution: "execa@npm:9.5.1" +"execa@npm:^9.3.1": + version: 9.4.0 + resolution: "execa@npm:9.4.0" dependencies: "@sindresorhus/merge-streams": "npm:^4.0.0" cross-spawn: "npm:^7.0.3" @@ -908,7 +2684,7 @@ __metadata: signal-exit: "npm:^4.1.0" strip-final-newline: "npm:^4.0.0" yoctocolors: "npm:^2.0.0" - checksum: 10c0/1a628d535c5a088f9e17a735bb3143efc4198095392b319ba877b2975d5c3c57724536dccb6f68f1cd9b3af331c5a9e8c1aeb338d52ab316b1e008ff453374a7 + checksum: 10c0/6ad06c627b5d7bb007bc7b6cc35d7e32b5a3365375ffc8ddbcc12d2423651fa9928ba0c447cc9e60079e505e9b24fbe0a57f80371511d7d20302c04c2d3ce95e languageName: node linkType: hard @@ -935,6 +2711,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + "fast-diff@npm:^1.2.0": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" @@ -955,6 +2738,20 @@ __metadata: languageName: node linkType: hard +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -983,6 +2780,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -999,6 +2805,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + "find-up@npm:^6.0.0": version: 6.3.0 resolution: "find-up@npm:6.3.0" @@ -1009,6 +2825,43 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + languageName: node + linkType: hard + +"follow-redirects@npm:^1.15.6": + version: 1.15.9 + resolution: "follow-redirects@npm:1.15.9" + peerDependenciesMeta: + debug: + optional: true + checksum: 10c0/5829165bd112c3c0e82be6c15b1a58fa9dcfaede3b3c54697a82fe4a62dd5ae5e8222956b448d2f98e331525f05d00404aba7d696de9e761ef6e42fdc780244f + languageName: node + linkType: hard + +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.1.1 resolution: "foreground-child@npm:3.1.1" @@ -1019,6 +2872,17 @@ __metadata: languageName: node linkType: hard +"form-data@npm:^4.0.0": + version: 4.0.1 + resolution: "form-data@npm:4.0.1" + dependencies: + asynckit: "npm:^0.4.0" + combined-stream: "npm:^1.0.8" + mime-types: "npm:^2.1.12" + checksum: 10c0/bb102d570be8592c23f4ea72d7df9daa50c7792eb0cf1c5d7e506c1706e7426a4e4ae48a35b109e91c85f1c0ec63774a21ae252b66f4eb981cb8efef7d0463c8 + languageName: node + linkType: hard + "fs-constants@npm:^1.0.0": version: 1.0.0 resolution: "fs-constants@npm:1.0.0" @@ -1044,6 +2908,13 @@ __metadata: languageName: node linkType: hard +"fs.realpath@npm:^1.0.0": + version: 1.0.0 + resolution: "fs.realpath@npm:1.0.0" + checksum: 10c0/444cf1291d997165dfd4c0d58b69f0e4782bfd9149fd72faa4fe299e68e0e93d6db941660b37dd29153bf7186672ececa3b50b7e7249477b03fdf850f287c948 + languageName: node + linkType: hard + "fsevents@npm:~2.3.2": version: 2.3.3 resolution: "fsevents@npm:2.3.3" @@ -1063,6 +2934,32 @@ __metadata: languageName: node linkType: hard +"function-bind@npm:^1.1.2": + version: 1.1.2 + resolution: "function-bind@npm:1.1.2" + checksum: 10c0/d8680ee1e5fcd4c197e4ac33b2b4dce03c71f4d91717292785703db200f5c21f977c568d28061226f9b5900cbcd2c84463646134fd5337e7925e0942bc3f46d5 + languageName: node + linkType: hard + +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + functions-have-names: "npm:^1.2.3" + checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -1070,6 +2967,19 @@ __metadata: languageName: node linkType: hard +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": + version: 1.2.4 + resolution: "get-intrinsic@npm:1.2.4" + dependencies: + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + has-proto: "npm:^1.0.1" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.0" + checksum: 10c0/0a9b82c16696ed6da5e39b1267104475c47e3a9bdbe8b509dfe1710946e38a87be70d759f4bb3cda042d76a41ef47fe769660f3b7c0d1f68750299344ffb15b7 + languageName: node + linkType: hard + "get-stream@npm:^9.0.0": version: 9.0.1 resolution: "get-stream@npm:9.0.1" @@ -1080,6 +2990,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc + languageName: node + linkType: hard + "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" @@ -1096,6 +3017,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + "glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.3.10 resolution: "glob@npm:10.3.10" @@ -1111,6 +3041,46 @@ __metadata: languageName: node linkType: hard +"glob@npm:^7.1.3, glob@npm:^7.1.6": + version: 7.2.3 + resolution: "glob@npm:7.2.3" + dependencies: + fs.realpath: "npm:^1.0.0" + inflight: "npm:^1.0.4" + inherits: "npm:2" + minimatch: "npm:^3.1.1" + once: "npm:^1.3.0" + path-is-absolute: "npm:^1.0.0" + checksum: 10c0/65676153e2b0c9095100fe7f25a778bf45608eeb32c6048cf307f579649bcc30353277b3b898a3792602c65764e5baa4f643714dfbdfd64ea271d210c7a425fe + languageName: node + linkType: hard + +"globals@npm:^11.1.0": + version: 11.12.0 + resolution: "globals@npm:11.12.0" + checksum: 10c0/758f9f258e7b19226bd8d4af5d3b0dcf7038780fb23d82e6f98932c44e239f884847f1766e8fa9cc5635ccb3204f7fa7314d4408dd4002a5e8ea827b4018f0a1 + languageName: node + linkType: hard + +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.4": + version: 1.0.4 + resolution: "globalthis@npm:1.0.4" + dependencies: + define-properties: "npm:^1.2.1" + gopd: "npm:^1.0.1" + checksum: 10c0/9d156f313af79d80b1566b93e19285f481c591ad6d0d319b4be5e03750d004dde40a39a0f26f7e635f9007a3600802f53ecd85a759b86f109e80a5f705e01846 + languageName: node + linkType: hard + "globby@npm:^13.1.4": version: 13.2.2 resolution: "globby@npm:13.2.2" @@ -1124,13 +3094,119 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6": +"gopd@npm:^1.0.1": + version: 1.0.1 + resolution: "gopd@npm:1.0.1" + dependencies: + get-intrinsic: "npm:^1.1.3" + checksum: 10c0/505c05487f7944c552cee72087bf1567debb470d4355b1335f2c262d218ebbff805cd3715448fe29b4b380bae6912561d0467233e4165830efd28da241418c63 + languageName: node + linkType: hard + +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": + version: 1.0.2 + resolution: "has-property-descriptors@npm:1.0.2" + dependencies: + es-define-property: "npm:^1.0.0" + checksum: 10c0/253c1f59e80bb476cf0dde8ff5284505d90c3bdb762983c3514d36414290475fe3fd6f574929d84de2a8eec00d35cf07cb6776205ff32efd7c50719125f00236 + languageName: node + linkType: hard + +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": + version: 1.0.3 + resolution: "has-proto@npm:1.0.3" + checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 + languageName: node + linkType: hard + +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": + version: 1.0.3 + resolution: "has-symbols@npm:1.0.3" + checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 + languageName: node + linkType: hard + +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + +"hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": + version: 1.1.7 + resolution: "hash.js@npm:1.1.7" + dependencies: + inherits: "npm:^2.0.3" + minimalistic-assert: "npm:^1.0.1" + checksum: 10c0/41ada59494eac5332cfc1ce6b7ebdd7b88a3864a6d6b08a3ea8ef261332ed60f37f10877e0c825aaa4bddebf164fbffa618286aeeec5296675e2671cbfa746c4 + languageName: node + linkType: hard + +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": + version: 2.0.2 + resolution: "hasown@npm:2.0.2" + dependencies: + function-bind: "npm:^1.1.2" + checksum: 10c0/3769d434703b8ac66b209a4cca0737519925bbdb61dd887f93a16372b14694c63ff4e797686d87c90f08168e81082248b9b028bad60d4da9e0d1148766f56eb9 + languageName: node + linkType: hard + +"hmac-drbg@npm:^1.0.1": + version: 1.0.1 + resolution: "hmac-drbg@npm:1.0.1" + dependencies: + hash.js: "npm:^1.0.3" + minimalistic-assert: "npm:^1.0.0" + minimalistic-crypto-utils: "npm:^1.0.1" + checksum: 10c0/f3d9ba31b40257a573f162176ac5930109816036c59a09f901eb2ffd7e5e705c6832bedfff507957125f2086a0ab8f853c0df225642a88bf1fcaea945f20600d + languageName: node + linkType: hard + +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -1158,6 +3234,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^7.0.0": + version: 7.0.0 + resolution: "human-signals@npm:7.0.0" + checksum: 10c0/ce0c6d62d2e9bfe529d48f7c7fdf4b8c70fce950eef7850719b4e3f5bc71795ae7d61a3699ce13262bed7847705822601cc81f1921ea6a2906852e16228a94ab + languageName: node + linkType: hard + "human-signals@npm:^8.0.0": version: 8.0.0 resolution: "human-signals@npm:8.0.0" @@ -1188,13 +3271,30 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.4": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + +"import-meta-resolve@npm:^2.2.1": + version: 2.2.2 + resolution: "import-meta-resolve@npm:2.2.2" + checksum: 10c0/80873aebf0d2a66e824e278fb6cbb16a6660f86df49b367404e5de80928720ecb44f643243b46dc5c5fae506abb666ef54d6f281b45ee0f1034951acb2261eb5 + languageName: node + linkType: hard + "imurmurhash@npm:^0.1.4": version: 0.1.4 resolution: "imurmurhash@npm:0.1.4" @@ -1216,7 +3316,17 @@ __metadata: languageName: node linkType: hard -"inherits@npm:^2.0.3, inherits@npm:^2.0.4": +"inflight@npm:^1.0.4": + version: 1.0.6 + resolution: "inflight@npm:1.0.6" + dependencies: + once: "npm:^1.3.0" + wrappy: "npm:1" + checksum: 10c0/7faca22584600a9dc5b9fca2cd5feb7135ac8c935449837b315676b4c90aa4f391ec4f42240178244b5a34e8bede1948627fda392ca3191522fc46b34e985ab2 + languageName: node + linkType: hard + +"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10c0/4e531f648b29039fb7426fb94075e6545faa1eb9fe83c29f0b6d9e7263aceb4289d2d4557db0d428188eeb449cc7c5e77b0a0b2c4e248ff2a65933a0dee49ef2 @@ -1230,6 +3340,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c + languageName: node + linkType: hard + "ip@npm:^2.0.0": version: 2.0.0 resolution: "ip@npm:2.0.0" @@ -1244,6 +3365,32 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: "npm:^1.0.1" + checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + languageName: node + linkType: hard + "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" @@ -1253,6 +3400,59 @@ __metadata: languageName: node linkType: hard +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + languageName: node + linkType: hard + +"is-builtin-module@npm:^3.1.0": + version: 3.2.1 + resolution: "is-builtin-module@npm:3.2.1" + dependencies: + builtin-modules: "npm:^3.3.0" + checksum: 10c0/5a66937a03f3b18803381518f0ef679752ac18cdb7dd53b5e23ee8df8d440558737bd8dcc04d2aae555909d2ecb4a81b5c0d334d119402584b61e6a003e31af1 + languageName: node + linkType: hard + +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + +"is-core-module@npm:^2.13.0": + version: 2.15.1 + resolution: "is-core-module@npm:2.15.1" + dependencies: + hasown: "npm:^2.0.2" + checksum: 10c0/53432f10c69c40bfd2fa8914133a68709ff9498c86c3bf5fca3cdf3145a56fd2168cbf4a43b29843a6202a120a5f9c5ffba0a4322e1e3441739bc0b641682612 + languageName: node + linkType: hard + +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + "is-error@npm:^2.2.2": version: 2.2.2 resolution: "is-error@npm:2.2.2" @@ -1281,7 +3481,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -1297,6 +3497,29 @@ __metadata: languageName: node linkType: hard +"is-module@npm:^1.0.0": + version: 1.0.0 + resolution: "is-module@npm:1.0.0" + checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc + languageName: node + linkType: hard + +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -1304,6 +3527,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + "is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -1311,17 +3541,45 @@ __metadata: languageName: node linkType: hard -"is-plain-object@npm:^5.0.0": - version: 5.0.0 - resolution: "is-plain-object@npm:5.0.0" - checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c +"is-plain-object@npm:^5.0.0": + version: 5.0.0 + resolution: "is-plain-object@npm:5.0.0" + checksum: 10c0/893e42bad832aae3511c71fd61c0bf61aa3a6d853061c62a307261842727d0d25f761ce9379f7ba7226d6179db2a3157efa918e7fe26360f3bf0842d9f28942c + languageName: node + linkType: hard + +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 + languageName: node + linkType: hard + +"is-reference@npm:^1.2.1": + version: 1.2.1 + resolution: "is-reference@npm:1.2.1" + dependencies: + "@types/estree": "npm:*" + checksum: 10c0/7dc819fc8de7790264a0a5d531164f9f5b9ef5aa1cd05f35322d14db39c8a2ec78fd5d4bf57f9789f3ddd2b3abeea7728432b759636157a42db12a9e8c3b549b + languageName: node + linkType: hard + +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 languageName: node linkType: hard -"is-promise@npm:^4.0.0": - version: 4.0.0 - resolution: "is-promise@npm:4.0.0" - checksum: 10c0/ebd5c672d73db781ab33ccb155fb9969d6028e37414d609b115cc534654c91ccd061821d5b987eefaa97cf4c62f0b909bb2f04db88306de26e91bfe8ddc01503 +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 languageName: node linkType: hard @@ -1332,6 +3590,33 @@ __metadata: languageName: node linkType: hard +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + languageName: node + linkType: hard + "is-unicode-supported@npm:^1.2.0": version: 1.3.0 resolution: "is-unicode-supported@npm:1.3.0" @@ -1346,6 +3631,22 @@ __metadata: languageName: node linkType: hard +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -1360,6 +3661,15 @@ __metadata: languageName: node linkType: hard +"isomorphic-ws@npm:^4.0.1": + version: 4.0.1 + resolution: "isomorphic-ws@npm:4.0.1" + peerDependencies: + ws: "*" + checksum: 10c0/7cb90dc2f0eb409825558982fb15d7c1d757a88595efbab879592f9d2b63820d6bbfb5571ab8abe36c715946e165a413a99f6aafd9f40ab1f514d73487bc9996 + languageName: node + linkType: hard + "jackspeak@npm:^2.3.5": version: 2.3.6 resolution: "jackspeak@npm:2.3.6" @@ -1373,6 +3683,15 @@ __metadata: languageName: node linkType: hard +"jessie.js@npm:^0.3.4": + version: 0.3.4 + resolution: "jessie.js@npm:0.3.4" + dependencies: + "@endo/far": "npm:^1.0.0" + checksum: 10c0/853ab3f8a0e30df11742882f5e11479d1303033a5a203a247d8ffbf4c6f3f3d4bcbefa53084ae4632e6ab106e348f23dc988280486cbeaaf5d16487fa3d40e96 + languageName: node + linkType: hard + "js-string-escape@npm:^1.0.1": version: 1.0.1 resolution: "js-string-escape@npm:1.0.1" @@ -1380,6 +3699,13 @@ __metadata: languageName: node linkType: hard +"js-tokens@npm:^4.0.0": + version: 4.0.0 + resolution: "js-tokens@npm:4.0.0" + checksum: 10c0/e248708d377aa058eacf2037b07ded847790e6de892bbad3dac0abba2e759cb9f121b00099a65195616badcb6eca8d14d975cb3e89eb1cfda644756402c8aeed + languageName: node + linkType: hard + "js-yaml@npm:^3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" @@ -1392,6 +3718,110 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + +"jsesc@npm:^2.5.1": + version: 2.5.2 + resolution: "jsesc@npm:2.5.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/dbf59312e0ebf2b4405ef413ec2b25abb5f8f4d9bc5fb8d9f90381622ebca5f2af6a6aa9a8578f65903f9e33990a6dc798edd0ce5586894bf0e9e31803a1de88 + languageName: node + linkType: hard + +"jsesc@npm:^3.0.2": + version: 3.0.2 + resolution: "jsesc@npm:3.0.2" + bin: + jsesc: bin/jsesc + checksum: 10c0/ef22148f9e793180b14d8a145ee6f9f60f301abf443288117b4b6c53d0ecd58354898dc506ccbb553a5f7827965cd38bc5fb726575aae93c5e8915e2de8290e1 + languageName: node + linkType: hard + +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + +"libsodium-sumo@npm:^0.7.15": + version: 0.7.15 + resolution: "libsodium-sumo@npm:0.7.15" + checksum: 10c0/5a1437ccff03c72669e7b49da702034e171df9ff6a4e65698297ab63ad0bf8f889d3dd51494e29418c643143526d8d7f08cbba3929d220334cddbe3e74a1560e + languageName: node + linkType: hard + +"libsodium-wrappers-sumo@npm:^0.7.11": + version: 0.7.15 + resolution: "libsodium-wrappers-sumo@npm:0.7.15" + dependencies: + libsodium-sumo: "npm:^0.7.15" + checksum: 10c0/6da919a13395346d54f2ce4841adda8feb3fbb8a8c378ec5c93b7e6dc6353b379289349e659f3e017a9f1995ef396bf43f89c7ab4aab4e3b5ed85df62407d810 + languageName: node + linkType: hard + +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + "load-json-file@npm:^7.0.0": version: 7.0.1 resolution: "load-json-file@npm:7.0.1" @@ -1399,6 +3829,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + "locate-path@npm:^7.1.0": version: 7.2.0 resolution: "locate-path@npm:7.2.0" @@ -1408,6 +3847,13 @@ __metadata: languageName: node linkType: hard +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + "lodash@npm:^4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -1415,6 +3861,13 @@ __metadata: languageName: node linkType: hard +"long@npm:^4.0.0": + version: 4.0.0 + resolution: "long@npm:4.0.0" + checksum: 10c0/50a6417d15b06104dbe4e3d4a667c39b137f130a9108ea8752b352a4cfae047531a3ac351c181792f3f8768fe17cca6b0f406674a541a86fb638aaac560d83ed + languageName: node + linkType: hard + "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": version: 10.1.0 resolution: "lru-cache@npm:10.1.0" @@ -1431,6 +3884,15 @@ __metadata: languageName: node linkType: hard +"magic-string@npm:^0.25.7": + version: 0.25.9 + resolution: "magic-string@npm:0.25.9" + dependencies: + sourcemap-codec: "npm:^1.4.8" + checksum: 10c0/37f5e01a7e8b19a072091f0b45ff127cda676232d373ce2c551a162dd4053c575ec048b9cbb4587a1f03adb6c5d0fd0dd49e8ab070cd2c83a4992b2182d9cb56 + languageName: node + linkType: hard + "make-fetch-happen@npm:^13.0.0": version: 13.0.0 resolution: "make-fetch-happen@npm:13.0.0" @@ -1487,6 +3949,13 @@ __metadata: languageName: node linkType: hard +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: 10c0/4bd164657711d9747ff5edb0508b2944414da3464b7fe21ac5c67cf35bba975c4b446a0124bd0f9a8be54cfc18faf92e92bd77563a20328b1ccf2ff04e9f39b9 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -1504,6 +3973,33 @@ __metadata: languageName: node linkType: hard +"microtime@npm:^3.1.0": + version: 3.1.1 + resolution: "microtime@npm:3.1.1" + dependencies: + node-addon-api: "npm:^5.0.0" + node-gyp: "npm:latest" + node-gyp-build: "npm:^4.4.0" + checksum: 10c0/02512993de914c6f71424d3b8b28ce53de44ba5895b904a213420fd4fc86a084c1d08ec0876ac60cdae6427022766e1b9b86d9b3442bf408701120bd61455e26 + languageName: node + linkType: hard + +"mime-db@npm:1.52.0": + version: 1.52.0 + resolution: "mime-db@npm:1.52.0" + checksum: 10c0/0557a01deebf45ac5f5777fe7740b2a5c309c6d62d40ceab4e23da9f821899ce7a900b7ac8157d4548ddbb7beffe9abc621250e6d182b0397ec7f10c7b91a5aa + languageName: node + linkType: hard + +"mime-types@npm:^2.1.12": + version: 2.1.35 + resolution: "mime-types@npm:2.1.35" + dependencies: + mime-db: "npm:1.52.0" + checksum: 10c0/82fb07ec56d8ff1fc999a84f2f217aa46cb6ed1033fefaabd5785b9a974ed225c90dc72fff460259e66b95b73648596dbcc50d51ed69cdf464af2d237d3149b2 + languageName: node + linkType: hard + "mimic-fn@npm:^4.0.0": version: 4.0.0 resolution: "mimic-fn@npm:4.0.0" @@ -1518,6 +4014,29 @@ __metadata: languageName: node linkType: hard +"minimalistic-assert@npm:^1.0.0, minimalistic-assert@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-assert@npm:1.0.1" + checksum: 10c0/96730e5601cd31457f81a296f521eb56036e6f69133c0b18c13fe941109d53ad23a4204d946a0d638d7f3099482a0cec8c9bb6d642604612ce43ee536be3dddd + languageName: node + linkType: hard + +"minimalistic-crypto-utils@npm:^1.0.1": + version: 1.0.1 + resolution: "minimalistic-crypto-utils@npm:1.0.1" + checksum: 10c0/790ecec8c5c73973a4fbf2c663d911033e8494d5fb0960a4500634766ab05d6107d20af896ca2132e7031741f19888154d44b2408ada0852446705441383e9f8 + languageName: node + linkType: hard + +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": + version: 3.1.2 + resolution: "minimatch@npm:3.1.2" + dependencies: + brace-expansion: "npm:^1.1.7" + checksum: 10c0/0262810a8fc2e72cca45d6fd86bd349eee435eb95ac6aa45c9ea2180e7ee875ef44c32b55b5973ceabe95ea12682f6e3725cbb63d7a2d1da3ae1163c8b210311 + languageName: node + linkType: hard + "minimatch@npm:^9.0.1": version: 9.0.3 resolution: "minimatch@npm:9.0.3" @@ -1655,6 +4174,13 @@ __metadata: languageName: node linkType: hard +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + "negotiator@npm:^0.6.3": version: 0.6.3 resolution: "negotiator@npm:0.6.3" @@ -1662,6 +4188,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": version: 3.54.0 resolution: "node-abi@npm:3.54.0" @@ -1671,6 +4204,26 @@ __metadata: languageName: node linkType: hard +"node-addon-api@npm:^5.0.0": + version: 5.1.0 + resolution: "node-addon-api@npm:5.1.0" + dependencies: + node-gyp: "npm:latest" + checksum: 10c0/0eb269786124ba6fad9df8007a149e03c199b3e5a3038125dfb3e747c2d5113d406a4e33f4de1ea600aa2339be1f137d55eba1a73ee34e5fff06c52a5c296d1d + languageName: node + linkType: hard + +"node-gyp-build@npm:^4.4.0": + version: 4.8.3 + resolution: "node-gyp-build@npm:4.8.3" + bin: + node-gyp-build: bin.js + node-gyp-build-optional: optional.js + node-gyp-build-test: build-test.js + checksum: 10c0/a7f43c4128d817db80bb0884f631121449ac586b4a3e708eab0db6fcb7fa0d2e66f6d7d4ee1f49469409de4a9b2e413926befe2dce70b850c6c583a3bbe228d2 + languageName: node + linkType: hard + "node-gyp@npm:latest": version: 10.0.1 resolution: "node-gyp@npm:10.0.1" @@ -1709,6 +4262,18 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -1716,6 +4281,36 @@ __metadata: languageName: node linkType: hard +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: "npm:^3.2.1" + chalk: "npm:^2.4.1" + cross-spawn: "npm:^6.0.5" + memorystream: "npm:^0.3.1" + minimatch: "npm:^3.0.4" + pidtree: "npm:^0.3.0" + read-pkg: "npm:^3.0.0" + shell-quote: "npm:^1.6.1" + string.prototype.padend: "npm:^3.0.0" + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 10c0/736ee39bd35454d3efaa4a2e53eba6c523e2e17fba21a18edcce6b221f5cab62000bef16bb6ae8aff9e615831e6b0eb25ab51d52d60e6fa6f4ea880e4c6d31f4 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.2.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "npm-run-path@npm:^6.0.0": version: 6.0.0 resolution: "npm-run-path@npm:6.0.0" @@ -1726,7 +4321,33 @@ __metadata: languageName: node linkType: hard -"once@npm:^1.3.1, once@npm:^1.4.0": +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + +"object-keys@npm:^1.1.1": + version: 1.1.1 + resolution: "object-keys@npm:1.1.1" + checksum: 10c0/b11f7ccdbc6d406d1f186cdadb9d54738e347b2692a14439ca5ac70c225fa6db46db809711b78589866d47b25fc3e8dee0b4c722ac751e11180f9380e3d8601d + languageName: node + linkType: hard + +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + +"once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" dependencies: @@ -1735,6 +4356,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -1751,6 +4386,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + "p-limit@npm:^4.0.0": version: 4.0.0 resolution: "p-limit@npm:4.0.0" @@ -1760,6 +4404,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + "p-locate@npm:^6.0.0": version: 6.0.0 resolution: "p-locate@npm:6.0.0" @@ -1794,6 +4447,25 @@ __metadata: languageName: node linkType: hard +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + "parse-ms@npm:^3.0.0": version: 3.0.0 resolution: "parse-ms@npm:3.0.0" @@ -1808,6 +4480,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + "path-exists@npm:^5.0.0": version: 5.0.0 resolution: "path-exists@npm:5.0.0" @@ -1815,6 +4494,20 @@ __metadata: languageName: node linkType: hard +"path-is-absolute@npm:^1.0.0": + version: 1.0.1 + resolution: "path-is-absolute@npm:1.0.1" + checksum: 10c0/127da03c82172a2a50099cddbf02510c1791fc2cc5f7713ddb613a56838db1e8168b121a920079d052e0936c23005562059756d653b7c544c53185efe53be078 + languageName: node + linkType: hard + +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -1829,6 +4522,13 @@ __metadata: languageName: node linkType: hard +"path-parse@npm:^1.0.7": + version: 1.0.7 + resolution: "path-parse@npm:1.0.7" + checksum: 10c0/11ce261f9d294cc7a58d6a574b7f1b935842355ec66fba3c3fd79e0f036462eaf07d0aa95bb74ff432f9afef97ce1926c720988c6a7451d8a584930ae7de86e1 + languageName: node + linkType: hard + "path-scurry@npm:^1.10.1": version: 1.10.1 resolution: "path-scurry@npm:1.10.1" @@ -1839,6 +4539,15 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -1846,13 +4555,43 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.3.1": +"picocolors@npm:^1.0.0": + version: 1.1.1 + resolution: "picocolors@npm:1.1.1" + checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 + languageName: node + linkType: hard + +"picomatch@npm:^2.0.4, picomatch@npm:^2.2.1, picomatch@npm:^2.2.2, picomatch@npm:^2.3.1": version: 2.3.1 resolution: "picomatch@npm:2.3.1" checksum: 10c0/26c02b8d06f03206fc2ab8d16f19960f2ff9e81a658f831ecb656d8f17d9edc799e8364b1f4a7873e89d9702dff96204be0fa26fe4181f6843f040f819dac4be languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: 10c0/cd69b0182f749f45ab48584e3442c48c5dc4512502c18d5b0147a33b042c41a4db4269b9ce2f7c48f11833ee5e79d81f5ebc6f7bf8372d4ea55726f60dc505a1 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + "pkg-conf@npm:^4.0.0": version: 4.0.0 resolution: "pkg-conf@npm:4.0.0" @@ -1872,6 +4611,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.1 resolution: "prebuild-install@npm:7.1.1" @@ -1894,6 +4640,13 @@ __metadata: languageName: node linkType: hard +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + "pretty-ms@npm:^8.0.0": version: 8.0.0 resolution: "pretty-ms@npm:8.0.0" @@ -1929,6 +4682,61 @@ __metadata: languageName: node linkType: hard +"protobufjs@npm:6.11.4": + version: 6.11.4 + resolution: "protobufjs@npm:6.11.4" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/c244d7b9b6d3258193da5c0d1e558dfb47f208ae345e209f90ec45c9dca911b90fa17e937892a9a39a4136ab9886981aae9efdf6039f7baff4f7225f5eeb9812 + languageName: node + linkType: hard + +"protobufjs@patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch": + version: 6.11.4 + resolution: "protobufjs@patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch::version=6.11.4&hash=1644ab" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/fea6b3d00dbb564157b24c0f0f69dc777b22f30ffbe1fed67fb9a2ef05e6e99e8da6d1811bea650a315ec98d7512638d72317e41136522b94be4fb3c89d8d0ab + languageName: node + linkType: hard + +"proxy-from-env@npm:^1.1.0": + version: 1.1.0 + resolution: "proxy-from-env@npm:1.1.0" + checksum: 10c0/fe7dd8b1bdbbbea18d1459107729c3e4a2243ca870d26d34c2c1bcd3e4425b7bcc5112362df2d93cc7fb9746f6142b5e272fd1cc5c86ddf8580175186f6ad42b + languageName: node + linkType: hard + "pump@npm:^3.0.0": version: 3.0.0 resolution: "pump@npm:3.0.0" @@ -1939,6 +4747,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + "pure-rand@npm:^6.1.0": version: 6.1.0 resolution: "pure-rand@npm:6.1.0" @@ -1967,6 +4782,17 @@ __metadata: languageName: node linkType: hard +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -1987,6 +4813,25 @@ __metadata: languageName: node linkType: hard +"readonly-date@npm:^1.0.0": + version: 1.0.0 + resolution: "readonly-date@npm:1.0.0" + checksum: 10c0/7ab32bf19f6bfec102584a524fa79a289e6ede0bf20c80fd90ab309962e45b71d19dd0e3915dff6e81edf226f08fda65e890539b4aca74668921790b10471356 + languageName: node + linkType: hard + +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -2003,6 +4848,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -2010,6 +4862,32 @@ __metadata: languageName: node linkType: hard +"resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.19.0": + version: 1.22.8 + resolution: "resolve@npm:1.22.8" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/07e179f4375e1fd072cfb72ad66d78547f86e6196c4014b31cb0b8bb1db5f7ca871f922d08da0fbc05b94e9fd42206f819648fa3b5b873ebbc8e1dc68fec433a + languageName: node + linkType: hard + +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": + version: 1.22.8 + resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" + dependencies: + is-core-module: "npm:^2.13.0" + path-parse: "npm:^1.0.7" + supports-preserve-symlinks-flag: "npm:^1.0.0" + bin: + resolve: bin/resolve + checksum: 10c0/0446f024439cd2e50c6c8fa8ba77eaa8370b4180f401a96abf3d1ebc770ac51c1955e12764cde449fde3fff480a61f84388e3505ecdbab778f4bef5f8212c729 + languageName: node + linkType: hard + "retry@npm:^0.12.0": version: 0.12.0 resolution: "retry@npm:0.12.0" @@ -2024,16 +4902,44 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + +"rollup@npm:^2.79.1": + version: 2.79.2 + resolution: "rollup@npm:2.79.2" + dependencies: + fsevents: "npm:~2.3.2" + dependenciesMeta: + fsevents: + optional: true + bin: + rollup: dist/bin/rollup + checksum: 10c0/bc3746c988d903c2211266ddc539379d53d92689b9cc5c2b4e3ae161689de9af491957a567c629b6cc81f48d0928a7591fc4c383fba68a48d2966c9fb8a2bce9 + languageName: node + linkType: hard + "root-workspace-0b6124@workspace:.": version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - "@agoric/synthetic-chain": "npm:^0.3.0" + "@agoric/client-utils": "npm:dev" + "@agoric/synthetic-chain": "npm:^0.4.3" "@endo/init": "npm:^1.1.6" "@endo/marshal": "npm:^1.6.1" ava: "npm:^5.3.1" better-sqlite3: "npm:^9.6.0" - execa: "npm:^9.5.1" + eslint: "npm:^8.57.0" + execa: "npm:9.1.0" + npm-run-all: "npm:^4.1.5" typescript: "npm:^5.6.3" languageName: unknown linkType: soft @@ -2047,6 +4953,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + languageName: node + linkType: hard + "safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -2054,6 +4972,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -2061,6 +4990,24 @@ __metadata: languageName: node linkType: hard +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + +"semver@npm:^6.3.0": + version: 6.3.1 + resolution: "semver@npm:6.3.1" + bin: + semver: bin/semver.js + checksum: 10c0/e3d79b609071caa78bcb6ce2ad81c7966a46a7431d9d58b8800cfa9cb6a63699b3899a0e4bcce36167a284578212d9ae6942b6929ba4aa5015c079a67751d42d + languageName: node + linkType: hard + "semver@npm:^7.3.2": version: 7.6.3 resolution: "semver@npm:7.6.3" @@ -2090,12 +5037,47 @@ __metadata: languageName: node linkType: hard -"ses@npm:^1.9.1": - version: 1.9.1 - resolution: "ses@npm:1.9.1" +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" dependencies: - "@endo/env-options": "npm:^1.1.7" - checksum: 10c0/1e795542954f635aaee2749a1d548460f2978257cb29daaea76b814ef99ffa64ab5cca05fbc3d51a814a57cf9fc4563988ee93312cc53bae4eb63dfff0f0682a + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 + languageName: node + linkType: hard + +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d languageName: node linkType: hard @@ -2108,6 +5090,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -2115,6 +5104,25 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.6.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 10c0/8cec6fd827bad74d0a49347057d40dfea1e01f12a6123bf82c4649f3ef152fc2bc6d6176e6376bffcd205d9d0ccb4f1f9acae889384d20baff92186f01ea455a + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -2185,6 +5193,61 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf + languageName: node + linkType: hard + +"source-map@npm:^0.5.0": + version: 0.5.7 + resolution: "source-map@npm:0.5.7" + checksum: 10c0/904e767bb9c494929be013017380cbba013637da1b28e5943b566031e29df04fba57edf3f093e0914be094648b577372bd8ad247fa98cfba9c600794cd16b599 + languageName: node + linkType: hard + +"sourcemap-codec@npm:^1.4.8": + version: 1.4.8 + resolution: "sourcemap-codec@npm:1.4.8" + checksum: 10c0/f099279fdaae070ff156df7414bbe39aad69cdd615454947ed3e19136bfdfcb4544952685ee73f56e17038f4578091e12b17b283ed8ac013882916594d95b9e6 + languageName: node + linkType: hard + +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10c0/bdff7534fad6ef59be49becda1edc3fb7f5b3d6f296a715516ab9d972b8ad59af2c34b2003e01db8970d4c673d185ff696ba74c6b61d3bf327e2b3eac22c297c + languageName: node + linkType: hard + "sprintf-js@npm:~1.0.2": version: 1.0.3 resolution: "sprintf-js@npm:1.0.3" @@ -2232,6 +5295,52 @@ __metadata: languageName: node linkType: hard +"string.prototype.padend@npm:^3.0.0": + version: 3.1.6 + resolution: "string.prototype.padend@npm:3.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/8f2c8c1f3db1efcdc210668c80c87f2cea1253d6029ff296a172b5e13edc9adebeed4942d023de8d31f9b13b69f3f5d73de7141959b1f09817fba5f527e83be1 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -2259,6 +5368,13 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + "strip-final-newline@npm:^4.0.0": version: 4.0.0 resolution: "strip-final-newline@npm:4.0.0" @@ -2266,6 +5382,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -2285,6 +5408,38 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + +"supports-preserve-symlinks-flag@npm:^1.0.0": + version: 1.0.0 + resolution: "supports-preserve-symlinks-flag@npm:1.0.0" + checksum: 10c0/6c4032340701a9950865f7ae8ef38578d8d7053f5e10518076e6554a9381fa91bd9c6850193695c141f32b21f979c985db07265a758867bac95de05f7d8aeb39 + languageName: node + linkType: hard + +"symbol-observable@npm:^2.0.3": + version: 2.0.3 + resolution: "symbol-observable@npm:2.0.3" + checksum: 10c0/03fb8766b75bfa65a3c7d68ae1e51a13a5ff71b40d6d53b17a0c9c77b1685c20a3bfbf45547ab36214a079665c3f551e250798f6b2f83a2a40762d864ed87f78 + languageName: node + linkType: hard + "tar-fs@npm:^2.0.0": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" @@ -2331,6 +5486,13 @@ __metadata: languageName: node linkType: hard +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + "time-zone@npm:^1.0.0": version: 1.0.0 resolution: "time-zone@npm:1.0.0" @@ -2338,6 +5500,13 @@ __metadata: languageName: node linkType: hard +"tmp@npm:^0.2.1": + version: 0.2.3 + resolution: "tmp@npm:0.2.3" + checksum: 10c0/3e809d9c2f46817475b452725c2aaa5d11985cf18d32a7a970ff25b568438e2c076c2e8609224feef3b7923fa9749b74428e3e634f6b8e520c534eef2fd24125 + languageName: node + linkType: hard + "to-regex-range@npm:^5.0.1": version: 5.0.1 resolution: "to-regex-range@npm:5.0.1" @@ -2347,6 +5516,15 @@ __metadata: languageName: node linkType: hard +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -2356,6 +5534,15 @@ __metadata: languageName: node linkType: hard +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -2363,7 +5550,66 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.6.3": +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x, typescript@npm:^5.6.3": version: 5.6.3 resolution: "typescript@npm:5.6.3" bin: @@ -2373,7 +5619,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.6.3 resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" bin: @@ -2383,6 +5629,25 @@ __metadata: languageName: node linkType: hard +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.0.3" + which-boxed-primitive: "npm:^1.0.2" + checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + languageName: node + linkType: hard + +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + "unicorn-magic@npm:^0.3.0": version: 0.3.0 resolution: "unicorn-magic@npm:0.3.0" @@ -2408,6 +5673,15 @@ __metadata: languageName: node linkType: hard +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -2415,6 +5689,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + "well-known-symbols@npm:^2.0.0": version: 2.0.0 resolution: "well-known-symbols@npm:2.0.0" @@ -2422,6 +5706,43 @@ __metadata: languageName: node linkType: hard +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: "npm:^1.0.1" + is-boolean-object: "npm:^1.1.0" + is-number-object: "npm:^1.0.4" + is-string: "npm:^1.0.5" + is-symbol: "npm:^1.0.3" + checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -2444,6 +5765,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -2483,6 +5811,31 @@ __metadata: languageName: node linkType: hard +"ws@npm:^7": + version: 7.5.10 + resolution: "ws@npm:7.5.10" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 10c0/bd7d5f4aaf04fae7960c23dcb6c6375d525e00f795dd20b9385902bd008c40a94d3db3ce97d878acc7573df852056ca546328b27b39f47609f80fb22a0a9b61d + languageName: node + linkType: hard + +"xstream@npm:^11.14.0": + version: 11.14.0 + resolution: "xstream@npm:11.14.0" + dependencies: + globalthis: "npm:^1.0.1" + symbol-observable: "npm:^2.0.3" + checksum: 10c0/7a28baedc64385dc17597d04c7130ec3135db298e66d6dcf33821eb1953d5ad1b83c5fa08f1ce4d36e75fd219f2e9ef81ee0721aa8d4ccf619acc1760ba37f71 + languageName: node + linkType: hard + "y18n@npm:^5.0.5": version: 5.0.8 resolution: "y18n@npm:5.0.8" @@ -2519,6 +5872,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + "yocto-queue@npm:^1.0.0": version: 1.1.1 resolution: "yocto-queue@npm:1.1.1" diff --git a/a3p-integration/proposals/p:upgrade-19/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch b/a3p-integration/proposals/p:upgrade-19/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch new file mode 100644 index 00000000000..9c00803d7a3 --- /dev/null +++ b/a3p-integration/proposals/p:upgrade-19/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch @@ -0,0 +1,45 @@ +diff --git a/dist/node/axios.cjs b/dist/node/axios.cjs +index db4997bee1aa48aca215c6b2e7443292c94c086f..fb39f7e0046c66b1c0275c1a82ed49d3cc7cff83 100644 +--- a/dist/node/axios.cjs ++++ b/dist/node/axios.cjs +@@ -371,9 +371,18 @@ function merge(/* obj1, obj2, obj3, ... */) { + const extend = (a, b, thisArg, {allOwnKeys}= {}) => { + forEach(b, (val, key) => { + if (thisArg && isFunction(val)) { +- a[key] = bind(val, thisArg); +- } else { ++ val = bind(val, thisArg); ++ } ++ const oldDesc = Object.getOwnPropertyDescriptor(a, key); ++ if (oldDesc) { + a[key] = val; ++ } else { ++ Object.defineProperty(a, key, { ++ value: val, ++ writable: true, ++ enumerable: true, ++ configurable: true ++ }); + } + }, {allOwnKeys}); + return a; +@@ -404,7 +413,9 @@ const stripBOM = (content) => { + */ + const inherits = (constructor, superConstructor, props, descriptors) => { + constructor.prototype = Object.create(superConstructor.prototype, descriptors); +- constructor.prototype.constructor = constructor; ++ Object.defineProperty(constructor.prototype, 'constructor', { ++ value: constructor ++ }); + Object.defineProperty(constructor, 'super', { + value: superConstructor.prototype + }); +@@ -566,7 +577,7 @@ const isRegExp = kindOfTest('RegExp'); + + const reduceDescriptors = (obj, reducer) => { + const descriptors = Object.getOwnPropertyDescriptors(obj); +- const reducedDescriptors = {}; ++ const reducedDescriptors = Object.create(null); + + forEach(descriptors, (descriptor, name) => { + let ret; diff --git a/a3p-integration/proposals/p:upgrade-19/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch b/a3p-integration/proposals/p:upgrade-19/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch new file mode 100644 index 00000000000..1122600ffe5 --- /dev/null +++ b/a3p-integration/proposals/p:upgrade-19/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch @@ -0,0 +1,36 @@ +diff --git a/src/util/minimal.js b/src/util/minimal.js +index 3c406dee753b5c6fb29dda2e64d4482e754e7873..564e5dadaa50e4ad05fc18b767ee276c99e9f0f9 100644 +--- a/src/util/minimal.js ++++ b/src/util/minimal.js +@@ -280,7 +280,30 @@ function newError(name) { + merge(this, properties); + } + +- (CustomError.prototype = Object.create(Error.prototype)).constructor = CustomError; ++ CustomError.prototype = Object.create(Error.prototype, { ++ constructor: { ++ value: CustomError, ++ writable: true, ++ enumerable: false, ++ configurable: true, ++ }, ++ name: { ++ get() { return name; }, ++ set: undefined, ++ enumerable: false, ++ // configurable: false would accurately preserve the behavior of ++ // the original, but I'm guessing that was not intentional. ++ // For an actual error subclass, this property would ++ // be configurable. ++ configurable: true, ++ }, ++ toString: { ++ value() { return this.name + ": " + this.message; }, ++ writable: true, ++ enumerable: false, ++ configurable: true, ++ }, ++ }); + + Object.defineProperty(CustomError.prototype, "name", { get: function() { return name; } }); + diff --git a/a3p-integration/proposals/p:upgrade-19/package.json b/a3p-integration/proposals/p:upgrade-19/package.json index a6967acdde5..b4c67b7e80b 100644 --- a/a3p-integration/proposals/p:upgrade-19/package.json +++ b/a3p-integration/proposals/p:upgrade-19/package.json @@ -12,14 +12,14 @@ "dependencies": { "@agoric/client-utils": "0.1.1-dev-02c06c4.0", "@agoric/ertp": "dev", - "@agoric/synthetic-chain": "^0.3.0", + "@agoric/synthetic-chain": "^0.4.3", "@agoric/zoe": "dev", "@endo/errors": "1.2.7", "@endo/init": "^1.1.5", "@endo/marshal": "^1.5.4", "ava": "^5.3.1", "better-sqlite3": "^9.6.0", - "execa": "^9.3.1" + "execa": "9.1.0" }, "ava": { "concurrency": 1, @@ -31,5 +31,14 @@ "scripts": { "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" }, - "packageManager": "yarn@4.2.2" + "packageManager": "yarn@4.5.3", + "devDependencies": { + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.6.3" + }, + "resolutions": { + "protobufjs@npm:^6.8.8": "patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch", + "axios@npm:^1.6.0": "patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch" + } } diff --git a/a3p-integration/proposals/p:upgrade-19/replaceFeeDistributor.test.js b/a3p-integration/proposals/p:upgrade-19/replaceFeeDistributor.test.js index 5b579ed0a3d..68dc70ad6b4 100644 --- a/a3p-integration/proposals/p:upgrade-19/replaceFeeDistributor.test.js +++ b/a3p-integration/proposals/p:upgrade-19/replaceFeeDistributor.test.js @@ -16,7 +16,7 @@ * that matches the new feeDistributor's collectionInterval. */ -import '@endo/init/legacy.js'; +import '@endo/init/debug.js'; import test from 'ava'; import { retryUntilCondition, @@ -33,6 +33,9 @@ import { import { AmountMath } from '@agoric/ertp'; import { floorMultiplyBy } from '@agoric/zoe/src/contractSupport/ratio.js'; +// TODO @import {Ratio} from '@agoric/zoe' +/** @typedef {any} Ratio */ + /** * @typedef {import('@agoric/client-utils').VstorageKit} VstorageKit * @typedef {import('@agoric/ertp').NatAmount} NatAmount @@ -70,7 +73,6 @@ const config = { const scale6 = mintValue => BigInt(parseInt(mintValue, 10) * 1_000_000); /** - * * @param {VstorageKit} vstorage * @param {NatAmount} feeAmount */ diff --git a/a3p-integration/proposals/p:upgrade-19/tsconfig.json b/a3p-integration/proposals/p:upgrade-19/tsconfig.json new file mode 100644 index 00000000000..960c1f4587a --- /dev/null +++ b/a3p-integration/proposals/p:upgrade-19/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "noEmit": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "allowJs": true, + "checkJs": true, + "strict": false, + "strictNullChecks": true, + "noImplicitThis": true, + // XXX synthetic-chain has some errors + "skipLibCheck": true + } +} diff --git a/a3p-integration/proposals/p:upgrade-19/yarn.lock b/a3p-integration/proposals/p:upgrade-19/yarn.lock index ab008fbe2b6..f74d4368e0e 100644 --- a/a3p-integration/proposals/p:upgrade-19/yarn.lock +++ b/a3p-integration/proposals/p:upgrade-19/yarn.lock @@ -500,9 +500,9 @@ __metadata: languageName: node linkType: hard -"@agoric/synthetic-chain@npm:^0.3.0": - version: 0.3.0 - resolution: "@agoric/synthetic-chain@npm:0.3.0" +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" dependencies: "@endo/zip": "npm:^1.0.7" better-sqlite3: "npm:^9.6.0" @@ -511,7 +511,7 @@ __metadata: execa: "npm:^9.3.1" bin: synthetic-chain: dist/cli/cli.js - checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b languageName: node linkType: hard @@ -966,97 +966,98 @@ __metadata: languageName: node linkType: hard -"@endo/base64@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/base64@npm:1.0.8" - checksum: 10c0/3501efbf866acc25b9ad0912ec2383e3b976c890a18dc67b5c6eb128433708db69e8ed1cc57190305266bdcbd132659aa87edfc6d02a9886b711e8b86adc21c0 +"@endo/base64@npm:^1.0.8, @endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 languageName: node linkType: hard "@endo/bundle-source@npm:^3.4.2": - version: 3.4.2 - resolution: "@endo/bundle-source@npm:3.4.2" - dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/evasive-transform": "npm:^1.3.2" - "@endo/init": "npm:^1.1.6" - "@endo/promise-kit": "npm:^1.1.7" - "@endo/where": "npm:^1.0.8" + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" "@rollup/plugin-commonjs": "npm:^19.0.0" "@rollup/plugin-json": "npm:^6.1.0" "@rollup/plugin-node-resolve": "npm:^13.0.0" acorn: "npm:^8.2.4" rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" bin: bundle-source: ./src/tool.js - checksum: 10c0/a8bf7f28cb56f6d97e818dd62176a30e2f306ff6bc2eeae277b950a76fe846053396a1326cc16c2ce780beeced3fa6baac2cf7f902ea6e4b93374fb2b30eab4d + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 languageName: node linkType: hard "@endo/captp@npm:^4.4.2": - version: 4.4.2 - resolution: "@endo/captp@npm:4.4.2" + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/0ccb640faccce1ee66ecb4920c73f9541bc1dd3c207fccdf9f2938efd49aad476831985fca22eb26e25b0c918a913654a588d41f361f4962e0b8aac293f53265 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 languageName: node linkType: hard "@endo/check-bundle@npm:^1.0.11": - version: 1.0.11 - resolution: "@endo/check-bundle@npm:1.0.11" + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/errors": "npm:^1.2.7" - checksum: 10c0/b84824211b09f112af1826a23586aa2ee7d26904260c51f5a2a3b3c322def8d13251e1e6921be8896f25a98d52309a124c4b58e7cf09e5c04b9ddf77df024209 + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c languageName: node linkType: hard -"@endo/cjs-module-analyzer@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/cjs-module-analyzer@npm:1.0.8" - checksum: 10c0/937ba9327f93e5288e7693d62462d4fd1d038d11aef07b83df829c37c5747e66707d185dc679707db9f38f88a1fe0cc06e649c620936e33719587ea51b81ab14 +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 languageName: node linkType: hard -"@endo/common@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/common@npm:1.2.7" +"@endo/common@npm:^1.2.7, @endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/2bd25ffc528afd6308b6168650583977139c64e56547b3ea2fee313e01650fb1a041d7b7ce54c6bb70f26c9e78345db2a50fbe3ebccabe9a5c5696eda2cca706 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b languageName: node linkType: hard -"@endo/compartment-mapper@npm:^1.3.1": - version: 1.3.1 - resolution: "@endo/compartment-mapper@npm:1.3.1" +"@endo/compartment-mapper@npm:^1.3.1, @endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" dependencies: - "@endo/cjs-module-analyzer": "npm:^1.0.8" - "@endo/module-source": "npm:^1.1.1" - "@endo/trampoline": "npm:^1.0.2" - "@endo/zip": "npm:^1.0.8" - ses: "npm:^1.9.1" - checksum: 10c0/abe24aaf88d1668b2b15a4c7f0564fc311f6593f5db040af36e96c14ea3e5c10499cc82b95070167a0fe5e94a2b5f82f6605e1a8bfd50fe4e934b50eab327a37 + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 languageName: node linkType: hard -"@endo/env-options@npm:^1.1.7": - version: 1.1.7 - resolution: "@endo/env-options@npm:1.1.7" - checksum: 10c0/5784bd68790041b08d9ead4f6c29cc7871d2e554c23fc44fff38cb20b6b4e55cdba2f78d844ba5ad4b0818185c32475ff318c1b77890d628690d7c7a6ede9475 +"@endo/env-options@npm:^1.1.7, @endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 languageName: node linkType: hard -"@endo/errors@npm:1.2.7, @endo/errors@npm:^1.2.7": +"@endo/errors@npm:1.2.7": version: 1.2.7 resolution: "@endo/errors@npm:1.2.7" dependencies: @@ -1065,198 +1066,249 @@ __metadata: languageName: node linkType: hard -"@endo/evasive-transform@npm:^1.3.2": - version: 1.3.2 - resolution: "@endo/evasive-transform@npm:1.3.2" +"@endo/errors@npm:^1.2.7, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" + dependencies: + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 + languageName: node + linkType: hard + +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" dependencies: "@agoric/babel-generator": "npm:^7.17.6" "@babel/parser": "npm:^7.23.6" "@babel/traverse": "npm:^7.23.6" source-map-js: "npm:^1.2.0" - checksum: 10c0/f3a404339c0c6e49f7534ecd7ebd24cb759d7238035c0ba6b78ed0ed2c7024c7db1c00a33f839fabf81f4c9a97cd5e2f86a559e97be8460921bc739cd33f5eb7 + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 languageName: node linkType: hard -"@endo/eventual-send@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/eventual-send@npm:1.2.7" +"@endo/eventual-send@npm:^1.2.7, @endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" dependencies: - "@endo/env-options": "npm:^1.1.7" - checksum: 10c0/4a483169bcd9ead47a7a07d3f69bdebdc0d1e2a3198f35ad422b82c1646b64528234bdddc9e0544ac38c2ede84a50af1e126eb4086aa8b4ae4b0002895b55e86 + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd languageName: node linkType: hard "@endo/exo@npm:^1.5.6": - version: 1.5.6 - resolution: "@endo/exo@npm:1.5.6" + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - checksum: 10c0/280fe019ec6006f5649b40093453c4ecaa71dfdcbb9767efc9f0ed4fc23081b120818c4a12896e8ec2221444889031736b569229117834048d596ecb09a44057 + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 languageName: node linkType: hard -"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.8": - version: 1.1.8 - resolution: "@endo/far@npm:1.1.8" +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.8, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/pass-style": "npm:^1.4.6" - checksum: 10c0/efb0f063e7a19fd67fe150e0a018a9e4b2abd5238b3c3d136830732aa3294bdb829c1a920607360c285eb6e3a3ae5337b6a1e9847cfcf5618247431af02c5a1e + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e languageName: node linkType: hard "@endo/import-bundle@npm:^1.3.1": - version: 1.3.1 - resolution: "@endo/import-bundle@npm:1.3.1" + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/errors": "npm:^1.2.7" - "@endo/where": "npm:^1.0.8" - ses: "npm:^1.9.1" - checksum: 10c0/e4fc284d12999ec0e0c4922cd31452d7ff3ead67522d6716b87d818547377ca3724d9a375fecf59a817c0d09ddc5d98b01fbc146dcb7224906c323358bcb9f84 + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a languageName: node linkType: hard -"@endo/init@npm:^1.1.5, @endo/init@npm:^1.1.6": - version: 1.1.6 - resolution: "@endo/init@npm:1.1.6" +"@endo/init@npm:^1.1.5, @endo/init@npm:^1.1.6, @endo/init@npm:^1.1.7": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/lockdown": "npm:^1.0.12" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/1885429e475c780bb5b7ff0fd4fcd5d76bc3a5cb1c3c2f9f2dfc06152ff1c8c3be512b6760483c8c18598e1977129cb3dd766a32c9f6efb19d70b54a1844c683 + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f languageName: node linkType: hard -"@endo/lockdown@npm:^1.0.12": - version: 1.0.12 - resolution: "@endo/lockdown@npm:1.0.12" +"@endo/lockdown@npm:^1.0.12, @endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/0b9d36f359ffe8eadd1e799aa0340ccb0680d48c9b6249c380c27724824c4d875dada9fbec096fb4e2ac76b32c7536955524d3eb6579451a618707602fb958f4 + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 languageName: node linkType: hard -"@endo/marshal@npm:^1.5.4, @endo/marshal@npm:^1.6.1": - version: 1.6.1 - resolution: "@endo/marshal@npm:1.6.1" +"@endo/marshal@npm:^1.5.4, @endo/marshal@npm:^1.6.1, @endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/e64983abccd833b2a7eb63547e8c5a629f073d3e422229475d470ace95c2640a89e9a9879c46e8389cca8c9e75823ea1c27e27cbeeb8c1c4005146b2c530c530 + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 languageName: node linkType: hard -"@endo/module-source@npm:^1.1.1": - version: 1.1.1 - resolution: "@endo/module-source@npm:1.1.1" +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" dependencies: "@agoric/babel-generator": "npm:^7.17.6" "@babel/parser": "npm:^7.23.6" "@babel/traverse": "npm:^7.23.6" "@babel/types": "npm:^7.24.0" - ses: "npm:^1.9.1" - checksum: 10c0/2c2184e04e16ed57080cf1c63e17168b101c6e4289816dbc532b199a1c74e0de06cafa21c6c6e0e6e73819ce0d859fdbcbaf0f0af087b3f01774ff198062fc03 + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c languageName: node linkType: hard -"@endo/nat@npm:^5.0.12": - version: 5.0.12 - resolution: "@endo/nat@npm:5.0.12" - checksum: 10c0/deb792b6a0c9fe9c0e7cf74cc725d8bc36934571f4f06ac3b6def2a0622ac79b0278753c574f9b55a88b063d1186fd6971bbe63326077a7d37982c4c37a1a24c +"@endo/nat@npm:^5.0.12, @endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 languageName: node linkType: hard -"@endo/pass-style@npm:^1.4.6": - version: 1.4.6 - resolution: "@endo/pass-style@npm:1.4.6" +"@endo/pass-style@npm:^1.4.6, @endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" dependencies: - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" "@fast-check/ava": "npm:^1.1.5" - checksum: 10c0/fec9d21bb4c70314e92c72f7ae41ec147ac839a23d54f613d689b84f81206e49e657f3fb414db454cbd6ab67dd2a319b1ae25c42b3a1c881edd5de120496b8b4 + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e languageName: node linkType: hard -"@endo/patterns@npm:^1.4.6": - version: 1.4.6 - resolution: "@endo/patterns@npm:1.4.6" +"@endo/patterns@npm:^1.4.6, @endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/marshal": "npm:^1.6.1" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/518cf4f88ff6aaf6c9df01fbe9f63570aaace763f2a169f986145b039cbd872802154b21736f751fc4cce497d3380aa6be41d2d51e169c8e63a1edb1751d1808 + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b languageName: node linkType: hard -"@endo/promise-kit@npm:^1.1.7": - version: 1.1.7 - resolution: "@endo/promise-kit@npm:1.1.7" +"@endo/promise-kit@npm:^1.1.7, @endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/98a8d743c437f106f266871874acd811c0e028fc89553738bbd46a0fea5871b9ba7ef0449ec38e7e3768fc21684993ecdbbd06f5f3429cd69fbe4b867d4c2bd5 + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 languageName: node linkType: hard "@endo/ses-ava@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/ses-ava@npm:1.2.7" + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" dependencies: - "@endo/env-options": "npm:^1.1.7" - "@endo/init": "npm:^1.1.6" - ses: "npm:^1.9.1" + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" peerDependencies: ava: ^5.3.0 || ^6.1.2 - checksum: 10c0/eaddb89ee939e162338d22df1978b5ed6b69d9780b2c68862161dcb96f910c08336bbf546231d73e3212d7259e45581661c3499b9d228c510b5939b5f0a9a25f + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf languageName: node linkType: hard "@endo/stream@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/stream@npm:1.2.7" + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" dependencies: - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" - ses: "npm:^1.9.1" - checksum: 10c0/d96a2350200cc76ede5eed49e5d780d6d21f63007b42a83658bf5174e7b61e96bfe6b8f11ed2d33ad7f9eb6c3ec2db2a79079bc1679260ac7dac04a34a4a515e + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 languageName: node linkType: hard -"@endo/trampoline@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/trampoline@npm:1.0.2" - checksum: 10c0/3b0f1462593fb5ea6ae960277fcd79b8351582c41130062b1d05ed934ae5a51499a87f10e9706c483f90065e26acc0d5bb40f25a537e196e7697ffeb518286ce +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 languageName: node linkType: hard -"@endo/where@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/where@npm:1.0.8" - checksum: 10c0/27b3e1b9ceccc3249e7e6067fbdcdc66fef3f46ad1dd7ac2b0623780e8f134bb18c11468f846d61413a82790cc4ddcbd69cdae9dda49f00dd6d09c818165cc48 +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 languageName: node linkType: hard -"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/zip@npm:1.0.8" - checksum: 10c0/bb74862121932cd27eef59326325c4b61671ce0962033a2ad18e6d6978a9e94bfe604dbfa8c0b039a38fa7eefc495e6a69c583c0e75929cd267979b2c65b775b +"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.8, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc + languageName: node + linkType: hard + +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 languageName: node linkType: hard @@ -1271,6 +1323,31 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + "@isaacs/cliui@npm:^8.0.2": version: 8.0.2 resolution: "@isaacs/cliui@npm:8.0.2" @@ -1351,7 +1428,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -1592,6 +1669,13 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + languageName: node + linkType: hard + "abbrev@npm:^2.0.0": version: 2.0.0 resolution: "abbrev@npm:2.0.0" @@ -1599,6 +1683,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + "acorn-walk@npm:^8.2.0": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -1608,7 +1701,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.2.4, acorn@npm:^8.8.2": +"acorn@npm:^8.11.0, acorn@npm:^8.2.4, acorn@npm:^8.8.2, acorn@npm:^8.9.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" bin: @@ -1646,6 +1739,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + "ansi-regex@npm:^5.0.1": version: 5.0.1 resolution: "ansi-regex@npm:5.0.1" @@ -1660,7 +1765,16 @@ __metadata: languageName: node linkType: hard -"ansi-styles@npm:^4.0.0": +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + +"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" dependencies: @@ -1702,6 +1816,23 @@ __metadata: languageName: node linkType: hard +"argparse@npm:^2.0.1": + version: 2.0.1 + resolution: "argparse@npm:2.0.1" + checksum: 10c0/c5640c2d89045371c7cedd6a70212a04e360fd34d6edeae32f6952c63949e3525ea77dbec0289d8213a99bbaeab5abfa860b5c12cf88a2e6cf8106e90dd27a7e + languageName: node + linkType: hard + +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -1709,6 +1840,22 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 + languageName: node + linkType: hard + "arrgv@npm:^1.0.2": version: 1.0.2 resolution: "arrgv@npm:1.0.2" @@ -1788,7 +1935,16 @@ __metadata: languageName: node linkType: hard -"axios@npm:^1.6.0": +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + +"axios@npm:1.7.7": version: 1.7.7 resolution: "axios@npm:1.7.7" dependencies: @@ -1799,6 +1955,17 @@ __metadata: languageName: node linkType: hard +"axios@patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch": + version: 1.7.7 + resolution: "axios@patch:axios@npm%3A1.7.7#~/.yarn/patches/axios-npm-1.7.7-cfbedc233d.patch::version=1.7.7&hash=df7a05" + dependencies: + follow-redirects: "npm:^1.15.6" + form-data: "npm:^4.0.0" + proxy-from-env: "npm:^1.1.0" + checksum: 10c0/49964e1025a39e845ad1824cdf49f313202de26e55bbc4a67e81aaeaba78a8efcbfe3da42ca61c14fdbc249bdbd62b5478e9e54ea3456711d159ec068b12c392 + languageName: node + linkType: hard + "balanced-match@npm:^1.0.0": version: 1.0.2 resolution: "balanced-match@npm:1.0.2" @@ -1951,6 +2118,26 @@ __metadata: languageName: node linkType: hard +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": + version: 1.0.7 + resolution: "call-bind@npm:1.0.7" + dependencies: + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + set-function-length: "npm:^1.2.1" + checksum: 10c0/a3ded2e423b8e2a265983dba81c27e125b48eefb2655e7dfab6be597088da3d47c47976c24bc51b8fd9af1061f8f87b4ab78a314f3c77784b2ae2ba535ad8b8d + languageName: node + linkType: hard + +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + "callsites@npm:^4.0.0": version: 4.2.0 resolution: "callsites@npm:4.2.0" @@ -1967,6 +2154,27 @@ __metadata: languageName: node linkType: hard +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0": + version: 4.1.2 + resolution: "chalk@npm:4.1.2" + dependencies: + ansi-styles: "npm:^4.1.0" + supports-color: "npm:^7.1.0" + checksum: 10c0/4a3fef5cc34975c898ffe77141450f679721df9dde00f6c304353fa9c8b571929123b26a0e4617bde5018977eb655b31970c297b91b63ee83bb82aeb04666880 + languageName: node + linkType: hard + "chalk@npm:^5.2.0, chalk@npm:^5.3.0": version: 5.3.0 resolution: "chalk@npm:5.3.0" @@ -2081,6 +2289,15 @@ __metadata: languageName: node linkType: hard +"color-convert@npm:^1.9.0": + version: 1.9.3 + resolution: "color-convert@npm:1.9.3" + dependencies: + color-name: "npm:1.1.3" + checksum: 10c0/5ad3c534949a8c68fca8fbc6f09068f435f0ad290ab8b2f76841b9e6af7e0bb57b98cb05b0e19fe33f5d91e5a8611ad457e5f69e0a484caad1f7487fd0e8253c + languageName: node + linkType: hard + "color-convert@npm:^2.0.1": version: 2.0.1 resolution: "color-convert@npm:2.0.1" @@ -2090,6 +2307,13 @@ __metadata: languageName: node linkType: hard +"color-name@npm:1.1.3": + version: 1.1.3 + resolution: "color-name@npm:1.1.3" + checksum: 10c0/566a3d42cca25b9b3cd5528cd7754b8e89c0eb646b7f214e8e2eaddb69994ac5f0557d9c175eb5d8f0ad73531140d9c47525085ee752a91a2ab15ab459caf6d6 + languageName: node + linkType: hard + "color-name@npm:~1.1.4": version: 1.1.4 resolution: "color-name@npm:1.1.4" @@ -2157,6 +2381,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.6 + resolution: "cross-spawn@npm:6.0.6" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/bf61fb890e8635102ea9bce050515cf915ff6a50ccaa0b37a17dc82fded0fb3ed7af5478b9367b86baee19127ad86af4be51d209f64fd6638c0862dca185fe1d + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.5 resolution: "cross-spawn@npm:7.0.5" @@ -2168,6 +2405,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.2": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 + languageName: node + linkType: hard + "currently-unhandled@npm:^0.4.1": version: 0.4.1 resolution: "currently-unhandled@npm:0.4.1" @@ -2177,6 +2425,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + "date-time@npm:^3.1.0": version: 3.1.0 resolution: "date-time@npm:3.1.0" @@ -2186,7 +2467,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -2214,6 +2495,13 @@ __metadata: languageName: node linkType: hard +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -2221,7 +2509,7 @@ __metadata: languageName: node linkType: hard -"define-data-property@npm:^1.0.1": +"define-data-property@npm:^1.0.1, define-data-property@npm:^1.1.4": version: 1.1.4 resolution: "define-data-property@npm:1.1.4" dependencies: @@ -2232,7 +2520,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.2.1": +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -2266,6 +2554,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -2341,6 +2638,69 @@ __metadata: languageName: node linkType: hard +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.5 + resolution: "es-abstract@npm:1.23.5" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10c0/1f6f91da9cf7ee2c81652d57d3046621d598654d1d1b05c1578bafe5c4c2d3d69513901679bdca2de589f620666ec21de337e4935cec108a4ed0871d5ef04a5d + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -2350,13 +2710,44 @@ __metadata: languageName: node linkType: hard -"es-errors@npm:^1.3.0": +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 languageName: node linkType: hard +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" + dependencies: + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: "npm:^1.1.4" + is-date-object: "npm:^1.0.1" + is-symbol: "npm:^1.0.2" + checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.2.0 resolution: "escalade@npm:3.2.0" @@ -2371,6 +2762,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^1.0.5": + version: 1.0.5 + resolution: "escape-string-regexp@npm:1.0.5" + checksum: 10c0/a968ad453dd0c2724e14a4f20e177aaf32bb384ab41b674a8454afe9a41c5e6fe8903323e0a1052f56289d04bd600f81278edf140b0fcc02f5cac98d0f5b5371 + languageName: node + linkType: hard + "escape-string-regexp@npm:^2.0.0": version: 2.0.0 resolution: "escape-string-regexp@npm:2.0.0" @@ -2378,6 +2776,89 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.57.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -2388,6 +2869,31 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.4.2": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + "estree-walker@npm:^1.0.1": version: 1.0.1 resolution: "estree-walker@npm:1.0.1" @@ -2402,13 +2908,33 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.3": +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 languageName: node linkType: hard +"execa@npm:9.1.0": + version: 9.1.0 + resolution: "execa@npm:9.1.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^7.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^5.2.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/9a4810b93d098eb0bed48793b61c3aa3e5804867c2c5808cd2a597a6e71738151a74dc792909085ce1d38e89f4b0e078d93ffd165aaca2d9a6728f3616f8e5c0 + languageName: node + linkType: hard + "execa@npm:^9.3.1": version: 9.5.1 resolution: "execa@npm:9.5.1" @@ -2452,6 +2978,13 @@ __metadata: languageName: node linkType: hard +"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": + version: 3.1.3 + resolution: "fast-deep-equal@npm:3.1.3" + checksum: 10c0/40dedc862eb8992c54579c66d914635afbec43350afbbe991235fdcb4e3a8d5af1b23ae7e79bef7d4882d0ecee06c3197488026998fb19f72dc95acff1d1b1d0 + languageName: node + linkType: hard + "fast-diff@npm:^1.2.0": version: 1.3.0 resolution: "fast-diff@npm:1.3.0" @@ -2472,6 +3005,20 @@ __metadata: languageName: node linkType: hard +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.17.1 resolution: "fastq@npm:1.17.1" @@ -2500,6 +3047,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -2516,6 +3072,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + "find-up@npm:^6.0.0": version: 6.3.0 resolution: "find-up@npm:6.3.0" @@ -2526,6 +3092,24 @@ __metadata: languageName: node linkType: hard +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.2 + resolution: "flatted@npm:3.3.2" + checksum: 10c0/24cc735e74d593b6c767fe04f2ef369abe15b62f6906158079b9874bdb3ee5ae7110bb75042e70cd3f99d409d766f357caf78d5ecee9780206f5fdc5edbad334 + languageName: node + linkType: hard + "follow-redirects@npm:^1.15.6": version: 1.15.9 resolution: "follow-redirects@npm:1.15.9" @@ -2536,6 +3120,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.3.0 resolution: "foreground-child@npm:3.3.0" @@ -2615,6 +3208,25 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + functions-have-names: "npm:^1.2.3" + checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + "get-caller-file@npm:^2.0.5": version: 2.0.5 resolution: "get-caller-file@npm:2.0.5" @@ -2622,7 +3234,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -2645,6 +3257,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc + languageName: node + linkType: hard + "github-from-package@npm:0.0.0": version: 0.0.0 resolution: "github-from-package@npm:0.0.0" @@ -2661,6 +3284,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + "glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -2677,7 +3309,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.1.6": +"glob@npm:^7.1.3, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -2698,7 +3330,16 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.1": +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.4": version: 1.0.4 resolution: "globalthis@npm:1.0.4" dependencies: @@ -2730,14 +3371,42 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 languageName: node linkType: hard -"has-property-descriptors@npm:^1.0.0": +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + +"has-flag@npm:^4.0.0": + version: 4.0.0 + resolution: "has-flag@npm:4.0.0" + checksum: 10c0/2e789c61b7888d66993e14e8331449e525ef42aac53c627cc53d1c3334e768bcb6abdc4f5f0de1478a25beec6f0bd62c7549058b7ac53e924040d4f301f02fd1 + languageName: node + linkType: hard + +"has-property-descriptors@npm:^1.0.0, has-property-descriptors@npm:^1.0.2": version: 1.0.2 resolution: "has-property-descriptors@npm:1.0.2" dependencies: @@ -2746,20 +3415,29 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": version: 1.0.3 resolution: "has-proto@npm:1.0.3" checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 languageName: node linkType: hard -"has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 languageName: node linkType: hard +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + "hash.js@npm:^1.0.0, hash.js@npm:^1.0.3": version: 1.1.7 resolution: "hash.js@npm:1.1.7" @@ -2770,7 +3448,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -2790,6 +3468,13 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -2817,6 +3502,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^7.0.0": + version: 7.0.0 + resolution: "human-signals@npm:7.0.0" + checksum: 10c0/ce0c6d62d2e9bfe529d48f7c7fdf4b8c70fce950eef7850719b4e3f5bc71795ae7d61a3699ce13262bed7847705822601cc81f1921ea6a2906852e16228a94ab + languageName: node + linkType: hard + "human-signals@npm:^8.0.0": version: 8.0.0 resolution: "human-signals@npm:8.0.0" @@ -2847,13 +3539,23 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.4": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + "import-meta-resolve@npm:^2.2.1": version: 2.2.2 resolution: "import-meta-resolve@npm:2.2.2" @@ -2906,6 +3608,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c + languageName: node + linkType: hard + "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -2923,6 +3636,32 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: "npm:^1.0.1" + checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + languageName: node + linkType: hard + "is-binary-path@npm:~2.1.0": version: 2.1.0 resolution: "is-binary-path@npm:2.1.0" @@ -2932,6 +3671,16 @@ __metadata: languageName: node linkType: hard +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + languageName: node + linkType: hard + "is-builtin-module@npm:^3.1.0": version: 3.2.1 resolution: "is-builtin-module@npm:3.2.1" @@ -2941,6 +3690,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + "is-core-module@npm:^2.13.0": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" @@ -2950,6 +3706,24 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + "is-error@npm:^2.2.2": version: 2.2.2 resolution: "is-error@npm:2.2.2" @@ -2978,7 +3752,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.1, is-glob@npm:~4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3, is-glob@npm:~4.0.1": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -3001,6 +3775,22 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -3008,6 +3798,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + "is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -3038,6 +3835,25 @@ __metadata: languageName: node linkType: hard +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 + languageName: node + linkType: hard + "is-stream@npm:^4.0.1": version: 4.0.1 resolution: "is-stream@npm:4.0.1" @@ -3045,6 +3861,33 @@ __metadata: languageName: node linkType: hard +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + languageName: node + linkType: hard + "is-unicode-supported@npm:^1.2.0": version: 1.3.0 resolution: "is-unicode-supported@npm:1.3.0" @@ -3059,6 +3902,22 @@ __metadata: languageName: node linkType: hard +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + languageName: node + linkType: hard + +"isarray@npm:^2.0.5": + version: 2.0.5 + resolution: "isarray@npm:2.0.5" + checksum: 10c0/4199f14a7a13da2177c66c31080008b7124331956f47bca57dd0b6ea9f11687aa25e565a2c7a2b519bc86988d10398e3049a1f5df13c9f6b7664154690ae79fd + languageName: node + linkType: hard + "isexe@npm:^2.0.0": version: 2.0.0 resolution: "isexe@npm:2.0.0" @@ -3130,6 +3989,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -3155,6 +4025,53 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + "libsodium-sumo@npm:^0.7.15": version: 0.7.15 resolution: "libsodium-sumo@npm:0.7.15" @@ -3171,6 +4088,18 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + "load-json-file@npm:^7.0.0": version: 7.0.1 resolution: "load-json-file@npm:7.0.1" @@ -3178,6 +4107,15 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + "locate-path@npm:^7.1.0": version: 7.2.0 resolution: "locate-path@npm:7.2.0" @@ -3187,6 +4125,13 @@ __metadata: languageName: node linkType: hard +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + "lodash@npm:^4.17.15": version: 4.17.21 resolution: "lodash@npm:4.17.21" @@ -3274,6 +4219,13 @@ __metadata: languageName: node linkType: hard +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: 10c0/4bd164657711d9747ff5edb0508b2944414da3464b7fe21ac5c67cf35bba975c4b446a0124bd0f9a8be54cfc18faf92e92bd77563a20328b1ccf2ff04e9f39b9 + languageName: node + linkType: hard + "merge2@npm:^1.3.0, merge2@npm:^1.4.1": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -3346,7 +4298,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.1": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -3485,6 +4437,13 @@ __metadata: languageName: node linkType: hard +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + "negotiator@npm:^0.6.3": version: 0.6.4 resolution: "negotiator@npm:0.6.4" @@ -3492,6 +4451,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": version: 3.71.0 resolution: "node-abi@npm:3.71.0" @@ -3559,6 +4525,18 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + "normalize-path@npm:^3.0.0, normalize-path@npm:~3.0.0": version: 3.0.0 resolution: "normalize-path@npm:3.0.0" @@ -3566,6 +4544,36 @@ __metadata: languageName: node linkType: hard +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: "npm:^3.2.1" + chalk: "npm:^2.4.1" + cross-spawn: "npm:^6.0.5" + memorystream: "npm:^0.3.1" + minimatch: "npm:^3.0.4" + pidtree: "npm:^0.3.0" + read-pkg: "npm:^3.0.0" + shell-quote: "npm:^1.6.1" + string.prototype.padend: "npm:^3.0.0" + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 10c0/736ee39bd35454d3efaa4a2e53eba6c523e2e17fba21a18edcce6b221f5cab62000bef16bb6ae8aff9e615831e6b0eb25ab51d52d60e6fa6f4ea880e4c6d31f4 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.2.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "npm-run-path@npm:^6.0.0": version: 6.0.0 resolution: "npm-run-path@npm:6.0.0" @@ -3576,6 +4584,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -3583,6 +4598,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -3592,6 +4619,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + "p-defer@npm:^1.0.0": version: 1.0.0 resolution: "p-defer@npm:1.0.0" @@ -3608,6 +4649,15 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + "p-limit@npm:^4.0.0": version: 4.0.0 resolution: "p-limit@npm:4.0.0" @@ -3617,6 +4667,15 @@ __metadata: languageName: node linkType: hard +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + "p-locate@npm:^6.0.0": version: 6.0.0 resolution: "p-locate@npm:6.0.0" @@ -3658,6 +4717,25 @@ __metadata: languageName: node linkType: hard +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + "parse-ms@npm:^3.0.0": version: 3.0.0 resolution: "parse-ms@npm:3.0.0" @@ -3672,6 +4750,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + "path-exists@npm:^5.0.0": version: 5.0.0 resolution: "path-exists@npm:5.0.0" @@ -3686,6 +4771,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -3717,6 +4809,15 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 + languageName: node + linkType: hard + "path-type@npm:^4.0.0": version: 4.0.0 resolution: "path-type@npm:4.0.0" @@ -3738,10 +4839,26 @@ __metadata: languageName: node linkType: hard -"picomatch@npm:^4.0.2": - version: 4.0.2 - resolution: "picomatch@npm:4.0.2" - checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: 10c0/cd69b0182f749f45ab48584e3442c48c5dc4512502c18d5b0147a33b042c41a4db4269b9ce2f7c48f11833ee5e79d81f5ebc6f7bf8372d4ea55726f60dc505a1 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 languageName: node linkType: hard @@ -3764,6 +4881,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.2 resolution: "prebuild-install@npm:7.1.2" @@ -3786,6 +4910,13 @@ __metadata: languageName: node linkType: hard +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + "pretty-ms@npm:^8.0.0": version: 8.0.0 resolution: "pretty-ms@npm:8.0.0" @@ -3821,7 +4952,7 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:^6.8.8": +"protobufjs@npm:6.11.4": version: 6.11.4 resolution: "protobufjs@npm:6.11.4" dependencies: @@ -3845,6 +4976,30 @@ __metadata: languageName: node linkType: hard +"protobufjs@patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch": + version: 6.11.4 + resolution: "protobufjs@patch:protobufjs@npm%3A6.11.4#~/.yarn/patches/protobufjs-npm-6.11.4-af11968b80.patch::version=6.11.4&hash=1644ab" + dependencies: + "@protobufjs/aspromise": "npm:^1.1.2" + "@protobufjs/base64": "npm:^1.1.2" + "@protobufjs/codegen": "npm:^2.0.4" + "@protobufjs/eventemitter": "npm:^1.1.0" + "@protobufjs/fetch": "npm:^1.1.0" + "@protobufjs/float": "npm:^1.0.2" + "@protobufjs/inquire": "npm:^1.1.0" + "@protobufjs/path": "npm:^1.1.2" + "@protobufjs/pool": "npm:^1.1.0" + "@protobufjs/utf8": "npm:^1.1.0" + "@types/long": "npm:^4.0.1" + "@types/node": "npm:>=13.7.0" + long: "npm:^4.0.0" + bin: + pbjs: bin/pbjs + pbts: bin/pbts + checksum: 10c0/fea6b3d00dbb564157b24c0f0f69dc777b22f30ffbe1fed67fb9a2ef05e6e99e8da6d1811bea650a315ec98d7512638d72317e41136522b94be4fb3c89d8d0ab + languageName: node + linkType: hard + "proxy-from-env@npm:^1.1.0": version: 1.1.0 resolution: "proxy-from-env@npm:1.1.0" @@ -3862,6 +5017,13 @@ __metadata: languageName: node linkType: hard +"punycode@npm:^2.1.0": + version: 2.3.1 + resolution: "punycode@npm:2.3.1" + checksum: 10c0/14f76a8206bc3464f794fb2e3d3cc665ae416c01893ad7a02b23766eb07159144ee612ad67af5e84fa4479ccfe67678c4feb126b0485651b302babf66f04f9e9 + languageName: node + linkType: hard + "pure-rand@npm:^6.1.0": version: 6.1.0 resolution: "pure-rand@npm:6.1.0" @@ -3890,6 +5052,17 @@ __metadata: languageName: node linkType: hard +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -3917,6 +5090,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -3933,6 +5118,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -3940,7 +5132,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.17.0, resolve@npm:^1.19.0": +"resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.19.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -3953,7 +5145,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -3980,6 +5172,17 @@ __metadata: languageName: node linkType: hard +"rimraf@npm:^3.0.2": + version: 3.0.2 + resolution: "rimraf@npm:3.0.2" + dependencies: + glob: "npm:^7.1.3" + bin: + rimraf: bin.js + checksum: 10c0/9cb7757acb489bd83757ba1a274ab545eafd75598a9d817e0c3f8b164238dd90eba50d6b848bd4dcc5f3040912e882dc7ba71653e35af660d77b25c381d402e8 + languageName: node + linkType: hard + "rollup@npm:^2.79.1": version: 2.79.2 resolution: "rollup@npm:2.79.2" @@ -4000,14 +5203,17 @@ __metadata: dependencies: "@agoric/client-utils": "npm:0.1.1-dev-02c06c4.0" "@agoric/ertp": "npm:dev" - "@agoric/synthetic-chain": "npm:^0.3.0" + "@agoric/synthetic-chain": "npm:^0.4.3" "@agoric/zoe": "npm:dev" "@endo/errors": "npm:1.2.7" "@endo/init": "npm:^1.1.5" "@endo/marshal": "npm:^1.5.4" ava: "npm:^5.3.1" better-sqlite3: "npm:^9.6.0" - execa: "npm:^9.3.1" + eslint: "npm:^8.57.0" + execa: "npm:9.1.0" + npm-run-all: "npm:^4.1.5" + typescript: "npm:^5.6.3" languageName: unknown linkType: soft @@ -4020,6 +5226,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + languageName: node + linkType: hard + "safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -4027,6 +5245,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -4034,6 +5263,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + "semver@npm:^6.3.0": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -4061,6 +5299,15 @@ __metadata: languageName: node linkType: hard +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" + dependencies: + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 + languageName: node + linkType: hard + "ses@npm:^1.9.1": version: 1.9.1 resolution: "ses@npm:1.9.1" @@ -4070,6 +5317,41 @@ __metadata: languageName: node linkType: hard +"set-function-length@npm:^1.2.1": + version: 1.2.2 + resolution: "set-function-length@npm:1.2.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + function-bind: "npm:^1.1.2" + get-intrinsic: "npm:^1.2.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/82850e62f412a258b71e123d4ed3873fa9377c216809551192bb6769329340176f109c2eeae8c22a8d386c76739855f78e8716515c818bcaef384b51110f0f3c + languageName: node + linkType: hard + +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -4079,6 +5361,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -4086,6 +5375,25 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.6.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 10c0/8cec6fd827bad74d0a49347057d40dfea1e01f12a6123bf82c4649f3ef152fc2bc6d6176e6376bffcd205d9d0ccb4f1f9acae889384d20baff92186f01ea455a + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + languageName: node + linkType: hard + "signal-exit@npm:^4.0.1, signal-exit@npm:^4.1.0": version: 4.1.0 resolution: "signal-exit@npm:4.1.0" @@ -4177,6 +5485,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10c0/bdff7534fad6ef59be49becda1edc3fb7f5b3d6f296a715516ab9d972b8ad59af2c34b2003e01db8970d4c673d185ff696ba74c6b61d3bf327e2b3eac22c297c + languageName: node + linkType: hard + "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" @@ -4231,6 +5573,52 @@ __metadata: languageName: node linkType: hard +"string.prototype.padend@npm:^3.0.0": + version: 3.1.6 + resolution: "string.prototype.padend@npm:3.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/8f2c8c1f3db1efcdc210668c80c87f2cea1253d6029ff296a172b5e13edc9adebeed4942d023de8d31f9b13b69f3f5d73de7141959b1f09817fba5f527e83be1 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -4258,6 +5646,13 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + "strip-final-newline@npm:^4.0.0": version: 4.0.0 resolution: "strip-final-newline@npm:4.0.0" @@ -4265,6 +5660,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -4284,6 +5686,24 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + +"supports-color@npm:^7.1.0": + version: 7.2.0 + resolution: "supports-color@npm:7.2.0" + dependencies: + has-flag: "npm:^4.0.0" + checksum: 10c0/afb4c88521b8b136b5f5f95160c98dee7243dc79d5432db7efc27efb219385bbc7d9427398e43dd6cc730a0f87d5085ce1652af7efbe391327bc0a7d0f7fc124 + languageName: node + linkType: hard + "supports-preserve-symlinks-flag@npm:^1.0.0": version: 1.0.0 resolution: "supports-preserve-symlinks-flag@npm:1.0.0" @@ -4344,6 +5764,13 @@ __metadata: languageName: node linkType: hard +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + "time-zone@npm:^1.0.0": version: 1.0.0 resolution: "time-zone@npm:1.0.0" @@ -4367,6 +5794,15 @@ __metadata: languageName: node linkType: hard +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + "tunnel-agent@npm:^0.6.0": version: 0.6.0 resolution: "tunnel-agent@npm:0.6.0" @@ -4376,6 +5812,15 @@ __metadata: languageName: node linkType: hard +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -4383,6 +5828,97 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x, typescript@npm:^5.6.3": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.0.3" + which-boxed-primitive: "npm:^1.0.2" + checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + languageName: node + linkType: hard + "undici-types@npm:~6.19.8": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -4415,6 +5951,15 @@ __metadata: languageName: node linkType: hard +"uri-js@npm:^4.2.2": + version: 4.4.1 + resolution: "uri-js@npm:4.4.1" + dependencies: + punycode: "npm:^2.1.0" + checksum: 10c0/4ef57b45aa820d7ac6496e9208559986c665e49447cb072744c13b66925a362d96dd5a46c4530a6b8e203e5db5fe849369444440cb22ecfc26c679359e5dfa3c + languageName: node + linkType: hard + "util-deprecate@npm:^1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" @@ -4422,6 +5967,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + "well-known-symbols@npm:^2.0.0": version: 2.0.0 resolution: "well-known-symbols@npm:2.0.0" @@ -4429,6 +5984,43 @@ __metadata: languageName: node linkType: hard +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: "npm:^1.0.1" + is-boolean-object: "npm:^1.1.0" + is-number-object: "npm:^1.0.4" + is-string: "npm:^1.0.5" + is-symbol: "npm:^1.0.3" + checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -4451,6 +6043,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -4551,6 +6150,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + "yocto-queue@npm:^1.0.0": version: 1.1.1 resolution: "yocto-queue@npm:1.1.1" diff --git a/a3p-integration/proposals/s:stake-bld/package.json b/a3p-integration/proposals/s:stake-bld/package.json index 477b95ba07a..ba0c30abf43 100644 --- a/a3p-integration/proposals/s:stake-bld/package.json +++ b/a3p-integration/proposals/s:stake-bld/package.json @@ -10,7 +10,7 @@ "license": "Apache-2.0", "dependencies": { "@agoric/internal": "0.3.3-dev-5676146.0", - "@agoric/synthetic-chain": "^0.3.0", + "@agoric/synthetic-chain": "^0.4.3", "@cosmjs/stargate": "^0.32.3", "@cosmjs/tendermint-rpc": "^0.32.3", "@endo/errors": "^1.2.2", @@ -23,5 +23,8 @@ "ava": { "concurrency": 1 }, - "packageManager": "yarn@4.5.1" + "packageManager": "yarn@4.5.3", + "devDependencies": { + "@types/node": "^22.0.0" + } } diff --git a/a3p-integration/proposals/s:stake-bld/stakeBld.test.js b/a3p-integration/proposals/s:stake-bld/stakeBld.test.js index 9333fb302eb..549e4562545 100644 --- a/a3p-integration/proposals/s:stake-bld/stakeBld.test.js +++ b/a3p-integration/proposals/s:stake-bld/stakeBld.test.js @@ -30,6 +30,9 @@ test('basic', async t => { t.is((await currentDelegation()).length, 1, 'just the initial delegation'); + /** @type {import('@agoric/ertp').Brand} */ + const BLDBrand = brand.BLD; + await walletUtils.broadcastBridgeAction(GOV1ADDR, { method: 'executeOffer', offer: { @@ -41,7 +44,7 @@ test('basic', async t => { }, proposal: { give: { - In: { brand: brand.BLD, value: 10n }, + In: { brand: BLDBrand, value: 10n }, }, }, }, @@ -55,11 +58,11 @@ test('basic', async t => { source: 'continuing', previousOffer: 'request-stake', invitationMakerName: 'Delegate', - invitationArgs: [VALIDATOR_ADDRESS, { brand: brand.BLD, value: 10n }], + invitationArgs: [VALIDATOR_ADDRESS, { brand: BLDBrand, value: 10n }], }, proposal: { give: { - In: { brand: brand.BLD, value: 10n }, + In: { brand: BLDBrand, value: 10n }, }, }, }, diff --git a/a3p-integration/proposals/s:stake-bld/test-lib/chain.js b/a3p-integration/proposals/s:stake-bld/test-lib/chain.js index 1e96c0354ae..74cc0d3c14f 100644 --- a/a3p-integration/proposals/s:stake-bld/test-lib/chain.js +++ b/a3p-integration/proposals/s:stake-bld/test-lib/chain.js @@ -49,7 +49,7 @@ export const execSwingsetTransaction = (swingsetArgs, opts) => { stdout.write('\n'); } else { const yesCmd = cmd.concat(['--yes']); - if (verbose) console.log('Executing ', yesCmd); + if (verbose) console.log('Executing ', agdBinary, yesCmd); const out = execFileSync(agdBinary, yesCmd, { encoding: 'utf-8' }); // agd puts this diagnostic on stdout rather than stderr :-/ diff --git a/a3p-integration/proposals/s:stake-bld/test-lib/rpc.js b/a3p-integration/proposals/s:stake-bld/test-lib/rpc.js index 1d62aedf1be..a3ac266ee88 100644 --- a/a3p-integration/proposals/s:stake-bld/test-lib/rpc.js +++ b/a3p-integration/proposals/s:stake-bld/test-lib/rpc.js @@ -1,7 +1,7 @@ /** @file copied from packages/agoric-cli */ // TODO DRY in https://github.com/Agoric/agoric-sdk/issues/9109 // @ts-check -/* global Buffer */ +/* eslint-env node */ import { Fail } from '@endo/errors'; import { diff --git a/a3p-integration/proposals/s:stake-bld/test-lib/wallet.js b/a3p-integration/proposals/s:stake-bld/test-lib/wallet.js index 53d9634e278..e9461522e1d 100644 --- a/a3p-integration/proposals/s:stake-bld/test-lib/wallet.js +++ b/a3p-integration/proposals/s:stake-bld/test-lib/wallet.js @@ -29,6 +29,7 @@ import { makeVstorageKit } from './rpc.js'; */ export const sendAction = async (bridgeAction, opts) => { const { marshaller } = opts; + // @ts-expect-error BridgeAction has methods disallowed by Passable const offerBody = JSON.stringify(marshaller.toCapData(harden(bridgeAction))); // tryExit should not require --allow-spend diff --git a/a3p-integration/proposals/s:stake-bld/tsconfig.json b/a3p-integration/proposals/s:stake-bld/tsconfig.json new file mode 100644 index 00000000000..8672f62769d --- /dev/null +++ b/a3p-integration/proposals/s:stake-bld/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "noEmit": true, + "target": "esnext", + "module": "esnext", + "moduleResolution": "bundler", + "allowJs": true, + "checkJs": true, + "strict": false, + "strictNullChecks": true, + "noImplicitThis": true, + // XXX synthetic-chain has some errors + "skipLibCheck": true + }, + "exclude": ["submission"] +} diff --git a/a3p-integration/proposals/s:stake-bld/yarn.lock b/a3p-integration/proposals/s:stake-bld/yarn.lock index 0b3c412ed00..6eeed912071 100644 --- a/a3p-integration/proposals/s:stake-bld/yarn.lock +++ b/a3p-integration/proposals/s:stake-bld/yarn.lock @@ -365,9 +365,9 @@ __metadata: languageName: node linkType: hard -"@agoric/synthetic-chain@npm:^0.3.0": - version: 0.3.0 - resolution: "@agoric/synthetic-chain@npm:0.3.0" +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" dependencies: "@endo/zip": "npm:^1.0.7" better-sqlite3: "npm:^9.6.0" @@ -376,7 +376,7 @@ __metadata: execa: "npm:^9.3.1" bin: synthetic-chain: dist/cli/cli.js - checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b languageName: node linkType: hard @@ -873,84 +873,87 @@ __metadata: languageName: node linkType: hard -"@endo/base64@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/base64@npm:1.0.2" - checksum: 10c0/287d969b8ca3075d7580d33ffe52965048b28ec1f5d0800522b41eae30c1ba7f2fb059a4002e4a9882b8565e2e6d7281a66c3fb93b15d7b3ea498aff0c080aca +"@endo/base64@npm:^1.0.2, @endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 languageName: node linkType: hard "@endo/bundle-source@npm:^3.1.0": - version: 3.1.0 - resolution: "@endo/bundle-source@npm:3.1.0" - dependencies: - "@endo/base64": "npm:^1.0.2" - "@endo/compartment-mapper": "npm:^1.1.2" - "@endo/evasive-transform": "npm:^1.0.4" - "@endo/init": "npm:^1.0.4" - "@endo/promise-kit": "npm:^1.0.4" - "@endo/where": "npm:^1.0.2" + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" "@rollup/plugin-commonjs": "npm:^19.0.0" + "@rollup/plugin-json": "npm:^6.1.0" "@rollup/plugin-node-resolve": "npm:^13.0.0" acorn: "npm:^8.2.4" rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" bin: - bundle-source: src/tool.js - checksum: 10c0/615683c7ea36d2293247052f28c84171c37c2654ea16f8578e52b5bcad7a598f070dfac718239367cab5a1998b8f837a74c46f83e0869793f5d52ec06cffa9dc + bundle-source: ./src/tool.js + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 languageName: node linkType: hard "@endo/captp@npm:^4.0.4": - version: 4.0.4 - resolution: "@endo/captp@npm:4.0.4" + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" dependencies: - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/marshal": "npm:^1.3.0" - "@endo/nat": "npm:^5.0.4" - "@endo/promise-kit": "npm:^1.0.4" - checksum: 10c0/609f7e5f7d8343f6317c531178ab7f6217030451b355baf21770b5698749c3d7375df7ed40e1ad271a99dd28c2e10272b262e45563af1db8e7c812c132aab424 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 languageName: node linkType: hard "@endo/check-bundle@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/check-bundle@npm:1.0.4" + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" dependencies: - "@endo/base64": "npm:^1.0.2" - "@endo/compartment-mapper": "npm:^1.1.2" - "@endo/errors": "npm:^1.1.0" - checksum: 10c0/1e07127229e8b76203f809cdac74c34999ec85726756206f5855c157df69b107d3e69010630e9fa2ba9cc4e29b96b4c41cd6920fead090c67a1a1cfd6031898a + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c languageName: node linkType: hard -"@endo/cjs-module-analyzer@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/cjs-module-analyzer@npm:1.0.2" - checksum: 10c0/294d05790408a8d1bac90cbd1811d3c44aba6c311cfbcf61d6cbe4536fdcbc2018ba81133f116cd6deb35d1f0e10a248a2e4bcfcc5799cfc28733e3201a82388 +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 languageName: node linkType: hard -"@endo/common@npm:^1.1.0": - version: 1.1.0 - resolution: "@endo/common@npm:1.1.0" +"@endo/common@npm:^1.1.0, @endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" dependencies: - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/promise-kit": "npm:^1.0.4" - checksum: 10c0/dc8e80366345875d977c5ce31153368cff6853154ed245423f7330061c0c935b52f657c7b6fbcb8fecb7137f0a68ba23849dfe0f71cf7401536c32ff8fcacefd + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b languageName: node linkType: hard -"@endo/compartment-mapper@npm:^1.1.2": - version: 1.1.2 - resolution: "@endo/compartment-mapper@npm:1.1.2" +"@endo/compartment-mapper@npm:^1.1.2, @endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" dependencies: - "@endo/cjs-module-analyzer": "npm:^1.0.2" - "@endo/static-module-record": "npm:^1.0.4" - "@endo/zip": "npm:^1.0.2" - ses: "npm:^1.3.0" - checksum: 10c0/abb8dae4339851834e17f9353b262e44f33a1a87ed409a0b40569a19cde200de75cb407cf0aaba73b39e5766c10ee170496a82fbeb1b24f4029433bed7324e24 + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 languageName: node linkType: hard @@ -961,47 +964,31 @@ __metadata: languageName: node linkType: hard -"@endo/env-options@npm:^1.1.1": - version: 1.1.1 - resolution: "@endo/env-options@npm:1.1.1" - checksum: 10c0/05bfb5630b88f79f402dfab9c57b60381dca4e2090d96ff64b04f7e461af709c9df599621413bed9ed8f6cc8493ee397dc7dc282d7089e49bf9297c1200a44f6 +"@endo/env-options@npm:^1.1.1, @endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 languageName: node linkType: hard -"@endo/env-options@npm:^1.1.4": - version: 1.1.4 - resolution: "@endo/env-options@npm:1.1.4" - checksum: 10c0/8816c8fe1332a6f3366e7e4849b000d757fcd181eac011ed8363ccc4e66dfa2f2d975f8d5cbfb3844f3e327c5391e77ee7e234a59a21744c74c945f683b56df1 - languageName: node - linkType: hard - -"@endo/errors@npm:^1.1.0": - version: 1.1.0 - resolution: "@endo/errors@npm:1.1.0" - dependencies: - ses: "npm:^1.3.0" - checksum: 10c0/3c909f5d76c9d1c0545f72c3e9d5ddb81518f85ea40b3093af01fac828e12fb1f689ba026898f89c5d29e634df7e0e055a1486c47ce939a890c21f2100ecc086 - languageName: node - linkType: hard - -"@endo/errors@npm:^1.2.2": - version: 1.2.2 - resolution: "@endo/errors@npm:1.2.2" +"@endo/errors@npm:^1.1.0, @endo/errors@npm:^1.2.2, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" dependencies: - ses: "npm:^1.5.0" - checksum: 10c0/d90baaf803b17130b83fbc562e253504a6a05e4843d63536e74578503f6bd937fdba3464c4d8eeb9df16b795639cd9c4aad143520525f9e54aa3e91dc5184c17 + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 languageName: node linkType: hard -"@endo/evasive-transform@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/evasive-transform@npm:1.0.4" +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" dependencies: "@agoric/babel-generator": "npm:^7.17.6" "@babel/parser": "npm:^7.23.6" "@babel/traverse": "npm:^7.23.6" - source-map: "npm:0.7.4" - checksum: 10c0/9fb9159218ac8f8a145c20305bda3515bbce8401863f942865f00f2aa2ad3b9f64cc180121c60556ff41b2e1a5968d27a61d7f034cfb6d3224dd2caef4b82175 + source-map-js: "npm:^1.2.0" + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 languageName: node linkType: hard @@ -1014,27 +1001,27 @@ __metadata: languageName: node linkType: hard -"@endo/eventual-send@npm:^1.1.2": - version: 1.1.2 - resolution: "@endo/eventual-send@npm:1.1.2" +"@endo/eventual-send@npm:^1.1.2, @endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" dependencies: - "@endo/env-options": "npm:^1.1.1" - checksum: 10c0/4d704e9a905b4003735da8d3b198139885dd007db87835d05be8f69189773774116ac7a9a512cdf9d8cf68ca88dcff6eca1596d32aed589734aa50ad18e086ed + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd languageName: node linkType: hard "@endo/exo@npm:^1.2.1": - version: 1.2.1 - resolution: "@endo/exo@npm:1.2.1" + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" dependencies: - "@endo/common": "npm:^1.1.0" - "@endo/env-options": "npm:^1.1.1" - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/far": "npm:^1.0.4" - "@endo/pass-style": "npm:^1.2.0" - "@endo/patterns": "npm:^1.2.0" - checksum: 10c0/b6f3074446f84ff05e89e0e84d83bcd99e898b084bfa7357fda63045e71fb7101d7b89c5539342fed99c45e3b166bfb22045902abc9159be1ce4230a4dbc1b07 + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 languageName: node linkType: hard @@ -1048,81 +1035,94 @@ __metadata: languageName: node linkType: hard -"@endo/far@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/far@npm:1.0.4" +"@endo/far@npm:^1.0.4, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" dependencies: - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/pass-style": "npm:^1.2.0" - checksum: 10c0/61a0fbefe7b05cc5d67c68b0cb0ed5ef5791aadbb06cc0523493fa412fcc40e66df8977a46ff330b67218c5e1cde231ab72b6159c03330e16e6017444ea2db17 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e languageName: node linkType: hard "@endo/import-bundle@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/import-bundle@npm:1.0.4" + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" dependencies: - "@endo/base64": "npm:^1.0.2" - "@endo/compartment-mapper": "npm:^1.1.2" - "@endo/errors": "npm:^1.1.0" - "@endo/where": "npm:^1.0.2" - ses: "npm:^1.3.0" - checksum: 10c0/8caa71d0a9aee3387e740808807cbe27d6868cea49fb292f97c51ccb3478b106e061ea69d8ab467ca12419ab9ce5ba47a0ea6052c44cb8506a04fb887b80c846 + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a languageName: node linkType: hard -"@endo/init@npm:^1.0.3, @endo/init@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/init@npm:1.0.4" +"@endo/init@npm:^1.0.3, @endo/init@npm:^1.0.4, @endo/init@npm:^1.1.7": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" dependencies: - "@endo/base64": "npm:^1.0.2" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/lockdown": "npm:^1.0.4" - "@endo/promise-kit": "npm:^1.0.4" - checksum: 10c0/d88dc4f952fe05b2beb08b6ef5bf56a49062f89ca0c3fa5fcf96e0f713c275e4c1764a639aa7cc339a856cdf4aaa80eb180b16e2f0ecd345f75732b98ca550e0 + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f languageName: node linkType: hard -"@endo/lockdown@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/lockdown@npm:1.0.4" +"@endo/lockdown@npm:^1.0.13, @endo/lockdown@npm:^1.0.4": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" dependencies: - ses: "npm:^1.3.0" - checksum: 10c0/e0d8f83c81bed238d8a9d131577c7a17dc2504f3931d3f5da295c0d4d67a89c8d30d66db9e76d9f3afbe30931428e00240a30d94342ddd3041ff2fd4c71a48a3 + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 languageName: node linkType: hard -"@endo/marshal@npm:^1.3.0": - version: 1.3.0 - resolution: "@endo/marshal@npm:1.3.0" +"@endo/marshal@npm:^1.3.0, @endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" dependencies: - "@endo/common": "npm:^1.1.0" - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/nat": "npm:^5.0.4" - "@endo/pass-style": "npm:^1.2.0" - "@endo/promise-kit": "npm:^1.0.4" - checksum: 10c0/106433ac72c5d58781b6d70541b9441acf991c2e0f622308839c7e0722d4d9fc9e1f6167757a37a6c9017a08fcdce5076122badfb3b2f2ffd4a3a9778419f07f + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 languageName: node linkType: hard -"@endo/nat@npm:^5.0.4": - version: 5.0.4 - resolution: "@endo/nat@npm:5.0.4" - checksum: 10c0/7ddca740b9ab1c0f200e356c389bc2223e4bed9379f54eada5522b34bbf29e03cd3085617006ce8e2c2e4874b8692d1472397bd6e6a9a7f1c4e0682397cb8887 +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" + dependencies: + "@agoric/babel-generator": "npm:^7.17.6" + "@babel/parser": "npm:^7.23.6" + "@babel/traverse": "npm:^7.23.6" + "@babel/types": "npm:^7.24.0" + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c + languageName: node + linkType: hard + +"@endo/nat@npm:^5.0.13, @endo/nat@npm:^5.0.4": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 languageName: node linkType: hard "@endo/netstring@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/netstring@npm:1.0.4" + version: 1.0.13 + resolution: "@endo/netstring@npm:1.0.13" dependencies: - "@endo/init": "npm:^1.0.4" - "@endo/promise-kit": "npm:^1.0.4" - "@endo/stream": "npm:^1.1.0" - ses: "npm:^1.3.0" - checksum: 10c0/30a160b37e81a92ad9aa655e36a0269d8464da872af81eb7c82b167da34630f5e4f5d2123e018ff5b00773860f08b73b04772824cab79b94f55886a97ed55736 + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/stream": "npm:^1.2.8" + ses: "npm:^1.10.0" + checksum: 10c0/1d669ffca92609b3e179bd235c3660ef2fd36a808d4df523fdd6c276cd2a47e2177c43a4e37b4bfb8cacfd1b4e1657cec7d197518c795652c8c248997ee59948 languageName: node linkType: hard @@ -1136,28 +1136,29 @@ __metadata: languageName: node linkType: hard -"@endo/pass-style@npm:^1.2.0": - version: 1.2.0 - resolution: "@endo/pass-style@npm:1.2.0" +"@endo/pass-style@npm:^1.2.0, @endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" dependencies: - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/promise-kit": "npm:^1.0.4" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" "@fast-check/ava": "npm:^1.1.5" - checksum: 10c0/7d13abef42ef7fc53b0dbf1af934cb2f010ab9d3258abd36ba857713687608571bc599cf49b86db9de95e0bccf827a97b7e9c2525ca0238c7e6689c00aa63ec2 + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e languageName: node linkType: hard -"@endo/patterns@npm:^1.1.0, @endo/patterns@npm:^1.2.0": - version: 1.2.0 - resolution: "@endo/patterns@npm:1.2.0" +"@endo/patterns@npm:^1.1.0, @endo/patterns@npm:^1.2.0, @endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" dependencies: - "@endo/common": "npm:^1.1.0" - "@endo/errors": "npm:^1.1.0" - "@endo/eventual-send": "npm:^1.1.2" - "@endo/marshal": "npm:^1.3.0" - "@endo/promise-kit": "npm:^1.0.4" - checksum: 10c0/1a2786982c2dc2325ccac74110756a2a70524eb6b9679f605573373512af2c34834657139234ff11a384d71ea264046e13191edf61048e05655c7c3b3bd50682 + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b languageName: node linkType: hard @@ -1170,78 +1171,69 @@ __metadata: languageName: node linkType: hard -"@endo/promise-kit@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/promise-kit@npm:1.0.4" +"@endo/promise-kit@npm:^1.0.4, @endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" dependencies: - ses: "npm:^1.3.0" - checksum: 10c0/18a62d68baddee3d5936695c4b87924c49367a57992f3c6b141b15fbc28bc3bb486e56a21a2c8857485371d19f8ffe475121cb4c557e331ae95418793e4bb702 + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 languageName: node linkType: hard "@endo/ses-ava@npm:^1.1.2": - version: 1.1.2 - resolution: "@endo/ses-ava@npm:1.1.2" - dependencies: - ses: "npm:^1.3.0" - checksum: 10c0/6a40db9233173531f05da335d5e06f6713162f7fc83c69a1e59949903c2feed366b2720a433d0aa8486db19cc957bc483fc11cc62bd84973487b576ddecb838a - languageName: node - linkType: hard - -"@endo/static-module-record@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/static-module-record@npm:1.0.4" + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" dependencies: - "@agoric/babel-generator": "npm:^7.17.6" - "@babel/parser": "npm:^7.23.6" - "@babel/traverse": "npm:^7.23.6" - "@babel/types": "npm:^7.23.6" - ses: "npm:^1.3.0" - checksum: 10c0/75914c9fd3e617a6ef64da894a7f27947f472334bff275c6f0827d5914ef2cff42d108f8b7bc2212f4ef3a557f95f9d700bfab348ad4d3d976d351513ded8e13 + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" + peerDependencies: + ava: ^5.3.0 || ^6.1.2 + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf languageName: node linkType: hard "@endo/stream-node@npm:^1.0.4": - version: 1.0.4 - resolution: "@endo/stream-node@npm:1.0.4" + version: 1.1.8 + resolution: "@endo/stream-node@npm:1.1.8" dependencies: - "@endo/errors": "npm:^1.1.0" - "@endo/init": "npm:^1.0.4" - "@endo/stream": "npm:^1.1.0" - ses: "npm:^1.3.0" - checksum: 10c0/3b8484767cd784b013251ec97adb3509440f7bc20d5ef75af6def73da4eb0d83d77321d1b9cc6f3e103ac5d1c786f1d8c6fe2052d2f647953c77fbc80247d388 + "@endo/errors": "npm:^1.2.8" + "@endo/init": "npm:^1.1.7" + "@endo/stream": "npm:^1.2.8" + ses: "npm:^1.10.0" + checksum: 10c0/d07769acf381b4b5a904bfdae1b7aba0b7cb11f8ed1a38892a072b68e3dd8eb1954c77984a6eb7af09006ad5e707a8aa4e2c5d4424eb6898beae9ceb0015d8e3 languageName: node linkType: hard -"@endo/stream@npm:^1.1.0": - version: 1.1.0 - resolution: "@endo/stream@npm:1.1.0" +"@endo/stream@npm:^1.1.0, @endo/stream@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" dependencies: - "@endo/eventual-send": "npm:^1.1.2" - "@endo/promise-kit": "npm:^1.0.4" - ses: "npm:^1.3.0" - checksum: 10c0/f0188551e07cb38f1f01945c3273060b47b80d6d1e4e2d45812ba4d6d2bce47b79d7afe1ff2eaa8d563d7db05e614e857380c048deb736f08f2b78e9a1d4df47 + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 languageName: node linkType: hard -"@endo/where@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/where@npm:1.0.2" - checksum: 10c0/c2a48550b588393fa92cb6ae110a4a2a9782028b4b1d646978ab683c792793f89cff9b35a7d38ca6be3259ebc20ea5ec32dcb3c32906aae7c7a493caa070d760 +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 languageName: node linkType: hard -"@endo/zip@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/zip@npm:1.0.2" - checksum: 10c0/307b0716ad22415cb5a58fd5678a663cd447d1db9f664b2477638b8a65b79741581a5825d1aede999c2d75d276e3f1501e17f42c903c5af2a62889daa34cbef2 +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 languageName: node linkType: hard -"@endo/zip@npm:^1.0.7": - version: 1.0.7 - resolution: "@endo/zip@npm:1.0.7" - checksum: 10c0/a1c0d155448ce877012b34c8fe8cd3a58de9eb807514c81cddeebb802ee8e552b27d8a9a40fab3f3e4c49e0cb7fea6902fa1dd12a23ff6f30b56161fc3edc1f8 +"@endo/zip@npm:^1.0.2, @endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc languageName: node linkType: hard @@ -1472,6 +1464,20 @@ __metadata: languageName: node linkType: hard +"@rollup/plugin-json@npm:^6.1.0": + version: 6.1.0 + resolution: "@rollup/plugin-json@npm:6.1.0" + dependencies: + "@rollup/pluginutils": "npm:^5.1.0" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/9400c431b5e0cf3088ba2eb2d038809a2b0fb2a84ed004997da85582f48cd64958ed3168893c4f2c8109e38652400ed68282d0c92bf8ec07a3b2ef2e1ceab0b7 + languageName: node + linkType: hard + "@rollup/plugin-node-resolve@npm:^13.0.0": version: 13.3.0 resolution: "@rollup/plugin-node-resolve@npm:13.3.0" @@ -1501,6 +1507,22 @@ __metadata: languageName: node linkType: hard +"@rollup/pluginutils@npm:^5.1.0": + version: 5.1.3 + resolution: "@rollup/pluginutils@npm:5.1.3" + dependencies: + "@types/estree": "npm:^1.0.0" + estree-walker: "npm:^2.0.2" + picomatch: "npm:^4.0.2" + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + checksum: 10c0/ba46ad588733fb01d184ee3bc7a127d626158bc840b5874a94c129ff62689d12f16f537530709c54da6f3b71f67d705c4e09235b1dc9542e9d47ee8f2d0b8b9e + languageName: node + linkType: hard + "@sec-ant/readable-stream@npm:^0.4.1": version: 0.4.1 resolution: "@sec-ant/readable-stream@npm:0.4.1" @@ -1529,6 +1551,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.0": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a + languageName: node + linkType: hard + "@types/long@npm:^4.0.1": version: 4.0.2 resolution: "@types/long@npm:4.0.2" @@ -1545,6 +1574,15 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^22.0.0": + version: 22.9.1 + resolution: "@types/node@npm:22.9.1" + dependencies: + undici-types: "npm:~6.19.8" + checksum: 10c0/ea489ae603aa8874e4e88980aab6f2dad09c755da779c88dd142983bfe9609803c89415ca7781f723072934066f63daf2b3339ef084a8ad1a8079cf3958be243 + languageName: node + linkType: hard + "@types/resolve@npm:1.17.1": version: 1.17.1 resolution: "@types/resolve@npm:1.17.1" @@ -2666,7 +2704,7 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^2.0.1": +"estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" checksum: 10c0/53a6c54e2019b8c914dc395890153ffdc2322781acf4bd7d1a32d7aedc1710807bdcd866ac133903d5629ec601fbb50abe8c2e5553c7f5a0afdd9b6af6c945af @@ -4349,6 +4387,13 @@ __metadata: languageName: node linkType: hard +"picomatch@npm:^4.0.2": + version: 4.0.2 + resolution: "picomatch@npm:4.0.2" + checksum: 10c0/7c51f3ad2bb42c776f49ebf964c644958158be30d0a510efd5a395e8d49cb5acfed5b82c0c5b365523ce18e6ab85013c9ebe574f60305892ec3fa8eee8304ccc + languageName: node + linkType: hard + "pkg-conf@npm:^4.0.0": version: 4.0.0 resolution: "pkg-conf@npm:4.0.0" @@ -4647,12 +4692,13 @@ __metadata: resolution: "root-workspace-0b6124@workspace:." dependencies: "@agoric/internal": "npm:0.3.3-dev-5676146.0" - "@agoric/synthetic-chain": "npm:^0.3.0" + "@agoric/synthetic-chain": "npm:^0.4.3" "@cosmjs/stargate": "npm:^0.32.3" "@cosmjs/tendermint-rpc": "npm:^0.32.3" "@endo/errors": "npm:^1.2.2" "@endo/far": "npm:^1.0.4" "@endo/init": "npm:^1.0.4" + "@types/node": "npm:^22.0.0" agoric: "npm:0.21.2-dev-5676146.0" ava: "npm:^5.3.1" execa: "npm:^8.0.1" @@ -4743,21 +4789,12 @@ __metadata: languageName: node linkType: hard -"ses@npm:^1.3.0": - version: 1.3.0 - resolution: "ses@npm:1.3.0" +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" dependencies: - "@endo/env-options": "npm:^1.1.1" - checksum: 10c0/a1385c91a23677de3b91ffa93a8f08134b6657f93c3002b2269c961e28c19deeeadce4ae30a7bcc177a312268fa8d21de2aa5acfc4370055c17dd8c53885ffa4 - languageName: node - linkType: hard - -"ses@npm:^1.5.0": - version: 1.5.0 - resolution: "ses@npm:1.5.0" - dependencies: - "@endo/env-options": "npm:^1.1.4" - checksum: 10c0/bd5e230ff07abe84632ff212a5dce5163d979ab0ae657c4ac0ee2748aea9f587d83c75639d0058def62eae6dde55c0ae9652f33aecc5e0fe538c89ce54bffcdc + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 languageName: node linkType: hard @@ -4888,10 +4925,10 @@ __metadata: languageName: node linkType: hard -"source-map@npm:0.7.4": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 10c0/dc0cf3768fe23c345ea8760487f8c97ef6fca8a73c83cd7c9bf2fde8bc2c34adb9c0824d6feb14bc4f9e37fb522e18af621543f1289038a66ac7586da29aa7dc +"source-map-js@npm:^1.2.0": + version: 1.2.1 + resolution: "source-map-js@npm:1.2.1" + checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf languageName: node linkType: hard @@ -5197,6 +5234,15 @@ __metadata: languageName: node linkType: hard +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + "tslib@npm:^2.1.0": version: 2.6.2 resolution: "tslib@npm:2.6.2" @@ -5227,6 +5273,26 @@ __metadata: languageName: node linkType: hard +"typescript@npm:5.1.6 - 5.6.x": + version: 5.6.3 + resolution: "typescript@npm:5.6.3" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/44f61d3fb15c35359bc60399cb8127c30bae554cd555b8e2b46d68fa79d680354b83320ad419ff1b81a0bdf324197b29affe6cc28988cd6a74d4ac60c94f9799 + languageName: node + linkType: hard + +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin": + version: 5.6.3 + resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 10c0/7c9d2e07c81226d60435939618c91ec2ff0b75fbfa106eec3430f0fcf93a584bc6c73176676f532d78c3594fe28a54b36eb40b3d75593071a7ec91301533ace7 + languageName: node + linkType: hard + "undici-types@npm:~5.26.4": version: 5.26.5 resolution: "undici-types@npm:5.26.5" @@ -5234,6 +5300,13 @@ __metadata: languageName: node linkType: hard +"undici-types@npm:~6.19.8": + version: 6.19.8 + resolution: "undici-types@npm:6.19.8" + checksum: 10c0/078afa5990fba110f6824823ace86073b4638f1d5112ee26e790155f481f2a868cc3e0615505b6f4282bdf74a3d8caad715fd809e870c2bb0704e3ea6082f344 + languageName: node + linkType: hard + "unicorn-magic@npm:^0.3.0": version: 0.3.0 resolution: "unicorn-magic@npm:0.3.0" diff --git a/a3p-integration/proposals/z:acceptance/governance.test.js b/a3p-integration/proposals/z:acceptance/governance.test.js index 31a8642dddd..353590370eb 100644 --- a/a3p-integration/proposals/z:acceptance/governance.test.js +++ b/a3p-integration/proposals/z:acceptance/governance.test.js @@ -38,11 +38,11 @@ test.serial( ); assert(charterInvitation, 'missing charter invitation'); - t.log('proposing on param change'); const params = { ChargingPeriod: 400n, }; const path = { paramPath: { key: 'governedParams' } }; + t.log('Proposing param change', { params, path }); await governanceDriver.proposeVaultDirectorParamChange( governanceAddresses[0], @@ -52,6 +52,7 @@ test.serial( ); const questionUpdate = await getLastUpdate(governanceAddresses[0]); + t.log(questionUpdate); t.like(questionUpdate, { status: { numWantsSatisfied: 1 }, }); @@ -70,13 +71,17 @@ test.serial( v[1].value[0].instance.getBoardId() === instances.economicCommittee.getBoardId(), ); - assert(committeeInvitationForVoter, 'missing committee invitation'); + assert( + committeeInvitationForVoter, + `${address} must have committee invitation`, + ); await governanceDriver.voteOnProposedChanges( address, committeeInvitationForVoter[0], ); const voteUpdate = await getLastUpdate(address); + t.log(`${address} voted`); t.like(voteUpdate, { status: { numWantsSatisfied: 1 }, }); @@ -88,12 +93,16 @@ test.serial( 'published.committees.Economic_Committee.latestQuestion', ) ); - await waitUntil(latestQuestion.closingRule.deadline); + t.log('Waiting for deadline', latestQuestion); + /** @type {bigint} */ + // @ts-expect-error assume POSIX seconds since epoch + const deadline = latestQuestion.closingRule.deadline; + await waitUntil(deadline); - t.log('check if latest outcome is correct'); const latestOutcome = await readLatestHead( 'published.committees.Economic_Committee.latestOutcome', ); + t.log('Verifying latest outcome', latestOutcome); t.like(latestOutcome, { outcome: 'win' }); }, ); diff --git a/a3p-integration/proposals/z:acceptance/kread.test.js b/a3p-integration/proposals/z:acceptance/kread.test.js index b7ed9404f53..85f22334414 100644 --- a/a3p-integration/proposals/z:acceptance/kread.test.js +++ b/a3p-integration/proposals/z:acceptance/kread.test.js @@ -76,6 +76,7 @@ test.serial('Alice sells one unequipped Item', async t => { ); const soldItemNode = itemListAfter.filter( + /** @param {unknown} itemNode */ itemNode => !itemListBefore.includes(itemNode), ); const soldItem = await getMarketItem(soldItemNode); @@ -102,6 +103,7 @@ test.serial('Bob buys an Item on marketplace', async t => { ); const boughtItemNode = itemListBefore.filter( + /** @param {unknown} itemNode */ itemNode => !itemListAfter.includes(itemNode), ); t.is( diff --git a/a3p-integration/proposals/z:acceptance/localchain.test.js b/a3p-integration/proposals/z:acceptance/localchain.test.js index 340e84a5f99..6985cef8a00 100644 --- a/a3p-integration/proposals/z:acceptance/localchain.test.js +++ b/a3p-integration/proposals/z:acceptance/localchain.test.js @@ -2,7 +2,7 @@ import { agd, evalBundles } from '@agoric/synthetic-chain'; import test from 'ava'; -import { retryUntilCondition } from './test-lib/sync-tools.js'; +import { retryUntilCondition } from '@agoric/client-utils'; const SUBMISSION_DIR = 'localchaintest-submission'; diff --git a/a3p-integration/proposals/z:acceptance/package.json b/a3p-integration/proposals/z:acceptance/package.json index c9a25480907..e95b55a26a5 100644 --- a/a3p-integration/proposals/z:acceptance/package.json +++ b/a3p-integration/proposals/z:acceptance/package.json @@ -15,15 +15,15 @@ "@agoric/inter-protocol": "dev", "@agoric/internal": "dev", "@agoric/store": "dev", - "@agoric/synthetic-chain": "^0.3.0", + "@agoric/synthetic-chain": "^0.4.3", "@agoric/zoe": "dev", - "@endo/errors": "^1.2.2", - "@endo/far": "^1.1.5", - "@endo/init": "^1.1.4", - "@endo/marshal": "^1.5.3", + "@endo/errors": "^1.2.7", + "@endo/far": "^1.1.8", + "@endo/init": "^1.1.6", + "@endo/marshal": "^1.6.1", "agoric": "dev", "ava": "^6.1.2", - "execa": "^9.3.1", + "execa": "9.1.0", "tsx": "^4.17.0" }, "$comment": "UNTIL https://github.com/Agoric/agoric-sdk/issues/10259", @@ -78,7 +78,7 @@ }, "ava": { "require": [ - "@endo/init/legacy.js" + "@endo/init/debug.js" ], "concurrency": 1, "serial": true, @@ -90,8 +90,10 @@ "scripts": { "agops": "yarn --cwd /usr/src/agoric-sdk/ --silent agops" }, - "packageManager": "yarn@4.5.1", + "packageManager": "yarn@4.5.3", "devDependencies": { - "typescript": "^5.5.4" + "eslint": "^8.57.0", + "npm-run-all": "^4.1.5", + "typescript": "^5.6.3" } } diff --git a/a3p-integration/proposals/z:acceptance/psm.test.js b/a3p-integration/proposals/z:acceptance/psm.test.js index 45dfaac55b7..8496cc1d3b3 100644 --- a/a3p-integration/proposals/z:acceptance/psm.test.js +++ b/a3p-integration/proposals/z:acceptance/psm.test.js @@ -31,6 +31,7 @@ import { getPsmMetrics, implementPsmGovParamChange, initializeNewUser, + logRecord, maxMintBelowLimit, psmSwap, sendOfferAgd, @@ -148,8 +149,8 @@ test.serial('swap into IST using agd with default gas', async t => { balances, psmTrader, ); - t.log('METRICS', metricsBefore); - t.log('BALANCES', balancesBefore); + logRecord('METRICS', metricsBefore, t.log); + logRecord('BALANCES', balancesBefore, t.log); await psmSwap( psmTrader, @@ -188,8 +189,8 @@ test.serial('swap out of IST', async t => { getBalances([psmTrader]), ]); - t.log('METRICS', metricsBefore); - t.log('BALANCES', balancesBefore); + logRecord('METRICS', metricsBefore, t.log); + logRecord('BALANCES', balancesBefore, t.log); await psmSwap( psmTrader, @@ -238,8 +239,8 @@ test.serial('mint limit is adhered', async t => { getBalances([otherAddr]), ]); - t.log('METRICS', metricsBefore); - t.log('BALANCES', balancesBefore); + logRecord('METRICS', metricsBefore, t.log); + logRecord('BALANCES', balancesBefore, t.log); const { maxMintableValue, wantFeeValue } = await maxMintBelowLimit(anchor); const maxMintFeesAccounted = Math.floor( diff --git a/a3p-integration/proposals/z:acceptance/test-lib/chain.js b/a3p-integration/proposals/z:acceptance/test-lib/chain.js index 1e96c0354ae..74cc0d3c14f 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/chain.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/chain.js @@ -49,7 +49,7 @@ export const execSwingsetTransaction = (swingsetArgs, opts) => { stdout.write('\n'); } else { const yesCmd = cmd.concat(['--yes']); - if (verbose) console.log('Executing ', yesCmd); + if (verbose) console.log('Executing ', agdBinary, yesCmd); const out = execFileSync(agdBinary, yesCmd, { encoding: 'utf-8' }); // agd puts this diagnostic on stdout rather than stderr :-/ diff --git a/a3p-integration/proposals/z:acceptance/test-lib/governance.js b/a3p-integration/proposals/z:acceptance/test-lib/governance.js index ce08264b870..27c881c0ed2 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/governance.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/governance.js @@ -13,8 +13,6 @@ export const makeGovernanceDriver = async (fetch, networkConfig) => { /** @param {string} previousOfferId */ const generateVoteOffer = async previousOfferId => { - const id = `propose-${Date.now()}`; - const latestQuestionRecord = /** @type {import('@agoric/governance/src/types.js').QuestionSpec} */ ( await readLatestHead( @@ -22,6 +20,7 @@ export const makeGovernanceDriver = async (fetch, networkConfig) => { ) ); + const id = `propose-${Date.now()}`; const chosenPositions = [latestQuestionRecord.positions[0]]; const body = { method: 'executeOffer', @@ -81,21 +80,21 @@ export const makeGovernanceDriver = async (fetch, networkConfig) => { params, paramsPath, ) => { - const voteDurSec = BigInt(voteDur); - const toSec = (/** @type {number} */ ms) => BigInt(Math.round(ms / 1000)); - - const id = `propose-${Date.now()}`; - const deadline = toSec(Date.now()) + voteDurSec; - - const a = await agoric.follow( + const instancesRaw = await agoric.follow( '-lF', ':published.agoricNames.instance', '-o', 'text', ); - const instance = Object.fromEntries(marshaller.fromCapData(JSON.parse(a))); - assert(instance.VaultFactory); + const instances = Object.fromEntries( + marshaller.fromCapData(JSON.parse(instancesRaw)), + ); + const { VaultFactory } = instances; + assert(VaultFactory); + const msSinceEpoch = Date.now(); + const id = `propose-${msSinceEpoch}`; + const deadline = BigInt(Math.ceil(msSinceEpoch / 1000)) + BigInt(voteDur); const body = { method: 'executeOffer', offer: { @@ -107,7 +106,7 @@ export const makeGovernanceDriver = async (fetch, networkConfig) => { }, offerArgs: { deadline, - instance: instance.VaultFactory, + instance: VaultFactory, params, path: paramsPath, }, diff --git a/a3p-integration/proposals/z:acceptance/test-lib/price-feed.js b/a3p-integration/proposals/z:acceptance/test-lib/price-feed.js index ea30984d5b5..fefe9f7e4b6 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/price-feed.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/price-feed.js @@ -8,6 +8,7 @@ import { pushPrices, } from '@agoric/synthetic-chain'; +/** @type {(x: number) => bigint} */ export const scale6 = x => BigInt(x * 1_000_000); /** @@ -57,6 +58,6 @@ export const getPriceFeedRoundId = async brand => { prefix: '', }); - console.log('latestRound: ', latestRound); + console.log(latestRoundPath, latestRound); return Number(latestRound.roundId); }; diff --git a/a3p-integration/proposals/z:acceptance/test-lib/psm-lib.js b/a3p-integration/proposals/z:acceptance/test-lib/psm-lib.js index f97a89c7dd2..7b5beceb1d1 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/psm-lib.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/psm-lib.js @@ -10,6 +10,7 @@ import { waitUntilOfferResult, } from '@agoric/client-utils'; import { AmountMath } from '@agoric/ertp'; +import { deepMapObject } from '@agoric/internal'; import { addUser, agd, @@ -34,7 +35,7 @@ import { getBalances } from './utils.js'; * | { failed: false } * | Pick< * ExecaError & { failed: true }, - * 'failed', + * | 'failed' * | 'shortMessage' * | 'cause' * | 'exitCode' @@ -52,6 +53,93 @@ const PSM_PAIR = NonNullish(process.env.PSM_PAIR).replace('.', '-'); * @import {Coin} from '@agoric/cosmic-proto/cosmos/base/v1beta1/coin.js'; */ +/** + * Given either an array of [string, Value] or + * { [labelKey]: string, [valueKey]: Value } entries, or a + * Record object, log a concise representation similar to + * the latter but hiding implementation details of any embedded remotables. + * + * Sample output from any of the following input data: + * - { foo: { brand: FooBrand, value: '42' }, bar: { brand: BarBrand, value: '100' } } + * - [['foo', { brand: FooBrand, value: '42' }], ['bar', { brand: BarBrand, value: '100' }]] + * - [{ label: 'foo', amount: { brand: FooBrand, value: '42' } }, + * { label: 'bar', amount: { brand: BarBrand, value: '100' } }] + * + * $label $shape { + * foo: { + * brand: Object Alleged: Foo brand {}, + * value: '42', + * }, + * bar: { + * brand: Object Alleged: Bar brand {}, + * value: '100', + * }, + * } + * + * where $shape is `{ [label]: amount, ... }` for the third kind of input data + * but is otherwise empty. + * @deprecated should be in @agoric/client-utils? + * + * @template [Value=unknown] + * @param {string} label + * @param {Array<[string, Value] | object> | Record} data + * @param {(...args: unknown[]) => void} [log] + * @returns {void} + */ +export const logRecord = (label, data, log = console.log) => { + const entries = Array.isArray(data) ? [...data] : Object.entries(data); + /** @type {[labelKey: PropertyKey, valueKey: PropertyKey] | undefined} */ + let shape; + for (let i = 0; i < entries.length; i += 1) { + let entry = entries[i]; + if (!Array.isArray(entry)) { + // Determine which key of a two-property "entry object" (e.g., + // {denom, amount} or {brand, value} is the label and which is the value + // (which may be of type object or number or bigint or string). + if (!shape) { + const entryKeys = Object.keys(entry); + if (entryKeys.length !== 2) { + throw Error( + `[INTERNAL logRecord] not shaped like a record entry: {${entryKeys}}`, + ); + } + const valueKeyIndex = entryKeys.findIndex( + k => + typeof entry[k] === 'object' || + (entry[k].trim() !== '' && !Number.isNaN(Number(entry[k]))), + ); + if (valueKeyIndex === undefined) { + throw Error( + `[INTERNAL logRecord] no value property: {${entryKeys}}={${Object.values(entry).map(String)}}`, + ); + } + shape = /** @type {[string, string]} */ ( + valueKeyIndex === 1 ? entryKeys : entryKeys.reverse() + ); + } + // Convert the entry object to a [key, value] entry array. + entries[i] = shape.map(k => entry[k]); + entry = entries[i]; + } + // Simplify remotables in the value. + entry[1] = deepMapObject(entry[1], value => { + const tag = + value && typeof value === 'object' && value[Symbol.toStringTag]; + return tag + ? Object.defineProperty({}, Symbol.toStringTag, { + value: tag, + enumerable: false, + }) + : value; + }); + } + log( + label, + shape ? `{ [${String(shape[0])}]: ${String(shape[1])}, ... }` : '', + Object.fromEntries(entries), + ); +}; + /** * @typedef {object} PsmMetrics * @property {import('@agoric/ertp').Amount<'nat'>} anchorPoolBalance @@ -64,6 +152,35 @@ const PSM_PAIR = NonNullish(process.env.PSM_PAIR).replace('.', '-'); const fromBoard = makeFromBoard(); const marshaller = boardSlottingMarshaller(fromBoard.convertSlotToVal); +/** + * @param {string} path + */ +const objectFromVstorageEntries = async path => { + const rawEntries = await agoric.follow('-lF', `:${path}`, '-o', 'text'); + return Object.fromEntries(marshaller.fromCapData(JSON.parse(rawEntries))); +}; + +const snapshotAgoricNames = async () => { + const [brands, instances] = await Promise.all([ + objectFromVstorageEntries('published.agoricNames.brand'), + objectFromVstorageEntries('published.agoricNames.instance'), + ]); + return { brands, instances }; +}; + +/** + * @param {import('@agoric/ertp').Brand} brand + * @param {bigint} numValInPercent + */ +const toRatio = (brand, numValInPercent) => { + const commonDenominator = AmountMath.make(brand, 10_000n); + const numerator = AmountMath.make(brand, numValInPercent * 100n); // Convert to bps + return { + numerator, + denominator: commonDenominator, + }; +}; + /** * Import from synthetic-chain once it is updated * @@ -80,119 +197,6 @@ export const bankSend = (addr, wanted, from = VALIDATORADDR) => { return agd.tx('bank', 'send', from, addr, wanted, ...noise); }; -/** - * - * @param {{ - * address: string - * instanceName: string - * newParams: Params - * deadline: bigint - * offerId: string - * }} QuestionDetails - */ -export const buildProposePSMParamChangeOffer = async ({ - address, - instanceName, - newParams, - deadline, - offerId, -}) => { - const charterAcceptOfferId = await agops.ec( - 'find-continuing-id', - '--for', - `${'charter\\ member\\ invitation'}`, - '--from', - address, - ); - console.log('charterAcceptOfferId', charterAcceptOfferId); - const [brands, instances] = await Promise.all([ - agoric - .follow('-lF', ':published.agoricNames.brand', '-o', 'text') - .then(brandsRaw => - Object.fromEntries(marshaller.fromCapData(JSON.parse(brandsRaw))), - ), - agoric - .follow('-lF', ':published.agoricNames.instance', '-o', 'text') - .then(instancesRaw => - Object.fromEntries(marshaller.fromCapData(JSON.parse(instancesRaw))), - ), - ]); - - console.log('charterAcceptOfferId', charterAcceptOfferId); - console.log('BRANDS', brands); - console.log('INSTANCE', instances); - - /** - * @param {bigint} numValInPercent - */ - const toRatio = numValInPercent => { - const commonDenominator = AmountMath.make(brands.IST, 10_000n); - const numerator = AmountMath.make(brands.IST, numValInPercent * 100n); // Convert to bps - - return { - numerator, - denominator: commonDenominator, - }; - }; - - const params = {}; - if (newParams.giveMintedFeeVal) { - params.GiveMintedFee = toRatio(newParams.giveMintedFeeVal); - } - - if (newParams.wantMintedFeeVal) { - params.WantMintedFee = toRatio(newParams.wantMintedFeeVal); - } - - if (newParams.mintLimit) { - params.MintLimit = AmountMath.make(brands.IST, newParams.mintLimit); - } - - const offerSpec = /** @type {const} */ ({ - id: offerId, - invitationSpec: { - source: 'continuing', - previousOffer: charterAcceptOfferId, - invitationMakerName: 'VoteOnParamChange', - }, - proposal: {}, - offerArgs: { - instance: instances[instanceName], - params, - deadline, - }, - }); - - const spendAction = { - method: 'executeOffer', - offer: offerSpec, - }; - - // @ts-expect-error XXX Passable - const offer = JSON.stringify(marshaller.toCapData(harden(spendAction))); - console.log(offerSpec); - console.log(offer); - - return executeOffer(address, offer); -}; - -/** - * - * @param {{ - * committeeAddrs: Array - * position: number | string - * }} VotingDetails - */ -export const voteForNewParams = ({ committeeAddrs, position }) => { - console.log('ACTIONS voting for position', position, 'using', committeeAddrs); - return Promise.all( - committeeAddrs.map(account => - // @ts-expect-error Casting - agops.ec('vote', '--forPosition', position, '--send-from', account), - ), - ); -}; - /** * @param {{follow: (...params: string[]) => Promise }} io */ @@ -204,10 +208,10 @@ export const fetchLatestEcQuestion = async io => { const [latestOutcome, latestQuestion] = await Promise.all([ follow('-lF', pathOutcome, '-o', 'text').then(outcomeRaw => - marshaller.fromCapData(JSON.parse(outcomeRaw)), + marshaller.fromCapData(JSON.parse(/** @type {any} */ (outcomeRaw))), ), follow('-lF', pathQuestion, '-o', 'text').then(questionRaw => - marshaller.fromCapData(JSON.parse(questionRaw)), + marshaller.fromCapData(JSON.parse(/** @type {any} */ (questionRaw))), ), ]); @@ -261,18 +265,74 @@ const checkCommitteeElectionResult = ( export const implementPsmGovParamChange = async (question, voting, io) => { const { now: getNow, follow } = io; const now = getNow(); - const deadline = BigInt( - question.votingDuration * 60 + Math.round(now / 1000), + + // Read current state. + const { address, instanceName, newParams, votingDuration } = question; + const deadline = BigInt(votingDuration * 60 + Math.round(now / 1000)); + const offerId = now.toString(); + const charterAcceptOfferId = await agops.ec( + 'find-continuing-id', + '--for', + `${'charter\\ member\\ invitation'}`, + '--from', + address, ); + console.log( + 'PSM change gov params charterAcceptOfferId', + charterAcceptOfferId, + ); + const { brands, instances } = await snapshotAgoricNames(); + console.log('PSM change gov params BRANDS', Object.keys(brands)); + console.log('PSM change gov params INSTANCES', Object.keys(instances)); - await buildProposePSMParamChangeOffer({ - ...question, - deadline, - offerId: now.toString(), + // Construct and execute the offer. + const params = {}; + if (newParams.giveMintedFeeVal) { + params.GiveMintedFee = toRatio(brands.IST, newParams.giveMintedFeeVal); + } + if (newParams.wantMintedFeeVal) { + params.WantMintedFee = toRatio(brands.IST, newParams.wantMintedFeeVal); + } + if (newParams.mintLimit) { + params.MintLimit = AmountMath.make(brands.IST, newParams.mintLimit); + } + const offerSpec = /** @type {const} */ ({ + id: offerId, + invitationSpec: { + source: 'continuing', + previousOffer: charterAcceptOfferId, + invitationMakerName: 'VoteOnParamChange', + }, + proposal: {}, + offerArgs: { + instance: instances[instanceName], + params, + deadline, + }, }); - await voteForNewParams(voting); - - console.log('ACTIONS wait for the vote deadline to pass'); + const spendAction = { + method: 'executeOffer', + offer: offerSpec, + }; + // @ts-expect-error XXX Passable + const offer = JSON.stringify(marshaller.toCapData(harden(spendAction))); + console.log('PSM change gov params offer', offerSpec, offer); + await executeOffer(address, offer); + + // Vote on the change. + const { committeeAddrs, position } = voting; + console.log( + 'PSM change gov params voting for position', + position, + 'using', + committeeAddrs, + ); + await Promise.all( + committeeAddrs.map(account => + agops.ec('vote', '--forPosition', `${position}`, '--send-from', account), + ), + ); + console.log('PSM change gov params waiting for vote deadline'); await retryUntilCondition( () => fetchLatestEcQuestion({ follow }), electionResult => @@ -411,13 +471,16 @@ export const sendOfferAgd = async (address, offerPromise) => { const offer = await offerPromise; const networkConfig = await getNetworkConfig({ env: process.env, fetch }); const { chainName, rpcAddrs } = networkConfig; - const args = [].concat( - [`--node=${rpcAddrs[0]}`, `--chain-id=${chainName}`], - [`--keyring-backend=test`, `--from=${address}`], - ['tx', 'swingset', 'wallet-action', '--allow-spend', offer], - '--yes', - '-bblock', - '-ojson', + const args = /** @type {string[]} */ ( + // @ts-expect-error heterogeneous concat + [].concat( + [`--node=${rpcAddrs[0]}`, `--chain-id=${chainName}`], + [`--keyring-backend=test`, `--from=${address}`], + ['tx', 'swingset', 'wallet-action', '--allow-spend', offer], + '--yes', + '-bblock', + '-ojson', + ) ); const [settlement] = await Promise.allSettled([ @@ -543,7 +606,7 @@ export const tryISTBalances = async (t, actualBalance, expectedBalance) => { } firstTry.discard(); - t.log('tryISTBalances assuming no batched IST fee', firstTry.errors); + t.log('tryISTBalances assuming no batched IST fee', ...firstTry.errors); // See golang/cosmos/x/swingset/types/default-params.go // and `ChargeBeans` in golang/cosmos/x/swingset/keeper/keeper.go. const minFeeDebit = 200_000; @@ -571,8 +634,8 @@ export const checkSwapSucceeded = async ( getBalances([tradeInfo.trader]), ]); - t.log('METRICS_AFTER', metricsAfter); - t.log('BALANCES_AFTER', balancesAfter); + logRecord('METRICS_AFTER', metricsAfter, t.log); + logRecord('BALANCES_AFTER', balancesAfter, t.log); if ('wantMinted' in tradeInfo) { const anchorPaid = giveAnchor( diff --git a/a3p-integration/proposals/z:acceptance/test-lib/rpc.js b/a3p-integration/proposals/z:acceptance/test-lib/rpc.js index 907072d2376..955f1235477 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/rpc.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/rpc.js @@ -11,15 +11,18 @@ import { Fail } from '@endo/errors'; export { boardSlottingMarshaller }; +/** @type {(val: any) => string} */ export const boardValToSlot = val => { if ('getBoardId' in val) { return val.getBoardId(); } - Fail`unknown obj in boardSlottingMarshaller.valToSlot ${val}`; + throw Fail`unknown obj in boardSlottingMarshaller.valToSlot ${val}`; }; +/** @param {string} agoricNetSubdomain */ export const networkConfigUrl = agoricNetSubdomain => `https://${agoricNetSubdomain}.agoric.net/network-config`; +/** @param {string} agoricNetSubdomain */ export const rpcUrl = agoricNetSubdomain => `https://${agoricNetSubdomain}.rpc.agoric.net:443`; @@ -74,6 +77,7 @@ export const makeVStorage = (powers, config = networkConfig) => { return { url, + /** @param {{ result: { response: { code: number, value: string } } }} rawResponse */ decode({ result: { response } }) { const { code } = response; if (code !== 0) { @@ -155,6 +159,7 @@ export const makeVStorage = (powers, config = networkConfig) => { export const makeFromBoard = () => { const cache = new Map(); + /** @type {(boardId: string, iface?: string) => ReturnType} */ const convertSlotToVal = (boardId, iface) => { if (cache.has(boardId)) { return cache.get(boardId); @@ -211,6 +216,7 @@ harden(storageHelper); * @returns {Promise} */ export const makeAgoricNames = async (ctx, vstorage) => { + /** @type {Record} */ const reverse = {}; const entries = await Promise.all( ['brand', 'instance', 'vbankAsset'].map(async kind => { @@ -221,7 +227,7 @@ export const makeAgoricNames = async (ctx, vstorage) => { const parts = storageHelper.unserializeTxt(content, ctx).at(-1); for (const [name, remote] of parts) { if ('getBoardId' in remote) { - reverse[remote.getBoardId()] = name; + reverse[/** @type {string} */ (remote.getBoardId())] = name; } } return [kind, Object.fromEntries(parts)]; diff --git a/a3p-integration/proposals/z:acceptance/test-lib/utils.js b/a3p-integration/proposals/z:acceptance/test-lib/utils.js index 69b67992f7c..330fb799c6d 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/utils.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/utils.js @@ -77,10 +77,12 @@ export const makeTimerUtils = ({ setTimeout }) => { */ const delay = ms => new Promise(resolve => setTimeout(() => resolve(), ms)); - /** @param {number} timestamp */ - const waitUntil = async timestamp => { - const timeDelta = Math.floor(Date.now() / 1000) - Number(timestamp); - await delay(timeDelta); + /** @param {number | bigint} secondsSinceEpoch */ + const waitUntil = async secondsSinceEpoch => { + await null; + const waitMs = Number(secondsSinceEpoch) * 1000 - Date.now(); + if (waitMs <= 0) return; + await delay(waitMs); }; return { diff --git a/a3p-integration/proposals/z:acceptance/test-lib/vaults.js b/a3p-integration/proposals/z:acceptance/test-lib/vaults.js index af37b718b4a..88a07564ca9 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/vaults.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/vaults.js @@ -98,6 +98,9 @@ export const getMinInitialDebt = async () => { */ export const calculateMintFee = async (toMintValue, vaultManager) => { const { brand } = await E.get(vstorageKitP).agoricNames; + /** @type {import('@agoric/ertp').Brand} */ + // @ts-expect-error let this BoardRemote masquerade as a Brand + const ISTBrand = brand.IST; const governancePath = `published.vaultFactory.managers.${vaultManager}.governance`; const governance = await getContractInfo(governancePath, { @@ -110,13 +113,12 @@ export const calculateMintFee = async (toMintValue, vaultManager) => { const mintFeeRatio = makeRatio( numerator.value, - brand.IST, + ISTBrand, denominator.value, - brand.IST, + ISTBrand, ); - // @ts-expect-error XXX BoardRemote not Brand - const toMintAmount = AmountMath.make(brand.IST, toMintValue * 1_000_000n); + const toMintAmount = AmountMath.make(ISTBrand, toMintValue * 1_000_000n); const expectedMintFee = ceilMultiplyBy(toMintAmount, mintFeeRatio); const adjustedToMintAmount = AmountMath.add(toMintAmount, expectedMintFee); @@ -164,6 +166,7 @@ const paramChangeOfferGeneration = async ( const voteDurSec = BigInt(voteDur); const debtLimitValue = BigInt(debtLimit) * ISTunit; + /** @type {(ms: number) => bigint} */ const toSec = ms => BigInt(Math.round(ms / 1000)); const id = `propose-${Date.now()}`; @@ -199,6 +202,7 @@ const paramChangeOfferGeneration = async ( }, }; + // @ts-expect-error tolerate BoardRemote instances with getBoardId methods return JSON.stringify(marshaller.toCapData(harden(body))); }; @@ -206,7 +210,7 @@ const paramChangeOfferGeneration = async ( * * @param {string} address * @param {*} debtLimit - * @returns + * @returns {Promise} */ export const proposeNewDebtCeiling = async (address, debtLimit) => { const charterAcceptOfferId = await agops.ec( diff --git a/a3p-integration/proposals/z:acceptance/test-lib/wallet.js b/a3p-integration/proposals/z:acceptance/test-lib/wallet.js index 04fcb8f9ccc..11813654bbc 100644 --- a/a3p-integration/proposals/z:acceptance/test-lib/wallet.js +++ b/a3p-integration/proposals/z:acceptance/test-lib/wallet.js @@ -17,7 +17,7 @@ import { makeTimerUtils } from './utils.js'; * fees?: string, * verbose?: boolean, * keyring?: {home?: string, backend: string}, - * stdout: Pick, + * stdout?: Pick, * execFileSync: typeof import('child_process').execFileSync, * delay: (ms: number) => Promise, * dryRun?: boolean, @@ -25,6 +25,7 @@ import { makeTimerUtils } from './utils.js'; */ export const sendAction = async (bridgeAction, opts) => { const { marshaller } = opts; + // @ts-expect-error BridgeAction has methods disallowed by Passable const offerBody = JSON.stringify(marshaller.toCapData(harden(bridgeAction))); // tryExit should not require --allow-spend @@ -80,6 +81,7 @@ export const makeAgdWalletUtils = async ( delay, execFileSync, from, + // @ts-expect-error version skew in @endo/marshal and/or @endo/pass-style marshaller, keyring: { backend: 'test' }, }); diff --git a/a3p-integration/proposals/z:acceptance/tsconfig.json b/a3p-integration/proposals/z:acceptance/tsconfig.json index dbebe7a229e..fb5b67a7598 100644 --- a/a3p-integration/proposals/z:acceptance/tsconfig.json +++ b/a3p-integration/proposals/z:acceptance/tsconfig.json @@ -2,15 +2,15 @@ "compilerOptions": { "noEmit": true, "target": "esnext", - "module": "NodeNext", - "moduleResolution": "NodeNext", + "module": "esnext", + "moduleResolution": "bundler", "allowJs": true, "checkJs": true, "strict": false, "strictNullChecks": true, "noImplicitThis": true, - "noImplicitAny": true, // XXX synthetic-chain has some errors "skipLibCheck": true - } + }, + "exclude": ["restart-valueVow", "start-valueVow", "localchaintest-submission"] } diff --git a/a3p-integration/proposals/z:acceptance/valueVow.test.js b/a3p-integration/proposals/z:acceptance/valueVow.test.js index 738c8a30bae..7e62e16420d 100644 --- a/a3p-integration/proposals/z:acceptance/valueVow.test.js +++ b/a3p-integration/proposals/z:acceptance/valueVow.test.js @@ -36,13 +36,19 @@ test('vow survives restart', async t => { t.log('confirm the value is not in offer results'); let getterStatus = await retryUntilCondition( + /** @type {() => Promise} */ async () => walletUtils.readLatestHead(`published.wallet.${GETTER}`), value => value.status.id === 'get-value' && value.updated === 'offerStatus', 'Offer get-value not succeeded', - { log: t.log, setTimeout, retryIntervalMs: 5000, maxRetries: 15 }, + { + retryIntervalMs: 5000, + maxRetries: 15, + renderResult: status => inspect(status, { depth: 10 }), + log: t.log, + setTimeout, + }, ); - console.log('current: ', inspect(getterStatus, { depth: 10 })); t.like(getterStatus, { status: { id: 'get-value', diff --git a/a3p-integration/proposals/z:acceptance/vaults.test.js b/a3p-integration/proposals/z:acceptance/vaults.test.js index 42d8a5b0157..7f3b818549d 100644 --- a/a3p-integration/proposals/z:acceptance/vaults.test.js +++ b/a3p-integration/proposals/z:acceptance/vaults.test.js @@ -34,6 +34,7 @@ import { const VAULT_MANAGER = 'manager0'; +/** @type {(x: number) => number} */ const scale6 = x => x * 1_000_000; // TODO produce this dynamically from an Offers object exported from a package clientSupport diff --git a/a3p-integration/proposals/z:acceptance/wallet.test.js b/a3p-integration/proposals/z:acceptance/wallet.test.js index 2ae1a0bd275..9a2e18d1395 100644 --- a/a3p-integration/proposals/z:acceptance/wallet.test.js +++ b/a3p-integration/proposals/z:acceptance/wallet.test.js @@ -15,6 +15,11 @@ import { execFileSync } from 'node:child_process'; import { agdWalletUtils } from './test-lib/index.js'; import { getBalances, replaceTemplateValuesInFile } from './test-lib/utils.js'; +/** + * @param {string} file + * @param {string[]} args + * @param {Parameters[2]} [opts] + */ const showAndExec = (file, args, opts) => { console.log('$', file, ...args); return execFileSync(file, args, opts); @@ -52,8 +57,10 @@ test.serial(`send invitation via namesByAddress`, async t => { ); }); -test.serial('exitOffer tool reclaims stuck payment', async t => { +// FIXME https://github.com/Agoric/agoric-sdk/issues/10565 +test.skip('exitOffer tool reclaims stuck payment', async t => { const istBalanceBefore = await getBalances([GOV1ADDR], 'uist'); + t.log('istBalanceBefore', istBalanceBefore); const offerId = 'bad-invitation-15'; // offer submitted on proposal upgrade-15 with an incorrect method name await agdWalletUtils.broadcastBridgeAction(GOV1ADDR, { @@ -68,6 +75,8 @@ test.serial('exitOffer tool reclaims stuck payment', async t => { { log: t.log, setTimeout, retryIntervalMs: 5000, maxRetries: 15 }, ); + t.log('istBalanceAfter', istBalanceAfter); + t.true( istBalanceAfter > istBalanceBefore, 'The IST balance should increase after reclaiming the stuck payment', @@ -126,6 +135,7 @@ test.serial(`ante handler sends fee only to vbank/reserve`, async t => { // The reserve balances should have increased by exactly the fee (possibly // from zero, in which case start balances wouldn't include its denomination). const feeDenomIndex = vbankReserveStartBalances.findIndex( + /** @param {{ denom: string }} balance */ ({ denom }) => denom === feeDenom, ); const preFeeAmount = diff --git a/a3p-integration/proposals/z:acceptance/yarn.lock b/a3p-integration/proposals/z:acceptance/yarn.lock index 744dce4afda..92dc8a54bfe 100644 --- a/a3p-integration/proposals/z:acceptance/yarn.lock +++ b/a3p-integration/proposals/z:acceptance/yarn.lock @@ -31,12 +31,12 @@ __metadata: resolution: "@agoric/base-zone@portal:../../agoric-sdk/packages/base-zone::locator=root-workspace-0b6124%40workspace%3A." dependencies: "@agoric/store": "npm:^0.9.2" - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/exo": "npm:^1.5.6" - "@endo/far": "npm:^1.1.8" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" languageName: node linkType: soft @@ -48,8 +48,8 @@ __metadata: "@agoric/notifier": "npm:^0.6.2" "@agoric/store": "npm:^0.9.2" "@agoric/vat-data": "npm:^0.5.2" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" languageName: node linkType: soft @@ -64,12 +64,12 @@ __metadata: "@cosmjs/proto-signing": "npm:^0.32.3" "@cosmjs/stargate": "npm:^0.32.3" "@cosmjs/tendermint-rpc": "npm:^0.32.3" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/init": "npm:^1.1.6" - "@endo/lockdown": "npm:^1.0.12" - "@endo/marshal": "npm:^1.6.1" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/lockdown": "npm:^1.0.13" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -84,12 +84,12 @@ __metadata: "@agoric/vats": "npm:^0.15.1" "@cosmjs/stargate": "npm:^0.32.3" "@cosmjs/tendermint-rpc": "npm:^0.32.3" - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/marshal": "npm:^1.6.1" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -97,8 +97,8 @@ __metadata: version: 0.0.0-use.local resolution: "@agoric/cosmic-proto@portal:../../agoric-sdk/packages/cosmic-proto::locator=root-workspace-0b6124%40workspace%3A." dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/init": "npm:^1.1.6" + "@endo/base64": "npm:^1.0.9" + "@endo/init": "npm:^1.1.7" languageName: node linkType: soft @@ -110,13 +110,13 @@ __metadata: "@agoric/store": "npm:^0.9.2" "@agoric/vat-data": "npm:^0.5.2" "@agoric/zone": "npm:^0.2.2" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -131,14 +131,14 @@ __metadata: "@agoric/time": "npm:^0.3.2" "@agoric/vat-data": "npm:^0.5.2" "@agoric/zoe": "npm:^0.26.2" - "@endo/bundle-source": "npm:^3.4.2" - "@endo/captp": "npm:^4.4.2" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" import-meta-resolve: "npm:^2.2.1" languageName: node linkType: soft @@ -156,13 +156,13 @@ __metadata: "@agoric/vat-data": "npm:^0.5.2" "@agoric/vats": "npm:^0.15.1" "@agoric/zoe": "npm:^0.26.2" - "@endo/captp": "npm:^4.4.2" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/captp": "npm:^4.4.3" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" jessie.js: "npm:^0.3.4" languageName: node linkType: soft @@ -172,15 +172,15 @@ __metadata: resolution: "@agoric/internal@portal:../../agoric-sdk/packages/internal::locator=root-workspace-0b6124%40workspace%3A." dependencies: "@agoric/base-zone": "npm:^0.1.0" - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/init": "npm:^1.1.6" - "@endo/marshal": "npm:^1.6.1" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" - "@endo/stream": "npm:^1.2.7" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/stream": "npm:^1.2.8" anylogger: "npm:^0.21.0" jessie.js: "npm:^0.3.4" languageName: node @@ -190,9 +190,9 @@ __metadata: version: 0.0.0-use.local resolution: "@agoric/kmarshal@portal:../../agoric-sdk/packages/kmarshal::locator=root-workspace-0b6124%40workspace%3A." dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" languageName: node linkType: soft @@ -203,12 +203,12 @@ __metadata: "@agoric/internal": "npm:^0.3.2" "@agoric/store": "npm:^0.9.2" "@agoric/vat-data": "npm:^0.5.2" - "@endo/base64": "npm:^1.0.8" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/base64": "npm:^1.0.9" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -218,11 +218,11 @@ __metadata: dependencies: "@agoric/internal": "npm:^0.3.2" "@agoric/vat-data": "npm:^0.5.2" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -239,12 +239,12 @@ __metadata: "@agoric/vow": "npm:^0.1.0" "@agoric/zoe": "npm:^0.26.2" "@agoric/zone": "npm:^0.2.2" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -252,11 +252,11 @@ __metadata: version: 0.0.0-use.local resolution: "@agoric/store@portal:../../agoric-sdk/packages/store::locator=root-workspace-0b6124%40workspace%3A." dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/exo": "npm:^1.5.6" - "@endo/marshal": "npm:^1.6.1" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" languageName: node linkType: soft @@ -265,11 +265,11 @@ __metadata: resolution: "@agoric/swing-store@portal:../../agoric-sdk/packages/swing-store::locator=root-workspace-0b6124%40workspace%3A." dependencies: "@agoric/internal": "npm:^0.3.2" - "@endo/base64": "npm:^1.0.8" - "@endo/bundle-source": "npm:^3.4.2" - "@endo/check-bundle": "npm:^1.0.11" - "@endo/errors": "npm:^1.2.7" - "@endo/nat": "npm:^5.0.12" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" better-sqlite3: "npm:^9.1.1" languageName: node linkType: soft @@ -280,17 +280,17 @@ __metadata: dependencies: "@agoric/internal": "npm:^0.3.2" "@agoric/store": "npm:^0.9.2" - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/exo": "npm:^1.5.6" - "@endo/far": "npm:^1.1.8" - "@endo/init": "npm:^1.1.6" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -307,24 +307,24 @@ __metadata: "@agoric/time": "npm:^0.3.2" "@agoric/vat-data": "npm:^0.5.2" "@agoric/xsnap-lockdown": "npm:^0.14.0" - "@endo/base64": "npm:^1.0.8" - "@endo/bundle-source": "npm:^3.4.2" - "@endo/captp": "npm:^4.4.2" - "@endo/check-bundle": "npm:^1.0.11" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/import-bundle": "npm:^1.3.1" - "@endo/init": "npm:^1.1.6" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" - "@endo/ses-ava": "npm:^1.2.7" - "@endo/stream": "npm:^1.2.7" - "@endo/zip": "npm:^1.0.8" + "@endo/base64": "npm:^1.0.9" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/check-bundle": "npm:^1.0.12" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/ses-ava": "npm:^1.2.8" + "@endo/stream": "npm:^1.2.8" + "@endo/zip": "npm:^1.0.9" ansi-styles: "npm:^6.2.1" anylogger: "npm:^0.21.0" better-sqlite3: "npm:^9.1.1" @@ -347,9 +347,9 @@ __metadata: languageName: node linkType: soft -"@agoric/synthetic-chain@npm:^0.3.0": - version: 0.3.0 - resolution: "@agoric/synthetic-chain@npm:0.3.0" +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" dependencies: "@endo/zip": "npm:^1.0.7" better-sqlite3: "npm:^9.6.0" @@ -358,7 +358,7 @@ __metadata: execa: "npm:^9.3.1" bin: synthetic-chain: dist/cli/cli.js - checksum: 10c0/17c6241bdc48b8a2a7608c9d4d7c0a0c76fb10d4ee44a31a1150104a792bcd1133f4b1a7e8ab26673a07450b3ceabccd9911999117568221b49221b6ee4306a1 + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b languageName: node linkType: hard @@ -367,9 +367,9 @@ __metadata: resolution: "@agoric/time@portal:../../agoric-sdk/packages/time::locator=root-workspace-0b6124%40workspace%3A." dependencies: "@agoric/store": "npm:^0.9.2" - "@endo/errors": "npm:^1.2.7" - "@endo/nat": "npm:^5.0.12" - "@endo/patterns": "npm:^1.4.6" + "@endo/errors": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" languageName: node linkType: soft @@ -380,9 +380,9 @@ __metadata: "@agoric/base-zone": "npm:^0.1.0" "@agoric/store": "npm:^0.9.2" "@agoric/swingset-liveslots": "npm:^0.10.2" - "@endo/errors": "npm:^1.2.7" - "@endo/exo": "npm:^1.5.6" - "@endo/patterns": "npm:^1.4.6" + "@endo/errors": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/patterns": "npm:^1.4.7" languageName: node linkType: soft @@ -403,14 +403,14 @@ __metadata: "@agoric/vow": "npm:^0.1.0" "@agoric/zoe": "npm:^0.26.2" "@agoric/zone": "npm:^0.2.2" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/import-bundle": "npm:^1.3.1" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" import-meta-resolve: "npm:^2.2.1" jessie.js: "npm:^0.3.4" languageName: node @@ -422,12 +422,12 @@ __metadata: dependencies: "@agoric/base-zone": "npm:^0.1.0" "@agoric/internal": "npm:^0.3.2" - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" languageName: node linkType: soft @@ -452,19 +452,19 @@ __metadata: "@agoric/vat-data": "npm:^0.5.2" "@agoric/vow": "npm:^0.1.0" "@agoric/zone": "npm:^0.2.2" - "@endo/bundle-source": "npm:^3.4.2" - "@endo/captp": "npm:^4.4.2" - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/exo": "npm:^1.5.6" - "@endo/far": "npm:^1.1.8" - "@endo/import-bundle": "npm:^1.3.1" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/exo": "npm:^1.5.7" + "@endo/far": "npm:^1.1.9" + "@endo/import-bundle": "npm:^1.3.2" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" yargs-parser: "npm:^21.1.1" languageName: node linkType: soft @@ -475,9 +475,9 @@ __metadata: dependencies: "@agoric/base-zone": "npm:^0.1.0" "@agoric/vat-data": "npm:^0.5.2" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/pass-style": "npm:^1.4.6" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" languageName: node linkType: soft @@ -788,297 +788,298 @@ __metadata: languageName: node linkType: hard -"@endo/base64@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/base64@npm:1.0.8" - checksum: 10c0/3501efbf866acc25b9ad0912ec2383e3b976c890a18dc67b5c6eb128433708db69e8ed1cc57190305266bdcbd132659aa87edfc6d02a9886b711e8b86adc21c0 +"@endo/base64@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/base64@npm:1.0.9" + checksum: 10c0/63e487cf59b50a080fab389a8ab24d66264910ecf375dc19677c2ee7421d92a4be9c85e435b216b4adc9983384073a7eb753223f85ba77aec8d9fd3e0c1fe090 languageName: node linkType: hard -"@endo/bundle-source@npm:^3.4.2": - version: 3.4.2 - resolution: "@endo/bundle-source@npm:3.4.2" - dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/evasive-transform": "npm:^1.3.2" - "@endo/init": "npm:^1.1.6" - "@endo/promise-kit": "npm:^1.1.7" - "@endo/where": "npm:^1.0.8" +"@endo/bundle-source@npm:^3.5.0": + version: 3.5.0 + resolution: "@endo/bundle-source@npm:3.5.0" + dependencies: + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/evasive-transform": "npm:^1.3.3" + "@endo/init": "npm:^1.1.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/where": "npm:^1.0.9" "@rollup/plugin-commonjs": "npm:^19.0.0" "@rollup/plugin-json": "npm:^6.1.0" "@rollup/plugin-node-resolve": "npm:^13.0.0" acorn: "npm:^8.2.4" rollup: "npm:^2.79.1" + ts-blank-space: "npm:^0.4.1" bin: bundle-source: ./src/tool.js - checksum: 10c0/a8bf7f28cb56f6d97e818dd62176a30e2f306ff6bc2eeae277b950a76fe846053396a1326cc16c2ce780beeced3fa6baac2cf7f902ea6e4b93374fb2b30eab4d + checksum: 10c0/7f97194c97eb28abbde6655f7de4410d5aae5d6a2a3d712e1418b9b4fd20823333b7fe8956401c2f201280340731e51e28d9c4fbe3b5a787b0abd00e3ac13b52 languageName: node linkType: hard -"@endo/captp@npm:^4.4.2": - version: 4.4.2 - resolution: "@endo/captp@npm:4.4.2" +"@endo/captp@npm:^4.4.3": + version: 4.4.3 + resolution: "@endo/captp@npm:4.4.3" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/0ccb640faccce1ee66ecb4920c73f9541bc1dd3c207fccdf9f2938efd49aad476831985fca22eb26e25b0c918a913654a588d41f361f4962e0b8aac293f53265 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/0647dd6acc39c7a54a42d9f168861d11dc28248321be72529dd8574b52989957be8f7a5ec9985fc76a24b37cd6b6d190e5bfbbc1481594e367c8517c31fce0e2 languageName: node linkType: hard -"@endo/check-bundle@npm:^1.0.11": - version: 1.0.11 - resolution: "@endo/check-bundle@npm:1.0.11" +"@endo/check-bundle@npm:^1.0.12": + version: 1.0.12 + resolution: "@endo/check-bundle@npm:1.0.12" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/errors": "npm:^1.2.7" - checksum: 10c0/b84824211b09f112af1826a23586aa2ee7d26904260c51f5a2a3b3c322def8d13251e1e6921be8896f25a98d52309a124c4b58e7cf09e5c04b9ddf77df024209 + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + checksum: 10c0/73e146d9d4d5ee23936b0df368e51ebb3658eecc5efe308a1894f70339502e6de8fa065185e8518d1445bf8fbc4c5fae54fc7dab8794f02397f6694a7ab9af9c languageName: node linkType: hard -"@endo/cjs-module-analyzer@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/cjs-module-analyzer@npm:1.0.8" - checksum: 10c0/937ba9327f93e5288e7693d62462d4fd1d038d11aef07b83df829c37c5747e66707d185dc679707db9f38f88a1fe0cc06e649c620936e33719587ea51b81ab14 +"@endo/cjs-module-analyzer@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/cjs-module-analyzer@npm:1.0.9" + checksum: 10c0/cb8c56d108b175f2f211c8292bac6cda35c44b9c16fb2763ab9a32b545895e1721633938b440bfe7a06f69e1f168e9b248ef103631a1d4c63fda8cbe580ca185 languageName: node linkType: hard -"@endo/common@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/common@npm:1.2.7" +"@endo/common@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/common@npm:1.2.8" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/2bd25ffc528afd6308b6168650583977139c64e56547b3ea2fee313e01650fb1a041d7b7ce54c6bb70f26c9e78345db2a50fbe3ebccabe9a5c5696eda2cca706 + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/c9465721095d9f06278b6550909a02c330c7a69223f11aff29759067586d41b86054127639fa2c2c0345d0d0aa43518e5b72d5c547b67bfe8e802cd21756d87b languageName: node linkType: hard -"@endo/compartment-mapper@npm:^1.3.1": - version: 1.3.1 - resolution: "@endo/compartment-mapper@npm:1.3.1" +"@endo/compartment-mapper@npm:^1.4.0": + version: 1.4.0 + resolution: "@endo/compartment-mapper@npm:1.4.0" dependencies: - "@endo/cjs-module-analyzer": "npm:^1.0.8" - "@endo/module-source": "npm:^1.1.1" - "@endo/trampoline": "npm:^1.0.2" - "@endo/zip": "npm:^1.0.8" - ses: "npm:^1.9.1" - checksum: 10c0/abe24aaf88d1668b2b15a4c7f0564fc311f6593f5db040af36e96c14ea3e5c10499cc82b95070167a0fe5e94a2b5f82f6605e1a8bfd50fe4e934b50eab327a37 + "@endo/cjs-module-analyzer": "npm:^1.0.9" + "@endo/module-source": "npm:^1.1.2" + "@endo/trampoline": "npm:^1.0.3" + "@endo/zip": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/2c4999962016f57c0f3a40ce1445a064b826eb101a972d26ba56d9dba6d3d8f66744912e3f7e24754018bd2c633663a00ea5ab0d7658c4907c9372ddd3e56464 languageName: node linkType: hard -"@endo/env-options@npm:^1.1.7": - version: 1.1.7 - resolution: "@endo/env-options@npm:1.1.7" - checksum: 10c0/5784bd68790041b08d9ead4f6c29cc7871d2e554c23fc44fff38cb20b6b4e55cdba2f78d844ba5ad4b0818185c32475ff318c1b77890d628690d7c7a6ede9475 +"@endo/env-options@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/env-options@npm:1.1.8" + checksum: 10c0/2f519f48a5b966dbd9e66134d4abc89ff02b9791d21146b49031ceb694584f3f41c6119125b6bb4eb0d347f5bcd846473b5f3c4ae6bae3dac19402fcaf522520 languageName: node linkType: hard -"@endo/errors@npm:^1.2.2, @endo/errors@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/errors@npm:1.2.7" +"@endo/errors@npm:^1.2.7, @endo/errors@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/errors@npm:1.2.8" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/17eed5d01dd968d8e266db37ac44e76859d14894a2b70457d120f2f05021819671aaf1bdf7dc7c2506b84f6df616402e029695d62309fbdbdd13ed4ba34890dd + ses: "npm:^1.10.0" + checksum: 10c0/3f33fc7119ab840ad0f5bdfb70e73cc99630f09593c31928e30de4d9c8e898c85397c5170964d54c819a757a74d3b005f6275480ff8d0f1aa2aa8ef872852e97 languageName: node linkType: hard -"@endo/evasive-transform@npm:^1.3.2": - version: 1.3.2 - resolution: "@endo/evasive-transform@npm:1.3.2" +"@endo/evasive-transform@npm:^1.3.3": + version: 1.3.3 + resolution: "@endo/evasive-transform@npm:1.3.3" dependencies: "@agoric/babel-generator": "npm:^7.17.6" "@babel/parser": "npm:^7.23.6" "@babel/traverse": "npm:^7.23.6" source-map-js: "npm:^1.2.0" - checksum: 10c0/f3a404339c0c6e49f7534ecd7ebd24cb759d7238035c0ba6b78ed0ed2c7024c7db1c00a33f839fabf81f4c9a97cd5e2f86a559e97be8460921bc739cd33f5eb7 + checksum: 10c0/34fae4789ab3142ab73a5c94a46954908737bbc72f1e302c338941ca2556ab2127505ecee57a1c0d11e0b9c7070b4a579ce4e7e60585990161cec64ce0955211 languageName: node linkType: hard -"@endo/eventual-send@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/eventual-send@npm:1.2.7" +"@endo/eventual-send@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/eventual-send@npm:1.2.8" dependencies: - "@endo/env-options": "npm:^1.1.7" - checksum: 10c0/4a483169bcd9ead47a7a07d3f69bdebdc0d1e2a3198f35ad422b82c1646b64528234bdddc9e0544ac38c2ede84a50af1e126eb4086aa8b4ae4b0002895b55e86 + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/d7c16c935441b67d029fcb6785f425a1194fb7f936e4b20dde21eb393266cb7366edf7a95d3fdfa96cd4a3246a3659a06d0dbb3c1217045e1718e1cf34c7a3bd languageName: node linkType: hard -"@endo/exo@npm:^1.5.6": - version: 1.5.6 - resolution: "@endo/exo@npm:1.5.6" +"@endo/exo@npm:^1.5.7": + version: 1.5.7 + resolution: "@endo/exo@npm:1.5.7" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/pass-style": "npm:^1.4.6" - "@endo/patterns": "npm:^1.4.6" - checksum: 10c0/280fe019ec6006f5649b40093453c4ecaa71dfdcbb9767efc9f0ed4fc23081b120818c4a12896e8ec2221444889031736b569229117834048d596ecb09a44057 + "@endo/common": "npm:^1.2.8" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/pass-style": "npm:^1.4.7" + "@endo/patterns": "npm:^1.4.7" + checksum: 10c0/0193de0606a7f07f207f3dd8bb71ec6be0acfb0ff5ef570f03cbbcaed888db68e451082c34764de8ee301f8d2d175e6c5a5405e76367c27151d644536bdf57a4 languageName: node linkType: hard -"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.5, @endo/far@npm:^1.1.8": - version: 1.1.8 - resolution: "@endo/far@npm:1.1.8" +"@endo/far@npm:^1.0.0, @endo/far@npm:^1.1.8, @endo/far@npm:^1.1.9": + version: 1.1.9 + resolution: "@endo/far@npm:1.1.9" dependencies: - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/pass-style": "npm:^1.4.6" - checksum: 10c0/efb0f063e7a19fd67fe150e0a018a9e4b2abd5238b3c3d136830732aa3294bdb829c1a920607360c285eb6e3a3ae5337b6a1e9847cfcf5618247431af02c5a1e + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/pass-style": "npm:^1.4.7" + checksum: 10c0/e0d95743c25183b961aa1f11dd81c067739fd2fb3deeab58520e949961eacba9ed109bb01b9ed820d596e8a043b6721d650d9624abf0263296cca647e7286a2e languageName: node linkType: hard -"@endo/import-bundle@npm:^1.3.1": - version: 1.3.1 - resolution: "@endo/import-bundle@npm:1.3.1" +"@endo/import-bundle@npm:^1.3.2": + version: 1.3.2 + resolution: "@endo/import-bundle@npm:1.3.2" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/errors": "npm:^1.2.7" - "@endo/where": "npm:^1.0.8" - ses: "npm:^1.9.1" - checksum: 10c0/e4fc284d12999ec0e0c4922cd31452d7ff3ead67522d6716b87d818547377ca3724d9a375fecf59a817c0d09ddc5d98b01fbc146dcb7224906c323358bcb9f84 + "@endo/base64": "npm:^1.0.9" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/errors": "npm:^1.2.8" + "@endo/where": "npm:^1.0.9" + ses: "npm:^1.10.0" + checksum: 10c0/cc38bb7858c4b3a3d1cfbf70b0af3b05b527019452eb922313b4adf87e5590f5cacf4ff5dbd7a44c172d3c220de41edc3fa8895551f76071c85f1450ff94b09a languageName: node linkType: hard -"@endo/init@npm:^1.1.4, @endo/init@npm:^1.1.6": - version: 1.1.6 - resolution: "@endo/init@npm:1.1.6" +"@endo/init@npm:^1.1.6, @endo/init@npm:^1.1.7": + version: 1.1.7 + resolution: "@endo/init@npm:1.1.7" dependencies: - "@endo/base64": "npm:^1.0.8" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/lockdown": "npm:^1.0.12" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/1885429e475c780bb5b7ff0fd4fcd5d76bc3a5cb1c3c2f9f2dfc06152ff1c8c3be512b6760483c8c18598e1977129cb3dd766a32c9f6efb19d70b54a1844c683 + "@endo/base64": "npm:^1.0.9" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/lockdown": "npm:^1.0.13" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/6cfcc244f02da9883f65a8f34da9483a628d5350192983c53d5116b12403dc5693145c6349b6c3ca381b6b8d9590cee16f90440dc0e2da5f525e13079d6c9a2f languageName: node linkType: hard -"@endo/lockdown@npm:^1.0.12": - version: 1.0.12 - resolution: "@endo/lockdown@npm:1.0.12" +"@endo/lockdown@npm:^1.0.13": + version: 1.0.13 + resolution: "@endo/lockdown@npm:1.0.13" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/0b9d36f359ffe8eadd1e799aa0340ccb0680d48c9b6249c380c27724824c4d875dada9fbec096fb4e2ac76b32c7536955524d3eb6579451a618707602fb958f4 + ses: "npm:^1.10.0" + checksum: 10c0/9df04cc477595b368088a1d445f2241d8a152cb4dcf6a79d39d4804594dd8ff472380ab2bdf262adeb5b4b7cfc73effb6cc716c5a3aeca282801d57fe8a018a0 languageName: node linkType: hard -"@endo/marshal@npm:^1.5.3, @endo/marshal@npm:^1.6.1": - version: 1.6.1 - resolution: "@endo/marshal@npm:1.6.1" +"@endo/marshal@npm:^1.6.1, @endo/marshal@npm:^1.6.2": + version: 1.6.2 + resolution: "@endo/marshal@npm:1.6.2" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/nat": "npm:^5.0.12" - "@endo/pass-style": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/e64983abccd833b2a7eb63547e8c5a629f073d3e422229475d470ace95c2640a89e9a9879c46e8389cca8c9e75823ea1c27e27cbeeb8c1c4005146b2c530c530 + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/nat": "npm:^5.0.13" + "@endo/pass-style": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/bdb634a77c2147c1359792531822aabe642a5e4d39f496dd57bb97367617a2f2d72edaaa50c51ed6a2ec1f2c08deab6a571c3dd8ffa260d441d25f53606902b1 languageName: node linkType: hard -"@endo/module-source@npm:^1.1.1": - version: 1.1.1 - resolution: "@endo/module-source@npm:1.1.1" +"@endo/module-source@npm:^1.1.2": + version: 1.1.2 + resolution: "@endo/module-source@npm:1.1.2" dependencies: "@agoric/babel-generator": "npm:^7.17.6" "@babel/parser": "npm:^7.23.6" "@babel/traverse": "npm:^7.23.6" "@babel/types": "npm:^7.24.0" - ses: "npm:^1.9.1" - checksum: 10c0/2c2184e04e16ed57080cf1c63e17168b101c6e4289816dbc532b199a1c74e0de06cafa21c6c6e0e6e73819ce0d859fdbcbaf0f0af087b3f01774ff198062fc03 + ses: "npm:^1.10.0" + checksum: 10c0/3d64ff5430f288531a00e124ae0620e137dab0fdaba00f2d41066b8307eb2da30e3987d84fe450d55d844e0f96feafa36a825cecc615c05d96224a209832c95c languageName: node linkType: hard -"@endo/nat@npm:^5.0.12": - version: 5.0.12 - resolution: "@endo/nat@npm:5.0.12" - checksum: 10c0/deb792b6a0c9fe9c0e7cf74cc725d8bc36934571f4f06ac3b6def2a0622ac79b0278753c574f9b55a88b063d1186fd6971bbe63326077a7d37982c4c37a1a24c +"@endo/nat@npm:^5.0.13": + version: 5.0.13 + resolution: "@endo/nat@npm:5.0.13" + checksum: 10c0/78578de4567c9bc4c6f50638c688886c07c38177a8d44192230d344221da06ccffc6d9ef8d423e27198d864ed7c57ef5ced9b1d05922eaa4e40bf82856b1aa11 languageName: node linkType: hard -"@endo/pass-style@npm:^1.4.6": - version: 1.4.6 - resolution: "@endo/pass-style@npm:1.4.6" +"@endo/pass-style@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/pass-style@npm:1.4.7" dependencies: - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" "@fast-check/ava": "npm:^1.1.5" - checksum: 10c0/fec9d21bb4c70314e92c72f7ae41ec147ac839a23d54f613d689b84f81206e49e657f3fb414db454cbd6ab67dd2a319b1ae25c42b3a1c881edd5de120496b8b4 + checksum: 10c0/ee30e011fb08c292718a315f2ebd5ee2da6d918bf2cdaf2b269e123207c642fa1525493c41180db8c941e1a1959369730114b116656c99e8bb107ca5917f3f4e languageName: node linkType: hard -"@endo/patterns@npm:^1.4.6": - version: 1.4.6 - resolution: "@endo/patterns@npm:1.4.6" +"@endo/patterns@npm:^1.4.7": + version: 1.4.7 + resolution: "@endo/patterns@npm:1.4.7" dependencies: - "@endo/common": "npm:^1.2.7" - "@endo/errors": "npm:^1.2.7" - "@endo/eventual-send": "npm:^1.2.7" - "@endo/marshal": "npm:^1.6.1" - "@endo/promise-kit": "npm:^1.1.7" - checksum: 10c0/518cf4f88ff6aaf6c9df01fbe9f63570aaace763f2a169f986145b039cbd872802154b21736f751fc4cce497d3380aa6be41d2d51e169c8e63a1edb1751d1808 + "@endo/common": "npm:^1.2.8" + "@endo/errors": "npm:^1.2.8" + "@endo/eventual-send": "npm:^1.2.8" + "@endo/marshal": "npm:^1.6.2" + "@endo/promise-kit": "npm:^1.1.8" + checksum: 10c0/358720438a019847406dfad9f23fc9b565c955ffd86d75693cea994c492dd46efaf189502f04b04f8870e6d50ffcb44ffa1e1dd3a0d6b2dfbbe57edeb994b83b languageName: node linkType: hard -"@endo/promise-kit@npm:^1.1.7": - version: 1.1.7 - resolution: "@endo/promise-kit@npm:1.1.7" +"@endo/promise-kit@npm:^1.1.8": + version: 1.1.8 + resolution: "@endo/promise-kit@npm:1.1.8" dependencies: - ses: "npm:^1.9.1" - checksum: 10c0/98a8d743c437f106f266871874acd811c0e028fc89553738bbd46a0fea5871b9ba7ef0449ec38e7e3768fc21684993ecdbbd06f5f3429cd69fbe4b867d4c2bd5 + ses: "npm:^1.10.0" + checksum: 10c0/3a51755822bd4112474bec584005b81f9ffe6a6b590faa16cff7a4994010d001d6d190f58a1e890d85b0feb0eb052d79ed2c5ed88977afb0e47ca53b6b199196 languageName: node linkType: hard -"@endo/ses-ava@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/ses-ava@npm:1.2.7" +"@endo/ses-ava@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/ses-ava@npm:1.2.8" dependencies: - "@endo/env-options": "npm:^1.1.7" - "@endo/init": "npm:^1.1.6" - ses: "npm:^1.9.1" + "@endo/env-options": "npm:^1.1.8" + "@endo/init": "npm:^1.1.7" + ses: "npm:^1.10.0" peerDependencies: ava: ^5.3.0 || ^6.1.2 - checksum: 10c0/eaddb89ee939e162338d22df1978b5ed6b69d9780b2c68862161dcb96f910c08336bbf546231d73e3212d7259e45581661c3499b9d228c510b5939b5f0a9a25f + checksum: 10c0/c1ef65d182f3bfa1ec0d5d0434da9d28bb0925f485629fcd5c42dc89db99e65a5b44e352e1fd2a577778b2905d6f36b009e4f2953aa0257ec1b049019e37b2cf languageName: node linkType: hard -"@endo/stream@npm:^1.2.7": - version: 1.2.7 - resolution: "@endo/stream@npm:1.2.7" +"@endo/stream@npm:^1.2.8": + version: 1.2.8 + resolution: "@endo/stream@npm:1.2.8" dependencies: - "@endo/eventual-send": "npm:^1.2.7" - "@endo/promise-kit": "npm:^1.1.7" - ses: "npm:^1.9.1" - checksum: 10c0/d96a2350200cc76ede5eed49e5d780d6d21f63007b42a83658bf5174e7b61e96bfe6b8f11ed2d33ad7f9eb6c3ec2db2a79079bc1679260ac7dac04a34a4a515e + "@endo/eventual-send": "npm:^1.2.8" + "@endo/promise-kit": "npm:^1.1.8" + ses: "npm:^1.10.0" + checksum: 10c0/f435f7650020b32c10bb4cb139910b363b4d4f22bcf9e7a659d3d2eae694a3ea43c3af49c80370760a573370429e5fbe1619dec631251578d4c5eba9ff161613 languageName: node linkType: hard -"@endo/trampoline@npm:^1.0.2": - version: 1.0.2 - resolution: "@endo/trampoline@npm:1.0.2" - checksum: 10c0/3b0f1462593fb5ea6ae960277fcd79b8351582c41130062b1d05ed934ae5a51499a87f10e9706c483f90065e26acc0d5bb40f25a537e196e7697ffeb518286ce +"@endo/trampoline@npm:^1.0.3": + version: 1.0.3 + resolution: "@endo/trampoline@npm:1.0.3" + checksum: 10c0/be0c3784b17f422ae04e28a6722e2abd193a5585a82acf5eb388476094c026aa5e76a383db887bdf6a032ccf0a12c38a967f5f1e71cef44a4659606be789b548 languageName: node linkType: hard -"@endo/where@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/where@npm:1.0.8" - checksum: 10c0/27b3e1b9ceccc3249e7e6067fbdcdc66fef3f46ad1dd7ac2b0623780e8f134bb18c11468f846d61413a82790cc4ddcbd69cdae9dda49f00dd6d09c818165cc48 +"@endo/where@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/where@npm:1.0.9" + checksum: 10c0/dd8f8fb601fb54e7cef64d7b32f91595d01151acf1e63c46257c905afb75760d80f2eec5d71cfb1f9251e435990256d56f35d6f8b4851f5e6fbe6b393b535028 languageName: node linkType: hard -"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.8": - version: 1.0.8 - resolution: "@endo/zip@npm:1.0.8" - checksum: 10c0/bb74862121932cd27eef59326325c4b61671ce0962033a2ad18e6d6978a9e94bfe604dbfa8c0b039a38fa7eefc495e6a69c583c0e75929cd267979b2c65b775b +"@endo/zip@npm:^1.0.7, @endo/zip@npm:^1.0.9": + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc languageName: node linkType: hard @@ -1250,6 +1251,48 @@ __metadata: languageName: node linkType: hard +"@eslint-community/eslint-utils@npm:^4.2.0": + version: 4.4.1 + resolution: "@eslint-community/eslint-utils@npm:4.4.1" + dependencies: + eslint-visitor-keys: "npm:^3.4.3" + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + checksum: 10c0/2aa0ac2fc50ff3f234408b10900ed4f1a0b19352f21346ad4cc3d83a1271481bdda11097baa45d484dd564c895e0762a27a8240be7a256b3ad47129e96528252 + languageName: node + linkType: hard + +"@eslint-community/regexpp@npm:^4.6.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 10c0/a03d98c246bcb9109aec2c08e4d10c8d010256538dcb3f56610191607214523d4fb1b00aa81df830b6dffb74c5fa0be03642513a289c567949d3e550ca11cdf6 + languageName: node + linkType: hard + +"@eslint/eslintrc@npm:^2.1.4": + version: 2.1.4 + resolution: "@eslint/eslintrc@npm:2.1.4" + dependencies: + ajv: "npm:^6.12.4" + debug: "npm:^4.3.2" + espree: "npm:^9.6.0" + globals: "npm:^13.19.0" + ignore: "npm:^5.2.0" + import-fresh: "npm:^3.2.1" + js-yaml: "npm:^4.1.0" + minimatch: "npm:^3.1.2" + strip-json-comments: "npm:^3.1.1" + checksum: 10c0/32f67052b81768ae876c84569ffd562491ec5a5091b0c1e1ca1e0f3c24fb42f804952fdd0a137873bc64303ba368a71ba079a6f691cee25beee9722d94cc8573 + languageName: node + linkType: hard + +"@eslint/js@npm:8.57.1": + version: 8.57.1 + resolution: "@eslint/js@npm:8.57.1" + checksum: 10c0/b489c474a3b5b54381c62e82b3f7f65f4b8a5eaaed126546520bf2fede5532a8ed53212919fed1e9048dcf7f37167c8561d58d0ba4492a4244004e7793805223 + languageName: node + linkType: hard + "@fast-check/ava@npm:^1.1.5": version: 1.2.1 resolution: "@fast-check/ava@npm:1.2.1" @@ -1261,6 +1304,31 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/config-array@npm:^0.13.0": + version: 0.13.0 + resolution: "@humanwhocodes/config-array@npm:0.13.0" + dependencies: + "@humanwhocodes/object-schema": "npm:^2.0.3" + debug: "npm:^4.3.1" + minimatch: "npm:^3.0.5" + checksum: 10c0/205c99e756b759f92e1f44a3dc6292b37db199beacba8f26c2165d4051fe73a4ae52fdcfd08ffa93e7e5cb63da7c88648f0e84e197d154bbbbe137b2e0dd332e + languageName: node + linkType: hard + +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 10c0/909b69c3b86d482c26b3359db16e46a32e0fb30bd306a3c176b8313b9e7313dba0f37f519de6aa8b0a1921349e505f259d19475e123182416a506d7f87e7f529 + languageName: node + linkType: hard + +"@humanwhocodes/object-schema@npm:^2.0.3": + version: 2.0.3 + resolution: "@humanwhocodes/object-schema@npm:2.0.3" + checksum: 10c0/80520eabbfc2d32fe195a93557cef50dfe8c8905de447f022675aaf66abc33ae54098f5ea78548d925aa671cd4ab7c7daa5ad704fe42358c9b5e7db60f80696c + languageName: node + linkType: hard + "@iarna/toml@npm:^2.2.3": version: 2.2.5 resolution: "@iarna/toml@npm:2.2.5" @@ -1367,7 +1435,7 @@ __metadata: languageName: node linkType: hard -"@nodelib/fs.walk@npm:^1.2.3": +"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": version: 1.2.8 resolution: "@nodelib/fs.walk@npm:1.2.8" dependencies: @@ -1632,6 +1700,13 @@ __metadata: languageName: node linkType: hard +"@ungap/structured-clone@npm:^1.2.0": + version: 1.2.0 + resolution: "@ungap/structured-clone@npm:1.2.0" + checksum: 10c0/8209c937cb39119f44eb63cf90c0b73e7c754209a6411c707be08e50e29ee81356dca1a848a405c8bdeebfe2f5e4f831ad310ae1689eeef65e7445c090c6657d + languageName: node + linkType: hard + "@vercel/nft@npm:^0.27.5": version: 0.27.5 resolution: "@vercel/nft@npm:0.27.5" @@ -1677,6 +1752,15 @@ __metadata: languageName: node linkType: hard +"acorn-jsx@npm:^5.3.2": + version: 5.3.2 + resolution: "acorn-jsx@npm:5.3.2" + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 10c0/4c54868fbef3b8d58927d5e33f0a4de35f59012fe7b12cf9dfbb345fb8f46607709e1c4431be869a23fb63c151033d84c4198fa9f79385cec34fcb1dd53974c1 + languageName: node + linkType: hard + "acorn-walk@npm:^8.3.4": version: 8.3.4 resolution: "acorn-walk@npm:8.3.4" @@ -1686,7 +1770,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.11.0, acorn@npm:^8.13.0, acorn@npm:^8.2.4, acorn@npm:^8.6.0": +"acorn@npm:^8.11.0, acorn@npm:^8.13.0, acorn@npm:^8.2.4, acorn@npm:^8.6.0, acorn@npm:^8.9.0": version: 8.14.0 resolution: "acorn@npm:8.14.0" bin: @@ -1749,18 +1833,18 @@ __metadata: "@cosmjs/math": "npm:^0.32.3" "@cosmjs/proto-signing": "npm:^0.32.3" "@cosmjs/stargate": "npm:^0.32.3" - "@endo/bundle-source": "npm:^3.4.2" - "@endo/captp": "npm:^4.4.2" - "@endo/compartment-mapper": "npm:^1.3.1" - "@endo/env-options": "npm:^1.1.7" - "@endo/errors": "npm:^1.2.7" - "@endo/far": "npm:^1.1.8" - "@endo/init": "npm:^1.1.6" - "@endo/marshal": "npm:^1.6.1" - "@endo/nat": "npm:^5.0.12" - "@endo/patterns": "npm:^1.4.6" - "@endo/promise-kit": "npm:^1.1.7" - "@endo/zip": "npm:^1.0.8" + "@endo/bundle-source": "npm:^3.5.0" + "@endo/captp": "npm:^4.4.3" + "@endo/compartment-mapper": "npm:^1.4.0" + "@endo/env-options": "npm:^1.1.8" + "@endo/errors": "npm:^1.2.8" + "@endo/far": "npm:^1.1.9" + "@endo/init": "npm:^1.1.7" + "@endo/marshal": "npm:^1.6.2" + "@endo/nat": "npm:^5.0.13" + "@endo/patterns": "npm:^1.4.7" + "@endo/promise-kit": "npm:^1.1.8" + "@endo/zip": "npm:^1.0.9" "@iarna/toml": "npm:^2.2.3" anylogger: "npm:^0.21.0" chalk: "npm:^5.2.0" @@ -1789,6 +1873,18 @@ __metadata: languageName: node linkType: hard +"ajv@npm:^6.12.4": + version: 6.12.6 + resolution: "ajv@npm:6.12.6" + dependencies: + fast-deep-equal: "npm:^3.1.1" + fast-json-stable-stringify: "npm:^2.0.0" + json-schema-traverse: "npm:^0.4.1" + uri-js: "npm:^4.2.2" + checksum: 10c0/41e23642cbe545889245b9d2a45854ebba51cda6c778ebced9649420d9205f2efb39cb43dbc41e358409223b1ea43303ae4839db682c848b891e4811da1a5a71 + languageName: node + linkType: hard + "ajv@npm:^8.0.1": version: 8.17.1 resolution: "ajv@npm:8.17.1" @@ -1824,6 +1920,15 @@ __metadata: languageName: node linkType: hard +"ansi-styles@npm:^3.2.1": + version: 3.2.1 + resolution: "ansi-styles@npm:3.2.1" + dependencies: + color-convert: "npm:^1.9.0" + checksum: 10c0/ece5a8ef069fcc5298f67e3f4771a663129abd174ea2dfa87923a2be2abf6cd367ef72ac87942da00ce85bd1d651d4cd8595aebdb1b385889b89b205860e977b + languageName: node + linkType: hard + "ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": version: 4.3.0 resolution: "ansi-styles@npm:4.3.0" @@ -1880,6 +1985,16 @@ __metadata: languageName: node linkType: hard +"array-buffer-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "array-buffer-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.5" + is-array-buffer: "npm:^3.0.4" + checksum: 10c0/f5cdf54527cd18a3d2852ddf73df79efec03829e7373a8322ef5df2b4ef546fb365c19c71d6b42d641cb6bfe0f1a2f19bc0ece5b533295f86d7c3d522f228917 + languageName: node + linkType: hard + "array-find-index@npm:^1.0.1": version: 1.0.2 resolution: "array-find-index@npm:1.0.2" @@ -1887,6 +2002,22 @@ __metadata: languageName: node linkType: hard +"arraybuffer.prototype.slice@npm:^1.0.3": + version: 1.0.3 + resolution: "arraybuffer.prototype.slice@npm:1.0.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.22.3" + es-errors: "npm:^1.2.1" + get-intrinsic: "npm:^1.2.3" + is-array-buffer: "npm:^3.0.4" + is-shared-array-buffer: "npm:^1.0.2" + checksum: 10c0/d32754045bcb2294ade881d45140a5e52bda2321b9e98fa514797b7f0d252c4c5ab0d1edb34112652c62fa6a9398def568da63a4d7544672229afea283358c36 + languageName: node + linkType: hard + "arrgv@npm:^1.0.2": version: 1.0.2 resolution: "arrgv@npm:1.0.2" @@ -1984,6 +2115,15 @@ __metadata: languageName: node linkType: hard +"available-typed-arrays@npm:^1.0.7": + version: 1.0.7 + resolution: "available-typed-arrays@npm:1.0.7" + dependencies: + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/d07226ef4f87daa01bd0fe80f8f310982e345f372926da2e5296aecc25c41cab440916bbaa4c5e1034b453af3392f67df5961124e4b586df1e99793a1374bdb2 + languageName: node + linkType: hard + "axios@npm:^1.6.0, axios@npm:^1.6.7": version: 1.7.7 resolution: "axios@npm:1.7.7" @@ -2147,7 +2287,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.5": +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.6, call-bind@npm:^1.0.7": version: 1.0.7 resolution: "call-bind@npm:1.0.7" dependencies: @@ -2160,6 +2300,13 @@ __metadata: languageName: node linkType: hard +"callsites@npm:^3.0.0": + version: 3.1.0 + resolution: "callsites@npm:3.1.0" + checksum: 10c0/fff92277400eb06c3079f9e74f3af120db9f8ea03bad0e84d9aede54bbe2d44a56cccb5f6cf12211f93f52306df87077ecec5b712794c5a9b5dac6d615a3f301 + languageName: node + linkType: hard + "callsites@npm:^4.2.0": version: 4.2.0 resolution: "callsites@npm:4.2.0" @@ -2176,7 +2323,18 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.1.0, chalk@npm:^4.1.1": +"chalk@npm:^2.4.1": + version: 2.4.2 + resolution: "chalk@npm:2.4.2" + dependencies: + ansi-styles: "npm:^3.2.1" + escape-string-regexp: "npm:^1.0.5" + supports-color: "npm:^5.3.0" + checksum: 10c0/e6543f02ec877732e3a2d1c3c3323ddb4d39fbab687c23f526e25bd4c6a9bf3b83a696e8c769d078e04e5754921648f7821b2a2acfd16c550435fd630026e073 + languageName: node + linkType: hard + +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -2302,7 +2460,7 @@ __metadata: languageName: node linkType: hard -"color-convert@npm:^1.9.3": +"color-convert@npm:^1.9.0, color-convert@npm:^1.9.3": version: 1.9.3 resolution: "color-convert@npm:1.9.3" dependencies: @@ -2454,6 +2612,19 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^6.0.5": + version: 6.0.5 + resolution: "cross-spawn@npm:6.0.5" + dependencies: + nice-try: "npm:^1.0.4" + path-key: "npm:^2.0.1" + semver: "npm:^5.5.0" + shebang-command: "npm:^1.2.0" + which: "npm:^1.2.9" + checksum: 10c0/e05544722e9d7189b4292c66e42b7abeb21db0d07c91b785f4ae5fefceb1f89e626da2703744657b287e86dcd4af57b54567cef75159957ff7a8a761d9055012 + languageName: node + linkType: hard + "cross-spawn@npm:^7.0.0, cross-spawn@npm:^7.0.3": version: 7.0.3 resolution: "cross-spawn@npm:7.0.3" @@ -2465,6 +2636,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.2": + version: 7.0.5 + resolution: "cross-spawn@npm:7.0.5" + dependencies: + path-key: "npm:^3.1.0" + shebang-command: "npm:^2.0.0" + which: "npm:^2.0.1" + checksum: 10c0/aa82ce7ac0814a27e6f2b738c5a7cf1fa21a3558a1e42df449fc96541ba3ba731e4d3ecffa4435348808a86212f287c6f20a1ee551ef1ff95d01cfec5f434944 + languageName: node + linkType: hard + "currently-unhandled@npm:^0.4.1": version: 0.4.1 resolution: "currently-unhandled@npm:0.4.1" @@ -2474,6 +2656,39 @@ __metadata: languageName: node linkType: hard +"data-view-buffer@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-buffer@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/8984119e59dbed906a11fcfb417d7d861936f16697a0e7216fe2c6c810f6b5e8f4a5281e73f2c28e8e9259027190ac4a33e2a65fdd7fa86ac06b76e838918583 + languageName: node + linkType: hard + +"data-view-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "data-view-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/b7d9e48a0cf5aefed9ab7d123559917b2d7e0d65531f43b2fd95b9d3a6b46042dd3fca597c42bba384e66b70d7ad66ff23932f8367b241f53d93af42cfe04ec2 + languageName: node + linkType: hard + +"data-view-byte-offset@npm:^1.0.0": + version: 1.0.0 + resolution: "data-view-byte-offset@npm:1.0.0" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-data-view: "npm:^1.0.1" + checksum: 10c0/21b0d2e53fd6e20cc4257c873bf6d36d77bd6185624b84076c0a1ddaa757b49aaf076254006341d35568e89f52eecd1ccb1a502cfb620f2beca04f48a6a62a8f + languageName: node + linkType: hard + "date-time@npm:^3.1.0": version: 3.1.0 resolution: "date-time@npm:3.1.0" @@ -2483,7 +2698,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.4, debug@npm:^4.3.7": +"debug@npm:4, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.7": version: 4.3.7 resolution: "debug@npm:4.3.7" dependencies: @@ -2511,6 +2726,13 @@ __metadata: languageName: node linkType: hard +"deep-is@npm:^0.1.3": + version: 0.1.4 + resolution: "deep-is@npm:0.1.4" + checksum: 10c0/7f0ee496e0dff14a573dc6127f14c95061b448b87b995fc96c017ce0a1e66af1675e73f1d6064407975bc4ea6ab679497a29fff7b5b9c4e99cb10797c1ad0b4c + languageName: node + linkType: hard + "deepmerge@npm:^4.2.2": version: 4.3.1 resolution: "deepmerge@npm:4.3.1" @@ -2538,7 +2760,7 @@ __metadata: languageName: node linkType: hard -"define-properties@npm:^1.2.1": +"define-properties@npm:^1.2.0, define-properties@npm:^1.2.1": version: 1.2.1 resolution: "define-properties@npm:1.2.1" dependencies: @@ -2579,6 +2801,15 @@ __metadata: languageName: node linkType: hard +"doctrine@npm:^3.0.0": + version: 3.0.0 + resolution: "doctrine@npm:3.0.0" + dependencies: + esutils: "npm:^2.0.2" + checksum: 10c0/c96bdccabe9d62ab6fea9399fdff04a66e6563c1d6fb3a3a063e8d53c3bb136ba63e84250bbf63d00086a769ad53aef92d2bd483f03f837fc97b71cbee6b2520 + languageName: node + linkType: hard + "eastasianwidth@npm:^0.2.0": version: 0.2.0 resolution: "eastasianwidth@npm:0.2.0" @@ -2668,6 +2899,69 @@ __metadata: languageName: node linkType: hard +"error-ex@npm:^1.3.1": + version: 1.3.2 + resolution: "error-ex@npm:1.3.2" + dependencies: + is-arrayish: "npm:^0.2.1" + checksum: 10c0/ba827f89369b4c93382cfca5a264d059dfefdaa56ecc5e338ffa58a6471f5ed93b71a20add1d52290a4873d92381174382658c885ac1a2305f7baca363ce9cce + languageName: node + linkType: hard + +"es-abstract@npm:^1.22.1, es-abstract@npm:^1.22.3, es-abstract@npm:^1.23.0, es-abstract@npm:^1.23.2": + version: 1.23.5 + resolution: "es-abstract@npm:1.23.5" + dependencies: + array-buffer-byte-length: "npm:^1.0.1" + arraybuffer.prototype.slice: "npm:^1.0.3" + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + data-view-buffer: "npm:^1.0.1" + data-view-byte-length: "npm:^1.0.1" + data-view-byte-offset: "npm:^1.0.0" + es-define-property: "npm:^1.0.0" + es-errors: "npm:^1.3.0" + es-object-atoms: "npm:^1.0.0" + es-set-tostringtag: "npm:^2.0.3" + es-to-primitive: "npm:^1.2.1" + function.prototype.name: "npm:^1.1.6" + get-intrinsic: "npm:^1.2.4" + get-symbol-description: "npm:^1.0.2" + globalthis: "npm:^1.0.4" + gopd: "npm:^1.0.1" + has-property-descriptors: "npm:^1.0.2" + has-proto: "npm:^1.0.3" + has-symbols: "npm:^1.0.3" + hasown: "npm:^2.0.2" + internal-slot: "npm:^1.0.7" + is-array-buffer: "npm:^3.0.4" + is-callable: "npm:^1.2.7" + is-data-view: "npm:^1.0.1" + is-negative-zero: "npm:^2.0.3" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.3" + is-string: "npm:^1.0.7" + is-typed-array: "npm:^1.1.13" + is-weakref: "npm:^1.0.2" + object-inspect: "npm:^1.13.3" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.5" + regexp.prototype.flags: "npm:^1.5.3" + safe-array-concat: "npm:^1.1.2" + safe-regex-test: "npm:^1.0.3" + string.prototype.trim: "npm:^1.2.9" + string.prototype.trimend: "npm:^1.0.8" + string.prototype.trimstart: "npm:^1.0.8" + typed-array-buffer: "npm:^1.0.2" + typed-array-byte-length: "npm:^1.0.1" + typed-array-byte-offset: "npm:^1.0.2" + typed-array-length: "npm:^1.0.6" + unbox-primitive: "npm:^1.0.2" + which-typed-array: "npm:^1.1.15" + checksum: 10c0/1f6f91da9cf7ee2c81652d57d3046621d598654d1d1b05c1578bafe5c4c2d3d69513901679bdca2de589f620666ec21de337e4935cec108a4ed0871d5ef04a5d + languageName: node + linkType: hard + "es-define-property@npm:^1.0.0": version: 1.0.0 resolution: "es-define-property@npm:1.0.0" @@ -2677,25 +2971,56 @@ __metadata: languageName: node linkType: hard -"es-errors@npm:^1.3.0": +"es-errors@npm:^1.2.1, es-errors@npm:^1.3.0": version: 1.3.0 resolution: "es-errors@npm:1.3.0" checksum: 10c0/0a61325670072f98d8ae3b914edab3559b6caa980f08054a3b872052640d91da01d38df55df797fcc916389d77fc92b8d5906cf028f4db46d7e3003abecbca85 languageName: node linkType: hard -"esbuild@npm:~0.23.0": - version: 0.23.1 - resolution: "esbuild@npm:0.23.1" +"es-object-atoms@npm:^1.0.0": + version: 1.0.0 + resolution: "es-object-atoms@npm:1.0.0" dependencies: - "@esbuild/aix-ppc64": "npm:0.23.1" - "@esbuild/android-arm": "npm:0.23.1" - "@esbuild/android-arm64": "npm:0.23.1" - "@esbuild/android-x64": "npm:0.23.1" - "@esbuild/darwin-arm64": "npm:0.23.1" - "@esbuild/darwin-x64": "npm:0.23.1" - "@esbuild/freebsd-arm64": "npm:0.23.1" - "@esbuild/freebsd-x64": "npm:0.23.1" + es-errors: "npm:^1.3.0" + checksum: 10c0/1fed3d102eb27ab8d983337bb7c8b159dd2a1e63ff833ec54eea1311c96d5b08223b433060ba240541ca8adba9eee6b0a60cdbf2f80634b784febc9cc8b687b4 + languageName: node + linkType: hard + +"es-set-tostringtag@npm:^2.0.3": + version: 2.0.3 + resolution: "es-set-tostringtag@npm:2.0.3" + dependencies: + get-intrinsic: "npm:^1.2.4" + has-tostringtag: "npm:^1.0.2" + hasown: "npm:^2.0.1" + checksum: 10c0/f22aff1585eb33569c326323f0b0d175844a1f11618b86e193b386f8be0ea9474cfbe46df39c45d959f7aa8f6c06985dc51dd6bce5401645ec5a74c4ceaa836a + languageName: node + linkType: hard + +"es-to-primitive@npm:^1.2.1": + version: 1.2.1 + resolution: "es-to-primitive@npm:1.2.1" + dependencies: + is-callable: "npm:^1.1.4" + is-date-object: "npm:^1.0.1" + is-symbol: "npm:^1.0.2" + checksum: 10c0/0886572b8dc075cb10e50c0af62a03d03a68e1e69c388bd4f10c0649ee41b1fbb24840a1b7e590b393011b5cdbe0144b776da316762653685432df37d6de60f1 + languageName: node + linkType: hard + +"esbuild@npm:~0.23.0": + version: 0.23.1 + resolution: "esbuild@npm:0.23.1" + dependencies: + "@esbuild/aix-ppc64": "npm:0.23.1" + "@esbuild/android-arm": "npm:0.23.1" + "@esbuild/android-arm64": "npm:0.23.1" + "@esbuild/android-x64": "npm:0.23.1" + "@esbuild/darwin-arm64": "npm:0.23.1" + "@esbuild/darwin-x64": "npm:0.23.1" + "@esbuild/freebsd-arm64": "npm:0.23.1" + "@esbuild/freebsd-x64": "npm:0.23.1" "@esbuild/linux-arm": "npm:0.23.1" "@esbuild/linux-arm64": "npm:0.23.1" "@esbuild/linux-ia32": "npm:0.23.1" @@ -2788,6 +3113,13 @@ __metadata: languageName: node linkType: hard +"escape-string-regexp@npm:^4.0.0": + version: 4.0.0 + resolution: "escape-string-regexp@npm:4.0.0" + checksum: 10c0/9497d4dd307d845bd7f75180d8188bb17ea8c151c1edbf6b6717c100e104d629dc2dfb687686181b0f4b7d732c7dfdc4d5e7a8ff72de1b0ca283a75bbb3a9cd9 + languageName: node + linkType: hard + "escape-string-regexp@npm:^5.0.0": version: 5.0.0 resolution: "escape-string-regexp@npm:5.0.0" @@ -2795,6 +3127,71 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^7.2.2": + version: 7.2.2 + resolution: "eslint-scope@npm:7.2.2" + dependencies: + esrecurse: "npm:^4.3.0" + estraverse: "npm:^5.2.0" + checksum: 10c0/613c267aea34b5a6d6c00514e8545ef1f1433108097e857225fed40d397dd6b1809dffd11c2fde23b37ca53d7bf935fe04d2a18e6fc932b31837b6ad67e1c116 + languageName: node + linkType: hard + +"eslint-visitor-keys@npm:^3.4.1, eslint-visitor-keys@npm:^3.4.3": + version: 3.4.3 + resolution: "eslint-visitor-keys@npm:3.4.3" + checksum: 10c0/92708e882c0a5ffd88c23c0b404ac1628cf20104a108c745f240a13c332a11aac54f49a22d5762efbffc18ecbc9a580d1b7ad034bf5f3cc3307e5cbff2ec9820 + languageName: node + linkType: hard + +"eslint@npm:^8.57.0": + version: 8.57.1 + resolution: "eslint@npm:8.57.1" + dependencies: + "@eslint-community/eslint-utils": "npm:^4.2.0" + "@eslint-community/regexpp": "npm:^4.6.1" + "@eslint/eslintrc": "npm:^2.1.4" + "@eslint/js": "npm:8.57.1" + "@humanwhocodes/config-array": "npm:^0.13.0" + "@humanwhocodes/module-importer": "npm:^1.0.1" + "@nodelib/fs.walk": "npm:^1.2.8" + "@ungap/structured-clone": "npm:^1.2.0" + ajv: "npm:^6.12.4" + chalk: "npm:^4.0.0" + cross-spawn: "npm:^7.0.2" + debug: "npm:^4.3.2" + doctrine: "npm:^3.0.0" + escape-string-regexp: "npm:^4.0.0" + eslint-scope: "npm:^7.2.2" + eslint-visitor-keys: "npm:^3.4.3" + espree: "npm:^9.6.1" + esquery: "npm:^1.4.2" + esutils: "npm:^2.0.2" + fast-deep-equal: "npm:^3.1.3" + file-entry-cache: "npm:^6.0.1" + find-up: "npm:^5.0.0" + glob-parent: "npm:^6.0.2" + globals: "npm:^13.19.0" + graphemer: "npm:^1.4.0" + ignore: "npm:^5.2.0" + imurmurhash: "npm:^0.1.4" + is-glob: "npm:^4.0.0" + is-path-inside: "npm:^3.0.3" + js-yaml: "npm:^4.1.0" + json-stable-stringify-without-jsonify: "npm:^1.0.1" + levn: "npm:^0.4.1" + lodash.merge: "npm:^4.6.2" + minimatch: "npm:^3.1.2" + natural-compare: "npm:^1.4.0" + optionator: "npm:^0.9.3" + strip-ansi: "npm:^6.0.1" + text-table: "npm:^0.2.0" + bin: + eslint: bin/eslint.js + checksum: 10c0/1fd31533086c1b72f86770a4d9d7058ee8b4643fd1cfd10c7aac1ecb8725698e88352a87805cf4b2ce890aa35947df4b4da9655fb7fdfa60dbb448a43f6ebcf1 + languageName: node + linkType: hard + "esm@agoric-labs/esm#Agoric-built": version: 3.2.25 resolution: "esm@https://github.com/agoric-labs/esm.git#commit=3603726ad4636b2f865f463188fcaade6375638e" @@ -2802,6 +3199,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^9.6.0, espree@npm:^9.6.1": + version: 9.6.1 + resolution: "espree@npm:9.6.1" + dependencies: + acorn: "npm:^8.9.0" + acorn-jsx: "npm:^5.3.2" + eslint-visitor-keys: "npm:^3.4.1" + checksum: 10c0/1a2e9b4699b715347f62330bcc76aee224390c28bb02b31a3752e9d07549c473f5f986720483c6469cf3cfb3c9d05df612ffc69eb1ee94b54b739e67de9bb460 + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -2812,6 +3220,31 @@ __metadata: languageName: node linkType: hard +"esquery@npm:^1.4.2": + version: 1.6.0 + resolution: "esquery@npm:1.6.0" + dependencies: + estraverse: "npm:^5.1.0" + checksum: 10c0/cb9065ec605f9da7a76ca6dadb0619dfb611e37a81e318732977d90fab50a256b95fee2d925fba7c2f3f0523aa16f91587246693bc09bc34d5a59575fe6e93d2 + languageName: node + linkType: hard + +"esrecurse@npm:^4.3.0": + version: 4.3.0 + resolution: "esrecurse@npm:4.3.0" + dependencies: + estraverse: "npm:^5.2.0" + checksum: 10c0/81a37116d1408ded88ada45b9fb16dbd26fba3aadc369ce50fcaf82a0bac12772ebd7b24cd7b91fc66786bf2c1ac7b5f196bc990a473efff972f5cb338877cf5 + languageName: node + linkType: hard + +"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0": + version: 5.3.0 + resolution: "estraverse@npm:5.3.0" + checksum: 10c0/1ff9447b96263dec95d6d67431c5e0771eb9776427421260a3e2f0fdd5d6bd4f8e37a7338f5ad2880c9f143450c9b1e4fc2069060724570a49cf9cf0312bd107 + languageName: node + linkType: hard + "estree-walker@npm:2.0.2, estree-walker@npm:^2.0.1, estree-walker@npm:^2.0.2": version: 2.0.2 resolution: "estree-walker@npm:2.0.2" @@ -2826,13 +3259,33 @@ __metadata: languageName: node linkType: hard -"esutils@npm:^2.0.3": +"esutils@npm:^2.0.2, esutils@npm:^2.0.3": version: 2.0.3 resolution: "esutils@npm:2.0.3" checksum: 10c0/9a2fe69a41bfdade834ba7c42de4723c97ec776e40656919c62cbd13607c45e127a003f05f724a1ea55e5029a4cf2de444b13009f2af71271e42d93a637137c7 languageName: node linkType: hard +"execa@npm:9.1.0": + version: 9.1.0 + resolution: "execa@npm:9.1.0" + dependencies: + "@sindresorhus/merge-streams": "npm:^4.0.0" + cross-spawn: "npm:^7.0.3" + figures: "npm:^6.1.0" + get-stream: "npm:^9.0.0" + human-signals: "npm:^7.0.0" + is-plain-obj: "npm:^4.1.0" + is-stream: "npm:^4.0.1" + npm-run-path: "npm:^5.2.0" + pretty-ms: "npm:^9.0.0" + signal-exit: "npm:^4.1.0" + strip-final-newline: "npm:^4.0.0" + yoctocolors: "npm:^2.0.0" + checksum: 10c0/9a4810b93d098eb0bed48793b61c3aa3e5804867c2c5808cd2a597a6e71738151a74dc792909085ce1d38e89f4b0e078d93ffd165aaca2d9a6728f3616f8e5c0 + languageName: node + linkType: hard + "execa@npm:^9.3.1": version: 9.5.1 resolution: "execa@npm:9.5.1" @@ -2914,6 +3367,20 @@ __metadata: languageName: node linkType: hard +"fast-json-stable-stringify@npm:^2.0.0": + version: 2.1.0 + resolution: "fast-json-stable-stringify@npm:2.1.0" + checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b + languageName: node + linkType: hard + +"fast-levenshtein@npm:^2.0.6": + version: 2.0.6 + resolution: "fast-levenshtein@npm:2.0.6" + checksum: 10c0/111972b37338bcb88f7d9e2c5907862c280ebf4234433b95bc611e518d192ccb2d38119c4ac86e26b668d75f7f3894f4ff5c4982899afced7ca78633b08287c4 + languageName: node + linkType: hard + "fast-safe-stringify@npm:2.0.4": version: 2.0.4 resolution: "fast-safe-stringify@npm:2.0.4" @@ -2962,6 +3429,15 @@ __metadata: languageName: node linkType: hard +"file-entry-cache@npm:^6.0.1": + version: 6.0.1 + resolution: "file-entry-cache@npm:6.0.1" + dependencies: + flat-cache: "npm:^3.0.4" + checksum: 10c0/58473e8a82794d01b38e5e435f6feaf648e3f36fdb3a56e98f417f4efae71ad1c0d4ebd8a9a7c50c3ad085820a93fc7494ad721e0e4ebc1da3573f4e1c3c7cdd + languageName: node + linkType: hard + "file-uri-to-path@npm:1.0.0": version: 1.0.0 resolution: "file-uri-to-path@npm:1.0.0" @@ -2985,6 +3461,34 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^5.0.0": + version: 5.0.0 + resolution: "find-up@npm:5.0.0" + dependencies: + locate-path: "npm:^6.0.0" + path-exists: "npm:^4.0.0" + checksum: 10c0/062c5a83a9c02f53cdd6d175a37ecf8f87ea5bbff1fdfb828f04bfa021441bc7583e8ebc0872a4c1baab96221fb8a8a275a19809fb93fbc40bd69ec35634069a + languageName: node + linkType: hard + +"flat-cache@npm:^3.0.4": + version: 3.2.0 + resolution: "flat-cache@npm:3.2.0" + dependencies: + flatted: "npm:^3.2.9" + keyv: "npm:^4.5.3" + rimraf: "npm:^3.0.2" + checksum: 10c0/b76f611bd5f5d68f7ae632e3ae503e678d205cf97a17c6ab5b12f6ca61188b5f1f7464503efae6dc18683ed8f0b41460beb48ac4b9ac63fe6201296a91ba2f75 + languageName: node + linkType: hard + +"flatted@npm:^3.2.9": + version: 3.3.1 + resolution: "flatted@npm:3.3.1" + checksum: 10c0/324166b125ee07d4ca9bcf3a5f98d915d5db4f39d711fba640a3178b959919aae1f7cfd8aabcfef5826ed8aa8a2aa14cc85b2d7d18ff638ddf4ae3df39573eaf + languageName: node + linkType: hard + "fn.name@npm:1.x.x": version: 1.1.0 resolution: "fn.name@npm:1.1.0" @@ -3002,6 +3506,15 @@ __metadata: languageName: node linkType: hard +"for-each@npm:^0.3.3": + version: 0.3.3 + resolution: "for-each@npm:0.3.3" + dependencies: + is-callable: "npm:^1.1.3" + checksum: 10c0/22330d8a2db728dbf003ec9182c2d421fbcd2969b02b4f97ec288721cda63eb28f2c08585ddccd0f77cb2930af8d958005c9e72f47141dc51816127a118f39aa + languageName: node + linkType: hard + "foreground-child@npm:^3.1.0": version: 3.3.0 resolution: "foreground-child@npm:3.3.0" @@ -3081,6 +3594,25 @@ __metadata: languageName: node linkType: hard +"function.prototype.name@npm:^1.1.6": + version: 1.1.6 + resolution: "function.prototype.name@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.2" + define-properties: "npm:^1.2.0" + es-abstract: "npm:^1.22.1" + functions-have-names: "npm:^1.2.3" + checksum: 10c0/9eae11294905b62cb16874adb4fc687927cda3162285e0ad9612e6a1d04934005d46907362ea9cdb7428edce05a2f2c3dabc3b2d21e9fd343e9bb278230ad94b + languageName: node + linkType: hard + +"functions-have-names@npm:^1.2.3": + version: 1.2.3 + resolution: "functions-have-names@npm:1.2.3" + checksum: 10c0/33e77fd29bddc2d9bb78ab3eb854c165909201f88c75faa8272e35899e2d35a8a642a15e7420ef945e1f64a9670d6aa3ec744106b2aa42be68ca5114025954ca + languageName: node + linkType: hard + "gauge@npm:^3.0.0": version: 3.0.2 resolution: "gauge@npm:3.0.2" @@ -3112,7 +3644,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.4": +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.1, get-intrinsic@npm:^1.2.3, get-intrinsic@npm:^1.2.4": version: 1.2.4 resolution: "get-intrinsic@npm:1.2.4" dependencies: @@ -3135,6 +3667,17 @@ __metadata: languageName: node linkType: hard +"get-symbol-description@npm:^1.0.2": + version: 1.0.2 + resolution: "get-symbol-description@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.5" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + checksum: 10c0/867be6d63f5e0eb026cb3b0ef695ec9ecf9310febb041072d2e142f260bd91ced9eeb426b3af98791d1064e324e653424afa6fd1af17dee373bea48ae03162bc + languageName: node + linkType: hard + "get-tsconfig@npm:^4.7.5": version: 4.8.1 resolution: "get-tsconfig@npm:4.8.1" @@ -3160,6 +3703,15 @@ __metadata: languageName: node linkType: hard +"glob-parent@npm:^6.0.2": + version: 6.0.2 + resolution: "glob-parent@npm:6.0.2" + dependencies: + is-glob: "npm:^4.0.3" + checksum: 10c0/317034d88654730230b3f43bb7ad4f7c90257a426e872ea0bf157473ac61c99bf5d205fad8f0185f989be8d2fa6d3c7dce1645d99d545b6ea9089c39f838e7f8 + languageName: node + linkType: hard + "glob@npm:^10.2.2, glob@npm:^10.3.10": version: 10.4.5 resolution: "glob@npm:10.4.5" @@ -3197,7 +3749,16 @@ __metadata: languageName: node linkType: hard -"globalthis@npm:^1.0.1": +"globals@npm:^13.19.0": + version: 13.24.0 + resolution: "globals@npm:13.24.0" + dependencies: + type-fest: "npm:^0.20.2" + checksum: 10c0/d3c11aeea898eb83d5ec7a99508600fbe8f83d2cf00cbb77f873dbf2bcb39428eff1b538e4915c993d8a3b3473fa71eeebfe22c9bb3a3003d1e26b1f2c8a42cd + languageName: node + linkType: hard + +"globalthis@npm:^1.0.1, globalthis@npm:^1.0.4": version: 1.0.4 resolution: "globalthis@npm:1.0.4" dependencies: @@ -3230,13 +3791,34 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.4, graceful-fs@npm:^4.2.6, graceful-fs@npm:^4.2.9": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 languageName: node linkType: hard +"graphemer@npm:^1.4.0": + version: 1.4.0 + resolution: "graphemer@npm:1.4.0" + checksum: 10c0/e951259d8cd2e0d196c72ec711add7115d42eb9a8146c8eeda5b8d3ac91e5dd816b9cd68920726d9fd4490368e7ed86e9c423f40db87e2d8dfafa00fa17c3a31 + languageName: node + linkType: hard + +"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": + version: 1.0.2 + resolution: "has-bigints@npm:1.0.2" + checksum: 10c0/724eb1485bfa3cdff6f18d95130aa190561f00b3fcf9f19dc640baf8176b5917c143b81ec2123f8cddb6c05164a198c94b13e1377c497705ccc8e1a80306e83b + languageName: node + linkType: hard + +"has-flag@npm:^3.0.0": + version: 3.0.0 + resolution: "has-flag@npm:3.0.0" + checksum: 10c0/1c6c83b14b8b1b3c25b0727b8ba3e3b647f99e9e6e13eb7322107261de07a4c1be56fc0d45678fc376e09772a3a1642ccdaf8fc69bdf123b6c086598397ce473 + languageName: node + linkType: hard + "has-flag@npm:^4.0.0": version: 4.0.0 resolution: "has-flag@npm:4.0.0" @@ -3253,20 +3835,29 @@ __metadata: languageName: node linkType: hard -"has-proto@npm:^1.0.1": +"has-proto@npm:^1.0.1, has-proto@npm:^1.0.3": version: 1.0.3 resolution: "has-proto@npm:1.0.3" checksum: 10c0/35a6989f81e9f8022c2f4027f8b48a552de714938765d019dbea6bb547bd49ce5010a3c7c32ec6ddac6e48fc546166a3583b128f5a7add8b058a6d8b4afec205 languageName: node linkType: hard -"has-symbols@npm:^1.0.3": +"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": version: 1.0.3 resolution: "has-symbols@npm:1.0.3" checksum: 10c0/e6922b4345a3f37069cdfe8600febbca791c94988c01af3394d86ca3360b4b93928bbf395859158f88099cb10b19d98e3bbab7c9ff2c1bd09cf665ee90afa2c3 languageName: node linkType: hard +"has-tostringtag@npm:^1.0.0, has-tostringtag@npm:^1.0.2": + version: 1.0.2 + resolution: "has-tostringtag@npm:1.0.2" + dependencies: + has-symbols: "npm:^1.0.3" + checksum: 10c0/a8b166462192bafe3d9b6e420a1d581d93dd867adb61be223a17a8d6dad147aa77a8be32c961bb2f27b3ef893cae8d36f564ab651f5e9b7938ae86f74027c48c + languageName: node + linkType: hard + "has-unicode@npm:^2.0.1": version: 2.0.1 resolution: "has-unicode@npm:2.0.1" @@ -3284,7 +3875,7 @@ __metadata: languageName: node linkType: hard -"hasown@npm:^2.0.0, hasown@npm:^2.0.2": +"hasown@npm:^2.0.0, hasown@npm:^2.0.1, hasown@npm:^2.0.2": version: 2.0.2 resolution: "hasown@npm:2.0.2" dependencies: @@ -3304,6 +3895,13 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^2.1.4": + version: 2.8.9 + resolution: "hosted-git-info@npm:2.8.9" + checksum: 10c0/317cbc6b1bbbe23c2a40ae23f3dafe9fa349ce42a89a36f930e3f9c0530c179a3882d2ef1e4141a4c3674d6faaea862138ec55b43ad6f75e387fda2483a13c70 + languageName: node + linkType: hard + "http-cache-semantics@npm:^4.1.1": version: 4.1.1 resolution: "http-cache-semantics@npm:4.1.1" @@ -3341,6 +3939,13 @@ __metadata: languageName: node linkType: hard +"human-signals@npm:^7.0.0": + version: 7.0.0 + resolution: "human-signals@npm:7.0.0" + checksum: 10c0/ce0c6d62d2e9bfe529d48f7c7fdf4b8c70fce950eef7850719b4e3f5bc71795ae7d61a3699ce13262bed7847705822601cc81f1921ea6a2906852e16228a94ab + languageName: node + linkType: hard + "human-signals@npm:^8.0.0": version: 8.0.0 resolution: "human-signals@npm:8.0.0" @@ -3380,13 +3985,23 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.4": +"ignore@npm:^5.2.0, ignore@npm:^5.2.4": version: 5.3.2 resolution: "ignore@npm:5.3.2" checksum: 10c0/f9f652c957983634ded1e7f02da3b559a0d4cc210fca3792cb67f1b153623c9c42efdc1c4121af171e295444459fc4a9201101fb041b1104a3c000bccb188337 languageName: node linkType: hard +"import-fresh@npm:^3.2.1": + version: 3.3.0 + resolution: "import-fresh@npm:3.3.0" + dependencies: + parent-module: "npm:^1.0.0" + resolve-from: "npm:^4.0.0" + checksum: 10c0/7f882953aa6b740d1f0e384d0547158bc86efbf2eea0f1483b8900a6f65c5a5123c2cf09b0d542cc419d0b98a759ecaeb394237e97ea427f2da221dc3cd80cc3 + languageName: node + linkType: hard + "import-meta-resolve@npm:^2.2.1": version: 2.2.2 resolution: "import-meta-resolve@npm:2.2.2" @@ -3462,6 +4077,17 @@ __metadata: languageName: node linkType: hard +"internal-slot@npm:^1.0.7": + version: 1.0.7 + resolution: "internal-slot@npm:1.0.7" + dependencies: + es-errors: "npm:^1.3.0" + hasown: "npm:^2.0.0" + side-channel: "npm:^1.0.4" + checksum: 10c0/f8b294a4e6ea3855fc59551bbf35f2b832cf01fd5e6e2a97f5c201a071cc09b49048f856e484b67a6c721da5e55736c5b6ddafaf19e2dbeb4a3ff1821680de6c + languageName: node + linkType: hard + "ip-address@npm:^9.0.5": version: 9.0.5 resolution: "ip-address@npm:9.0.5" @@ -3479,6 +4105,23 @@ __metadata: languageName: node linkType: hard +"is-array-buffer@npm:^3.0.4": + version: 3.0.4 + resolution: "is-array-buffer@npm:3.0.4" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.2.1" + checksum: 10c0/42a49d006cc6130bc5424eae113e948c146f31f9d24460fc0958f855d9d810e6fd2e4519bf19aab75179af9c298ea6092459d8cafdec523cd19e529b26eab860 + languageName: node + linkType: hard + +"is-arrayish@npm:^0.2.1": + version: 0.2.1 + resolution: "is-arrayish@npm:0.2.1" + checksum: 10c0/e7fb686a739068bb70f860b39b67afc62acc62e36bb61c5f965768abce1873b379c563e61dd2adad96ebb7edf6651111b385e490cf508378959b0ed4cac4e729 + languageName: node + linkType: hard + "is-arrayish@npm:^0.3.1": version: 0.3.2 resolution: "is-arrayish@npm:0.3.2" @@ -3486,6 +4129,25 @@ __metadata: languageName: node linkType: hard +"is-bigint@npm:^1.0.1": + version: 1.0.4 + resolution: "is-bigint@npm:1.0.4" + dependencies: + has-bigints: "npm:^1.0.1" + checksum: 10c0/eb9c88e418a0d195ca545aff2b715c9903d9b0a5033bc5922fec600eb0c3d7b1ee7f882dbf2e0d5a6e694e42391be3683e4368737bd3c4a77f8ac293e7773696 + languageName: node + linkType: hard + +"is-boolean-object@npm:^1.1.0": + version: 1.1.2 + resolution: "is-boolean-object@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/6090587f8a8a8534c0f816da868bc94f32810f08807aa72fa7e79f7e11c466d281486ffe7a788178809c2aa71fe3e700b167fe80dd96dad68026bfff8ebf39f7 + languageName: node + linkType: hard + "is-builtin-module@npm:^3.1.0": version: 3.2.1 resolution: "is-builtin-module@npm:3.2.1" @@ -3495,6 +4157,13 @@ __metadata: languageName: node linkType: hard +"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 10c0/ceebaeb9d92e8adee604076971dd6000d38d6afc40bb843ea8e45c5579b57671c3f3b50d7f04869618242c6cee08d1b67806a8cb8edaaaf7c0748b3720d6066f + languageName: node + linkType: hard + "is-core-module@npm:^2.13.0": version: 2.15.1 resolution: "is-core-module@npm:2.15.1" @@ -3504,6 +4173,24 @@ __metadata: languageName: node linkType: hard +"is-data-view@npm:^1.0.1": + version: 1.0.1 + resolution: "is-data-view@npm:1.0.1" + dependencies: + is-typed-array: "npm:^1.1.13" + checksum: 10c0/a3e6ec84efe303da859107aed9b970e018e2bee7ffcb48e2f8096921a493608134240e672a2072577e5f23a729846241d9634806e8a0e51d9129c56d5f65442d + languageName: node + linkType: hard + +"is-date-object@npm:^1.0.1": + version: 1.0.5 + resolution: "is-date-object@npm:1.0.5" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/eed21e5dcc619c48ccef804dfc83a739dbb2abee6ca202838ee1bd5f760fe8d8a93444f0d49012ad19bb7c006186e2884a1b92f6e1c056da7fd23d0a9ad5992e + languageName: node + linkType: hard + "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -3525,7 +4212,7 @@ __metadata: languageName: node linkType: hard -"is-glob@npm:^4.0.1": +"is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": version: 4.0.3 resolution: "is-glob@npm:4.0.3" dependencies: @@ -3555,6 +4242,22 @@ __metadata: languageName: node linkType: hard +"is-negative-zero@npm:^2.0.3": + version: 2.0.3 + resolution: "is-negative-zero@npm:2.0.3" + checksum: 10c0/bcdcf6b8b9714063ffcfa9929c575ac69bfdabb8f4574ff557dfc086df2836cf07e3906f5bbc4f2a5c12f8f3ba56af640c843cdfc74da8caed86c7c7d66fd08e + languageName: node + linkType: hard + +"is-number-object@npm:^1.0.4": + version: 1.0.7 + resolution: "is-number-object@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/aad266da1e530f1804a2b7bd2e874b4869f71c98590b3964f9d06cc9869b18f8d1f4778f838ecd2a11011bce20aeecb53cb269ba916209b79c24580416b74b1b + languageName: node + linkType: hard + "is-number@npm:^7.0.0": version: 7.0.0 resolution: "is-number@npm:7.0.0" @@ -3562,6 +4265,13 @@ __metadata: languageName: node linkType: hard +"is-path-inside@npm:^3.0.3": + version: 3.0.3 + resolution: "is-path-inside@npm:3.0.3" + checksum: 10c0/cf7d4ac35fb96bab6a1d2c3598fe5ebb29aafb52c0aaa482b5a3ed9d8ba3edc11631e3ec2637660c44b3ce0e61a08d54946e8af30dec0b60a7c27296c68ffd05 + languageName: node + linkType: hard + "is-plain-obj@npm:^4.1.0": version: 4.1.0 resolution: "is-plain-obj@npm:4.1.0" @@ -3592,6 +4302,25 @@ __metadata: languageName: node linkType: hard +"is-regex@npm:^1.1.4": + version: 1.1.4 + resolution: "is-regex@npm:1.1.4" + dependencies: + call-bind: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/bb72aae604a69eafd4a82a93002058c416ace8cde95873589a97fc5dac96a6c6c78a9977d487b7b95426a8f5073969124dd228f043f9f604f041f32fcc465fc1 + languageName: node + linkType: hard + +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.3": + version: 1.0.3 + resolution: "is-shared-array-buffer@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.7" + checksum: 10c0/adc11ab0acbc934a7b9e5e9d6c588d4ec6682f6fea8cda5180721704fa32927582ede5b123349e32517fdadd07958973d24716c80e7ab198970c47acc09e59c7 + languageName: node + linkType: hard + "is-stream@npm:^2.0.0": version: 2.0.1 resolution: "is-stream@npm:2.0.1" @@ -3606,6 +4335,33 @@ __metadata: languageName: node linkType: hard +"is-string@npm:^1.0.5, is-string@npm:^1.0.7": + version: 1.0.7 + resolution: "is-string@npm:1.0.7" + dependencies: + has-tostringtag: "npm:^1.0.0" + checksum: 10c0/905f805cbc6eedfa678aaa103ab7f626aac9ebbdc8737abb5243acaa61d9820f8edc5819106b8fcd1839e33db21de9f0116ae20de380c8382d16dc2a601921f6 + languageName: node + linkType: hard + +"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": + version: 1.0.4 + resolution: "is-symbol@npm:1.0.4" + dependencies: + has-symbols: "npm:^1.0.2" + checksum: 10c0/9381dd015f7c8906154dbcbf93fad769de16b4b961edc94f88d26eb8c555935caa23af88bda0c93a18e65560f6d7cca0fd5a3f8a8e1df6f1abbb9bead4502ef7 + languageName: node + linkType: hard + +"is-typed-array@npm:^1.1.13": + version: 1.1.13 + resolution: "is-typed-array@npm:1.1.13" + dependencies: + which-typed-array: "npm:^1.1.14" + checksum: 10c0/fa5cb97d4a80e52c2cc8ed3778e39f175a1a2ae4ddf3adae3187d69586a1fd57cfa0b095db31f66aa90331e9e3da79184cea9c6abdcd1abc722dc3c3edd51cca + languageName: node + linkType: hard + "is-unicode-supported@npm:^0.1.0": version: 0.1.0 resolution: "is-unicode-supported@npm:0.1.0" @@ -3620,6 +4376,15 @@ __metadata: languageName: node linkType: hard +"is-weakref@npm:^1.0.2": + version: 1.0.2 + resolution: "is-weakref@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + checksum: 10c0/1545c5d172cb690c392f2136c23eec07d8d78a7f57d0e41f10078aa4f5daf5d7f57b6513a67514ab4f073275ad00c9822fc8935e00229d0a2089e1c02685d4b1 + languageName: node + linkType: hard + "isarray@npm:^2.0.5": version: 2.0.5 resolution: "isarray@npm:2.0.5" @@ -3709,6 +4474,17 @@ __metadata: languageName: node linkType: hard +"js-yaml@npm:^4.1.0": + version: 4.1.0 + resolution: "js-yaml@npm:4.1.0" + dependencies: + argparse: "npm:^2.0.1" + bin: + js-yaml: bin/js-yaml.js + checksum: 10c0/184a24b4eaacfce40ad9074c64fd42ac83cf74d8c8cd137718d456ced75051229e5061b8633c3366b8aada17945a7a356b337828c19da92b51ae62126575018f + languageName: node + linkType: hard + "jsbn@npm:1.1.0": version: 1.1.0 resolution: "jsbn@npm:1.1.0" @@ -3734,6 +4510,27 @@ __metadata: languageName: node linkType: hard +"json-buffer@npm:3.0.1": + version: 3.0.1 + resolution: "json-buffer@npm:3.0.1" + checksum: 10c0/0d1c91569d9588e7eef2b49b59851f297f3ab93c7b35c7c221e288099322be6b562767d11e4821da500f3219542b9afd2e54c5dc573107c1126ed1080f8e96d7 + languageName: node + linkType: hard + +"json-parse-better-errors@npm:^1.0.1": + version: 1.0.2 + resolution: "json-parse-better-errors@npm:1.0.2" + checksum: 10c0/2f1287a7c833e397c9ddd361a78638e828fc523038bb3441fd4fc144cfd2c6cd4963ffb9e207e648cf7b692600f1e1e524e965c32df5152120910e4903a47dcb + languageName: node + linkType: hard + +"json-schema-traverse@npm:^0.4.1": + version: 0.4.1 + resolution: "json-schema-traverse@npm:0.4.1" + checksum: 10c0/108fa90d4cc6f08243aedc6da16c408daf81793bf903e9fd5ab21983cda433d5d2da49e40711da016289465ec2e62e0324dcdfbc06275a607fe3233fde4942ce + languageName: node + linkType: hard + "json-schema-traverse@npm:^1.0.0": version: 1.0.0 resolution: "json-schema-traverse@npm:1.0.0" @@ -3741,6 +4538,13 @@ __metadata: languageName: node linkType: hard +"json-stable-stringify-without-jsonify@npm:^1.0.1": + version: 1.0.1 + resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" + checksum: 10c0/cb168b61fd4de83e58d09aaa6425ef71001bae30d260e2c57e7d09a5fd82223e2f22a042dedaab8db23b7d9ae46854b08bb1f91675a8be11c5cffebef5fb66a5 + languageName: node + linkType: hard + "json-stable-stringify@npm:^1.0.1": version: 1.1.1 resolution: "json-stable-stringify@npm:1.1.1" @@ -3760,6 +4564,15 @@ __metadata: languageName: node linkType: hard +"keyv@npm:^4.5.3": + version: 4.5.4 + resolution: "keyv@npm:4.5.4" + dependencies: + json-buffer: "npm:3.0.1" + checksum: 10c0/aa52f3c5e18e16bb6324876bb8b59dd02acf782a4b789c7b2ae21107fab95fab3890ed448d4f8dba80ce05391eeac4bfabb4f02a20221342982f806fa2cf271e + languageName: node + linkType: hard + "kuler@npm:^2.0.0": version: 2.0.0 resolution: "kuler@npm:2.0.0" @@ -3767,6 +4580,16 @@ __metadata: languageName: node linkType: hard +"levn@npm:^0.4.1": + version: 0.4.1 + resolution: "levn@npm:0.4.1" + dependencies: + prelude-ls: "npm:^1.2.1" + type-check: "npm:~0.4.0" + checksum: 10c0/effb03cad7c89dfa5bd4f6989364bfc79994c2042ec5966cb9b95990e2edee5cd8969ddf42616a0373ac49fac1403437deaf6e9050fbbaa3546093a59b9ac94e + languageName: node + linkType: hard + "libsodium-sumo@npm:^0.7.15": version: 0.7.15 resolution: "libsodium-sumo@npm:0.7.15" @@ -3783,6 +4606,18 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^4.0.0": + version: 4.0.0 + resolution: "load-json-file@npm:4.0.0" + dependencies: + graceful-fs: "npm:^4.1.2" + parse-json: "npm:^4.0.0" + pify: "npm:^3.0.0" + strip-bom: "npm:^3.0.0" + checksum: 10c0/6b48f6a0256bdfcc8970be2c57f68f10acb2ee7e63709b386b2febb6ad3c86198f840889cdbe71d28f741cbaa2f23a7771206b138cd1bdd159564511ca37c1d5 + languageName: node + linkType: hard + "load-json-file@npm:^7.0.1": version: 7.0.1 resolution: "load-json-file@npm:7.0.1" @@ -3790,6 +4625,22 @@ __metadata: languageName: node linkType: hard +"locate-path@npm:^6.0.0": + version: 6.0.0 + resolution: "locate-path@npm:6.0.0" + dependencies: + p-locate: "npm:^5.0.0" + checksum: 10c0/d3972ab70dfe58ce620e64265f90162d247e87159b6126b01314dd67be43d50e96a50b517bce2d9452a79409c7614054c277b5232377de50416564a77ac7aad3 + languageName: node + linkType: hard + +"lodash.merge@npm:^4.6.2": + version: 4.6.2 + resolution: "lodash.merge@npm:4.6.2" + checksum: 10c0/402fa16a1edd7538de5b5903a90228aa48eb5533986ba7fa26606a49db2572bf414ff73a2c9f5d5fd36b31c46a5d5c7e1527749c07cbcf965ccff5fbdf32c506 + languageName: node + linkType: hard + "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -3907,6 +4758,13 @@ __metadata: languageName: node linkType: hard +"memorystream@npm:^0.3.1": + version: 0.3.1 + resolution: "memorystream@npm:0.3.1" + checksum: 10c0/4bd164657711d9747ff5edb0508b2944414da3464b7fe21ac5c67cf35bba975c4b446a0124bd0f9a8be54cfc18faf92e92bd77563a20328b1ccf2ff04e9f39b9 + languageName: node + linkType: hard + "merge2@npm:^1.3.0": version: 1.4.1 resolution: "merge2@npm:1.4.1" @@ -3986,7 +4844,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^3.1.1": +"minimatch@npm:^3.0.4, minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": version: 3.1.2 resolution: "minimatch@npm:3.1.2" dependencies: @@ -4139,6 +4997,13 @@ __metadata: languageName: node linkType: hard +"natural-compare@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare@npm:1.4.0" + checksum: 10c0/f5f9a7974bfb28a91afafa254b197f0f22c684d4a1731763dda960d2c8e375b36c7d690e0d9dc8fba774c537af14a7e979129bca23d88d052fbeb9466955e447 + languageName: node + linkType: hard + "negotiator@npm:^0.6.3": version: 0.6.4 resolution: "negotiator@npm:0.6.4" @@ -4146,6 +5011,13 @@ __metadata: languageName: node linkType: hard +"nice-try@npm:^1.0.4": + version: 1.0.5 + resolution: "nice-try@npm:1.0.5" + checksum: 10c0/95568c1b73e1d0d4069a3e3061a2102d854513d37bcfda73300015b7ba4868d3b27c198d1dbbd8ebdef4112fc2ed9e895d4a0f2e1cce0bd334f2a1346dc9205f + languageName: node + linkType: hard + "node-abi@npm:^3.3.0": version: 3.71.0 resolution: "node-abi@npm:3.71.0" @@ -4238,6 +5110,48 @@ __metadata: languageName: node linkType: hard +"normalize-package-data@npm:^2.3.2": + version: 2.5.0 + resolution: "normalize-package-data@npm:2.5.0" + dependencies: + hosted-git-info: "npm:^2.1.4" + resolve: "npm:^1.10.0" + semver: "npm:2 || 3 || 4 || 5" + validate-npm-package-license: "npm:^3.0.1" + checksum: 10c0/357cb1646deb42f8eb4c7d42c4edf0eec312f3628c2ef98501963cc4bbe7277021b2b1d977f982b2edce78f5a1014613ce9cf38085c3df2d76730481357ca504 + languageName: node + linkType: hard + +"npm-run-all@npm:^4.1.5": + version: 4.1.5 + resolution: "npm-run-all@npm:4.1.5" + dependencies: + ansi-styles: "npm:^3.2.1" + chalk: "npm:^2.4.1" + cross-spawn: "npm:^6.0.5" + memorystream: "npm:^0.3.1" + minimatch: "npm:^3.0.4" + pidtree: "npm:^0.3.0" + read-pkg: "npm:^3.0.0" + shell-quote: "npm:^1.6.1" + string.prototype.padend: "npm:^3.0.0" + bin: + npm-run-all: bin/npm-run-all/index.js + run-p: bin/run-p/index.js + run-s: bin/run-s/index.js + checksum: 10c0/736ee39bd35454d3efaa4a2e53eba6c523e2e17fba21a18edcce6b221f5cab62000bef16bb6ae8aff9e615831e6b0eb25ab51d52d60e6fa6f4ea880e4c6d31f4 + languageName: node + linkType: hard + +"npm-run-path@npm:^5.2.0": + version: 5.3.0 + resolution: "npm-run-path@npm:5.3.0" + dependencies: + path-key: "npm:^4.0.0" + checksum: 10c0/124df74820c40c2eb9a8612a254ea1d557ddfab1581c3e751f825e3e366d9f00b0d76a3c94ecd8398e7f3eee193018622677e95816e8491f0797b21e30b2deba + languageName: node + linkType: hard + "npm-run-path@npm:^6.0.0": version: 6.0.0 resolution: "npm-run-path@npm:6.0.0" @@ -4267,6 +5181,13 @@ __metadata: languageName: node linkType: hard +"object-inspect@npm:^1.13.1, object-inspect@npm:^1.13.3": + version: 1.13.3 + resolution: "object-inspect@npm:1.13.3" + checksum: 10c0/cc3f15213406be89ffdc54b525e115156086796a515410a8d390215915db9f23c8eab485a06f1297402f440a33715fe8f71a528c1dcbad6e1a3bcaf5a46921d4 + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -4274,6 +5195,18 @@ __metadata: languageName: node linkType: hard +"object.assign@npm:^4.1.5": + version: 4.1.5 + resolution: "object.assign@npm:4.1.5" + dependencies: + call-bind: "npm:^1.0.5" + define-properties: "npm:^1.2.1" + has-symbols: "npm:^1.0.3" + object-keys: "npm:^1.1.1" + checksum: 10c0/60108e1fa2706f22554a4648299b0955236c62b3685c52abf4988d14fffb0e7731e00aa8c6448397e3eb63d087dcc124a9f21e1980f36d0b2667f3c18bacd469 + languageName: node + linkType: hard + "once@npm:^1.3.0, once@npm:^1.3.1, once@npm:^1.4.0": version: 1.4.0 resolution: "once@npm:1.4.0" @@ -4310,6 +5243,20 @@ __metadata: languageName: node linkType: hard +"optionator@npm:^0.9.3": + version: 0.9.4 + resolution: "optionator@npm:0.9.4" + dependencies: + deep-is: "npm:^0.1.3" + fast-levenshtein: "npm:^2.0.6" + levn: "npm:^0.4.1" + prelude-ls: "npm:^1.2.1" + type-check: "npm:^0.4.0" + word-wrap: "npm:^1.2.5" + checksum: 10c0/4afb687a059ee65b61df74dfe87d8d6815cd6883cb8b3d5883a910df72d0f5d029821f37025e4bccf4048873dbdb09acc6d303d27b8f76b1a80dd5a7d5334675 + languageName: node + linkType: hard + "ora@npm:^5.4.1": version: 5.4.1 resolution: "ora@npm:5.4.1" @@ -4334,6 +5281,24 @@ __metadata: languageName: node linkType: hard +"p-limit@npm:^3.0.2": + version: 3.1.0 + resolution: "p-limit@npm:3.1.0" + dependencies: + yocto-queue: "npm:^0.1.0" + checksum: 10c0/9db675949dbdc9c3763c89e748d0ef8bdad0afbb24d49ceaf4c46c02c77d30db4e0652ed36d0a0a7a95154335fab810d95c86153105bb73b3a90448e2bb14e1a + languageName: node + linkType: hard + +"p-locate@npm:^5.0.0": + version: 5.0.0 + resolution: "p-locate@npm:5.0.0" + dependencies: + p-limit: "npm:^3.0.2" + checksum: 10c0/2290d627ab7903b8b70d11d384fee714b797f6040d9278932754a6860845c4d3190603a0772a663c8cb5a7b21d1b16acb3a6487ebcafa9773094edc3dfe6009a + languageName: node + linkType: hard + "p-map@npm:^4.0.0": version: 4.0.0 resolution: "p-map@npm:4.0.0" @@ -4374,6 +5339,25 @@ __metadata: languageName: node linkType: hard +"parent-module@npm:^1.0.0": + version: 1.0.1 + resolution: "parent-module@npm:1.0.1" + dependencies: + callsites: "npm:^3.0.0" + checksum: 10c0/c63d6e80000d4babd11978e0d3fee386ca7752a02b035fd2435960ffaa7219dc42146f07069fb65e6e8bf1caef89daf9af7535a39bddf354d78bf50d8294f556 + languageName: node + linkType: hard + +"parse-json@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-json@npm:4.0.0" + dependencies: + error-ex: "npm:^1.3.1" + json-parse-better-errors: "npm:^1.0.1" + checksum: 10c0/8d80790b772ccb1bcea4e09e2697555e519d83d04a77c2b4237389b813f82898943a93ffff7d0d2406203bdd0c30dcf95b1661e3a53f83d0e417f053957bef32 + languageName: node + linkType: hard + "parse-ms@npm:^4.0.0": version: 4.0.0 resolution: "parse-ms@npm:4.0.0" @@ -4381,6 +5365,13 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^4.0.0": + version: 4.0.0 + resolution: "path-exists@npm:4.0.0" + checksum: 10c0/8c0bd3f5238188197dc78dced15207a4716c51cc4e3624c44fc97acf69558f5ebb9a2afff486fe1b4ee148e0c133e96c5e11a9aa5c48a3006e3467da070e5e1b + languageName: node + linkType: hard + "path-is-absolute@npm:^1.0.0": version: 1.0.1 resolution: "path-is-absolute@npm:1.0.1" @@ -4388,6 +5379,13 @@ __metadata: languageName: node linkType: hard +"path-key@npm:^2.0.1": + version: 2.0.1 + resolution: "path-key@npm:2.0.1" + checksum: 10c0/dd2044f029a8e58ac31d2bf34c34b93c3095c1481942960e84dd2faa95bbb71b9b762a106aead0646695330936414b31ca0bd862bf488a937ad17c8c5d73b32b + languageName: node + linkType: hard + "path-key@npm:^3.1.0": version: 3.1.1 resolution: "path-key@npm:3.1.1" @@ -4419,6 +5417,15 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^3.0.0": + version: 3.0.0 + resolution: "path-type@npm:3.0.0" + dependencies: + pify: "npm:^3.0.0" + checksum: 10c0/1332c632f1cac15790ebab8dd729b67ba04fc96f81647496feb1c2975d862d046f41e4b975dbd893048999b2cc90721f72924ad820acc58c78507ba7141a8e56 + languageName: node + linkType: hard + "path-type@npm:^5.0.0": version: 5.0.0 resolution: "path-type@npm:5.0.0" @@ -4447,6 +5454,22 @@ __metadata: languageName: node linkType: hard +"pidtree@npm:^0.3.0": + version: 0.3.1 + resolution: "pidtree@npm:0.3.1" + bin: + pidtree: bin/pidtree.js + checksum: 10c0/cd69b0182f749f45ab48584e3442c48c5dc4512502c18d5b0147a33b042c41a4db4269b9ce2f7c48f11833ee5e79d81f5ebc6f7bf8372d4ea55726f60dc505a1 + languageName: node + linkType: hard + +"pify@npm:^3.0.0": + version: 3.0.0 + resolution: "pify@npm:3.0.0" + checksum: 10c0/fead19ed9d801f1b1fcd0638a1ac53eabbb0945bf615f2f8806a8b646565a04a1b0e7ef115c951d225f042cca388fdc1cd3add46d10d1ed6951c20bd2998af10 + languageName: node + linkType: hard + "plur@npm:^5.1.0": version: 5.1.0 resolution: "plur@npm:5.1.0" @@ -4456,6 +5479,13 @@ __metadata: languageName: node linkType: hard +"possible-typed-array-names@npm:^1.0.0": + version: 1.0.0 + resolution: "possible-typed-array-names@npm:1.0.0" + checksum: 10c0/d9aa22d31f4f7680e20269db76791b41c3a32c01a373e25f8a4813b4d45f7456bfc2b6d68f752dc4aab0e0bb0721cb3d76fb678c9101cb7a16316664bc2c73fd + languageName: node + linkType: hard + "prebuild-install@npm:^7.1.1": version: 7.1.2 resolution: "prebuild-install@npm:7.1.2" @@ -4478,6 +5508,13 @@ __metadata: languageName: node linkType: hard +"prelude-ls@npm:^1.2.1": + version: 1.2.1 + resolution: "prelude-ls@npm:1.2.1" + checksum: 10c0/b00d617431e7886c520a6f498a2e14c75ec58f6d93ba48c3b639cf241b54232d90daa05d83a9e9b9fef6baa63cb7e1e4602c2372fea5bc169668401eb127d0cd + languageName: node + linkType: hard + "pretty-ms@npm:^9.0.0, pretty-ms@npm:^9.1.0": version: 9.1.0 resolution: "pretty-ms@npm:9.1.0" @@ -4600,6 +5637,17 @@ __metadata: languageName: node linkType: hard +"read-pkg@npm:^3.0.0": + version: 3.0.0 + resolution: "read-pkg@npm:3.0.0" + dependencies: + load-json-file: "npm:^4.0.0" + normalize-package-data: "npm:^2.3.2" + path-type: "npm:^3.0.0" + checksum: 10c0/65acf2df89fbcd506b48b7ced56a255ba00adf7ecaa2db759c86cc58212f6fd80f1f0b7a85c848551a5d0685232e9b64f45c1fd5b48d85df2761a160767eeb93 + languageName: node + linkType: hard + "readable-stream@npm:^3.1.1, readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0, readable-stream@npm:^3.6.2": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" @@ -4618,6 +5666,18 @@ __metadata: languageName: node linkType: hard +"regexp.prototype.flags@npm:^1.5.3": + version: 1.5.3 + resolution: "regexp.prototype.flags@npm:1.5.3" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-errors: "npm:^1.3.0" + set-function-name: "npm:^2.0.2" + checksum: 10c0/e1a7c7dc42cc91abf73e47a269c4b3a8f225321b7f617baa25821f6a123a91d23a73b5152f21872c566e699207e1135d075d2251cd3e84cc96d82a910adf6020 + languageName: node + linkType: hard + "require-directory@npm:^2.1.1": version: 2.1.1 resolution: "require-directory@npm:2.1.1" @@ -4641,6 +5701,13 @@ __metadata: languageName: node linkType: hard +"resolve-from@npm:^4.0.0": + version: 4.0.0 + resolution: "resolve-from@npm:4.0.0" + checksum: 10c0/8408eec31a3112ef96e3746c37be7d64020cda07c03a920f5024e77290a218ea758b26ca9529fd7b1ad283947f34b2291c1c0f6aa0ed34acfdda9c6014c8d190 + languageName: node + linkType: hard + "resolve-from@npm:^5.0.0": version: 5.0.0 resolution: "resolve-from@npm:5.0.0" @@ -4655,7 +5722,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.17.0, resolve@npm:^1.19.0": +"resolve@npm:^1.10.0, resolve@npm:^1.17.0, resolve@npm:^1.19.0": version: 1.22.8 resolution: "resolve@npm:1.22.8" dependencies: @@ -4668,7 +5735,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": +"resolve@patch:resolve@npm%3A^1.10.0#optional!builtin, resolve@patch:resolve@npm%3A^1.17.0#optional!builtin, resolve@patch:resolve@npm%3A^1.19.0#optional!builtin": version: 1.22.8 resolution: "resolve@patch:resolve@npm%3A1.22.8#optional!builtin::version=1.22.8&hash=c3c19d" dependencies: @@ -4739,17 +5806,19 @@ __metadata: "@agoric/inter-protocol": "npm:dev" "@agoric/internal": "npm:dev" "@agoric/store": "npm:dev" - "@agoric/synthetic-chain": "npm:^0.3.0" + "@agoric/synthetic-chain": "npm:^0.4.3" "@agoric/zoe": "npm:dev" - "@endo/errors": "npm:^1.2.2" - "@endo/far": "npm:^1.1.5" - "@endo/init": "npm:^1.1.4" - "@endo/marshal": "npm:^1.5.3" + "@endo/errors": "npm:^1.2.7" + "@endo/far": "npm:^1.1.8" + "@endo/init": "npm:^1.1.6" + "@endo/marshal": "npm:^1.6.1" agoric: "npm:dev" ava: "npm:^6.1.2" - execa: "npm:^9.3.1" + eslint: "npm:^8.57.0" + execa: "npm:9.1.0" + npm-run-all: "npm:^4.1.5" tsx: "npm:^4.17.0" - typescript: "npm:^5.5.4" + typescript: "npm:^5.6.3" languageName: unknown linkType: soft @@ -4778,6 +5847,18 @@ __metadata: languageName: node linkType: hard +"safe-array-concat@npm:^1.1.2": + version: 1.1.2 + resolution: "safe-array-concat@npm:1.1.2" + dependencies: + call-bind: "npm:^1.0.7" + get-intrinsic: "npm:^1.2.4" + has-symbols: "npm:^1.0.3" + isarray: "npm:^2.0.5" + checksum: 10c0/12f9fdb01c8585e199a347eacc3bae7b5164ae805cdc8c6707199dbad5b9e30001a50a43c4ee24dc9ea32dbb7279397850e9208a7e217f4d8b1cf5d90129dec9 + languageName: node + linkType: hard + "safe-buffer@npm:^5.0.1, safe-buffer@npm:~5.2.0": version: 5.2.1 resolution: "safe-buffer@npm:5.2.1" @@ -4785,6 +5866,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.3": + version: 1.0.3 + resolution: "safe-regex-test@npm:1.0.3" + dependencies: + call-bind: "npm:^1.0.6" + es-errors: "npm:^1.3.0" + is-regex: "npm:^1.1.4" + checksum: 10c0/900bf7c98dc58f08d8523b7012b468e4eb757afa624f198902c0643d7008ba777b0bdc35810ba0b758671ce887617295fb742b3f3968991b178ceca54cb07603 + languageName: node + linkType: hard + "safe-stable-stringify@npm:^2.3.1": version: 2.5.0 resolution: "safe-stable-stringify@npm:2.5.0" @@ -4799,6 +5891,15 @@ __metadata: languageName: node linkType: hard +"semver@npm:2 || 3 || 4 || 5, semver@npm:^5.5.0": + version: 5.7.2 + resolution: "semver@npm:5.7.2" + bin: + semver: bin/semver + checksum: 10c0/e4cf10f86f168db772ae95d86ba65b3fd6c5967c94d97c708ccb463b778c2ee53b914cd7167620950fc07faf5a564e6efe903836639e512a1aa15fbc9667fa25 + languageName: node + linkType: hard + "semver@npm:^6.0.0, semver@npm:^6.3.0": version: 6.3.1 resolution: "semver@npm:6.3.1" @@ -4826,12 +5927,12 @@ __metadata: languageName: node linkType: hard -"ses@npm:^1.9.1": - version: 1.9.1 - resolution: "ses@npm:1.9.1" +"ses@npm:^1.10.0": + version: 1.10.0 + resolution: "ses@npm:1.10.0" dependencies: - "@endo/env-options": "npm:^1.1.7" - checksum: 10c0/1e795542954f635aaee2749a1d548460f2978257cb29daaea76b814ef99ffa64ab5cca05fbc3d51a814a57cf9fc4563988ee93312cc53bae4eb63dfff0f0682a + "@endo/env-options": "npm:^1.1.8" + checksum: 10c0/83b92bc49e27af04eeb7ee01a2196a0c4b0906e4de51e70403aa9ffc82be1d27a0c3506f2d54da8d6d260be0855f2123a13a7e2c6896e81ec85899df1a428609 languageName: node linkType: hard @@ -4856,6 +5957,27 @@ __metadata: languageName: node linkType: hard +"set-function-name@npm:^2.0.2": + version: 2.0.2 + resolution: "set-function-name@npm:2.0.2" + dependencies: + define-data-property: "npm:^1.1.4" + es-errors: "npm:^1.3.0" + functions-have-names: "npm:^1.2.3" + has-property-descriptors: "npm:^1.0.2" + checksum: 10c0/fce59f90696c450a8523e754abb305e2b8c73586452619c2bad5f7bf38c7b6b4651895c9db895679c5bef9554339cf3ef1c329b66ece3eda7255785fbe299316 + languageName: node + linkType: hard + +"shebang-command@npm:^1.2.0": + version: 1.2.0 + resolution: "shebang-command@npm:1.2.0" + dependencies: + shebang-regex: "npm:^1.0.0" + checksum: 10c0/7b20dbf04112c456b7fc258622dafd566553184ac9b6938dd30b943b065b21dabd3776460df534cc02480db5e1b6aec44700d985153a3da46e7db7f9bd21326d + languageName: node + linkType: hard + "shebang-command@npm:^2.0.0": version: 2.0.0 resolution: "shebang-command@npm:2.0.0" @@ -4865,6 +5987,13 @@ __metadata: languageName: node linkType: hard +"shebang-regex@npm:^1.0.0": + version: 1.0.0 + resolution: "shebang-regex@npm:1.0.0" + checksum: 10c0/9abc45dee35f554ae9453098a13fdc2f1730e525a5eb33c51f096cc31f6f10a4b38074c1ebf354ae7bffa7229506083844008dfc3bb7818228568c0b2dc1fff2 + languageName: node + linkType: hard + "shebang-regex@npm:^3.0.0": version: 3.0.0 resolution: "shebang-regex@npm:3.0.0" @@ -4872,6 +6001,25 @@ __metadata: languageName: node linkType: hard +"shell-quote@npm:^1.6.1": + version: 1.8.1 + resolution: "shell-quote@npm:1.8.1" + checksum: 10c0/8cec6fd827bad74d0a49347057d40dfea1e01f12a6123bf82c4649f3ef152fc2bc6d6176e6376bffcd205d9d0ccb4f1f9acae889384d20baff92186f01ea455a + languageName: node + linkType: hard + +"side-channel@npm:^1.0.4": + version: 1.0.6 + resolution: "side-channel@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + get-intrinsic: "npm:^1.2.4" + object-inspect: "npm:^1.13.1" + checksum: 10c0/d2afd163dc733cc0a39aa6f7e39bf0c436293510dbccbff446733daeaf295857dbccf94297092ec8c53e2503acac30f0b78830876f0485991d62a90e9cad305f + languageName: node + linkType: hard + "signal-exit@npm:^3.0.0, signal-exit@npm:^3.0.2": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -4990,6 +6138,40 @@ __metadata: languageName: node linkType: hard +"spdx-correct@npm:^3.0.0": + version: 3.2.0 + resolution: "spdx-correct@npm:3.2.0" + dependencies: + spdx-expression-parse: "npm:^3.0.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/49208f008618b9119208b0dadc9208a3a55053f4fd6a0ae8116861bd22696fc50f4142a35ebfdb389e05ccf2de8ad142573fefc9e26f670522d899f7b2fe7386 + languageName: node + linkType: hard + +"spdx-exceptions@npm:^2.1.0": + version: 2.5.0 + resolution: "spdx-exceptions@npm:2.5.0" + checksum: 10c0/37217b7762ee0ea0d8b7d0c29fd48b7e4dfb94096b109d6255b589c561f57da93bf4e328c0290046115961b9209a8051ad9f525e48d433082fc79f496a4ea940 + languageName: node + linkType: hard + +"spdx-expression-parse@npm:^3.0.0": + version: 3.0.1 + resolution: "spdx-expression-parse@npm:3.0.1" + dependencies: + spdx-exceptions: "npm:^2.1.0" + spdx-license-ids: "npm:^3.0.0" + checksum: 10c0/6f8a41c87759fa184a58713b86c6a8b028250f158159f1d03ed9d1b6ee4d9eefdc74181c8ddc581a341aa971c3e7b79e30b59c23b05d2436d5de1c30bdef7171 + languageName: node + linkType: hard + +"spdx-license-ids@npm:^3.0.0": + version: 3.0.20 + resolution: "spdx-license-ids@npm:3.0.20" + checksum: 10c0/bdff7534fad6ef59be49becda1edc3fb7f5b3d6f296a715516ab9d972b8ad59af2c34b2003e01db8970d4c673d185ff696ba74c6b61d3bf327e2b3eac22c297c + languageName: node + linkType: hard + "sprintf-js@npm:^1.1.3": version: 1.1.3 resolution: "sprintf-js@npm:1.1.3" @@ -5062,6 +6244,52 @@ __metadata: languageName: node linkType: hard +"string.prototype.padend@npm:^3.0.0": + version: 3.1.6 + resolution: "string.prototype.padend@npm:3.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.2" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/8f2c8c1f3db1efcdc210668c80c87f2cea1253d6029ff296a172b5e13edc9adebeed4942d023de8d31f9b13b69f3f5d73de7141959b1f09817fba5f527e83be1 + languageName: node + linkType: hard + +"string.prototype.trim@npm:^1.2.9": + version: 1.2.9 + resolution: "string.prototype.trim@npm:1.2.9" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-abstract: "npm:^1.23.0" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/dcef1a0fb61d255778155006b372dff8cc6c4394bc39869117e4241f41a2c52899c0d263ffc7738a1f9e61488c490b05c0427faa15151efad721e1a9fb2663c2 + languageName: node + linkType: hard + +"string.prototype.trimend@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimend@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/0a0b54c17c070551b38e756ae271865ac6cc5f60dabf2e7e343cceae7d9b02e1a1120a824e090e79da1b041a74464e8477e2da43e2775c85392be30a6f60963c + languageName: node + linkType: hard + +"string.prototype.trimstart@npm:^1.0.8": + version: 1.0.8 + resolution: "string.prototype.trimstart@npm:1.0.8" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + es-object-atoms: "npm:^1.0.0" + checksum: 10c0/d53af1899959e53c83b64a5fd120be93e067da740e7e75acb433849aa640782fb6c7d4cd5b84c954c84413745a3764df135a8afeb22908b86a835290788d8366 + languageName: node + linkType: hard + "string_decoder@npm:^1.1.1": version: 1.3.0 resolution: "string_decoder@npm:1.3.0" @@ -5089,6 +6317,13 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^3.0.0": + version: 3.0.0 + resolution: "strip-bom@npm:3.0.0" + checksum: 10c0/51201f50e021ef16672593d7434ca239441b7b760e905d9f33df6e4f3954ff54ec0e0a06f100d028af0982d6f25c35cd5cda2ce34eaebccd0250b8befb90d8f1 + languageName: node + linkType: hard + "strip-final-newline@npm:^4.0.0": version: 4.0.0 resolution: "strip-final-newline@npm:4.0.0" @@ -5096,6 +6331,13 @@ __metadata: languageName: node linkType: hard +"strip-json-comments@npm:^3.1.1": + version: 3.1.1 + resolution: "strip-json-comments@npm:3.1.1" + checksum: 10c0/9681a6257b925a7fa0f285851c0e613cc934a50661fa7bb41ca9cbbff89686bb4a0ee366e6ecedc4daafd01e83eee0720111ab294366fe7c185e935475ebcecd + languageName: node + linkType: hard + "strip-json-comments@npm:~2.0.1": version: 2.0.1 resolution: "strip-json-comments@npm:2.0.1" @@ -5115,6 +6357,15 @@ __metadata: languageName: node linkType: hard +"supports-color@npm:^5.3.0": + version: 5.5.0 + resolution: "supports-color@npm:5.5.0" + dependencies: + has-flag: "npm:^3.0.0" + checksum: 10c0/6ae5ff319bfbb021f8a86da8ea1f8db52fac8bd4d499492e30ec17095b58af11f0c55f8577390a749b1c4dde691b6a0315dab78f5f54c9b3d83f8fb5905c1c05 + languageName: node + linkType: hard + "supports-color@npm:^7.1.0": version: 7.2.0 resolution: "supports-color@npm:7.2.0" @@ -5213,6 +6464,13 @@ __metadata: languageName: node linkType: hard +"text-table@npm:^0.2.0": + version: 0.2.0 + resolution: "text-table@npm:0.2.0" + checksum: 10c0/02805740c12851ea5982686810702e2f14369a5f4c5c40a836821e3eefc65ffeec3131ba324692a37608294b0fd8c1e55a2dd571ffed4909822787668ddbee5c + languageName: node + linkType: hard + "through@npm:^2.3.6": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -5273,6 +6531,15 @@ __metadata: languageName: node linkType: hard +"ts-blank-space@npm:^0.4.1": + version: 0.4.3 + resolution: "ts-blank-space@npm:0.4.3" + dependencies: + typescript: "npm:5.1.6 - 5.6.x" + checksum: 10c0/362feac2e19cf8f1936cefdc658463558e0ef88568fdb7267910c50eb20b27ab2e21b4cf8100890f9ff1568a4e185daa68947c00dd4bfe176d61f554010266e1 + languageName: node + linkType: hard + "tslib@npm:^2.1.0": version: 2.8.1 resolution: "tslib@npm:2.8.1" @@ -5305,6 +6572,15 @@ __metadata: languageName: node linkType: hard +"type-check@npm:^0.4.0, type-check@npm:~0.4.0": + version: 0.4.0 + resolution: "type-check@npm:0.4.0" + dependencies: + prelude-ls: "npm:^1.2.1" + checksum: 10c0/7b3fd0ed43891e2080bf0c5c504b418fbb3e5c7b9708d3d015037ba2e6323a28152ec163bcb65212741fa5d2022e3075ac3c76440dbd344c9035f818e8ecee58 + languageName: node + linkType: hard + "type-fest@npm:^0.13.1": version: 0.13.1 resolution: "type-fest@npm:0.13.1" @@ -5312,6 +6588,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.20.2": + version: 0.20.2 + resolution: "type-fest@npm:0.20.2" + checksum: 10c0/dea9df45ea1f0aaa4e2d3bed3f9a0bfe9e5b2592bddb92eb1bf06e50bcf98dbb78189668cd8bc31a0511d3fc25539b4cd5c704497e53e93e2d40ca764b10bfc3 + languageName: node + linkType: hard + "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -5319,7 +6602,59 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.5.4": +"typed-array-buffer@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-buffer@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.7" + es-errors: "npm:^1.3.0" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/9e043eb38e1b4df4ddf9dde1aa64919ae8bb909571c1cc4490ba777d55d23a0c74c7d73afcdd29ec98616d91bb3ae0f705fad4421ea147e1daf9528200b562da + languageName: node + linkType: hard + +"typed-array-byte-length@npm:^1.0.1": + version: 1.0.1 + resolution: "typed-array-byte-length@npm:1.0.1" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/fcebeffb2436c9f355e91bd19e2368273b88c11d1acc0948a2a306792f1ab672bce4cfe524ab9f51a0505c9d7cd1c98eff4235c4f6bfef6a198f6cfc4ff3d4f3 + languageName: node + linkType: hard + +"typed-array-byte-offset@npm:^1.0.2": + version: 1.0.2 + resolution: "typed-array-byte-offset@npm:1.0.2" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + checksum: 10c0/d2628bc739732072e39269389a758025f75339de2ed40c4f91357023c5512d237f255b633e3106c461ced41907c1bf9a533c7e8578066b0163690ca8bc61b22f + languageName: node + linkType: hard + +"typed-array-length@npm:^1.0.6": + version: 1.0.6 + resolution: "typed-array-length@npm:1.0.6" + dependencies: + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-proto: "npm:^1.0.3" + is-typed-array: "npm:^1.1.13" + possible-typed-array-names: "npm:^1.0.0" + checksum: 10c0/74253d7dc488eb28b6b2711cf31f5a9dcefc9c41b0681fd1c178ed0a1681b4468581a3626d39cd4df7aee3d3927ab62be06aa9ca74e5baf81827f61641445b77 + languageName: node + linkType: hard + +"typescript@npm:5.1.6 - 5.6.x, typescript@npm:^5.6.3": version: 5.6.3 resolution: "typescript@npm:5.6.3" bin: @@ -5329,7 +6664,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@npm%3A^5.5.4#optional!builtin": +"typescript@patch:typescript@npm%3A5.1.6 - 5.6.x#optional!builtin, typescript@patch:typescript@npm%3A^5.6.3#optional!builtin": version: 5.6.3 resolution: "typescript@patch:typescript@npm%3A5.6.3#optional!builtin::version=5.6.3&hash=8c6c40" bin: @@ -5339,6 +6674,18 @@ __metadata: languageName: node linkType: hard +"unbox-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "unbox-primitive@npm:1.0.2" + dependencies: + call-bind: "npm:^1.0.2" + has-bigints: "npm:^1.0.2" + has-symbols: "npm:^1.0.3" + which-boxed-primitive: "npm:^1.0.2" + checksum: 10c0/81ca2e81134167cc8f75fa79fbcc8a94379d6c61de67090986a2273850989dd3bae8440c163121b77434b68263e34787a675cbdcb34bb2f764c6b9c843a11b66 + languageName: node + linkType: hard + "undici-types@npm:~6.19.8": version: 6.19.8 resolution: "undici-types@npm:6.19.8" @@ -5394,6 +6741,16 @@ __metadata: languageName: node linkType: hard +"validate-npm-package-license@npm:^3.0.1": + version: 3.0.4 + resolution: "validate-npm-package-license@npm:3.0.4" + dependencies: + spdx-correct: "npm:^3.0.0" + spdx-expression-parse: "npm:^3.0.0" + checksum: 10c0/7b91e455a8de9a0beaa9fe961e536b677da7f48c9a493edf4d4d4a87fd80a7a10267d438723364e432c2fcd00b5650b5378275cded362383ef570276e6312f4f + languageName: node + linkType: hard + "wcwidth@npm:^1.0.1": version: 1.0.1 resolution: "wcwidth@npm:1.0.1" @@ -5427,6 +6784,43 @@ __metadata: languageName: node linkType: hard +"which-boxed-primitive@npm:^1.0.2": + version: 1.0.2 + resolution: "which-boxed-primitive@npm:1.0.2" + dependencies: + is-bigint: "npm:^1.0.1" + is-boolean-object: "npm:^1.1.0" + is-number-object: "npm:^1.0.4" + is-string: "npm:^1.0.5" + is-symbol: "npm:^1.0.3" + checksum: 10c0/0a62a03c00c91dd4fb1035b2f0733c341d805753b027eebd3a304b9cb70e8ce33e25317add2fe9b5fea6f53a175c0633ae701ff812e604410ddd049777cd435e + languageName: node + linkType: hard + +"which-typed-array@npm:^1.1.14, which-typed-array@npm:^1.1.15": + version: 1.1.15 + resolution: "which-typed-array@npm:1.1.15" + dependencies: + available-typed-arrays: "npm:^1.0.7" + call-bind: "npm:^1.0.7" + for-each: "npm:^0.3.3" + gopd: "npm:^1.0.1" + has-tostringtag: "npm:^1.0.2" + checksum: 10c0/4465d5348c044032032251be54d8988270e69c6b7154f8fcb2a47ff706fe36f7624b3a24246b8d9089435a8f4ec48c1c1025c5d6b499456b9e5eff4f48212983 + languageName: node + linkType: hard + +"which@npm:^1.2.9": + version: 1.3.1 + resolution: "which@npm:1.3.1" + dependencies: + isexe: "npm:^2.0.0" + bin: + which: ./bin/which + checksum: 10c0/e945a8b6bbf6821aaaef7f6e0c309d4b615ef35699576d5489b4261da9539f70393c6b2ce700ee4321c18f914ebe5644bc4631b15466ffbaad37d83151f6af59 + languageName: node + linkType: hard + "which@npm:^2.0.1": version: 2.0.2 resolution: "which@npm:2.0.2" @@ -5486,6 +6880,13 @@ __metadata: languageName: node linkType: hard +"word-wrap@npm:^1.2.5": + version: 1.2.5 + resolution: "word-wrap@npm:1.2.5" + checksum: 10c0/e0e4a1ca27599c92a6ca4c32260e8a92e8a44f4ef6ef93f803f8ed823f486e0889fc0b93be4db59c8d51b3064951d25e43d434e95dc8c960cc3a63d65d00ba20 + languageName: node + linkType: hard + "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0" @@ -5597,6 +6998,13 @@ __metadata: languageName: node linkType: hard +"yocto-queue@npm:^0.1.0": + version: 0.1.0 + resolution: "yocto-queue@npm:0.1.0" + checksum: 10c0/dceb44c28578b31641e13695d200d34ec4ab3966a5729814d5445b194933c096b7ced71494ce53a0e8820685d1d010df8b2422e5bf2cdea7e469d97ffbea306f + languageName: node + linkType: hard + "yoctocolors@npm:^2.0.0": version: 2.1.1 resolution: "yoctocolors@npm:2.1.1" diff --git a/a3p-integration/scripts/build-all-submissions.sh b/a3p-integration/scripts/build-all-submissions.sh index ad97a44d388..31ffc53dfe0 100755 --- a/a3p-integration/scripts/build-all-submissions.sh +++ b/a3p-integration/scripts/build-all-submissions.sh @@ -1,17 +1,24 @@ #!/bin/bash set -ueo pipefail -# cd prints its target, so without the redirect, we get two copies -SCRIPT_DIR=$(cd ${0%/*} > /dev/null && pwd -P) +# Look in the "proposals" subdirectory of the working directory for +# "$char:$name" subdirectories (cf. ../README.md#package-layering), and for each +# one, extract from its package.json "agoricProposal" section a list of +# "sdk-generate" entries corresponding to core-eval submission content that must +# be generated (cf ../README.md#generating-core-eval-submissions) and then use +# ./build-submission.sh to do so. + +SCRIPT_DIR=$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" &> /dev/null && pwd) IFS=$'\n' for proposal in ./proposals/?:*; do + echo >&2 "Building $proposal ..." cd $proposal - # build submission if proposal specifies an sdk-generate while read -r line; do IFS=' ' parts=($line) - $SCRIPT_DIR/build-submission.sh $proposal ${parts[@]} + "$SCRIPT_DIR"/build-submission.sh ${parts[@]} done < <(jq -r '.agoricProposal["sdk-generate"][]?' < package.json) cd - + echo >&2 "Built $proposal" done diff --git a/a3p-integration/scripts/build-submission.sh b/a3p-integration/scripts/build-submission.sh index 3470c24cf52..757c7641907 100755 --- a/a3p-integration/scripts/build-submission.sh +++ b/a3p-integration/scripts/build-submission.sh @@ -1,23 +1,34 @@ #!/bin/bash set -ueo pipefail -sdkroot=$(git rev-parse --show-toplevel) +# Usage: $0 [submission directory name] [builder script arg]... +# Run the specified builder script from packages/builders/scripts and move the +# output into the specified submission directory (defaulting to "submission") +# relative to the working directory. +# Must be run from inside agoric-sdk. -cd "$sdkroot" +builderScript=$1 +shift +submissionDir=${1:-submission} +shift || true -a3pProposalDir=$1 -builderScript=$2 -submissionDirName=${3:-submission} -submissionDir="./a3p-integration/$a3pProposalDir/$submissionDirName" -extraParams=${4:-} +# Run the builder script in a subshell at agoric-sdk. +sdkroot=$(git rev-parse --show-toplevel) +( + cd "$sdkroot" + yarn agoric run "packages/builders/scripts/$builderScript" "$@" +) -yarn agoric run "packages/builders/scripts/$builderScript" $extraParams +# Create and populate the submission directory. mkdir -p "$submissionDir" +echo >&2 "Populating $(basename -- "$(pwd -P)")/$submissionDir ..." +ls "$sdkroot"/*-plan.json | while read plan; do + # Copy from the bundle cache. + cp $(grep -oh '/.*b1-.*.json' "$plan") "$submissionDir" + + # Move from the root directory. + prefix=${plan%-plan.json} + mv "$prefix"* "$submissionDir" -plans=*-plan.json -for plan in $plans; do - base=${plan%-plan.json} - cp $(grep -oh '/.*b1-.*.json' "$base"-plan.json) "$submissionDir" - mv "$base"* "$submissionDir" ls -oS "$submissionDir" done diff --git a/a3p-integration/yarn.lock b/a3p-integration/yarn.lock index 1e9e7629514..9887f3863ba 100644 --- a/a3p-integration/yarn.lock +++ b/a3p-integration/yarn.lock @@ -5,9 +5,9 @@ __metadata: version: 8 cacheKey: 10c0 -"@agoric/synthetic-chain@npm:^0.4.0": - version: 0.4.0 - resolution: "@agoric/synthetic-chain@npm:0.4.0" +"@agoric/synthetic-chain@npm:^0.4.3": + version: 0.4.3 + resolution: "@agoric/synthetic-chain@npm:0.4.3" dependencies: "@endo/zip": "npm:^1.0.7" better-sqlite3: "npm:^9.6.0" @@ -16,14 +16,14 @@ __metadata: execa: "npm:^9.3.1" bin: synthetic-chain: dist/cli/cli.js - checksum: 10c0/3cb31bba30f4c64ac459da39aed639a3ab0405aa1d867b4897bbad21cedd40f2142785be7f2e55b7198c58c6a31674fb534e115f7e20ebe20f4de80bfb55e7c8 + checksum: 10c0/b904b531bf2d4066322e4b86b7653fa4fd88d52cce86d82d82ebaecedd526a83832488e1f82b5d0ece23cf5b13fa6bf4e49b4c25339a3c17a658c1302ef9321b languageName: node linkType: hard "@endo/zip@npm:^1.0.7": - version: 1.0.7 - resolution: "@endo/zip@npm:1.0.7" - checksum: 10c0/a1c0d155448ce877012b34c8fe8cd3a58de9eb807514c81cddeebb802ee8e552b27d8a9a40fab3f3e4c49e0cb7fea6902fa1dd12a23ff6f30b56161fc3edc1f8 + version: 1.0.9 + resolution: "@endo/zip@npm:1.0.9" + checksum: 10c0/3fccea31bd5dad938a3b5f531454d3c49513892d6d5aba1f0af1034ff0ae54c3e28a346a9df08bd9e5201354acccd631e45c9c0e68fa2848a876a3919f3830dc languageName: node linkType: hard @@ -1034,7 +1034,7 @@ __metadata: version: 0.0.0-use.local resolution: "root-workspace-0b6124@workspace:." dependencies: - "@agoric/synthetic-chain": "npm:^0.4.0" + "@agoric/synthetic-chain": "npm:^0.4.3" "@types/better-sqlite3": "npm:^7.6.11" languageName: unknown linkType: soft diff --git a/docs/env.md b/docs/env.md index 5b510c4ba3d..f7fd2b37640 100644 --- a/docs/env.md +++ b/docs/env.md @@ -164,55 +164,6 @@ for the Prometheus scrape endpoint to export telemetry. Lifetime: until we decide not to support Prometheus for metrics export -## SOLO_BRIDGE_TARGET - -Affects: solo - -This enables a proxy so that the solo bridge interface (/wallet-bridge.html) is backed by the smart wallet (/wallet/bridge.html). Dapps designed for the solo bridge can enable this until they connect to the smart wallet directly. - -```sh -BRIDGE_TARGET=http://localhost:3001 make BASE_PORT=8002 scenario3-run -``` - -Lifetime: smart wallet transition period - -## SOLO_MNEMONIC - -Affects: solo init - -Seed phrase for HD key derivation. - -## SOLO_OTEL_EXPORTER_PROMETHEUS_PORT - -Affects: solo - -Same as `OTEL_EXPORTER_PROMETHEUS_PORT`, but for solo instead of chain. - -Lifetime: ? - -## SOLO_SLOGFILE - -Same as `SLOGFILE`, but for solo instead of chain. - -Lifetime: ? - -## SOLO_SLOGSENDER - -Same as `SLOGSENDER`, but for solo instead of chain. - -Lifetime: ? - -## SOLO_MAX_DEBUG_LENGTH - -Affects: solo - -Purpose: reduce the size of each individual `console.debug` output - -Description: defaults to no limit, set to a decimal byte count to reduce the -output - -Lifetime: Until CI no longer balks on long output, or our source bundles aren't delivered via messages to the sim-chain - ## SLOGFILE Affects: cosmic-swingset @@ -265,6 +216,55 @@ have any unexpected errors. The default is `undefined`. +## SOLO_BRIDGE_TARGET + +Affects: solo + +This enables a proxy so that the solo bridge interface (/wallet-bridge.html) is backed by the smart wallet (/wallet/bridge.html). Dapps designed for the solo bridge can enable this until they connect to the smart wallet directly. + +```sh +BRIDGE_TARGET=http://localhost:3001 make BASE_PORT=8002 scenario3-run +``` + +Lifetime: smart wallet transition period + +## SOLO_MAX_DEBUG_LENGTH + +Affects: solo + +Purpose: reduce the size of each individual `console.debug` output + +Description: defaults to no limit, set to a decimal byte count to reduce the +output + +Lifetime: Until CI no longer balks on long output, or our source bundles aren't delivered via messages to the sim-chain + +## SOLO_MNEMONIC + +Affects: solo init + +Seed phrase for HD key derivation. + +## SOLO_OTEL_EXPORTER_PROMETHEUS_PORT + +Affects: solo + +Same as `OTEL_EXPORTER_PROMETHEUS_PORT`, but for solo instead of chain. + +Lifetime: ? + +## SOLO_SLOGFILE + +Same as `SLOGFILE`, but for solo instead of chain. + +Lifetime: ? + +## SOLO_SLOGSENDER + +Same as `SLOGSENDER`, but for solo instead of chain. + +Lifetime: ? + ## SWINGSET_WORKER_TYPE Affects: solo, unit tests diff --git a/golang/cosmos/app/app.go b/golang/cosmos/app/app.go index e5dc4a3c4fe..6f2d7d225b9 100644 --- a/golang/cosmos/app/app.go +++ b/golang/cosmos/app/app.go @@ -137,13 +137,22 @@ import ( const appName = "agoric" -// FlagSwingStoreExportDir defines the config flag used to specify where a -// genesis swing-store export is expected. For start from genesis, the default -// value is config/swing-store in the home directory. For genesis export, the -// value is always a "swing-store" directory sibling to the exported -// genesis.json file. -// TODO: document this flag in config, likely alongside the genesis path -const FlagSwingStoreExportDir = "swing-store-export-dir" +const ( + // FlagSwingStoreExportDir defines the config flag used to specify where a + // genesis swing-store export is expected. For start from genesis, the default + // value is config/swing-store in the home directory. For genesis export, the + // value is always a "swing-store" directory sibling to the exported + // genesis.json file. + // TODO: document this flag in config, likely alongside the genesis path + FlagSwingStoreExportDir = "swing-store-export-dir" + // FlagSwingStoreExportMode defines the export mode for the swing store + // Alongside the default mode `operational`, there are two other modes + // + // 1- `skip` mode will skip the swing store export altogether + // + // 2- `debug` mode will export all the available store + FlagSwingStoreExportMode = "swing-store-export-mode" +) var ( // DefaultNodeHome default home directories for the application daemon @@ -673,6 +682,7 @@ func NewAgoricApp( app.EvidenceKeeper = *evidenceKeeper swingStoreExportDir := cast.ToString(appOpts.Get(FlagSwingStoreExportDir)) + swingStoreExportMode := cast.ToString(appOpts.Get(FlagSwingStoreExportMode)) // NOTE: Any module instantiated in the module manager that is later modified // must be passed by reference here. @@ -702,7 +712,14 @@ func NewAgoricApp( icaModule, packetforward.NewAppModule(app.PacketForwardKeeper), vstorage.NewAppModule(app.VstorageKeeper), - swingset.NewAppModule(app.SwingSetKeeper, &app.SwingStoreExportsHandler, setBootstrapNeeded, app.ensureControllerInited, swingStoreExportDir), + swingset.NewAppModule( + app.SwingSetKeeper, + &app.SwingStoreExportsHandler, + setBootstrapNeeded, + app.ensureControllerInited, + swingStoreExportDir, + swingStoreExportMode, + ), vibcModule, vbankModule, vtransferModule, diff --git a/golang/cosmos/daemon/cmd/root.go b/golang/cosmos/daemon/cmd/root.go index 367cea44c07..07a46217348 100644 --- a/golang/cosmos/daemon/cmd/root.go +++ b/golang/cosmos/daemon/cmd/root.go @@ -386,6 +386,12 @@ const ( ExportedSwingStoreDirectoryName = "swing-store" ) +var allowedSwingSetExportModes = map[string]bool{ + swingset.SwingStoreExportModeDebug: true, + swingset.SwingStoreExportModeOperational: true, + swingset.SwingStoreExportModeSkip: true, +} + // extendCosmosExportCommand monkey-patches the "export" command added by // cosmos-sdk to add a required "export-dir" command-line flag, and create the // genesis export in the specified directory if the VM is running. @@ -396,31 +402,52 @@ func extendCosmosExportCommand(cmd *cobra.Command) { panic(err) } + var keys []string + for key := range allowedSwingSetExportModes { + keys = append(keys, key) + } + + cmd.Flags().String( + gaia.FlagSwingStoreExportMode, + swingset.SwingStoreExportModeOperational, + fmt.Sprintf( + "The mode for swingstore export (%s)", + strings.Join(keys, " | "), + ), + ) + originalRunE := cmd.RunE extendedRunE := func(cmd *cobra.Command, args []string) error { serverCtx := server.GetServerContextFromCmd(cmd) exportDir, _ := cmd.Flags().GetString(FlagExportDir) + swingStoreExportMode, _ := cmd.Flags().GetString(gaia.FlagSwingStoreExportMode) + err := os.MkdirAll(exportDir, os.ModePerm) if err != nil { return err } genesisPath := filepath.Join(exportDir, ExportedGenesisFileName) - swingStoreExportPath := filepath.Join(exportDir, ExportedSwingStoreDirectoryName) - err = os.MkdirAll(swingStoreExportPath, os.ModePerm) - if err != nil { - return err + // Since none mode doesn't perform any swing store export + // There is no point in creating the export directory + if swingStoreExportMode != swingset.SwingStoreExportModeSkip { + swingStoreExportPath := filepath.Join(exportDir, ExportedSwingStoreDirectoryName) + + err = os.MkdirAll(swingStoreExportPath, os.ModePerm) + if err != nil { + return err + } + // We unconditionally set FlagSwingStoreExportDir as for export, it makes + // little sense for users to control this location separately, and we don't + // want to override any swing-store artifacts that may be associated to the + // current genesis. + serverCtx.Viper.Set(gaia.FlagSwingStoreExportDir, swingStoreExportPath) } - // We unconditionally set FlagSwingStoreExportDir as for export, it makes - // little sense for users to control this location separately, and we don't - // want to override any swing-store artifacts that may be associated to the - // current genesis. - serverCtx.Viper.Set(gaia.FlagSwingStoreExportDir, swingStoreExportPath) - if hasVMController(serverCtx) { + if hasVMController(serverCtx) || swingStoreExportMode == swingset.SwingStoreExportModeSkip { // Capture the export in the genesisPath. // This will fail if a genesis.json already exists in the export-dir genesisFile, err := os.OpenFile( @@ -453,7 +480,16 @@ func (ac appCreator) appExport( jailAllowedAddrs []string, appOpts servertypes.AppOptions, ) (servertypes.ExportedApp, error) { - if OnExportHook != nil { + swingStoreExportMode, ok := appOpts.Get(gaia.FlagSwingStoreExportMode).(string) + if !(ok && allowedSwingSetExportModes[swingStoreExportMode]) { + return servertypes.ExportedApp{}, fmt.Errorf( + "export mode '%s' is not supported", + swingStoreExportMode, + ) + } + + // We don't have to launch VM in case the swing store export is not required + if swingStoreExportMode != swingset.SwingStoreExportModeSkip && OnExportHook != nil { if err := OnExportHook(ac.agdServer, logger, appOpts); err != nil { return servertypes.ExportedApp{}, err } @@ -464,10 +500,7 @@ func (ac appCreator) appExport( return servertypes.ExportedApp{}, errors.New("application home is not set") } - var loadLatest bool - if height == -1 { - loadLatest = true - } + loadLatest := height == -1 gaiaApp := gaia.NewAgoricApp( ac.sender, ac.agdServer, diff --git a/golang/cosmos/go.mod b/golang/cosmos/go.mod index f1c9174a507..1e0919c6a99 100644 --- a/golang/cosmos/go.mod +++ b/golang/cosmos/go.mod @@ -4,7 +4,7 @@ go 1.20 require ( cosmossdk.io/errors v1.0.0-beta.7 - cosmossdk.io/math v1.0.0-rc.0 + cosmossdk.io/math v1.4.0 github.com/armon/go-metrics v0.4.1 github.com/cosmos/cosmos-sdk v0.46.16 github.com/cosmos/ibc-apps/middleware/packet-forward-middleware/v6 v6.1.2 @@ -19,7 +19,7 @@ require ( github.com/spf13/cobra v1.7.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.14.0 - github.com/stretchr/testify v1.8.4 + github.com/stretchr/testify v1.9.0 github.com/tendermint/tendermint v0.34.29 github.com/tendermint/tm-db v0.6.7 google.golang.org/genproto/googleapis/api v0.0.0-20230711160842-782d3b101e98 @@ -161,7 +161,7 @@ require ( gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect nhooyr.io/websocket v1.8.6 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) replace ( diff --git a/golang/cosmos/go.sum b/golang/cosmos/go.sum index 7b5acee60ae..3428b14eeb3 100644 --- a/golang/cosmos/go.sum +++ b/golang/cosmos/go.sum @@ -193,8 +193,8 @@ cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoIS collectd.org v0.3.0/go.mod h1:A/8DzQBkF6abtvrT2j/AU/4tiBgJWYyh0y/oB/4MlWE= cosmossdk.io/errors v1.0.0-beta.7 h1:gypHW76pTQGVnHKo6QBkb4yFOJjC+sUGRc5Al3Odj1w= cosmossdk.io/errors v1.0.0-beta.7/go.mod h1:mz6FQMJRku4bY7aqS/Gwfcmr/ue91roMEKAmDUDpBfE= -cosmossdk.io/math v1.0.0-rc.0 h1:ml46ukocrAAoBpYKMidF0R2tQJ1Uxfns0yH8wqgMAFc= -cosmossdk.io/math v1.0.0-rc.0/go.mod h1:Ygz4wBHrgc7g0N+8+MrnTfS9LLn9aaTGa9hKopuym5k= +cosmossdk.io/math v1.4.0 h1:XbgExXFnXmF/CccPPEto40gOO7FpWu9yWNAZPN3nkNQ= +cosmossdk.io/math v1.4.0/go.mod h1:O5PkD4apz2jZs4zqFdTr16e1dcaQCc5z6lkEnrrppuk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/edwards25519 v1.0.0-rc.1 h1:m0VOOB23frXZvAOK44usCgLWvtsxIoMCTBGJZlpmGfU= filippo.io/edwards25519 v1.0.0-rc.1/go.mod h1:N1IkdkCkiLB6tki+MYJoSx2JTY9NUlxZE7eHn5EwJns= @@ -1079,8 +1079,8 @@ github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5J github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= -github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= github.com/stretchr/testify v1.2.0/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= @@ -1091,8 +1091,8 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/ github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk= -github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= +github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/subosito/gotenv v1.4.1 h1:jyEFiXpy21Wm81FBN71l9VoMMV8H8jG+qIK3GCpY6Qs= github.com/subosito/gotenv v1.4.1/go.mod h1:ayKnFf/c6rvx/2iiLrJUk1e6plDbT3edrFNGqEflhK0= github.com/syndtr/goleveldb v1.0.1-0.20210819022825-2ae1ddf74ef7 h1:epCh84lMvA70Z7CTTCmYQn2CKbY8j86K7/FAIr141uY= @@ -1872,6 +1872,6 @@ rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= rsc.io/tmplfunc v0.0.3/go.mod h1:AG3sTPzElb1Io3Yg4voV9AGZJuleGAwaVRxL9M49PhA= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/golang/cosmos/proto/agoric/vbank/vbank.proto b/golang/cosmos/proto/agoric/vbank/vbank.proto index 7884abecc9a..4b47cf71c70 100644 --- a/golang/cosmos/proto/agoric/vbank/vbank.proto +++ b/golang/cosmos/proto/agoric/vbank/vbank.proto @@ -33,6 +33,13 @@ message Params { int64 reward_smoothing_blocks = 3 [ (gogoproto.moretags) = "yaml:\"reward_smoothing_blocks\"" ]; + + // allowed_monitoring_accounts is an array of account addresses that can be + // monitored for sends and receives. An element of `"*"` will permit any + // address. + repeated string allowed_monitoring_accounts = 4 [ + (gogoproto.moretags) = "yaml:\"allowed_monitoring_accounts\"" + ]; } // The current state of the module. diff --git a/golang/cosmos/x/swingset/genesis.go b/golang/cosmos/x/swingset/genesis.go index 56c6e06e5ba..e8308e6e94e 100644 --- a/golang/cosmos/x/swingset/genesis.go +++ b/golang/cosmos/x/swingset/genesis.go @@ -1,13 +1,13 @@ package swingset import ( - // "os" "bytes" "crypto/sha256" "encoding/hex" "encoding/json" "fmt" "hash" + "io" "strings" agoric "github.com/Agoric/agoric-sdk/golang/cosmos/types" @@ -16,6 +16,20 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" ) +const ( + // SwingStoreExportModeSkip indicates swing store data should be + // excluded from the export. + SwingStoreExportModeSkip = "skip" + + // SwingStoreExportModeOperational (default) indicates export should + // have the minimal set of artifacts needed to operate a node. + SwingStoreExportModeOperational = "operational" + + // SwingStoreExportModeDebug indicates export should have the maximal + // set of artifacts available in the JS swing-store. + SwingStoreExportModeDebug = "debug" +) + func ValidateGenesis(data *types.GenesisState) error { if data == nil { return fmt.Errorf("swingset genesis data cannot be nil") @@ -130,36 +144,59 @@ func InitGenesis(ctx sdk.Context, k Keeper, swingStoreExportsHandler *SwingStore return false } -func ExportGenesis(ctx sdk.Context, k Keeper, swingStoreExportsHandler *SwingStoreExportsHandler, swingStoreExportDir string) *types.GenesisState { +func ExportGenesis( + ctx sdk.Context, + k Keeper, + swingStoreExportsHandler *SwingStoreExportsHandler, + swingStoreExportDir string, + swingStoreExportMode string, +) *types.GenesisState { gs := &types.GenesisState{ Params: k.GetParams(ctx), State: k.GetState(ctx), SwingStoreExportData: nil, } + // This will only be used in non skip mode + artifactMode := swingStoreExportMode + exportDataMode := keeper.SwingStoreExportDataModeSkip + hasher := sha256.New() snapshotHeight := uint64(ctx.BlockHeight()) - eventHandler := swingStoreGenesisEventHandler{exportDir: swingStoreExportDir, snapshotHeight: snapshotHeight, swingStore: k.GetSwingStore(ctx), hasher: sha256.New()} - - err := swingStoreExportsHandler.InitiateExport( - // The export will fail if the export of a historical height was requested - snapshotHeight, - eventHandler, - keeper.SwingStoreExportOptions{ - ArtifactMode: keeper.SwingStoreArtifactModeOperational, - ExportDataMode: keeper.SwingStoreExportDataModeSkip, - }, - ) - if err != nil { - panic(err) + if swingStoreExportMode == SwingStoreExportModeDebug { + exportDataMode = keeper.SwingStoreExportDataModeAll + snapshotHeight = 0 } - err = keeper.WaitUntilSwingStoreExportDone() - if err != nil { - panic(err) + if swingStoreExportMode != SwingStoreExportModeSkip { + eventHandler := swingStoreGenesisEventHandler{ + exportDir: swingStoreExportDir, + snapshotHeight: snapshotHeight, + swingStore: k.GetSwingStore(ctx), + hasher: hasher, + exportMode: swingStoreExportMode, + } + + err := swingStoreExportsHandler.InitiateExport( + // The export will fail if the export of a historical height was requested outside of debug mode + snapshotHeight, + eventHandler, + keeper.SwingStoreExportOptions{ + ArtifactMode: artifactMode, + ExportDataMode: exportDataMode, + }, + ) + if err != nil { + panic(err) + } + + err = keeper.WaitUntilSwingStoreExportDone() + if err != nil { + panic(err) + } } - gs.SwingStoreExportDataHash = fmt.Sprintf("sha256:%x", eventHandler.hasher.Sum(nil)) + gs.SwingStoreExportDataHash = fmt.Sprintf("sha256:%x", hasher.Sum(nil)) return gs } @@ -169,6 +206,7 @@ type swingStoreGenesisEventHandler struct { snapshotHeight uint64 swingStore sdk.KVStore hasher hash.Hash + exportMode string } func (eventHandler swingStoreGenesisEventHandler) OnExportStarted(height uint64, retrieveSwingStoreExport func() error) error { @@ -176,10 +214,12 @@ func (eventHandler swingStoreGenesisEventHandler) OnExportStarted(height uint64, } func (eventHandler swingStoreGenesisEventHandler) OnExportRetrieved(provider keeper.SwingStoreExportProvider) error { - if eventHandler.snapshotHeight != provider.BlockHeight { + if eventHandler.exportMode != SwingStoreExportModeDebug && eventHandler.snapshotHeight != provider.BlockHeight { return fmt.Errorf("snapshot block height (%d) doesn't match requested height (%d)", provider.BlockHeight, eventHandler.snapshotHeight) } + artifactsEnded := false + artifactsProvider := keeper.SwingStoreExportProvider{ GetExportDataReader: func() (agoric.KVEntryReader, error) { exportDataIterator := eventHandler.swingStore.Iterator(nil, nil) @@ -194,7 +234,45 @@ func (eventHandler swingStoreGenesisEventHandler) OnExportRetrieved(provider kee return nil }), nil }, - ReadNextArtifact: provider.ReadNextArtifact, + ReadNextArtifact: func() (types.SwingStoreArtifact, error) { + var ( + artifact types.SwingStoreArtifact + err error + encodedExportData bytes.Buffer + ) + + if !artifactsEnded { + artifact, err = provider.ReadNextArtifact() + } else { + return types.SwingStoreArtifact{}, io.EOF + } + + if err == io.EOF { + artifactsEnded = true + if eventHandler.exportMode == SwingStoreExportModeDebug { + exportDataReader, _ := provider.GetExportDataReader() + + defer exportDataReader.Close() + + err = agoric.EncodeKVEntryReaderToJsonl( + exportDataReader, + &encodedExportData, + ) + if err == nil { + artifact = types.SwingStoreArtifact{ + Data: encodedExportData.Bytes(), + Name: keeper.UntrustedExportDataArtifactName, + } + } + } + } + + return artifact, err + }, + } + + if eventHandler.exportMode == SwingStoreExportModeDebug { + artifactsProvider.BlockHeight = provider.BlockHeight } return keeper.WriteSwingStoreExportToDirectory(artifactsProvider, eventHandler.exportDir) diff --git a/golang/cosmos/x/swingset/module.go b/golang/cosmos/x/swingset/module.go index c8c646313f6..6a3465e88bf 100644 --- a/golang/cosmos/x/swingset/module.go +++ b/golang/cosmos/x/swingset/module.go @@ -80,10 +80,18 @@ type AppModule struct { setBootstrapNeeded func() ensureControllerInited func(sdk.Context) swingStoreExportDir string + swingStoreExportMode string } // NewAppModule creates a new AppModule Object -func NewAppModule(k Keeper, swingStoreExportsHandler *SwingStoreExportsHandler, setBootstrapNeeded func(), ensureControllerInited func(sdk.Context), swingStoreExportDir string) AppModule { +func NewAppModule( + k Keeper, + swingStoreExportsHandler *SwingStoreExportsHandler, + setBootstrapNeeded func(), + ensureControllerInited func(sdk.Context), + swingStoreExportDir string, + swingStoreExportMode string, +) AppModule { am := AppModule{ AppModuleBasic: AppModuleBasic{}, keeper: k, @@ -91,6 +99,7 @@ func NewAppModule(k Keeper, swingStoreExportsHandler *SwingStoreExportsHandler, setBootstrapNeeded: setBootstrapNeeded, ensureControllerInited: ensureControllerInited, swingStoreExportDir: swingStoreExportDir, + swingStoreExportMode: swingStoreExportMode, } return am } @@ -173,6 +182,12 @@ func (am AppModule) InitGenesis(ctx sdk.Context, cdc codec.JSONCodec, data json. func (am AppModule) ExportGenesis(ctx sdk.Context, cdc codec.JSONCodec) json.RawMessage { am.checkSwingStoreExportSetup() - gs := ExportGenesis(ctx, am.keeper, am.swingStoreExportsHandler, am.swingStoreExportDir) + gs := ExportGenesis( + ctx, + am.keeper, + am.swingStoreExportsHandler, + am.swingStoreExportDir, + am.swingStoreExportMode, + ) return cdc.MustMarshalJSON(gs) } diff --git a/golang/cosmos/x/vbank/README.md b/golang/cosmos/x/vbank/README.md index 99aaee4d233..24e8ee2631b 100644 --- a/golang/cosmos/x/vbank/README.md +++ b/golang/cosmos/x/vbank/README.md @@ -13,6 +13,11 @@ entirely at the ERTP level. - `feeCollectorName`: the module which handles fee distribution to stakers. - `reward_epoch_duration_blocks`: the duration (in blocks) over which fees should be given to the fee collector. +- `per_epoch_reward_fraction`: a decimal of how much of the `GiveawayPool` is paid as validator rewards per epoch +- `allowed_monitoring_accounts`: an array of account addresses that can be + monitored for sends and receives, defaulting to + `[authtypes.NewModuleAddress(types.ProvisionPoolName)]`. An element of `"*"` + will permit any address. ## State @@ -22,7 +27,7 @@ The Vbank module maintains no significant state, but will access stored state th Purse operations which change the balance result in a downcall to this module to update the underlying account. A downcall is also made to query the account balance. -Upon an `EndBlock()` call, the module will scan the block for all `MsgSend` and `MsgMultiSend` events (see `cosmos-sdk/x/bank/spec/04_events.md`) and perform a `VBANK_BALANCE_UPDATE` upcall for all denominations held in *only the mentioned module accounts*. +Upon an `EndBlock()` call, the module will scan the block for all `MsgSend` and `MsgMultiSend` events (see `cosmos-sdk/x/bank/spec/04_events.md`) and perform a `VBANK_BALANCE_UPDATE` upcall for all denominations held in *only in the allowed_monitoring_accounts*. The following fields are common to the Vbank messages: - `"address"`, `"recipient"`, `"sender"`: account address as a bech32-encoded string diff --git a/golang/cosmos/x/vbank/keeper/keeper.go b/golang/cosmos/x/vbank/keeper/keeper.go index 6cdfb877674..4e2932d8bfd 100644 --- a/golang/cosmos/x/vbank/keeper/keeper.go +++ b/golang/cosmos/x/vbank/keeper/keeper.go @@ -6,7 +6,6 @@ import ( sdk "github.com/cosmos/cosmos-sdk/types" "github.com/Agoric/agoric-sdk/golang/cosmos/x/vbank/types" - authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" vm "github.com/Agoric/agoric-sdk/golang/cosmos/vm" @@ -88,17 +87,13 @@ func (k Keeper) GetModuleAccountAddress(ctx sdk.Context, name string) sdk.AccAdd return acct.GetAddress() } -func (k Keeper) IsModuleAccount(ctx sdk.Context, addr sdk.AccAddress) bool { - acc := k.accountKeeper.GetAccount(ctx, addr) - if acc == nil { - return false - } - _, ok := acc.(authtypes.ModuleAccountI) - return ok +func (k Keeper) IsAllowedMonitoringAccount(ctx sdk.Context, addr sdk.AccAddress) bool { + params := k.GetParams(ctx) + return params.IsAllowedMonitoringAccount(addr.String()) } func (k Keeper) GetParams(ctx sdk.Context) (params types.Params) { - k.paramSpace.GetParamSet(ctx, ¶ms) + k.paramSpace.GetParamSetIfExists(ctx, ¶ms) return params } diff --git a/golang/cosmos/x/vbank/keeper/migrations.go b/golang/cosmos/x/vbank/keeper/migrations.go new file mode 100644 index 00000000000..360d691bd61 --- /dev/null +++ b/golang/cosmos/x/vbank/keeper/migrations.go @@ -0,0 +1,30 @@ +package keeper + +import ( + "github.com/Agoric/agoric-sdk/golang/cosmos/x/vbank/types" + sdk "github.com/cosmos/cosmos-sdk/types" +) + +// Migrator handles in-place store migrations. +type Migrator struct { + keeper Keeper +} + +// NewMigrator creates a new Migrator based on the keeper. +func NewMigrator(keeper Keeper) Migrator { + return Migrator{keeper: keeper} +} + +// Migrate1to2 migrates from version 1 to 2. +func (m Migrator) Migrate1to2(ctx sdk.Context) error { + params := m.keeper.GetParams(ctx) + if params.AllowedMonitoringAccounts != nil { + return nil + } + + defaultParams := types.DefaultParams() + params.AllowedMonitoringAccounts = defaultParams.AllowedMonitoringAccounts + m.keeper.SetParams(ctx, params) + + return nil +} diff --git a/golang/cosmos/x/vbank/module.go b/golang/cosmos/x/vbank/module.go index 812b474eb86..0d755d6a60b 100644 --- a/golang/cosmos/x/vbank/module.go +++ b/golang/cosmos/x/vbank/module.go @@ -91,7 +91,7 @@ func (AppModule) Name() string { return ModuleName } -func (AppModule) ConsensusVersion() uint64 { return 1 } +func (AppModule) ConsensusVersion() uint64 { return 2 } // BeginBlock implements the AppModule interface func (am AppModule) BeginBlock(ctx sdk.Context, req abci.RequestBeginBlock) { @@ -157,7 +157,7 @@ NextEvent: addressToUpdate = make(map[string]sdk.Coins, len(addressToUpdate)) for addr, denoms := range unfilteredAddresses { accAddr, err := sdk.AccAddressFromBech32(addr) - if err == nil && am.keeper.IsModuleAccount(ctx, accAddr) { + if err == nil && am.keeper.IsAllowedMonitoringAccount(ctx, accAddr) { // Pass through the module account. addressToUpdate[addr] = denoms } @@ -204,6 +204,12 @@ func (am AppModule) RegisterServices(cfg module.Configurator) { tx := &types.UnimplementedMsgServer{} types.RegisterMsgServer(cfg.MsgServer(), tx) types.RegisterQueryServer(cfg.QueryServer(), am.keeper) + + m := keeper.NewMigrator(am.keeper) + err := cfg.RegisterMigration(types.ModuleName, 1, m.Migrate1to2) + if err != nil { + panic(err) + } } // InitGenesis performs genesis initialization for the ibc-transfer module. It returns diff --git a/golang/cosmos/x/vbank/types/params.go b/golang/cosmos/x/vbank/types/params.go index 82398e9948d..010f8c954c1 100644 --- a/golang/cosmos/x/vbank/types/params.go +++ b/golang/cosmos/x/vbank/types/params.go @@ -6,14 +6,18 @@ import ( yaml "gopkg.in/yaml.v2" sdk "github.com/cosmos/cosmos-sdk/types" + authtypes "github.com/cosmos/cosmos-sdk/x/auth/types" paramtypes "github.com/cosmos/cosmos-sdk/x/params/types" ) +const AllowAllMonitoringAccountsPattern = "*" + // Parameter keys var ( ParamStoreKeyRewardEpochDurationBlocks = []byte("reward_epoch_duration_blocks") ParamStoreKeyRewardSmoothingBlocks = []byte("reward_smoothing_blocks") ParamStoreKeyPerEpochRewardFraction = []byte("per_epoch_reward_fraction") + ParamStoreKeyAllowedMonitoringAccounts = []byte("allowed_monitoring_accounts") ) // ParamKeyTable returns the parameter key table. @@ -21,12 +25,14 @@ func ParamKeyTable() paramtypes.KeyTable { return paramtypes.NewKeyTable().RegisterParamSet(&Params{}) } -// DefaultParams returns default distribution parameters +// DefaultParams returns default parameters func DefaultParams() Params { + provisionAddress := authtypes.NewModuleAddress(ProvisionPoolName) return Params{ RewardEpochDurationBlocks: 0, RewardSmoothingBlocks: 1, PerEpochRewardFraction: sdk.OneDec(), + AllowedMonitoringAccounts: []string{provisionAddress.String()}, } } @@ -67,12 +73,27 @@ func (p Params) RewardRate(pool sdk.Coins, blocks int64) sdk.Coins { return sdk.NewCoins(coins...) } +// IsAllowedMonitoringAccount checks to see if a given address is allowed to monitor its balance. +func (p Params) IsAllowedMonitoringAccount(addr string) bool { + for _, pat := range p.AllowedMonitoringAccounts { + switch pat { + case AllowAllMonitoringAccountsPattern, addr: + // Got an AllowAll pattern or an exact match. + return true + } + } + + // No match found. + return false +} + // ParamSetPairs returns the parameter set pairs. func (p *Params) ParamSetPairs() paramtypes.ParamSetPairs { return paramtypes.ParamSetPairs{ paramtypes.NewParamSetPair(ParamStoreKeyRewardEpochDurationBlocks, &p.RewardEpochDurationBlocks, validateRewardEpochDurationBlocks), paramtypes.NewParamSetPair(ParamStoreKeyRewardSmoothingBlocks, &p.RewardSmoothingBlocks, validateRewardSmoothingBlocks), paramtypes.NewParamSetPair(ParamStoreKeyPerEpochRewardFraction, &p.PerEpochRewardFraction, validatePerEpochRewardFraction), + paramtypes.NewParamSetPair(ParamStoreKeyAllowedMonitoringAccounts, &p.AllowedMonitoringAccounts, validateAllowedMonitoringAccounts), } } @@ -84,7 +105,12 @@ func (p Params) ValidateBasic() error { if err := validatePerEpochRewardFraction(p.PerEpochRewardFraction); err != nil { return err } - + if err := validateRewardSmoothingBlocks(p.RewardSmoothingBlocks); err != nil { + return err + } + if err := validateAllowedMonitoringAccounts(p.AllowedMonitoringAccounts); err != nil { + return err + } return nil } @@ -130,3 +156,18 @@ func validatePerEpochRewardFraction(i interface{}) error { return nil } + +func validateAllowedMonitoringAccounts(i interface{}) error { + v, ok := i.([]string) + if !ok { + return fmt.Errorf("invalid parameter type: %T", i) + } + + for a, acc := range v { + if acc == "" { + return fmt.Errorf("allowed monitoring accounts element[%d] cannot be empty", a) + } + } + + return nil +} diff --git a/golang/cosmos/x/vbank/types/vbank.pb.go b/golang/cosmos/x/vbank/types/vbank.pb.go index 1b1e8b5d947..7c690f3dd8f 100644 --- a/golang/cosmos/x/vbank/types/vbank.pb.go +++ b/golang/cosmos/x/vbank/types/vbank.pb.go @@ -39,6 +39,10 @@ type Params struct { // an epoch's rewards. If zero, use the same value as // reward_epoch_duration_blocks. RewardSmoothingBlocks int64 `protobuf:"varint,3,opt,name=reward_smoothing_blocks,json=rewardSmoothingBlocks,proto3" json:"reward_smoothing_blocks,omitempty" yaml:"reward_smoothing_blocks"` + // allowed_monitoring_accounts is an array of account addresses that can be + // monitored for sends and receives. An element of `"*"` will permit any + // address. + AllowedMonitoringAccounts []string `protobuf:"bytes,4,rep,name=allowed_monitoring_accounts,json=allowedMonitoringAccounts,proto3" json:"allowed_monitoring_accounts,omitempty" yaml:"allowed_monitoring_accounts"` } func (m *Params) Reset() { *m = Params{} } @@ -87,6 +91,13 @@ func (m *Params) GetRewardSmoothingBlocks() int64 { return 0 } +func (m *Params) GetAllowedMonitoringAccounts() []string { + if m != nil { + return m.AllowedMonitoringAccounts + } + return nil +} + // The current state of the module. type State struct { // rewardPool is the current balance of rewards in the module account. @@ -170,42 +181,45 @@ func init() { func init() { proto.RegisterFile("agoric/vbank/vbank.proto", fileDescriptor_5e89b3b9e5e671b4) } var fileDescriptor_5e89b3b9e5e671b4 = []byte{ - // 550 bytes of a gzipped FileDescriptorProto - 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x93, 0x31, 0x6f, 0xd3, 0x40, - 0x14, 0xc7, 0x73, 0x49, 0xa8, 0xe0, 0x5a, 0x06, 0x4c, 0x01, 0x27, 0x20, 0x3b, 0x32, 0x02, 0xc2, - 0x80, 0xad, 0xc2, 0x82, 0x22, 0x31, 0xd4, 0x84, 0x8e, 0xa8, 0x72, 0x06, 0xa4, 0x2e, 0xd1, 0xd9, - 0x39, 0x1c, 0x2b, 0xb6, 0x9f, 0xb9, 0xbb, 0x14, 0xba, 0xf2, 0x09, 0x10, 0x13, 0x6c, 0x9d, 0xf9, - 0x24, 0x1d, 0x3b, 0x22, 0x24, 0x0c, 0x4a, 0x16, 0x16, 0x96, 0x7c, 0x02, 0xe4, 0xbb, 0x8b, 0x9a, - 0x20, 0x54, 0x60, 0x49, 0x7c, 0xfe, 0xbd, 0xf7, 0xfc, 0x7f, 0xff, 0x77, 0x0f, 0x9b, 0x24, 0x06, - 0x96, 0x44, 0xde, 0x61, 0x48, 0xf2, 0x89, 0xfa, 0x75, 0x0b, 0x06, 0x02, 0x8c, 0x2d, 0x45, 0x5c, - 0xf9, 0xae, 0xbd, 0x1d, 0x43, 0x0c, 0x12, 0x78, 0xd5, 0x93, 0x8a, 0x69, 0x5b, 0x11, 0xf0, 0x0c, - 0xb8, 0x17, 0x12, 0x4e, 0xbd, 0xc3, 0x9d, 0x90, 0x0a, 0xb2, 0xe3, 0x45, 0x90, 0xe4, 0x8a, 0x3b, - 0x3f, 0xeb, 0x78, 0x63, 0x9f, 0x30, 0x92, 0x71, 0x63, 0x8c, 0x6f, 0x31, 0xfa, 0x9a, 0xb0, 0xd1, - 0x90, 0x16, 0x10, 0x8d, 0x87, 0xa3, 0x29, 0x23, 0x22, 0x81, 0x7c, 0x18, 0xa6, 0x10, 0x4d, 0xb8, - 0x89, 0x3a, 0xa8, 0xdb, 0xf0, 0xef, 0x2d, 0x4a, 0xfb, 0xf6, 0x11, 0xc9, 0xd2, 0x9e, 0x73, 0x5e, - 0xb4, 0x13, 0xb4, 0x14, 0x7e, 0x56, 0xd1, 0xbe, 0x86, 0xbe, 0x64, 0xc6, 0x7b, 0x84, 0x5b, 0x05, - 0x65, 0x3a, 0x53, 0x97, 0x79, 0xc9, 0x48, 0x54, 0xc5, 0x98, 0xf5, 0x0e, 0xea, 0x5e, 0xf2, 0x5f, - 0x9c, 0x94, 0x76, 0xed, 0x4b, 0x69, 0xdf, 0x8d, 0x13, 0x31, 0x9e, 0x86, 0x6e, 0x04, 0x99, 0xa7, - 0x7b, 0x51, 0x7f, 0x0f, 0xf8, 0x68, 0xe2, 0x89, 0xa3, 0x82, 0x72, 0xb7, 0x4f, 0xa3, 0x45, 0x69, - 0xdf, 0x51, 0xaa, 0x46, 0x09, 0x8f, 0x18, 0x15, 0xf4, 0xcf, 0xd5, 0x9d, 0xe0, 0x7a, 0x41, 0x99, - 0x14, 0x15, 0x48, 0xb2, 0xa7, 0x81, 0x71, 0x80, 0x6f, 0xe8, 0x58, 0x9e, 0x01, 0x88, 0x71, 0x92, - 0xc7, 0xcb, 0xce, 0x1b, 0xb2, 0x73, 0x67, 0x51, 0xda, 0xd6, 0x5a, 0xe7, 0xbf, 0x07, 0x3a, 0xc1, - 0x35, 0x45, 0x06, 0x4b, 0xa0, 0x1a, 0xee, 0x5d, 0xfc, 0x70, 0x6c, 0xd7, 0x7e, 0x1c, 0xdb, 0xc8, - 0xf9, 0xda, 0xc0, 0x17, 0x06, 0x82, 0x08, 0x6a, 0xbc, 0x45, 0x78, 0x53, 0xd7, 0x29, 0x00, 0x52, - 0x13, 0x75, 0x1a, 0xdd, 0xcd, 0x87, 0x2d, 0x57, 0x75, 0xe7, 0x56, 0x03, 0x73, 0xf5, 0xc0, 0xdc, - 0xa7, 0x90, 0xe4, 0xfe, 0x5e, 0xe5, 0xc8, 0xa2, 0xb4, 0x8d, 0x35, 0x0d, 0x55, 0xae, 0xf3, 0xe9, - 0x9b, 0xdd, 0xfd, 0x07, 0x9f, 0xaa, 0x32, 0x3c, 0xc0, 0x2a, 0x73, 0x1f, 0x20, 0x35, 0x3e, 0x22, - 0x7c, 0x55, 0x17, 0x92, 0x2d, 0x0c, 0x49, 0x06, 0xd3, 0x5c, 0x98, 0xf5, 0xbf, 0x89, 0x79, 0xae, - 0xc5, 0xb4, 0xd7, 0xc4, 0xac, 0xd6, 0xf8, 0x3f, 0x51, 0x57, 0x54, 0x05, 0xe9, 0xd7, 0xae, 0xcc, - 0x37, 0x9e, 0xe0, 0xcb, 0x29, 0xe1, 0x62, 0xc8, 0xe9, 0xab, 0x29, 0xcd, 0x23, 0x2a, 0xc7, 0xd0, - 0xf4, 0xcd, 0x45, 0x69, 0x6f, 0xab, 0xaf, 0xae, 0x61, 0x27, 0xd8, 0xaa, 0xce, 0x03, 0x7d, 0x34, - 0x72, 0x6c, 0x49, 0xae, 0xa5, 0x8d, 0x12, 0x2e, 0x58, 0x12, 0x4e, 0xcf, 0xee, 0xa8, 0xd9, 0x94, - 0x63, 0xbd, 0x7f, 0x76, 0x75, 0xce, 0x8f, 0x77, 0x82, 0x9b, 0x55, 0x80, 0xba, 0x36, 0xfd, 0x15, - 0x2c, 0x45, 0xf7, 0x9a, 0xd5, 0x7c, 0xfd, 0xe0, 0x64, 0x66, 0xa1, 0xd3, 0x99, 0x85, 0xbe, 0xcf, - 0x2c, 0xf4, 0x6e, 0x6e, 0xd5, 0x4e, 0xe7, 0x56, 0xed, 0xf3, 0xdc, 0xaa, 0x1d, 0x3c, 0x5e, 0xf1, - 0x62, 0x57, 0xad, 0xb4, 0xda, 0x5f, 0xe9, 0x45, 0x0c, 0x29, 0xc9, 0xe3, 0xa5, 0x49, 0x6f, 0xf4, - 0xb6, 0x4b, 0x87, 0xc2, 0x0d, 0xb9, 0xaa, 0x8f, 0x7e, 0x05, 0x00, 0x00, 0xff, 0xff, 0xbc, 0x95, - 0x56, 0xb1, 0x0a, 0x04, 0x00, 0x00, + // 597 bytes of a gzipped FileDescriptorProto + 0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x94, 0x94, 0x3f, 0x6f, 0xd3, 0x4e, + 0x18, 0xc7, 0xe3, 0x26, 0xbf, 0xea, 0xd7, 0x6b, 0x19, 0x30, 0x05, 0x9c, 0x16, 0xd9, 0xd1, 0x21, + 0x4a, 0x18, 0xb0, 0x55, 0x58, 0x50, 0x25, 0x86, 0x9a, 0xd2, 0x0d, 0x54, 0xb9, 0x03, 0x52, 0x97, + 0xe8, 0x7c, 0xb9, 0x3a, 0x56, 0x6d, 0x3f, 0xe1, 0xee, 0xd2, 0xd2, 0x95, 0x57, 0x80, 0x98, 0x60, + 0xeb, 0xcc, 0x2b, 0xe9, 0xd8, 0x05, 0x09, 0x21, 0x61, 0x50, 0xbb, 0x30, 0xe7, 0x15, 0xa0, 0xfb, + 0x53, 0xda, 0x20, 0x14, 0x60, 0x49, 0xe2, 0x7c, 0xbe, 0xcf, 0x93, 0xef, 0xf3, 0x27, 0x0f, 0xf2, + 0x48, 0x06, 0x3c, 0xa7, 0xd1, 0x7e, 0x4a, 0xaa, 0x3d, 0xf3, 0x1a, 0x0e, 0x39, 0x48, 0x70, 0x17, + 0x0c, 0x09, 0xf5, 0x77, 0x4b, 0x8b, 0x19, 0x64, 0xa0, 0x41, 0xa4, 0x3e, 0x19, 0xcd, 0x92, 0x4f, + 0x41, 0x94, 0x20, 0xa2, 0x94, 0x08, 0x16, 0xed, 0xaf, 0xa6, 0x4c, 0x92, 0xd5, 0x88, 0x42, 0x5e, + 0x19, 0x8e, 0x3f, 0x36, 0xd1, 0xec, 0x16, 0xe1, 0xa4, 0x14, 0xee, 0x00, 0xdd, 0xe2, 0xec, 0x80, + 0xf0, 0x7e, 0x8f, 0x0d, 0x81, 0x0e, 0x7a, 0xfd, 0x11, 0x27, 0x32, 0x87, 0xaa, 0x97, 0x16, 0x40, + 0xf7, 0x84, 0xe7, 0x74, 0x9c, 0x6e, 0x33, 0xbe, 0x3b, 0xae, 0x83, 0xdb, 0x87, 0xa4, 0x2c, 0xd6, + 0xf0, 0x34, 0x35, 0x4e, 0xda, 0x06, 0x3f, 0x55, 0x74, 0xc3, 0xc2, 0x58, 0x33, 0xf7, 0xad, 0x83, + 0xda, 0x43, 0xc6, 0x6d, 0xa4, 0x4d, 0xb3, 0xcb, 0x09, 0x55, 0x1a, 0x6f, 0xa6, 0xe3, 0x74, 0xe7, + 0xe2, 0x17, 0xc7, 0x75, 0xd0, 0xf8, 0x5c, 0x07, 0x2b, 0x59, 0x2e, 0x07, 0xa3, 0x34, 0xa4, 0x50, + 0x46, 0xb6, 0x16, 0xf3, 0x76, 0x5f, 0xf4, 0xf7, 0x22, 0x79, 0x38, 0x64, 0x22, 0xdc, 0x60, 0x74, + 0x5c, 0x07, 0x77, 0x8c, 0xab, 0x7e, 0x2e, 0x28, 0x67, 0x92, 0xfd, 0x3e, 0x3b, 0x4e, 0x6e, 0x0c, + 0x19, 0xd7, 0xa6, 0x12, 0x4d, 0x36, 0x2d, 0x70, 0x77, 0xd0, 0x4d, 0xab, 0x15, 0x25, 0x80, 0x1c, + 0xe4, 0x55, 0x76, 0x5e, 0x79, 0x53, 0x57, 0x8e, 0xc7, 0x75, 0xe0, 0x4f, 0x54, 0xfe, 0xab, 0x10, + 0x27, 0xd7, 0x0d, 0xd9, 0x3e, 0x07, 0xb6, 0xe0, 0x5d, 0xb4, 0x4c, 0x8a, 0x02, 0x0e, 0x58, 0xbf, + 0x57, 0x42, 0x95, 0x4b, 0xe0, 0x2a, 0x88, 0x50, 0x0a, 0xa3, 0x4a, 0x0a, 0xaf, 0xd5, 0x69, 0x76, + 0xe7, 0xe2, 0x95, 0x71, 0x1d, 0x60, 0x93, 0x7f, 0x8a, 0x18, 0x27, 0x6d, 0x4b, 0x9f, 0xfd, 0x84, + 0xeb, 0x96, 0xad, 0xfd, 0xff, 0xee, 0x28, 0x68, 0x7c, 0x3f, 0x0a, 0x1c, 0xfc, 0xa5, 0x89, 0xfe, + 0xdb, 0x96, 0x44, 0x32, 0xf7, 0xb5, 0x83, 0xe6, 0xad, 0xdf, 0x21, 0x40, 0xe1, 0x39, 0x9d, 0x66, + 0x77, 0xfe, 0x41, 0x3b, 0x34, 0x5d, 0x0c, 0xd5, 0x62, 0x84, 0x76, 0x31, 0xc2, 0x27, 0x90, 0x57, + 0xf1, 0xa6, 0xea, 0xfc, 0xb8, 0x0e, 0xdc, 0x89, 0x5a, 0x55, 0x2c, 0xfe, 0xf0, 0x35, 0xe8, 0xfe, + 0xc5, 0x3c, 0x54, 0x1a, 0x91, 0x20, 0x13, 0xb9, 0x05, 0x50, 0xb8, 0xef, 0x1d, 0x74, 0xcd, 0x26, + 0xd2, 0xad, 0xea, 0x91, 0x52, 0x39, 0xf6, 0x66, 0xfe, 0x64, 0xe6, 0xb9, 0x35, 0xb3, 0x34, 0x61, + 0xe6, 0x72, 0x8e, 0x7f, 0x33, 0x75, 0xd5, 0x64, 0xd0, 0x73, 0x59, 0xd7, 0xf1, 0xee, 0x63, 0x74, + 0xa5, 0x20, 0x42, 0xf6, 0x04, 0x7b, 0x39, 0x62, 0x15, 0x65, 0x7a, 0xdc, 0xad, 0xd8, 0x1b, 0xd7, + 0xc1, 0xa2, 0xf9, 0xd5, 0x09, 0x8c, 0x93, 0x05, 0xf5, 0xbc, 0x6d, 0x1f, 0xdd, 0x0a, 0xf9, 0x9a, + 0x5b, 0x6b, 0xfd, 0x5c, 0x48, 0x9e, 0xa7, 0xa3, 0x8b, 0xff, 0x82, 0xd7, 0xd2, 0xeb, 0x73, 0xef, + 0x62, 0x45, 0xa7, 0xeb, 0x71, 0xb2, 0xac, 0x04, 0x66, 0x3d, 0x37, 0x2e, 0x61, 0x6d, 0x7a, 0xad, + 0xa5, 0xe6, 0x1b, 0x27, 0xc7, 0xa7, 0xbe, 0x73, 0x72, 0xea, 0x3b, 0xdf, 0x4e, 0x7d, 0xe7, 0xcd, + 0x99, 0xdf, 0x38, 0x39, 0xf3, 0x1b, 0x9f, 0xce, 0xfc, 0xc6, 0xce, 0xa3, 0x4b, 0xbd, 0x58, 0x37, + 0xa7, 0xc3, 0xdc, 0x09, 0xdd, 0x8b, 0x0c, 0x0a, 0x52, 0x65, 0xe7, 0x4d, 0x7a, 0x65, 0xaf, 0x8a, + 0xee, 0x50, 0x3a, 0xab, 0x4f, 0xc2, 0xc3, 0x1f, 0x01, 0x00, 0x00, 0xff, 0xff, 0x60, 0x18, 0x80, + 0x8f, 0x72, 0x04, 0x00, 0x00, } func (this *Params) Equal(that interface{}) bool { @@ -236,6 +250,14 @@ func (this *Params) Equal(that interface{}) bool { if this.RewardSmoothingBlocks != that1.RewardSmoothingBlocks { return false } + if len(this.AllowedMonitoringAccounts) != len(that1.AllowedMonitoringAccounts) { + return false + } + for i := range this.AllowedMonitoringAccounts { + if this.AllowedMonitoringAccounts[i] != that1.AllowedMonitoringAccounts[i] { + return false + } + } return true } func (this *State) Equal(that interface{}) bool { @@ -301,6 +323,15 @@ func (m *Params) MarshalToSizedBuffer(dAtA []byte) (int, error) { _ = i var l int _ = l + if len(m.AllowedMonitoringAccounts) > 0 { + for iNdEx := len(m.AllowedMonitoringAccounts) - 1; iNdEx >= 0; iNdEx-- { + i -= len(m.AllowedMonitoringAccounts[iNdEx]) + copy(dAtA[i:], m.AllowedMonitoringAccounts[iNdEx]) + i = encodeVarintVbank(dAtA, i, uint64(len(m.AllowedMonitoringAccounts[iNdEx]))) + i-- + dAtA[i] = 0x22 + } + } if m.RewardSmoothingBlocks != 0 { i = encodeVarintVbank(dAtA, i, uint64(m.RewardSmoothingBlocks)) i-- @@ -410,6 +441,12 @@ func (m *Params) Size() (n int) { if m.RewardSmoothingBlocks != 0 { n += 1 + sovVbank(uint64(m.RewardSmoothingBlocks)) } + if len(m.AllowedMonitoringAccounts) > 0 { + for _, s := range m.AllowedMonitoringAccounts { + l = len(s) + n += 1 + l + sovVbank(uint64(l)) + } + } return n } @@ -547,6 +584,38 @@ func (m *Params) Unmarshal(dAtA []byte) error { break } } + case 4: + if wireType != 2 { + return fmt.Errorf("proto: wrong wireType = %d for field AllowedMonitoringAccounts", wireType) + } + var stringLen uint64 + for shift := uint(0); ; shift += 7 { + if shift >= 64 { + return ErrIntOverflowVbank + } + if iNdEx >= l { + return io.ErrUnexpectedEOF + } + b := dAtA[iNdEx] + iNdEx++ + stringLen |= uint64(b&0x7F) << shift + if b < 0x80 { + break + } + } + intStringLen := int(stringLen) + if intStringLen < 0 { + return ErrInvalidLengthVbank + } + postIndex := iNdEx + intStringLen + if postIndex < 0 { + return ErrInvalidLengthVbank + } + if postIndex > l { + return io.ErrUnexpectedEOF + } + m.AllowedMonitoringAccounts = append(m.AllowedMonitoringAccounts, string(dAtA[iNdEx:postIndex])) + iNdEx = postIndex default: iNdEx = preIndex skippy, err := skipVbank(dAtA[iNdEx:]) diff --git a/golang/cosmos/x/vbank/vbank_test.go b/golang/cosmos/x/vbank/vbank_test.go index a308eada914..9a64b016e45 100644 --- a/golang/cosmos/x/vbank/vbank_test.go +++ b/golang/cosmos/x/vbank/vbank_test.go @@ -439,6 +439,7 @@ func Test_Receive_GiveToRewardDistributor(t *testing.T) { params := types.DefaultParams() params.RewardEpochDurationBlocks = 0 params.RewardSmoothingBlocks = tt.duration + params.AllowedMonitoringAccounts = []string{"*"} keeper.SetParams(ctx, params) keeper.SetState(ctx, types.State{RewardPool: tt.rewardPool}) @@ -524,7 +525,7 @@ func Test_EndBlock_Events(t *testing.T) { } keeper, ctx := makeTestKit(acct, bank) // Turn off rewards. - keeper.SetParams(ctx, types.Params{PerEpochRewardFraction: sdk.ZeroDec()}) + keeper.SetParams(ctx, types.Params{PerEpochRewardFraction: sdk.ZeroDec(), AllowedMonitoringAccounts: []string{"*"}}) msgsSent := []string{} keeper.PushAction = func(ctx sdk.Context, action vm.Action) error { bz, err := json.Marshal(action) @@ -804,15 +805,19 @@ func Test_Module_Account(t *testing.T) { } modAddr := sdk.MustAccAddressFromBech32(moduleBech32) - if !keeper.IsModuleAccount(ctx, modAddr) { - t.Errorf("got IsModuleAccount modAddr = false, want true") + if keeper.IsAllowedMonitoringAccount(ctx, modAddr) { + t.Errorf("got IsAllowedMonitoringAccount modAddr = true, want false") + } + provisionPool := authtypes.NewModuleAddress("vbank/provision") + if !keeper.IsAllowedMonitoringAccount(ctx, provisionPool) { + t.Errorf("got IsAllowedMonitoringAccount provisionPool = false, want true") } notModAddr := sdk.MustAccAddressFromBech32(addr1) - if keeper.IsModuleAccount(ctx, notModAddr) { - t.Errorf("got IsModuleAccount notModAddr = true, want false") + if keeper.IsAllowedMonitoringAccount(ctx, notModAddr) { + t.Errorf("got IsAllowedMonitoringAccount notModAddr = true, want false") } missingAddr := sdk.MustAccAddressFromBech32(addr2) - if keeper.IsModuleAccount(ctx, missingAddr) { - t.Errorf("got IsModuleAccount missingAddr = false, want true") + if keeper.IsAllowedMonitoringAccount(ctx, missingAddr) { + t.Errorf("got IsAllowedMonitoringAccount missingAddr = false, want true") } } diff --git a/multichain-testing/package.json b/multichain-testing/package.json index f666fd07867..7dd607339da 100644 --- a/multichain-testing/package.json +++ b/multichain-testing/package.json @@ -17,7 +17,7 @@ "starship:stop": "make stop", "postinstall": "patch-package" }, - "packageManager": "yarn@4.1.1", + "packageManager": "yarn@4.5.3", "devDependencies": { "@agoric/cosmic-proto": "0.4.1-dev-08f8549.0", "@cosmjs/crypto": "^0.32.4", @@ -35,7 +35,7 @@ "ava": "^6.1.3", "eslint": "^8.56.0", "eslint-config-prettier": "^9.1.0", - "execa": "^9.2.0", + "execa": "9.1.0", "fs-extra": "^11.2.0", "patch-package": "^8.0.0", "starshipjs": "2.4.1", diff --git a/multichain-testing/test/send-anywhere.test.ts b/multichain-testing/test/send-anywhere.test.ts index 717e1b5282e..376853600f0 100644 --- a/multichain-testing/test/send-anywhere.test.ts +++ b/multichain-testing/test/send-anywhere.test.ts @@ -10,6 +10,8 @@ import { createWallet } from '../tools/wallet.js'; import { AmountMath } from '@agoric/ertp'; import { makeQueryClient } from '../tools/query.js'; import type { Amount } from '@agoric/ertp/src/types.js'; +import chainInfo from '../starship-chain-info.js'; +import { denomHash, withChainCapabilities } from '@agoric/orchestration'; const test = anyTest as TestFn; @@ -17,7 +19,7 @@ const accounts = ['osmosis1', 'osmosis2', 'cosmoshub1', 'cosmoshub2']; const contractName = 'sendAnywhere'; const contractBuilder = - '../packages/builders/scripts/testing/start-send-anywhere.js'; + '../packages/builders/scripts/testing/init-send-anywhere.js'; test.before(async t => { const { deleteTestKeys, setupTestKeys, ...rest } = await commonSetup(t); @@ -25,7 +27,36 @@ test.before(async t => { const wallets = await setupTestKeys(accounts); t.context = { ...rest, wallets, deleteTestKeys }; const { startContract } = rest; - await startContract(contractName, contractBuilder); + + const assetInfo = { + uosmo: { + baseName: 'osmosis', + chainName: 'osmosis', + baseDenom: 'uosmo', + }, + [`ibc/${denomHash({ denom: 'uosmo', channelId: chainInfo.agoric.connections['osmosislocal'].transferChannel.channelId })}`]: + { + baseName: 'osmosis', + chainName: 'agoric', + baseDenom: 'uosmo', + }, + uatom: { + baseName: 'cosmoshub', + chainName: 'cosmoshub', + baseDenom: 'uatom', + }, + [`ibc/${denomHash({ denom: 'uatom', channelId: chainInfo.agoric.connections['gaialocal'].transferChannel.channelId })}`]: + { + baseName: 'cosmoshub', + chainName: 'agoric', + baseDenom: 'uatom', + }, + }; + + await startContract(contractName, contractBuilder, { + chainInfo: JSON.stringify(withChainCapabilities(chainInfo)), + assetInfo: JSON.stringify(assetInfo), + }); }); test.after(async t => { diff --git a/multichain-testing/test/support.ts b/multichain-testing/test/support.ts index 9c2a297296e..f98b5a13f08 100644 --- a/multichain-testing/test/support.ts +++ b/multichain-testing/test/support.ts @@ -89,6 +89,7 @@ export const commonSetup = async (t: ExecutionContext) => { const startContract = async ( contractName: string, contractBuilder: string, + builderOpts?: Record, ) => { const { vstorageClient } = tools; const instances = Object.fromEntries( @@ -98,7 +99,7 @@ export const commonSetup = async (t: ExecutionContext) => { return t.log('Contract found. Skipping installation...'); } t.log('bundle and install contract', contractName); - await deployBuilder(contractBuilder); + await deployBuilder(contractBuilder, builderOpts); await retryUntilCondition( () => vstorageClient.queryData(`published.agoricNames.instance`), res => contractName in Object.fromEntries(res), diff --git a/multichain-testing/tools/deploy.ts b/multichain-testing/tools/deploy.ts index 17b70cf5bb4..52a460f6094 100755 --- a/multichain-testing/tools/deploy.ts +++ b/multichain-testing/tools/deploy.ts @@ -2,6 +2,7 @@ import { createRequire } from 'module'; import type { AgdTools } from './agd-tools.js'; import type { CoreEvalPlan } from '@agoric/deploy-script-support/src/writeCoreEvalParts.js'; +import { flags } from './agd-lib.js'; const nodeRequire = createRequire(import.meta.url); @@ -10,10 +11,16 @@ export const makeDeployBuilder = ( readJSON: typeof import('fs-extra').readJSON, execa: typeof import('execa').execa, ) => - async function deployBuilder(builder: string) { + async function deployBuilder( + builder: string, + builderOpts?: Record, + ) { console.log(`building plan: ${builder}`); - // build the plan - const { stdout } = await execa`agoric run ${builder}`; + const args = ['run', builder]; + if (builderOpts) { + args.push(...flags(builderOpts)); + } + const { stdout } = await execa('agoric', args); const match = stdout.match(/ (?[-\w]+)-permit.json/); if (!(match && match.groups)) { throw Error('no permit found'); diff --git a/multichain-testing/tools/e2e-tools.js b/multichain-testing/tools/e2e-tools.js index df46fbd65b0..ec0759d9232 100644 --- a/multichain-testing/tools/e2e-tools.js +++ b/multichain-testing/tools/e2e-tools.js @@ -342,7 +342,7 @@ const voteLatestProposalAndWait = async ({ } // @ts-expect-error cast - return info; + return { ...info, proposal_id: lastProposalId }; }; /** @@ -399,7 +399,10 @@ const runCoreEval = async ( log(detail.proposal_id, detail.voting_end_time, detail.status); // TODO: how long is long enough? poll? - await blockTool.waitForBlock(5, { step: 'run', propsal: detail.proposal_id }); + await blockTool.waitForBlock(5, { + step: 'run', + proposal: detail.proposal_id, + }); assert(detail.status, 'PROPOSAL_STATUS_PASSED'); return detail; diff --git a/multichain-testing/yarn.lock b/multichain-testing/yarn.lock index 43128e1d183..92f4a0e5cdd 100644 --- a/multichain-testing/yarn.lock +++ b/multichain-testing/yarn.lock @@ -2128,9 +2128,9 @@ __metadata: languageName: node linkType: hard -"execa@npm:^9.2.0": - version: 9.2.0 - resolution: "execa@npm:9.2.0" +"execa@npm:9.1.0": + version: 9.1.0 + resolution: "execa@npm:9.1.0" dependencies: "@sindresorhus/merge-streams": "npm:^4.0.0" cross-spawn: "npm:^7.0.3" @@ -2144,7 +2144,7 @@ __metadata: signal-exit: "npm:^4.1.0" strip-final-newline: "npm:^4.0.0" yoctocolors: "npm:^2.0.0" - checksum: 10c0/339e69bd01bfdc032122ef18d412ccda4386c7752b864607c2e8683a1531b4aab436744aeacee548e1be239adb2b52888da64ffd761e7e22f56f8f14cf66e4a7 + checksum: 10c0/9a4810b93d098eb0bed48793b61c3aa3e5804867c2c5808cd2a597a6e71738151a74dc792909085ce1d38e89f4b0e078d93ffd165aaca2d9a6728f3616f8e5c0 languageName: node linkType: hard @@ -3912,7 +3912,7 @@ __metadata: ava: "npm:^6.1.3" eslint: "npm:^8.56.0" eslint-config-prettier: "npm:^9.1.0" - execa: "npm:^9.2.0" + execa: "npm:9.1.0" fs-extra: "npm:^11.2.0" patch-package: "npm:^8.0.0" starshipjs: "npm:2.4.1" diff --git a/package.json b/package.json index 7df7a02d670..a3298917d17 100644 --- a/package.json +++ b/package.json @@ -10,13 +10,13 @@ "type": "module", "packageManager": "yarn@1.22.22", "devDependencies": { - "@endo/eslint-plugin": "^2.2.2", + "@endo/eslint-plugin": "^2.2.3", "@google-cloud/monitoring": "^4.1.0", "@jessie.js/eslint-plugin": "^0.4.1", "@types/express": "^4.17.17", - "@types/node": "^22.0.0", + "@types/node": "^22.9.0", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "conventional-changelog-conventionalcommits": "^4.6.0", "eslint": "^8.57.0", "eslint-config-airbnb-base": "^15.0.0", @@ -36,7 +36,7 @@ "type-coverage": "^2.27.1", "typedoc": "^0.26.7", "typedoc-plugin-markdown": "^4.2.1", - "typescript": "^5.6.2", + "typescript": "~5.7.1", "typescript-eslint": "^7.18.0" }, "resolutions": { @@ -65,7 +65,6 @@ "lint": "run-s --continue-on-error lint:*", "lint:packages": "yarn lerna run --no-bail lint", "test": "yarn lerna run --no-bail test", - "test:c8-all": "rm -rf coverage/tmp && C8_OPTIONS=\"--clean=false --temp-directory=$PWD/coverage/tmp\" lerna run test:c8", "test:xs": "yarn workspaces run test:xs", "build": "yarn workspaces run build && scripts/agd-builder.sh stamp yarn-built", "postinstall": "patch-package && scripts/agd-builder.sh stamp yarn-installed", diff --git a/packages/ERTP/package.json b/packages/ERTP/package.json index a35a4ac0be5..70a36391edd 100644 --- a/packages/ERTP/package.json +++ b/packages/ERTP/package.json @@ -12,7 +12,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "yarn test:xs-worker", "test:xs-unit": "exit 0", "test:xs-worker": "SWINGSET_WORKER_TYPE=xs-worker ava -c 2 test/swingsetTests", @@ -39,21 +39,21 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/notifier": "^0.6.2", "@agoric/store": "^0.9.2", "@agoric/vat-data": "^0.5.2", "@agoric/zone": "^0.2.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", - "@endo/bundle-source": "^3.4.2", + "@endo/bundle-source": "^3.5.0", "@fast-check/ava": "^1.1.5", "ava": "^5.3.0", "tsd": "^0.31.1" diff --git a/packages/ERTP/src/amountStore.js b/packages/ERTP/src/amountStore.js index 8b611f9b11c..344a0f85386 100644 --- a/packages/ERTP/src/amountStore.js +++ b/packages/ERTP/src/amountStore.js @@ -1,6 +1,6 @@ import { AmountMath } from './amountMath.js'; -/** @import {Amount, AssetKind, AmountValue, AssetKindForValue, AssetValueForKind, Brand, MathHelpers} from './types.js' */ +/** @import {Amount, AssetKind} from './types.js' */ /** * @template {AssetKind} [K=AssetKind] diff --git a/packages/ERTP/src/index.js b/packages/ERTP/src/index.js index f6bdf75eb53..54834a01b7f 100644 --- a/packages/ERTP/src/index.js +++ b/packages/ERTP/src/index.js @@ -5,12 +5,5 @@ export * from './amountMath.js'; export * from './issuerKit.js'; export * from './typeGuards.js'; -/** - * Importing Baggage from `@agoric/ertp` is deprecated. Import Baggage from - * `@agoric/vat-data` instead - * - * @import {Baggage} from '@agoric/vat-data' - */ - // eslint-disable-next-line import/export export * from './types-index.js'; diff --git a/packages/ERTP/src/legacy-payment-helpers.js b/packages/ERTP/src/legacy-payment-helpers.js index bb8f22749a3..8b3520bc001 100644 --- a/packages/ERTP/src/legacy-payment-helpers.js +++ b/packages/ERTP/src/legacy-payment-helpers.js @@ -7,7 +7,7 @@ import { AmountMath } from './amountMath.js'; /** * @import {ERef} from '@endo/far'; - * @import {Amount, AssetKind, AmountValue, AssetKindForValue, Payment, Brand, Purse} from './types.js'; + * @import {Amount, AssetKind, Payment, Purse} from './types.js'; */ /** diff --git a/packages/ERTP/src/paymentLedger.js b/packages/ERTP/src/paymentLedger.js index 45835366b5d..adc03ce9b7e 100644 --- a/packages/ERTP/src/paymentLedger.js +++ b/packages/ERTP/src/paymentLedger.js @@ -2,7 +2,6 @@ /// -/* eslint-disable no-use-before-define */ import { X, q, Fail, annotateError } from '@endo/errors'; import { isPromise } from '@endo/promise-kit'; import { mustMatch, M, keyEQ } from '@agoric/store'; diff --git a/packages/ERTP/src/purse.js b/packages/ERTP/src/purse.js index 323b7c8d24a..183a4dbd909 100644 --- a/packages/ERTP/src/purse.js +++ b/packages/ERTP/src/purse.js @@ -4,7 +4,7 @@ import { AmountMath } from './amountMath.js'; import { makeTransientNotifierKit } from './transientNotifier.js'; import { makeAmountStore } from './amountStore.js'; -/** @import {Amount, AssetKind, AmountValue, AssetKindForValue, RecoverySetsOption, Brand, Payment} from './types.js' */ +/** @import {AssetKind, RecoverySetsOption, Brand, Payment} from './types.js' */ const EMPTY_COPY_SET = makeCopySet([]); diff --git a/packages/ERTP/src/transientNotifier.js b/packages/ERTP/src/transientNotifier.js index 112c358a5a2..a445a365e66 100644 --- a/packages/ERTP/src/transientNotifier.js +++ b/packages/ERTP/src/transientNotifier.js @@ -6,7 +6,7 @@ import { makeNotifierKit } from '@agoric/notifier'; /** * @import {Purse} from './types.js'; - * @import {LatestTopic, NotifierRecord} from '@agoric/notifier'; + * @import {NotifierRecord} from '@agoric/notifier'; */ // Note: Virtual for high cardinality, but *not* durable, and so diff --git a/packages/ERTP/src/typeGuards.js b/packages/ERTP/src/typeGuards.js index ad035ec832d..f66267ec0d2 100644 --- a/packages/ERTP/src/typeGuards.js +++ b/packages/ERTP/src/typeGuards.js @@ -75,10 +75,8 @@ const AmountValueShape = M.or( CopyBagValueShape, ); -export const AmountShape = harden({ - brand: BrandShape, - value: AmountValueShape, -}); +export const AmountShape = { brand: BrandShape, value: AmountValueShape }; +harden(AmountShape); /** * To be used to guard an amount pattern argument, i.e., an argument which is a @@ -94,10 +92,8 @@ export const AmountShape = harden({ export const AmountPatternShape = M.pattern(); /** @type {TypedPattern} */ -export const RatioShape = harden({ - numerator: AmountShape, - denominator: AmountShape, -}); +export const RatioShape = { numerator: AmountShape, denominator: AmountShape }; +harden(RatioShape); /** * Returns true if value is a Nat bigint. @@ -158,13 +154,14 @@ export const DisplayInfoShape = M.splitRecord( }, ); -export const IssuerKitShape = harden({ +export const IssuerKitShape = { brand: BrandShape, mint: MintShape, mintRecoveryPurse: PurseShape, issuer: IssuerShape, displayInfo: DisplayInfoShape, -}); +}; +harden(IssuerKitShape); // //////////////////////// Interfaces ///////////////////////////////////////// @@ -235,10 +232,11 @@ export const makeIssuerInterfaces = ( receive: getInterfaceGuardPayload(PurseI).methodGuards.deposit, }); - const PurseIKit = harden({ + const PurseIKit = { purse: PurseI, depositFacet: DepositFacetI, - }); + }; + harden(PurseIKit); return harden({ IssuerI, diff --git a/packages/ERTP/src/types.ts b/packages/ERTP/src/types.ts index 92b7b5b18fd..5195da07f12 100644 --- a/packages/ERTP/src/types.ts +++ b/packages/ERTP/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { LatestTopic } from '@agoric/notifier'; import type { ERef } from '@endo/far'; import type { RemotableObject } from '@endo/pass-style'; diff --git a/packages/SwingSet/package.json b/packages/SwingSet/package.json index 282286861b8..4bf8c271ca7 100644 --- a/packages/SwingSet/package.json +++ b/packages/SwingSet/package.json @@ -27,7 +27,7 @@ "@types/yargs-parser": "^21.0.0" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/kmarshal": "^0.1.0", "@agoric/store": "^0.9.2", @@ -37,23 +37,23 @@ "@agoric/time": "^0.3.2", "@agoric/vat-data": "^0.5.2", "@agoric/xsnap-lockdown": "^0.14.0", - "@endo/base64": "^1.0.8", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/check-bundle": "^1.0.11", - "@endo/compartment-mapper": "^1.3.1", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/import-bundle": "^1.3.1", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", - "@endo/ses-ava": "^1.2.7", - "@endo/stream": "^1.2.7", - "@endo/zip": "^1.0.8", + "@endo/base64": "^1.0.9", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/check-bundle": "^1.0.12", + "@endo/compartment-mapper": "^1.4.0", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/import-bundle": "^1.3.2", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", + "@endo/ses-ava": "^1.2.8", + "@endo/stream": "^1.2.8", + "@endo/zip": "^1.0.9", "ansi-styles": "^6.2.1", "anylogger": "^0.21.0", "better-sqlite3": "^9.1.1", diff --git a/packages/SwingSet/src/controller/initializeKernel.js b/packages/SwingSet/src/controller/initializeKernel.js index aa84c4b0216..dfe3ba00157 100644 --- a/packages/SwingSet/src/controller/initializeKernel.js +++ b/packages/SwingSet/src/controller/initializeKernel.js @@ -1,5 +1,3 @@ -/* eslint-disable no-use-before-define */ - import { assert, Fail } from '@endo/errors'; import { makeMarshal } from '@endo/marshal'; import { Far } from '@endo/far'; diff --git a/packages/SwingSet/src/controller/upgradeSwingset.js b/packages/SwingSet/src/controller/upgradeSwingset.js index 3c12c97f0b6..4c4ca4fd364 100644 --- a/packages/SwingSet/src/controller/upgradeSwingset.js +++ b/packages/SwingSet/src/controller/upgradeSwingset.js @@ -10,13 +10,38 @@ import { import { enumeratePrefixedKeys } from '../kernel/state/storageHelper.js'; /** - * @import {RunQueueEvent} from '../types-internal.js'; + * @import {ReapDirtThreshold, RunQueueEvent} from '../types-internal.js'; */ -const upgradeVatV0toV1 = (kvStore, defaultReapDirtThreshold, vatID) => { - // This is called, once per vat, when upgradeSwingset migrates from - // v0 to v1 +/** + * Parse a string of decimal digits into a number. + * + * @param {string} digits + * @param {string} label + * @returns {number} + */ +const mustParseInt = (digits, label) => { + assert( + digits.match(/^\d+$/), + `expected ${label}=${digits} to be a decimal integer`, + ); + return Number(digits); +}; +/** + * Called for each vat when upgradeSwingset migrates from v0 to v1. + * + * @param {KVStore} kvStore + * @param {(key: string) => string} getRequired + * @param {ReapDirtThreshold} defaultReapDirtThreshold + * @param {string} vatID + */ +const upgradeVatV0toV1 = ( + kvStore, + getRequired, + defaultReapDirtThreshold, + vatID, +) => { // schema v0: // Each vat has a `vNN.reapInterval` and `vNN.reapCountdown`. // vNN.options has a `.reapInterval` property (however it was not @@ -33,15 +58,10 @@ const upgradeVatV0toV1 = (kvStore, defaultReapDirtThreshold, vatID) => { // `defaultReapDirtThreshold`) const reapDirtKey = `${vatID}.reapDirt`; - - assert(kvStore.has(oldReapIntervalKey), oldReapIntervalKey); - assert(kvStore.has(oldReapCountdownKey), oldReapCountdownKey); assert(!kvStore.has(reapDirtKey), reapDirtKey); - const reapIntervalString = kvStore.get(oldReapIntervalKey); - const reapCountdownString = kvStore.get(oldReapCountdownKey); - assert(reapIntervalString !== undefined); - assert(reapCountdownString !== undefined); + const reapIntervalString = getRequired(oldReapIntervalKey); + const reapCountdownString = getRequired(oldReapCountdownKey); const intervalIsNever = reapIntervalString === 'never'; const countdownIsNever = reapCountdownString === 'never'; @@ -62,8 +82,11 @@ const upgradeVatV0toV1 = (kvStore, defaultReapDirtThreshold, vatID) => { threshold.never = true; } else { // deduce delivery count from old countdown values - const reapInterval = Number.parseInt(reapIntervalString, 10); - const reapCountdown = Number.parseInt(reapCountdownString, 10); + const reapInterval = mustParseInt(reapIntervalString, oldReapIntervalKey); + const reapCountdown = mustParseInt( + reapCountdownString, + oldReapCountdownKey, + ); const deliveries = reapInterval - reapCountdown; reapDirt.deliveries = Math.max(deliveries, 0); // just in case if (reapInterval !== defaultReapDirtThreshold.deliveries) { @@ -76,7 +99,7 @@ const upgradeVatV0toV1 = (kvStore, defaultReapDirtThreshold, vatID) => { kvStore.set(reapDirtKey, JSON.stringify(reapDirt)); // Update options to use the new schema. - const options = JSON.parse(kvStore.get(vatOptionsKey)); + const options = JSON.parse(getRequired(vatOptionsKey)); delete options.reapInterval; options.reapDirtThreshold = threshold; kvStore.set(vatOptionsKey, JSON.stringify(options)); @@ -104,14 +127,11 @@ const upgradeVatV0toV1 = (kvStore, defaultReapDirtThreshold, vatID) => { */ export const upgradeSwingset = kernelStorage => { const { kvStore } = kernelStorage; - let modified = false; /** @type {RunQueueEvent[]} */ const upgradeEvents = []; - let vstring = kvStore.get('version'); - if (vstring === undefined) { - vstring = '0'; - } - let version = Number(vstring); + const vstring = kvStore.get('version'); + const version = Number(vstring) || 0; + let newVersion; /** * @param {string} key @@ -166,11 +186,7 @@ export const upgradeSwingset = kernelStorage => { assert(kvStore.has(oldDefaultReapIntervalKey)); assert(!kvStore.has(DEFAULT_REAP_DIRT_THRESHOLD_KEY)); - /** - * @typedef { import('../types-internal.js').ReapDirtThreshold } ReapDirtThreshold - */ - - /** @type ReapDirtThreshold */ + /** @type {ReapDirtThreshold} */ const threshold = { deliveries: 'never', gcKrefs: 'never', @@ -179,9 +195,7 @@ export const upgradeSwingset = kernelStorage => { const oldValue = getRequired(oldDefaultReapIntervalKey); if (oldValue !== 'never') { - const value = Number.parseInt(oldValue, 10); - assert.typeof(value, 'number'); - threshold.deliveries = value; + threshold.deliveries = mustParseInt(oldValue, oldDefaultReapIntervalKey); // if BOYD wasn't turned off entirely (eg // defaultReapInterval='never', which only happens in unit // tests), then pretend we wanted a gcKrefs= threshold all @@ -196,22 +210,20 @@ export const upgradeSwingset = kernelStorage => { // now upgrade all vats for (const [_name, vatID] of getAllStaticVats(kvStore)) { - upgradeVatV0toV1(kvStore, threshold, vatID); + upgradeVatV0toV1(kvStore, getRequired, threshold, vatID); } for (const vatID of getAllDynamicVats(getRequired)) { - upgradeVatV0toV1(kvStore, threshold, vatID); + upgradeVatV0toV1(kvStore, getRequired, threshold, vatID); } - modified = true; - version = 1; + newVersion = 1; } if (version < 2) { // schema v2: add vats.terminated = [] assert(!kvStore.has('vats.terminated')); kvStore.set('vats.terminated', JSON.stringify([])); - modified = true; - version = 2; + newVersion = 2; } if (version < 3) { @@ -322,10 +334,11 @@ export const upgradeSwingset = kernelStorage => { } console.log(` - #9039 remediation complete, ${count} notifies to inject`); - modified = true; - version = 3; + newVersion = 3; } + const modified = newVersion !== undefined; + if (upgradeEvents.length) { assert(modified); // stash until host calls controller.injectQueuedUpgradeEvents() @@ -335,7 +348,7 @@ export const upgradeSwingset = kernelStorage => { } if (modified) { - kvStore.set('version', `${version}`); + kvStore.set('version', `${newVersion}`); } return harden({ modified }); }; diff --git a/packages/SwingSet/src/devices/lib/deviceTools.js b/packages/SwingSet/src/devices/lib/deviceTools.js index 9b5c91aaf28..624cfe0eb3d 100644 --- a/packages/SwingSet/src/devices/lib/deviceTools.js +++ b/packages/SwingSet/src/devices/lib/deviceTools.js @@ -24,7 +24,6 @@ export function buildSerializationTools(syscall, deviceName) { send(method, args) { assert.typeof(method, 'string'); assert(Array.isArray(args), args); - // eslint-disable-next-line no-use-before-define const capdata = serialize([method, args]); syscall.sendOnly(slot, capdata); }, diff --git a/packages/SwingSet/src/kernel/kernel.js b/packages/SwingSet/src/kernel/kernel.js index b68d6836b95..cd20086dde7 100644 --- a/packages/SwingSet/src/kernel/kernel.js +++ b/packages/SwingSet/src/kernel/kernel.js @@ -1128,7 +1128,6 @@ export default function buildKernel( } else if (message.type === 'changeVatOptions') { // prettier-ignore return `changeVatOptions ${message.vatID} options: ${JSON.stringify(message.options)}`; - // eslint-disable-next-line no-use-before-define } else if (gcMessages.includes(message.type)) { // prettier-ignore return `${message.type} ${message.vatID} ${message.krefs.map(e=>`@${e}`).join(' ')}`; diff --git a/packages/SwingSet/src/kernel/state/kernelKeeper.js b/packages/SwingSet/src/kernel/state/kernelKeeper.js index 976e8d919f1..02d43b45ea0 100644 --- a/packages/SwingSet/src/kernel/state/kernelKeeper.js +++ b/packages/SwingSet/src/kernel/state/kernelKeeper.js @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import { Nat, isNat } from '@endo/nat'; import { assert, Fail } from '@endo/errors'; import { diff --git a/packages/SwingSet/src/kernel/vat-warehouse.js b/packages/SwingSet/src/kernel/vat-warehouse.js index 2d4a167c398..96ecf828d2a 100644 --- a/packages/SwingSet/src/kernel/vat-warehouse.js +++ b/packages/SwingSet/src/kernel/vat-warehouse.js @@ -389,7 +389,6 @@ export function makeVatWarehouse({ // entriesReplayed, // retval of replayTranscript() above // ); ephemeral.vats.set(vatID, result); - // eslint-disable-next-line no-use-before-define await applyAvailabilityPolicy(vatID); return result; } @@ -596,7 +595,6 @@ export function makeVatWarehouse({ // /** @type { KernelDeliveryObject } */ const kd = harden(['bringOutYourDead']); - // eslint-disable-next-line no-use-before-define const vd = kernelDeliveryToVatDelivery(vatID, kd); const vs = kernelSlog.provideVatSlogger(vatID).vatSlog; await deliverToVat(vatID, kd, vd, vs); diff --git a/packages/SwingSet/src/supervisors/subprocess-node/supervisor-subprocess-node.js b/packages/SwingSet/src/supervisors/subprocess-node/supervisor-subprocess-node.js index 8f1067b84ca..912ea44c231 100644 --- a/packages/SwingSet/src/supervisors/subprocess-node/supervisor-subprocess-node.js +++ b/packages/SwingSet/src/supervisors/subprocess-node/supervisor-subprocess-node.js @@ -36,6 +36,7 @@ workerLog(`supervisor started`); function makeNetstringReader({ fd, encoding }) { const input = Buffer.alloc(32 * 1024); + /** @type {Buffer} */ let buffered = Buffer.alloc(0); let decoded = []; diff --git a/packages/SwingSet/src/typeGuards.js b/packages/SwingSet/src/typeGuards.js index dd313d11b14..44bbb67b365 100644 --- a/packages/SwingSet/src/typeGuards.js +++ b/packages/SwingSet/src/typeGuards.js @@ -10,10 +10,11 @@ export const ManagerType = M.or( const Bundle = M.splitRecord({ moduleType: M.string() }); -const SwingsetConfigOptions = harden({ +const SwingsetConfigOptions = { creationOptions: M.splitRecord({}, { critical: M.boolean() }), parameters: M.recordOf(M.string(), M.any()), -}); +}; +harden(SwingsetConfigOptions); const SwingSetConfigProperties = M.or( M.splitRecord({ sourceSpec: M.string() }, SwingsetConfigOptions), diff --git a/packages/SwingSet/src/vats/comms/delivery.js b/packages/SwingSet/src/vats/comms/delivery.js index bdfd8703226..c513a877812 100644 --- a/packages/SwingSet/src/vats/comms/delivery.js +++ b/packages/SwingSet/src/vats/comms/delivery.js @@ -1,5 +1,3 @@ -/* eslint-disable no-use-before-define */ - import { assert, Fail } from '@endo/errors'; import { kser } from '@agoric/kmarshal'; import { parseLocalSlot, insistLocalType } from './parseLocalSlots.js'; diff --git a/packages/SwingSet/src/vats/comms/state.js b/packages/SwingSet/src/vats/comms/state.js index 65813f276b7..8e0f9a616eb 100644 --- a/packages/SwingSet/src/vats/comms/state.js +++ b/packages/SwingSet/src/vats/comms/state.js @@ -150,7 +150,6 @@ export function makeState(syscall) { store.set('r.nextID', '1'); store.set('initialized', 'true'); if (controller) { - // eslint-disable-next-line no-use-before-define addMetaObject(controller); cdebug(`comms controller is ${controller}`); } @@ -393,7 +392,6 @@ export function makeState(syscall) { // the object is unreachable const { owner, isReachable, isRecognizable } = - // eslint-disable-next-line no-use-before-define getOwnerAndStatus(lref); if (isReachable) { // but the exporter doesn't realize it yet, so schedule a @@ -558,7 +556,6 @@ export function makeState(syscall) { isReachable = isReachableByKernel(lref); isRecognizable = !!mapToKernel(lref); } else { - // eslint-disable-next-line no-use-before-define const remote = getRemote(owner); isReachable = remote.isReachable(lref); isRecognizable = !!remote.mapToRemote(lref); @@ -794,7 +791,6 @@ export function makeState(syscall) { insistPromiseIsUnresolved, markPromiseAsResolved, - // eslint-disable-next-line no-use-before-define getRemote, addRemote, getRemoteIDForName, diff --git a/packages/SwingSet/src/vats/timer/vat-timer.js b/packages/SwingSet/src/vats/timer/vat-timer.js index 1f1ce669439..7e137bbe540 100644 --- a/packages/SwingSet/src/vats/timer/vat-timer.js +++ b/packages/SwingSet/src/vats/timer/vat-timer.js @@ -1,5 +1,3 @@ -/* eslint-disable no-use-before-define */ - import { assert } from '@endo/errors'; import { Far, E, passStyleOf } from '@endo/far'; import { makePromiseKit } from '@endo/promise-kit'; diff --git a/packages/SwingSet/src/vats/vat-admin/vat-vat-admin.js b/packages/SwingSet/src/vats/vat-admin/vat-vat-admin.js index 965fcb47864..675db94cbb1 100644 --- a/packages/SwingSet/src/vats/vat-admin/vat-vat-admin.js +++ b/packages/SwingSet/src/vats/vat-admin/vat-vat-admin.js @@ -100,7 +100,6 @@ export function buildRootObject(vatPowers, _vatParameters, baggage) { // getNotifier: ({ state }) => state.notifier, // XXX RESTORE getNotifier: ({ _self }) => Fail`not implemented, see #7234`, // XXX TEMP }, - // eslint-disable-next-line no-use-before-define { finish: finishMeter }, ); @@ -120,18 +119,15 @@ export function buildRootObject(vatPowers, _vatParameters, baggage) { // getNotifier: ({ state }) => state.notifier, // will never fire // XXX RESTORE getNotifier: ({ _self }) => Fail`not implemented, see #7234`, // XXX TEMP }, - // eslint-disable-next-line no-use-before-define { finish: finishMeter }, ); function finishMeter({ state, self }) { - // eslint-disable-next-line no-use-before-define meterByID.init( state.meterID, // harden({ meter: self, updater: state.updater }), // XXX RESTORE harden({ meter: self }), // XXX TEMP ); - // eslint-disable-next-line no-use-before-define meterIDByMeter.set(self, state.meterID); } diff --git a/packages/SwingSet/test/metering/metered-code.js b/packages/SwingSet/test/metering/metered-code.js index 05859f127ae..618a170e6cb 100644 --- a/packages/SwingSet/test/metering/metered-code.js +++ b/packages/SwingSet/test/metering/metered-code.js @@ -18,7 +18,7 @@ export function meterMe(log2, explode = 'no') { } try { if (explode === 'compute') { - // eslint-disable-next-line no-constant-condition, no-empty + // eslint-disable-next-line no-empty while (true) {} } else if (explode === 'stack') { delveForeverIntoTheRecursiveDepths(); diff --git a/packages/SwingSet/test/snapshots/xsnap-store.test.js.md b/packages/SwingSet/test/snapshots/xsnap-store.test.js.md index 7c3c9d5d9f0..43137c2f9e3 100644 --- a/packages/SwingSet/test/snapshots/xsnap-store.test.js.md +++ b/packages/SwingSet/test/snapshots/xsnap-store.test.js.md @@ -22,8 +22,8 @@ Generated by [AVA](https://avajs.dev). archiveWriteSeconds: undefined, compressSeconds: 0, dbSaveSeconds: 0, - hash: 'fb587fde939d0e8e73cb6dd109e908f8c1c718c645144ad9d1f562671fd3b729', - uncompressedSize: 842803, + hash: '8da7b45fc3fbb377376a4569e8d8f8f971b2d1cd82e5b0d2e7210532c350568e', + uncompressedSize: 854315, } > after use of harden() - sensitive to SES-shim, XS, and supervisor @@ -32,6 +32,6 @@ Generated by [AVA](https://avajs.dev). archiveWriteSeconds: undefined, compressSeconds: 0, dbSaveSeconds: 0, - hash: 'aacc598ff81bb8ea45f38f05ba80b1ec6a399973a82f0271a2992418b0db7eb1', - uncompressedSize: 842963, + hash: 'f4adb516a299d85752f93ee1191844efc77ae73313ab93971b2d1eb10a04f5f9', + uncompressedSize: 854475, } diff --git a/packages/SwingSet/test/snapshots/xsnap-store.test.js.snap b/packages/SwingSet/test/snapshots/xsnap-store.test.js.snap index 73de27193b1..96ba58ad65f 100644 Binary files a/packages/SwingSet/test/snapshots/xsnap-store.test.js.snap and b/packages/SwingSet/test/snapshots/xsnap-store.test.js.snap differ diff --git a/packages/SwingSet/tools/baggage-check.js b/packages/SwingSet/tools/baggage-check.js index 6455952d10e..6d190e19e00 100644 --- a/packages/SwingSet/tools/baggage-check.js +++ b/packages/SwingSet/tools/baggage-check.js @@ -1,8 +1,6 @@ import { makeMarshal } from '@endo/marshal'; import { Far } from '@endo/far'; -/* eslint-disable no-use-before-define */ - function fakeSTV(slot, iface = 'Remotable') { return Far(iface, { getSlot: () => slot, diff --git a/packages/SwingSet/tools/bootstrap-dvo-test.js b/packages/SwingSet/tools/bootstrap-dvo-test.js index 337e4d95abe..eb085aa7814 100644 --- a/packages/SwingSet/tools/bootstrap-dvo-test.js +++ b/packages/SwingSet/tools/bootstrap-dvo-test.js @@ -11,7 +11,6 @@ export function buildRootObject() { async function runTests(phase) { testLog = []; doneP = makePromiseKit(); - // eslint-disable-next-line no-use-before-define await E(testVatRoot).runTests(self, phase); await doneP.promise; return testLog; diff --git a/packages/access-token/package.json b/packages/access-token/package.json index 6651fff1643..6ff0d7bfc31 100644 --- a/packages/access-token/package.json +++ b/packages/access-token/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint": "run-s --continue-on-error lint:*", "lint-fix": "yarn lint:eslint --fix", @@ -26,7 +26,7 @@ "@types/n-readlines": "^1.0.3", "@types/proper-lockfile": "^4.1.2", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "publishConfig": { "access": "public" diff --git a/packages/agoric-cli/integration-tests/workflow.test.js b/packages/agoric-cli/integration-tests/workflow.test.js index 471e3550c40..05f5bc344f5 100644 --- a/packages/agoric-cli/integration-tests/workflow.test.js +++ b/packages/agoric-cli/integration-tests/workflow.test.js @@ -2,5 +2,4 @@ import { test } from '@agoric/swingset-vat/tools/prepare-test-env-ava.js'; import { gettingStartedWorkflowTest } from '../tools/getting-started.js'; -test('workflow', t => - gettingStartedWorkflowTest(t, { testUnsafePlugins: true })); +test('"getting started" workflow', t => gettingStartedWorkflowTest(t)); diff --git a/packages/agoric-cli/package.json b/packages/agoric-cli/package.json index bdcd0153724..13241c53219 100644 --- a/packages/agoric-cli/package.json +++ b/packages/agoric-cli/package.json @@ -20,7 +20,7 @@ "scripts": { "build": "node ./scripts/get-sdk-package-names.js > src/sdk-package-names.js", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "integration-test": "ava --config .ava-integration-test.config.js", "lint-fix": "yarn lint:eslint --fix", @@ -32,12 +32,12 @@ "@agoric/cosmic-swingset": "^0.41.3", "@agoric/deploy-script-support": "^0.10.3", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "dd-trace": "^4.11.1" }, "dependencies": { "@agoric/access-token": "^0.4.21", - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/cache": "^0.3.2", "@agoric/casting": "^0.4.2", "@agoric/client-utils": "^0.1.0", @@ -59,17 +59,17 @@ "@cosmjs/math": "^0.32.3", "@cosmjs/proto-signing": "^0.32.3", "@cosmjs/stargate": "^0.32.3", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/compartment-mapper": "^1.3.1", - "@endo/env-options": "^1.1.7", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", - "@endo/zip": "^1.0.8", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/compartment-mapper": "^1.4.0", + "@endo/env-options": "^1.1.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", + "@endo/zip": "^1.0.9", "@iarna/toml": "^2.2.3", "anylogger": "^0.21.0", "chalk": "^5.2.0", diff --git a/packages/agoric-cli/src/anylogger-agoric.js b/packages/agoric-cli/src/anylogger-agoric.js index d4db4f2a315..87bc1bb679f 100644 --- a/packages/agoric-cli/src/anylogger-agoric.js +++ b/packages/agoric-cli/src/anylogger-agoric.js @@ -28,8 +28,8 @@ const selectedCode = anylogger.levels[selectedLevel]; const globalCode = selectedCode === undefined ? -Infinity : selectedCode; const oldExt = anylogger.ext; -anylogger.ext = (l, o) => { - l = oldExt(l, o); +anylogger.ext = (l, ...rest) => { + l = oldExt(l, ...rest); l.enabledFor = lvl => globalCode >= anylogger.levels[lvl]; const prefix = l.name.replace(/:/g, ': '); diff --git a/packages/agoric-cli/src/chain-config.js b/packages/agoric-cli/src/chain-config.js index e9bc39f7376..6f90e854b33 100644 --- a/packages/agoric-cli/src/chain-config.js +++ b/packages/agoric-cli/src/chain-config.js @@ -81,7 +81,12 @@ export const DEFAULT_RPC_PORT = 26657; export const DEFAULT_PROM_PORT = 26660; export const DEFAULT_API_PORT = 1317; -// Rewrite the app.toml. +/** + * Rewrite the app.toml. + * + * @param {{ appToml: string, enableCors?: boolean, exportMetrics?: boolean, portNum?: string, chainId?: string, enableRosetta?: boolean, rosettaPort?: string }} input + * @returns {string} toml + */ export function finishCosmosApp({ appToml, enableCors, @@ -92,6 +97,8 @@ export function finishCosmosApp({ rosettaPort = `${DEFAULT_ROSETTA_PORT}`, }) { const rpcPort = Number(portNum); + // TODO: Use an accurate narrow type. + /** @type {Record} */ const app = TOML.parse(appToml); if (enableCors) { @@ -138,7 +145,12 @@ export function finishCosmosApp({ return TOML.stringify(app); } -// Rewrite the config.toml. +/** + * Rewrite the config.toml. + * + * @param {{ configToml: string, enableCors?: boolean, exportMetrics?: boolean, portNum?: string, persistentPeers?: string, seeds?: string, unconditionalPeerIds?: string }} input + * @returns {string} toml + */ export function finishTendermintConfig({ configToml, enableCors, @@ -151,6 +163,8 @@ export function finishTendermintConfig({ const rpcPort = Number(portNum); // Adjust the config.toml. + // TODO: Use an accurate narrow type. + /** @type {Record} */ const config = TOML.parse(configToml); config.proxy_app = 'kvstore'; @@ -189,7 +203,12 @@ export function finishTendermintConfig({ return TOML.stringify(config); } -// Rewrite/import the genesis.json. +/** + * Rewrite/import the genesis.json. + * + * @param {{ genesisJson: string, exportedGenesisJson?: string }} input + * @returns {string} json + */ export function finishCosmosGenesis({ genesisJson, exportedGenesisJson }) { const genesis = JSON.parse(genesisJson); const exported = exportedGenesisJson ? JSON.parse(exportedGenesisJson) : {}; diff --git a/packages/agoric-cli/src/commands/auction.js b/packages/agoric-cli/src/commands/auction.js index 5746ce2263d..ac9306ffb45 100644 --- a/packages/agoric-cli/src/commands/auction.js +++ b/packages/agoric-cli/src/commands/auction.js @@ -1,17 +1,16 @@ // @ts-check /* eslint-env node */ -import { InvalidArgumentError } from 'commander'; +import { fetchEnvNetworkConfig, makeVstorageKit } from '@agoric/client-utils'; import { Fail } from '@endo/errors'; -import { makeVstorageKit } from '@agoric/client-utils'; +import { InvalidArgumentError } from 'commander'; import { outputActionAndHint } from '../lib/wallet.js'; -import { getNetworkConfig } from '../lib/network-config.js'; /** * @import {ParamTypesMap, ParamTypesMapFromRecord} from '@agoric/governance/src/contractGovernance/typedParamManager.js' * @import {ParamValueForType} from '@agoric/governance/src/types.js' */ -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); /** * @template {ParamTypesMap} M diff --git a/packages/agoric-cli/src/commands/gov.js b/packages/agoric-cli/src/commands/gov.js index f9611c75390..be116b87514 100644 --- a/packages/agoric-cli/src/commands/gov.js +++ b/packages/agoric-cli/src/commands/gov.js @@ -1,11 +1,10 @@ // @ts-check /* eslint-disable func-names */ /* eslint-env node */ -import { makeVstorageKit } from '@agoric/client-utils'; +import { fetchEnvNetworkConfig, makeVstorageKit } from '@agoric/client-utils'; import { execFileSync as execFileSyncAmbient } from 'child_process'; import { Command, CommanderError } from 'commander'; import { normalizeAddressWithOptions, pollBlocks } from '../lib/chain.js'; -import { getNetworkConfig } from '../lib/network-config.js'; import { findContinuingIds, getCurrent, @@ -26,7 +25,7 @@ const collectValues = (val, memo) => { const defaultKeyring = process.env.AGORIC_KEYRING_BACKEND || 'test'; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); /** * @param {import('anylogger').Logger} _logger diff --git a/packages/agoric-cli/src/commands/inter.js b/packages/agoric-cli/src/commands/inter.js index 41e0d42eb05..013e1b9af0d 100644 --- a/packages/agoric-cli/src/commands/inter.js +++ b/packages/agoric-cli/src/commands/inter.js @@ -4,20 +4,19 @@ */ // @ts-check -import { makeWalletUtils } from '@agoric/client-utils'; +import { fetchEnvNetworkConfig, makeWalletUtils } from '@agoric/client-utils'; import { makeOfferSpecShape } from '@agoric/inter-protocol/src/auction/auctionBook.js'; import { Offers } from '@agoric/inter-protocol/src/clientSupport.js'; import { objectMap } from '@agoric/internal'; import { M, matches } from '@endo/patterns'; import { CommanderError, InvalidArgumentError } from 'commander'; import { normalizeAddressWithOptions, pollBlocks } from '../lib/chain.js'; -import { getCurrent, outputActionAndHint, sendAction } from '../lib/wallet.js'; import { asBoardRemote, bigintReplacer, makeAmountFormatter, } from '../lib/format.js'; -import { getNetworkConfig } from '../lib/network-config.js'; +import { getCurrent, outputActionAndHint, sendAction } from '../lib/wallet.js'; const { values } = Object; @@ -232,7 +231,7 @@ export const makeInterCommand = ( try { // XXX pass fetch to getNetworkConfig() explicitly // await null above makes this await safe - const networkConfig = await getNetworkConfig({ env, fetch }); + const networkConfig = await fetchEnvNetworkConfig({ env, fetch }); return makeWalletUtils({ fetch, delay }, networkConfig); } catch (err) { // CommanderError is a class constructor, and so diff --git a/packages/agoric-cli/src/commands/oracle.js b/packages/agoric-cli/src/commands/oracle.js index 9eaf3f9de52..9b72a1f8595 100644 --- a/packages/agoric-cli/src/commands/oracle.js +++ b/packages/agoric-cli/src/commands/oracle.js @@ -2,6 +2,7 @@ /* eslint-disable func-names */ /* eslint-env node */ import { + fetchEnvNetworkConfig, makeVstorageKit, makeWalletUtils, storageHelper, @@ -14,14 +15,13 @@ import * as cp from 'child_process'; import { Command } from 'commander'; import { inspect } from 'util'; import { normalizeAddressWithOptions } from '../lib/chain.js'; -import { getNetworkConfig } from '../lib/network-config.js'; +import { bigintReplacer } from '../lib/format.js'; import { getCurrent, outputAction, sendAction, sendHint, } from '../lib/wallet.js'; -import { bigintReplacer } from '../lib/format.js'; /** @import {PriceAuthority, PriceDescription, PriceQuote, PriceQuoteValue, PriceQuery,} from '@agoric/zoe/tools/types.js'; */ @@ -86,7 +86,10 @@ export const makeOracleCommand = (logger, io = {}) => { const rpcTools = async () => { // XXX pass fetch to getNetworkConfig() explicitly - const networkConfig = await getNetworkConfig({ env: process.env, fetch }); + const networkConfig = await fetchEnvNetworkConfig({ + env: process.env, + fetch, + }); const utils = await makeVstorageKit({ fetch }, networkConfig); const lookupPriceAggregatorInstance = ([brandIn, brandOut]) => { diff --git a/packages/agoric-cli/src/commands/perf.js b/packages/agoric-cli/src/commands/perf.js index ef4ee2b531e..957561cad61 100644 --- a/packages/agoric-cli/src/commands/perf.js +++ b/packages/agoric-cli/src/commands/perf.js @@ -7,6 +7,7 @@ import { makeFollower, makeLeaderFromRpcAddresses, } from '@agoric/casting'; +import { fetchEnvNetworkConfig } from '@agoric/client-utils'; import { slotToRemotable } from '@agoric/internal/src/storage-test-utils.js'; import { boardSlottingMarshaller } from '@agoric/vats/tools/board-utils.js'; import { Command } from 'commander'; @@ -17,12 +18,11 @@ import { execSwingsetTransaction, normalizeAddressWithOptions, } from '../lib/chain.js'; -import { getNetworkConfig } from '../lib/network-config.js'; // tight for perf testing but less than this tends to hang. const SLEEP_SECONDS = 0.1; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); /** * @param {import('anylogger').Logger} logger diff --git a/packages/agoric-cli/src/commands/psm.js b/packages/agoric-cli/src/commands/psm.js index 3a601db299a..a59a8b81639 100644 --- a/packages/agoric-cli/src/commands/psm.js +++ b/packages/agoric-cli/src/commands/psm.js @@ -1,14 +1,17 @@ // @ts-check /* eslint-disable func-names */ /* eslint-env node */ -import { makeVstorageKit, storageHelper } from '@agoric/client-utils'; +import { + fetchEnvNetworkConfig, + makeVstorageKit, + storageHelper, +} from '@agoric/client-utils'; import { Offers } from '@agoric/inter-protocol/src/clientSupport.js'; import { Command } from 'commander'; -import { getNetworkConfig } from '../lib/network-config.js'; -import { outputExecuteOfferAction } from '../lib/wallet.js'; import { asPercent } from '../lib/format.js'; +import { outputExecuteOfferAction } from '../lib/wallet.js'; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); // Adapted from https://gist.github.com/dckc/8b5b2f16395cb4d7f2ff340e0bc6b610#file-psm-tool diff --git a/packages/agoric-cli/src/commands/reserve.js b/packages/agoric-cli/src/commands/reserve.js index 7c709d0d27f..eebb6c7d73d 100644 --- a/packages/agoric-cli/src/commands/reserve.js +++ b/packages/agoric-cli/src/commands/reserve.js @@ -1,13 +1,12 @@ // @ts-check /* eslint-disable func-names */ /* eslint-env node */ -import { makeVstorageKit } from '@agoric/client-utils'; +import { fetchEnvNetworkConfig, makeVstorageKit } from '@agoric/client-utils'; import { Offers } from '@agoric/inter-protocol/src/clientSupport.js'; import { Command } from 'commander'; -import { getNetworkConfig } from '../lib/network-config.js'; import { outputActionAndHint } from '../lib/wallet.js'; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); /** * @param {import('anylogger').Logger} _logger diff --git a/packages/agoric-cli/src/commands/test-upgrade.js b/packages/agoric-cli/src/commands/test-upgrade.js index b9dd5d6e76d..328f019bd6e 100644 --- a/packages/agoric-cli/src/commands/test-upgrade.js +++ b/packages/agoric-cli/src/commands/test-upgrade.js @@ -1,12 +1,11 @@ // @ts-check /* eslint-env node */ -import { makeWalletUtils } from '@agoric/client-utils'; +import { fetchEnvNetworkConfig, makeWalletUtils } from '@agoric/client-utils'; import { Fail } from '@endo/errors'; import { CommanderError } from 'commander'; import { normalizeAddressWithOptions } from '../lib/chain.js'; -import { getNetworkConfig } from '../lib/network-config.js'; -import { sendAction } from '../lib/wallet.js'; import { bigintReplacer } from '../lib/format.js'; +import { sendAction } from '../lib/wallet.js'; /** * Make commands for testing. @@ -39,7 +38,7 @@ export const makeTestCommand = ( try { // XXX pass fetch to getNetworkConfig() explicitly // await null above makes this await safe - const networkConfig = await getNetworkConfig({ env, fetch }); + const networkConfig = await fetchEnvNetworkConfig({ env, fetch }); return makeWalletUtils({ fetch, delay }, networkConfig); } catch (err) { // CommanderError is a class constructor, and so diff --git a/packages/agoric-cli/src/commands/vaults.js b/packages/agoric-cli/src/commands/vaults.js index 8d47ba9a3c2..51032d89482 100644 --- a/packages/agoric-cli/src/commands/vaults.js +++ b/packages/agoric-cli/src/commands/vaults.js @@ -1,7 +1,7 @@ // @ts-check /* eslint-disable func-names */ /* eslint-env node */ -import { makeVstorageKit } from '@agoric/client-utils'; +import { fetchEnvNetworkConfig, makeVstorageKit } from '@agoric/client-utils'; import { lookupOfferIdForVault, Offers, @@ -9,9 +9,8 @@ import { import { Command } from 'commander'; import { normalizeAddressWithOptions } from '../lib/chain.js'; import { getCurrent, outputExecuteOfferAction } from '../lib/wallet.js'; -import { getNetworkConfig } from '../lib/network-config.js'; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); /** * @param {import('anylogger').Logger} logger diff --git a/packages/agoric-cli/src/commands/wallet.js b/packages/agoric-cli/src/commands/wallet.js index 440fe2452d5..e41258716d4 100644 --- a/packages/agoric-cli/src/commands/wallet.js +++ b/packages/agoric-cli/src/commands/wallet.js @@ -8,7 +8,7 @@ import { makeLeader, makeLeaderFromRpcAddresses, } from '@agoric/casting'; -import { makeVstorageKit } from '@agoric/client-utils'; +import { makeVstorageKit, fetchEnvNetworkConfig } from '@agoric/client-utils'; import { execFileSync } from 'child_process'; import fs from 'fs'; import util from 'util'; @@ -19,15 +19,14 @@ import { fetchSwingsetParams, normalizeAddressWithOptions, } from '../lib/chain.js'; -import { getNetworkConfig } from '../lib/network-config.js'; -import { coalesceWalletState, getCurrent } from '../lib/wallet.js'; import { - summarize, fmtRecordOfLines, parseFiniteNumber, + summarize, } from '../lib/format.js'; +import { coalesceWalletState, getCurrent } from '../lib/wallet.js'; -const networkConfig = await getNetworkConfig({ env: process.env, fetch }); +const networkConfig = await fetchEnvNetworkConfig({ env: process.env, fetch }); const SLEEP_SECONDS = 3; @@ -175,7 +174,9 @@ export const makeWalletCommand = async command => { keyring: { home, backend }, from, gas: - gas === 'auto' ? ['auto', parseFiniteNumber(gasAdjustment)] : gas, + gas === 'auto' + ? ['auto', parseFiniteNumber(gasAdjustment)] + : parseFiniteNumber(gas), dryRun, verbose, }, diff --git a/packages/agoric-cli/src/cosmos.js b/packages/agoric-cli/src/cosmos.js index 147cda627d0..5c4aefeca55 100644 --- a/packages/agoric-cli/src/cosmos.js +++ b/packages/agoric-cli/src/cosmos.js @@ -50,7 +50,7 @@ export default async function cosmosMain(progname, rawArgs, powers, opts) { }, ); // Ensure the build doesn't mess up stdout. - ps.childProcess.stdout.pipe(process.stderr); + ps.childProcess.stdout?.pipe(process.stderr); return ps; } throw e; diff --git a/packages/agoric-cli/src/helpers.js b/packages/agoric-cli/src/helpers.js index 845da5536ae..444e8a4fe4d 100644 --- a/packages/agoric-cli/src/helpers.js +++ b/packages/agoric-cli/src/helpers.js @@ -3,7 +3,8 @@ /** @import { ChildProcess } from 'child_process' */ -export { getNetworkConfig } from './lib/network-config.js'; +// Backwards compatibility +export { fetchEnvNetworkConfig as getNetworkConfig } from '@agoric/client-utils'; export const getSDKBinaries = ({ jsPfx = '../..', @@ -42,12 +43,12 @@ export const makePspawn = ({ * * @param {string} cmd command name to run * @param {Array} cargs arguments to the command - * @param {object} param2 - * @param {string} [param2.cwd] - * @param {string | [string, string, string]} [param2.stdio] standard IO + * @param {object} [opts] + * @param {string} [opts.cwd] + * @param {string | [string, string, string]} [opts.stdio] standard IO * specification - * @param {Record} [param2.env] environment - * @param {boolean} [param2.detached] whether the child process should be detached + * @param {Record} [opts.env] environment + * @param {boolean} [opts.detached] whether the child process should be detached * @returns {Promise & { childProcess: ChildProcess }}} promise for * exit status. The return result has a `childProcess` property to obtain * control over the running process diff --git a/packages/agoric-cli/src/install.js b/packages/agoric-cli/src/install.js index ed549517db4..25c605991d2 100644 --- a/packages/agoric-cli/src/install.js +++ b/packages/agoric-cli/src/install.js @@ -37,7 +37,7 @@ export default async function installMain(progname, rawArgs, powers, opts) { stdio: ['inherit', 'pipe', 'inherit'], }); const stdout = []; - p.childProcess.stdout.on('data', out => stdout.push(out)); + p.childProcess.stdout?.on('data', out => stdout.push(out)); await p; const d = JSON.parse(Buffer.concat(stdout).toString('utf-8')); for (const [name, { location }] of Object.entries(d)) { @@ -49,7 +49,7 @@ export default async function installMain(progname, rawArgs, powers, opts) { let subdirs; const workTrees = ['.']; let sdkWorktree; - /** @type {Map} */ + /** @type {Map} */ const sdkPackageToPath = new Map(); const linkFolder = path.resolve(`_agstate/yarn-links`); const linkFlags = []; @@ -131,7 +131,6 @@ export default async function installMain(progname, rawArgs, powers, opts) { // Ensure we update the package.json before exiting. const updatePackageJson = async () => { // Don't update on exit anymore. - // eslint-disable-next-line no-use-before-define process.off('beforeExit', updatePackageJsonOnExit); log.info(`updating ${pjson}`); await fs.writeFile( @@ -170,7 +169,7 @@ export default async function installMain(progname, rawArgs, powers, opts) { .then(results => { // After all have settled, throw any errors. const failures = results.filter( - ({ status }) => status !== 'fulfilled', + result => result.status !== 'fulfilled', ); if (failures.length) { throw AggregateError( @@ -284,6 +283,10 @@ export default async function installMain(progname, rawArgs, powers, opts) { // Create symlinks to the SDK packages. await Promise.all( [...sdkPackageToPath.entries()].map(async ([pjName, dir]) => { + if (typeof dir !== 'string') { + throw Error(`unexpected incomplete package mapping: ${pjName}`); + } + const SUBOPTIMAL = false; await null; if (SUBOPTIMAL) { @@ -301,7 +304,7 @@ export default async function installMain(progname, rawArgs, powers, opts) { log('linking', linkName); return fs .mkdir(linkDir, { recursive: true }) - .then(_ => fs.symlink(path.relative(linkDir, dir), linkName)); + .then(() => fs.symlink(path.relative(linkDir, dir), linkName)); }), ); diff --git a/packages/agoric-cli/src/lib/format.js b/packages/agoric-cli/src/lib/format.js index e5e1a277d3c..d5e9d8836bb 100644 --- a/packages/agoric-cli/src/lib/format.js +++ b/packages/agoric-cli/src/lib/format.js @@ -100,14 +100,15 @@ export const purseBalanceTuples = (purses, assets) => { */ export const fmtRecordOfLines = record => { const { stringify } = JSON; + /** @type {Array<[string, string[]]>} */ const groups = Object.entries(record).map(([key, items]) => [ key, items.map(item => ` ${stringify(item)}`), ]); - const lineEntries = groups.map( - // @ts-expect-error ??? - ([key, lines]) => ` ${stringify(key)}: [\n${lines.join(',\n')}\n ]`, - ); + const lineEntries = groups.map(([key, lines]) => { + const linesStr = lines.length === 0 ? `[]` : `[\n${lines.join(',\n')}\n ]`; + return ` ${stringify(key)}: ${linesStr}`; + }); return `{\n${lineEntries.join(',\n')}\n}`; }; diff --git a/packages/agoric-cli/src/lib/network-config.js b/packages/agoric-cli/src/lib/network-config.js deleted file mode 100644 index ca0485383f8..00000000000 --- a/packages/agoric-cli/src/lib/network-config.js +++ /dev/null @@ -1,37 +0,0 @@ -import { NonNullish } from '@agoric/internal'; - -export const networkConfigUrl = agoricNetSubdomain => - `https://${agoricNetSubdomain}.agoric.net/network-config`; -export const rpcUrl = agoricNetSubdomain => - `https://${agoricNetSubdomain}.rpc.agoric.net:443`; - -/** - * @param {string} str - * @param {{ fetch: typeof fetch }} io - * @returns {Promise} - */ -const fromAgoricNet = (str, { fetch }) => { - const [netName, chainName] = str.split(','); - if (chainName) { - return Promise.resolve({ chainName, rpcAddrs: [rpcUrl(netName)] }); - } - return fetch(networkConfigUrl(netName)).then(res => res.json()); -}; - -/** - * @param {{ env: typeof process.env, fetch: typeof fetch }} io - * @returns {Promise} - */ -export const getNetworkConfig = async ({ env, fetch }) => { - if (!('AGORIC_NET' in env) || env.AGORIC_NET === 'local') { - return { rpcAddrs: ['http://0.0.0.0:26657'], chainName: 'agoriclocal' }; - } - - return fromAgoricNet(NonNullish(env.AGORIC_NET), { fetch }).catch(err => { - throw Error( - `cannot get network config (${env.AGORIC_NET || 'local'}): ${ - err.message - }`, - ); - }); -}; diff --git a/packages/agoric-cli/src/main.js b/packages/agoric-cli/src/main.js index c9df6c9f903..af834f16964 100644 --- a/packages/agoric-cli/src/main.js +++ b/packages/agoric-cli/src/main.js @@ -66,7 +66,9 @@ const main = async (progname, rawArgs, powers) => { 'verbosity that can be increased', (_value, _previous) => (cmdOpts.verbose += 1), ); - const baseCmd = (...args) => addCmdOpts(program.command(...args)); + /** @type {typeof program.command} */ + const baseCmd = (nameAndParams, ...rest) => + addCmdOpts(program.command(nameAndParams, ...rest)); addCmdOpts( program diff --git a/packages/agoric-cli/src/scripts.js b/packages/agoric-cli/src/scripts.js index 9be651984ba..bb921c20739 100644 --- a/packages/agoric-cli/src/scripts.js +++ b/packages/agoric-cli/src/scripts.js @@ -56,7 +56,7 @@ export const makeLookup = /** * @param {string[]} scripts - * @param {{ allowUnsafePlugins: boolean, progname: string, rawArgs: string[], endowments?: Record }} opts + * @param {{ allowUnsafePlugins?: boolean, progname: string, rawArgs: string[], endowments?: Record }} opts * @param {{ fs: import('fs/promises'), console: Console }} powers */ export const makeScriptLoader = diff --git a/packages/agoric-cli/src/start.js b/packages/agoric-cli/src/start.js index 5f5f81382a5..4832c7cd555 100644 --- a/packages/agoric-cli/src/start.js +++ b/packages/agoric-cli/src/start.js @@ -276,13 +276,13 @@ export default async function startMain(progname, rawArgs, powers, opts) { await rmVerbose(serverDir); } + /** @type {(args: string[], spawnOpts?: Parameters[2], dockerArgs?: string[]) => ReturnType} */ let chainSpawn; if (!popts.dockerTag) { - chainSpawn = (args, spawnOpts = undefined) => { - return pspawn(cosmosChain, [...args, `--home=${serverDir}`], spawnOpts); - }; + chainSpawn = (args, spawnOpts) => + pspawn(cosmosChain, [...args, `--home=${serverDir}`], spawnOpts); } else { - chainSpawn = (args, spawnOpts = undefined, dockerArgs = []) => + chainSpawn = (args, spawnOpts, dockerArgs = []) => pspawn( 'docker', [ @@ -482,12 +482,12 @@ export default async function startMain(progname, rawArgs, powers, opts) { await rmVerbose(serverDir); } + /** @type {(args: string[], spawnOpts?: Parameters[2], dockerArgs?: string[]) => ReturnType} */ let soloSpawn; if (!popts.dockerTag) { - soloSpawn = (args, spawnOpts = undefined) => - pspawn(agSolo, args, spawnOpts); + soloSpawn = (args, spawnOpts) => pspawn(agSolo, args, spawnOpts); } else { - soloSpawn = (args, spawnOpts = undefined, dockerArgs = []) => + soloSpawn = (args, spawnOpts, dockerArgs = []) => pspawn( 'docker', [ diff --git a/packages/agoric-cli/test/bundles-regExp.test.js b/packages/agoric-cli/test/bundles-regExp.test.js index 87b6f040b14..49aeb63e39d 100644 --- a/packages/agoric-cli/test/bundles-regExp.test.js +++ b/packages/agoric-cli/test/bundles-regExp.test.js @@ -1,6 +1,7 @@ import test from 'ava'; import { PACKAGE_NAME_RE } from '../src/lib/bundles.js'; +/** @type {Array<[name: string, spec?: string]>} */ const goodPatterns = [ ['@agoric/assert-v0.6.0'], ['@agoric/base-zone-v0.1.0/', '@agoric/base-zone-v0.1.0'], diff --git a/packages/agoric-cli/test/main.test.js b/packages/agoric-cli/test/main.test.js index d2b17a170a5..a6ec076e8e7 100644 --- a/packages/agoric-cli/test/main.test.js +++ b/packages/agoric-cli/test/main.test.js @@ -19,6 +19,7 @@ test('sanity', async t => { const myMain = args => { const oldConsole = console; try { + // @ts-expect-error globalThis.console = stubAnylogger(); return main('foo', args, { anylogger: stubAnylogger, diff --git a/packages/agoric-cli/test/upgrade-contract/init-proposal.js b/packages/agoric-cli/test/upgrade-contract/init-proposal.js index ff3238455ea..9ab07c75b62 100644 --- a/packages/agoric-cli/test/upgrade-contract/init-proposal.js +++ b/packages/agoric-cli/test/upgrade-contract/init-proposal.js @@ -3,7 +3,7 @@ import { E } from '@endo/far'; /** * Initialize contractRef the first time. * - * @param {BootstrapSpace} param0 + * @param {{ [K in keyof BootstrapSpace]: object }} promiseSpace */ export const initContract = async ({ consume: { zoe, myStatus }, diff --git a/packages/agoric-cli/tools/getting-started.js b/packages/agoric-cli/tools/getting-started.js index c4d23c05388..f294fb653ed 100644 --- a/packages/agoric-cli/tools/getting-started.js +++ b/packages/agoric-cli/tools/getting-started.js @@ -62,6 +62,13 @@ const getLatestBlockHeight = url => req.end(); }); +/** + * Test the "getting started" workflow. Note that this function may be imported + * by external repositories. + * + * @param {import('ava').ExecutionContext} t + * @param {{ init?: string[], install?: string[] }} [options] + */ export const gettingStartedWorkflowTest = async (t, options = {}) => { const { init: initOptions = [], install: installOptions = [] } = options; const pspawn = makePspawn({ spawn }); diff --git a/packages/agoric-cli/tsconfig.json b/packages/agoric-cli/tsconfig.json index 392e85ad58f..b0a3738ead7 100644 --- a/packages/agoric-cli/tsconfig.json +++ b/packages/agoric-cli/tsconfig.json @@ -2,7 +2,7 @@ { "extends": "../../tsconfig.json", "compilerOptions": { - "checkJs": false, + "checkJs": true, }, "include": [ "*.js", diff --git a/packages/async-flow/package.json b/packages/async-flow/package.json index 56efcf80234..bd0e7fba983 100644 --- a/packages/async-flow/package.json +++ b/packages/async-flow/package.json @@ -10,7 +10,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -28,18 +28,18 @@ "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", "@agoric/vow": "^0.1.0", - "@endo/common": "^1.2.7", - "@endo/errors": "^1.2.7", - "@endo/eventual-send": "^1.2.7", - "@endo/marshal": "^1.6.1", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/common": "^1.2.8", + "@endo/errors": "^1.2.8", + "@endo/eventual-send": "^1.2.8", + "@endo/marshal": "^1.6.2", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", "@agoric/zone": "^0.2.2", - "@endo/env-options": "^1.1.7", + "@endo/env-options": "^1.1.8", "ava": "^5.3.0", "tsd": "^0.31.1" }, diff --git a/packages/async-flow/src/convert.js b/packages/async-flow/src/convert.js index 51ed928ec2e..aa2e7b2be23 100644 --- a/packages/async-flow/src/convert.js +++ b/packages/async-flow/src/convert.js @@ -22,11 +22,9 @@ const makeConvert = (convertRemotable, convertPromiseOrVow, convertError) => { // to keep track of the error labeling. // See https://github.com/endojs/endo/pull/1795#issuecomment-1756093032 if (label === undefined) { - // eslint-disable-next-line no-use-before-define return innerConvert(specimen); } try { - // eslint-disable-next-line no-use-before-define return innerConvert(specimen); } catch (err) { throwLabeled(err, label); diff --git a/packages/async-flow/src/equate.js b/packages/async-flow/src/equate.js index 9bfa3bba4a3..a4798a0bd76 100644 --- a/packages/async-flow/src/equate.js +++ b/packages/async-flow/src/equate.js @@ -13,11 +13,9 @@ export const makeEquate = bijection => { // TODO switch to Richard Gibson's suggestion for a better way // to keep track of the error labeling. if (label === undefined) { - // eslint-disable-next-line no-use-before-define innerEquate(g, h); } try { - // eslint-disable-next-line no-use-before-define innerEquate(g, h); } catch (err) { throwLabeled(err, label); diff --git a/packages/async-flow/src/replay-membrane.js b/packages/async-flow/src/replay-membrane.js index 57aa83aef9b..702e6920a67 100644 --- a/packages/async-flow/src/replay-membrane.js +++ b/packages/async-flow/src/replay-membrane.js @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import { isVow } from '@agoric/vow/src/vow-utils.js'; import { heapVowE } from '@agoric/vow/vat.js'; import { throwLabeled } from '@endo/common/throw-labeled.js'; diff --git a/packages/async-flow/src/types.ts b/packages/async-flow/src/types.ts index c9b00533392..29359000d39 100644 --- a/packages/async-flow/src/types.ts +++ b/packages/async-flow/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { Passable } from '@endo/pass-style'; import type { Vow, VowTools } from '@agoric/vow'; import type { LogStore } from './log-store.js'; diff --git a/packages/base-zone/package.json b/packages/base-zone/package.json index 508eba04857..293d5b9ffb2 100644 --- a/packages/base-zone/package.json +++ b/packages/base-zone/package.json @@ -10,7 +10,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -28,16 +28,16 @@ "license": "Apache-2.0", "dependencies": { "@agoric/store": "^0.9.2", - "@endo/common": "^1.2.7", - "@endo/errors": "^1.2.7", - "@endo/exo": "^1.5.6", - "@endo/far": "^1.1.8", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6" + "@endo/common": "^1.2.8", + "@endo/errors": "^1.2.8", + "@endo/exo": "^1.5.7", + "@endo/far": "^1.1.9", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7" }, "devDependencies": { - "@endo/init": "^1.1.6", - "@endo/ses-ava": "^1.2.7", + "@endo/init": "^1.1.7", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0" }, "publishConfig": { diff --git a/packages/benchmark/package.json b/packages/benchmark/package.json index c2bf33a89f7..8aeb7339434 100644 --- a/packages/benchmark/package.json +++ b/packages/benchmark/package.json @@ -22,14 +22,14 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/boot": "^0.1.0", "@agoric/cosmic-swingset": "^0.41.3", "@agoric/internal": "^0.3.2", "@agoric/inter-protocol": "^0.16.1", "@agoric/vats": "^0.15.1", "@agoric/zoe": "^0.26.2", - "@endo/init": "^1.1.6" + "@endo/init": "^1.1.7" }, "devDependencies": {}, "files": [ diff --git a/packages/boot/package.json b/packages/boot/package.json index b6632fdf00e..5cf0ad71e72 100644 --- a/packages/boot/package.json +++ b/packages/boot/package.json @@ -19,7 +19,7 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/builders": "^0.1.0", "@agoric/client-utils": "^0.1.0", "@agoric/cosmic-proto": "^0.4.0", @@ -40,14 +40,14 @@ "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/promise-kit": "^1.1.7", - "@endo/stream": "^1.2.7", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/promise-kit": "^1.1.8", + "@endo/stream": "^1.2.8", "import-meta-resolve": "^2.2.1" }, "devDependencies": { @@ -55,10 +55,10 @@ "@agoric/governance": "^0.10.3", "@agoric/store": "^0.9.2", "@agoric/swingset-liveslots": "^0.10.2", - "@endo/base64": "^1.0.8", - "@endo/patterns": "^1.4.6", + "@endo/base64": "^1.0.9", + "@endo/patterns": "^1.4.7", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "ts-blank-space": "^0.4.1" }, "files": [ diff --git a/packages/boot/test/fast-usdc/fast-usdc.test.ts b/packages/boot/test/fast-usdc/fast-usdc.test.ts new file mode 100644 index 00000000000..c75205d5cb4 --- /dev/null +++ b/packages/boot/test/fast-usdc/fast-usdc.test.ts @@ -0,0 +1,154 @@ +import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; + +import type { TestFn } from 'ava'; +import type { FastUSDCKit } from '@agoric/fast-usdc/src/fast-usdc.start.js'; +import type { CctpTxEvidence } from '@agoric/fast-usdc/src/types.js'; +import { MockCctpTxEvidences } from '@agoric/fast-usdc/test/fixtures.js'; +import { documentStorageSchema } from '@agoric/governance/tools/storageDoc.js'; +import { Fail } from '@endo/errors'; +import { unmarshalFromVstorage } from '@agoric/internal/src/marshal.js'; +import { makeMarshal } from '@endo/marshal'; +import { + makeWalletFactoryContext, + type WalletFactoryTestContext, +} from '../bootstrapTests/walletFactory.js'; + +const test: TestFn = anyTest; + +test.before('bootstrap', async t => { + const config = '@agoric/vm-config/decentral-itest-orchestration-config.json'; + t.context = await makeWalletFactoryContext(t, config); +}); +test.after.always(t => t.context.shutdown?.()); + +test.serial('oracles provision before contract deployment', async t => { + const { walletFactoryDriver: wd } = t.context; + const watcherWallet = await wd.provideSmartWallet('agoric1watcher1'); + t.truthy(watcherWallet); +}); + +test.serial( + 'contract starts; adds to agoricNames; sends invitation', + async t => { + const { + agoricNamesRemotes, + evalProposal, + buildProposal, + refreshAgoricNamesRemotes, + storage, + walletFactoryDriver: wd, + } = t.context; + + const [watcherWallet] = await Promise.all([ + wd.provideSmartWallet('agoric144rrhh4m09mh7aaffhm6xy223ym76gve2x7y78'), + wd.provideSmartWallet('agoric19d6gnr9fyp6hev4tlrg87zjrzsd5gzr5qlfq2p'), + wd.provideSmartWallet('agoric19uscwxdac6cf6z7d5e26e0jm0lgwstc47cpll8'), + wd.provideSmartWallet('agoric1krunjcqfrf7la48zrvdfeeqtls5r00ep68mzkr'), + wd.provideSmartWallet('agoric1n4fcxsnkxe4gj6e24naec99hzmc4pjfdccy5nj'), + ]); + + const materials = buildProposal( + '@agoric/builders/scripts/fast-usdc/init-fast-usdc.js', + ['--net', 'MAINNET'], + ); + await evalProposal(materials); + + // update now that fastUsdc is instantiated + refreshAgoricNamesRemotes(); + t.truthy(agoricNamesRemotes.instance.fastUsdc); + t.truthy(agoricNamesRemotes.brand.FastLP); + + const { EV } = t.context.runUtils; + const agoricNames = await EV.vat('bootstrap').consumeItem('agoricNames'); + const board = await EV.vat('bootstrap').consumeItem('board'); + const getBoardAux = async name => { + const brand = await EV(agoricNames).lookup('brand', name); + const id = await EV(board).getId(brand); + t.truthy(storage.data.get(`published.boardAux.${id}`)); + return unmarshalFromVstorage( + storage.data, + `published.boardAux.${id}`, + makeMarshal().fromCapData, + -1, + ); + }; + t.like( + await getBoardAux('FastLP'), + { + allegedName: 'PoolShares', // misnomer, in some contexts + displayInfo: { + assetKind: 'nat', + decimalPlaces: 6, + }, + }, + 'brand displayInfo available in boardAux', + ); + + const current = watcherWallet.getCurrentWalletRecord(); + + // XXX We should be able to compare objects by identity like this: + // + // const invitationPurse = current.purses.find( + // p => p.brand === agoricNamesRemotes.brand.Invitation, + // ); + // + // But agoricNamesRemotes and walletFactoryDriver + // don't share a marshal context. + // We should be able to map between them using + // const walletStuff = w.fromCapData(a.toCapData(aStuff)) + // but the marshallers don't even preserve identity within themselves. + + current.purses.length === 1 || Fail`test limited to 1 purse`; + const [thePurse] = current.purses; + const details = thePurse.balance.value as Array; + Array.isArray(details) || Fail`expected SET value`; + t.is(details.length, 1, 'oracle wallet has 1 invitation'); + t.is(details[0].description, 'oracle operator invitation'); + // XXX t.is(details.instance, agoricNames.instance.fastUsdc) should work + }, +); + +test.serial('writes feed policy to vstorage', async t => { + const { storage } = t.context; + const doc = { + node: 'fastUsdc.feedPolicy', + owner: 'the general and chain-specific policies for the Fast USDC feed', + }; + await documentStorageSchema(t, storage, doc); +}); + +test.serial('writes status updates to vstorage', async t => { + const { walletFactoryDriver: wd, storage } = t.context; + const wallet = await wd.provideSmartWallet( + 'agoric144rrhh4m09mh7aaffhm6xy223ym76gve2x7y78', + ); + const submitMockEvidence = (mockEvidence: CctpTxEvidence) => + wallet.sendOffer({ + id: 'submit-mock-evidence', + invitationSpec: { + source: 'agoricContract', + instancePath: ['fastUsdc'], + callPipe: [['makeTestPushInvitation', [mockEvidence]]], + }, + proposal: {}, + }); + const mockEvidence1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + const mockEvidence2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + + await submitMockEvidence(mockEvidence1); + await submitMockEvidence(mockEvidence2); + + const doc = { + node: `fastUsdc.status`, + owner: `the statuses of fast USDC transfers identified by their tx hashes`, + }; + await documentStorageSchema(t, storage, doc); +}); + +test.serial('restart contract', async t => { + const { EV } = t.context.runUtils; + await null; + const kit = await EV.vat('bootstrap').consumeItem('fastUsdcKit'); + const actual = await EV(kit.adminFacet).restartContract(kit.privateArgs); + t.deepEqual(actual, { incarnationNumber: 1 }); +}); diff --git a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md new file mode 100644 index 00000000000..fb98a2008c2 --- /dev/null +++ b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.md @@ -0,0 +1,37 @@ +# Snapshot report for `test/fast-usdc/fast-usdc.test.ts` + +The actual snapshot is saved in `fast-usdc.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## writes feed policy to vstorage + +> Under "published", the "fastUsdc.feedPolicy" node is delegated to the general and chain-specific policies for the Fast USDC feed. +> The example below illustrates the schema of the data published there. +> +> See also board marshalling conventions (_to appear_). + + [ + [ + 'published.fastUsdc.feedPolicy', + '{"blockHeight":"0","values":["{\\"chainPolicies\\":{\\"Arbitrum\\":{\\"cctpTokenMessengerAddress\\":\\"0x19330d10D9Cc8751218eaf51E8885D058642E08A\\",\\"chainId\\":42161,\\"confirmations\\":2,\\"nobleContractAddress\\":\\"0x19330d10D9Cc8751218eaf51E8885D058642E08A\\"}},\\"nobleAgoricChannelId\\":\\"channel-21\\",\\"nobleDomainId\\":4}"]}', + ], + ] + +## writes status updates to vstorage + +> Under "published", the "fastUsdc.status" node is delegated to the statuses of fast USDC transfers identified by their tx hashes. +> The example below illustrates the schema of the data published there. +> +> See also board marshalling conventions (_to appear_). + + [ + [ + 'published.fastUsdc.status.0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702', + '{"blockHeight":"0","values":["OBSERVED"]}', + ], + [ + 'published.fastUsdc.status.0xd81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761799', + '{"blockHeight":"0","values":["OBSERVED"]}', + ], + ] diff --git a/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap new file mode 100644 index 00000000000..9282a421d07 Binary files /dev/null and b/packages/boot/test/fast-usdc/snapshots/fast-usdc.test.ts.snap differ diff --git a/packages/boot/test/orchestration/contract-upgrade.test.ts b/packages/boot/test/orchestration/contract-upgrade.test.ts index 86f76a30102..ada1a4a4144 100644 --- a/packages/boot/test/orchestration/contract-upgrade.test.ts +++ b/packages/boot/test/orchestration/contract-upgrade.test.ts @@ -82,7 +82,7 @@ test('resume', async t => { t.deepEqual(getLogged(), [ 'sending {0} from cosmoshub to cosmos1whatever', - 'got info for denoms: ibc/toyatom, ibc/toyusdc, ubld, uist', + 'got info for denoms: ibc/FE98AAD68F02F03565E9FA39A5E627946699B2B07115889ED812D8BA639576A9, ibc/toyatom, ibc/toyusdc, ubld, uist', 'got info for chain: cosmoshub cosmoshub-4', 'completed transfer to localAccount', ]); @@ -99,7 +99,7 @@ test('resume', async t => { t.deepEqual(getLogged(), [ 'sending {0} from cosmoshub to cosmos1whatever', - 'got info for denoms: ibc/toyatom, ibc/toyusdc, ubld, uist', + 'got info for denoms: ibc/FE98AAD68F02F03565E9FA39A5E627946699B2B07115889ED812D8BA639576A9, ibc/toyatom, ibc/toyusdc, ubld, uist', 'got info for chain: cosmoshub cosmoshub-4', 'completed transfer to localAccount', 'completed transfer to cosmos1whatever', diff --git a/packages/boot/test/orchestration/restart-contracts.test.ts b/packages/boot/test/orchestration/restart-contracts.test.ts index a8f5f56511a..790f58e5d44 100644 --- a/packages/boot/test/orchestration/restart-contracts.test.ts +++ b/packages/boot/test/orchestration/restart-contracts.test.ts @@ -32,7 +32,7 @@ test.serial('send-anywhere', async t => { t.log('start send-anywhere'); await evalProposal( - buildProposal('@agoric/builders/scripts/testing/start-send-anywhere.js'), + buildProposal('@agoric/builders/scripts/testing/init-send-anywhere.js'), ); t.log('making offer'); diff --git a/packages/boot/tools/supports.ts b/packages/boot/tools/supports.ts index c59f050f294..7addf5619a5 100644 --- a/packages/boot/tools/supports.ts +++ b/packages/boot/tools/supports.ts @@ -46,15 +46,18 @@ import type { SwingsetController } from '@agoric/swingset-vat/src/controller/con import type { BridgeHandler, IBCMethod } from '@agoric/vats'; import type { BootstrapRootObject } from '@agoric/vats/src/core/lib-boot.js'; import type { EProxy } from '@endo/eventual-send'; +import type { FastUSDCCorePowers } from '@agoric/fast-usdc/src/fast-usdc.start.js'; import { icaMocks, protoMsgMockMap, protoMsgMocks } from './ibc/mocks.js'; const trace = makeTracer('BSTSupport', false); type ConsumeBootrapItem = ( name: N, -) => N extends keyof EconomyBootstrapPowers['consume'] - ? EconomyBootstrapPowers['consume'][N] - : unknown; +) => N extends keyof FastUSDCCorePowers['consume'] + ? FastUSDCCorePowers['consume'][N] + : N extends keyof EconomyBootstrapPowers['consume'] + ? EconomyBootstrapPowers['consume'][N] + : unknown; // XXX should satisfy EVProxy from run-utils.js but that's failing to import /** @@ -351,7 +354,6 @@ export const makeSwingsetTestKit = async ( ...args ) => { console.log('inbound', ...args); - // eslint-disable-next-line no-use-before-define bridgeInbound!(...args); }; diff --git a/packages/builders/package.json b/packages/builders/package.json index 28c62a5fce3..dfc3a889763 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -24,24 +24,26 @@ "license": "Apache-2.0", "dependencies": { "@agoric/ertp": "^0.16.2", + "@agoric/fast-usdc": "0.1.0", "@agoric/internal": "^0.3.2", "@agoric/notifier": "^0.6.2", "@agoric/smart-wallet": "^0.5.3", "@agoric/vat-data": "^0.5.2", "@agoric/vats": "^0.15.1", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/promise-kit": "^1.1.7", - "@endo/stream": "^1.2.7", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", + "@endo/stream": "^1.2.8", "import-meta-resolve": "^2.2.1" }, "devDependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/deploy-script-support": "^0.10.3", "@agoric/governance": "^0.10.3", "@agoric/inter-protocol": "^0.16.1", @@ -51,7 +53,7 @@ "@agoric/swingset-liveslots": "^0.10.2", "@agoric/time": "^0.3.2", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "CHANGELOG.md", diff --git a/packages/builders/scripts/fast-usdc/init-fast-usdc.js b/packages/builders/scripts/fast-usdc/init-fast-usdc.js new file mode 100644 index 00000000000..783ce078f43 --- /dev/null +++ b/packages/builders/scripts/fast-usdc/init-fast-usdc.js @@ -0,0 +1,322 @@ +// @ts-check +import { makeHelpers } from '@agoric/deploy-script-support'; +import { AmountMath } from '@agoric/ertp'; +import { + FastUSDCConfigShape, + getManifestForFastUSDC, +} from '@agoric/fast-usdc/src/fast-usdc.start.js'; +import { toExternalConfig } from '@agoric/fast-usdc/src/utils/config-marshal.js'; +import { denomHash, withChainCapabilities } from '@agoric/orchestration'; +import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; +import { + multiplyBy, + parseRatio, +} from '@agoric/zoe/src/contractSupport/ratio.js'; +import { Far } from '@endo/far'; +import { parseArgs } from 'node:util'; + +/** + * @import {CoreEvalBuilder, DeployScriptFunction} from '@agoric/deploy-script-support/src/externalTypes.js' + * @import {ParseArgsConfig} from 'node:util' + * @import {FastUSDCConfig} from '@agoric/fast-usdc/src/fast-usdc.start.js' + * @import {Passable} from '@endo/marshal'; + * @import {CosmosChainInfo} from '@agoric/orchestration'; + */ + +const { keys } = Object; + +const defaultAssetInfo = { + uusdc: { + baseName: 'noble', + chainName: 'noble', + baseDenom: 'uusdc', + }, + [`ibc/${denomHash({ denom: 'uusdc', channelId: fetchedChainInfo.agoric.connections['noble-1'].transferChannel.channelId })}`]: + { + baseName: 'noble', + chainName: 'agoric', + baseDenom: 'uusdc', + brandKey: 'USDC', + }, + [`ibc/${denomHash({ denom: 'uusdc', channelId: fetchedChainInfo.osmosis.connections['noble-1'].transferChannel.channelId })}`]: + { + baseName: 'noble', + chainName: 'osmosis', + baseDenom: 'uusdc', + }, +}; + +/** + * @type {Record>} + * + * TODO: determine OCW operator addresses + * meanwhile, use price oracle addresses (from updatePriceFeeds.js). + */ +const configurations = { + A3P_INTEGRATION: { + oracles: { + gov1: 'agoric1ee9hr0jyrxhy999y755mp862ljgycmwyp4pl7q', + gov2: 'agoric1wrfh296eu2z34p6pah7q04jjuyj3mxu9v98277', + gov3: 'agoric1ydzxwh6f893jvpaslmaz6l8j2ulup9a7x8qvvq', + }, + feedPolicy: { + nobleAgoricChannelId: 'TODO', + nobleDomainId: 4, + chainPolicies: { + Arbitrum: { + cctpTokenMessengerAddress: + '0x19330d10D9Cc8751218eaf51E8885D058642E08A', + chainId: 42161, + confirmations: 2, + nobleContractAddress: '0x19330d10D9Cc8751218eaf51E8885D058642E08A', + }, + }, + }, + chainInfo: /** @type {Record} */ ( + withChainCapabilities(fetchedChainInfo) + ), + assetInfo: defaultAssetInfo, + }, + MAINNET: { + oracles: { + DSRV: 'agoric144rrhh4m09mh7aaffhm6xy223ym76gve2x7y78', + Stakin: 'agoric19d6gnr9fyp6hev4tlrg87zjrzsd5gzr5qlfq2p', + '01node': 'agoric19uscwxdac6cf6z7d5e26e0jm0lgwstc47cpll8', + 'Simply Staking': 'agoric1krunjcqfrf7la48zrvdfeeqtls5r00ep68mzkr', + P2P: 'agoric1n4fcxsnkxe4gj6e24naec99hzmc4pjfdccy5nj', + }, + feedPolicy: { + nobleAgoricChannelId: 'channel-21', + nobleDomainId: 4, + chainPolicies: { + Arbitrum: { + cctpTokenMessengerAddress: + '0x19330d10D9Cc8751218eaf51E8885D058642E08A', + chainId: 42161, + confirmations: 2, + nobleContractAddress: '0x19330d10D9Cc8751218eaf51E8885D058642E08A', + }, + }, + }, + chainInfo: /** @type {Record} */ ( + withChainCapabilities(fetchedChainInfo) + ), + assetInfo: defaultAssetInfo, + }, + DEVNET: { + oracles: { + DSRV: 'agoric1lw4e4aas9q84tq0q92j85rwjjjapf8dmnllnft', + Stakin: 'agoric1zj6vrrrjq4gsyr9lw7dplv4vyejg3p8j2urm82', + '01node': 'agoric1ra0g6crtsy6r3qnpu7ruvm7qd4wjnznyzg5nu4', + 'Simply Staking': 'agoric1qj07c7vfk3knqdral0sej7fa6eavkdn8vd8etf', + P2P: 'agoric10vjkvkmpp9e356xeh6qqlhrny2htyzp8hf88fk', + }, + feedPolicy: { + nobleAgoricChannelId: 'TODO', + nobleDomainId: 4, + chainPolicies: { + Arbitrum: { + cctpTokenMessengerAddress: '0xTODO', + chainId: 421614, + confirmations: 2, + nobleContractAddress: '0xTODO', + }, + }, + }, + chainInfo: /** @type {Record} */ ( + withChainCapabilities(fetchedChainInfo) // TODO: use devnet values + ), + assetInfo: defaultAssetInfo, // TODO: use emerynet values + }, + EMERYNET: { + oracles: { + gov1: 'agoric1ldmtatp24qlllgxmrsjzcpe20fvlkp448zcuce', + gov2: 'agoric140dmkrz2e42ergjj7gyvejhzmjzurvqeq82ang', + }, + feedPolicy: { + nobleAgoricChannelId: 'TODO', + nobleDomainId: 4, + chainPolicies: { + Arbitrum: { + cctpTokenMessengerAddress: '0xTODO', + chainId: 421614, + confirmations: 2, + nobleContractAddress: '0xTODO', + }, + }, + }, + chainInfo: /** @type {Record} */ ( + withChainCapabilities(fetchedChainInfo) // TODO: use emerynet values + ), + assetInfo: defaultAssetInfo, // TODO: use emerynet values + }, +}; + +/** @type {ParseArgsConfig['options']} */ +const options = { + flatFee: { type: 'string', default: '0.01' }, + variableRate: { type: 'string', default: '0.01' }, + maxVariableFee: { type: 'string', default: '5' }, + contractRate: { type: 'string', default: '0.2' }, + net: { type: 'string' }, + oracle: { type: 'string', multiple: true }, + usdcDenom: { + type: 'string', + default: + 'ibc/FE98AAD68F02F03565E9FA39A5E627946699B2B07115889ED812D8BA639576A9', + }, + chainInfo: { type: 'string' }, + assetInfo: { type: 'string' }, +}; +const oraclesUsage = 'use --oracle name:address ...'; + +const feedPolicyUsage = 'use --feedPolicy ...'; + +const chainInfoUsage = 'use --chainInfo chainName:CosmosChainInfo ...'; +const assetInfoUsage = + 'use --assetInfo denom:DenomInfo & {brandKey?: string} ...'; + +/** + * @typedef {{ + * flatFee: string; + * variableRate: string; + * maxVariableFee: string; + * contractRate: string; + * net?: string; + * oracle?: string[]; + * usdcDenom: string; + * feedPolicy?: string; + * chainInfo: string; + * assetInfo: string; + * }} FastUSDCOpts + */ + +const crossVatContext = /** @type {const} */ ({ + /** @type {Brand<'nat'>} */ + USDC: Far('USDC Brand'), +}); +const { USDC } = crossVatContext; +const USDC_DECIMALS = 6; +const unit = AmountMath.make(USDC, 10n ** BigInt(USDC_DECIMALS)); + +/** @type {CoreEvalBuilder} */ +export const defaultProposalBuilder = async ( + { publishRef, install }, + /** @type {FastUSDCConfig} */ config, +) => { + return harden({ + sourceSpec: '@agoric/fast-usdc/src/fast-usdc.start.js', + /** @type {[string, Parameters[1]]} */ + getManifestCall: [ + getManifestForFastUSDC.name, + { + options: toExternalConfig(config, crossVatContext, FastUSDCConfigShape), + installKeys: { + fastUsdc: publishRef( + install('@agoric/fast-usdc/src/fast-usdc.contract.js'), + ), + }, + }, + ], + }); +}; + +/** @type {DeployScriptFunction} */ +export default async (homeP, endowments) => { + const { writeCoreEval } = await makeHelpers(homeP, endowments); + const { scriptArgs } = endowments; + + /** @type {{ values: FastUSDCOpts }} */ + // @ts-expect-error ensured by options + const { + values: { + oracle: oracleArgs, + net, + usdcDenom, + feedPolicy, + chainInfo, + assetInfo, + ...fees + }, + } = parseArgs({ args: scriptArgs, options }); + + const parseFeedPolicy = () => { + if (net) { + if (!(net in configurations)) { + throw Error(`${net} not in ${keys(configurations)}`); + } + return configurations[net].feedPolicy; + } + if (!feedPolicy) throw Error(feedPolicyUsage); + return JSON.parse(feedPolicy); + }; + + const parseOracleArgs = () => { + if (net) { + if (!(net in configurations)) { + throw Error(`${net} not in ${keys(configurations)}`); + } + return configurations[net].oracles; + } + if (!oracleArgs) throw Error(oraclesUsage); + return Object.fromEntries( + oracleArgs.map(arg => { + const result = arg.match(/(?[^:]+):(?
.+)/); + if (!(result && result.groups)) throw Error(oraclesUsage); + const { name, address } = result.groups; + return [name, address]; + }), + ); + }; + + /** @param {string} numeral */ + const toAmount = numeral => multiplyBy(unit, parseRatio(numeral, USDC)); + /** @param {string} numeral */ + const toRatio = numeral => parseRatio(numeral, USDC); + const parseFeeConfigArgs = () => { + const { flatFee, variableRate, maxVariableFee, contractRate } = fees; + return { + flat: toAmount(flatFee), + variableRate: toRatio(variableRate), + maxVariable: toAmount(maxVariableFee), + contractRate: toRatio(contractRate), + }; + }; + + const parseChainInfo = () => { + if (net) { + if (!(net in configurations)) { + throw Error(`${net} not in ${keys(configurations)}`); + } + return configurations[net].chainInfo; + } + if (!chainInfo) throw Error(chainInfoUsage); + return JSON.parse(chainInfo); + }; + const parseAssetInfo = () => { + if (net) { + if (!(net in configurations)) { + throw Error(`${net} not in ${keys(configurations)}`); + } + return configurations[net].assetInfo; + } + if (!assetInfo) throw Error(assetInfoUsage); + return JSON.parse(assetInfo); + }; + + /** @type {FastUSDCConfig} */ + const config = harden({ + oracles: parseOracleArgs(), + terms: { + usdcDenom, + }, + feeConfig: parseFeeConfigArgs(), + feedPolicy: parseFeedPolicy(), + chainInfo: parseChainInfo(), + assetInfo: parseAssetInfo(), + }); + + await writeCoreEval('start-fast-usdc', utils => + defaultProposalBuilder(utils, config), + ); +}; diff --git a/packages/builders/scripts/testing/init-send-anywhere.js b/packages/builders/scripts/testing/init-send-anywhere.js new file mode 100644 index 00000000000..fb953768ea2 --- /dev/null +++ b/packages/builders/scripts/testing/init-send-anywhere.js @@ -0,0 +1,67 @@ +import { makeHelpers } from '@agoric/deploy-script-support'; +import { + getManifest, + startSendAnywhere, +} from '@agoric/orchestration/src/proposals/start-send-anywhere.js'; +import { parseArgs } from 'node:util'; + +/** + * @import {ParseArgsConfig} from 'node:util' + */ + +/** @type {ParseArgsConfig['options']} */ +const parserOpts = { + chainInfo: { type: 'string' }, + assetInfo: { type: 'string' }, +}; + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */ +export const defaultProposalBuilder = async ( + { publishRef, install }, + options, +) => + harden({ + sourceSpec: '@agoric/orchestration/src/proposals/start-send-anywhere.js', + getManifestCall: [ + getManifest.name, + { + installationRef: publishRef( + install( + '@agoric/orchestration/src/examples/send-anywhere.contract.js', + ), + ), + options, + }, + ], + }); + +/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */ +export default async (homeP, endowments) => { + const { scriptArgs } = endowments; + + const { + values: { chainInfo, assetInfo }, + } = parseArgs({ + args: scriptArgs, + options: parserOpts, + }); + + const parseChainInfo = () => { + if (typeof chainInfo !== 'string') return undefined; + return JSON.parse(chainInfo); + }; + const parseAssetInfo = () => { + if (typeof assetInfo !== 'string') return undefined; + return JSON.parse(assetInfo); + }; + const opts = harden({ + chainInfo: parseChainInfo(), + assetInfo: parseAssetInfo(), + }); + + const { writeCoreEval } = await makeHelpers(homeP, endowments); + + await writeCoreEval(startSendAnywhere.name, utils => + defaultProposalBuilder(utils, opts), + ); +}; diff --git a/packages/builders/test/snapshots/orchestration-imports.test.js.md b/packages/builders/test/snapshots/orchestration-imports.test.js.md index ecdfe224713..7749e126b16 100644 --- a/packages/builders/test/snapshots/orchestration-imports.test.js.md +++ b/packages/builders/test/snapshots/orchestration-imports.test.js.md @@ -143,6 +143,9 @@ Generated by [AVA](https://avajs.dev). icqEnabled: Object @match:kind { payload: 'boolean', }, + pfmEnabled: Object @match:kind { + payload: 'boolean', + }, stakingTokens: Object @match:arrayOf { payload: [ { @@ -215,6 +218,28 @@ Generated by [AVA](https://avajs.dev). payload: [], }, }, + DenomDetailShape: Object @match:splitRecord { + payload: [ + { + baseDenom: Object @match:string { + payload: [], + }, + baseName: Object @match:string { + payload: [], + }, + chainName: Object @match:string { + payload: [], + }, + }, + { + brand: Object @match:remotable { + payload: { + label: 'Brand', + }, + }, + }, + ], + }, DenomInfoShape: { base: Object @match:remotable { payload: { @@ -369,6 +394,23 @@ Generated by [AVA](https://avajs.dev). }, ], }, + OrchestrationPowersShape: { + agoricNames: Object @match:kind { + payload: 'remotable', + }, + localchain: Object @match:kind { + payload: 'remotable', + }, + orchestrationService: Object @match:kind { + payload: 'remotable', + }, + storageNode: Object @match:kind { + payload: 'remotable', + }, + timerService: Object @match:kind { + payload: 'remotable', + }, + }, OutboundConnectionHandlerI: Object @guard:interfaceGuard { payload: { defaultGuards: undefined, @@ -527,5 +569,7 @@ Generated by [AVA](https://avajs.dev). denomHash: Function denomHash {}, prepareChainHubAdmin: Function prepareChainHubAdmin {}, prepareCosmosInterchainService: Function prepareCosmosInterchainService {}, + registerChainsAndAssets: Function registerChainsAndAssets {}, + withChainCapabilities: Function withChainCapabilities {}, withOrchestration: Function withOrchestration {}, } diff --git a/packages/builders/test/snapshots/orchestration-imports.test.js.snap b/packages/builders/test/snapshots/orchestration-imports.test.js.snap index 36954c0af3c..e3536ba0aec 100644 Binary files a/packages/builders/test/snapshots/orchestration-imports.test.js.snap and b/packages/builders/test/snapshots/orchestration-imports.test.js.snap differ diff --git a/packages/cache/package.json b/packages/cache/package.json index 124743c6a74..4467520d79b 100644 --- a/packages/cache/package.json +++ b/packages/cache/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -23,13 +23,13 @@ "@agoric/notifier": "^0.6.2", "@agoric/store": "^0.9.2", "@agoric/vat-data": "^0.5.2", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1" + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2" }, "devDependencies": { "@agoric/zoe": "^0.26.2", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "publishConfig": { "access": "public" diff --git a/packages/casting/package.json b/packages/casting/package.json index e11ecf5f544..45e95f72256 100644 --- a/packages/casting/package.json +++ b/packages/casting/package.json @@ -11,7 +11,7 @@ "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "demo": "node -e 'import(\"./test/fake-rpc-server.js\").then(ns => ns.develop())'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -29,18 +29,18 @@ "@cosmjs/proto-signing": "^0.32.3", "@cosmjs/stargate": "^0.32.3", "@cosmjs/tendermint-rpc": "^0.32.3", - "@endo/errors": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/lockdown": "^1.0.12", - "@endo/marshal": "^1.6.1", - "@endo/promise-kit": "^1.1.7" + "@endo/errors": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/lockdown": "^1.0.13", + "@endo/marshal": "^1.6.2", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/cosmic-proto": "^0.4.0", - "@endo/ses-ava": "^1.2.7", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "express": "^5.0.1", "ws": "^7.2.0" }, diff --git a/packages/casting/src/leader.js b/packages/casting/src/leader.js index 793551326ba..eed8d9de8ca 100644 --- a/packages/casting/src/leader.js +++ b/packages/casting/src/leader.js @@ -31,7 +31,6 @@ export const makeRoundRobinLeader = (endpoints, leaderOptions = {}) => { } throw err; }, - // eslint-disable-next-line no-use-before-define watchCasting: _castingSpecP => pollingChangeFollower, /** * @template T @@ -55,10 +54,7 @@ export const makeRoundRobinLeader = (endpoints, leaderOptions = {}) => { }); } - retrying - .then(() => jitter && jitter(where)) - // eslint-disable-next-line no-use-before-define - .then(applyOne, reject); + retrying.then(() => jitter && jitter(where)).then(applyOne, reject); thisAttempt += 1; }; diff --git a/packages/client-utils/package.json b/packages/client-utils/package.json index 749c33e7fac..b4731e52a59 100644 --- a/packages/client-utils/package.json +++ b/packages/client-utils/package.json @@ -14,7 +14,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -23,7 +23,7 @@ }, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "ts-blank-space": "^0.4.1" }, "dependencies": { @@ -34,12 +34,12 @@ "@agoric/vats": "^0.15.1", "@cosmjs/stargate": "^0.32.3", "@cosmjs/tendermint-rpc": "^0.32.3", - "@endo/common": "^1.2.7", - "@endo/errors": "^1.2.7", - "@endo/marshal": "^1.6.1", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/common": "^1.2.8", + "@endo/errors": "^1.2.8", + "@endo/marshal": "^1.6.2", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "ava": { "extensions": { diff --git a/packages/client-utils/src/cli.js b/packages/client-utils/src/cli.js new file mode 100644 index 00000000000..f59c5a31e5a --- /dev/null +++ b/packages/client-utils/src/cli.js @@ -0,0 +1,20 @@ +import { LOCAL_CONFIG_KEY, fetchNetworkConfig } from './network-config.js'; + +/** + * @import {MinimalNetworkConfig} from './network-config.js'; + */ + +/** + * Fetch the network config for the AGORIC_NET environment variable. + * + * If none is set or it's 'local', return a local chain config. + * + * @param {{ env: typeof process.env, fetch: typeof fetch }} io + * @returns {Promise} + */ + +export const fetchEnvNetworkConfig = async ({ env, fetch }) => { + const net = env.AGORIC_NET || LOCAL_CONFIG_KEY; + + return fetchNetworkConfig(net, { fetch }); +}; diff --git a/packages/client-utils/src/main.js b/packages/client-utils/src/main.js index baf2ecde2d5..fad3e63225e 100644 --- a/packages/client-utils/src/main.js +++ b/packages/client-utils/src/main.js @@ -1,5 +1,8 @@ +export * from './cli.js'; +export * from './network-config.js'; export * from './rpc.js'; export * from './sync-tools.js'; +export * from './vstorage.js'; export * from './vstorage-kit.js'; export * from './wallet-utils.js'; diff --git a/packages/client-utils/src/network-config.js b/packages/client-utils/src/network-config.js new file mode 100644 index 00000000000..0d56fb4aa7e --- /dev/null +++ b/packages/client-utils/src/network-config.js @@ -0,0 +1,42 @@ +/** + * @typedef {{ rpcAddrs: string[], chainName: string }} MinimalNetworkConfig + */ + +export const toNetworkConfigUrl = agoricNetSubdomain => + `https://${agoricNetSubdomain}.agoric.net/network-config`; + +export const toRpcUrl = agoricNetSubdomain => + `https://${agoricNetSubdomain}.rpc.agoric.net:443`; + +/** @satisfies {MinimalNetworkConfig} */ +export const LOCAL_CONFIG = { + rpcAddrs: ['http://0.0.0.0:26657'], + chainName: 'agoriclocal', +}; + +export const LOCAL_CONFIG_KEY = 'local'; + +/** + * Fetches the network config for the given network specifier. + * + * @param {string} spec + * @param {{ fetch: typeof fetch }} io + * @returns {Promise} + */ +export const fetchNetworkConfig = async (spec, { fetch }) => { + const [netName, chainName] = spec.split(','); + + if (netName === LOCAL_CONFIG_KEY) { + return LOCAL_CONFIG; + } + + if (chainName) { + return { chainName, rpcAddrs: [toRpcUrl(netName)] }; + } + + return fetch(toNetworkConfigUrl(netName)) + .then(res => res.json()) + .catch(err => { + throw Error(`cannot get network config (${spec}): ${err.message}`); + }); +}; diff --git a/packages/client-utils/src/rpc.js b/packages/client-utils/src/rpc.js index 7ca6330b0d7..9e1bb03dafb 100644 --- a/packages/client-utils/src/rpc.js +++ b/packages/client-utils/src/rpc.js @@ -3,7 +3,7 @@ import { StargateClient } from '@cosmjs/stargate'; import { Tendermint34Client } from '@cosmjs/tendermint-rpc'; /** - * @typedef {{ rpcAddrs: string[], chainName: string }} MinimalNetworkConfig + * @import {MinimalNetworkConfig} from './network-config.js'; */ // TODO distribute load diff --git a/packages/client-utils/src/sync-tools.js b/packages/client-utils/src/sync-tools.js index bf67c2e4abf..0cf68a03a68 100644 --- a/packages/client-utils/src/sync-tools.js +++ b/packages/client-utils/src/sync-tools.js @@ -9,7 +9,8 @@ * - operation: query dest account's balance * - condition: dest account has a balance >= sent token * - Making sure an offer resulted successfully - * + * - Making sure an offer was exited successfully + * - Make sure an election held by a given committee (see @agoric/governance) turned out as expected */ /** @@ -17,6 +18,7 @@ * @property {number} [maxRetries] * @property {number} [retryIntervalMs] * @property {boolean} [reusePromise] + * @property {(value: unknown) => unknown} [renderResult] * * @typedef {RetryOptions & {errorMessage: string}} WaitUntilOptions * @@ -40,10 +42,12 @@ export const sleep = (ms, { log = () => {}, setTimeout }) => /** * From https://github.com/Agoric/agoric-sdk/blob/442f07c8f0af03281b52b90e90c27131eef6f331/multichain-testing/tools/sleep.ts#L24 * - * @param {() => Promise} operation - * @param {(result: any) => boolean} condition + * @template [T=unknown] + * @param {() => Promise} operation + * @param {(result: T) => boolean} condition * @param {string} message * @param {RetryOptions & {log?: typeof console.log, setTimeout: typeof global.setTimeout}} options + * @returns {Promise} */ export const retryUntilCondition = async ( operation, @@ -53,12 +57,13 @@ export const retryUntilCondition = async ( maxRetries = 6, retryIntervalMs = 3500, reusePromise = false, + renderResult = x => x, // XXX mixes ocaps with configuration options log = console.log, setTimeout, }, ) => { - console.log({ maxRetries, retryIntervalMs, reusePromise, message }); + console.log({ maxRetries, retryIntervalMs, message }); await null; // separate sync prologue @@ -90,14 +95,14 @@ export const retryUntilCondition = async ( log(`Attempt ${retries + 1} timed out`); if (!reusePromise) resultP = undefined; } else { - log('RESULT', result); + log('RESULT', renderResult(result)); if (condition(result)) { return result; } } } catch (error) { if (error instanceof Error) { - log(`Error: ${error.message}`); + log(`Error: ${error.message}: ${error.stack}`); } else { log(`Unknown error: ${String(error)}`); } @@ -182,7 +187,7 @@ const checkCosmosBalance = (balances, threshold) => { /** * @param {string} destAcct - * @param {{ log: (message: string) => void, query: () => Promise, setTimeout: typeof global.setTimeout}} io + * @param {{ log?: (message: string) => void, query: () => Promise, setTimeout: typeof global.setTimeout}} io * @param {{denom: string, value: number}} threshold * @param {WaitUntilOptions} options */ @@ -231,7 +236,7 @@ const checkOfferState = (offerStatus, waitForPayouts, offerId) => { * @param {string} addr * @param {string} offerId * @param {boolean} waitForPayouts - * @param {{ log: typeof console.log, follow: () => object, setTimeout: typeof global.setTimeout }} io + * @param {{ log?: typeof console.log, follow: () => object, setTimeout: typeof global.setTimeout }} io * @param {WaitUntilOptions} options */ export const waitUntilOfferResult = ( @@ -287,3 +292,137 @@ export const waitUntilInvitationReceived = (addr, io, options) => { { reusePromise: true, setTimeout, ...resolvedOptions }, ); }; + +/// ////////// Making sure an offer was exited successfully ///////////// + +const makeQueryWalletCurrent = follow => (/** @type {string} */ addr) => + follow('-lF', `:published.wallet.${addr}.current`); + +/** + * @param {object} update + * @param {string} offerId + * @returns {boolean} + */ +const checkLiveOffers = (update, offerId) => { + const liveOffers = update.liveOffers; + if (!liveOffers) { + return false; + } + return !liveOffers.some(element => element.includes(offerId)); +}; + +/** + * @param {string} addr + * @param {string} offerId + * @param {{ follow: () => object, log: typeof console.log, setTimeout: typeof global.setTimeout}} io + * @param {WaitUntilOptions} options + */ +export const waitUntilOfferExited = async (addr, offerId, io, options) => { + const { follow, setTimeout } = io; + const queryWalletCurrent = makeQueryWalletCurrent(follow); + const { errorMessage, ...resolvedOptions } = overrideDefaultOptions(options); + + return retryUntilCondition( + async () => queryWalletCurrent(addr), + update => checkLiveOffers(update, offerId), + errorMessage, + { setTimeout, ...resolvedOptions }, + ); +}; + +/// ////////// Make sure an election held by a given committee ////////// +/// ////////// (see @agoric/governance) turned out as expected ////////// + +/** + * @typedef {{ + * latestOutcome: { + * outcome: string; + * question: import('@endo/marshal').RemotableObject + * }, + * latestQuestion: { + * closingRule: { deadline: bigint }, + * questionHandle: import('@endo/marshal').RemotableObject + * } + * }} ElectionResult + */ + +/** + * @param {string} basePath + * @param {import('./vstorage-kit').VstorageKit} vstorage + * @returns {Promise} + */ +const fetchLatestEcQuestion = async (basePath, vstorage) => { + const pathOutcome = `${basePath}.latestOutcome`; + const pathQuestion = `${basePath}.latestQuestion`; + + const [latestOutcome, latestQuestion] = await Promise.all([ + /** @type {Promise} */ ( + vstorage.readLatestHead(pathOutcome) + ), + /** @type {Promise} */ ( + vstorage.readLatestHead(pathQuestion) + ), + ]); + + return { latestOutcome, latestQuestion }; +}; + +/** + * + * @param {ElectionResult} electionResult + * @param {{ outcome: string; deadline: bigint }} expectedResult + * @returns {boolean} + */ +const checkCommitteeElectionResult = (electionResult, expectedResult) => { + const { + latestOutcome: { outcome, question }, + latestQuestion: { + closingRule: { deadline }, + questionHandle, + }, + } = electionResult; + const { outcome: expectedOutcome, deadline: expectedDeadline } = + expectedResult; + + return ( + expectedOutcome === outcome && + deadline === expectedDeadline && + question === questionHandle + ); +}; + +/** + * Depends on "@agoric/governance" package's committee implementation where for a given committee + * there's two child nodes in vstorage named "latestOutcome" and "latestQuestion" respectively. + * + * @param {string} committeePathBase + * @param {{ + * outcome: string; + * deadline: bigint; + * }} expectedResult + * @param {{ + * vstorage: import('./vstorage-kit').VstorageKit; + * log: typeof console.log, + * setTimeout: typeof global.setTimeout + * }} io + * @param {WaitUntilOptions} options + */ +export const waitUntilElectionResult = ( + committeePathBase, + expectedResult, + io, + options, +) => { + const { vstorage, log, setTimeout } = io; + + const { maxRetries, retryIntervalMs, errorMessage } = + overrideDefaultOptions(options); + + return retryUntilCondition( + () => fetchLatestEcQuestion(committeePathBase, vstorage), + electionResult => + checkCommitteeElectionResult(electionResult, expectedResult), + errorMessage, + { maxRetries, retryIntervalMs, log, setTimeout }, + ); +}; diff --git a/packages/client-utils/src/vstorage-kit.js b/packages/client-utils/src/vstorage-kit.js index 71863eccf9a..bca8d7b074e 100644 --- a/packages/client-utils/src/vstorage-kit.js +++ b/packages/client-utils/src/vstorage-kit.js @@ -1,135 +1,17 @@ -/* global Buffer */ import { boardSlottingMarshaller, makeBoardRemote, } from '@agoric/vats/tools/board-utils.js'; +import { makeVStorage } from './vstorage.js'; export { boardSlottingMarshaller }; /** - * @import {MinimalNetworkConfig} from './rpc.js'; + * @import {MinimalNetworkConfig} from './network-config.js'; * @import {TypedPublished} from './types.js'; + * @import {VStorage} from './vstorage.js'; */ -/** - * @param {object} powers - * @param {typeof window.fetch} powers.fetch - * @param {MinimalNetworkConfig} config - */ -export const makeVStorage = (powers, config) => { - /** @param {string} path */ - const getJSON = path => { - const url = config.rpcAddrs[0] + path; - // console.warn('fetching', url); - return powers.fetch(url, { keepalive: true }).then(res => res.json()); - }; - // height=0 is the same as omitting height and implies the highest block - const url = (path = 'published', { kind = 'children', height = 0 } = {}) => - `/abci_query?path=%22/custom/vstorage/${kind}/${path}%22&height=${height}`; - - const readStorage = (path = 'published', { kind = 'children', height = 0 }) => - getJSON(url(path, { kind, height })) - .catch(err => { - throw Error(`cannot read ${kind} of ${path}: ${err.message}`); - }) - .then(data => { - const { - result: { response }, - } = data; - if (response?.code !== 0) { - /** @type {any} */ - const err = Error( - `error code ${response?.code} reading ${kind} of ${path}: ${response.log}`, - ); - err.code = response?.code; - err.codespace = response?.codespace; - throw err; - } - return data; - }); - - return { - url, - decode({ result: { response } }) { - const { code } = response; - if (code !== 0) { - throw response; - } - const { value } = response; - return Buffer.from(value, 'base64').toString(); - }, - /** - * - * @param {string} path - * @returns {Promise} latest vstorage value at path - */ - async readLatest(path = 'published') { - const raw = await readStorage(path, { kind: 'data' }); - return this.decode(raw); - }, - async keys(path = 'published') { - const raw = await readStorage(path, { kind: 'children' }); - return JSON.parse(this.decode(raw)).children; - }, - /** - * @param {string} path - * @param {number} [height] default is highest - * @returns {Promise<{blockHeight: number, values: string[]}>} - */ - async readAt(path, height = undefined) { - const raw = await readStorage(path, { kind: 'data', height }); - const txt = this.decode(raw); - /** @type {{ value: string }} */ - const { value } = JSON.parse(txt); - return JSON.parse(value); - }, - /** - * Read values going back as far as available - * - * @param {string} path - * @param {number | string} [minHeight] - * @returns {Promise} - */ - async readFully(path, minHeight = undefined) { - const parts = []; - // undefined the first iteration, to query at the highest - let blockHeight; - await null; - do { - // console.debug('READING', { blockHeight }); - let values; - try { - ({ blockHeight, values } = await this.readAt( - path, - blockHeight && Number(blockHeight) - 1, - )); - // console.debug('readAt returned', { blockHeight }); - } catch (err) { - if ( - // CosmosSDK ErrInvalidRequest with particular message text; - // misrepresentation of pruned data - // TODO replace after incorporating a fix to - // https://github.com/cosmos/cosmos-sdk/issues/19992 - err.codespace === 'sdk' && - err.code === 18 && - err.message.match(/pruned/) - ) { - // console.error(err); - break; - } - throw err; - } - parts.push(values); - // console.debug('PUSHED', values); - // console.debug('NEW', { blockHeight, minHeight }); - if (minHeight && Number(blockHeight) <= Number(minHeight)) break; - } while (blockHeight > 0); - return parts.flat(); - }, - }; -}; -/** @typedef {ReturnType} VStorage */ - /** @deprecated */ export const makeFromBoard = () => { const cache = new Map(); diff --git a/packages/client-utils/src/vstorage.js b/packages/client-utils/src/vstorage.js new file mode 100644 index 00000000000..b8eec61330e --- /dev/null +++ b/packages/client-utils/src/vstorage.js @@ -0,0 +1,125 @@ +/* global Buffer */ + +/** + * @import {MinimalNetworkConfig} from './network-config.js'; + */ + +/** + * @param {object} powers + * @param {typeof window.fetch} powers.fetch + * @param {MinimalNetworkConfig} config + */ +export const makeVStorage = (powers, config) => { + /** @param {string} path */ + const getJSON = path => { + const url = config.rpcAddrs[0] + path; + // console.warn('fetching', url); + return powers.fetch(url, { keepalive: true }).then(res => res.json()); + }; + // height=0 is the same as omitting height and implies the highest block + const url = (path = 'published', { kind = 'children', height = 0 } = {}) => + `/abci_query?path=%22/custom/vstorage/${kind}/${path}%22&height=${height}`; + + const readStorage = (path = 'published', { kind = 'children', height = 0 }) => + getJSON(url(path, { kind, height })) + .catch(err => { + throw Error(`cannot read ${kind} of ${path}: ${err.message}`); + }) + .then(data => { + const { + result: { response }, + } = data; + if (response?.code !== 0) { + /** @type {any} */ + const err = Error( + `error code ${response?.code} reading ${kind} of ${path}: ${response.log}`, + ); + err.code = response?.code; + err.codespace = response?.codespace; + throw err; + } + return data; + }); + + const vstorage = { + url, + decode({ result: { response } }) { + const { code } = response; + if (code !== 0) { + throw response; + } + const { value } = response; + return Buffer.from(value, 'base64').toString(); + }, + /** + * + * @param {string} path + * @returns {Promise} latest vstorage value at path + */ + async readLatest(path = 'published') { + const raw = await readStorage(path, { kind: 'data' }); + return vstorage.decode(raw); + }, + async keys(path = 'published') { + const raw = await readStorage(path, { kind: 'children' }); + return JSON.parse(vstorage.decode(raw)).children; + }, + /** + * @param {string} path + * @param {number} [height] default is highest + * @returns {Promise<{blockHeight: number, values: string[]}>} + */ + async readAt(path, height = undefined) { + const raw = await readStorage(path, { kind: 'data', height }); + const txt = vstorage.decode(raw); + /** @type {{ value: string }} */ + const { value } = JSON.parse(txt); + return JSON.parse(value); + }, + /** + * Read values going back as far as available + * + * @param {string} path + * @param {number | string} [minHeight] + * @returns {Promise} + */ + async readFully(path, minHeight = undefined) { + const parts = []; + // undefined the first iteration, to query at the highest + let blockHeight; + await null; + do { + // console.debug('READING', { blockHeight }); + let values; + try { + ({ blockHeight, values } = await vstorage.readAt( + path, + blockHeight && Number(blockHeight) - 1, + )); + // console.debug('readAt returned', { blockHeight }); + } catch (err) { + if ( + // CosmosSDK ErrInvalidRequest with particular message text; + // misrepresentation of pruned data + // TODO replace after incorporating a fix to + // https://github.com/cosmos/cosmos-sdk/issues/19992 + err.codespace === 'sdk' && + err.code === 18 && + err.message.match(/pruned/) + ) { + // console.error(err); + break; + } + throw err; + } + parts.push(values); + // console.debug('PUSHED', values); + // console.debug('NEW', { blockHeight, minHeight }); + if (minHeight && Number(blockHeight) <= Number(minHeight)) break; + } while (blockHeight > 0); + return parts.flat(); + }, + }; + return vstorage; +}; +/** @typedef {ReturnType} VStorage */ diff --git a/packages/client-utils/src/wallet-utils.js b/packages/client-utils/src/wallet-utils.js index cee34f6aa90..2cd63a1498d 100644 --- a/packages/client-utils/src/wallet-utils.js +++ b/packages/client-utils/src/wallet-utils.js @@ -6,7 +6,7 @@ import { boardSlottingMarshaller, makeVstorageKit } from './vstorage-kit.js'; /** * @import {Amount, Brand} from '@agoric/ertp/src/types.js' * @import {CurrentWalletRecord, UpdateRecord} from '@agoric/smart-wallet/src/smartWallet.js'; - * @import {MinimalNetworkConfig} from './rpc.js'; + * @import {MinimalNetworkConfig} from './network-config.js'; */ // XXX this is really a SmartWalletKit diff --git a/packages/client-utils/test/snapshots/exports.test.js.md b/packages/client-utils/test/snapshots/exports.test.js.md index 8a1c268100a..22f45e43b82 100644 --- a/packages/client-utils/test/snapshots/exports.test.js.md +++ b/packages/client-utils/test/snapshots/exports.test.js.md @@ -9,7 +9,11 @@ Generated by [AVA](https://avajs.dev). > Snapshot 1 [ + 'LOCAL_CONFIG', + 'LOCAL_CONFIG_KEY', 'boardSlottingMarshaller', + 'fetchEnvNetworkConfig', + 'fetchNetworkConfig', 'makeAgoricNames', 'makeFromBoard', 'makeStargateClient', @@ -21,8 +25,12 @@ Generated by [AVA](https://avajs.dev). 'retryUntilCondition', 'sleep', 'storageHelper', + 'toNetworkConfigUrl', + 'toRpcUrl', 'waitUntilAccountFunded', 'waitUntilContractDeployed', + 'waitUntilElectionResult', 'waitUntilInvitationReceived', + 'waitUntilOfferExited', 'waitUntilOfferResult', ] diff --git a/packages/client-utils/test/snapshots/exports.test.js.snap b/packages/client-utils/test/snapshots/exports.test.js.snap index 831d79980ba..c6c052973b5 100644 Binary files a/packages/client-utils/test/snapshots/exports.test.js.snap and b/packages/client-utils/test/snapshots/exports.test.js.snap differ diff --git a/packages/client-utils/test/sync-tools.test.js b/packages/client-utils/test/sync-tools.test.js index 0c6bfe3f5f0..4ad93a84016 100644 --- a/packages/client-utils/test/sync-tools.test.js +++ b/packages/client-utils/test/sync-tools.test.js @@ -1,11 +1,13 @@ /* eslint-env node */ // @ts-check import test from 'ava'; - +import { Far } from '@endo/marshal'; import { waitUntilAccountFunded, waitUntilContractDeployed, + waitUntilElectionResult, waitUntilInvitationReceived, + waitUntilOfferExited, waitUntilOfferResult, } from '../src/sync-tools.js'; @@ -13,13 +15,23 @@ import { const retryIntervalMs = 10; const DEFAULT_TIMEOUT = 30; -const makeFakeFollow = () => { - let value = [[]]; +const makeFakeVstorageKit = () => { + let value; const setValue = newValue => (value = newValue); + // TODO remove this when we switch all sync-tools to use client-utils's vstorageKit const follow = () => Promise.resolve(value); + /** + * @param {string} path Assumes the path will be something like 'published.auction.book0' + * where value = { book0: {...} } + */ + const readLatestHead = path => { + const key = path.split('.').at(-1); + // @ts-expect-error path will be a string joined by "." + return Promise.resolve(value[key]); + }; - return { setValue, follow }; + return { setValue, follow, readLatestHead }; }; const makeFakeBalanceQuery = () => { @@ -47,7 +59,8 @@ const makeFakeBalanceQuery = () => { }; test.serial('wait until contract is deployed', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); + setValue([['arbitrary', true]]); const waitP = waitUntilContractDeployed( 'name', { @@ -146,7 +159,7 @@ test.serial('wait until account funded, insufficient balance', async t => { test.serial( 'wait until offer result, balance update - should throw', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ status: {}, updated: 'balance' }); const waitP = waitUntilOfferResult( @@ -166,7 +179,7 @@ test.serial( ); test.serial('wait until offer result, wrong id - should throw', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ status: { id: 'your-offer' }, updated: 'offerStatus' }); const waitP = waitUntilOfferResult( @@ -185,7 +198,7 @@ test.serial('wait until offer result, wrong id - should throw', async t => { }); test.serial('wait until offer result, no "status" - should throw', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ updated: 'offerStatus' }); const waitP = waitUntilOfferResult( @@ -206,7 +219,7 @@ test.serial('wait until offer result, no "status" - should throw', async t => { test.serial( 'wait until offer result, numWantsSatisfied not equals to 1 - should throw', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ status: { id: 'my-offer', numWantsSatisfied: 0 }, updated: 'offerStatus', @@ -229,7 +242,7 @@ test.serial( ); test.serial('wait until offer result, do not wait for "payouts"', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ status: { id: 'my-offer' }, updated: 'offerStatus' }); const waitP = waitUntilOfferResult( @@ -265,7 +278,7 @@ test.serial('wait until offer result, do not wait for "payouts"', async t => { }); test.serial('wait until offer result, wait for "payouts"', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ status: { id: 'my-offer' }, updated: 'offerStatus' }); const waitP = waitUntilOfferResult( @@ -316,7 +329,7 @@ test.serial('wait until offer result, wait for "payouts"', async t => { test.serial( 'wait until invitation recevied, wrong "updated" value', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ updated: 'offerStatus' }); const waitP = waitUntilInvitationReceived( @@ -336,7 +349,7 @@ test.serial( test.serial( 'wait until invitation recevied, falty "currentAmount" object', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ updated: 'balance' }); const waitP = waitUntilInvitationReceived( @@ -361,7 +374,7 @@ test.serial( test.serial( 'wait until invitation recevied, brand string do not match', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({ updated: 'balance', currentAmount: { brand: 'foo bar foo' } }); const waitP = waitUntilInvitationReceived( @@ -379,7 +392,7 @@ test.serial( ); test.serial('wait until invitation recevied', async t => { - const { setValue, follow } = makeFakeFollow(); + const { setValue, follow } = makeFakeVstorageKit(); setValue({}); const waitP = waitUntilInvitationReceived( @@ -403,3 +416,199 @@ test.serial('wait until invitation recevied', async t => { await t.notThrowsAsync(waitP); }); + +test.serial('wait until offer exited', async t => { + const { setValue, follow } = makeFakeVstorageKit(); + setValue({}); + + const waitP = waitUntilOfferExited( + 'agoric12345', + 'my-offer', + { follow, log: t.log, setTimeout }, + { + maxRetries: 5, + retryIntervalMs, + errorMessage: 'Offer not exited', + }, + ); + + await t.throwsAsync(waitP); +}); + +test.serial('wait election result: question handle is respected', async t => { + const oldQuestionHandle = Far('Question 1', {}); + const newQuestionHandle = Far('Question 2', {}); + + const { setValue, readLatestHead } = makeFakeVstorageKit(); + const initState = harden({ + latestOutcome: { outcome: 'win', question: oldQuestionHandle }, + latestQuestion: { + closingRule: { deadline: 2n }, + questionHandle: newQuestionHandle, + }, + }); + setValue(initState); + + const waitFailP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 2n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 3, + retryIntervalMs, + }, + ); + + // Make sure the promise rejects when state is not updated + await t.throwsAsync(waitFailP); + + const waitHappyP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 2n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 5, + retryIntervalMs, + }, + ); + + // Now set the state to a value where the promise should resolve + const updatedState = harden({ + ...initState, + latestOutcome: { outcome: 'win', question: newQuestionHandle }, + }); + setTimeout(() => setValue(updatedState), DEFAULT_TIMEOUT); + + await t.notThrowsAsync(waitHappyP); +}); + +test.serial('wait election result: deadline is respected', async t => { + const questionHandle = Far('Question', {}); + + const { setValue, readLatestHead } = makeFakeVstorageKit(); + const initState = harden({ + latestOutcome: { outcome: 'win', question: questionHandle }, + latestQuestion: { + closingRule: { deadline: 2n }, + questionHandle, + }, + }); + setValue(initState); + + const waitFailP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 5n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 3, + retryIntervalMs, + }, + ); + + // Make sure the promise rejects when state is not updated + await t.throwsAsync(waitFailP); + + const waitHappyP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 5n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 5, + retryIntervalMs, + }, + ); + + // Now set the state to a value where the promise should resolve + const updatedState = harden({ + ...initState, + latestQuestion: { + closingRule: { deadline: 5n }, + questionHandle, + }, + }); + setTimeout(() => setValue(updatedState), DEFAULT_TIMEOUT); + + await t.notThrowsAsync(waitHappyP); +}); + +test.serial('wait election result: outcome is respected', async t => { + const questionHandle = Far('Question', {}); + + const { setValue, readLatestHead } = makeFakeVstorageKit(); + const initState = harden({ + latestOutcome: { outcome: 'lose', question: questionHandle }, + latestQuestion: { + closingRule: { deadline: 5n }, + questionHandle, + }, + }); + setValue(initState); + + const waitFailP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 5n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 3, + retryIntervalMs, + }, + ); + + // Make sure the promise rejects when state is not updated + await t.throwsAsync(waitFailP); + + const waitHappyP = waitUntilElectionResult( + 'dummyPath', + { outcome: 'win', deadline: 5n }, + { + // @ts-expect-error casting + vstorage: { readLatestHead }, + log: console.log, + setTimeout, + }, + { + errorMessage: 'Oops, election did not turn out as expected', + maxRetries: 5, + retryIntervalMs, + }, + ); + + // Now set the state to a value where the promise should resolve + const updatedState = harden({ + ...initState, + latestOutcome: { outcome: 'win', question: questionHandle }, + }); + setTimeout(() => setValue(updatedState), DEFAULT_TIMEOUT); + + await t.notThrowsAsync(waitHappyP); +}); diff --git a/packages/client-utils/test/vstorage.test.js b/packages/client-utils/test/vstorage.test.js new file mode 100644 index 00000000000..17de8f02700 --- /dev/null +++ b/packages/client-utils/test/vstorage.test.js @@ -0,0 +1,18 @@ +/* eslint-env node */ +// @ts-check +import test from 'ava'; +import { makeVStorage } from '../src/vstorage.js'; + +/** @type {any} */ +const fetch = () => Promise.resolve({}); + +test('readFully can be used without instance binding', async t => { + const vstorage = makeVStorage({ fetch }, { chainName: '', rpcAddrs: [''] }); + const { readFully } = vstorage; + + // Mock implementation to avoid actual network calls + vstorage.readAt = async () => ({ blockHeight: 0, values: ['test'] }); + + // This would throw if readFully required 'this' binding + await t.notThrowsAsync(() => readFully('some/path')); +}); diff --git a/packages/cosmic-proto/.eslintignore b/packages/cosmic-proto/.eslintignore index 884f4d8432d..7eee12970a7 100644 --- a/packages/cosmic-proto/.eslintignore +++ b/packages/cosmic-proto/.eslintignore @@ -1,6 +1,7 @@ +# keep synchronized with ../../.eslintignore node_modules/ -dist/ -main/ -module/ coverage/ -src/codegen/ +dist/ +proto/ +# leading `**` ensures that this pattern still matches relative to project root +**/src/codegen/ diff --git a/packages/cosmic-proto/package.json b/packages/cosmic-proto/package.json index 0f9b8b5a450..aa4daca25b2 100644 --- a/packages/cosmic-proto/package.json +++ b/packages/cosmic-proto/package.json @@ -133,7 +133,9 @@ "codegen": "./update-protos.sh && node scripts/codegen.cjs", "prepare": "npm run build", "lint-fix": "yarn lint:eslint --fix", - "lint": "tsc", + "lint": "run-s --continue-on-error lint:*", + "lint:types": "tsc", + "lint:eslint": "eslint .", "test": "ava", "test:xs": "exit 0", "test:live": "yarn build && scripts/test-live.js" @@ -145,17 +147,17 @@ "@agoric/cosmos": "^0.34.1", "@ava/typescript": "^4.1.0", "@cosmology/telescope": "https://gitpkg.vercel.app/agoric-labs/telescope/packages/telescope?8d2c2f6ba637a5578eead09a7368dc41c262a9d0", - "@endo/bundle-source": "^3.4.2", - "@endo/import-bundle": "^1.3.1", + "@endo/bundle-source": "^3.5.0", + "@endo/import-bundle": "^1.3.2", "ava": "^5.3.1", "rimraf": "^5.0.0", "tsd": "^0.31.1", "tsimp": "^2.0.11", - "typescript": "~5.6.2" + "typescript": "~5.7.1" }, "dependencies": { - "@endo/base64": "^1.0.8", - "@endo/init": "^1.1.6" + "@endo/base64": "^1.0.9", + "@endo/init": "^1.1.7" }, "resolutions": { "**/axios": "^1.6.7", diff --git a/packages/cosmic-proto/proto/agoric/vbank/vbank.proto b/packages/cosmic-proto/proto/agoric/vbank/vbank.proto index 7884abecc9a..4b47cf71c70 100644 --- a/packages/cosmic-proto/proto/agoric/vbank/vbank.proto +++ b/packages/cosmic-proto/proto/agoric/vbank/vbank.proto @@ -33,6 +33,13 @@ message Params { int64 reward_smoothing_blocks = 3 [ (gogoproto.moretags) = "yaml:\"reward_smoothing_blocks\"" ]; + + // allowed_monitoring_accounts is an array of account addresses that can be + // monitored for sends and receives. An element of `"*"` will permit any + // address. + repeated string allowed_monitoring_accounts = 4 [ + (gogoproto.moretags) = "yaml:\"allowed_monitoring_accounts\"" + ]; } // The current state of the module. diff --git a/packages/cosmic-proto/scripts/codegen.cjs b/packages/cosmic-proto/scripts/codegen.cjs index 0de1c063495..296fcb07c2e 100644 --- a/packages/cosmic-proto/scripts/codegen.cjs +++ b/packages/cosmic-proto/scripts/codegen.cjs @@ -1,6 +1,6 @@ #!/usr/bin/env node /* eslint-env node */ -const { exec, spawnSync } = require('child_process'); +const { exec, execSync, spawnSync } = require('child_process'); const path = require('path'); const process = require('process'); const telescope = require('@cosmology/telescope').default; @@ -14,11 +14,12 @@ rimraf(outPath); * Make the JsonSafe type import compatible with TS verbatimImportSyntax * * @param {string} directory + * @param {boolean} gnuSed */ -function fixTypeImport(directory) { +function fixTypeImport(directory, gnuSed) { const fullPath = path.resolve(directory); const command = ` - find ${fullPath} -type f -exec sed -i '' \ + find ${fullPath} -type f -exec ${gnuSed ? 'sed -i' : 'sed -i ""'} \ -e 's/import { JsonSafe/import {type JsonSafe/g' \ -e 's/\\([{,]\\) \\([[:alnum:]_]*SDKType\\)/\\1 type \\2/g' {} + `; @@ -127,7 +128,11 @@ telescope({ console.log('🔨 code generated by Telescope'); // for all files under codegen/ replace "import { JsonSafe" with "import type { JsonSafe" - fixTypeImport('./src/codegen'); + const gnuSed = + execSync(`sed --help 2>&1 | sed 2q | grep -qe '-i ' || printf gnu`, { + encoding: 'utf8', + }) === 'gnu'; + fixTypeImport('./src/codegen', gnuSed); console.log('🔧 type keyword added'); spawnSync('yarn', ['prettier', '--write', 'src'], { diff --git a/packages/cosmic-proto/src/codegen/agoric/vbank/vbank.ts b/packages/cosmic-proto/src/codegen/agoric/vbank/vbank.ts index 96d8b2bcd45..79cea356dd9 100644 --- a/packages/cosmic-proto/src/codegen/agoric/vbank/vbank.ts +++ b/packages/cosmic-proto/src/codegen/agoric/vbank/vbank.ts @@ -23,6 +23,12 @@ export interface Params { * reward_epoch_duration_blocks. */ rewardSmoothingBlocks: bigint; + /** + * allowed_monitoring_accounts is an array of account addresses that can be + * monitored for sends and receives. An element of `"*"` will permit any + * address. + */ + allowedMonitoringAccounts: string[]; } export interface ParamsProtoMsg { typeUrl: '/agoric.vbank.Params'; @@ -33,6 +39,7 @@ export interface ParamsSDKType { reward_epoch_duration_blocks: bigint; per_epoch_reward_fraction: string; reward_smoothing_blocks: bigint; + allowed_monitoring_accounts: string[]; } /** The current state of the module. */ export interface State { @@ -67,6 +74,7 @@ function createBaseParams(): Params { rewardEpochDurationBlocks: BigInt(0), perEpochRewardFraction: '', rewardSmoothingBlocks: BigInt(0), + allowedMonitoringAccounts: [], }; } export const Params = { @@ -88,6 +96,9 @@ export const Params = { if (message.rewardSmoothingBlocks !== BigInt(0)) { writer.uint32(24).int64(message.rewardSmoothingBlocks); } + for (const v of message.allowedMonitoringAccounts) { + writer.uint32(34).string(v!); + } return writer; }, decode(input: BinaryReader | Uint8Array, length?: number): Params { @@ -110,6 +121,9 @@ export const Params = { case 3: message.rewardSmoothingBlocks = reader.int64(); break; + case 4: + message.allowedMonitoringAccounts.push(reader.string()); + break; default: reader.skipType(tag & 7); break; @@ -128,6 +142,11 @@ export const Params = { rewardSmoothingBlocks: isSet(object.rewardSmoothingBlocks) ? BigInt(object.rewardSmoothingBlocks.toString()) : BigInt(0), + allowedMonitoringAccounts: Array.isArray( + object?.allowedMonitoringAccounts, + ) + ? object.allowedMonitoringAccounts.map((e: any) => String(e)) + : [], }; }, toJSON(message: Params): JsonSafe { @@ -142,6 +161,13 @@ export const Params = { (obj.rewardSmoothingBlocks = ( message.rewardSmoothingBlocks || BigInt(0) ).toString()); + if (message.allowedMonitoringAccounts) { + obj.allowedMonitoringAccounts = message.allowedMonitoringAccounts.map( + e => e, + ); + } else { + obj.allowedMonitoringAccounts = []; + } return obj; }, fromPartial(object: Partial): Params { @@ -157,6 +183,8 @@ export const Params = { object.rewardSmoothingBlocks !== null ? BigInt(object.rewardSmoothingBlocks.toString()) : BigInt(0); + message.allowedMonitoringAccounts = + object.allowedMonitoringAccounts?.map(e => e) || []; return message; }, fromProtoMsg(message: ParamsProtoMsg): Params { diff --git a/packages/cosmic-swingset/package.json b/packages/cosmic-swingset/package.json index 4751fdcd1d8..8099c2b7040 100644 --- a/packages/cosmic-swingset/package.json +++ b/packages/cosmic-swingset/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -31,16 +31,16 @@ "@agoric/swingset-vat": "^0.32.2", "@agoric/telemetry": "^0.6.2", "@agoric/vm-config": "^0.1.0", - "@endo/bundle-source": "^3.4.2", - "@endo/env-options": "^1.1.7", - "@endo/errors": "^1.2.7", - "@endo/import-bundle": "^1.3.1", - "@endo/init": "^1.1.6", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", + "@endo/bundle-source": "^3.5.0", + "@endo/env-options": "^1.1.8", + "@endo/errors": "^1.2.8", + "@endo/import-bundle": "^1.3.2", + "@endo/init": "^1.1.7", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", "@iarna/toml": "^2.2.3", "@opentelemetry/api": "~1.3.0", "@opentelemetry/sdk-metrics": "~1.9.0", @@ -51,7 +51,7 @@ }, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "publishConfig": { "access": "public" diff --git a/packages/cosmic-swingset/scripts/single-node.sh b/packages/cosmic-swingset/scripts/single-node.sh index 711cf5b4c92..438339ed3a7 100755 --- a/packages/cosmic-swingset/scripts/single-node.sh +++ b/packages/cosmic-swingset/scripts/single-node.sh @@ -29,18 +29,7 @@ $DAEMON gentx --name validator $STAKE --keyring-backend="test" $DAEMON collect-gentxs # Silly old Darwin -case $(sed --help 2>&1 | sed -n 2p) in - "usage: sed script"*"[-i extension]"*) - sedi() { - sed -i '' ${1+"$@"} - } - ;; - *) - sedi() { - sed -i ${1+"$@"} - } - ;; -esac +alias sedi="sed -i $(sed --help 2>&1 | sed 2q | grep -qe '-i ' && echo "''")" case $DAEMON in ag-chain-cosmos) diff --git a/packages/cosmic-swingset/src/anylogger-agoric.js b/packages/cosmic-swingset/src/anylogger-agoric.js index d870c48cb3e..92353c40e0a 100644 --- a/packages/cosmic-swingset/src/anylogger-agoric.js +++ b/packages/cosmic-swingset/src/anylogger-agoric.js @@ -32,8 +32,8 @@ const selectedCode = anylogger.levels[selectedLevel]; const globalCode = selectedCode === undefined ? -Infinity : selectedCode; const oldExt = anylogger.ext; -anylogger.ext = (l, o) => { - l = oldExt(l, o); +anylogger.ext = logger => { + const l = oldExt(logger); l.enabledFor = lvl => globalCode >= anylogger.levels[lvl]; const prefix = l.name.replace(/:/g, ': '); diff --git a/packages/cosmic-swingset/src/chain-main.js b/packages/cosmic-swingset/src/chain-main.js index 0221529fbf5..5f65f771e62 100644 --- a/packages/cosmic-swingset/src/chain-main.js +++ b/packages/cosmic-swingset/src/chain-main.js @@ -1,6 +1,6 @@ // @ts-check -import path from 'node:path'; +import nativePath from 'node:path'; import v8 from 'node:v8'; import process from 'node:process'; import fs from 'node:fs'; @@ -167,7 +167,11 @@ const makePrefixedBridgeStorage = ( }); }; -export default async function main(progname, args, { env, homedir, agcc }) { +export default async function main( + progname, + args, + { env, homedir, path = nativePath, agcc }, +) { const portNums = {}; // TODO: use the 'basedir' pattern @@ -222,7 +226,6 @@ export default async function main(progname, args, { env, homedir, agcc }) { // Actually run the main ag-chain-cosmos program. Before we start the daemon, // there will be a call to nodePort/AG_COSMOS_INIT, otherwise exit. - // eslint-disable-next-line no-use-before-define const nodePort = registerPortHandler(toSwingSet); // Need to keep the process alive until Go exits. diff --git a/packages/cosmic-swingset/src/entrypoint.js b/packages/cosmic-swingset/src/entrypoint.js index 7e1b2de18b2..e6b305a496e 100755 --- a/packages/cosmic-swingset/src/entrypoint.js +++ b/packages/cosmic-swingset/src/entrypoint.js @@ -18,9 +18,9 @@ import main from './chain-main.js'; const log = anylogger('ag-chain-cosmos'); main(process.argv[1], process.argv.splice(2), { - path, - homedir: os.homedir(), env: process.env, + homedir: os.homedir(), + path, agcc, }).then( _res => 0, diff --git a/packages/cosmic-swingset/src/helpers/bufferedStorage.js b/packages/cosmic-swingset/src/helpers/bufferedStorage.js index 8d860e06f58..0233faa492d 100644 --- a/packages/cosmic-swingset/src/helpers/bufferedStorage.js +++ b/packages/cosmic-swingset/src/helpers/bufferedStorage.js @@ -5,7 +5,7 @@ import { assert, Fail } from '@endo/errors'; // XXX Do these "StorageAPI" functions belong in their own package? /** - * @template {unknown} [T=unknown] + * @template [T=unknown] * @typedef {{ * has: (key: string) => boolean, * get: (key: string) => T | undefined, @@ -16,7 +16,7 @@ import { assert, Fail } from '@endo/errors'; */ /** - * @template {unknown} [T=unknown] + * @template [T=unknown] * @typedef {KVStore & {commit: () => void, abort: () => void}} BufferedKVStore */ @@ -210,15 +210,13 @@ export function provideEnhancedKVStore(mapOrKvStore = new Map()) { * until told to commit (or abort) them. * * @template [T=unknown] - * @param {KVStore} kvStore The StorageAPI object to wrap - * @param {{ - * onGet?: (key: string, value: T | undefined) => void, // a callback invoked after getting a value from kvStore - * onPendingSet?: (key: string, value: T) => void, // a callback invoked after a new uncommitted value is set - * onPendingDelete?: (key: string) => void, // a callback invoked after a new uncommitted delete - * onCommit?: () => void, // a callback invoked after pending operations have been committed - * onAbort?: () => void, // a callback invoked after pending operations have been aborted - * }} listeners Optional callbacks to be invoked when respective events occur - * + * @param {KVStore} kvStore the StorageAPI object to wrap + * @param {object} [listeners] optional callbacks to be invoked when respective events occur + * @param {(key: string, value: T | undefined) => void} [listeners.onGet] a callback invoked after getting a value from kvStore + * @param {(key: string, value: T) => void} [listeners.onPendingSet] a callback invoked after a new uncommitted value is set + * @param {(key: string) => void} [listeners.onPendingDelete] a callback invoked after a new uncommitted delete + * @param {() => void} [listeners.onCommit] a callback invoked after pending operations have been committed + * @param {() => void} [listeners.onAbort] a callback invoked after pending operations have been aborted * @returns {{kvStore: KVStore} & Pick, 'commit' | 'abort'>} */ export function makeBufferedStorage(kvStore, listeners = {}) { diff --git a/packages/cosmic-swingset/src/sim-chain.js b/packages/cosmic-swingset/src/sim-chain.js index f5192ce1a20..2ffecc93914 100644 --- a/packages/cosmic-swingset/src/sim-chain.js +++ b/packages/cosmic-swingset/src/sim-chain.js @@ -19,8 +19,11 @@ import { launch } from './launch-chain.js'; import { getTelemetryProviders } from './kernel-stats.js'; import { DEFAULT_SIM_SWINGSET_PARAMS, QueueInbound } from './sim-params.js'; import { parseQueueSizes } from './params.js'; +import { makeKVStoreFromMap } from './helpers/bufferedStorage.js'; import { makeQueue, makeQueueStorageMock } from './helpers/make-queue.js'; +/** @import { Mailbox } from '@agoric/swingset-vat' */ + const console = anylogger('fake-chain'); const TELEMETRY_SERVICE_NAME = 'sim-cosmos'; @@ -28,10 +31,11 @@ const TELEMETRY_SERVICE_NAME = 'sim-cosmos'; const PRETEND_BLOCK_DELAY = 5; const scaleBlockTime = ms => Math.floor(ms / 1000); -async function makeMapStorage(file) { - let content; +async function makeMailboxStorageFromFile(file) { + /** @type {Map} */ const map = new Map(); - map.commit = async () => { + const kvStore = makeKVStoreFromMap(map); + const commit = async () => { const obj = {}; for (const [k, v] of map.entries()) { obj[k] = exportMailbox(v); @@ -39,20 +43,24 @@ async function makeMapStorage(file) { const json = stringify(obj); await fs.promises.writeFile(file, json); }; - - await (async () => { - content = await fs.promises.readFile(file); + const read = async () => { + const content = await fs.promises.readFile(file, 'utf8'); return JSON.parse(content); - })().then( - obj => { - for (const [k, v] of Object.entries(obj)) { - map.set(k, importMailbox(v)); - } - }, - () => {}, - ); + }; + const load = async obj => { + map.clear(); + for (const [k, v] of Object.entries(obj)) { + map.set(k, importMailbox(v)); + } + }; + const reset = async () => { + const obj = await read(); + await load(obj); + }; - return map; + await read().then(load, () => {}); + + return { ...kvStore, commit, abort: reset }; } export async function connectToFakeChain(basedir, GCI, delay, inbound) { @@ -61,7 +69,7 @@ export async function connectToFakeChain(basedir, GCI, delay, inbound) { const mailboxFile = path.join(basedir, `fake-chain-${GCI}-mailbox.json`); const bootAddress = `${GCI}-client`; - const mailboxStorage = await makeMapStorage(mailboxFile); + const mailboxStorage = await makeMailboxStorageFromFile(mailboxFile); const argv = { giveMeAllTheAgoricPowers: true, @@ -109,6 +117,7 @@ export async function connectToFakeChain(basedir, GCI, delay, inbound) { const actionQueue = makeQueue(actionQueueStorage); const s = await launch({ + bridgeOutbound: /** @type {any} */ (undefined), actionQueueStorage, highPriorityQueueStorage, kernelStateDBDir: stateDBdir, @@ -120,13 +129,20 @@ export async function connectToFakeChain(basedir, GCI, delay, inbound) { debugName: GCI, metricsProvider, slogSender, + swingsetConfig: {}, }); const { blockingSend, savedHeight } = s; let blockHeight = savedHeight; const intoChain = []; - let nextBlockTimeout = 0; + /** @type {undefined | ReturnType} */ + let nextBlockTimeout; + const resetNextBlockTimeout = () => { + if (nextBlockTimeout === undefined) return; + clearTimeout(nextBlockTimeout); + nextBlockTimeout = undefined; + }; const maximumDelay = (delay || PRETEND_BLOCK_DELAY) * 1000; @@ -172,8 +188,7 @@ export async function connectToFakeChain(basedir, GCI, delay, inbound) { // Done processing, "commit the block". await blockingSend({ type: 'COMMIT_BLOCK', blockHeight, blockTime }); - clearTimeout(nextBlockTimeout); - // eslint-disable-next-line no-use-before-define + resetNextBlockTimeout(); nextBlockTimeout = setTimeout(simulateBlock, maximumDelay); // TODO: maybe add latency to the inbound messages. @@ -198,7 +213,7 @@ export async function connectToFakeChain(basedir, GCI, delay, inbound) { // Only actually simulate a block if we're not in bootstrap. let p; if (blockHeight && !delay) { - clearTimeout(nextBlockTimeout); + resetNextBlockTimeout(); p = simulateBlock(); } await p; diff --git a/packages/cosmic-swingset/test/clean-core-eval.test.js b/packages/cosmic-swingset/test/clean-core-eval.test.js index 9c0a9717f76..e04cb24f401 100644 --- a/packages/cosmic-swingset/test/clean-core-eval.test.js +++ b/packages/cosmic-swingset/test/clean-core-eval.test.js @@ -5,6 +5,8 @@ import { } from '../scripts/clean-core-eval.js'; test('defangEvaluableCode is working', t => { + /** @typedef {import('ava').ThrowsExpectation} EvaluationExpectation */ + /** @type {Array<[string, string?, EvaluationExpectation?, EvaluationExpectation?]>} */ const samples = [ [''], [ diff --git a/packages/cosmic-swingset/test/gov-code.js b/packages/cosmic-swingset/test/gov-code.js index a66d2b11994..dd52188eeeb 100644 --- a/packages/cosmic-swingset/test/gov-code.js +++ b/packages/cosmic-swingset/test/gov-code.js @@ -1,4 +1,5 @@ /* global E */ +/// /** * This file, along with the companion `gov-permit.json`, are used to test "big * hammer" chain governance. They don't have a functional purpose outside of diff --git a/packages/cosmic-swingset/test/provision-smartwallet.test.js b/packages/cosmic-swingset/test/provision-smartwallet.test.js index 2162550fe82..8fdea18bd30 100644 --- a/packages/cosmic-swingset/test/provision-smartwallet.test.js +++ b/packages/cosmic-swingset/test/provision-smartwallet.test.js @@ -40,7 +40,7 @@ test.before(async t => { const io = { spawn: ambientSpawn, cwd: makefileDir }; const pspawnMake = pspawn('make', io); const pspawnAgd = pspawn('bin/ag-chain-cosmos', io); - const scenario2 = makeScenario2({ pspawnMake, pspawnAgd, delay, log: t.log }); + const scenario2 = makeScenario2({ pspawnMake, pspawnAgd, log: t.log }); const walletTool = makeWalletTool({ runMake: scenario2.runMake, pspawnAgd, @@ -65,6 +65,7 @@ test.before(async t => { // if run with the test above. // TODO: https://github.com/Agoric/agoric-sdk/issues/6766 test.skip('integration test: smart wallet provision', async t => { + // @ts-expect-error context has unknown type const { scenario2, walletTool, soloAddr } = t.context; const enoughBlocksToProvision = 7; diff --git a/packages/cosmic-swingset/test/run-policy.test.js b/packages/cosmic-swingset/test/run-policy.test.js index e062b48f622..91157278905 100644 --- a/packages/cosmic-swingset/test/run-policy.test.js +++ b/packages/cosmic-swingset/test/run-policy.test.js @@ -15,6 +15,7 @@ import { makeVatCleanupBudgetFromKeywords, } from '../src/sim-params.js'; +/** @import { ManagerType, SwingSetConfig } from '@agoric/swingset-vat' */ /** @import { KVStore } from '../src/helpers/bufferedStorage.js' */ /** @@ -59,6 +60,7 @@ test('cleanup work must be limited by vat_cleanup_budget', async t => { bundles: makeSourceDescriptors({ puppet: '@agoric/swingset-vat/tools/vat-puppet.js', }), + /** @type {Partial} */ configOverrides: { // Aggressive GC. defaultReapInterval: 1, diff --git a/packages/cosmic-swingset/tools/test-kit.js b/packages/cosmic-swingset/tools/test-kit.js index ee14da4a4e7..175038c291c 100644 --- a/packages/cosmic-swingset/tools/test-kit.js +++ b/packages/cosmic-swingset/tools/test-kit.js @@ -35,6 +35,7 @@ const stripUndefined = obj => Object.entries(obj).filter(([_key, value]) => value !== undefined), ); +/** @type {InitMsg} */ export const defaultInitMessage = harden( makeInitMsg({ type: SwingsetMessageType.AG_COSMOS_INIT, @@ -59,6 +60,7 @@ export const defaultInitMessage = harden( ), }), ); +/** @type {InitMsg} */ export const defaultBootstrapMessage = harden({ ...deepCopyJsonable(defaultInitMessage), blockHeight: 1, diff --git a/packages/cosmic-swingset/tsconfig.json b/packages/cosmic-swingset/tsconfig.json index 993dde391d7..ac54f062118 100644 --- a/packages/cosmic-swingset/tsconfig.json +++ b/packages/cosmic-swingset/tsconfig.json @@ -1,9 +1,6 @@ // This file can contain .js-specific Typescript compiler config. { "extends": "../../tsconfig.json", - "compilerOptions": { - "checkJs": false, - }, "include": [ "calc-*.js", "src/**/*.js", diff --git a/packages/create-dapp/package.json b/packages/create-dapp/package.json index dd1112eff6d..bea7c4e6bc8 100644 --- a/packages/create-dapp/package.json +++ b/packages/create-dapp/package.json @@ -12,7 +12,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -21,7 +21,7 @@ }, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "dependencies": { "agoric": "^0.21.1" diff --git a/packages/deploy-script-support/package.json b/packages/deploy-script-support/package.json index d34ea67d5de..49c34d94af2 100644 --- a/packages/deploy-script-support/package.json +++ b/packages/deploy-script-support/package.json @@ -34,7 +34,7 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/ertp": "^0.16.2", "@agoric/import-manager": "^0.3.11", "@agoric/internal": "^0.3.2", @@ -42,17 +42,17 @@ "@agoric/store": "^0.9.2", "@agoric/time": "^0.3.2", "@agoric/zoe": "^0.26.2", - "@endo/base64": "^1.0.8", - "@endo/bundle-source": "^3.4.2", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7", - "@endo/zip": "^1.0.8" + "@endo/base64": "^1.0.9", + "@endo/bundle-source": "^3.5.0", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8", + "@endo/zip": "^1.0.9" }, "devDependencies": { "@agoric/vats": "^0.15.1", - "@endo/init": "^1.1.6", + "@endo/init": "^1.1.7", "ava": "^5.3.0", "import-meta-resolve": "^2.2.1" }, diff --git a/packages/deployment/package.json b/packages/deployment/package.json index bd6f8c4976c..1a2ca5ba4d5 100644 --- a/packages/deployment/package.json +++ b/packages/deployment/package.json @@ -19,9 +19,9 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", + "@endo/errors": "^1.2.8", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", "better-sqlite3": "^9.1.1", "chalk": "^5.2.0", "deterministic-json": "^1.0.5", diff --git a/packages/deployment/src/init.js b/packages/deployment/src/init.js index df9fcd7c316..b8590ff93c6 100644 --- a/packages/deployment/src/init.js +++ b/packages/deployment/src/init.js @@ -423,7 +423,6 @@ const doInit = } // Allocate the datacenters. - // eslint-disable-next-line no-constant-condition while (true) { const dcsWithNodeCount = dcs && diff --git a/packages/deployment/src/main.js b/packages/deployment/src/main.js index f550e9a37d7..f9c442edf8e 100644 --- a/packages/deployment/src/main.js +++ b/packages/deployment/src/main.js @@ -216,7 +216,6 @@ show-config display the client connection parameters }); await guardFile(`${PROVISION_DIR}/ssh_known_hosts.stamp`, async () => { - // eslint-disable-next-line no-constant-condition while (true) { const code = await reMain(['play', 'update_known_hosts']); if (code === 0) { diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 1d656a9ee7a..b574ef21155 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -25,7 +25,7 @@ "eslint-config.*" ], "peerDependencies": { - "@endo/eslint-plugin": "^2.2.2", + "@endo/eslint-plugin": "^2.2.3", "@jessie.js/eslint-plugin": "^0.4.1", "typescript-eslint": "^7.13.1", "eslint": "^8.57.0", diff --git a/packages/fast-usdc/CHANGELOG.md b/packages/fast-usdc/CHANGELOG.md new file mode 100644 index 00000000000..420e6f23d0e --- /dev/null +++ b/packages/fast-usdc/CHANGELOG.md @@ -0,0 +1 @@ +# Change Log diff --git a/packages/fast-usdc/README.md b/packages/fast-usdc/README.md index f606d557657..8d31d5bdf5c 100644 --- a/packages/fast-usdc/README.md +++ b/packages/fast-usdc/README.md @@ -17,3 +17,83 @@ Over time we can update our tooling to decouple this more from the `packages` di 2. Export bootstrap testing utilities from `@agoric/boot`, allowing this to be above `@agoric/boot` in the package graph 3. Update CI to support packages that aren't under `packages/`, eg. a top-level `dapps` directory 4. Move this package out of agoric-sdk + +# Transaction feed + +## Oracles interface + +Oracles run off-chain and interact with the contract via an Agoric smart wallet bridge. +```mermaid +sequenceDiagram + title Becoming an oracle operator + participant OW as Operator N
Smart Wallet + participant FUC as Fast USDC
Contract Exo + participant CE as Core Eval + + CE->>FUC: makeOperatorInvitation() + FUC-->>CE: operatorInvitation + CE->>+OW: deposit(operatorInvitation) + + Note left of FUC: Off-chain wallet accepts the operator invitation + + OW->>+FUC: offer(operatorInvitation) + FUC-->>OW: operator invitationMakers: {SubmitEvidence} + + Note left of FUC: Off-chain watcher detects evidence + OW->>+FUC: offer(SubmitEvidence, evidence) +``` + +```mermaid +sequenceDiagram + title Receiving evidence + participant W as Operator N
Smart Wallet + participant A as Operator N
Admin Oexo + participant TF as Transaction
Feed + + W->>A: offer(SubmitEvidence, evidence) + + Note left of A: Once 3 operators push the same… + + A->>TF: notify(evidence) +``` + +# Status Manager + +### Pending Advance State Diagram + +*Transactions are qualified by the OCW and EventFeed before arriving to the Advancer.* + +```mermaid +stateDiagram-v2 + [*] --> Observed: observe() + [*] --> Advancing: advancing() + + Advancing --> Advanced: advanceOutcome(...true) + Advancing --> AdvanceFailed: advanceOutcome(...false) + + Observed --> [*]: dequeueStatus() + Advanced --> [*]: dequeueStatus() + AdvanceFailed --> [*]: dequeueStatus() + + note right of [*] + After dequeueStatus(): + Transaction is removed + from pendingTxs store. + Settler will .disburse() + or .forward() + end note +``` + +### Complete state diagram (starting from Transaction Feed into Advancer) + +```mermaid +stateDiagram-v2 + Observed --> Advancing + Observed --> Forwarding:Minted + Forwarding --> Forwarded + Advancing --> Advanced + Advanced --> Disbursed + AdvanceFailed --> Forwarding + Advancing --> AdvanceFailed + Forwarding --> ForwardFailed +``` diff --git a/packages/fast-usdc/demo/testnet/config.json b/packages/fast-usdc/demo/testnet/config.json new file mode 100644 index 00000000000..13b4420b23f --- /dev/null +++ b/packages/fast-usdc/demo/testnet/config.json @@ -0,0 +1,11 @@ +{ + "nobleSeed": "stamp later develop betray boss ranch abstract puzzle calm right bounce march orchard edge correct canal fault miracle void dutch lottery lucky observe armed", + "ethSeed": "a4b7f431465df5dc1458cd8a9be10c42da8e3729e3ce53f18814f48ae2a98a08", + "nobleToAgoricChannel": "channel-21", + "agoricRpc": "https://main.rpc.agoric.net", + "nobleRpc": "https://noble-rpc.polkachu.com", + "nobleApi": "https://noble-api.polkachu.com", + "ethRpc": "https://sepolia.drpc.org", + "tokenMessengerAddress": "0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5", + "tokenAddress": "0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238" +} diff --git a/packages/fast-usdc/package.json b/packages/fast-usdc/package.json index f4922c64da0..007e1e90140 100644 --- a/packages/fast-usdc/package.json +++ b/packages/fast-usdc/package.json @@ -1,6 +1,5 @@ { "name": "@agoric/fast-usdc", - "private": true, "version": "0.1.0", "description": "CLI and library for Fast USDC product", "type": "module", @@ -9,12 +8,12 @@ "src" ], "bin": { - "fast-usdc": "./src/cli.js" + "fast-usdc": "./src/cli/bin.js" }, "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -27,27 +26,36 @@ "@agoric/zone": "^0.2.2", "@fast-check/ava": "^2.0.1", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", + "execa": "9.1.0", "ts-blank-space": "^0.4.1" }, "dependencies": { + "@agoric/client-utils": "^0.1.0", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", "@agoric/notifier": "^0.6.2", "@agoric/orchestration": "^0.1.0", "@agoric/store": "^0.9.2", + "@agoric/vat-data": "^0.5.2", "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", - "@endo/base64": "^1.0.8", - "@endo/common": "^1.2.7", - "@endo/errors": "^1.2.7", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", - "commander": "^12.1.0" + "@cosmjs/proto-signing": "^0.32.4", + "@cosmjs/stargate": "^0.32.4", + "@endo/base64": "^1.0.9", + "@endo/common": "^1.2.8", + "@endo/errors": "^1.2.8", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", + "@nick134-bit/noblejs": "0.0.2", + "bech32": "^2.0.0", + "commander": "^12.1.0", + "ethers": "^6.13.4" }, "ava": { "extensions": { @@ -65,5 +73,9 @@ "@endo/init/debug.js" ], "timeout": "20m" + }, + "license": "Apache-2.0", + "publishConfig": { + "access": "public" } } diff --git a/packages/fast-usdc/src/cli.js b/packages/fast-usdc/src/cli.js deleted file mode 100755 index 24846841cb7..00000000000 --- a/packages/fast-usdc/src/cli.js +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env node - -import { Command } from 'commander'; -import { readFileSync } from 'fs'; -import { fileURLToPath } from 'url'; -import { dirname, resolve } from 'path'; - -const packageJson = JSON.parse( - readFileSync( - resolve(dirname(fileURLToPath(import.meta.url)), '../package.json'), - 'utf8', - ), -); - -const program = new Command(); - -program - .name('fast-usdc') - .description('CLI to interact with Fast USDC liquidity pool') - .version(packageJson.version); - -program - .command('deposit') - .description('Offer assets to the liquidity pool') - .action(() => { - console.error('TODO actually send deposit'); - // TODO: Implement deposit logic - }); - -program - .command('withdraw') - .description('Withdraw assets from the liquidity pool') - .action(() => { - console.error('TODO actually send withdrawal'); - // TODO: Implement withdraw logic - }); - -program.parse(); diff --git a/packages/fast-usdc/src/cli/bin.js b/packages/fast-usdc/src/cli/bin.js new file mode 100755 index 00000000000..61aa8abd6ff --- /dev/null +++ b/packages/fast-usdc/src/cli/bin.js @@ -0,0 +1,6 @@ +#!/usr/bin/env node +import '@endo/init/legacy.js'; +import { initProgram } from './cli.js'; + +const program = initProgram(); +program.parse(); diff --git a/packages/fast-usdc/src/cli/bridge-action.js b/packages/fast-usdc/src/cli/bridge-action.js new file mode 100644 index 00000000000..582028f23bf --- /dev/null +++ b/packages/fast-usdc/src/cli/bridge-action.js @@ -0,0 +1,32 @@ +import { boardSlottingMarshaller } from '@agoric/client-utils'; + +/** + * @import {BridgeAction} from '@agoric/smart-wallet/src/smartWallet.js'; + */ + +const marshaller = boardSlottingMarshaller(); + +/** + * @param {BridgeAction} bridgeAction + * @param {Pick} stdout + */ +const outputAction = (bridgeAction, stdout) => { + const capData = marshaller.toCapData(harden(bridgeAction)); + stdout.write(JSON.stringify(capData)); + stdout.write('\n'); +}; + +export const sendHint = + 'Now use `agoric wallet send ...` to sign and broadcast the offer.\n'; + +/** + * @param {BridgeAction} bridgeAction + * @param {{ + * stdout: Pick, + * stderr: Pick, + * }} io + */ +export const outputActionAndHint = (bridgeAction, { stdout, stderr }) => { + outputAction(bridgeAction, stdout); + stderr.write(sendHint); +}; diff --git a/packages/fast-usdc/src/cli/cli.js b/packages/fast-usdc/src/cli/cli.js new file mode 100644 index 00000000000..56a74fbc25b --- /dev/null +++ b/packages/fast-usdc/src/cli/cli.js @@ -0,0 +1,121 @@ +import { assertParsableNumber } from '@agoric/zoe/src/contractSupport/ratio.js'; +import { + Command, + InvalidArgumentError, + InvalidOptionArgumentError, +} from 'commander'; +import { existsSync, mkdirSync, readFileSync } from 'fs'; +import { fileURLToPath } from 'url'; +import { dirname, resolve } from 'path'; +import { homedir } from 'os'; +import { + readFile as readAsync, + writeFile as writeAsync, +} from 'node:fs/promises'; +import { addConfigCommands } from './config-commands.js'; +import { addOperatorCommands } from './operator-commands.js'; +import * as configLib from './config.js'; +import transferLib from './transfer.js'; +import { makeFile } from '../util/file.js'; + +const packageJson = JSON.parse( + readFileSync( + resolve(dirname(fileURLToPath(import.meta.url)), '../../package.json'), + 'utf8', + ), +); + +const defaultHome = homedir(); + +export const initProgram = ( + configHelpers = configLib, + transferHelpers = transferLib, + readFile = readAsync, + writeFile = writeAsync, + mkdir = mkdirSync, + exists = existsSync, +) => { + const program = new Command(); + + program + .name('fast-usdc') + .description('CLI to interact with Fast USDC liquidity pool') + .version(packageJson.version) + .option( + '--home ', + `Home directory to use for config`, + `${defaultHome}/.fast-usdc/`, + ); + + const makeConfigFile = () => { + const getConfigPath = () => { + const { home: configDir } = program.opts(); + return `${configDir}config.json`; + }; + return makeFile(getConfigPath(), readFile, writeFile, mkdir, exists); + }; + + addConfigCommands(program, configHelpers, makeConfigFile); + addOperatorCommands(program); + + /** @param {string} value */ + const parseDecimal = value => { + try { + assertParsableNumber(value); + } catch { + throw new InvalidArgumentError('Not a decimal number.'); + } + return value; + }; + + /** + * @param {string} str + * @returns {'auto' | number} + */ + const parseFee = str => { + if (str === 'auto') return 'auto'; + const num = parseFloat(str); + if (Number.isNaN(num)) { + throw new InvalidOptionArgumentError('Fee must be a number.'); + } + return num; + }; + + program + .command('deposit') + .description('Offer assets to the liquidity pool') + .argument('', 'USDC to give', parseDecimal) + .option('--id [offer-id]', 'Offer ID') + .option('--fee [fee]', 'Cosmos fee', parseFee) + .action(() => { + console.error('TODO actually send deposit'); + // TODO: Implement deposit logic + }); + + program + .command('withdraw') + .description('Withdraw assets from the liquidity pool') + .argument('', 'USDC to withdraw', parseDecimal) + .option('--id [offer-id]', 'Offer ID') + .option('--fee [fee]', 'Cosmos fee', parseFee) + .action(() => { + console.error('TODO actually send withdrawal'); + // TODO: Implement withdraw logic + }); + + program + .command('transfer') + .description('Transfer USDC from Ethereum/L2 to Cosmos via Fast USDC') + .argument('amount', 'Amount to transfer denominated in uusdc') + .argument('dest', 'Destination address in Cosmos') + .action( + async ( + /** @type {string} */ amount, + /** @type {string} */ destination, + ) => { + await transferHelpers.transfer(makeConfigFile(), amount, destination); + }, + ); + + return program; +}; diff --git a/packages/fast-usdc/src/cli/config-commands.js b/packages/fast-usdc/src/cli/config-commands.js new file mode 100644 index 00000000000..e2f39d6f7d0 --- /dev/null +++ b/packages/fast-usdc/src/cli/config-commands.js @@ -0,0 +1,108 @@ +/** + * @import {Command} from 'commander'; + * @import {File} from '../util/file.js'; + * @import * as ConfigHelpers from './config.js'; + */ +/** + * + * @param {Command} program + * @param {ConfigHelpers} configHelpers + * @param {() => File} makeConfigFile + */ +export const addConfigCommands = (program, configHelpers, makeConfigFile) => { + const config = program.command('config').description('Manage config'); + + config + .command('show') + .description('Show current config') + .action(async () => { + await configHelpers.show(makeConfigFile()); + }); + + config + .command('init') + .description('Set initial config values') + .requiredOption( + '--noble-seed ', + 'Seed phrase for Noble account. CAUTION: Stored unencrypted in file system', + ) + .requiredOption( + '--eth-seed ', + 'Seed phrase for Ethereum account. CAUTION: Stored unencrypted in file system', + ) + .requiredOption( + '--agoric-seed ', + 'Seed phrase for Agoric LP account. CAUTION: Stored unencrypted in file system', + ) + .option( + '--agoric-rpc [url]', + 'Agoric RPC endpoint', + 'http://127.0.0.1:26656', + ) + .option( + '--agoric-api [url]', + 'Agoric RPC endpoint', + 'http://127.0.0.1:1317', + ) + .option('--noble-rpc [url]', 'Noble RPC endpoint', 'http://127.0.0.1:26657') + .option('--noble-api [url]', 'Noble API endpoint', 'http://127.0.0.1:1318') + .option('--eth-rpc [url]', 'Ethereum RPC Endpoint', 'http://127.0.0.1:8545') + .option( + '--noble-to-agoric-channel [channel]', + 'Channel ID on Noble for Agoric', + 'channel-21', + ) + .option( + '--token-messenger-address [address]', + 'Address of TokenMessenger contract', + // Default to ETH mainnet contract address. For ETH sepolia, use 0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5 + '0xbd3fa81b58ba92a82136038b25adec7066af3155', + ) + .option( + '--token-contract-address [address]', + 'Address of USDC token contract', + // Detault to ETH mainnet token address. For ETH sepolia, use 0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238 + '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + ) + .action(async options => { + await configHelpers.init(makeConfigFile(), options); + }); + + config + .command('update') + .description('Update config values') + .option( + '--noble-seed [string]', + 'Seed phrase for Noble account. CAUTION: Stored unencrypted in file system', + ) + .option( + '--eth-seed [string]', + 'Seed phrase for Ethereum account. CAUTION: Stored unencrypted in file system', + ) + .option( + '--agoric-seed ', + 'Seed phrase for Agoric LP account. CAUTION: Stored unencrypted in file system', + ) + .option('--agoric-rpc [url]', 'Agoric RPC endpoint') + .option('--agoric-api [url]', 'Agoric API endpoint') + .option('--noble-rpc [url]', 'Noble RPC endpoint') + .option('--noble-api [url]', 'Noble API endpoint') + .option('--eth-rpc [url]', 'Ethereum RPC Endpoint') + .option( + '--noble-to-agoric-channel [channel]', + 'Channel ID on Noble for Agoric', + ) + .option( + '--token-messenger-address [address]', + 'Address of TokenMessenger contract', + ) + .option( + '--token-contract-address [address]', + 'Address of USDC token contract', + ) + .action(async options => { + await configHelpers.update(makeConfigFile(), options); + }); + + return config; +}; diff --git a/packages/fast-usdc/src/cli/config.js b/packages/fast-usdc/src/cli/config.js new file mode 100644 index 00000000000..2dd63fdad2d --- /dev/null +++ b/packages/fast-usdc/src/cli/config.js @@ -0,0 +1,99 @@ +import * as readline from 'node:readline/promises'; +import { stdin as input, stdout as output } from 'node:process'; + +/** + @typedef {{ + nobleSeed: string, + ethSeed: string, + nobleToAgoricChannel: string, + agoricRpc: string, + nobleApi: string, + nobleRpc: string, + ethRpc: string, + tokenMessengerAddress: string, + tokenAddress: string + }} ConfigOpts + */ + +/** @import { File } from '../util/file' */ + +export const init = async ( + /** @type {File} */ configFile, + /** @type {ConfigOpts} */ options, + out = console, + rl = readline.createInterface({ input, output }), +) => { + const showOverrideWarning = async () => { + const answer = await rl.question( + `Config at ${configFile.path} already exists. Override it? (To partially update, use "update", or set "--home" to use a different config path.) y/N: `, + ); + rl.close(); + const confirmed = ['y', 'yes'].includes(answer.toLowerCase()); + if (!confirmed) { + throw new Error('User cancelled'); + } + }; + + const writeConfig = async () => { + await null; + try { + await configFile.write(JSON.stringify(options, null, 2)); + out.log(`Config initialized at ${configFile.path}`); + } catch (error) { + out.error(`An unexpected error has occurred: ${error}`); + throw error; + } + }; + + await null; + if (configFile.exists()) { + await showOverrideWarning(); + } + await writeConfig(); +}; + +export const update = async ( + /** @type {File} */ configFile, + /** @type {Partial} */ options, + out = console, +) => { + const updateConfig = async (/** @type {ConfigOpts} */ data) => { + await null; + const stringified = JSON.stringify(data, null, 2); + try { + await configFile.write(stringified); + out.log(`Config updated at ${configFile.path}`); + out.log(stringified); + } catch (error) { + out.error(`An unexpected error has occurred: ${error}`); + throw error; + } + }; + + let file; + await null; + try { + file = await configFile.read(); + } catch { + out.error( + `No config found at ${configFile.path}. Use "init" to create one, or "--home" to specify config location.`, + ); + throw new Error(); + } + await updateConfig({ ...JSON.parse(file), ...options }); +}; + +export const show = async (/** @type {File} */ configFile, out = console) => { + let contents; + await null; + try { + contents = await configFile.read(); + } catch { + out.error( + `No config found at ${configFile.path}. Use "init" to create one, or "--home" to specify config location.`, + ); + throw new Error(); + } + out.log(`Config found at ${configFile.path}:`); + out.log(contents); +}; diff --git a/packages/fast-usdc/src/cli/operator-commands.js b/packages/fast-usdc/src/cli/operator-commands.js new file mode 100644 index 00000000000..3542bdcf074 --- /dev/null +++ b/packages/fast-usdc/src/cli/operator-commands.js @@ -0,0 +1,78 @@ +/* eslint-env node */ +/** + * @import {Command} from 'commander'; + * @import {OfferSpec} from '@agoric/smart-wallet/src/offers.js'; + * @import {ExecuteOfferAction} from '@agoric/smart-wallet/src/smartWallet.js'; + */ + +import { fetchEnvNetworkConfig, makeVstorageKit } from '@agoric/client-utils'; +import { INVITATION_MAKERS_DESC } from '../exos/transaction-feed.js'; +import { outputActionAndHint } from './bridge-action.js'; + +/** + * @param {Command} program + */ +export const addOperatorCommands = program => { + const operator = program + .command('operator') + .description('Oracle operator commands'); + + operator + .command('accept') + .description('Accept invitation to be an operator') + .addHelpText( + 'after', + '\nPipe the STDOUT to a file such as accept.json, then use the Agoric CLI to broadcast it:\n agoric wallet send --offer accept.json --from gov1 --keyring-backend="test"', + ) + .option( + '--offerId ', + 'Offer id', + String, + `operatorAccept-${Date.now()}`, + ) + .action(async opts => { + const networkConfig = await fetchEnvNetworkConfig({ + env: process.env, + fetch, + }); + const vsk = await makeVstorageKit({ fetch }, networkConfig); + const instance = vsk.agoricNames.instance.fastUsdc; + assert(instance, 'fastUsdc instance not in agoricNames'); + + /** @type {OfferSpec} */ + const offer = { + id: opts.offerId, + invitationSpec: { + source: 'purse', + instance, + description: INVITATION_MAKERS_DESC, + }, + proposal: {}, + }; + + /** @type {ExecuteOfferAction} */ + const bridgeAction = { + method: 'executeOffer', + offer, + }; + + outputActionAndHint(bridgeAction, { + stderr: process.stderr, + stdout: process.stdout, + }); + }); + + operator + .command('attest') + .description('Attest to an observed Fast USDC transfer') + .requiredOption('--previousOfferId ', 'Offer id', String) + .action(async options => { + const { previousOfferId } = options; + console.error( + 'TODO: Implement attest logic for request:', + previousOfferId, + ); + }); + + return operator; +}; diff --git a/packages/fast-usdc/src/cli/transfer.js b/packages/fast-usdc/src/cli/transfer.js new file mode 100644 index 00000000000..f27004f5cc0 --- /dev/null +++ b/packages/fast-usdc/src/cli/transfer.js @@ -0,0 +1,91 @@ +/* global globalThis */ + +import { makeVStorage } from '@agoric/client-utils'; +import { depositForBurn, makeProvider } from '../util/cctp.js'; +import { + makeSigner, + queryForwardingAccount, + registerFwdAccount, +} from '../util/noble.js'; +import { queryFastUSDCLocalChainAccount } from '../util/agoric.js'; + +/** @import { File } from '../util/file' */ +/** @import { VStorage } from '@agoric/client-utils' */ +/** @import { SigningStargateClient } from '@cosmjs/stargate' */ +/** @import { JsonRpcProvider as ethProvider } from 'ethers' */ + +const transfer = async ( + /** @type {File} */ configFile, + /** @type {string} */ amount, + /** @type {string} */ destination, + out = console, + fetch = globalThis.fetch, + /** @type {VStorage | undefined} */ vstorage, + /** @type {{signer: SigningStargateClient, address: string} | undefined} */ nobleSigner, + /** @type {ethProvider | undefined} */ ethProvider, +) => { + const execute = async ( + /** @type {import('./config').ConfigOpts} */ config, + ) => { + vstorage ||= makeVStorage( + { fetch }, + { chainName: 'agoric', rpcAddrs: [config.agoricRpc] }, + ); + const agoricAddr = await queryFastUSDCLocalChainAccount(vstorage, out); + const appendedAddr = `${agoricAddr}?EUD=${destination}`; + out.log(`forwarding destination ${appendedAddr}`); + + const { exists, address } = await queryForwardingAccount( + config.nobleApi, + config.nobleToAgoricChannel, + appendedAddr, + out, + fetch, + ); + + if (!exists) { + nobleSigner ||= await makeSigner(config.nobleSeed, config.nobleRpc, out); + const { address: signerAddress, signer } = nobleSigner; + try { + const res = await registerFwdAccount( + signer, + signerAddress, + config.nobleToAgoricChannel, + appendedAddr, + out, + ); + out.log(res); + } catch (e) { + out.error( + `Error registering noble forwarding account for ${appendedAddr} on channel ${config.nobleToAgoricChannel}`, + ); + throw e; + } + } + + ethProvider ||= makeProvider(config.ethRpc); + await depositForBurn( + ethProvider, + config.ethSeed, + config.tokenMessengerAddress, + config.tokenAddress, + address, + amount, + out, + ); + }; + + let config; + await null; + try { + config = JSON.parse(await configFile.read()); + } catch { + out.error( + `No config found at ${configFile.path}. Use "config init" to create one, or "--home" to specify config location.`, + ); + throw new Error(); + } + await execute(config); +}; + +export default { transfer }; diff --git a/packages/fast-usdc/src/constants.js b/packages/fast-usdc/src/constants.js index 97fbd9c3f47..d341f6c650d 100644 --- a/packages/fast-usdc/src/constants.js +++ b/packages/fast-usdc/src/constants.js @@ -7,12 +7,22 @@ export const TxStatus = /** @type {const} */ ({ /** tx was observed but not advanced */ Observed: 'OBSERVED', /** IBC transfer is initiated */ + Advancing: 'ADVANCING', + /** IBC transfer is complete */ Advanced: 'ADVANCED', - /** settlement for matching advance received and funds dispersed */ - Settled: 'SETTLED', + /** IBC transfer failed (timed out) */ + AdvanceFailed: 'ADVANCE_FAILED', + /** settlement for matching advance received and funds disbursed */ + Disbursed: 'DISBURSED', + /** fallback: do not collect fees */ + Forwarded: 'FORWARDED', + /** failed to forward to EUD */ + ForwardFailed: 'FORWARD_FAILED', }); harden(TxStatus); +// TODO: define valid state transitions + /** * Status values for the StatusManager. * @@ -22,6 +32,10 @@ export const PendingTxStatus = /** @type {const} */ ({ /** tx was observed but not advanced */ Observed: 'OBSERVED', /** IBC transfer is initiated */ + Advancing: 'ADVANCING', + /** IBC transfer failed (timed out) */ + AdvanceFailed: 'ADVANCE_FAILED', + /** IBC transfer is complete */ Advanced: 'ADVANCED', }); harden(PendingTxStatus); diff --git a/packages/fast-usdc/src/exos/README.md b/packages/fast-usdc/src/exos/README.md deleted file mode 100644 index f65fb20a958..00000000000 --- a/packages/fast-usdc/src/exos/README.md +++ /dev/null @@ -1,26 +0,0 @@ -## **StatusManager** state diagram, showing different transitions - - -### Contract state diagram - -*Transactions are qualified by the OCW and EventFeed before arriving to the Advancer.* - -```mermaid -stateDiagram-v2 - [*] --> Advanced: Advancer .advance() - Advanced --> Settled: Settler .settle() after fees - [*] --> Observed: Advancer .observed() - Observed --> Settled: Settler .settle() sans fees - Settled --> [*] -``` - -### Complete state diagram (starting from OCW) - -```mermaid -stateDiagram-v2 - Observed --> Qualified - Observed --> Unqualified - Qualified --> Advanced - Advanced --> Settled - Qualified --> Settled -``` diff --git a/packages/fast-usdc/src/exos/advancer.js b/packages/fast-usdc/src/exos/advancer.js index 13a73cf7f9e..902cc890283 100644 --- a/packages/fast-usdc/src/exos/advancer.js +++ b/packages/fast-usdc/src/exos/advancer.js @@ -1,124 +1,280 @@ -import { assertAllDefined } from '@agoric/internal'; +import { AmountMath, AmountShape } from '@agoric/ertp'; +import { assertAllDefined, makeTracer } from '@agoric/internal'; import { ChainAddressShape } from '@agoric/orchestration'; +import { pickFacet } from '@agoric/vat-data'; import { VowShape } from '@agoric/vow'; -import { makeError, q } from '@endo/errors'; +import { q } from '@endo/errors'; import { E } from '@endo/far'; import { M } from '@endo/patterns'; -import { CctpTxEvidenceShape } from '../typeGuards.js'; +import { + CctpTxEvidenceShape, + EudParamShape, + EvmHashShape, +} from '../type-guards.js'; import { addressTools } from '../utils/address.js'; +import { makeFeeTools } from '../utils/fees.js'; /** * @import {HostInterface} from '@agoric/async-flow'; - * @import {ChainAddress, ChainHub, Denom, DenomAmount, OrchestrationAccount} from '@agoric/orchestration'; + * @import {NatAmount} from '@agoric/ertp'; + * @import {ChainAddress, ChainHub, Denom, OrchestrationAccount} from '@agoric/orchestration'; + * @import {ZoeTools} from '@agoric/orchestration/src/utils/zoe-tools.js'; * @import {VowTools} from '@agoric/vow'; * @import {Zone} from '@agoric/zone'; - * @import {CctpTxEvidence, LogFn} from '../types.js'; + * @import {CctpTxEvidence, EvmHash, FeeConfig, LogFn, NobleAddress} from '../types.js'; * @import {StatusManager} from './status-manager.js'; - * @import {TransactionFeedKit} from './transaction-feed.js'; + * @import {LiquidityPoolKit} from './liquidity-pool.js'; + */ + +/** + * @typedef {{ + * chainHub: ChainHub; + * feeConfig: FeeConfig; + * localTransfer: ZoeTools['localTransfer']; + * log?: LogFn; + * statusManager: StatusManager; + * usdc: { brand: Brand<'nat'>; denom: Denom; }; + * vowTools: VowTools; + * zcf: ZCF; + * }} AdvancerKitPowers + */ + +/** type guards internal to the AdvancerKit */ +const AdvancerKitI = harden({ + advancer: M.interface('AdvancerI', { + handleTransactionEvent: M.callWhen(CctpTxEvidenceShape).returns(), + }), + depositHandler: M.interface('DepositHandlerI', { + onFulfilled: M.call(M.undefined(), { + amount: AmountShape, + destination: ChainAddressShape, + forwardingAddress: M.string(), + tmpSeat: M.remotable(), + txHash: EvmHashShape, + }).returns(VowShape), + onRejected: M.call(M.error(), { + amount: AmountShape, + destination: ChainAddressShape, + forwardingAddress: M.string(), + tmpSeat: M.remotable(), + txHash: EvmHashShape, + }).returns(), + }), + transferHandler: M.interface('TransferHandlerI', { + // TODO confirm undefined, and not bigint (sequence) + onFulfilled: M.call(M.undefined(), { + amount: AmountShape, + destination: ChainAddressShape, + forwardingAddress: M.string(), + txHash: EvmHashShape, + }).returns(M.undefined()), + onRejected: M.call(M.error(), { + amount: AmountShape, + destination: ChainAddressShape, + forwardingAddress: M.string(), + txHash: EvmHashShape, + }).returns(M.undefined()), + }), +}); + +/** + * @typedef {{ + * amount: NatAmount; + * destination: ChainAddress; + * forwardingAddress: NobleAddress; + * txHash: EvmHash; + * }} AdvancerVowCtx */ /** * @param {Zone} zone - * @param {object} caps - * @param {ChainHub} caps.chainHub - * @param {LogFn} caps.log - * @param {StatusManager} caps.statusManager - * @param {VowTools} caps.vowTools + * @param {AdvancerKitPowers} caps */ -export const prepareAdvancer = ( +export const prepareAdvancerKit = ( zone, - { chainHub, log, statusManager, vowTools: { watch } }, + { + chainHub, + feeConfig, + localTransfer, + log = makeTracer('Advancer', true), + statusManager, + usdc, + vowTools: { watch, when }, + zcf, + } = /** @type {AdvancerKitPowers} */ ({}), ) => { - assertAllDefined({ statusManager, watch }); - - const transferHandler = zone.exo( - 'Fast USDC Advance Transfer Handler', - M.interface('TransferHandlerI', { - // TODO confirm undefined, and not bigint (sequence) - onFulfilled: M.call(M.undefined(), { - amount: M.bigint(), - destination: ChainAddressShape, - }).returns(M.undefined()), - onRejected: M.call(M.error(), { - amount: M.bigint(), - destination: ChainAddressShape, - }).returns(M.undefined()), - }), - { - /** - * @param {undefined} result TODO confirm this is not a bigint (sequence) - * @param {{ destination: ChainAddress; amount: bigint; }} ctx - */ - onFulfilled(result, { destination, amount }) { - log( - 'Advance transfer fulfilled', - q({ amount, destination, result }).toString(), - ); - }, - onRejected(error) { - // XXX retry logic? - // What do we do if we fail, should we keep a Status? - log('Advance transfer rejected', q(error).toString()); - }, - }, - ); + assertAllDefined({ + chainHub, + feeConfig, + statusManager, + watch, + when, + }); + const feeTools = makeFeeTools(feeConfig); + /** @param {bigint} value */ + const toAmount = value => AmountMath.make(usdc.brand, value); - return zone.exoClass( + return zone.exoClassKit( 'Fast USDC Advancer', - M.interface('AdvancerI', { - handleTransactionEvent: M.call(CctpTxEvidenceShape).returns(VowShape), - }), + AdvancerKitI, /** * @param {{ - * localDenom: Denom; - * poolAccount: HostInterface>; + * notifyFacet: import('./settler.js').SettlerKit['notify']; + * borrowerFacet: LiquidityPoolKit['borrower']; + * poolAccount: HostInterface>; * }} config */ config => harden(config), { - /** @param {CctpTxEvidence} evidence */ - handleTransactionEvent(evidence) { - // TODO EventFeed will perform input validation checks. - const { recipientAddress } = evidence.aux; - const { EUD } = addressTools.getQueryParams(recipientAddress).params; - if (!EUD) { - statusManager.observe(evidence); - throw makeError( - `recipientAddress does not contain EUD param: ${q(recipientAddress)}`, - ); - } - - // TODO #10391 this can throw, and should make a status update in the catch - const destination = chainHub.makeChainAddress(EUD); + advancer: { + /** + * Must perform a status update for every observed transaction. + * + * We do not expect any callers to depend on the settlement of + * `handleTransactionEvent` - errors caught are communicated to the + * `StatusManager` - so we don't need to concern ourselves with + * preserving the vow chain for callers. + * + * @param {CctpTxEvidence} evidence + */ + async handleTransactionEvent(evidence) { + await null; + try { + if (statusManager.hasBeenObserved(evidence)) { + log('txHash already seen:', evidence.txHash); + return; + } - /** @type {DenomAmount} */ - const requestedAmount = harden({ - denom: this.state.localDenom, - value: BigInt(evidence.tx.amount), - }); + const { borrowerFacet, poolAccount } = this.state; + const { recipientAddress } = evidence.aux; + // throws if EUD is not found + const { EUD } = addressTools.getQueryParams( + recipientAddress, + EudParamShape, + ); + // throws if the bech32 prefix is not found + const destination = chainHub.makeChainAddress(EUD); - // TODO #10391 ensure there's enough funds in poolAccount + const requestedAmount = toAmount(evidence.tx.amount); + // throws if requested does not exceed fees + const advanceAmount = feeTools.calculateAdvance(requestedAmount); - const transferV = E(this.state.poolAccount).transfer( - destination, - requestedAmount, - ); + const { zcfSeat: tmpSeat } = zcf.makeEmptySeatKit(); + const amountKWR = harden({ USDC: advanceAmount }); + // throws if the pool has insufficient funds + borrowerFacet.borrow(tmpSeat, amountKWR); - // mark as Advanced since `transferV` initiates the advance - statusManager.advance(evidence); + // this cannot throw since `.isSeen()` is called in the same turn + statusManager.advance(evidence); - return watch(transferV, transferHandler, { - destination, - amount: requestedAmount.value, - }); + const depositV = localTransfer( + tmpSeat, + // @ts-expect-error LocalAccountMethods vs OrchestrationAccount + poolAccount, + amountKWR, + ); + void watch(depositV, this.facets.depositHandler, { + amount: advanceAmount, + destination, + forwardingAddress: evidence.tx.forwardingAddress, + tmpSeat, + txHash: evidence.txHash, + }); + } catch (e) { + log('Advancer error:', q(e).toString()); + statusManager.observe(evidence); + } + }, + }, + depositHandler: { + /** + * @param {undefined} result + * @param {AdvancerVowCtx & { tmpSeat: ZCFSeat }} ctx + */ + onFulfilled(result, ctx) { + const { poolAccount } = this.state; + const { amount, destination, forwardingAddress, txHash } = ctx; + const transferV = E(poolAccount).transfer(destination, { + denom: usdc.denom, + value: amount.value, + }); + return watch(transferV, this.facets.transferHandler, { + destination, + amount, + forwardingAddress, + txHash, + }); + }, + /** + * @param {Error} error + * @param {AdvancerVowCtx & { tmpSeat: ZCFSeat }} ctx + */ + onRejected(error, { tmpSeat }) { + // TODO return seat allocation from ctx to LP? + log('🚨 advance deposit failed', q(error).toString()); + // TODO #10510 (comprehensive error testing) determine + // course of action here + log( + 'TODO live payment on seat to return to LP', + q(tmpSeat).toString(), + ); + }, + }, + transferHandler: { + /** + * @param {undefined} result TODO confirm this is not a bigint (sequence) + * @param {AdvancerVowCtx} ctx + */ + onFulfilled(result, ctx) { + const { notifyFacet } = this.state; + const { amount, destination, forwardingAddress, txHash } = ctx; + log( + 'Advance transfer fulfilled', + q({ amount, destination, result }).toString(), + ); + notifyFacet.notifyAdvancingResult( + txHash, + forwardingAddress, + amount.value, + destination.value, + true, + ); + }, + /** + * @param {Error} error + * @param {AdvancerVowCtx} ctx + */ + onRejected(error, ctx) { + const { notifyFacet } = this.state; + const { amount, destination, forwardingAddress, txHash } = ctx; + log('Advance transfer rejected', q(error).toString()); + notifyFacet.notifyAdvancingResult( + txHash, + forwardingAddress, + amount.value, + destination.value, + false, + ); + }, }, }, { stateShape: harden({ - localDenom: M.string(), + notifyFacet: M.remotable(), + borrowerFacet: M.remotable(), poolAccount: M.remotable(), }), }, ); }; +harden(prepareAdvancerKit); + +/** + * @param {Zone} zone + * @param {AdvancerKitPowers} caps + */ +export const prepareAdvancer = (zone, caps) => { + const makeAdvancerKit = prepareAdvancerKit(zone, caps); + return pickFacet(makeAdvancerKit, 'advancer'); +}; harden(prepareAdvancer); diff --git a/packages/fast-usdc/src/exos/liquidity-pool.js b/packages/fast-usdc/src/exos/liquidity-pool.js index 4d43d7dfe71..d8b2991a4df 100644 --- a/packages/fast-usdc/src/exos/liquidity-pool.js +++ b/packages/fast-usdc/src/exos/liquidity-pool.js @@ -1,58 +1,76 @@ -import { - AmountMath, - AmountShape, - PaymentShape, - RatioShape, -} from '@agoric/ertp'; +import { AmountMath } from '@agoric/ertp'; import { makeRecorderTopic, TopicsRecordShape, } from '@agoric/zoe/src/contractSupport/topics.js'; -import { depositToSeat } from '@agoric/zoe/src/contractSupport/zoeHelpers.js'; import { SeatShape } from '@agoric/zoe/src/typeGuards.js'; import { M } from '@endo/patterns'; import { Fail, q } from '@endo/errors'; import { + borrowCalc, depositCalc, makeParity, + repayCalc, withdrawCalc, - withFees, } from '../pool-share-math.js'; -import { makeProposalShapes } from '../type-guards.js'; +import { + makeNatAmountShape, + makeProposalShapes, + PoolMetricsShape, +} from '../type-guards.js'; /** * @import {Zone} from '@agoric/zone'; - * @import {Remote, TypedPattern} from '@agoric/internal' + * @import {Remote} from '@agoric/internal' * @import {StorageNode} from '@agoric/internal/src/lib-chainStorage.js' - * @import {MakeRecorderKit, RecorderKit} from '@agoric/zoe/src/contractSupport/recorder.js' + * @import {MakeRecorderKit} from '@agoric/zoe/src/contractSupport/recorder.js' * @import {USDCProposalShapes, ShareWorth} from '../pool-share-math.js' + * @import {PoolStats} from '../types.js'; */ -const { add, isEqual } = AmountMath; +const { add, isEqual, makeEmpty } = AmountMath; /** @param {Brand} brand */ const makeDust = brand => AmountMath.make(brand, 1n); /** - * Use of pool-share-math in offer handlers below assumes that - * the pool balance represented by the USDC allocation in poolSeat - * is the same as the pool balance represented by the numerator - * of shareWorth. + * Verifies that the total pool balance (unencumbered + encumbered) matches the + * shareWorth numerator. The total pool balance consists of: + * 1. unencumbered balance - USDC available in the pool for borrowing + * 2. encumbered balance - USDC currently lent out * - * Well, almost: they're the same modulo the dust used - * to initialize shareWorth with a non-zero denominator. + * A negligible `dust` amount is used to initialize shareWorth with a non-zero + * denominator. It must remain in the pool at all times. * * @param {ZCFSeat} poolSeat * @param {ShareWorth} shareWorth * @param {Brand} USDC + * @param {Amount<'nat'>} encumberedBalance */ -const checkPoolBalance = (poolSeat, shareWorth, USDC) => { - const available = poolSeat.getAmountAllocated('USDC', USDC); +const checkPoolBalance = (poolSeat, shareWorth, USDC, encumberedBalance) => { + const unencumberedBalance = poolSeat.getAmountAllocated('USDC', USDC); const dust = makeDust(USDC); - isEqual(add(available, dust), shareWorth.numerator) || - Fail`🚨 pool balance ${q(available)} inconsistent with shareWorth ${q(shareWorth)}`; + const grossBalance = add(add(unencumberedBalance, dust), encumberedBalance); + isEqual(grossBalance, shareWorth.numerator) || + Fail`🚨 pool balance ${q(unencumberedBalance)} and encumbered balance ${q(encumberedBalance)} inconsistent with shareWorth ${q(shareWorth)}`; }; +/** + * @typedef {{ + * Principal: Amount<'nat'>; + * PoolFee: Amount<'nat'>; + * ContractFee: Amount<'nat'>; + * }} RepayAmountKWR + */ + +/** + * @typedef {{ + * Principal: Payment<'nat'>; + * PoolFee: Payment<'nat'>; + * ContractFee: Payment<'nat'>; + * }} RepayPaymentKWR + */ + /** * @param {Zone} zone * @param {ZCF} zcf @@ -65,11 +83,24 @@ export const prepareLiquidityPoolKit = (zone, zcf, USDC, tools) => { return zone.exoClassKit( 'Liquidity Pool', { - feeSink: M.interface('feeSink', { - receive: M.call(AmountShape, PaymentShape).returns(M.promise()), + borrower: M.interface('borrower', { + borrow: M.call( + SeatShape, + harden({ USDC: makeNatAmountShape(USDC, 1n) }), + ).returns(), + }), + repayer: M.interface('repayer', { + repay: M.call( + SeatShape, + harden({ + Principal: makeNatAmountShape(USDC, 1n), + PoolFee: makeNatAmountShape(USDC, 0n), + ContractFee: makeNatAmountShape(USDC, 0n), + }), + ).returns(), }), external: M.interface('external', { - publishShareWorth: M.call().returns(), + publishPoolMetrics: M.call().returns(), }), depositHandler: M.interface('depositHandler', { handle: M.call(SeatShape, M.any()).returns(M.promise()), @@ -92,57 +123,139 @@ export const prepareLiquidityPoolKit = (zone, zcf, USDC, tools) => { const proposalShapes = makeProposalShapes({ USDC, PoolShares }); const shareWorth = makeParity(makeDust(USDC), PoolShares); const { zcfSeat: poolSeat } = zcf.makeEmptySeatKit(); - const shareWorthRecorderKit = tools.makeRecorderKit(node, RatioShape); + const { zcfSeat: feeSeat } = zcf.makeEmptySeatKit(); + const poolMetricsRecorderKit = tools.makeRecorderKit( + node, + PoolMetricsShape, + ); + const encumberedBalance = makeEmpty(USDC); + /** @type {PoolStats} */ + const poolStats = harden({ + totalBorrows: makeEmpty(USDC), + totalContractFees: makeEmpty(USDC), + totalPoolFees: makeEmpty(USDC), + totalRepays: makeEmpty(USDC), + }); return { - shareMint, - shareWorth, + /** used for `checkPoolBalance` invariant. aka 'outstanding borrows' */ + encumberedBalance, + feeSeat, + poolStats, + poolMetricsRecorderKit, poolSeat, PoolShares, proposalShapes, - shareWorthRecorderKit, + shareMint, + shareWorth, }; }, { - feeSink: { + borrower: { /** - * @param {Amount<'nat'>} amount - * @param {Payment<'nat'>} payment + * @param {ZCFSeat} toSeat + * @param {{ USDC: Amount<'nat'>}} amountKWR */ - async receive(amount, payment) { - const { poolSeat, shareWorth } = this.state; - const { external } = this.facets; - await depositToSeat( - zcf, - poolSeat, - harden({ USDC: amount }), - harden({ USDC: payment }), + borrow(toSeat, amountKWR) { + const { encumberedBalance, poolSeat, poolStats } = this.state; + + // Validate amount is available in pool + const post = borrowCalc( + amountKWR.USDC, + poolSeat.getAmountAllocated('USDC', USDC), + encumberedBalance, + poolStats, ); - this.state.shareWorth = withFees(shareWorth, amount); - external.publishShareWorth(); + + // COMMIT POINT + try { + zcf.atomicRearrange(harden([[poolSeat, toSeat, amountKWR]])); + } catch (cause) { + const reason = Error('🚨 cannot commit borrow', { cause }); + console.error(reason.message, cause); + zcf.shutdownWithFailure(reason); + } + + Object.assign(this.state, post); + this.facets.external.publishPoolMetrics(); }, + // TODO method to repay failed `LOA.deposit()` }, + repayer: { + /** + * @param {ZCFSeat} fromSeat + * @param {RepayAmountKWR} amounts + */ + repay(fromSeat, amounts) { + const { + encumberedBalance, + feeSeat, + poolSeat, + poolStats, + shareWorth, + } = this.state; + checkPoolBalance(poolSeat, shareWorth, USDC, encumberedBalance); + + const fromSeatAllocation = fromSeat.getCurrentAllocation(); + // Validate allocation equals amounts and Principal <= encumberedBalance + const post = repayCalc( + shareWorth, + fromSeatAllocation, + amounts, + encumberedBalance, + poolStats, + ); + const { ContractFee, ...rest } = amounts; + + // COMMIT POINT + try { + zcf.atomicRearrange( + harden([ + [ + fromSeat, + poolSeat, + rest, + { USDC: add(amounts.PoolFee, amounts.Principal) }, + ], + [fromSeat, feeSeat, { ContractFee }, { USDC: ContractFee }], + ]), + ); + } catch (cause) { + const reason = Error('🚨 cannot commit repay', { cause }); + console.error(reason.message, cause); + zcf.shutdownWithFailure(reason); + } + + Object.assign(this.state, post); + this.facets.external.publishPoolMetrics(); + }, + }, external: { - publishShareWorth() { - const { shareWorth } = this.state; - const { recorder } = this.state.shareWorthRecorderKit; + publishPoolMetrics() { + const { poolStats, shareWorth, encumberedBalance } = this.state; + const { recorder } = this.state.poolMetricsRecorderKit; // Consumers of this .write() are off-chain / outside the VM. // And there's no way to recover from a failed write. // So don't await. - void recorder.write(shareWorth); + void recorder.write({ + encumberedBalance, + shareWorth, + ...poolStats, + }); }, }, depositHandler: { /** @param {ZCFSeat} lp */ async handle(lp) { - const { shareWorth, shareMint, poolSeat } = this.state; + const { shareWorth, shareMint, poolSeat, encumberedBalance } = + this.state; const { external } = this.facets; /** @type {USDCProposalShapes['deposit']} */ // @ts-expect-error ensured by proposalShape const proposal = lp.getProposal(); - checkPoolBalance(poolSeat, shareWorth, USDC); + checkPoolBalance(poolSeat, shareWorth, USDC, encumberedBalance); const post = depositCalc(shareWorth, proposal); // COMMIT POINT @@ -165,20 +278,21 @@ export const prepareLiquidityPoolKit = (zone, zcf, USDC, tools) => { console.error(reason.message, cause); zcf.shutdownWithFailure(reason); } - external.publishShareWorth(); + external.publishPoolMetrics(); }, }, withdrawHandler: { /** @param {ZCFSeat} lp */ async handle(lp) { - const { shareWorth, shareMint, poolSeat } = this.state; + const { shareWorth, shareMint, poolSeat, encumberedBalance } = + this.state; const { external } = this.facets; /** @type {USDCProposalShapes['withdraw']} */ // @ts-expect-error ensured by proposalShape const proposal = lp.getProposal(); const { zcfSeat: burn } = zcf.makeEmptySeatKit(); - checkPoolBalance(poolSeat, shareWorth, USDC); + checkPoolBalance(poolSeat, shareWorth, USDC, encumberedBalance); const post = withdrawCalc(shareWorth, proposal); // COMMIT POINT @@ -201,7 +315,7 @@ export const prepareLiquidityPoolKit = (zone, zcf, USDC, tools) => { console.error(reason.message, cause); zcf.shutdownWithFailure(reason); } - external.publishShareWorth(); + external.publishPoolMetrics(); }, }, public: { @@ -222,18 +336,25 @@ export const prepareLiquidityPoolKit = (zone, zcf, USDC, tools) => { ); }, getPublicTopics() { - const { shareWorthRecorderKit } = this.state; + const { poolMetricsRecorderKit } = this.state; return { - shareWorth: makeRecorderTopic('shareWorth', shareWorthRecorderKit), + poolMetrics: makeRecorderTopic( + 'poolMetrics', + poolMetricsRecorderKit, + ), }; }, }, }, { finish: ({ facets: { external } }) => { - void external.publishShareWorth(); + void external.publishPoolMetrics(); }, }, ); }; harden(prepareLiquidityPoolKit); + +/** + * @typedef {ReturnType>} LiquidityPoolKit + */ diff --git a/packages/fast-usdc/src/exos/operator-kit.js b/packages/fast-usdc/src/exos/operator-kit.js new file mode 100644 index 00000000000..08b3ac9c368 --- /dev/null +++ b/packages/fast-usdc/src/exos/operator-kit.js @@ -0,0 +1,120 @@ +import { makeTracer } from '@agoric/internal'; +import { Fail } from '@endo/errors'; +import { M } from '@endo/patterns'; +import { CctpTxEvidenceShape } from '../type-guards.js'; + +const trace = makeTracer('TxOperator'); + +/** + * @import {Zone} from '@agoric/zone'; + * @import {CctpTxEvidence} from '../types.js'; + */ + +/** + * @typedef {object} OperatorPowers + * @property {(evidence: CctpTxEvidence, operatorKit: OperatorKit) => void} submitEvidence + */ + +/** + * @typedef {object} OperatorStatus + * @property {boolean} [disabled] + * @property {string} operatorId + */ + +/** + * @typedef {Readonly<{ operatorId: string, powers: OperatorPowers }> & {disabled: boolean}} State + */ + +const OperatorKitI = { + admin: M.interface('Admin', { + disable: M.call().returns(), + }), + + invitationMakers: M.interface('InvitationMakers', { + SubmitEvidence: M.call(CctpTxEvidenceShape).returns(M.promise()), + }), + + operator: M.interface('Operator', { + submitEvidence: M.call(CctpTxEvidenceShape).returns(M.promise()), + getStatus: M.call().returns(M.record()), + }), +}; + +/** + * @param {Zone} zone + * @param {{ makeInertInvitation: Function }} staticPowers + */ +export const prepareOperatorKit = (zone, staticPowers) => + zone.exoClassKit( + 'Operator Kit', + OperatorKitI, + /** + * @param {string} operatorId + * @param {OperatorPowers} powers facet of the durable transaction feed + * @returns {State} + */ + (operatorId, powers) => { + return { + operatorId, + powers, + disabled: false, + }; + }, + { + admin: { + disable() { + trace(`operator ${this.state.operatorId} disabled`); + this.state.disabled = true; + }, + }, + /** + * NB: when this kit is an offer result, the smart-wallet will detect the `invitationMakers` + * key and save it for future offers. + */ + invitationMakers: { + /** + * Provide an API call in the form of an invitation maker, so that the + * capability is available in the smart-wallet bridge. + * + * NB: The `Invitation` object is evidence that the operation took + * place, rather than as a means of performing it as in the + * fluxAggregator contract used for price oracles. + * + * @param {CctpTxEvidence} evidence + * @returns {Promise} + */ + async SubmitEvidence(evidence) { + const { operator } = this.facets; + // TODO(bootstrap integration): cause this call to throw and confirm that it + // shows up in the the smart-wallet UpdateRecord `error` property + await operator.submitEvidence(evidence); + return staticPowers.makeInertInvitation( + 'evidence was pushed in the invitation maker call', + ); + }, + }, + operator: { + /** + * submit evidence from this operator + * + * @param {CctpTxEvidence} evidence + */ + async submitEvidence(evidence) { + const { state } = this; + !state.disabled || Fail`submitEvidence for disabled operator`; + const result = state.powers.submitEvidence(evidence, this.facets); + return result; + }, + /** @returns {OperatorStatus} */ + getStatus() { + const { state } = this; + return { + operatorId: state.operatorId, + disabled: state.disabled, + }; + }, + }, + }, + ); + +/** @typedef {ReturnType>} OperatorKit */ diff --git a/packages/fast-usdc/src/exos/settler.js b/packages/fast-usdc/src/exos/settler.js index 4b33e635b29..9083a80b420 100644 --- a/packages/fast-usdc/src/exos/settler.js +++ b/packages/fast-usdc/src/exos/settler.js @@ -1,98 +1,291 @@ -import { assertAllDefined } from '@agoric/internal'; +import { AmountMath } from '@agoric/ertp'; +import { assertAllDefined, makeTracer } from '@agoric/internal'; import { atob } from '@endo/base64'; -import { makeError, q } from '@endo/errors'; +import { E } from '@endo/far'; import { M } from '@endo/patterns'; +import { PendingTxStatus } from '../constants.js'; import { addressTools } from '../utils/address.js'; +import { makeFeeTools } from '../utils/fees.js'; +import { EvmHashShape } from '../type-guards.js'; /** * @import {FungibleTokenPacketData} from '@agoric/cosmic-proto/ibc/applications/transfer/v2/packet.js'; - * @import {Denom} from '@agoric/orchestration'; + * @import {Denom, OrchestrationAccount, ChainHub} from '@agoric/orchestration'; + * @import {WithdrawToSeat} from '@agoric/orchestration/src/utils/zoe-tools' * @import {IBCChannelID, VTransferIBCEvent} from '@agoric/vats'; * @import {Zone} from '@agoric/zone'; - * @import {NobleAddress} from '../types.js'; + * @import {HostOf, HostInterface} from '@agoric/async-flow'; + * @import {TargetRegistration} from '@agoric/vats/src/bridge-target.js'; + * @import {NobleAddress, LiquidityPoolKit, FeeConfig, EvmHash} from '../types.js'; * @import {StatusManager} from './status-manager.js'; */ +const trace = makeTracer('Settler'); + +/** + * NOTE: not meant to be parsable. + * + * @param {NobleAddress} addr + * @param {bigint} amount + */ +const makeMintedEarlyKey = (addr, amount) => + `pendingTx:${JSON.stringify([addr, String(amount)])}`; + /** * @param {Zone} zone * @param {object} caps * @param {StatusManager} caps.statusManager + * @param {Brand<'nat'>} caps.USDC + * @param {Pick} caps.zcf + * @param {FeeConfig} caps.feeConfig + * @param {HostOf} caps.withdrawToSeat + * @param {import('@agoric/vow').VowTools} caps.vowTools + * @param {ChainHub} caps.chainHub */ -export const prepareSettler = (zone, { statusManager }) => { +export const prepareSettler = ( + zone, + { statusManager, USDC, zcf, feeConfig, withdrawToSeat, vowTools, chainHub }, +) => { assertAllDefined({ statusManager }); - return zone.exoClass( + return zone.exoClassKit( 'Fast USDC Settler', - M.interface('SettlerI', { - receiveUpcall: M.call(M.record()).returns(M.promise()), - }), + { + creator: M.interface('SettlerCreatorI', { + monitorMintingDeposits: M.callWhen().returns(M.any()), + }), + tap: M.interface('SettlerTapI', { + receiveUpcall: M.call(M.record()).returns(M.promise()), + }), + notify: M.interface('SettlerNotifyI', { + notifyAdvancingResult: M.call( + M.string(), + M.nat(), + M.boolean(), + ).returns(), + }), + self: M.interface('SettlerSelfI', { + disburse: M.call(EvmHashShape, M.string(), M.nat()).returns( + M.promise(), + ), + forward: M.call( + M.opt(EvmHashShape), + M.string(), + M.nat(), + M.string(), + ).returns(), + }), + transferHandler: M.interface('SettlerTransferI', { + onFulfilled: M.call(M.any(), M.record()).returns(), + onRejected: M.call(M.any(), M.record()).returns(), + }), + }, /** - * * @param {{ * sourceChannel: IBCChannelID; - * remoteDenom: Denom + * remoteDenom: Denom; + * repayer: LiquidityPoolKit['repayer']; + * settlementAccount: HostInterface> * }} config */ - config => harden(config), + config => { + return { + ...config, + /** @type {HostInterface|undefined} */ + registration: undefined, + /** @type {SetStore>} */ + mintedEarly: zone.detached().setStore('mintedEarly'), + }; + }, { - /** @param {VTransferIBCEvent} event */ - async receiveUpcall(event) { - if (event.packet.source_channel !== this.state.sourceChannel) { - // TODO #10390 log all early returns - // only interested in packets from the issuing chain - return; - } - const tx = /** @type {FungibleTokenPacketData} */ ( - JSON.parse(atob(event.packet.data)) - ); - if (tx.denom !== this.state.remoteDenom) { - // only interested in uusdc - return; - } - - if (!addressTools.hasQueryParams(tx.receiver)) { - // only interested in receivers with query params - return; - } - - const { params } = addressTools.getQueryParams(tx.receiver); - // TODO - what's the schema address parameter schema for FUSDC? - if (!params?.EUD) { - // only interested in receivers with EUD parameter - return; - } - - // TODO discern between SETTLED and OBSERVED; each has different fees/destinations - const hasPendingSettlement = statusManager.hasPendingSettlement( + creator: { + async monitorMintingDeposits() { + const { settlementAccount } = this.state; + const registration = await vowTools.when( + settlementAccount.monitorTransfers(this.facets.tap), + ); + assert.typeof(registration, 'object'); + this.state.registration = registration; + }, + }, + tap: { + /** @param {VTransferIBCEvent} event */ + async receiveUpcall(event) { + const { sourceChannel, remoteDenom } = this.state; + const { packet } = event; + if (packet.source_channel !== sourceChannel) { + const { source_channel: actual } = packet; + trace('unexpected channel', { actual, expected: sourceChannel }); + return; + } + + // TODO: why is it safe to cast this without a runtime check? + const tx = /** @type {FungibleTokenPacketData} */ ( + JSON.parse(atob(packet.data)) + ); + // given the sourceChannel check, we can be certain of this cast - /** @type {NobleAddress} */ (tx.sender), - BigInt(tx.amount), - ); - if (!hasPendingSettlement) { - // TODO FAILURE PATH -> put money in recovery account or .transfer to receiver - // TODO should we have an ORPHANED TxStatus for this? - throw makeError( - `🚨 No pending settlement found for ${q(tx.sender)} ${q(tx.amount)}`, + const sender = /** @type {NobleAddress} */ (tx.sender); + + if (tx.denom !== remoteDenom) { + const { denom: actual } = tx; + trace('unexpected denom', { actual, expected: remoteDenom }); + return; + } + + if (!addressTools.hasQueryParams(tx.receiver)) { + console.log('not query params', tx.receiver); + return; + } + + const { EUD } = addressTools.getQueryParams(tx.receiver); + if (!EUD) { + console.log('no EUD parameter', tx.receiver); + return; + } + + const amount = BigInt(tx.amount); // TODO: what if this throws? + + const { self } = this.facets; + const found = statusManager.dequeueStatus(sender, amount); + trace('dequeued', found, 'for', sender, amount); + switch (found?.status) { + case PendingTxStatus.Advanced: + return self.disburse(found.txHash, sender, amount); + + case PendingTxStatus.Advancing: + this.state.mintedEarly.add(makeMintedEarlyKey(sender, amount)); + return; + + case undefined: + case PendingTxStatus.Observed: + case PendingTxStatus.AdvanceFailed: + default: + return self.forward(found?.txHash, sender, amount, EUD); + } + }, + }, + notify: { + /** + * @param {EvmHash} txHash + * @param {NobleAddress} sender + * @param {NatValue} amount + * @param {string} EUD + * @param {boolean} success + * @returns {void} + */ + notifyAdvancingResult(txHash, sender, amount, EUD, success) { + const { mintedEarly } = this.state; + const key = makeMintedEarlyKey(sender, amount); + if (mintedEarly.has(key)) { + mintedEarly.delete(key); + if (success) { + void this.facets.self.disburse(txHash, sender, amount); + } else { + void this.facets.self.forward(txHash, sender, amount, EUD); + } + } else { + statusManager.advanceOutcome(sender, amount, success); + } + }, + }, + self: { + /** + * @param {EvmHash} txHash + * @param {NobleAddress} sender + * @param {NatValue} amount + */ + async disburse(txHash, sender, amount) { + const { repayer, settlementAccount } = this.state; + const received = AmountMath.make(USDC, amount); + const { zcfSeat: settlingSeat } = zcf.makeEmptySeatKit(); + const { calculateSplit } = makeFeeTools(feeConfig); + const split = calculateSplit(received); + trace('disbursing', split); + + // TODO: what if this throws? + // arguably, it cannot. Even if deposits + // and notifications get out of order, + // we don't ever withdraw more than has been deposited. + await vowTools.when( + withdrawToSeat( + // @ts-expect-error Vow vs. Promise stuff. TODO: is this OK??? + settlementAccount, + settlingSeat, + harden({ In: received }), + ), + ); + zcf.atomicRearrange( + harden([[settlingSeat, settlingSeat, { In: received }, split]]), ); - } + repayer.repay(settlingSeat, split); - // TODO disperse funds - // ~1. fee to contractFeeAccount - // ~2. remainder in poolAccount + // update status manager, marking tx `SETTLED` + statusManager.disbursed(txHash); + }, + /** + * @param {EvmHash | undefined} txHash + * @param {NobleAddress} sender + * @param {NatValue} amount + * @param {string} EUD + */ + forward(txHash, sender, amount, EUD) { + const { settlementAccount } = this.state; - // update status manager, marking tx `SETTLED` - statusManager.settle( - /** @type {NobleAddress} */ (tx.sender), - BigInt(tx.amount), - ); + const dest = chainHub.makeChainAddress(EUD); + + // TODO? statusManager.forwarding(txHash, sender, amount); + const txfrV = E(settlementAccount).transfer( + dest, + AmountMath.make(USDC, amount), + ); + void vowTools.watch(txfrV, this.facets.transferHandler, { + txHash, + sender, + amount, + }); + }, + }, + transferHandler: { + /** + * @param {unknown} _result + * @param {SettlerTransferCtx} ctx + * + * @typedef {{ + * txHash: EvmHash; + * sender: NobleAddress; + * amount: NatValue; + * }} SettlerTransferCtx + */ + onFulfilled(_result, ctx) { + const { txHash, sender, amount } = ctx; + statusManager.forwarded(txHash, sender, amount); + }, + /** + * @param {unknown} _result + * @param {SettlerTransferCtx} _ctx + */ + onRejected(_result, _ctx) { + // const { txHash, sender, amount } = ctx; + // TODO: statusManager.forwardFailed(txHash, sender, amount); + }, }, }, { stateShape: harden({ + repayer: M.remotable('Repayer'), + settlementAccount: M.remotable('Account'), + registration: M.or(M.undefined(), M.remotable('Registration')), sourceChannel: M.string(), remoteDenom: M.string(), + mintedEarly: M.remotable('mintedEarly'), }), }, ); }; harden(prepareSettler); + +/** + * XXX consider using pickFacet (do we have pickFacets?) + * @typedef {ReturnType>} SettlerKit + */ diff --git a/packages/fast-usdc/src/exos/status-manager.js b/packages/fast-usdc/src/exos/status-manager.js index 15c82f93a22..ad4c33c44d1 100644 --- a/packages/fast-usdc/src/exos/status-manager.js +++ b/packages/fast-usdc/src/exos/status-manager.js @@ -1,14 +1,19 @@ import { M } from '@endo/patterns'; -import { makeError, q } from '@endo/errors'; - +import { Fail, makeError, q } from '@endo/errors'; import { appendToStoredArray } from '@agoric/store/src/stores/store-utils.js'; -import { CctpTxEvidenceShape, PendingTxShape } from '../typeGuards.js'; -import { PendingTxStatus } from '../constants.js'; +import { E } from '@endo/eventual-send'; +import { makeTracer } from '@agoric/internal'; +import { + CctpTxEvidenceShape, + EvmHashShape, + PendingTxShape, +} from '../type-guards.js'; +import { PendingTxStatus, TxStatus } from '../constants.js'; /** * @import {MapStore, SetStore} from '@agoric/store'; * @import {Zone} from '@agoric/zone'; - * @import {CctpTxEvidence, NobleAddress, SeenTxKey, PendingTxKey, PendingTx} from '../types.js'; + * @import {CctpTxEvidence, NobleAddress, SeenTxKey, PendingTxKey, PendingTx, EvmHash, LogFn} from '../types.js'; */ /** @@ -49,6 +54,12 @@ const seenTxKeyOf = evidence => { return `seenTx:${JSON.stringify([txHash, chainId])}`; }; +/** + * @typedef {{ + * log?: LogFn; + * }} StatusManagerPowers + */ + /** * The `StatusManager` keeps track of Pending and Seen Transactions * via {@link PendingTxStatus} states, aiding in coordination between the `Advancer` @@ -57,8 +68,16 @@ const seenTxKeyOf = evidence => { * XXX consider separate facets for `Advancing` and `Settling` capabilities. * * @param {Zone} zone + * @param {() => Promise} makeStatusNode + * @param {StatusManagerPowers} caps */ -export const prepareStatusManager = zone => { +export const prepareStatusManager = ( + zone, + makeStatusNode, + { + log = makeTracer('Advancer', true), + } = /** @type {StatusManagerPowers} */ ({}), +) => { /** @type {MapStore} */ const pendingTxs = zone.mapStore('PendingTxs', { keyShape: M.string(), @@ -70,6 +89,17 @@ export const prepareStatusManager = zone => { keyShape: M.string(), }); + /** + * @param {CctpTxEvidence['txHash']} hash + * @param {TxStatus} status + */ + const recordStatus = (hash, status) => { + const statusNodeP = makeStatusNode(); + const txnNodeP = E(statusNodeP).makeChildNode(hash); + // Don't await, just writing to vstorage. + void E(txnNodeP).setValue(status); + }; + /** * Ensures that `txHash+chainId` has not been processed * and adds entry to `seenTxs` set. @@ -91,26 +121,74 @@ export const prepareStatusManager = zone => { pendingTxKeyOf(evidence), harden({ ...evidence, status }), ); + recordStatus(evidence.txHash, status); }; return zone.exo( 'Fast USDC Status Manager', M.interface('StatusManagerI', { + // TODO: naming scheme for transition events advance: M.call(CctpTxEvidenceShape).returns(M.undefined()), + advanceOutcome: M.call(M.string(), M.nat(), M.boolean()).returns(), observe: M.call(CctpTxEvidenceShape).returns(M.undefined()), - hasPendingSettlement: M.call(M.string(), M.bigint()).returns(M.boolean()), - settle: M.call(M.string(), M.bigint()).returns(M.undefined()), + hasBeenObserved: M.call(CctpTxEvidenceShape).returns(M.boolean()), + dequeueStatus: M.call(M.string(), M.bigint()).returns( + M.or( + { + txHash: EvmHashShape, + status: M.or( + PendingTxStatus.Advanced, + PendingTxStatus.AdvanceFailed, + PendingTxStatus.Observed, + ), + }, + M.undefined(), + ), + ), + disbursed: M.call(EvmHashShape).returns(M.undefined()), + forwarded: M.call(M.opt(EvmHashShape), M.string(), M.nat()).returns( + M.undefined(), + ), lookupPending: M.call(M.string(), M.bigint()).returns( M.arrayOf(PendingTxShape), ), }), { /** - * Add a new transaction with ADVANCED status + * Add a new transaction with ADVANCING status * @param {CctpTxEvidence} evidence */ advance(evidence) { - recordPendingTx(evidence, PendingTxStatus.Advanced); + recordPendingTx(evidence, PendingTxStatus.Advancing); + }, + + /** + * Record result of ADVANCING + * + * @param {NobleAddress} sender + * @param {import('@agoric/ertp').NatValue} amount + * @param {boolean} success - Advanced vs. AdvanceFailed + * @throws {Error} if nothing to advance + */ + advanceOutcome(sender, amount, success) { + const key = makePendingTxKey(sender, amount); + pendingTxs.has(key) || Fail`no advancing tx with ${{ sender, amount }}`; + const pending = pendingTxs.get(key); + const ix = pending.findIndex( + tx => tx.status === PendingTxStatus.Advancing, + ); + ix >= 0 || Fail`no advancing tx with ${{ sender, amount }}`; + const [prefix, tx, suffix] = [ + pending.slice(0, ix), + pending[ix], + pending.slice(ix + 1), + ]; + const status = success + ? PendingTxStatus.Advanced + : PendingTxStatus.AdvanceFailed; + const txpost = { ...tx, status }; + pendingTxs.set(key, harden([...prefix, txpost, ...suffix])); + recordStatus(tx.txHash, status); }, /** @@ -122,41 +200,79 @@ export const prepareStatusManager = zone => { }, /** - * Find an `ADVANCED` or `OBSERVED` tx waiting to be `SETTLED` + * Note: ADVANCING state implies tx has been OBSERVED * - * @param {NobleAddress} address - * @param {bigint} amount - * @returns {boolean} + * @param {CctpTxEvidence} evidence */ - hasPendingSettlement(address, amount) { - const key = makePendingTxKey(address, amount); - const pending = pendingTxs.get(key); - return !!pending.length; + hasBeenObserved(evidence) { + const seenKey = seenTxKeyOf(evidence); + return seenTxs.has(seenKey); }, /** - * Mark an `ADVANCED` or `OBSERVED` transaction as `SETTLED` and remove it + * Remove and return an `ADVANCED` or `OBSERVED` tx waiting to be `SETTLED`. * * @param {NobleAddress} address * @param {bigint} amount + * @returns {Pick | undefined} undefined if nothing + * with this address and amount has been marked pending. */ - settle(address, amount) { + dequeueStatus(address, amount) { const key = makePendingTxKey(address, amount); + if (!pendingTxs.has(key)) return undefined; const pending = pendingTxs.get(key); - if (!pending.length) { - throw makeError(`No unsettled entry for ${q(key)}`); + const dequeueIdx = pending.findIndex( + x => x.status !== PendingTxStatus.Advancing, + ); + if (dequeueIdx < 0) return undefined; + + if (pending.length > 1) { + const pendingCopy = [...pending]; + pendingCopy.splice(dequeueIdx, 1); + pendingTxs.set(key, harden(pendingCopy)); + } else { + pendingTxs.delete(key); } - const pendingCopy = [...pending]; - pendingCopy.shift(); - // TODO, vstorage update for `TxStatus.Settled` - pendingTxs.set(key, harden(pendingCopy)); + const { status, txHash } = pending[dequeueIdx]; + // TODO: store txHash -> evidence for txs pending settlement? + // If necessary for vstorage writes in `forwarded` and `settled` + return harden({ status, txHash }); + }, + + /** + * Mark a transaction as `DISBURSED` + * + * @param {EvmHash} txHash + */ + disbursed(txHash) { + recordStatus(txHash, TxStatus.Disbursed); + }, + + /** + * Mark a transaction as `FORWARDED` + * + * @param {EvmHash | undefined} txHash - undefined in case mint before observed + * @param {NobleAddress} address + * @param {bigint} amount + */ + forwarded(txHash, address, amount) { + if (txHash) { + recordStatus(txHash, TxStatus.Forwarded); + } else { + // TODO store (early) `Minted` transactions to check against incoming evidence + log( + `⚠️ Forwarded minted amount ${amount} from account ${address} before it was observed.`, + ); + } }, /** * Lookup all pending entries for a given address and amount * + * XXX only used in tests. should we remove? + * * @param {NobleAddress} address * @param {bigint} amount * @returns {PendingTx[]} @@ -164,7 +280,7 @@ export const prepareStatusManager = zone => { lookupPending(address, amount) { const key = makePendingTxKey(address, amount); if (!pendingTxs.has(key)) { - throw makeError(`Key ${q(key)} not yet observed`); + return harden([]); } return pendingTxs.get(key); }, diff --git a/packages/fast-usdc/src/exos/transaction-feed.js b/packages/fast-usdc/src/exos/transaction-feed.js index d39a3eebc00..782236d615f 100644 --- a/packages/fast-usdc/src/exos/transaction-feed.js +++ b/packages/fast-usdc/src/exos/transaction-feed.js @@ -1,30 +1,41 @@ import { makeTracer } from '@agoric/internal'; import { prepareDurablePublishKit } from '@agoric/notifier'; import { M } from '@endo/patterns'; -import { CctpTxEvidenceShape } from '../typeGuards.js'; +import { CctpTxEvidenceShape } from '../type-guards.js'; +import { defineInertInvitation } from '../utils/zoe.js'; +import { prepareOperatorKit } from './operator-kit.js'; /** * @import {Zone} from '@agoric/zone'; + * @import {OperatorKit} from './operator-kit.js'; * @import {CctpTxEvidence} from '../types.js'; */ const trace = makeTracer('TxFeed', true); -export const INVITATION_MAKERS_DESC = 'transaction oracle invitation'; +/** Name in the invitation purse (keyed also by this contract instance) */ +export const INVITATION_MAKERS_DESC = 'oracle operator invitation'; const TransactionFeedKitI = harden({ - admin: M.interface('Transaction Feed Admin', { - submitEvidence: M.call(CctpTxEvidenceShape).returns(), + operatorPowers: M.interface('Transaction Feed Admin', { + submitEvidence: M.call(CctpTxEvidenceShape, M.any()).returns(), + }), + creator: M.interface('Transaction Feed Creator', { + // TODO narrow the return shape to OperatorKit + initOperator: M.call(M.string()).returns(M.record()), + makeOperatorInvitation: M.call(M.string()).returns(M.promise()), + removeOperator: M.call(M.string()).returns(), }), public: M.interface('Transaction Feed Public', { - getEvidenceStream: M.call().returns(M.remotable()), + getEvidenceSubscriber: M.call().returns(M.remotable()), }), }); /** * @param {Zone} zone + * @param {ZCF} zcf */ -export const prepareTransactionFeedKit = zone => { +export const prepareTransactionFeedKit = (zone, zcf) => { const kinds = zone.mapStore('Kinds'); const makeDurablePublishKit = prepareDurablePublishKit( kinds, @@ -33,21 +44,137 @@ export const prepareTransactionFeedKit = zone => { /** @type {PublishKit} */ const { publisher, subscriber } = makeDurablePublishKit(); - return zone.exoClassKit('Fast USDC Feed', TransactionFeedKitI, () => ({}), { - admin: { - /** @param {CctpTxEvidence } evidence */ - submitEvidence: evidence => { - trace('TEMPORARY: Add evidence:', evidence); - // TODO decentralize - // TODO validate that it's valid to publish - publisher.publish(evidence); - }, + const makeInertInvitation = defineInertInvitation(zcf, 'submitting evidence'); + + const makeOperatorKit = prepareOperatorKit(zone, { + makeInertInvitation, + }); + + return zone.exoClassKit( + 'Fast USDC Feed', + TransactionFeedKitI, + () => { + /** @type {MapStore} */ + const operators = zone.mapStore('operators', { + durable: true, + }); + /** @type {MapStore>} */ + const pending = zone.mapStore('pending', { + durable: true, + }); + return { operators, pending }; }, - public: { - getEvidenceStream: () => subscriber, + { + creator: { + /** + * An "operator invitation" is an invitation to be an operator in the + * oracle network, with the able to submit data to submit evidence of + * CCTP transactions. + * + * @param {string} operatorId unique per contract instance + * @returns {Promise>} + */ + makeOperatorInvitation(operatorId) { + const { creator } = this.facets; + trace('makeOperatorInvitation', operatorId); + + return zcf.makeInvitation( + /** @type {OfferHandler} */ + seat => { + seat.exit(); + return creator.initOperator(operatorId); + }, + INVITATION_MAKERS_DESC, + ); + }, + /** @param {string} operatorId */ + initOperator(operatorId) { + const { operators, pending } = this.state; + trace('initOperator', operatorId); + + const operatorKit = makeOperatorKit( + operatorId, + this.facets.operatorPowers, + ); + operators.init(operatorId, operatorKit); + pending.init( + operatorId, + zone.detached().mapStore('pending evidence'), + ); + + return operatorKit; + }, + + /** @param {string} operatorId */ + async removeOperator(operatorId) { + const { operators } = this.state; + trace('removeOperator', operatorId); + const operatorKit = operators.get(operatorId); + operatorKit.admin.disable(); + operators.delete(operatorId); + }, + }, + operatorPowers: { + /** + * Add evidence from an operator. + * + * @param {CctpTxEvidence} evidence + * @param {OperatorKit} operatorKit + */ + submitEvidence(evidence, operatorKit) { + const { pending } = this.state; + trace( + 'submitEvidence', + operatorKit.operator.getStatus().operatorId, + evidence, + ); + const { operatorId } = operatorKit.operator.getStatus(); + + // TODO should this verify that the operator is one made by this exo? + // This doesn't work... + // operatorKit === operators.get(operatorId) || + // Fail`operatorKit mismatch`; + + // TODO validate that it's a valid for Fast USDC before accepting + // E.g. that the `recipientAddress` is the FU settlement account and that + // the EUD is a chain supported by FU. + const { txHash } = evidence; + + // accept the evidence + { + const pendingStore = pending.get(operatorId); + if (pendingStore.has(txHash)) { + trace(`operator ${operatorId} already reported ${txHash}`); + } else { + pendingStore.init(txHash, evidence); + } + } + + // check agreement + const found = [...pending.values()].filter(store => + store.has(txHash), + ); + // TODO determine the real policy for checking agreement + if (found.length < pending.getSize()) { + // not all have seen it + return; + } + + // TODO verify that all found deep equal + + // all agree, so remove from pending and publish + for (const pendingStore of pending.values()) { + pendingStore.delete(txHash); + } + publisher.publish(evidence); + }, + }, + public: { + getEvidenceSubscriber: () => subscriber, + }, }, - }); + ); }; harden(prepareTransactionFeedKit); -/** @typedef {ReturnType} TransactionFeedKit */ +/** @typedef {ReturnType>} TransactionFeedKit */ diff --git a/packages/fast-usdc/src/fast-usdc.contract.js b/packages/fast-usdc/src/fast-usdc.contract.js index 78bfd03f48f..0863dcdc210 100644 --- a/packages/fast-usdc/src/fast-usdc.contract.js +++ b/packages/fast-usdc/src/fast-usdc.contract.js @@ -1,36 +1,64 @@ import { AssetKind } from '@agoric/ertp'; -import { BrandShape } from '@agoric/ertp/src/typeGuards.js'; -import { assertAllDefined, makeTracer } from '@agoric/internal'; +import { + assertAllDefined, + deeplyFulfilledObject, + makeTracer, +} from '@agoric/internal'; import { observeIteration, subscribeEach } from '@agoric/notifier'; -import { withOrchestration } from '@agoric/orchestration'; +import { + CosmosChainInfoShape, + DenomDetailShape, + OrchestrationPowersShape, + registerChainsAndAssets, + withOrchestration, +} from '@agoric/orchestration'; import { provideSingleton } from '@agoric/zoe/src/contractSupport/durability.js'; import { prepareRecorderKitMakers } from '@agoric/zoe/src/contractSupport/recorder.js'; -import { M } from '@endo/patterns'; +import { makeZoeTools } from '@agoric/orchestration/src/utils/zoe-tools.js'; +import { depositToSeat } from '@agoric/zoe/src/contractSupport/zoeHelpers.js'; +import { E } from '@endo/far'; +import { M, objectMap } from '@endo/patterns'; import { prepareAdvancer } from './exos/advancer.js'; import { prepareLiquidityPoolKit } from './exos/liquidity-pool.js'; import { prepareSettler } from './exos/settler.js'; import { prepareStatusManager } from './exos/status-manager.js'; import { prepareTransactionFeedKit } from './exos/transaction-feed.js'; +import { defineInertInvitation } from './utils/zoe.js'; +import { FastUSDCTermsShape, FeeConfigShape } from './type-guards.js'; +import * as flows from './fast-usdc.flows.js'; const trace = makeTracer('FastUsdc'); +const STATUS_NODE = 'status'; + /** + * @import {HostInterface} from '@agoric/async-flow'; + * @import {CosmosChainInfo, Denom, DenomDetail, OrchestrationAccount} from '@agoric/orchestration'; * @import {OrchestrationPowers, OrchestrationTools} from '@agoric/orchestration/src/utils/start-helper.js'; + * @import {Vow} from '@agoric/vow'; * @import {Zone} from '@agoric/zone'; - * @import {CctpTxEvidence} from './types.js'; + * @import {OperatorKit} from './exos/operator-kit.js'; + * @import {CctpTxEvidence, FeeConfig} from './types.js'; + * @import {RepayAmountKWR, RepayPaymentKWR} from './exos/liquidity-pool.js'; */ /** * @typedef {{ - * poolFee: Amount<'nat'>; - * contractFee: Amount<'nat'>; + * usdcDenom: Denom; * }} FastUsdcTerms */ -const NatAmountShape = { brand: BrandShape, value: M.nat() }; + +/** @type {ContractMeta} */ export const meta = { - customTermsShape: { - contractFee: NatAmountShape, - poolFee: NatAmountShape, + // @ts-expect-error TypedPattern not recognized as record + customTermsShape: FastUSDCTermsShape, + privateArgsShape: { + // @ts-expect-error TypedPattern not recognized as record + ...OrchestrationPowersShape, + feeConfig: FeeConfigShape, + marshaller: M.remotable(), + chainInfo: M.recordOf(M.string(), CosmosChainInfoShape), + assetInfo: M.recordOf(M.string(), DenomDetailShape), }, }; harden(meta); @@ -39,6 +67,9 @@ harden(meta); * @param {ZCF} zcf * @param {OrchestrationPowers & { * marshaller: Marshaller; + * feeConfig: FeeConfig; + * chainInfo: Record; + * assetInfo: Record; * }} privateArgs * @param {Zone} zone * @param {OrchestrationTools} tools @@ -47,38 +78,48 @@ export const contract = async (zcf, privateArgs, zone, tools) => { assert(tools, 'no tools'); const terms = zcf.getTerms(); assert('USDC' in terms.brands, 'no USDC brand'); + assert('usdcDenom' in terms, 'no usdcDenom'); + const { feeConfig, marshaller } = privateArgs; const { makeRecorderKit } = prepareRecorderKitMakers( zone.mapStore('vstorage'), - privateArgs.marshaller, + marshaller, ); - const statusManager = prepareStatusManager(zone); - const makeSettler = prepareSettler(zone, { statusManager }); - const { chainHub, vowTools } = tools; + const makeStatusNode = () => + E(privateArgs.storageNode).makeChildNode(STATUS_NODE); + const statusManager = prepareStatusManager(zone, makeStatusNode); + + const { USDC } = terms.brands; + const { withdrawToSeat } = tools.zoeTools; + const { baggage, chainHub, orchestrateAll, vowTools } = tools; + const makeSettler = prepareSettler(zone, { + statusManager, + USDC, + withdrawToSeat, + feeConfig, + vowTools: tools.vowTools, + zcf, + chainHub, + }); + + const { localTransfer } = makeZoeTools(zcf, vowTools); const makeAdvancer = prepareAdvancer(zone, { chainHub, - log: trace, + feeConfig, + localTransfer, + usdc: harden({ + brand: terms.brands.USDC, + denom: terms.usdcDenom, + }), statusManager, vowTools, + zcf, }); - const makeFeedKit = prepareTransactionFeedKit(zone); + + const makeFeedKit = prepareTransactionFeedKit(zone, zcf); assertAllDefined({ makeFeedKit, makeAdvancer, makeSettler, statusManager }); - const feedKit = makeFeedKit(); - const advancer = makeAdvancer( - // @ts-expect-error FIXME - {}, - ); - // Connect evidence stream to advancer - void observeIteration(subscribeEach(feedKit.public.getEvidenceStream()), { - updateState(evidence) { - try { - advancer.handleTransactionEvent(evidence); - } catch (err) { - trace('🚨 Error handling transaction event', err); - } - }, - }); + const makeLiquidityPoolKit = prepareLiquidityPoolKit( zone, zcf, @@ -86,11 +127,46 @@ export const contract = async (zcf, privateArgs, zone, tools) => { { makeRecorderKit }, ); + const makeTestInvitation = defineInertInvitation( + zcf, + 'test of forcing evidence', + ); + + const { makeLocalAccount } = orchestrateAll(flows, {}); + const creatorFacet = zone.exo('Fast USDC Creator', undefined, { - simulateFeesFromAdvance(amount, payment) { - console.log('🚧🚧 UNTIL: advance fees are implemented 🚧🚧'); - // eslint-disable-next-line no-use-before-define - return poolKit.feeSink.receive(amount, payment); + /** @type {(operatorId: string) => Promise>} */ + async makeOperatorInvitation(operatorId) { + return feedKit.creator.makeOperatorInvitation(operatorId); + }, + /** + * @param {{ USDC: Amount<'nat'>}} amounts + */ + testBorrow(amounts) { + console.log('🚧🚧 UNTIL: borrow is integrated (#10388) 🚧🚧', amounts); + const { zcfSeat: tmpAssetManagerSeat } = zcf.makeEmptySeatKit(); + poolKit.borrower.borrow(tmpAssetManagerSeat, amounts); + return tmpAssetManagerSeat.getCurrentAllocation(); + }, + /** + * + * @param {RepayAmountKWR} amounts + * @param {RepayPaymentKWR} payments + * @returns {Promise} + */ + async testRepay(amounts, payments) { + console.log('🚧🚧 UNTIL: repay is integrated (#10388) 🚧🚧', amounts); + const { zcfSeat: tmpAssetManagerSeat } = zcf.makeEmptySeatKit(); + await depositToSeat( + zcf, + tmpAssetManagerSeat, + await deeplyFulfilledObject( + objectMap(payments, pmt => E(terms.issuers.USDC).getAmountOf(pmt)), + ), + payments, + ); + poolKit.repayer.repay(tmpAssetManagerSeat, amounts); + return tmpAssetManagerSeat.getCurrentAllocation(); }, }); @@ -98,33 +174,24 @@ export const contract = async (zcf, privateArgs, zone, tools) => { // XXX to be removed before production /** * NB: Any caller with access to this invitation maker has the ability to - * add evidence. + * force handling of evidence. * * Provide an API call in the form of an invitation maker, so that the - * capability is available in the smart-wallet bridge. + * capability is available in the smart-wallet bridge during UI testing. * * @param {CctpTxEvidence} evidence */ makeTestPushInvitation(evidence) { - // TODO(bootstrap integration): force this to throw and confirm that it - // shows up in the the smart-wallet UpdateRecord `error` property - feedKit.admin.submitEvidence(evidence); - return zcf.makeInvitation(async cSeat => { - trace('Offer made on noop invitation'); - cSeat.exit(); - return 'noop; evidence was pushed in the invitation maker call'; - }, 'noop invitation'); + void advancer.handleTransactionEvent(evidence); + return makeTestInvitation(); }, makeDepositInvitation() { - // eslint-disable-next-line no-use-before-define return poolKit.public.makeDepositInvitation(); }, makeWithdrawInvitation() { - // eslint-disable-next-line no-use-before-define return poolKit.public.makeWithdrawInvitation(); }, getPublicTopics() { - // eslint-disable-next-line no-use-before-define return poolKit.public.getPublicTopics(); }, }); @@ -155,6 +222,57 @@ export const contract = async (zcf, privateArgs, zone, tools) => { makeLiquidityPoolKit(shareMint, privateArgs.storageNode), ); + /** Chain, connection, and asset info can only be registered once */ + const firstIncarnationKey = 'firstIncarnationKey'; + if (!baggage.has(firstIncarnationKey)) { + baggage.init(firstIncarnationKey, true); + registerChainsAndAssets( + chainHub, + terms.brands, + privateArgs.chainInfo, + privateArgs.assetInfo, + ); + } + + const feedKit = zone.makeOnce('Feed Kit', () => makeFeedKit()); + + const poolAccountV = zone.makeOnce('PoolAccount', () => makeLocalAccount()); + const settleAccountV = zone.makeOnce('SettleAccount', () => + makeLocalAccount(), + ); + // when() is OK here since this clearly resolves promptly. + /** @type {HostInterface>[]} */ + const [poolAccount, settlementAccount] = await vowTools.when( + vowTools.all([poolAccountV, settleAccountV]), + ); + + const settlerKit = makeSettler({ + repayer: poolKit.repayer, + sourceChannel: 'channel-1234', // TODO: fix this as soon as testing needs it', + remoteDenom: 'uusdc', + settlementAccount, + }); + + const advancer = zone.makeOnce('Advancer', () => + makeAdvancer({ + borrowerFacet: poolKit.borrower, + notifyFacet: settlerKit.notify, + poolAccount, + }), + ); + // Connect evidence stream to advancer + void observeIteration(subscribeEach(feedKit.public.getEvidenceSubscriber()), { + updateState(evidence) { + try { + void advancer.handleTransactionEvent(evidence); + } catch (err) { + trace('🚨 Error handling transaction event', err); + } + }, + }); + + await settlerKit.creator.monitorMintingDeposits(); + return harden({ creatorFacet, publicFacet }); }; harden(contract); diff --git a/packages/fast-usdc/src/fast-usdc.flows.js b/packages/fast-usdc/src/fast-usdc.flows.js new file mode 100644 index 00000000000..9f330a4c905 --- /dev/null +++ b/packages/fast-usdc/src/fast-usdc.flows.js @@ -0,0 +1,13 @@ +/** + * @import {Orchestrator, OrchestrationFlow} from '@agoric/orchestration'; + */ + +/** + * @satisfies {OrchestrationFlow} + * @param {Orchestrator} orch + */ +export const makeLocalAccount = async orch => { + const agoricChain = await orch.getChain('agoric'); + return agoricChain.makeAccount(); +}; +harden(makeLocalAccount); diff --git a/packages/fast-usdc/src/fast-usdc.start.js b/packages/fast-usdc/src/fast-usdc.start.js new file mode 100644 index 00000000000..0dce7f375e2 --- /dev/null +++ b/packages/fast-usdc/src/fast-usdc.start.js @@ -0,0 +1,293 @@ +import { deeplyFulfilledObject, makeTracer, objectMap } from '@agoric/internal'; +import { CosmosChainInfoShape, DenomDetailShape } from '@agoric/orchestration'; +import { Fail } from '@endo/errors'; +import { E } from '@endo/far'; +import { makeMarshal } from '@endo/marshal'; +import { M } from '@endo/patterns'; +import { + FastUSDCTermsShape, + FeeConfigShape, + FeedPolicyShape, +} from './type-guards.js'; +import { fromExternalConfig } from './utils/config-marshal.js'; + +/** + * @import {DepositFacet} from '@agoric/ertp/src/types.js' + * @import {TypedPattern} from '@agoric/internal' + * @import {CosmosChainInfo, Denom, DenomDetail} from '@agoric/orchestration'; + * @import {Instance, StartParams} from '@agoric/zoe/src/zoeService/utils' + * @import {Board} from '@agoric/vats' + * @import {ManifestBundleRef} from '@agoric/deploy-script-support/src/externalTypes.js' + * @import {BootstrapManifest} from '@agoric/vats/src/core/lib-boot.js' + * @import {Passable} from '@endo/marshal'; + * @import {LegibleCapData} from './utils/config-marshal.js' + * @import {FastUsdcSF, FastUsdcTerms} from './fast-usdc.contract.js' + * @import {FeeConfig, FeedPolicy} from './types.js' + */ + +const trace = makeTracer('FUSD-Start', true); + +const contractName = 'fastUsdc'; + +/** + * @typedef {{ + * terms: FastUsdcTerms; + * oracles: Record; + * feeConfig: FeeConfig; + * feedPolicy: FeedPolicy & Passable; + * chainInfo: Record; + * assetInfo: Record; + * }} FastUSDCConfig + */ +/** @type {TypedPattern} */ +export const FastUSDCConfigShape = M.splitRecord({ + terms: FastUSDCTermsShape, + oracles: M.recordOf(M.string(), M.string()), + feeConfig: FeeConfigShape, + feedPolicy: FeedPolicyShape, + chainInfo: M.recordOf(M.string(), CosmosChainInfoShape), + assetInfo: M.recordOf(M.string(), DenomDetailShape), +}); + +/** + * XXX Shouldn't the bridge or board vat handle this? + * + * @param {string} path + * @param {{ + * chainStorage: ERef; + * board: ERef; + * }} io + */ +const makePublishingStorageKit = async (path, { chainStorage, board }) => { + const storageNode = await E(chainStorage).makeChildNode(path); + + const marshaller = await E(board).getPublishingMarshaller(); + return { storageNode, marshaller }; +}; + +const BOARD_AUX = 'boardAux'; +const marshalData = makeMarshal(_val => Fail`data only`); +/** + * @param {Brand} brand + * @param {Pick} powers + */ +const publishDisplayInfo = async (brand, { board, chainStorage }) => { + // chainStorage type includes undefined, which doesn't apply here. + // @ts-expect-error UNTIL https://github.com/Agoric/agoric-sdk/issues/8247 + const boardAux = E(chainStorage).makeChildNode(BOARD_AUX); + const [id, displayInfo, allegedName] = await Promise.all([ + E(board).getId(brand), + E(brand).getDisplayInfo(), + E(brand).getAllegedName(), + ]); + const node = E(boardAux).makeChildNode(id); + const aux = marshalData.toCapData(harden({ allegedName, displayInfo })); + await E(node).setValue(JSON.stringify(aux)); +}; + +const FEED_POLICY = 'feedPolicy'; + +/** + * @param {ERef} node + * @param {FeedPolicy} policy + */ +const publishFeedPolicy = async (node, policy) => { + const feedPolicy = E(node).makeChildNode(FEED_POLICY); + await E(feedPolicy).setValue(JSON.stringify(policy)); +}; + +/** + * @typedef { PromiseSpaceOf<{ + * fastUsdcKit: FastUSDCKit + * }> & { + * installation: PromiseSpaceOf<{ fastUsdc: Installation }>; + * instance: PromiseSpaceOf<{ fastUsdc: Instance }>; + * issuer: PromiseSpaceOf<{ FastLP: Issuer }>; + * brand: PromiseSpaceOf<{ FastLP: Brand }>; + * }} FastUSDCCorePowers + * + * @typedef {StartedInstanceKitWithLabel & { + * privateArgs: StartParams['privateArgs']; + * }} FastUSDCKit + */ + +/** + * @throws if oracle smart wallets are not yet provisioned + * + * @param {BootstrapPowers & FastUSDCCorePowers } powers + * @param {{ options: LegibleCapData }} config + */ +export const startFastUSDC = async ( + { + produce: { fastUsdcKit }, + consume: { + agoricNames, + namesByAddress, + board, + chainStorage, + chainTimerService: timerService, + localchain, + cosmosInterchainService, + startUpgradable, + zoe, + }, + issuer: { + produce: { FastLP: produceShareIssuer }, + }, + brand: { + produce: { FastLP: produceShareBrand }, + }, + installation: { + consume: { fastUsdc }, + }, + instance: { + produce: { fastUsdc: produceInstance }, + }, + }, + config, +) => { + trace('startFastUSDC'); + + await null; + /** @type {Issuer<'nat'>} */ + const USDCissuer = await E(agoricNames).lookup('issuer', 'USDC'); + const brands = harden({ + USDC: await E(USDCissuer).getBrand(), + }); + + const { terms, oracles, feeConfig, feedPolicy, chainInfo, assetInfo } = + fromExternalConfig( + config?.options, // just in case config is missing somehow + brands, + FastUSDCConfigShape, + ); + trace('using terms', terms); + trace('using fee config', feeConfig); + + trace('look up oracle deposit facets'); + const oracleDepositFacets = await deeplyFulfilledObject( + objectMap(oracles, async address => { + /** @type {DepositFacet} */ + const depositFacet = await E(namesByAddress).lookup( + address, + 'depositFacet', + ); + return depositFacet; + }), + ); + + const { storageNode, marshaller } = await makePublishingStorageKit( + contractName, + { + board, + // @ts-expect-error Promise case is vestigial + chainStorage, + }, + ); + + const privateArgs = await deeplyFulfilledObject( + harden({ + agoricNames, + feeConfig, + localchain, + orchestrationService: cosmosInterchainService, + storageNode, + timerService, + marshaller, + chainInfo, + assetInfo, + }), + ); + + const kit = await E(startUpgradable)({ + label: contractName, + installation: fastUsdc, + issuerKeywordRecord: harden({ USDC: USDCissuer }), + terms, + privateArgs, + }); + fastUsdcKit.resolve(harden({ ...kit, privateArgs })); + const { instance, creatorFacet } = kit; + + await publishFeedPolicy(storageNode, feedPolicy); + + const { + issuers: { PoolShares: shareIssuer }, + brands: { PoolShares: shareBrand }, + } = await E(zoe).getTerms(instance); + produceShareIssuer.resolve(shareIssuer); + produceShareBrand.resolve(shareBrand); + await publishDisplayInfo(shareBrand, { board, chainStorage }); + + await Promise.all( + Object.entries(oracleDepositFacets).map(async ([name, depositFacet]) => { + const address = oracles[name]; + trace('making invitation for', name, address); + const toWatch = await E(creatorFacet).makeOperatorInvitation(address); + + const amt = await E(depositFacet).receive(toWatch); + trace('sent', amt, 'to', name); + }), + ); + + produceInstance.reset(); + produceInstance.resolve(instance); + trace('startFastUSDC done', instance); +}; +harden(startFastUSDC); + +/** + * @param {{ + * restoreRef: (b: ERef) => Promise; + * }} utils + * @param {{ + * installKeys: { fastUsdc: ERef }; + * options: LegibleCapData; + * }} param1 + */ +export const getManifestForFastUSDC = ( + { restoreRef }, + { installKeys, options }, +) => { + return { + /** @type {BootstrapManifest} */ + manifest: { + [startFastUSDC.name]: { + produce: { + fastUsdcKit: true, + }, + consume: { + chainStorage: true, + chainTimerService: true, + localchain: true, + cosmosInterchainService: true, + + // limited distribution durin MN2: contract installation + startUpgradable: true, + zoe: true, // only getTerms() is needed. XXX should be split? + + // widely shared: name services + agoricNames: true, + namesByAddress: true, + board: true, + }, + issuer: { + produce: { FastLP: true }, // UNTIL #10432 + }, + brand: { + produce: { FastLP: true }, // UNTIL #10432 + }, + instance: { + produce: { fastUsdc: true }, + }, + installation: { + consume: { fastUsdc: true }, + }, + }, + }, + installations: { + fastUsdc: restoreRef(installKeys.fastUsdc), + }, + options, + }; +}; diff --git a/packages/fast-usdc/src/pool-share-math.js b/packages/fast-usdc/src/pool-share-math.js index 01b41816933..7c5df36f567 100644 --- a/packages/fast-usdc/src/pool-share-math.js +++ b/packages/fast-usdc/src/pool-share-math.js @@ -7,7 +7,12 @@ import { } from '@agoric/zoe/src/contractSupport/ratio.js'; import { Fail, q } from '@endo/errors'; -const { getValue, add, isEmpty, isGTE, subtract } = AmountMath; +const { getValue, add, isEmpty, isEqual, isGTE, subtract } = AmountMath; + +/** + * @import {PoolStats} from './types'; + * @import {RepayAmountKWR} from './exos/liquidity-pool'; + */ /** * Invariant: shareWorth is the pool balance divided by shares outstanding. @@ -120,3 +125,65 @@ export const withFees = (shareWorth, fees) => { const balancePost = add(shareWorth.numerator, fees); return makeRatioFromAmounts(balancePost, shareWorth.denominator); }; + +/** + * + * @param {Amount<'nat'>} requested + * @param {Amount<'nat'>} poolSeatAllocation + * @param {Amount<'nat'>} encumberedBalance + * @param {PoolStats} poolStats + * @throws {Error} if requested is not less than poolSeatAllocation + */ +export const borrowCalc = ( + requested, + poolSeatAllocation, + encumberedBalance, + poolStats, +) => { + // pool must never go empty + !isGTE(requested, poolSeatAllocation) || + Fail`Cannot borrow. Requested ${q(requested)} must be less than pool balance ${q(poolSeatAllocation)}.`; + + return harden({ + encumberedBalance: add(encumberedBalance, requested), + poolStats: { + ...poolStats, + totalBorrows: add(poolStats.totalBorrows, requested), + }, + }); +}; + +/** + * @param {ShareWorth} shareWorth + * @param {Allocation} fromSeatAllocation + * @param {RepayAmountKWR} amounts + * @param {Amount<'nat'>} encumberedBalance aka 'outstanding borrows' + * @param {PoolStats} poolStats + * @throws {Error} if allocations do not match amounts or Principal exceeds encumberedBalance + */ +export const repayCalc = ( + shareWorth, + fromSeatAllocation, + amounts, + encumberedBalance, + poolStats, +) => { + (isEqual(fromSeatAllocation.Principal, amounts.Principal) && + isEqual(fromSeatAllocation.PoolFee, amounts.PoolFee) && + isEqual(fromSeatAllocation.ContractFee, amounts.ContractFee)) || + Fail`Cannot repay. From seat allocation ${q(fromSeatAllocation)} does not equal amounts ${q(amounts)}.`; + + isGTE(encumberedBalance, amounts.Principal) || + Fail`Cannot repay. Principal ${q(amounts.Principal)} exceeds encumberedBalance ${q(encumberedBalance)}.`; + + return harden({ + shareWorth: withFees(shareWorth, amounts.PoolFee), + encumberedBalance: subtract(encumberedBalance, amounts.Principal), + poolStats: { + ...poolStats, + totalRepays: add(poolStats.totalRepays, amounts.Principal), + totalPoolFees: add(poolStats.totalPoolFees, amounts.PoolFee), + totalContractFees: add(poolStats.totalContractFees, amounts.ContractFee), + }, + }); +}; diff --git a/packages/fast-usdc/src/type-guards.js b/packages/fast-usdc/src/type-guards.js index 6341fcf272c..425551bea65 100644 --- a/packages/fast-usdc/src/type-guards.js +++ b/packages/fast-usdc/src/type-guards.js @@ -1,8 +1,12 @@ +import { AmountShape, BrandShape, RatioShape } from '@agoric/ertp'; import { M } from '@endo/patterns'; +import { PendingTxStatus } from './constants.js'; /** - * @import {TypedPattern} from '@agoric/internal' - * @import {USDCProposalShapes} from './pool-share-math' + * @import {TypedPattern} from '@agoric/internal'; + * @import {FastUsdcTerms} from './fast-usdc.contract.js'; + * @import {USDCProposalShapes} from './pool-share-math.js'; + * @import {CctpTxEvidence, FeeConfig, PendingTx, PoolMetrics, ChainPolicy, FeedPolicy} from './types.js'; */ /** @@ -26,3 +30,94 @@ export const makeProposalShapes = ({ PoolShares, USDC }) => { }); return harden({ deposit, withdraw }); }; + +/** @type {TypedPattern} */ +export const FastUSDCTermsShape = harden({ + usdcDenom: M.string(), +}); + +/** @type {TypedPattern} */ +export const EvmHashShape = M.string({ + stringLengthLimit: 66, +}); +harden(EvmHashShape); + +/** @type {TypedPattern} */ +export const CctpTxEvidenceShape = { + aux: { + forwardingChannel: M.string(), + recipientAddress: M.string(), + }, + blockHash: EvmHashShape, + blockNumber: M.bigint(), + blockTimestamp: M.bigint(), + chainId: M.number(), + tx: { + amount: M.bigint(), + forwardingAddress: M.string(), + }, + txHash: EvmHashShape, +}; +harden(CctpTxEvidenceShape); + +/** @type {TypedPattern} */ +// @ts-expect-error TypedPattern not recognized as record +export const PendingTxShape = { + ...CctpTxEvidenceShape, + status: M.or(...Object.values(PendingTxStatus)), +}; +harden(PendingTxShape); + +export const EudParamShape = { + EUD: M.string(), +}; +harden(EudParamShape); + +const NatAmountShape = { brand: BrandShape, value: M.nat() }; +/** @type {TypedPattern} */ +export const FeeConfigShape = { + flat: NatAmountShape, + variableRate: RatioShape, + maxVariable: NatAmountShape, + contractRate: RatioShape, +}; +harden(FeeConfigShape); + +/** @type {TypedPattern} */ +export const PoolMetricsShape = { + encumberedBalance: AmountShape, + shareWorth: RatioShape, + totalContractFees: AmountShape, + totalPoolFees: AmountShape, + totalBorrows: AmountShape, + totalRepays: AmountShape, +}; +harden(PoolMetricsShape); + +/** @type {TypedPattern} */ +export const ChainPoliciesShape = M.splitRecord( + { + nobleContractAddress: EvmHashShape, + cctpTokenMessengerAddress: EvmHashShape, + confirmations: M.number(), + chainId: M.number(), + }, + { chainType: M.number() }, +); +harden(ChainPoliciesShape); + +/** + * @type {TypedPattern} + * + * Should be JSON serializable so CLI can specify policy. E.g. no bigint, + * undefined, remotable, etc. + */ +export const FeedPolicyShape = M.splitRecord( + { + nobleDomainId: M.number(), + nobleAgoricChannelId: M.string(), + chainPolicies: M.recordOf(M.string(), ChainPoliciesShape), + }, + { eventFilter: M.string() }, +); +harden(FeedPolicyShape); diff --git a/packages/fast-usdc/src/typeGuards.js b/packages/fast-usdc/src/typeGuards.js deleted file mode 100644 index 2f10318fc57..00000000000 --- a/packages/fast-usdc/src/typeGuards.js +++ /dev/null @@ -1,39 +0,0 @@ -import { M } from '@endo/patterns'; -import { PendingTxStatus } from './constants.js'; - -/** - * @import {TypedPattern} from '@agoric/internal'; - * @import {CctpTxEvidence, PendingTx} from './types.js'; - */ - -/** @type {TypedPattern} */ -export const EvmHashShape = M.string({ - stringLengthLimit: 66, -}); -harden(EvmHashShape); - -/** @type {TypedPattern} */ -export const CctpTxEvidenceShape = { - aux: { - forwardingChannel: M.string(), - recipientAddress: M.string(), - }, - blockHash: EvmHashShape, - blockNumber: M.bigint(), - blockTimestamp: M.bigint(), - chainId: M.number(), - tx: { - amount: M.bigint(), - forwardingAddress: M.string(), - }, - txHash: EvmHashShape, -}; -harden(CctpTxEvidenceShape); - -/** @type {TypedPattern} */ -// @ts-expect-error TypedPattern can't handle spreading? -export const PendingTxShape = { - ...CctpTxEvidenceShape, - status: M.or(...Object.values(PendingTxStatus)), -}; -harden(PendingTxShape); diff --git a/packages/fast-usdc/src/types.ts b/packages/fast-usdc/src/types.ts index ed6249f2ff4..e25536ff383 100644 --- a/packages/fast-usdc/src/types.ts +++ b/packages/fast-usdc/src/types.ts @@ -1,9 +1,12 @@ import type { ChainAddress } from '@agoric/orchestration'; import type { IBCChannelID } from '@agoric/vats'; +import type { Amount } from '@agoric/ertp'; import type { PendingTxStatus } from './constants.js'; export type EvmHash = `0x${string}`; export type NobleAddress = `noble1${string}`; +export type EvmChainID = number; +export type EvmChainName = string; export interface CctpTxEvidence { /** from Noble RPC */ @@ -35,4 +38,39 @@ export type PendingTxKey = `pendingTx:${string}`; /** internal key for `StatusManager` exo */ export type SeenTxKey = `seenTx:${string}`; +export type FeeConfig = { + flat: Amount<'nat'>; + variableRate: Ratio; + maxVariable: Amount<'nat'>; + contractRate: Ratio; +}; + +export interface PoolStats { + totalBorrows: Amount<'nat'>; + totalContractFees: Amount<'nat'>; + totalPoolFees: Amount<'nat'>; + totalRepays: Amount<'nat'>; +} + +export interface PoolMetrics extends PoolStats { + encumberedBalance: Amount<'nat'>; + shareWorth: Ratio; +} + +export interface ChainPolicy { + nobleContractAddress: EvmHash; + cctpTokenMessengerAddress: EvmHash; + confirmations: number; + chainId: EvmChainID; + chainType?: number; +} + +export interface FeedPolicy { + nobleDomainId: number; + nobleAgoricChannelId: string; + chainPolicies: Record; + eventFilter?: string; +} + export type * from './constants.js'; +export type { LiquidityPoolKit } from './exos/liquidity-pool.js'; diff --git a/packages/fast-usdc/src/util/agoric.js b/packages/fast-usdc/src/util/agoric.js new file mode 100644 index 00000000000..1439f60ffda --- /dev/null +++ b/packages/fast-usdc/src/util/agoric.js @@ -0,0 +1,12 @@ +/** @import { VStorage } from '@agoric/client-utils' */ + +export const queryFastUSDCLocalChainAccount = async ( + /** @type {VStorage} */ vstorage, + out = console, +) => { + const agoricAddr = await vstorage.readLatest( + 'published.fastUSDC.settlementAccount', + ); + out.log(`Got Fast USDC Local Chain Account ${agoricAddr}`); + return agoricAddr; +}; diff --git a/packages/fast-usdc/src/util/cctp.js b/packages/fast-usdc/src/util/cctp.js new file mode 100644 index 00000000000..08d8d475564 --- /dev/null +++ b/packages/fast-usdc/src/util/cctp.js @@ -0,0 +1,71 @@ +import { Buffer } from 'node:buffer'; +import { bech32 } from 'bech32'; +import { ethers } from 'ethers'; + +/** + * Adapted from https://docs.noble.xyz/cctp/mint#encoding + * + * @param {string} address + * @returns {string} + */ +export const encodeBech32Address = address => { + const decoded = bech32.decode(address); + const rawBytes = Buffer.from(bech32.fromWords(decoded.words)); + + const padded = Buffer.alloc(32); + rawBytes.copy(padded, 32 - rawBytes.length); + + return `0x${padded.toString('hex')}`; +}; + +const tokenAbi = ['function approve(address spender, uint256 value) external']; + +const contractAbi = [ + 'function depositForBurn(uint256 amount, uint32 destinationDomain, bytes32 mintRecipient, address burnToken) external', +]; + +export const makeProvider = (/** @type {string} */ rpc) => + new ethers.JsonRpcProvider(rpc); + +const USDC_DECIMALS = 6; +// For CCTP, noble's domain is universally "4" +const NOBLE_DOMAIN = 4; + +export const depositForBurn = async ( + /** @type {ethers.JsonRpcProvider} */ provider, + /** @type {string} */ ethSeed, + /** @type {string} */ tokenMessengerAddress, + /** @type {string} */ tokenAddress, + /** @type {string} */ destination, + /** @type {string} */ amount, + out = console, +) => { + const privateKey = ethSeed; + const wallet = new ethers.Wallet(privateKey, provider); + const contractAddress = tokenMessengerAddress; + const token = new ethers.Contract(tokenAddress, tokenAbi, wallet); + const contract = new ethers.Contract(contractAddress, contractAbi, wallet); + const parsedAmount = ethers.parseUnits(amount, USDC_DECIMALS); + out.log('approving'); + const approveTx = await token.approve(contractAddress, parsedAmount); + out.log('Transaction sent, waiting for confirmation...'); + const approveReceipt = await approveTx.wait(); + out.log('Transaction confirmed in block', approveReceipt.blockNumber); + out.log('Transaction hash:', approveReceipt.hash); + + const mintRecipient = encodeBech32Address(destination); + out.log('depositing for burn', parsedAmount, 4, mintRecipient, tokenAddress); + const tx = await contract.depositForBurn( + parsedAmount, + NOBLE_DOMAIN, + mintRecipient, + tokenAddress, + ); + + out.log('Transaction sent, waiting for confirmation...'); + const receipt = await tx.wait(); + + out.log('Transaction confirmed in block', receipt.blockNumber); + out.log('Transaction hash:', receipt.hash); + out.log('USDC transfer initiated successfully, our work here is done.'); +}; diff --git a/packages/fast-usdc/src/util/file.js b/packages/fast-usdc/src/util/file.js new file mode 100644 index 00000000000..fd8134b420b --- /dev/null +++ b/packages/fast-usdc/src/util/file.js @@ -0,0 +1,30 @@ +import { dirname } from 'path'; + +/** @import { readFile as readAsync } from 'node:fs/promises' */ +/** @import { writeFile as writeAsync } from 'node:fs/promises' */ +/** @import { mkdirSync } from 'node:fs' */ +/** @import { existsSync } from 'node:fs' */ + +export const makeFile = ( + /** @type {string} */ path, + /** @type {readAsync} */ readFile, + /** @type {writeAsync} */ writeFile, + /** @type {mkdirSync} */ mkdir, + /** @type {existsSync} */ pathExists, +) => { + const read = () => readFile(path, 'utf-8'); + + const write = async (/** @type {string} */ data) => { + const dir = dirname(path); + if (!pathExists(dir)) { + mkdir(dir); + } + await writeFile(path, data); + }; + + const exists = () => pathExists(path); + + return { read, write, exists, path }; +}; + +/** @typedef {ReturnType} File */ diff --git a/packages/fast-usdc/src/util/noble.js b/packages/fast-usdc/src/util/noble.js new file mode 100644 index 00000000000..3411c5827d9 --- /dev/null +++ b/packages/fast-usdc/src/util/noble.js @@ -0,0 +1,110 @@ +/* global globalThis */ + +import { DirectSecp256k1HdWallet, Registry } from '@cosmjs/proto-signing'; +import { AminoTypes, SigningStargateClient } from '@cosmjs/stargate'; +import { nobleAminoConverters, nobleProtoRegistry } from '@nick134-bit/noblejs'; + +export const makeSigner = async ( + /** @type {string} */ nobleSeed, + /** @type {string} */ nobleRpc, + out = console, +) => { + const wallet = await DirectSecp256k1HdWallet.fromMnemonic(nobleSeed, { + prefix: 'noble', + }); + out.log('got noble wallet from seed'); + const accounts = await wallet.getAccounts(); + const address = accounts[0].address; + const signer = await SigningStargateClient.connectWithSigner( + nobleRpc, + wallet, + { + aminoTypes: new AminoTypes({ + ...nobleAminoConverters, + }), + registry: new Registry([...nobleProtoRegistry]), + }, + ); + return { address, signer }; +}; + +const createMsgRegisterAccount = ( + /** @type {string} */ signer, + /** @type {string} */ recipient, + /** @type {string} */ channel, +) => { + return { + typeUrl: '/noble.forwarding.v1.MsgRegisterAccount', + value: { + signer, + recipient, + channel, + }, + }; +}; + +export const registerFwdAccount = async ( + /** @type {SigningStargateClient} */ nobleSigner, + /** @type {string} */ nobleAddress, + /** @type {string} */ nobleToAgoricChannel, + /** @type {string} */ recipient, + out = console, +) => { + out.log('registering fwd account on noble'); + const msg = createMsgRegisterAccount( + nobleAddress, + recipient, + nobleToAgoricChannel, + ); + const fee = { + amount: [ + { + denom: 'uusdc', + amount: '20000', + }, + ], + gas: '200000', + }; + out.log('signing message', msg); + const txResult = await nobleSigner.signAndBroadcast( + nobleAddress, + [msg], + fee, + 'Register Account Transaction', + ); + if (txResult.code !== undefined && txResult.code !== 0) { + throw new Error( + `Transaction failed with code ${txResult.code}: ${txResult.events || ''}`, + ); + } + return `Transaction successful with hash: ${txResult.transactionHash}`; +}; + +export const queryForwardingAccount = async ( + /** @type {string} */ nobleApi, + /** @type {string} */ nobleToAgoricChannel, + /** @type {string} */ agoricAddr, + out = console, + fetch = globalThis.fetch, +) => { + /** + * https://github.com/noble-assets/forwarding/blob/9d7657a/proto/noble/forwarding/v1/query.proto + * v2.0.0 10 Nov 2024 + */ + const query = `${nobleApi}/noble/forwarding/v1/address/${nobleToAgoricChannel}/${encodeURIComponent(agoricAddr)}/`; + out.log(`querying forward address details from noble api: ${query}`); + let forwardingAddressRes; + await null; + try { + forwardingAddressRes = await fetch(query).then(res => res.json()); + } catch (e) { + out.error(`Error querying forwarding address from ${query}`); + throw e; + } + /** @type {{ address: string, exists: boolean }} */ + const { address, exists } = forwardingAddressRes; + out.log( + `got forwarding address details: ${JSON.stringify(forwardingAddressRes)}`, + ); + return { address, exists }; +}; diff --git a/packages/fast-usdc/src/utils/address.js b/packages/fast-usdc/src/utils/address.js index f66b839f5ac..a84e8f0c5c9 100644 --- a/packages/fast-usdc/src/utils/address.js +++ b/packages/fast-usdc/src/utils/address.js @@ -1,4 +1,19 @@ import { makeError, q } from '@endo/errors'; +import { M, mustMatch } from '@endo/patterns'; + +/** + * @import {Pattern} from '@endo/patterns'; + */ + +/** + * Default pattern matcher for `getQueryParams`. + * Does not assert keys exist, but ensures existing keys are strings. + */ +const QueryParamsShape = M.splitRecord( + {}, + {}, + M.recordOf(M.string(), M.string()), +); /** * Very minimal 'URL query string'-like parser that handles: @@ -22,7 +37,7 @@ export const addressTools = { */ hasQueryParams: address => { try { - const { params } = addressTools.getQueryParams(address); + const params = addressTools.getQueryParams(address); return Object.keys(params).length > 0; } catch { return false; @@ -30,34 +45,27 @@ export const addressTools = { }, /** * @param {string} address - * @returns {{ address: string, params: Record}} + * @param {Pattern} [shape] + * @returns {Record} + * @throws {Error} if the address cannot be parsed or params do not match `shape` */ - getQueryParams: address => { + getQueryParams: (address, shape = QueryParamsShape) => { const parts = address.split('?'); - if (parts.length === 0 || parts.length > 2) { - throw makeError( - `Invalid input. Must be of the form 'address?params': ${q(address)}`, - ); - } - const result = { - address: parts[0], - params: {}, - }; - - // no parameters, return early - if (parts.length === 1) { - return result; + if (parts.length !== 2) { + throw makeError(`Unable to parse query params: ${q(address)}`); } - + /** @type {Record} */ + const result = {}; const paramPairs = parts[1].split('&'); for (const pair of paramPairs) { const [key, value] = pair.split('='); if (!key || !value) { throw makeError(`Invalid parameter format in pair: ${q(pair)}`); } - result.params[key] = value; + result[key] = value; } - + harden(result); + mustMatch(result, shape); return result; }, }; diff --git a/packages/fast-usdc/src/utils/config-marshal.js b/packages/fast-usdc/src/utils/config-marshal.js new file mode 100644 index 00000000000..5bcc353e9f0 --- /dev/null +++ b/packages/fast-usdc/src/utils/config-marshal.js @@ -0,0 +1,130 @@ +import { Fail } from '@endo/errors'; +import { makeMarshal } from '@endo/marshal'; +import { mustMatch } from '@endo/patterns'; + +// TODO(#7309): move to make available beyond fast-usdc. + +/** + * @import {Marshal, CapData, Passable} from '@endo/marshal'; + * @import { RemotableBrand } from '@endo/eventual-send'; + * @import {TypedPattern} from '@agoric/internal' + */ +const { entries } = Object; + +/** + * To configure amounts such as terms or ratios, + * we need to refer to objects such as brands. + * + * If parties agree on names, any party that doesn't have + * an actual presence for an object can make one up: + * + * const remotes = { USDC: Far('USDC Brand') }; + * + * and use it in local computation: + * + * const terms = { fee1: AmountMath.make(remotes.USDC, 1234n) } + * + * Then we can pass references across using marshal conventions, using + * the names as slots. + * + * @param {Record} slotToVal a record that gives names to stand-ins for objects in another vat + * @returns {Marshal} + */ +export const makeMarshalFromRecord = slotToVal => { + const convertSlotToVal = slot => { + slot in slotToVal || Fail`unknown slot ${slot}`; + return slotToVal[slot]; + }; + const valToSlot = new Map(entries(slotToVal).map(([k, v]) => [v, k])); + const convertValToSlot = v => { + valToSlot.has(v) || Fail`unknown value: ${v}`; + return valToSlot.get(v); + }; + return makeMarshal(convertValToSlot, convertSlotToVal, { + serializeBodyFormat: 'smallcaps', + }); +}; + +/** + * @typedef {`\$${number}${string}`} SmallCapsSlotRef + */ + +/** + * @template T + * @typedef {{ [KeyType in keyof T]: T[KeyType] } & {}} Simplify flatten the + * type output to improve type hints shown in editors + * https://github.com/sindresorhus/type-fest/blob/main/source/simplify.d.ts + */ + +/** + * @template T + * @template R + * @typedef {T extends R + * ? SmallCapsSlotRef + * : T extends {} + * ? Simplify> + * : Awaited} SmallCapsStructureOf + */ + +/** + * The smallCaps body is a string, which simplifies some usage. + * But it's hard to read and write. + * + * The parsed structure makes a convenient notation for configuration etc. + * + * @template {Passable} [T=Passable] + * @template [R=RemotableBrand] + * @typedef {{ + * structure: SmallCapsStructureOf; + * slots: string[]; + * }} LegibleCapData + */ + +/** + * @template {Passable} [T=Passable] + * @template [R=RemotableBrand] + * @param {CapData} capData + * @returns {LegibleCapData} + */ +export const toLegible = ({ body, slots }) => + harden({ structure: JSON.parse(body.replace(/^#/, '')), slots }); + +/** + * @template {Passable} [T=Passable] + * @template [R=RemotableBrand] + * @param {LegibleCapData} legible + * @returns {CapData} + */ +export const fromLegible = ({ structure, slots }) => + harden({ body: `#${JSON.stringify(structure)}`, slots }); + +/** + * @template {Passable} [T=Passable] + * @template [R=RemotableBrand] + * @param {T} config + * @param {Record} context + * @param {TypedPattern} [shape] + * @returns {LegibleCapData} + */ +export const toExternalConfig = (config, context, shape) => { + if (shape) { + mustMatch(config, shape); + } + return toLegible(makeMarshalFromRecord(context).toCapData(config)); +}; + +/** + * @template {Passable} [T=Passable] + * @template [R=RemotableBrand] + * @param {LegibleCapData} repr + * @param {Record} context + * @param {TypedPattern} [shape] + * @returns {T} + */ +export const fromExternalConfig = (repr, context, shape) => { + const config = makeMarshalFromRecord(context).fromCapData(fromLegible(repr)); + if (shape) { + mustMatch(config, shape); + } + return config; +}; diff --git a/packages/fast-usdc/src/utils/fees.js b/packages/fast-usdc/src/utils/fees.js new file mode 100644 index 00000000000..08b14c81991 --- /dev/null +++ b/packages/fast-usdc/src/utils/fees.js @@ -0,0 +1,58 @@ +import { AmountMath } from '@agoric/ertp'; +import { multiplyBy } from '@agoric/zoe/src/contractSupport/ratio.js'; +import { Fail } from '@endo/errors'; +import { mustMatch } from '@endo/patterns'; +import { FeeConfigShape } from '../type-guards.js'; + +const { add, isGTE, min, subtract } = AmountMath; + +/** + * @import {Amount} from '@agoric/ertp'; + * @import {FeeConfig} from '../types.js'; + * @import {RepayAmountKWR} from '../exos/liquidity-pool.js'; + */ + +/** @param {FeeConfig} feeConfig */ +export const makeFeeTools = feeConfig => { + mustMatch(feeConfig, FeeConfigShape, 'Must provide feeConfig'); + const { flat, variableRate, maxVariable } = feeConfig; + const feeTools = harden({ + /** + * Calculate the net amount to advance after withholding fees. + * + * @param {Amount<'nat'>} requested + * @throws {Error} if requested does not exceed fees + */ + calculateAdvance(requested) { + const fee = feeTools.calculateAdvanceFee(requested); + return subtract(requested, fee); + }, + /** + * Calculate the total fee to charge for the advance. + * + * @param {Amount<'nat'>} requested + * @throws {Error} if requested does not exceed fees + */ + calculateAdvanceFee(requested) { + const variable = min(multiplyBy(requested, variableRate), maxVariable); + const fee = add(variable, flat); + !isGTE(fee, requested) || Fail`Request must exceed fees.`; + return fee; + }, + /** + * Calculate the split of fees between pool and contract. + * + * @param {Amount<'nat'>} requested + * @returns {RepayAmountKWR} an {@link AmountKeywordRecord} + * @throws {Error} if requested does not exceed fees + */ + calculateSplit(requested) { + const fee = feeTools.calculateAdvanceFee(requested); + const Principal = subtract(requested, fee); + const ContractFee = multiplyBy(fee, feeConfig.contractRate); + const PoolFee = subtract(fee, ContractFee); + return harden({ Principal, PoolFee, ContractFee }); + }, + }); + return feeTools; +}; diff --git a/packages/fast-usdc/src/utils/zoe.js b/packages/fast-usdc/src/utils/zoe.js new file mode 100644 index 00000000000..d951bbef865 --- /dev/null +++ b/packages/fast-usdc/src/utils/zoe.js @@ -0,0 +1,28 @@ +import { makeTracer } from '@agoric/internal'; + +const trace = makeTracer('ZoeUtils'); + +/** + * Used for "continuing offer" invitations in which the caller does not need + * anything in return. In those cases there is no Zoe offer safety and the + * invitation making function can perform the request itself. + * + * But smart-wallet expects an invitation maker to make an invitation, so this + * function abstracts making such an inert invitation and logs consistently when + * it is used. + * + * When this is used by an invitation maker that performs the operation, receiving + * one of these invitations is evidence that the operation took place. + * + * @param {ZCF} zcf + * @param {string} description @see {@link ZCF.makeInvitation} + * @returns {() => Promise} an arg-less invitation maker + */ +export const defineInertInvitation = (zcf, description) => { + return () => + zcf.makeInvitation(seat => { + trace(`ℹ️ An offer was made on an inert invitation for ${description}`); + seat.exit(); + return 'inert; nothing should be expected from this offer'; + }, description); +}; diff --git a/packages/fast-usdc/test/cli.test.ts b/packages/fast-usdc/test/cli.test.ts deleted file mode 100644 index f14e70fa161..00000000000 --- a/packages/fast-usdc/test/cli.test.ts +++ /dev/null @@ -1,24 +0,0 @@ -import test from 'ava'; -import { spawn } from 'child_process'; -import { fileURLToPath } from 'url'; -import { dirname, join } from 'path'; - -const dir = dirname(fileURLToPath(import.meta.url)); -const CLI_PATH = join(dir, '../src/cli.js'); - -test('CLI shows help when run without arguments', async t => { - const output = await new Promise(resolve => { - const child = spawn('node', [CLI_PATH]); - let stderr = ''; - - child.stderr.on('data', data => { - stderr += data.toString(); - }); - - child.on('close', () => { - resolve(stderr); - }); - }); - - t.snapshot(output); -}); diff --git a/packages/fast-usdc/test/cli/cli.test.ts b/packages/fast-usdc/test/cli/cli.test.ts new file mode 100644 index 00000000000..cfde8387677 --- /dev/null +++ b/packages/fast-usdc/test/cli/cli.test.ts @@ -0,0 +1,347 @@ +import test from 'ava'; +import { execa } from 'execa'; +import { fileURLToPath } from 'url'; +import { dirname, join } from 'path'; +import { initProgram } from '../../src/cli/cli.js'; + +const dir = dirname(fileURLToPath(import.meta.url)); +const CLI_PATH = join(dir, '../../src/cli/bin.js'); + +const runCli = async (args: string[]) => { + await null; + try { + const { stdout } = await execa(CLI_PATH, args); + return stdout; + } catch (error: any) { + return error.stderr || error.stdout || error.message; + } +}; + +const mockConfig = () => { + let initArgs: any[]; + let updateArgs: any[]; + let showArgs: any[]; + return { + init: async (...args: any[]) => { + initArgs = args; + }, + update: async (...args: any[]) => { + updateArgs = args; + }, + show: async (...args: any[]) => { + showArgs = args; + }, + getInitArgs: () => initArgs, + getUpdateArgs: () => updateArgs, + getShowArgs: () => showArgs, + }; +}; + +const mockTransfer = () => { + let transferArgs: any[]; + return { + transfer: async (...args: any[]) => { + transferArgs = args; + }, + getTransferArgs: () => transferArgs, + }; +}; + +test('shows help when run without arguments', async t => { + const output = await runCli([]); + // Replace home path (e.g. "/home/samsiegart/.fast-usdc") with "~/.fast-usdc" so snapshots work on different machines. + const regex = /"\/(.+\/)?\.fast-usdc\/"/g; + const result = output.replace(regex, '"~/.fast-usdc"'); + + t.snapshot(result); +}); + +test('shows help for transfer command', async t => { + const output = await runCli(['transfer', '-h']); + t.snapshot(output); +}); + +test('shows help for config command', async t => { + const output = await runCli(['config', '-h']); + t.snapshot(output); +}); + +test('shows help for config init command', async t => { + const output = await runCli(['config', 'init', '-h']); + t.snapshot(output); +}); + +test('shows help for config update command', async t => { + const output = await runCli(['config', 'update', '-h']); + t.snapshot(output); +}); + +test('shows help for config show command', async t => { + const output = await runCli(['config', 'show', '-h']); + t.snapshot(output); +}); + +test('shows help for deposit command', async t => { + const output = await runCli(['deposit', '-h']); + t.snapshot(output); +}); + +test('shows help for withdraw command', async t => { + const output = await runCli(['withdraw', '-h']); + t.snapshot(output); +}); + +test('shows error when deposit command is run without options', async t => { + const output = await runCli(['deposit']); + t.snapshot(output); +}); + +test('shows error when deposit command is run with invalid amount', async t => { + const output = await runCli(['deposit', 'not-a-number']); + t.snapshot(output); +}); + +test('shows error when deposit command is run with invalid fee', async t => { + const output = await runCli(['deposit', '50', '--fee', 'not-a-number']); + t.snapshot(output); +}); + +test('shows error when withdraw command is run without options', async t => { + const output = await runCli(['withdraw']); + t.snapshot(output); +}); + +test('shows error when withdraw command is run with invalid amount', async t => { + const output = await runCli(['withdraw', 'not-a-number']); + t.snapshot(output); +}); + +test('shows error when withdraw command is run with invalid fee', async t => { + const output = await runCli(['withdraw', '50', '--fee', 'not-a-number']); + t.snapshot(output); +}); + +test('shows error when config init command is run without options', async t => { + const output = await runCli(['config', 'init']); + t.snapshot(output); +}); + +test('shows error when transfer command is run without options', async t => { + const output = await runCli(['transfer']); + t.snapshot(output); +}); + +test('shows error when config init command is run without eth seed', async t => { + const output = await runCli([ + 'config', + 'init', + '--noble-seed', + 'foo', + '--agoric-seed', + 'bar', + ]); + t.snapshot(output); +}); + +test('shows error when config init command is run without agoric seed', async t => { + const output = await runCli([ + 'config', + 'init', + '--noble-seed', + 'foo', + '--eth-seed', + 'bar', + ]); + t.snapshot(output); +}); + +test('shows error when config init command is run without noble seed', async t => { + const output = await runCli([ + 'config', + 'init', + '--agoric-seed', + 'foo', + '--eth-seed', + 'bar', + ]); + t.snapshot(output); +}); + +test('calls config init with default args', t => { + const homeDir = './test/.fast-usdc/'; + const config = mockConfig(); + const program = initProgram(config, mockTransfer()); + + program.parse([ + 'node', + CLI_PATH, + '--home', + homeDir, + 'config', + 'init', + '--noble-seed', + 'foo', + '--eth-seed', + 'bar', + '--agoric-seed', + 'bazinga', + ]); + + const args = config.getInitArgs(); + t.is(args.shift().path, `${homeDir}config.json`); + t.deepEqual(args, [ + { + agoricSeed: 'bazinga', + agoricApi: 'http://127.0.0.1:1317', + agoricRpc: 'http://127.0.0.1:26656', + ethRpc: 'http://127.0.0.1:8545', + ethSeed: 'bar', + nobleRpc: 'http://127.0.0.1:26657', + nobleSeed: 'foo', + nobleApi: 'http://127.0.0.1:1318', + nobleToAgoricChannel: 'channel-21', + tokenMessengerAddress: '0xbd3fa81b58ba92a82136038b25adec7066af3155', + tokenContractAddress: '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48', + }, + ]); +}); + +test('calls config init with optional args', t => { + const homeDir = './test/.fast-usdc/'; + const config = mockConfig(); + const program = initProgram(config, mockTransfer()); + + program.parse([ + 'node', + CLI_PATH, + '--home', + homeDir, + 'config', + 'init', + '--noble-seed', + 'foo', + '--eth-seed', + 'bar', + '--agoric-seed', + 'bazinga', + '--agoric-api', + '127.0.0.1:0000', + '--agoric-rpc', + '127.0.0.1:1111', + '--eth-rpc', + '127.0.0.1:2222', + '--noble-rpc', + '127.0.0.1:3333', + '--noble-api', + '127.0.0.1:4444', + '--noble-to-agoric-channel', + 'channel-101', + '--token-messenger-address', + '0xmessenger123', + '--token-contract-address', + '0xtoken123', + ]); + + const args = config.getInitArgs(); + t.is(args.shift().path, `${homeDir}config.json`); + t.deepEqual(args, [ + { + agoricApi: '127.0.0.1:0000', + agoricSeed: 'bazinga', + agoricRpc: '127.0.0.1:1111', + ethRpc: '127.0.0.1:2222', + ethSeed: 'bar', + nobleRpc: '127.0.0.1:3333', + nobleSeed: 'foo', + nobleApi: '127.0.0.1:4444', + nobleToAgoricChannel: 'channel-101', + tokenMessengerAddress: '0xmessenger123', + tokenContractAddress: '0xtoken123', + }, + ]); +}); + +test('calls config update with args', t => { + const homeDir = './test/.fast-usdc/'; + const config = mockConfig(); + const program = initProgram(config, mockTransfer()); + + program.parse([ + 'node', + CLI_PATH, + '--home', + homeDir, + 'config', + 'update', + '--noble-seed', + 'foo', + '--eth-seed', + 'bar', + '--agoric-seed', + 'bazinga', + '--agoric-api', + '127.0.0.1:0000', + '--agoric-rpc', + '127.0.0.1:1111', + '--eth-rpc', + '127.0.0.1:2222', + '--noble-rpc', + '127.0.0.1:3333', + '--noble-api', + '127.0.0.1:4444', + '--noble-to-agoric-channel', + 'channel-101', + '--token-messenger-address', + '0xmessenger123', + '--token-contract-address', + '0xtoken123', + ]); + + const args = config.getUpdateArgs(); + t.is(args.shift().path, `${homeDir}config.json`); + t.deepEqual(args, [ + { + agoricSeed: 'bazinga', + agoricApi: '127.0.0.1:0000', + agoricRpc: '127.0.0.1:1111', + ethRpc: '127.0.0.1:2222', + ethSeed: 'bar', + nobleRpc: '127.0.0.1:3333', + nobleSeed: 'foo', + nobleApi: '127.0.0.1:4444', + nobleToAgoricChannel: 'channel-101', + tokenMessengerAddress: '0xmessenger123', + tokenContractAddress: '0xtoken123', + }, + ]); +}); + +test('calls config show', t => { + const homeDir = './test/.fast-usdc/'; + const config = mockConfig(); + const program = initProgram(config, mockTransfer()); + + program.parse(['node', CLI_PATH, '--home', homeDir, 'config', 'show']); + + t.is(config.getShowArgs()[0].path, './test/.fast-usdc/config.json'); +}); + +test('calls transfer with args', t => { + const homeDir = './test/.fast-usdc/'; + const transfer = mockTransfer(); + const program = initProgram(mockConfig(), transfer); + + program.parse([ + 'node', + CLI_PATH, + '--home', + homeDir, + 'transfer', + '450000', + 'dydx123456', + ]); + + const args = transfer.getTransferArgs(); + t.is(args.shift().path, `${homeDir}config.json`); + t.deepEqual(args, ['450000', 'dydx123456']); +}); diff --git a/packages/fast-usdc/test/cli/config.test.ts b/packages/fast-usdc/test/cli/config.test.ts new file mode 100644 index 00000000000..a592ceca73e --- /dev/null +++ b/packages/fast-usdc/test/cli/config.test.ts @@ -0,0 +1,116 @@ +import test from 'ava'; +import * as config from '../../src/cli/config.js'; +import { mockOut, mockrl, mockFile } from '../../testing/mocks.js'; + +test('show reads the config file', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const val = JSON.stringify({ hello: 'world!' }, null, 2); + const file = mockFile(path, val); + const out = mockOut(); + + // @ts-expect-error mocking partial Console + await config.show(file, out); + + t.is(out.getErrOut(), ''); + t.is(out.getLogOut(), `Config found at ${path}:\n${val}\n`); +}); + +test('show shows error if no config file', async t => { + const path = 'missing-config/dir/.fast-usdc/config.json'; + const out = mockOut(); + const file = mockFile(path); + + // @ts-expect-error mocking partial Console + await t.throwsAsync(config.show(file, out)); + + t.is( + out.getErrOut(), + `No config found at ${path}. Use "init" to create one, or "--home" to specify config location.\n`, + ); + t.is(out.getLogOut(), ''); +}); + +test('init creates the config file', async t => { + const dir = 'config/dir/.fast-usdc'; + const path = `${dir}/config.json`; + const file = mockFile(path); + const out = mockOut(); + const options = { foo: 'bar' }; + + // @ts-expect-error mock partial Console + await config.init(file, options, out, mockrl()); + + t.is(out.getLogOut(), `Config initialized at ${path}\n`); + t.is(out.getErrOut(), ''); + t.is(await file.read(), JSON.stringify(options, null, 2)); +}); + +test('init overwrites if config exists and user says yes', async t => { + const dir = 'config/dir/.fast-usdc'; + const path = `${dir}/config.json`; + const oldVal = JSON.stringify({ hello: 'world!' }, null, 2); + const file = mockFile(path, oldVal); + const out = mockOut(); + // Answer yes to prompt + const rl = mockrl('y'); + const newVal = { hello: 'universe!' }; + + // @ts-expect-error mock partial Console + await config.init(file, newVal, out, rl); + + t.is(out.getErrOut(), ''); + t.is(out.getLogOut(), `Config initialized at ${path}\n`); + t.is(await file.read(), JSON.stringify(newVal, null, 2)); +}); + +test('init does not overwrite if config exists and user says no', async t => { + const dir = 'config/dir/.fast-usdc'; + const path = `${dir}/config.json`; + const oldVal = JSON.stringify({ hello: 'world!' }, null, 2); + const file = mockFile(path, oldVal); + const out = mockOut(); + // Answer no to prompt + const rl = mockrl('n'); + const newVal = { hello: 'universe!' }; + + // @ts-expect-error mock partial Console + await t.throwsAsync(config.init(file, newVal, out, rl)); + + t.is(out.getErrOut(), ''); + t.is(out.getLogOut(), ''); + t.is(await file.read(), oldVal); +}); + +test('update errors if config does not exist', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + // Path doesn't exist + const file = mockFile(path); + const out = mockOut(); + const newVal = { hello: 'universe!' }; + + // @ts-expect-error mock partial Console + await t.throwsAsync(config.update(file, newVal, out)); + + t.is( + out.getErrOut(), + `No config found at ${path}. Use "init" to create one, or "--home" to specify config location.\n`, + ); + t.is(out.getLogOut(), ''); + t.false(file.exists()); +}); + +test('update can update the config partially', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const oldVal = JSON.stringify({ hello: 'world!' }, null, 2); + const file = mockFile(path, oldVal); + const out = mockOut(); + const newVal = { hello: 'universe!', goodbye: 'world!' }; + const newValString = JSON.stringify(newVal, null, 2); + + // @ts-expect-error mock partial Console + await config.update(file, newVal, out); + + t.is(out.getErrOut(), ''); + t.is(out.getLogOut(), `Config updated at ${path}\n${newValString}\n`); + t.is(await file.read(), newValString); +}); diff --git a/packages/fast-usdc/test/cli/snapshots/cli.test.ts.md b/packages/fast-usdc/test/cli/snapshots/cli.test.ts.md new file mode 100644 index 00000000000..ed8f08e0f82 --- /dev/null +++ b/packages/fast-usdc/test/cli/snapshots/cli.test.ts.md @@ -0,0 +1,232 @@ +# Snapshot report for `test/cli/cli.test.ts` + +The actual snapshot is saved in `cli.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## shows help when run without arguments + +> Snapshot 1 + + `Usage: fast-usdc [options] [command]␊ + ␊ + CLI to interact with Fast USDC liquidity pool␊ + ␊ + Options:␊ + -V, --version output the version number␊ + --home Home directory to use for config (default:␊ + "~/.fast-usdc")␊ + -h, --help display help for command␊ + ␊ + Commands:␊ + config Manage config␊ + operator Oracle operator commands␊ + deposit [options] Offer assets to the liquidity pool␊ + withdraw [options] Withdraw assets from the liquidity pool␊ + transfer Transfer USDC from Ethereum/L2 to Cosmos via Fast␊ + USDC␊ + help [command] display help for command` + +## shows help for transfer command + +> Snapshot 1 + + `Usage: fast-usdc transfer [options] ␊ + ␊ + Transfer USDC from Ethereum/L2 to Cosmos via Fast USDC␊ + ␊ + Arguments:␊ + amount Amount to transfer denominated in uusdc␊ + dest Destination address in Cosmos␊ + ␊ + Options:␊ + -h, --help display help for command` + +## shows help for config command + +> Snapshot 1 + + `Usage: fast-usdc config [options] [command]␊ + ␊ + Manage config␊ + ␊ + Options:␊ + -h, --help display help for command␊ + ␊ + Commands:␊ + show Show current config␊ + init [options] Set initial config values␊ + update [options] Update config values␊ + help [command] display help for command` + +## shows help for config init command + +> Snapshot 1 + + `Usage: fast-usdc config init [options]␊ + ␊ + Set initial config values␊ + ␊ + Options:␊ + --noble-seed Seed phrase for Noble account. CAUTION:␊ + Stored unencrypted in file system␊ + --eth-seed Seed phrase for Ethereum account.␊ + CAUTION: Stored unencrypted in file␊ + system␊ + --agoric-seed Seed phrase for Agoric LP account.␊ + CAUTION: Stored unencrypted in file␊ + system␊ + --agoric-rpc [url] Agoric RPC endpoint (default:␊ + "http://127.0.0.1:26656")␊ + --agoric-api [url] Agoric RPC endpoint (default:␊ + "http://127.0.0.1:1317")␊ + --noble-rpc [url] Noble RPC endpoint (default:␊ + "http://127.0.0.1:26657")␊ + --noble-api [url] Noble API endpoint (default:␊ + "http://127.0.0.1:1318")␊ + --eth-rpc [url] Ethereum RPC Endpoint (default:␊ + "http://127.0.0.1:8545")␊ + --noble-to-agoric-channel [channel] Channel ID on Noble for Agoric (default:␊ + "channel-21")␊ + --token-messenger-address [address] Address of TokenMessenger contract␊ + (default:␊ + "0xbd3fa81b58ba92a82136038b25adec7066af3155")␊ + --token-contract-address [address] Address of USDC token contract (default:␊ + "0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48")␊ + -h, --help display help for command` + +## shows help for config update command + +> Snapshot 1 + + `Usage: fast-usdc config update [options]␊ + ␊ + Update config values␊ + ␊ + Options:␊ + --noble-seed [string] Seed phrase for Noble account. CAUTION:␊ + Stored unencrypted in file system␊ + --eth-seed [string] Seed phrase for Ethereum account.␊ + CAUTION: Stored unencrypted in file␊ + system␊ + --agoric-seed Seed phrase for Agoric LP account.␊ + CAUTION: Stored unencrypted in file␊ + system␊ + --agoric-rpc [url] Agoric RPC endpoint␊ + --agoric-api [url] Agoric API endpoint␊ + --noble-rpc [url] Noble RPC endpoint␊ + --noble-api [url] Noble API endpoint␊ + --eth-rpc [url] Ethereum RPC Endpoint␊ + --noble-to-agoric-channel [channel] Channel ID on Noble for Agoric␊ + --token-messenger-address [address] Address of TokenMessenger contract␊ + --token-contract-address [address] Address of USDC token contract␊ + -h, --help display help for command` + +## shows help for config show command + +> Snapshot 1 + + `Usage: fast-usdc config show [options]␊ + ␊ + Show current config␊ + ␊ + Options:␊ + -h, --help display help for command` + +## shows help for deposit command + +> Snapshot 1 + + `Usage: fast-usdc deposit [options] ␊ + ␊ + Offer assets to the liquidity pool␊ + ␊ + Arguments:␊ + give USDC to give␊ + ␊ + Options:␊ + --id [offer-id] Offer ID␊ + --fee [fee] Cosmos fee␊ + -h, --help display help for command` + +## shows help for withdraw command + +> Snapshot 1 + + `Usage: fast-usdc withdraw [options] ␊ + ␊ + Withdraw assets from the liquidity pool␊ + ␊ + Arguments:␊ + want USDC to withdraw␊ + ␊ + Options:␊ + --id [offer-id] Offer ID␊ + --fee [fee] Cosmos fee␊ + -h, --help display help for command` + +## shows error when deposit command is run without options + +> Snapshot 1 + + 'error: missing required argument \'give\'' + +## shows error when deposit command is run with invalid amount + +> Snapshot 1 + + 'error: command-argument value \'not-a-number\' is invalid for argument \'give\'. Not a decimal number.' + +## shows error when deposit command is run with invalid fee + +> Snapshot 1 + + 'error: option \'--fee [fee]\' argument \'not-a-number\' is invalid. Fee must be a number.' + +## shows error when withdraw command is run without options + +> Snapshot 1 + + 'error: missing required argument \'want\'' + +## shows error when withdraw command is run with invalid amount + +> Snapshot 1 + + 'error: command-argument value \'not-a-number\' is invalid for argument \'want\'. Not a decimal number.' + +## shows error when withdraw command is run with invalid fee + +> Snapshot 1 + + 'error: option \'--fee [fee]\' argument \'not-a-number\' is invalid. Fee must be a number.' + +## shows error when config init command is run without options + +> Snapshot 1 + + 'error: required option \'--noble-seed \' not specified' + +## shows error when transfer command is run without options + +> Snapshot 1 + + 'error: missing required argument \'amount\'' + +## shows error when config init command is run without eth seed + +> Snapshot 1 + + 'error: required option \'--eth-seed \' not specified' + +## shows error when config init command is run without agoric seed + +> Snapshot 1 + + 'error: required option \'--agoric-seed \' not specified' + +## shows error when config init command is run without noble seed + +> Snapshot 1 + + 'error: required option \'--noble-seed \' not specified' diff --git a/packages/fast-usdc/test/cli/snapshots/cli.test.ts.snap b/packages/fast-usdc/test/cli/snapshots/cli.test.ts.snap new file mode 100644 index 00000000000..2150beaaf10 Binary files /dev/null and b/packages/fast-usdc/test/cli/snapshots/cli.test.ts.snap differ diff --git a/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.md b/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.md new file mode 100644 index 00000000000..d88e5f3f969 --- /dev/null +++ b/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.md @@ -0,0 +1,33 @@ +# Snapshot report for `test/cli/transfer.test.ts` + +The actual snapshot is saved in `transfer.test.ts.snap`. + +Generated by [AVA](https://avajs.dev). + +## Transfer registers the noble forwarding account if it does not exist + +> Snapshot 1 + + [ + 'noble09876', + [ + { + typeUrl: '/noble.forwarding.v1.MsgRegisterAccount', + value: { + channel: 'channel-test-7', + recipient: 'agoric123456?EUD=dydx1234', + signer: 'noble09876', + }, + }, + ], + { + amount: [ + { + amount: '20000', + denom: 'uusdc', + }, + ], + gas: '200000', + }, + 'Register Account Transaction', + ] diff --git a/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.snap b/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.snap new file mode 100644 index 00000000000..4bce5856ec4 Binary files /dev/null and b/packages/fast-usdc/test/cli/snapshots/transfer.test.ts.snap differ diff --git a/packages/fast-usdc/test/cli/transfer.test.ts b/packages/fast-usdc/test/cli/transfer.test.ts new file mode 100644 index 00000000000..d820492c2ed --- /dev/null +++ b/packages/fast-usdc/test/cli/transfer.test.ts @@ -0,0 +1,155 @@ +import test from 'ava'; +import transfer from '../../src/cli/transfer.js'; +import { + mockOut, + mockFile, + makeVstorageMock, + makeFetchMock, + makeMockSigner, +} from '../../testing/mocks.js'; + +test('Errors if config missing', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const out = mockOut(); + const file = mockFile(path); + + // @ts-expect-error mocking partial Console + await t.throwsAsync(transfer.transfer(file, '1500000', 'noble1234', out)); + + t.is( + out.getErrOut(), + `No config found at ${path}. Use "config init" to create one, or "--home" to specify config location.\n`, + ); + t.is(out.getLogOut(), ''); +}); + +const makeMockEthProvider = () => { + const txnArgs: any[] = []; + const provider = { + getTransactionCount: () => {}, + estimateGas: () => {}, + getNetwork: () => ({ chainId: 123 }), + getFeeData: () => ({ gasPrice: 1 }), + broadcastTransaction: (...args) => { + txnArgs.push(args); + return { + blockNumber: 9000, + }; + }, + getTransactionReceipt: () => ({ + blockNumber: 9000, + hash: 'SUCCESSHASH', + confirmations: () => [9000], + logs: [], + }), + }; + + return { provider, getTxnArgs: () => harden([...txnArgs]) }; +}; + +test('Transfer registers the noble forwarding account if it does not exist', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const nobleApi = 'http://api.noble.test'; + const nobleToAgoricChannel = 'channel-test-7'; + const config = { + agoricRpc: 'http://rpc.agoric.test', + nobleApi, + nobleToAgoricChannel, + nobleSeed: 'test noble seed', + ethRpc: 'http://rpc.eth.test', + ethSeed: 'a4b7f431465df5dc1458cd8a9be10c42da8e3729e3ce53f18814f48ae2a98a08', + tokenMessengerAddress: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5', + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + }; + const out = mockOut(); + const file = mockFile(path, JSON.stringify(config)); + const agoricSettlementAccount = 'agoric123456'; + const settlementAccountVstoragePath = 'published.fastUSDC.settlementAccount'; + const vstorageMock = makeVstorageMock({ + [settlementAccountVstoragePath]: agoricSettlementAccount, + }); + const amount = '150'; + const destination = 'dydx1234'; + const nobleFwdAccountQuery = `${nobleApi}/noble/forwarding/v1/address/${nobleToAgoricChannel}/${agoricSettlementAccount}${encodeURIComponent('?EUD=')}${destination}/`; + const fetchMock = makeFetchMock({ + [nobleFwdAccountQuery]: { + address: 'noble14lwerrcfzkzrv626w49pkzgna4dtga8c5x479h', + exists: false, + }, + }); + const nobleSignerAddress = 'noble09876'; + const signerMock = makeMockSigner(); + const mockEthProvider = makeMockEthProvider(); + + await transfer.transfer( + file, + amount, + destination, + // @ts-expect-error mocking console + out, + fetchMock.fetch, + vstorageMock.vstorage, + { signer: signerMock.signer, address: nobleSignerAddress }, + mockEthProvider.provider, + ); + + t.is(vstorageMock.getQueryCounts()[settlementAccountVstoragePath], 1); + t.is(fetchMock.getQueryCounts()[nobleFwdAccountQuery], 1); + t.snapshot(signerMock.getSigned()); +}); + +test('Transfer signs and broadcasts the depositForBurn message on Ethereum', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const nobleApi = 'http://api.noble.test'; + const nobleToAgoricChannel = 'channel-test-7'; + const config = { + agoricRpc: 'http://rpc.agoric.test', + nobleApi, + nobleToAgoricChannel, + nobleSeed: 'test noble seed', + ethRpc: 'http://rpc.eth.test', + ethSeed: 'a4b7f431465df5dc1458cd8a9be10c42da8e3729e3ce53f18814f48ae2a98a08', + tokenMessengerAddress: '0x9f3B8679c73C2Fef8b59B4f3444d4e156fb70AA5', + tokenAddress: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238', + }; + const out = mockOut(); + const file = mockFile(path, JSON.stringify(config)); + const agoricSettlementAccount = 'agoric123456'; + const settlementAccountVstoragePath = 'published.fastUSDC.settlementAccount'; + const vstorageMock = makeVstorageMock({ + [settlementAccountVstoragePath]: agoricSettlementAccount, + }); + const amount = '150'; + const destination = 'dydx1234'; + const nobleFwdAccountQuery = `${nobleApi}/noble/forwarding/v1/address/${nobleToAgoricChannel}/${agoricSettlementAccount}${encodeURIComponent('?EUD=')}${destination}/`; + const fetchMock = makeFetchMock({ + [nobleFwdAccountQuery]: { + address: 'noble14lwerrcfzkzrv626w49pkzgna4dtga8c5x479h', + exists: true, + }, + }); + const nobleSignerAddress = 'noble09876'; + const signerMock = makeMockSigner(); + const mockEthProvider = makeMockEthProvider(); + + await transfer.transfer( + file, + amount, + destination, + // @ts-expect-error mocking console + out, + fetchMock.fetch, + vstorageMock.vstorage, + { signer: signerMock.signer, address: nobleSignerAddress }, + mockEthProvider.provider, + ); + + t.is(signerMock.getSigned(), undefined); + t.deepEqual(mockEthProvider.getTxnArgs()[0], [ + '0xf8a4800180941c7d4b196cb0c7b01d743fbc6116a902379c723880b844095ea7b30000000000000000000000009f3b8679c73c2fef8b59b4f3444d4e156fb70aa50000000000000000000000000000000000000000000000000000000008f0d18082011aa0b2d87eeb1cb36243f95662739e2a7bd4bddc2b8afe189ac4848ec71cc314335ba068136695c644f69474e2e30ea7059f9b380fbb1a09beb3580f73d3ea349912ab', + ]); + // Can be decoded using a tool like https://rawtxdecode.in/ and an ABI https://github.com/circlefin/evm-cctp-contracts/blob/e4e6e2fccd6820002eb4a5b4fabdc8ea11031ad9/docs/abis/cctp/TokenMessenger.json + t.deepEqual(mockEthProvider.getTxnArgs()[1], [ + '0xf8e4800180949f3b8679c73c2fef8b59b4f3444d4e156fb70aa580b8846fd3504e0000000000000000000000000000000000000000000000000000000008f0d1800000000000000000000000000000000000000000000000000000000000000004000000000000000000000000afdd918f09158436695a754a1b0913ed5ab474f80000000000000000000000001c7d4b196cb0c7b01d743fbc6116a902379c723882011aa09fc97790b2ba23fbb974554dbcee00df1a1f50e9fec4fdf370454773604aa477a038a1d86afc2a7afdc78088878a912f1a7c678b10c3120d308f8260a277b135a3', + ]); +}); diff --git a/packages/fast-usdc/test/config-marshal.test.js b/packages/fast-usdc/test/config-marshal.test.js new file mode 100644 index 00000000000..dbb7bfaf40f --- /dev/null +++ b/packages/fast-usdc/test/config-marshal.test.js @@ -0,0 +1,70 @@ +import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import { Far } from '@endo/pass-style'; +import { mustMatch } from '@endo/patterns'; +import { AmountMath } from '@agoric/ertp'; +import { makeRatio } from '@agoric/zoe/src/contractSupport/ratio.js'; +import { FeeConfigShape } from '../src/type-guards.js'; +import { + fromLegible, + makeMarshalFromRecord, + toLegible, +} from '../src/utils/config-marshal.js'; + +/** @import {SmallCapsStructureOf} from '../src/utils/config-marshal.js' */ + +const testMatches = (t, specimen, pattern) => { + t.notThrows(() => mustMatch(specimen, pattern)); +}; + +test('cross-vat configuration of Fast USDC FeeConfig', t => { + const context = /** @type {const} */ ({ + /** @type {Brand<'nat'>} */ + USDC: Far('USDC Brand'), + }); + + const { USDC } = context; + const { make } = AmountMath; + const config = harden({ + flat: make(USDC, 100n), + variableRate: makeRatio(1n, USDC), + maxVariable: make(USDC, 100_000n), + contractRate: makeRatio(20n, USDC), + }); + testMatches(t, config, FeeConfigShape); + + const m = makeMarshalFromRecord(context); + /** @type {any} */ // XXX struggling with recursive type + const legible = toLegible(m.toCapData(config)); + + t.deepEqual(legible, { + structure: { + contractRate: { + denominator: { + brand: '$0.Alleged: USDC Brand', + value: '+100', + }, + numerator: { + brand: '$0', + value: '+20', + }, + }, + flat: { brand: '$0', value: '+100' }, + maxVariable: { brand: '$0', value: '+100000' }, + variableRate: { + denominator: { + brand: '$0', + value: '+100', + }, + numerator: { + brand: '$0', + value: '+1', + }, + }, + }, + slots: ['USDC'], + }); + t.deepEqual(legible.slots, Object.keys(context)); + + const actual = m.fromCapData(fromLegible(legible)); + t.deepEqual(actual, config); +}); diff --git a/packages/fast-usdc/test/exos/advancer.test.ts b/packages/fast-usdc/test/exos/advancer.test.ts index 4597253b657..14f1fe4b3ea 100644 --- a/packages/fast-usdc/test/exos/advancer.test.ts +++ b/packages/fast-usdc/test/exos/advancer.test.ts @@ -1,38 +1,40 @@ import type { TestFn } from 'ava'; import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; - -import { denomHash, type Denom } from '@agoric/orchestration'; -import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; -import type { Zone } from '@agoric/zone'; -import type { VowTools } from '@agoric/vow'; +import { denomHash } from '@agoric/orchestration'; +import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; +import { Far } from '@endo/pass-style'; +import type { NatAmount } from '@agoric/ertp'; +import { type ZoeTools } from '@agoric/orchestration/src/utils/zoe-tools.js'; +import { q } from '@endo/errors'; +import { PendingTxStatus } from '../../src/constants.js'; import { prepareAdvancer } from '../../src/exos/advancer.js'; +import type { SettlerKit } from '../../src/exos/settler.js'; import { prepareStatusManager } from '../../src/exos/status-manager.js'; -import { prepareTransactionFeedKit } from '../../src/exos/transaction-feed.js'; - +import { makeFeeTools } from '../../src/utils/fees.js'; +import { addressTools } from '../../src/utils/address.js'; import { commonSetup } from '../supports.js'; import { MockCctpTxEvidences } from '../fixtures.js'; import { + makeTestFeeConfig, makeTestLogger, prepareMockOrchAccounts, - type TestLogger, } from '../mocks.js'; -import { PendingTxStatus } from '../../src/constants.js'; -const test = anyTest as TestFn<{ - localDenom: Denom; - makeAdvancer: ReturnType; - rootZone: Zone; - statusManager: ReturnType; - vowTools: VowTools; - inspectLogs: TestLogger['inspectLogs']; -}>; +const LOCAL_DENOM = `ibc/${denomHash({ + denom: 'uusdc', + channelId: + fetchedChainInfo.agoric.connections['noble-1'].transferChannel.channelId, +})}`; -test.beforeEach(async t => { - const common = await commonSetup(t); +type CommonSetup = Awaited>; + +const createTestExtensions = (t, common: CommonSetup) => { const { bootstrap: { rootZone, vowTools }, facadeServices: { chainHub }, + brands: { usdc }, + commonPrivateArgs: { storageNode }, } = common; const { log, inspectLogs } = makeTestLogger(t.log); @@ -42,141 +44,338 @@ test.beforeEach(async t => { const statusManager = prepareStatusManager( rootZone.subZone('status-manager'), + async () => storageNode.makeChildNode('status'), ); + + const mockAccounts = prepareMockOrchAccounts(rootZone.subZone('accounts'), { + vowTools, + log: t.log, + usdc, + }); + + const mockZCF = Far('MockZCF', { + makeEmptySeatKit: () => ({ zcfSeat: Far('MockZCFSeat', {}) }), + }); + + const localTransferVK = vowTools.makeVowKit(); + const resolveLocalTransferV = () => { + // pretend funds move from tmpSeat to poolAccount + localTransferVK.resolver.resolve(); + }; + const mockZoeTools = Far('MockZoeTools', { + localTransfer(...args: Parameters) { + console.log('ZoeTools.localTransfer called with', args); + return localTransferVK.vow; + }, + }); + + const feeConfig = makeTestFeeConfig(usdc); const makeAdvancer = prepareAdvancer(rootZone.subZone('advancer'), { chainHub, + feeConfig, + localTransfer: mockZoeTools.localTransfer, + log, statusManager, + usdc: harden({ + brand: usdc.brand, + denom: LOCAL_DENOM, + }), vowTools, - log, + // @ts-expect-error mocked zcf + zcf: mockZCF, + }); + + type NotifyArgs = Parameters; + const notifyAdvancingResultCalls: NotifyArgs[] = []; + const mockNotifyF = Far('Settler Notify Facet', { + notifyAdvancingResult: (...args: NotifyArgs) => { + console.log('Settler.notifyAdvancingResult called with', args); + notifyAdvancingResultCalls.push(args); + }, + }); + + const mockBorrowerF = Far('LiquidityPool Borrow Facet', { + borrow: (seat: ZCFSeat, amounts: { USDC: NatAmount }) => { + console.log('LP.borrow called with', amounts); + }, + }); + + const mockBorrowerErrorF = Far('LiquidityPool Borrow Facet', { + borrow: (seat: ZCFSeat, amounts: { USDC: NatAmount }) => { + console.log('LP.borrow called with', amounts); + throw new Error( + `Cannot borrow. Requested ${q(amounts.USDC)} must be less than pool balance ${q(usdc.make(1n))}.`, + ); + }, + }); + + const advancer = makeAdvancer({ + borrowerFacet: mockBorrowerF, + notifyFacet: mockNotifyF, + poolAccount: mockAccounts.mockPoolAccount.account, }); - const localDenom = `ibc/${denomHash({ - denom: 'uusdc', - channelId: - fetchedChainInfo.agoric.connections['noble-1'].transferChannel.channelId, - })}`; + return { + constants: { + localDenom: LOCAL_DENOM, + feeConfig, + }, + helpers: { + inspectLogs, + inspectNotifyCalls: () => harden(notifyAdvancingResultCalls), + }, + mocks: { + ...mockAccounts, + mockBorrowerErrorF, + mockNotifyF, + resolveLocalTransferV, + }, + services: { + advancer, + makeAdvancer, + statusManager, + feeTools: makeFeeTools(feeConfig), + }, + } as const; +}; + +type TestContext = CommonSetup & { + extensions: ReturnType; +}; + +const test = anyTest as TestFn; + +test.beforeEach(async t => { + const common = await commonSetup(t); t.context = { - localDenom, - makeAdvancer, - rootZone, - statusManager, - vowTools, - inspectLogs, + ...common, + extensions: createTestExtensions(t, common), }; }); -test('advancer updated status to ADVANCED', async t => { +test('updates status to ADVANCING in happy path', async t => { const { - inspectLogs, - localDenom, - makeAdvancer, - statusManager, - rootZone, - vowTools, + extensions: { + services: { advancer, feeTools, statusManager }, + helpers: { inspectLogs, inspectNotifyCalls }, + mocks: { mockPoolAccount, resolveLocalTransferV }, + }, + brands: { usdc }, } = t.context; - const { poolAccount, poolAccountTransferVResolver } = prepareMockOrchAccounts( - rootZone.subZone('poolAcct'), - { vowTools, log: t.log }, + const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + void advancer.handleTransactionEvent(mockEvidence); + + // pretend borrow succeeded and funds were depositing to the LCA + resolveLocalTransferV(); + // pretend the IBC Transfer settled + mockPoolAccount.transferVResolver.resolve(); + // wait for handleTransactionEvent to do work + await eventLoopIteration(); + + const entries = statusManager.lookupPending( + mockEvidence.tx.forwardingAddress, + mockEvidence.tx.amount, ); + t.deepEqual( + entries, + [{ ...mockEvidence, status: PendingTxStatus.Advancing }], + 'ADVANCED status in happy path', + ); + + t.deepEqual(inspectLogs(0), [ + 'Advance transfer fulfilled', + '{"amount":{"brand":"[Alleged: USDC brand]","value":"[146999999n]"},"destination":{"chainId":"osmosis-1","encoding":"bech32","value":"osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men"},"result":"[undefined]"}', + ]); + + // We expect to see an `Advanced` update, but that is now Settler's job. + // but we can ensure it's called + t.deepEqual(inspectNotifyCalls(), [ + [ + mockEvidence.txHash, + mockEvidence.tx.forwardingAddress, + feeTools.calculateAdvance(usdc.make(mockEvidence.tx.amount)).value, + addressTools.getQueryParams(mockEvidence.aux.recipientAddress).EUD, + true, // indicates transfer succeeded + ], + ]); +}); + +test('updates status to OBSERVED on insufficient pool funds', async t => { + const { + extensions: { + services: { makeAdvancer, statusManager }, + helpers: { inspectLogs }, + mocks: { mockPoolAccount, mockBorrowerErrorF, mockNotifyF }, + }, + } = t.context; + + // make a new advancer that intentionally throws const advancer = makeAdvancer({ - poolAccount, - localDenom, + borrowerFacet: mockBorrowerErrorF, + notifyFacet: mockNotifyF, + poolAccount: mockPoolAccount.account, }); - t.truthy(advancer, 'advancer instantiates'); - - // simulate input from EventFeed - const mockCttpTxEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); - advancer.handleTransactionEvent(mockCttpTxEvidence); - t.log('Simulate advance `.transfer()` vow fulfillment'); - poolAccountTransferVResolver.resolve(); - await eventLoopIteration(); // wait for StatusManager to receive update + + const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + void advancer.handleTransactionEvent(mockEvidence); + await eventLoopIteration(); + const entries = statusManager.lookupPending( - mockCttpTxEvidence.tx.forwardingAddress, - mockCttpTxEvidence.tx.amount, + mockEvidence.tx.forwardingAddress, + mockEvidence.tx.amount, ); + t.deepEqual( entries, - [{ ...mockCttpTxEvidence, status: PendingTxStatus.Advanced }], - 'tx status updated to ADVANCED', + [{ ...mockEvidence, status: PendingTxStatus.Observed }], + 'OBSERVED status on insufficient pool funds', + ); + + t.deepEqual(inspectLogs(0), [ + 'Advancer error:', + '"[Error: Cannot borrow. Requested {\\"brand\\":\\"[Alleged: USDC brand]\\",\\"value\\":\\"[294999999n]\\"} must be less than pool balance {\\"brand\\":\\"[Alleged: USDC brand]\\",\\"value\\":\\"[1n]\\"}.]"', + ]); +}); + +test('updates status to OBSERVED if makeChainAddress fails', async t => { + const { + extensions: { + services: { advancer, statusManager }, + helpers: { inspectLogs }, + }, + } = t.context; + + const mockEvidence = MockCctpTxEvidences.AGORIC_UNKNOWN_EUD(); + await advancer.handleTransactionEvent(mockEvidence); + + const entries = statusManager.lookupPending( + mockEvidence.tx.forwardingAddress, + mockEvidence.tx.amount, ); t.deepEqual( - inspectLogs(0), - [ - 'Advance transfer fulfilled', - '{"amount":"[150000000n]","destination":{"chainId":"osmosis-1","encoding":"bech32","value":"osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men"},"result":"[undefined]"}', - ], - 'contract logs advance', + entries, + [{ ...mockEvidence, status: PendingTxStatus.Observed }], + 'OBSERVED status on makeChainAddress failure', ); + + t.deepEqual(inspectLogs(0), [ + 'Advancer error:', + '"[Error: Chain info not found for bech32Prefix \\"random\\"]"', + ]); }); -test('advancer does not update status on failed transfer', async t => { +test('calls notifyAdvancingResult (AdvancedFailed) on failed transfer', async t => { const { - inspectLogs, - localDenom, - makeAdvancer, - statusManager, - rootZone, - vowTools, + extensions: { + services: { advancer, feeTools, statusManager }, + helpers: { inspectLogs, inspectNotifyCalls }, + mocks: { mockPoolAccount, resolveLocalTransferV }, + }, + brands: { usdc }, } = t.context; - const { poolAccount, poolAccountTransferVResolver } = prepareMockOrchAccounts( - rootZone.subZone('poolAcct2'), - { vowTools, log: t.log }, - ); + const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + void advancer.handleTransactionEvent(mockEvidence); - const advancer = makeAdvancer({ poolAccount, localDenom }); - t.truthy(advancer, 'advancer instantiates'); + // pretend borrow and deposit to LCA succeed + resolveLocalTransferV(); + await eventLoopIteration(); - // simulate input from EventFeed - const mockCttpTxEvidence = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); - advancer.handleTransactionEvent(mockCttpTxEvidence); - t.log('Simulate advance `.transfer()` vow rejection'); - poolAccountTransferVResolver.reject(new Error('simulated error')); - await eventLoopIteration(); // wait for StatusManager to receive update const entries = statusManager.lookupPending( - mockCttpTxEvidence.tx.forwardingAddress, - mockCttpTxEvidence.tx.amount, + mockEvidence.tx.forwardingAddress, + mockEvidence.tx.amount, ); + t.deepEqual( entries, - [{ ...mockCttpTxEvidence, status: PendingTxStatus.Advanced }], - 'tx status is still Advanced even though advance failed', + [{ ...mockEvidence, status: PendingTxStatus.Advancing }], + 'tx is Advancing', ); + + mockPoolAccount.transferVResolver.reject(new Error('simulated error')); + await eventLoopIteration(); + t.deepEqual(inspectLogs(0), [ 'Advance transfer rejected', '"[Error: simulated error]"', ]); -}); -test('advancer updated status to OBSERVED if pre-condition checks fail', async t => { - const { localDenom, makeAdvancer, statusManager, rootZone, vowTools } = - t.context; + // We expect to see an `AdvancedFailed` update, but that is now Settler's job. + // but we can ensure it's called + t.deepEqual(inspectNotifyCalls(), [ + [ + mockEvidence.txHash, + mockEvidence.tx.forwardingAddress, + feeTools.calculateAdvance(usdc.make(mockEvidence.tx.amount)).value, + addressTools.getQueryParams(mockEvidence.aux.recipientAddress).EUD, + false, // this indicates transfer succeeded + ], + ]); +}); - const { poolAccount } = prepareMockOrchAccounts( - rootZone.subZone('poolAcct2'), - { vowTools, log: t.log }, - ); +test('updates status to OBSERVED if pre-condition checks fail', async t => { + const { + extensions: { + services: { advancer, statusManager }, + helpers: { inspectLogs }, + }, + } = t.context; - const advancer = makeAdvancer({ poolAccount, localDenom }); - t.truthy(advancer, 'advancer instantiates'); + const mockEvidence = MockCctpTxEvidences.AGORIC_NO_PARAMS(); - // simulate input from EventFeed - const mockCttpTxEvidence = MockCctpTxEvidences.AGORIC_NO_PARAMS(); - t.throws(() => advancer.handleTransactionEvent(mockCttpTxEvidence), { - message: - 'recipientAddress does not contain EUD param: "agoric16kv2g7snfc4q24vg3pjdlnnqgngtjpwtetd2h689nz09lcklvh5s8u37ek"', - }); + await advancer.handleTransactionEvent(mockEvidence); const entries = statusManager.lookupPending( - mockCttpTxEvidence.tx.forwardingAddress, - mockCttpTxEvidence.tx.amount, + mockEvidence.tx.forwardingAddress, + mockEvidence.tx.amount, ); + t.deepEqual( entries, - [{ ...mockCttpTxEvidence, status: PendingTxStatus.Observed }], - 'tx status is still OBSERVED', + [{ ...mockEvidence, status: PendingTxStatus.Observed }], + 'tx is recorded as OBSERVED', ); + + t.deepEqual(inspectLogs(0), [ + 'Advancer error:', + '"[Error: Unable to parse query params: \\"agoric16kv2g7snfc4q24vg3pjdlnnqgngtjpwtetd2h689nz09lcklvh5s8u37ek\\"]"', + ]); }); + +test('will not advance same txHash:chainId evidence twice', async t => { + const { + extensions: { + services: { advancer }, + helpers: { inspectLogs }, + mocks: { mockPoolAccount, resolveLocalTransferV }, + }, + } = t.context; + + const mockEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + + // First attempt + void advancer.handleTransactionEvent(mockEvidence); + resolveLocalTransferV(); + mockPoolAccount.transferVResolver.resolve(); + await eventLoopIteration(); + + t.deepEqual(inspectLogs(0), [ + 'Advance transfer fulfilled', + '{"amount":{"brand":"[Alleged: USDC brand]","value":"[146999999n]"},"destination":{"chainId":"osmosis-1","encoding":"bech32","value":"osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men"},"result":"[undefined]"}', + ]); + + // Second attempt + void advancer.handleTransactionEvent(mockEvidence); + await eventLoopIteration(); + t.deepEqual(inspectLogs(1), [ + 'txHash already seen:', + '0xc81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761702', + ]); +}); + +test.todo( + '#10510 zoeTools.localTransfer fails to deposit borrowed USDC to LOA', +); diff --git a/packages/fast-usdc/test/exos/settler.test.ts b/packages/fast-usdc/test/exos/settler.test.ts index e8ff695f0b1..6ca8491db2f 100644 --- a/packages/fast-usdc/test/exos/settler.test.ts +++ b/packages/fast-usdc/test/exos/settler.test.ts @@ -1,32 +1,84 @@ -import type { TestFn } from 'ava'; import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import type { TestFn } from 'ava'; import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; -import type { IBCChannelID } from '@agoric/vats'; -import type { Denom } from '@agoric/orchestration'; +import type { Zone } from '@agoric/zone'; +import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { PendingTxStatus } from '../../src/constants.js'; -import { prepareStatusManager } from '../../src/exos/status-manager.js'; import { prepareSettler } from '../../src/exos/settler.js'; - -import { provideDurableZone } from '../supports.js'; +import { prepareStatusManager } from '../../src/exos/status-manager.js'; +import { commonSetup } from '../supports.js'; import { MockCctpTxEvidences, MockVTransferEvents } from '../fixtures.js'; import type { CctpTxEvidence } from '../../src/types.js'; +import { makeTestLogger, prepareMockOrchAccounts } from '../mocks.js'; +import { makeFeeTools } from '../../src/utils/fees.js'; + +const mockZcf = (zone: Zone) => { + const callLog = [] as any[]; + + const makeSeatKit = zone.exoClassKit('MockSeatKit', undefined, () => ({}), { + zcfSeat: { + getCurrentAllocation() { + return {}; + }, + }, + userSeat: {}, + }); + + const zcf = zone.exo('MockZCF', undefined, { + atomicRearrange(parts) { + callLog.push({ method: 'atomicRearrange', parts }); + }, + makeEmptySeatKit() { + const kit = makeSeatKit() as unknown as ZcfSeatKit; + return kit; + }, + }); + return { zcf, callLog }; +}; -const test = anyTest as TestFn<{ - makeSettler: ReturnType; - statusManager: ReturnType; - defaultSettlerParams: { - sourceChannel: IBCChannelID; - remoteDenom: Denom; +const makeTestContext = async t => { + const common = await commonSetup(t); + const { rootZone: zone } = common.bootstrap; + const { log, inspectLogs } = makeTestLogger(t.log); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + async () => common.commonPrivateArgs.storageNode.makeChildNode('status'), + { log }, + ); + const { zcf, callLog } = mockZcf(zone.subZone('Mock ZCF')); + + const { rootZone, vowTools } = common.bootstrap; + const { usdc } = common.brands; + const mockAccounts = prepareMockOrchAccounts(rootZone.subZone('accounts'), { + vowTools, + log: t.log, + usdc, + }); + + const mockWithdrawToSeat = (account, seat, amounts) => { + callLog.push( + harden({ + function: 'withdrawToSeat', + account, + allocations: seat.getCurrentAllocation(), + amounts, + }), + ); + return vowTools.asVow(() => {}); }; - simulateAdvance: (evidence?: CctpTxEvidence) => CctpTxEvidence; -}>; -test.before(t => { - const zone = provideDurableZone('settler-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const { chainHub } = common.facadeServices; + chainHub.registerChain('dydx', fetchedChainInfo.dydx); + chainHub.registerChain('osmosis', fetchedChainInfo.osmosis); const makeSettler = prepareSettler(zone.subZone('settler'), { statusManager, + USDC: usdc.brand, + zcf, + withdrawToSeat: mockWithdrawToSeat, + feeConfig: common.commonPrivateArgs.feeConfig, + vowTools: common.bootstrap.vowTools, + chainHub, }); const defaultSettlerParams = harden({ @@ -36,50 +88,199 @@ test.before(t => { remoteDenom: 'uusdc', }); - const simulateAdvance = (evidence: CctpTxEvidence) => { - const cctpTxEvidence: CctpTxEvidence = { - ...MockCctpTxEvidences.AGORIC_PLUS_OSMO(), - ...evidence, - }; - t.log('Mock CCTP Evidence:', cctpTxEvidence); - t.log('Pretend we initiated advance, mark as `ADVANCED`'); - statusManager.advance(cctpTxEvidence); + const simulate = harden({ + advance: (evidence?: CctpTxEvidence) => { + const cctpTxEvidence: CctpTxEvidence = { + ...MockCctpTxEvidences.AGORIC_PLUS_OSMO(), + ...evidence, + }; + t.log('Mock CCTP Evidence:', cctpTxEvidence); + t.log('Pretend we initiated advance, mark as `ADVANCED`'); + statusManager.advance(cctpTxEvidence); + const { forwardingAddress, amount } = cctpTxEvidence.tx; + statusManager.advanceOutcome(forwardingAddress, BigInt(amount), true); - return cctpTxEvidence; - }; + return cctpTxEvidence; + }, + + observe: (evidence?: CctpTxEvidence) => { + const cctpTxEvidence: CctpTxEvidence = { + ...MockCctpTxEvidences.AGORIC_PLUS_OSMO(), + ...evidence, + }; + t.log('Mock CCTP Evidence:', cctpTxEvidence); + t.log('Pretend we `OBSERVED`'); + statusManager.observe(cctpTxEvidence); - t.context = { + return cctpTxEvidence; + }, + }); + + const repayer = zone.exo('Repayer Mock', undefined, { + repay(fromSeat: ZCFSeat, amounts: AmountKeywordRecord) { + callLog.push(harden({ method: 'repay', fromSeat, amounts })); + }, + }); + + return { + common, makeSettler, statusManager, defaultSettlerParams, - simulateAdvance, + simulate, + repayer, + peekCalls: () => harden([...callLog]), + inspectLogs, + accounts: mockAccounts, + storage: common.bootstrap.storage, }; +}; + +const test = anyTest as TestFn>>; + +test.beforeEach(async t => (t.context = await makeTestContext(t))); + +test('happy path: disburse to LPs; StatusManager removes tx', async t => { + const { + common, + makeSettler, + statusManager, + defaultSettlerParams, + repayer, + simulate, + accounts, + peekCalls, + } = t.context; + const { usdc } = common.brands; + const { feeConfig } = common.commonPrivateArgs; + + const settler = makeSettler({ + repayer, + settlementAccount: accounts.settlement.account, + ...defaultSettlerParams, + }); + + const cctpTxEvidence = simulate.advance(); + t.deepEqual( + statusManager.lookupPending( + cctpTxEvidence.tx.forwardingAddress, + cctpTxEvidence.tx.amount, + ), + [{ ...cctpTxEvidence, status: PendingTxStatus.Advanced }], + 'statusManager shows this tx advanced', + ); + + t.log('Simulate incoming IBC settlement'); + void settler.tap.receiveUpcall(MockVTransferEvents.AGORIC_PLUS_OSMO()); + await eventLoopIteration(); + + t.log('Funds were disbursed to LP.'); + const calls = peekCalls(); + t.is(calls.length, 3); + const [withdraw, rearrange, repay] = calls; + + t.deepEqual( + withdraw, + { + function: 'withdrawToSeat', + account: accounts.settlement.account, + allocations: {}, + amounts: { In: usdc.units(150) }, + }, + '1. settler called withdrawToSeat', + ); + + // see also AGORIC_PLUS_OSMO in fees.test.ts + const In = usdc.units(150); + const expectedSplit = makeFeeTools(feeConfig).calculateSplit(In); + t.deepEqual(expectedSplit, { + ContractFee: usdc.make(600000n), + PoolFee: usdc.make(2400001n), + Principal: usdc.make(146999999n), + }); + + t.like( + rearrange, + { method: 'atomicRearrange' }, + '2. settler called atomicRearrange ', + ); + t.is(rearrange.parts.length, 1); + const [s1, s2, a1, a2] = rearrange.parts[0]; + t.is(s1, s2, 'src and dest seat are the same'); + t.deepEqual([a1, a2], [{ In }, expectedSplit]); + + t.like( + repay, + { + method: 'repay', + amounts: expectedSplit, + }, + '3. settler called repay() on liquidity pool repayer facet', + ); + t.is(repay.fromSeat, s1); + + t.deepEqual( + statusManager.lookupPending( + cctpTxEvidence.tx.forwardingAddress, + cctpTxEvidence.tx.amount, + ), + [], + 'SETTLED entry removed from StatusManger', + ); + await eventLoopIteration(); + const vstorage = t.context.storage.data; + t.is( + vstorage.get(`mockChainStorageRoot.status.${cctpTxEvidence.txHash}`), + 'DISBURSED', + ); }); -test('StatusManger gets `SETTLED` update in happy path', async t => { - const { makeSettler, statusManager, defaultSettlerParams, simulateAdvance } = - t.context; - const settler = makeSettler(defaultSettlerParams); +test('slow path: forward to EUD; remove pending tx', async t => { + const { + common, + makeSettler, + statusManager, + defaultSettlerParams, + repayer, + simulate, + accounts, + peekCalls, + } = t.context; + const { usdc } = common.brands; + + const settler = makeSettler({ + repayer, + settlementAccount: accounts.settlement.account, + ...defaultSettlerParams, + }); - const cctpTxEvidence = simulateAdvance(); + const cctpTxEvidence = simulate.observe(); t.deepEqual( statusManager.lookupPending( cctpTxEvidence.tx.forwardingAddress, cctpTxEvidence.tx.amount, ), - [ - { - ...cctpTxEvidence, - status: PendingTxStatus.Advanced, - }, - ], + [{ ...cctpTxEvidence, status: PendingTxStatus.Observed }], + 'statusManager shows this tx is only observed', ); t.log('Simulate incoming IBC settlement'); - void settler.receiveUpcall(MockVTransferEvents.AGORIC_PLUS_OSMO()); + void settler.tap.receiveUpcall(MockVTransferEvents.AGORIC_PLUS_OSMO()); + await eventLoopIteration(); - t.log('TODO test funds settled in right places'); - // TODO, test settlement of funds + t.log('funds are forwarded; no interaction with LP'); + t.deepEqual(peekCalls(), []); + t.deepEqual(accounts.settlement.callLog, [ + [ + 'transfer', + { + chainId: 'osmosis-1', + encoding: 'bech32', + value: 'osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', + }, + usdc.units(150), + ], + ]); t.deepEqual( statusManager.lookupPending( @@ -89,11 +290,51 @@ test('StatusManger gets `SETTLED` update in happy path', async t => { [], 'SETTLED entry removed from StatusManger', ); - // TODO, confirm vstorage write for TxStatus.SETTLED + const vstorage = t.context.storage.data; + t.is( + vstorage.get(`mockChainStorageRoot.status.${cctpTxEvidence.txHash}`), + 'FORWARDED', + ); }); -test.todo("StatusManager does not receive update when we can't settle"); +test('Settlement for unknown transaction', async t => { + const { + common, + makeSettler, + defaultSettlerParams, + repayer, + accounts, + peekCalls, + inspectLogs, + } = t.context; + const { usdc } = common.brands; -test.todo('settler disperses funds'); + const settler = makeSettler({ + repayer, + settlementAccount: accounts.settlement.account, + ...defaultSettlerParams, + }); + + t.log('Simulate incoming IBC settlement'); + void settler.tap.receiveUpcall(MockVTransferEvents.AGORIC_PLUS_OSMO()); + await eventLoopIteration(); + + t.log('USDC was forwarded'); + t.deepEqual(peekCalls(), []); + t.deepEqual(accounts.settlement.callLog, [ + [ + 'transfer', + { + chainId: 'osmosis-1', + encoding: 'bech32', + value: 'osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', + }, + usdc.units(150), + ], + ]); + t.deepEqual(inspectLogs(0), [ + '⚠️ Forwarded minted amount 150000000 from account noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd before it was observed.', + ]); +}); -test.todo('Observed -> Settle flow'); +test.todo("StatusManager does not receive update when we can't settle"); diff --git a/packages/fast-usdc/test/exos/status-manager.test.ts b/packages/fast-usdc/test/exos/status-manager.test.ts index ee892fee00d..d37015f0d57 100644 --- a/packages/fast-usdc/test/exos/status-manager.test.ts +++ b/packages/fast-usdc/test/exos/status-manager.test.ts @@ -1,13 +1,36 @@ -import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import type { TestFn } from 'ava'; +import { test as anyTest } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import type { StorageNode } from '@agoric/internal/src/lib-chainStorage.js'; +import { eventLoopIteration } from '@agoric/internal/src/testing-utils.js'; import { PendingTxStatus } from '../../src/constants.js'; import { prepareStatusManager } from '../../src/exos/status-manager.js'; -import { provideDurableZone } from '../supports.js'; +import { commonSetup, provideDurableZone } from '../supports.js'; import { MockCctpTxEvidences } from '../fixtures.js'; import type { CctpTxEvidence } from '../../src/types.js'; +type Common = Awaited>; +type TestContext = { + makeStatusNode: () => Promise; + storage: Common['bootstrap']['storage']; +}; + +const test = anyTest as TestFn; + +test.beforeEach(async t => { + const common = await commonSetup(t); + t.context = { + makeStatusNode: async () => + common.commonPrivateArgs.storageNode.makeChildNode('status'), + storage: common.bootstrap.storage, + }; +}); + test('advance creates new entry with ADVANCED status', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.advance(evidence); @@ -17,13 +40,33 @@ test('advance creates new entry with ADVANCED status', t => { evidence.tx.amount, ); - t.is(entries[0]?.status, PendingTxStatus.Advanced); + t.is(entries[0]?.status, PendingTxStatus.Advancing); }); -test('observe creates new entry with OBSERVED status', t => { +test('ADVANCED transactions are published to vstorage', async t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + + const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + statusManager.advance(evidence); + await eventLoopIteration(); + const vstorage = t.context.storage.data; + t.is( + vstorage.get(`mockChainStorageRoot.status.${evidence.txHash}`), + 'ADVANCING', + ); +}); + +test('observe creates new entry with OBSERVED status', t => { + const zone = provideDurableZone('status-test'); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.observe(evidence); @@ -35,10 +78,30 @@ test('observe creates new entry with OBSERVED status', t => { t.is(entries[0]?.status, PendingTxStatus.Observed); }); -test('cannot process same tx twice', t => { +test('OBSERVED transactions are published to vstorage', async t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + + const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + statusManager.observe(evidence); + await eventLoopIteration(); + + const vstorage = t.context.storage.data; + t.is( + vstorage.get(`mockChainStorageRoot.status.${evidence.txHash}`), + 'OBSERVED', + ); +}); +test('cannot process same tx twice', t => { + const zone = provideDurableZone('status-test'); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); statusManager.advance(evidence); @@ -58,60 +121,205 @@ test('cannot process same tx twice', t => { t.notThrows(() => statusManager.advance({ ...evidence, chainId: 9999 })); }); -test('settle removes entries from PendingTxs', t => { +test('isSeen checks if a tx has been processed', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); - const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); - statusManager.advance(evidence); - statusManager.observe({ ...evidence, txHash: '0xtest1' }); + const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + t.false(statusManager.hasBeenObserved(e1)); + statusManager.advance(e1); + t.true(statusManager.hasBeenObserved(e1)); - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); + const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + t.false(statusManager.hasBeenObserved(e2)); + statusManager.observe(e2); + t.true(statusManager.hasBeenObserved(e2)); +}); - const entries = statusManager.lookupPending( - evidence.tx.forwardingAddress, - evidence.tx.amount, +test('dequeueStatus removes entries from PendingTxs', t => { + const zone = provideDurableZone('status-test'); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + + statusManager.advance(e1); + statusManager.advanceOutcome(e1.tx.forwardingAddress, e1.tx.amount, true); + statusManager.advance(e2); + statusManager.advanceOutcome(e2.tx.forwardingAddress, e2.tx.amount, false); + statusManager.observe({ ...e1, txHash: '0xtest1' }); + + t.deepEqual( + statusManager.dequeueStatus(e1.tx.forwardingAddress, e1.tx.amount), + { + txHash: e1.txHash, + status: PendingTxStatus.Advanced, + }, + ); + + t.deepEqual( + statusManager.dequeueStatus(e2.tx.forwardingAddress, e2.tx.amount), + { + txHash: e2.txHash, + status: PendingTxStatus.AdvanceFailed, + }, + ); + + t.deepEqual( + statusManager.dequeueStatus(e1.tx.forwardingAddress, e1.tx.amount), + { + txHash: '0xtest1', + status: PendingTxStatus.Observed, + }, + ); + + t.is( + statusManager.lookupPending(e1.tx.forwardingAddress, e1.tx.amount).length, + 0, + 'Settled entries should be deleted', + ); + + t.is( + statusManager.lookupPending(e2.tx.forwardingAddress, e2.tx.amount).length, + 0, + 'Settled entry should be deleted', ); - t.is(entries.length, 0, 'Settled entry should be deleted'); }); -test('cannot SETTLE without an ADVANCED or OBSERVED entry', t => { +test('cannot advanceOutcome without ADVANCING entry', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + const advanceOutcomeFn = () => + statusManager.advanceOutcome(e1.tx.forwardingAddress, e1.tx.amount, true); + const expectedErrMsg = + 'no advancing tx with {"amount":"[150000000n]","sender":"noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd"}'; + + t.throws(advanceOutcomeFn, { + message: expectedErrMsg, + }); - const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + statusManager.observe(e1); + t.throws(advanceOutcomeFn, { + message: expectedErrMsg, + }); + + const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + statusManager.advance(e2); + t.notThrows(() => + statusManager.advanceOutcome(e2.tx.forwardingAddress, e2.tx.amount, true), + ); +}); - t.throws( - () => - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount), +test('advanceOutcome transitions to ADVANCED and ADVANCE_FAILED', async t => { + const vstorage = t.context.storage.data; + const zone = provideDurableZone('status-test'); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + const e2 = MockCctpTxEvidences.AGORIC_PLUS_DYDX(); + + statusManager.advance(e1); + statusManager.advanceOutcome(e1.tx.forwardingAddress, e1.tx.amount, true); + t.like(statusManager.lookupPending(e1.tx.forwardingAddress, e1.tx.amount), [ { - message: - 'key "pendingTx:[\\"noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd\\",\\"150000000\\"]" not found in collection "PendingTxs"', + status: PendingTxStatus.Advanced, }, + ]); + await eventLoopIteration(); + t.is( + vstorage.get(`mockChainStorageRoot.status.${e1.txHash}`), + PendingTxStatus.Advanced, + ); + + statusManager.advance(e2); + statusManager.advanceOutcome(e2.tx.forwardingAddress, e2.tx.amount, false); + t.like(statusManager.lookupPending(e2.tx.forwardingAddress, e2.tx.amount), [ + { + status: PendingTxStatus.AdvanceFailed, + }, + ]); + await eventLoopIteration(); + t.is( + vstorage.get(`mockChainStorageRoot.status.${e2.txHash}`), + PendingTxStatus.AdvanceFailed, ); }); -test('settle SETTLES first matched entry', t => { +test('dequeueStatus returns undefined when nothing is settleable', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + const e1 = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + t.is( + statusManager.dequeueStatus(e1.tx.forwardingAddress, e1.tx.amount), + undefined, + ); +}); + +test('dequeueStatus returns first (earliest) matched entry', async t => { + const zone = provideDurableZone('status-test'); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); - // advance two + // advance two txs statusManager.advance(evidence); statusManager.advance({ ...evidence, txHash: '0xtest2' }); - // also settles OBSERVED statuses + + // cannot dequeue ADVANCING pendingTx + t.is( + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ), + undefined, + ); + + statusManager.advanceOutcome( + evidence.tx.forwardingAddress, + evidence.tx.amount, + true, + ); + statusManager.advanceOutcome( + evidence.tx.forwardingAddress, + evidence.tx.amount, + true, + ); + + // also can dequeue OBSERVED statuses statusManager.observe({ ...evidence, txHash: '0xtest3' }); - // settle will settle the first match - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); + // dequeue will return the first match + t.like( + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ), + { + status: PendingTxStatus.Advanced, + }, + ); const entries0 = statusManager.lookupPending( evidence.tx.forwardingAddress, evidence.tx.amount, ); t.is(entries0.length, 2); - // TODO, check vstorage for PendingTxStatus.Settled for 1st tx t.is( entries0?.[0].status, PendingTxStatus.Advanced, @@ -123,41 +331,57 @@ test('settle SETTLES first matched entry', t => { 'order of remaining entries preserved', ); - // settle again wih same args settles 2nd advance - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); - // settle again wih same args settles remaining observe - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); + // dequeue again wih same args to settle 2nd advance + t.like( + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ), + { + status: 'ADVANCED', + }, + ); + // dequeue again wih same ags to settle remaining observe + t.like( + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ), + { + status: 'OBSERVED', + }, + ); const entries1 = statusManager.lookupPending( evidence.tx.forwardingAddress, evidence.tx.amount, ); - // TODO, check vstorage for TxStatus.Settled t.is(entries1?.length, 0, 'settled entries are deleted'); - t.throws( - () => - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount), - { - message: - 'No unsettled entry for "pendingTx:[\\"noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelqkd\\",\\"150000000\\"]"', - }, + t.is( + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ), + undefined, 'No more matches to settle', ); }); -test('lookup throws when presented a key it has not seen', t => { +test('lookupPending returns empty array when presented a key it has not seen', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); - - t.throws(() => statusManager.lookupPending('noble123', 1n), { - message: 'Key "pendingTx:[\\"noble123\\",\\"1\\"]" not yet observed', - }); + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); + t.deepEqual(statusManager.lookupPending('noble123', 1n), []); }); -test('StatusManagerKey logic handles addresses with hyphens', async t => { +test('StatusManagerKey logic handles addresses with hyphens', t => { const zone = provideDurableZone('status-test'); - const statusManager = prepareStatusManager(zone.subZone('status-manager')); - + const statusManager = prepareStatusManager( + zone.subZone('status-manager'), + t.context.makeStatusNode, + ); const evidence: CctpTxEvidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); evidence.tx.forwardingAddress = 'noble1-foo'; @@ -169,12 +393,23 @@ test('StatusManagerKey logic handles addresses with hyphens', async t => { ); t.is(entries.length, 1); - t.is(entries[0]?.status, PendingTxStatus.Advanced); + t.is(entries[0]?.status, PendingTxStatus.Advancing); + + statusManager.advanceOutcome( + evidence.tx.forwardingAddress, + evidence.tx.amount, + true, + ); - statusManager.settle(evidence.tx.forwardingAddress, evidence.tx.amount); + statusManager.dequeueStatus( + evidence.tx.forwardingAddress, + evidence.tx.amount, + ); const remainingEntries = statusManager.lookupPending( evidence.tx.forwardingAddress, evidence.tx.amount, ); - t.is(remainingEntries.length, 0, 'Entry should be settled'); + t.is(remainingEntries.length, 0, 'Entry should be dequeued from pending'); }); + +test.todo('ADVANCE_FAILED -> FORWARDED transition'); diff --git a/packages/fast-usdc/test/exos/transaction-feed.test.ts b/packages/fast-usdc/test/exos/transaction-feed.test.ts index 5688b9db73c..5f11c504dc2 100644 --- a/packages/fast-usdc/test/exos/transaction-feed.test.ts +++ b/packages/fast-usdc/test/exos/transaction-feed.test.ts @@ -1,11 +1,96 @@ // Must be first to set up globals import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import { deeplyFulfilledObject } from '@agoric/internal'; import { makeHeapZone } from '@agoric/zone'; -import { prepareTransactionFeedKit } from '../../src/exos/transaction-feed.js'; +import { + prepareTransactionFeedKit, + type TransactionFeedKit, +} from '../../src/exos/transaction-feed.js'; +import { MockCctpTxEvidences } from '../fixtures.js'; -test('basics', t => { +const nullZcf = null as any; + +const makeFeedKit = () => { const zone = makeHeapZone(); - const kit = prepareTransactionFeedKit(zone); - t.deepEqual(Object.values(kit), []); + const makeKit = prepareTransactionFeedKit(zone, nullZcf); + return makeKit(); +}; + +const makeOperators = (feedKit: TransactionFeedKit) => { + const operators = Object.fromEntries( + ['op1', 'op2', 'op3'].map(name => [ + name, + feedKit.creator.initOperator(name), + ]), + ); + return deeplyFulfilledObject(harden(operators)); +}; + +test('facets', t => { + const kit = makeFeedKit(); + t.deepEqual(Object.keys(kit).sort(), ['creator', 'operatorPowers', 'public']); +}); + +test('status shape', async t => { + const { op1 } = await makeOperators(makeFeedKit()); + + // status shape + t.deepEqual(op1.operator.getStatus(), { + disabled: false, + operatorId: 'op1', + }); +}); + +test('happy aggregation', async t => { + const feedKit = makeFeedKit(); + const evidenceSubscriber = feedKit.public.getEvidenceSubscriber(); + + const { op1, op2, op3 } = await makeOperators(feedKit); + const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + const results = await Promise.all([ + op1.operator.submitEvidence(evidence), + op2.operator.submitEvidence(evidence), + op3.operator.submitEvidence(evidence), + ]); + t.deepEqual(results, [undefined, undefined, undefined]); + + const accepted = await evidenceSubscriber.getUpdateSince(0); + t.deepEqual(accepted, { + value: evidence, + updateCount: 1n, + }); + + // verify that it doesn't publish until three match + await Promise.all([ + // once it publishes, it doesn't remember that it already saw these + op1.operator.submitEvidence(evidence), + op2.operator.submitEvidence(evidence), + // but this time the third is different + op3.operator.submitEvidence(MockCctpTxEvidences.AGORIC_PLUS_DYDX()), + ]); + t.like(await evidenceSubscriber.getUpdateSince(0), { + // Update count is still 1 + updateCount: 1n, + }); + await op3.operator.submitEvidence(evidence); + t.like(await evidenceSubscriber.getUpdateSince(0), { + updateCount: 2n, + }); +}); + +// TODO: find a way to get this working +test.skip('forged source', async t => { + const feedKit = makeFeedKit(); + const { op1 } = await makeOperators(feedKit); + const evidence = MockCctpTxEvidences.AGORIC_PLUS_OSMO(); + + // op1 is different than the facets object the evidence must come from + t.throws(() => + feedKit.operatorPowers.submitEvidence( + evidence, + // @ts-expect-error XXX Types of property '[GET_INTERFACE_GUARD]' are incompatible. + op1, + ), + ); }); diff --git a/packages/fast-usdc/test/fast-usdc.contract.test.ts b/packages/fast-usdc/test/fast-usdc.contract.test.ts index 124f808e527..e697b9118da 100644 --- a/packages/fast-usdc/test/fast-usdc.contract.test.ts +++ b/packages/fast-usdc/test/fast-usdc.contract.test.ts @@ -1,7 +1,11 @@ import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import type { ExecutionContext } from 'ava'; import { AmountMath } from '@agoric/ertp/src/amountMath.js'; -import { inspectMapStore } from '@agoric/internal/src/testing-utils.js'; +import { + eventLoopIteration, + inspectMapStore, +} from '@agoric/internal/src/testing-utils.js'; import { divideBy, multiplyBy, @@ -11,53 +15,103 @@ import { setUpZoeForTest } from '@agoric/zoe/tools/setup-zoe.js'; import { E } from '@endo/far'; import path from 'path'; import fetchedChainInfo from '@agoric/orchestration/src/fetched-chain-info.js'; +import { objectMap } from '@endo/patterns'; +import { deeplyFulfilledObject } from '@agoric/internal'; +import type { Subscriber } from '@agoric/notifier'; import { MockCctpTxEvidences } from './fixtures.js'; import { commonSetup } from './supports.js'; +import type { FastUsdcTerms } from '../src/fast-usdc.contract.js'; +import { makeFeeTools } from '../src/utils/fees.js'; +import type { PoolMetrics } from '../src/types.js'; +import { addressTools } from '../src/utils/address.js'; const dirname = path.dirname(new URL(import.meta.url).pathname); -const contractName = 'fast-usdc'; const contractFile = `${dirname}/../src/fast-usdc.contract.js`; type StartFn = typeof import('../src/fast-usdc.contract.js').start; -test('start', async t => { +const { add, isGTE, subtract } = AmountMath; + +const getInvitationProperties = async ( + zoe: ZoeService, + invitation: Invitation, +) => { + const invitationIssuer = E(zoe).getInvitationIssuer(); + const amount = await E(invitationIssuer).getAmountOf(invitation); + return amount.value[0]; +}; + +type CommonSetup = Awaited>; +const startContract = async ( + common: Pick, +) => { const { - bootstrap, brands: { usdc }, commonPrivateArgs, - } = await commonSetup(t); + } = common; const { zoe, bundleAndInstall } = await setUpZoeForTest({ setJig: jig => { jig.chainHub.registerChain('osmosis', fetchedChainInfo.osmosis); + jig.chainHub.registerChain('agoric', fetchedChainInfo.agoric); + // TODO #10445 register noble<>agoric and noble<>osmosis instead + // for PFM routing. also will need to call `registerAsset` + jig.chainHub.registerConnection( + fetchedChainInfo.agoric.chainId, + fetchedChainInfo.osmosis.chainId, + fetchedChainInfo.agoric.connections['osmosis-1'], + ); }, }); - const installation: Installation = await bundleAndInstall(contractFile); - const { creatorFacet, publicFacet } = await E(zoe).startInstance( + const startKit = await E(zoe).startInstance( installation, { USDC: usdc.issuer }, { - poolFee: usdc.make(1n), - contractFee: usdc.make(1n), + usdcDenom: 'ibc/usdconagoric', }, commonPrivateArgs, ); - t.truthy(creatorFacet); - const e1 = await E(MockCctpTxEvidences.AGORIC_NO_PARAMS)(); + return { ...startKit, zoe }; +}; - const inv = await E(publicFacet).makeTestPushInvitation(e1); - // the invitation maker itself pushes the evidence +test('oracle operators have closely-held rights to submit evidence of CCTP transactions', async t => { + const common = await commonSetup(t); + const { creatorFacet, zoe } = await startContract(common); - // the offer is still safe to make - const seat = await E(zoe).offer(inv); - t.is( - await E(seat).getOfferResult(), - 'noop; evidence was pushed in the invitation maker call', - ); + const operatorId = 'operator-1'; + + const opInv = await E(creatorFacet).makeOperatorInvitation(operatorId); + + t.like(await getInvitationProperties(zoe, opInv), { + description: 'oracle operator invitation', + }); + + const operatorKit = await E(E(zoe).offer(opInv)).getOfferResult(); + + t.deepEqual(Object.keys(operatorKit), [ + 'admin', + 'invitationMakers', + 'operator', + ]); + + const e1 = MockCctpTxEvidences.AGORIC_NO_PARAMS(); + + { + const inv = await E(operatorKit.invitationMakers).SubmitEvidence(e1); + const res = await E(E(zoe).offer(inv)).getOfferResult(); + t.is(res, 'inert; nothing should be expected from this offer'); + } + + // what removeOperator will do + await E(operatorKit.admin).disable(); + + await t.throwsAsync(E(operatorKit.invitationMakers).SubmitEvidence(e1), { + message: 'submitEvidence for disabled operator', + }); }); const logAmt = amt => [ @@ -73,42 +127,33 @@ const scaleAmount = (frac: number, amount: Amount<'nat'>) => { return multiplyBy(amount, asRatio); }; -test('LP deposits, earns fees, withdraws', async t => { +const makeLpTools = ( + t: ExecutionContext, + common: Pick, + { + zoe, + terms, + subscriber, + publicFacet, + }: { + zoe: ZoeService; + subscriber: ERef>; + publicFacet: StartedInstanceKit['publicFacet']; + terms: StandardTerms & FastUsdcTerms; + }, +) => { const { - bootstrap, brands: { usdc }, - commonPrivateArgs, utils, - } = await commonSetup(t); - - const { zoe, bundleAndInstall } = await setUpZoeForTest(); - const installation: Installation = - await bundleAndInstall(contractFile); - - const { creatorFacet, publicFacet, instance } = await E(zoe).startInstance( - installation, - { USDC: usdc.issuer }, - { - poolFee: usdc.make(1n), - contractFee: usdc.make(1n), - }, - commonPrivateArgs, - ); - t.truthy(creatorFacet); - const terms = await E(zoe).getTerms(instance); - - const { add, isGTE, subtract } = AmountMath; - - const { subscriber } = E.get( - E.get(E(publicFacet).getPublicTopics()).shareWorth, - ); - + } = common; const makeLP = (name, usdcPurse: ERef) => { const sharePurse = E(terms.issuers.PoolShares).makeEmptyPurse(); let deposited = AmountMath.makeEmpty(usdc.brand); const me = harden({ deposit: async (qty: bigint) => { - const { value: shareWorth } = await E(subscriber).getUpdateSince(); + const { + value: { shareWorth }, + } = await E(subscriber).getUpdateSince(); const give = { USDC: usdc.make(qty) }; const proposal = harden({ give, @@ -132,7 +177,9 @@ test('LP deposits, earns fees, withdraws', async t => { .getCurrentAmount() .then(a => a as Amount<'nat'>); const give = { PoolShare: scaleAmount(portion, myShares) }; - const { value: shareWorth } = await E(subscriber).getUpdateSince(); + const { + value: { shareWorth }, + } = await E(subscriber).getUpdateSince(); const myUSDC = multiplyBy(myShares, shareWorth); const myFees = subtract(myUSDC, deposited); t.log(name, 'sees fees earned', ...logAmt(myFees)); @@ -148,13 +195,12 @@ test('LP deposits, earns fees, withdraws', async t => { .then(pmt => E(zoe).offer(toWithdraw, proposal, { PoolShare: pmt })) .then(seat => E(seat).getPayout('USDC')); const amt = await E(usdcPurse).deposit(usdcPmt); - t.log(name, 'withdaw payout', ...logAmt(amt)); + t.log(name, 'withdraw payout', ...logAmt(amt)); t.true(isGTE(amt, proposal.want.USDC)); }, }); return me; }; - const purseOf = (value: bigint) => E(terms.issuers.USDC) .makeEmptyPurse() @@ -163,23 +209,310 @@ test('LP deposits, earns fees, withdraws', async t => { await p.deposit(pmt); return p; }); + return { makeLP, purseOf }; +}; + +test('LP deposits, earns fees, withdraws', async t => { + const common = await commonSetup(t); + const { + commonPrivateArgs, + brands: { usdc }, + utils, + } = common; + + const { instance, creatorFacet, publicFacet, zoe } = + await startContract(common); + const terms = await E(zoe).getTerms(instance); + + const { subscriber } = E.get( + E.get(E(publicFacet).getPublicTopics()).poolMetrics, + ); + const { makeLP, purseOf } = makeLpTools(t, common, { + publicFacet, + subscriber, + terms, + zoe, + }); const lps = { alice: makeLP('Alice', purseOf(60n)), bob: makeLP('Bob', purseOf(50n)), }; await Promise.all([lps.alice.deposit(60n), lps.bob.deposit(40n)]); + { - const feeAmt = usdc.make(25n); - t.log('contract accrues some amount of fees:', ...logAmt(feeAmt)); - const feePmt = await utils.pourPayment(feeAmt); - await E(creatorFacet).simulateFeesFromAdvance(feeAmt, feePmt); - } + t.log('simulate borrow and repay so pool accrues fees'); + const feeTools = makeFeeTools(commonPrivateArgs.feeConfig); + const requestedAmount = usdc.make(50n); + const splits = feeTools.calculateSplit(requestedAmount); + const amt = await E(creatorFacet).testBorrow({ USDC: splits.Principal }); + t.deepEqual( + amt.USDC, + splits.Principal, + 'testBorrow returns requested amount', + ); + const repayPayments = await deeplyFulfilledObject( + objectMap(splits, utils.pourPayment), + ); + const remaining = await E(creatorFacet).testRepay(splits, repayPayments); + for (const r of Object.values(remaining)) { + t.is(r.value, 0n, 'testRepay consumes all payments'); + } + } await Promise.all([lps.alice.withdraw(0.2), lps.bob.withdraw(0.8)]); }); +test('LP borrow', async t => { + const common = await commonSetup(t); + const { + brands: { usdc }, + } = common; + + const { instance, creatorFacet, publicFacet, zoe } = + await startContract(common); + const terms = await E(zoe).getTerms(instance); + + const { subscriber } = E.get( + E.get(E(publicFacet).getPublicTopics()).poolMetrics, + ); + + const { makeLP, purseOf } = makeLpTools(t, common, { + publicFacet, + subscriber, + terms, + zoe, + }); + const lps = { + alice: makeLP('Alice', purseOf(100n)), + }; + // seed pool with funds + await lps.alice.deposit(100n); + + const { value } = await E(subscriber).getUpdateSince(); + const { shareWorth, encumberedBalance } = value; + const poolSeatAllocation = subtract( + subtract(shareWorth.numerator, encumberedBalance), + usdc.make(1n), + ); + t.log('Attempting to borrow entire pool seat allocation', poolSeatAllocation); + await t.throwsAsync( + E(creatorFacet).testBorrow({ USDC: poolSeatAllocation }), + { + message: /Cannot borrow/, + }, + 'borrow fails when requested equals pool seat allocation', + ); + + await t.throwsAsync( + E(creatorFacet).testBorrow({ USDC: usdc.make(200n) }), + { + message: /Cannot borrow/, + }, + 'borrow fails when requested exceeds pool seat allocation', + ); + + await t.throwsAsync(E(creatorFacet).testBorrow({ USDC: usdc.make(0n) }), { + message: /arg 1: USDC: value: "\[0n\]" - Must be >= "\[1n\]"/, + }); + + await t.throwsAsync( + E(creatorFacet).testBorrow( + // @ts-expect-error intentionally incorrect KW + { Fee: usdc.make(1n) }, + ), + { + message: /Must have missing properties \["USDC"\]/, + }, + ); + + // LPs can still withdraw (contract did not shutdown) + await lps.alice.withdraw(0.5); + + const amt = await E(creatorFacet).testBorrow({ USDC: usdc.make(30n) }); + t.deepEqual(amt, { USDC: usdc.make(30n) }, 'borrow succeeds'); + + await eventLoopIteration(); + t.like(await E(subscriber).getUpdateSince(), { + value: { + encumberedBalance: { + value: 30n, + }, + totalBorrows: { + value: 30n, + }, + totalRepays: { + value: 0n, + }, + }, + }); +}); + +test('LP repay', async t => { + const common = await commonSetup(t); + const { + commonPrivateArgs, + brands: { usdc }, + utils, + } = common; + + const { instance, creatorFacet, publicFacet, zoe } = + await startContract(common); + const terms = await E(zoe).getTerms(instance); + + const { subscriber } = E.get( + E.get(E(publicFacet).getPublicTopics()).poolMetrics, + ); + const feeTools = makeFeeTools(commonPrivateArgs.feeConfig); + const { makeLP, purseOf } = makeLpTools(t, common, { + publicFacet, + subscriber, + terms, + zoe, + }); + const lps = { + alice: makeLP('Alice', purseOf(100n)), + }; + // seed pool with funds + await lps.alice.deposit(100n); + + // borrow funds from pool to increase encumbered balance + await E(creatorFacet).testBorrow({ USDC: usdc.make(50n) }); + + { + t.log('cannot repay more than encumbered balance'); + const repayAmounts = feeTools.calculateSplit(usdc.make(100n)); + const repayPayments = await deeplyFulfilledObject( + objectMap(repayAmounts, utils.pourPayment), + ); + await t.throwsAsync( + E(creatorFacet).testRepay(repayAmounts, repayPayments), + { + message: /Cannot repay. Principal .* exceeds encumberedBalance/, + }, + ); + } + + { + const pmt = utils.pourPayment(usdc.make(50n)); + await t.throwsAsync( + E(creatorFacet).testRepay( + // @ts-expect-error intentionally incorrect KWR + { USDC: usdc.make(50n) }, + { USDC: pmt }, + ), + { + message: + /Must have missing properties \["Principal","PoolFee","ContractFee"\]/, + }, + ); + } + { + const pmt = utils.pourPayment(usdc.make(50n)); + await t.throwsAsync( + E(creatorFacet).testRepay( + // @ts-expect-error intentionally incorrect KWR + { Principal: usdc.make(50n) }, + { Principal: pmt }, + ), + { + message: /Must have missing properties \["PoolFee","ContractFee"\]/, + }, + ); + } + { + const amts = { + Principal: usdc.make(0n), + ContractFee: usdc.make(0n), + PoolFee: usdc.make(0n), + }; + const pmts = await deeplyFulfilledObject( + objectMap(amts, utils.pourPayment), + ); + await t.throwsAsync(E(creatorFacet).testRepay(amts, pmts), { + message: /arg 1: Principal: value: "\[0n\]" - Must be >= "\[1n\]"/, + }); + } + + { + t.log('repay fails when amounts do not match seat allocation'); + const amts = { + Principal: usdc.make(25n), + ContractFee: usdc.make(1n), + PoolFee: usdc.make(2n), + }; + const pmts = await deeplyFulfilledObject( + harden({ + Principal: utils.pourPayment(usdc.make(24n)), + ContractFee: utils.pourPayment(usdc.make(1n)), + PoolFee: utils.pourPayment(usdc.make(2n)), + }), + ); + await t.throwsAsync(E(creatorFacet).testRepay(amts, pmts), { + message: /Cannot repay. From seat allocation .* does not equal amounts/, + }); + } + + { + t.log('repay succeeds with no Pool or Contract Fee'); + const amts = { + Principal: usdc.make(25n), + ContractFee: usdc.make(0n), + PoolFee: usdc.make(0n), + }; + const pmts = await deeplyFulfilledObject( + objectMap(amts, utils.pourPayment), + ); + const repayResult = await E(creatorFacet).testRepay(amts, pmts); + + for (const r of Object.values(repayResult)) { + t.is(r.value, 0n, 'testRepay consumes all payments'); + } + } + + const amts = { + Principal: usdc.make(25n), + ContractFee: usdc.make(1n), + PoolFee: usdc.make(2n), + }; + const pmts = await deeplyFulfilledObject(objectMap(amts, utils.pourPayment)); + const repayResult = await E(creatorFacet).testRepay(amts, pmts); + + for (const r of Object.values(repayResult)) { + t.is(r.value, 0n, 'testRepay consumes all payments'); + } + + await eventLoopIteration(); + t.like(await E(subscriber).getUpdateSince(), { + value: { + encumberedBalance: { + value: 0n, + }, + totalBorrows: { + value: 50n, + }, + totalRepays: { + value: 50n, + }, + totalContractFees: { + value: 1n, + }, + totalPoolFees: { + value: 2n, + }, + shareWorth: { + numerator: { + value: 103n, // 100n (alice lp) + 1n (dust) + 2n (pool fees) + }, + }, + }, + }); + + // LPs can still withdraw (contract did not shutdown) + await lps.alice.withdraw(1); +}); + test('baggage', async t => { const { brands: { usdc }, @@ -199,8 +532,7 @@ test('baggage', async t => { installation, { USDC: usdc.issuer }, { - poolFee: usdc.make(1n), - contractFee: usdc.make(1n), + usdcDenom: 'ibc/usdconagoric', }, commonPrivateArgs, ); @@ -208,3 +540,85 @@ test('baggage', async t => { const tree = inspectMapStore(contractBaggage); t.snapshot(tree, 'contract baggage after start'); }); + +test('advancing happy path', async t => { + const common = await commonSetup(t); + const { + brands: { usdc }, + commonPrivateArgs, + utils: { inspectLocalBridge, inspectBankBridge, transmitTransferAck }, + } = common; + + const { instance, publicFacet, zoe } = await startContract(common); + const terms = await E(zoe).getTerms(instance); + const { subscriber } = E.get( + E.get(E(publicFacet).getPublicTopics()).poolMetrics, + ); + const feeTools = makeFeeTools(commonPrivateArgs.feeConfig); + const { makeLP, purseOf } = makeLpTools(t, common, { + publicFacet, + subscriber, + terms, + zoe, + }); + + const evidence = await E(MockCctpTxEvidences.AGORIC_PLUS_OSMO)(); + + // seed pool with funds + const alice = makeLP('Alice', purseOf(evidence.tx.amount)); + await alice.deposit(evidence.tx.amount); + + // the invitation maker itself pushes the evidence + const inv = await E(publicFacet).makeTestPushInvitation(evidence); + const seat = await E(zoe).offer(inv); + t.is( + await E(seat).getOfferResult(), + 'inert; nothing should be expected from this offer', + ); + + // calculate advance net of fees + const expectedAdvance = feeTools.calculateAdvance( + usdc.make(evidence.tx.amount), + ); + t.log('Expecting to observe advance of', expectedAdvance); + + await eventLoopIteration(); // let Advancer do work + + // advance sent from PoolSeat to PoolAccount + t.deepEqual(inspectBankBridge().at(-1), { + amount: String(expectedAdvance.value), + denom: 'ibc/usdconagoric', + recipient: 'agoric1fakeLCAAddress', + type: 'VBANK_GIVE', + }); + + // ibc transfer sent over localChain bridge + const localBridgeMsg = inspectLocalBridge().at(-1); + const ibcTransferMsg = localBridgeMsg.messages[0]; + t.is(ibcTransferMsg['@type'], '/ibc.applications.transfer.v1.MsgTransfer'); + + const expectedReceiver = addressTools.getQueryParams( + evidence.aux.recipientAddress, + ).EUD; + t.is(ibcTransferMsg.receiver, expectedReceiver, 'sent to correct address'); + t.deepEqual(ibcTransferMsg.token, { + amount: String(expectedAdvance.value), + denom: 'ibc/usdconagoric', + }); + + // TODO #10445 expect PFM memo + t.is(ibcTransferMsg.memo, '', 'TODO expecting PFM memo'); + + // TODO #10445 expect routing through noble, not osmosis + t.is( + ibcTransferMsg.sourceChannel, + fetchedChainInfo.agoric.connections['osmosis-1'].transferChannel.channelId, + 'TODO expecting routing through Noble', + ); + + await transmitTransferAck(); + // Nothing we can check here, unless we want to inspect calls to `trace`. + // `test/exos/advancer.test.ts` covers calls to `log: LogFn` with mocks. + // This is still helpful to call, so we can observe "Advance transfer + // fulfilled" in the test output. +}); diff --git a/packages/fast-usdc/test/fixtures.ts b/packages/fast-usdc/test/fixtures.ts index 69363c988c7..0a520918906 100644 --- a/packages/fast-usdc/test/fixtures.ts +++ b/packages/fast-usdc/test/fixtures.ts @@ -7,6 +7,7 @@ const mockScenarios = [ 'AGORIC_PLUS_OSMO', 'AGORIC_PLUS_DYDX', 'AGORIC_NO_PARAMS', + 'AGORIC_UNKNOWN_EUD', ] as const; type MockScenario = (typeof mockScenarios)[number]; @@ -42,7 +43,7 @@ export const MockCctpTxEvidences: Record< txHash: '0xd81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761799', tx: { - amount: 200000000n, + amount: 300000000n, forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelktz', }, aux: { @@ -72,6 +73,25 @@ export const MockCctpTxEvidences: Record< }, chainId: 1, }), + AGORIC_UNKNOWN_EUD: (receiverAddress?: string) => ({ + blockHash: + '0x70d7343e04f8160892e94f02d6a9b9f255663ed0ac34caca98544c8143fee699', + blockNumber: 21037669n, + blockTimestamp: 1730762099n, + txHash: + '0xa81bc6105b60a234c7c50ac17816ebcd5561d366df8bf3be59ff387552761799', + tx: { + amount: 200000000n, + forwardingAddress: 'noble1x0ydg69dh6fqvr27xjvp6maqmrldam6yfelyyy', + }, + aux: { + forwardingChannel: 'channel-21', + recipientAddress: + receiverAddress || + 'agoric16kv2g7snfc4q24vg3pjdlnnqgngtjpwtetd2h689nz09lcklvh5s8u37ek?EUD=random1addr', + }, + chainId: 1, + }), }; const nobleDefaultVTransferParams = { @@ -115,4 +135,13 @@ export const MockVTransferEvents: Record< recieverAddress || MockCctpTxEvidences.AGORIC_NO_PARAMS().aux.recipientAddress, }), + AGORIC_UNKNOWN_EUD: (recieverAddress?: string) => + buildVTransferEvent({ + ...nobleDefaultVTransferParams, + amount: MockCctpTxEvidences.AGORIC_UNKNOWN_EUD().tx.amount, + sender: MockCctpTxEvidences.AGORIC_UNKNOWN_EUD().tx.forwardingAddress, + receiver: + recieverAddress || + MockCctpTxEvidences.AGORIC_UNKNOWN_EUD().aux.recipientAddress, + }), }; diff --git a/packages/fast-usdc/test/mocks.ts b/packages/fast-usdc/test/mocks.ts index ba2ba51d372..d6196d3b7d5 100644 --- a/packages/fast-usdc/test/mocks.ts +++ b/packages/fast-usdc/test/mocks.ts @@ -1,3 +1,4 @@ +import type { HostInterface } from '@agoric/async-flow'; import type { ChainAddress, DenomAmount, @@ -5,35 +6,62 @@ import type { } from '@agoric/orchestration'; import type { Zone } from '@agoric/zone'; import type { VowTools } from '@agoric/vow'; -import type { HostInterface } from '@agoric/async-flow'; -import type { LogFn } from '../src/types.js'; +import { makeRatio } from '@agoric/zoe/src/contractSupport/ratio.js'; +import type { + AmountUtils, + withAmountUtils, +} from '@agoric/zoe/tools/test-utils.js'; +import type { FeeConfig, LogFn } from '../src/types.js'; export const prepareMockOrchAccounts = ( zone: Zone, { - vowTools: { makeVowKit }, + vowTools: { makeVowKit, asVow }, log, - }: { vowTools: VowTools; log: (...args: any[]) => void }, + usdc, + }: { + vowTools: VowTools; + log: (...args: any[]) => void; + usdc: { brand: Brand<'nat'>; issuer: Issuer<'nat'> }; + }, ) => { - // can only be called once per test - const poolAccountTransferVK = makeVowKit(); + // each can only be resolved/rejected once per test + const poolAccountTransferVK = makeVowKit(); - const mockedPoolAccount = zone.exo('Pool LocalOrchAccount', undefined, { + const mockedPoolAccount = zone.exo('Mock Pool LocalOrchAccount', undefined, { transfer(destination: ChainAddress, amount: DenomAmount) { log('PoolAccount.transfer() called with', destination, amount); return poolAccountTransferVK.vow; }, + deposit(payment: Payment<'nat'>) { + log('PoolAccount.deposit() called with', payment); + // XXX consider a mock for deposit failure + return asVow(async () => usdc.issuer.getAmountOf(payment)); + }, }); const poolAccount = mockedPoolAccount as unknown as HostInterface< - OrchestrationAccount<{ - chainId: 'agoric'; - }> + OrchestrationAccount<{ chainId: 'agoric' }> >; + const settlementCallLog = [] as any[]; + const settlementAccountMock = zone.exo('Mock Settlement Account', undefined, { + transfer(...args) { + settlementCallLog.push(harden(['transfer', ...args])); + }, + }); + const settlementAccount = settlementAccountMock as unknown as HostInterface< + OrchestrationAccount<{ chainId: 'agoric' }> + >; return { - poolAccount, - poolAccountTransferVResolver: poolAccountTransferVK.resolver, + mockPoolAccount: { + account: poolAccount, + transferVResolver: poolAccountTransferVK.resolver, + }, + settlement: { + account: settlementAccount, + callLog: settlementCallLog, + }, }; }; @@ -49,3 +77,11 @@ export const makeTestLogger = (logger: LogFn) => { }; export type TestLogger = ReturnType; + +export const makeTestFeeConfig = (usdc: Omit): FeeConfig => + harden({ + flat: usdc.make(1n), + variableRate: makeRatio(2n, usdc.brand), + maxVariable: usdc.units(5), + contractRate: makeRatio(20n, usdc.brand), + }); diff --git a/packages/fast-usdc/test/pool-share-math.test.ts b/packages/fast-usdc/test/pool-share-math.test.ts index 9451c92e266..65870aaecfa 100644 --- a/packages/fast-usdc/test/pool-share-math.test.ts +++ b/packages/fast-usdc/test/pool-share-math.test.ts @@ -7,8 +7,10 @@ import { } from '@agoric/zoe/src/contractSupport/ratio.js'; import { mustMatch } from '@endo/patterns'; import { + borrowCalc, depositCalc, makeParity, + repayCalc, withdrawCalc, withFees, } from '../src/pool-share-math.js'; @@ -295,3 +297,200 @@ testProp( ); }, ); + +const makeInitialPoolStats = () => ({ + totalBorrows: makeEmpty(brands.USDC), + totalRepays: makeEmpty(brands.USDC), + totalPoolFees: makeEmpty(brands.USDC), + totalContractFees: makeEmpty(brands.USDC), +}); + +test('basic borrow calculation', t => { + const { USDC } = brands; + const requested = make(USDC, 100n); + const poolSeatAllocation = make(USDC, 200n); + const encumberedBalance = make(USDC, 50n); + const poolStats = makeInitialPoolStats(); + + const result = borrowCalc( + requested, + poolSeatAllocation, + encumberedBalance, + poolStats, + ); + + t.deepEqual( + result.encumberedBalance, + make(USDC, 150n), + 'Outstanding lends should increase by borrowed amount', + ); + t.deepEqual( + result.poolStats.totalBorrows, + make(USDC, 100n), + 'Total borrows should increase by borrowed amount', + ); + t.deepEqual( + Object.keys(result.poolStats), + Object.keys(poolStats), + 'borrowCalc returns all poolStats fields', + ); +}); + +test('borrow fails when requested exceeds or equals pool seat allocation', t => { + const { USDC } = brands; + const requested = make(USDC, 200n); + const poolSeatAllocation = make(USDC, 100n); + const encumberedBalance = make(USDC, 0n); + const poolStats = makeInitialPoolStats(); + + t.throws( + () => + borrowCalc(requested, poolSeatAllocation, encumberedBalance, poolStats), + { + message: /Cannot borrow/, + }, + ); + t.throws( + () => borrowCalc(requested, make(USDC, 200n), encumberedBalance, poolStats), + { + message: /Cannot borrow/, + }, + 'throw when request equals pool seat allocation', + ); + t.notThrows(() => + borrowCalc(requested, make(USDC, 201n), encumberedBalance, poolStats), + ); +}); + +test('basic repay calculation', t => { + const { USDC } = brands; + const shareWorth = makeParity(make(USDC, 1n), brands.PoolShares); + const amounts = { + Principal: make(USDC, 100n), + PoolFee: make(USDC, 10n), + ContractFee: make(USDC, 5n), + }; + const encumberedBalance = make(USDC, 200n); + const poolStats = makeInitialPoolStats(); + const fromSeatAllocation = amounts; + + const result = repayCalc( + shareWorth, + fromSeatAllocation, + amounts, + encumberedBalance, + poolStats, + ); + + t.deepEqual( + result.encumberedBalance, + make(USDC, 100n), + 'Outstanding lends should decrease by principal', + ); + t.deepEqual( + result.poolStats.totalRepays, + amounts.Principal, + 'Total repays should increase by principal', + ); + t.deepEqual( + result.poolStats.totalPoolFees, + amounts.PoolFee, + 'Total pool fees should increase by pool fee', + ); + t.deepEqual( + result.poolStats.totalContractFees, + amounts.ContractFee, + 'Total contract fees should increase by contract fee', + ); + t.deepEqual( + result.poolStats.totalBorrows, + poolStats.totalBorrows, + 'Total borrows should remain unchanged', + ); + t.deepEqual( + result.shareWorth.numerator, + make(USDC, 11n), + 'Share worth numerator should increase by pool fee', + ); + t.deepEqual( + Object.keys(result.poolStats), + Object.keys(poolStats), + 'repayCalc returns all poolStats fields', + ); +}); + +test('repay fails when principal exceeds encumbered balance', t => { + const { USDC } = brands; + + const shareWorth = makeParity(make(USDC, 1n), brands.PoolShares); + const amounts = { + Principal: make(USDC, 200n), + PoolFee: make(USDC, 10n), + ContractFee: make(USDC, 5n), + }; + const encumberedBalance = make(USDC, 100n); + const poolStats = { + ...makeInitialPoolStats(), + totalBorrows: make(USDC, 100n), + }; + + const fromSeatAllocation = amounts; + + t.throws( + () => + repayCalc( + shareWorth, + fromSeatAllocation, + amounts, + encumberedBalance, + poolStats, + ), + { + message: /Cannot repay. Principal .* exceeds encumberedBalance/, + }, + ); + + t.notThrows( + () => + repayCalc(shareWorth, fromSeatAllocation, amounts, make(USDC, 200n), { + ...makeInitialPoolStats(), + totalBorrows: make(USDC, 200n), + }), + 'repay succeeds when principal equals encumbered balance', + ); +}); + +test('repay fails when seat allocation does not equal amounts', t => { + const { USDC } = brands; + + const shareWorth = makeParity(make(USDC, 1n), brands.PoolShares); + const amounts = { + Principal: make(USDC, 200n), + PoolFee: make(USDC, 10n), + ContractFee: make(USDC, 5n), + }; + const encumberedBalance = make(USDC, 100n); + const poolStats = { + ...makeInitialPoolStats(), + totalBorrows: make(USDC, 100n), + }; + + const fromSeatAllocation = { + ...amounts, + ContractFee: make(USDC, 1n), + }; + + t.throws( + () => + repayCalc( + shareWorth, + fromSeatAllocation, + amounts, + encumberedBalance, + poolStats, + ), + { + message: /Cannot repay. From seat allocation .* does not equal amounts/, + }, + ); +}); diff --git a/packages/fast-usdc/test/snapshots/cli.test.ts.md b/packages/fast-usdc/test/snapshots/cli.test.ts.md deleted file mode 100644 index f99a1fe5746..00000000000 --- a/packages/fast-usdc/test/snapshots/cli.test.ts.md +++ /dev/null @@ -1,23 +0,0 @@ -# Snapshot report for `test/cli.test.ts` - -The actual snapshot is saved in `cli.test.ts.snap`. - -Generated by [AVA](https://avajs.dev). - -## CLI shows help when run without arguments - -> Snapshot 1 - - `Usage: fast-usdc [options] [command]␊ - ␊ - CLI to interact with Fast USDC liquidity pool␊ - ␊ - Options:␊ - -V, --version output the version number␊ - -h, --help display help for command␊ - ␊ - Commands:␊ - deposit Offer assets to the liquidity pool␊ - withdraw Withdraw assets from the liquidity pool␊ - help [command] display help for command␊ - ` diff --git a/packages/fast-usdc/test/snapshots/cli.test.ts.snap b/packages/fast-usdc/test/snapshots/cli.test.ts.snap deleted file mode 100644 index 7fb4649fe87..00000000000 Binary files a/packages/fast-usdc/test/snapshots/cli.test.ts.snap and /dev/null differ diff --git a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md index 8a13071ad97..ec82b58c800 100644 --- a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md +++ b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.md @@ -30,9 +30,22 @@ Generated by [AVA](https://avajs.dev). chainHub: { ChainHub_kindHandle: 'Alleged: kind', ChainHub_singleton: 'Alleged: ChainHub', - bech32PrefixToChainName: {}, + bech32PrefixToChainName: { + agoric: 'agoric', + }, brandDenom: {}, - chainInfos: {}, + chainInfos: { + agoric: { + bech32Prefix: 'agoric', + chainId: 'agoric-3', + icqEnabled: false, + stakingTokens: [ + { + denom: 'ubld', + }, + ], + }, + }, connectionInfos: {}, denom: {}, lookupChainInfo_kindHandle: 'Alleged: kind', @@ -40,8 +53,7 @@ Generated by [AVA](https://avajs.dev). lookupConnectionInfo_kindHandle: 'Alleged: kind', }, contract: { - 'Fast USDC Advance Transfer Handler_kindHandle': 'Alleged: kind', - 'Fast USDC Advance Transfer Handler_singleton': 'Alleged: Fast USDC Advance Transfer Handler', + Advancer: 'Alleged: Fast USDC Advancer advancer', 'Fast USDC Advancer_kindHandle': 'Alleged: kind', 'Fast USDC Creator_kindHandle': 'Alleged: kind', 'Fast USDC Creator_singleton': 'Alleged: Fast USDC Creator', @@ -51,35 +63,56 @@ Generated by [AVA](https://avajs.dev). 'Fast USDC Settler_kindHandle': 'Alleged: kind', 'Fast USDC Status Manager_kindHandle': 'Alleged: kind', 'Fast USDC Status Manager_singleton': 'Alleged: Fast USDC Status Manager', + 'Feed Kit': { + creator: Object @Alleged: Fast USDC Feed creator {}, + operatorPowers: Object @Alleged: Fast USDC Feed operatorPowers {}, + public: Object @Alleged: Fast USDC Feed public {}, + }, Kinds: { 'Transaction Feed_kindHandle': 'Alleged: kind', }, 'Liquidity Pool kit': { + borrower: Object @Alleged: Liquidity Pool borrower {}, depositHandler: Object @Alleged: Liquidity Pool depositHandler {}, external: Object @Alleged: Liquidity Pool external {}, - feeSink: Object @Alleged: Liquidity Pool feeSink {}, public: Object @Alleged: Liquidity Pool public {}, + repayer: Object @Alleged: Liquidity Pool repayer {}, withdrawHandler: Object @Alleged: Liquidity Pool withdrawHandler {}, }, 'Liquidity Pool_kindHandle': 'Alleged: kind', + 'Operator Kit_kindHandle': 'Alleged: kind', PendingTxs: {}, + PoolAccount: 'Vow', SeenTxs: [], + SettleAccount: 'Vow', mint: { PoolShare: 'Alleged: zcfMint', }, - orchestration: {}, + operators: {}, + orchestration: { + makeLocalAccount: { + asyncFlow_kindHandle: 'Alleged: kind', + }, + }, + pending: {}, vstorage: { 'Durable Publish Kit_kindHandle': 'Alleged: kind', Recorder_kindHandle: 'Alleged: kind', }, }, + firstIncarnationKey: true, orchestration: { 'Cosmos Orchestration Account Holder_kindHandle': 'Alleged: kind', 'Local Orchestration Account Kit_kindHandle': 'Alleged: kind', LocalChainFacade_kindHandle: 'Alleged: kind', Orchestrator_kindHandle: 'Alleged: kind', RemoteChainFacade_kindHandle: 'Alleged: kind', - chainName: {}, + chainName: { + agoric: { + pending: false, + value: Object @Alleged: LocalChainFacade public {}, + }, + }, ibcTools: { IBCTransferSenderKit_kindHandle: 'Alleged: kind', ibcResultWatcher_kindHandle: 'Alleged: kind', diff --git a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap index 996a38d4eb9..5e8c6efc2ee 100644 Binary files a/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap and b/packages/fast-usdc/test/snapshots/fast-usdc.contract.test.ts.snap differ diff --git a/packages/fast-usdc/test/supports.ts b/packages/fast-usdc/test/supports.ts index 80dd15180d5..e7977de6963 100644 --- a/packages/fast-usdc/test/supports.ts +++ b/packages/fast-usdc/test/supports.ts @@ -28,6 +28,7 @@ import { makeHeapZone, type Zone } from '@agoric/zone'; import { makeDurableZone } from '@agoric/zone/durable.js'; import { E } from '@endo/far'; import type { ExecutionContext } from 'ava'; +import { makeTestFeeConfig } from './mocks.js'; export { makeFakeLocalchainBridge, @@ -51,7 +52,7 @@ export const commonSetup = async (t: ExecutionContext) => { onToBridge: obj => bankBridgeMessages.push(obj), }); await E(bankManager).addAsset( - 'uusdc', + 'ibc/usdconagoric', 'USDC', 'USD Circle Stablecoin', usdc.issuerKit, @@ -63,13 +64,13 @@ export const commonSetup = async (t: ExecutionContext) => { // TODO https://github.com/Agoric/agoric-sdk/issues/9966 await makeWellKnownSpaces(agoricNamesAdmin, t.log, ['vbankAsset']); await E(E(agoricNamesAdmin).lookupAdmin('vbankAsset')).update( - 'uusdc', + 'ibc/usdconagoric', /** @type {AssetInfo} */ harden({ brand: usdc.brand, issuer: usdc.issuer, - issuerName: 'IST', + issuerName: 'USDC', denom: 'uusdc', - proposedName: 'IST', + proposedName: 'USDC', displayInfo: { IOU: true }, }), ); @@ -184,6 +185,9 @@ export const commonSetup = async (t: ExecutionContext) => { storageNode: storage.rootNode, marshaller, timerService: timer, + feeConfig: makeTestFeeConfig(usdc), + chainInfo: {}, + assetInfo: {}, }, facadeServices: { agoricNames, diff --git a/packages/fast-usdc/test/typeGuards.test.ts b/packages/fast-usdc/test/type-guards.test.ts similarity index 98% rename from packages/fast-usdc/test/typeGuards.test.ts rename to packages/fast-usdc/test/type-guards.test.ts index 9920fd7ce34..cefea175705 100644 --- a/packages/fast-usdc/test/typeGuards.test.ts +++ b/packages/fast-usdc/test/type-guards.test.ts @@ -2,7 +2,7 @@ import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; import { mustMatch } from '@endo/patterns'; import { TxStatus, PendingTxStatus } from '../src/constants.js'; -import { CctpTxEvidenceShape, PendingTxShape } from '../src/typeGuards.js'; +import { CctpTxEvidenceShape, PendingTxShape } from '../src/type-guards.js'; import type { CctpTxEvidence } from '../src/types.js'; import { MockCctpTxEvidences } from './fixtures.js'; diff --git a/packages/fast-usdc/test/util/file.test.ts b/packages/fast-usdc/test/util/file.test.ts new file mode 100644 index 00000000000..c95f3790da0 --- /dev/null +++ b/packages/fast-usdc/test/util/file.test.ts @@ -0,0 +1,148 @@ +import test from 'ava'; +import { makeFile } from '../../src/util/file.js'; + +const makeReadMock = (content: string) => { + let filePathRead: string; + let encodingUsed: string; + const readFile = (filePath: string, encoding: string) => { + filePathRead = filePath; + encodingUsed = encoding; + return content; + }; + return { + getFilePathRead: () => filePathRead, + getEncodingUsed: () => encodingUsed, + readFile, + }; +}; + +const makeExistsMock = (exists: boolean) => { + let filePathRead: string; + const pathExists = (filePath: string) => { + filePathRead = filePath; + return exists; + }; + return { + getFilePathRead: () => filePathRead, + pathExists, + }; +}; + +const makeWriteMock = () => { + let filePathWritten: string; + let contentsWritten: string; + const writeFile = (filePath: string, contents: string) => { + filePathWritten = filePath; + contentsWritten = contents; + }; + return { + getFilePathWritten: () => filePathWritten, + getContentsWritten: () => contentsWritten, + writeFile, + }; +}; + +const makeMkdirMock = () => { + let dirPathMade: string; + const mkdir = (dirPath: string) => { + dirPathMade = dirPath; + }; + return { + getDirPathMade: () => dirPathMade, + mkdir, + }; +}; + +test('returns the path', t => { + const path = 'config/dir/.fast-usdc/config.json'; + const file = makeFile(path); + + t.is(file.path, path); +}); + +test('reads the file contents', async t => { + const path = 'config/dir/.fast-usdc/config.json'; + const content = 'foo'; + const readMock = makeReadMock(content); + // @ts-expect-error mocking readFile + const file = makeFile(path, readMock.readFile); + + const result = await file.read(); + t.is(result, content); + t.is(readMock.getEncodingUsed(), 'utf-8'); + t.is(readMock.getFilePathRead(), path); +}); + +test('can tell whether the file exists', t => { + const path = 'config/dir/.fast-usdc/config.json'; + const mock1 = makeExistsMock(false); + const mock2 = makeExistsMock(true); + const file1 = makeFile( + path, + // @ts-expect-error mocking + undefined, + undefined, + undefined, + mock1.pathExists, + ); + const file2 = makeFile( + path, + // @ts-expect-error mocking + undefined, + undefined, + undefined, + mock2.pathExists, + ); + + const res1 = file1.exists(); + const res2 = file2.exists(); + + t.is(res1, false); + t.is(mock1.getFilePathRead(), path); + t.is(res2, true); + t.is(mock2.getFilePathRead(), path); +}); + +test('writes the file if the directory exists', async t => { + const dir = 'config/dir/.fast-usdc'; + const path = `${dir}/config.json`; + const mockExists = makeExistsMock(true); + const mockWrite = makeWriteMock(); + const file = makeFile( + path, + // @ts-expect-error mocking + undefined, + mockWrite.writeFile, + undefined, + mockExists.pathExists, + ); + + await file.write('foo'); + + t.is(mockExists.getFilePathRead(), dir); + t.is(mockWrite.getContentsWritten(), 'foo'); + t.is(mockWrite.getFilePathWritten(), path); +}); + +test('creates the directory if it does not exist', async t => { + const dir = 'config/dir/.fast-usdc'; + const path = `${dir}/config.json`; + const mockExists = makeExistsMock(false); + const mockWrite = makeWriteMock(); + const mockMkdir = makeMkdirMock(); + const file = makeFile( + path, + // @ts-expect-error mocking + undefined, + mockWrite.writeFile, + mockMkdir.mkdir, + mockExists.pathExists, + ); + + await file.write('foo'); + + t.is(mockExists.getFilePathRead(), dir); + t.is(mockMkdir.getDirPathMade(), dir); + t.is(mockWrite.getContentsWritten(), 'foo'); + t.is(mockWrite.getFilePathWritten(), path); +}); diff --git a/packages/fast-usdc/test/utils/address.test.ts b/packages/fast-usdc/test/utils/address.test.ts index 107cb640a67..d1c6ea23a3f 100644 --- a/packages/fast-usdc/test/utils/address.test.ts +++ b/packages/fast-usdc/test/utils/address.test.ts @@ -1,6 +1,8 @@ import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import { M } from '@endo/patterns'; import { addressTools } from '../../src/utils/address.js'; +import { EudParamShape } from '../../src/type-guards.js'; const FIXTURES = { AGORIC_WITH_DYDX: @@ -32,31 +34,38 @@ test('hasQueryParams: returns false for invalid parameter formats', t => { // getQueryParams tests - positive cases test('getQueryParams: correctly parses address with single EUD parameter', t => { - const result = addressTools.getQueryParams(FIXTURES.AGORIC_WITH_DYDX); + const result = addressTools.getQueryParams( + FIXTURES.AGORIC_WITH_DYDX, + EudParamShape, + ); t.deepEqual(result, { - address: 'agoric1bech32addr', - params: { - EUD: 'dydx183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', - }, + EUD: 'dydx183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', }); }); test('getQueryParams: correctly parses address with multiple parameters', t => { + const pattern = harden({ EUD: M.string(), CID: M.string() }); + const result = addressTools.getQueryParams( + FIXTURES.AGORIC_WITH_MULTIPLE, + pattern, + ); + t.deepEqual(result, { + EUD: 'osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', + CID: 'dydx-mainnet-1', + }); +}); + +test('getQueryParams: returns all parameters when no shape is provided', t => { const result = addressTools.getQueryParams(FIXTURES.AGORIC_WITH_MULTIPLE); t.deepEqual(result, { - address: 'agoric1bech32addr', - params: { - EUD: 'osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', - CID: 'dydx-mainnet-1', - }, + EUD: 'osmo183dejcnmkka5dzcu9xw6mywq0p2m5peks28men', + CID: 'dydx-mainnet-1', }); }); test('getQueryParams: correctly handles address with no parameters', t => { - const result = addressTools.getQueryParams(FIXTURES.AGORIC_NO_PARAMS); - t.deepEqual(result, { - address: 'agoric1bech32addr', - params: {}, + t.throws(() => addressTools.getQueryParams(FIXTURES.AGORIC_NO_PARAMS), { + message: 'Unable to parse query params: "agoric1bech32addr"', }); }); @@ -66,7 +75,7 @@ test('getQueryParams: throws error for multiple question marks', t => { () => addressTools.getQueryParams(FIXTURES.INVALID_MULTIPLE_QUESTION), { message: - 'Invalid input. Must be of the form \'address?params\': "agoric1bech32addr?param1=value1?param2=value2"', + 'Unable to parse query params: "agoric1bech32addr?param1=value1?param2=value2"', }, ); }); diff --git a/packages/fast-usdc/test/utils/fees.test.ts b/packages/fast-usdc/test/utils/fees.test.ts new file mode 100644 index 00000000000..07004b3b125 --- /dev/null +++ b/packages/fast-usdc/test/utils/fees.test.ts @@ -0,0 +1,213 @@ +import { test } from '@agoric/zoe/tools/prepare-test-env-ava.js'; +import { makeIssuerKit, AmountMath } from '@agoric/ertp'; +import { makeRatioFromAmounts } from '@agoric/zoe/src/contractSupport/ratio.js'; +import { withAmountUtils } from '@agoric/zoe/tools/test-utils.js'; +import { q } from '@endo/errors'; +import { makeFeeTools } from '../../src/utils/fees.js'; +import type { FeeConfig } from '../../src/types.js'; +import { makeTestFeeConfig } from '../mocks.js'; +import { MockCctpTxEvidences } from '../fixtures.js'; + +const { add, isEqual } = AmountMath; + +const issuerKits = { + USDC: makeIssuerKit<'nat'>('USDC'), +}; +const { brand: usdcBrand } = issuerKits.USDC; + +const USDC = (value: bigint) => AmountMath.make(usdcBrand, value); +const USDCRatio = (numerator: bigint, denominator: bigint = 100n) => + makeRatioFromAmounts(USDC(numerator), USDC(denominator)); + +const aFeeConfig: FeeConfig = { + flat: USDC(10n), + variableRate: USDCRatio(2n), + maxVariable: USDC(100n), + contractRate: USDCRatio(20n), +}; +harden(aFeeConfig); + +type FeelToolsScenario = { + name: string; + config?: FeeConfig; + requested: Amount<'nat'>; + expected: { + totalFee: Amount<'nat'>; + advance: Amount<'nat'>; + split: { + ContractFee: Amount<'nat'>; + PoolFee: Amount<'nat'>; + }; + }; +}; + +const feeToolsScenario = test.macro({ + title: (_, { name }: FeelToolsScenario) => `fee calcs: ${name}`, + exec: ( + t, + { config = aFeeConfig, requested, expected }: FeelToolsScenario, + ) => { + const { totalFee, advance, split } = expected; + const feeTools = makeFeeTools(harden(config)); + + const debugString = `expected:\n${q(feeTools.calculateSplit(requested)).toString()}`; + t.true( + isEqual(totalFee, add(split.ContractFee, split.PoolFee)), + `sanity check: total fee equals sum of splits. ${debugString}`, + ); + t.true( + isEqual(requested, add(totalFee, advance)), + `sanity check: requested equals advance plus fee. ${debugString}`, + ); + + t.deepEqual(feeTools.calculateAdvanceFee(requested), totalFee); + t.deepEqual(feeTools.calculateAdvance(requested), advance); + t.deepEqual(feeTools.calculateSplit(requested), { + ...split, + Principal: advance, + }); + }, +}); + +test(feeToolsScenario, { + name: 'below max variable fee', + requested: USDC(1000n), + expected: { + totalFee: USDC(30n), // 10 flat + 20 variable + advance: USDC(970n), + split: { + ContractFee: USDC(6n), + PoolFee: USDC(24n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'above max variable fee', + requested: USDC(10000n), + expected: { + totalFee: USDC(110n), // 10 flat + 100 max + advance: USDC(9890n), + split: { + ContractFee: USDC(22n), + PoolFee: USDC(88n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'zero variable fee', + requested: USDC(1000n), + config: { + ...aFeeConfig, + variableRate: USDCRatio(0n), + }, + expected: { + totalFee: USDC(10n), // only flat + advance: USDC(990n), + split: { + ContractFee: USDC(2n), + PoolFee: USDC(8n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'zero flat fee', + requested: USDC(1000n), + config: { + ...aFeeConfig, + flat: USDC(0n), + }, + expected: { + totalFee: USDC(20n), // only variable + advance: USDC(980n), + split: { + ContractFee: USDC(4n), + PoolFee: USDC(16n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'zero fees (free)', + requested: USDC(100n), + config: { + ...aFeeConfig, + flat: USDC(0n), + variableRate: USDCRatio(0n), + }, + expected: { + totalFee: USDC(0n), // no fee charged + advance: USDC(100n), + split: { + ContractFee: USDC(0n), + PoolFee: USDC(0n), + }, + }, +}); + +test(feeToolsScenario, { + // TODO consider behavior where 0 or undefined means "no fee cap" + name: 'only flat is charged if `maxVariable: 0`', + requested: USDC(10000n), + config: { + ...aFeeConfig, + variableRate: USDCRatio(20n), + maxVariable: USDC(0n), + }, + expected: { + totalFee: USDC(10n), // only flat + advance: USDC(9990n), + split: { + ContractFee: USDC(2n), + PoolFee: USDC(8n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'AGORIC_PLUS_OSMO with commonPrivateArgs.feeConfig', + // 150_000_000n + requested: USDC(MockCctpTxEvidences.AGORIC_PLUS_OSMO().tx.amount), + // same as commonPrivateArgs.feeConfig from `CommonSetup` + config: makeTestFeeConfig(withAmountUtils(issuerKits.USDC)), + expected: { + totalFee: USDC(3000001n), // 1n + min(2% of 150USDC, 5USDC) + advance: USDC(146999999n), + split: { + ContractFee: USDC(600000n), // 20% of fee + PoolFee: USDC(2400001n), + }, + }, +}); + +test(feeToolsScenario, { + name: 'AGORIC_PLUS_DYDX with commonPrivateArgs.feeConfig', + // 300_000_000n + requested: USDC(MockCctpTxEvidences.AGORIC_PLUS_DYDX().tx.amount), + // same as commonPrivateArgs.feeConfig from `CommonSetup` + config: makeTestFeeConfig(withAmountUtils(issuerKits.USDC)), + expected: { + totalFee: USDC(5000001n), // 1n + min(2% of 300USDC, 5USDC) + advance: USDC(294999999n), + split: { + ContractFee: USDC(1000000n), // 20% of fee + PoolFee: USDC(4000001n), + }, + }, +}); + +test('request must exceed fees', t => { + const feeTools = makeFeeTools(aFeeConfig); + + const expectedError = { message: 'Request must exceed fees.' }; + + for (const requested of [0n, 2n, 10n].map(USDC)) { + t.throws(() => feeTools.calculateAdvanceFee(requested), expectedError); + t.throws(() => feeTools.calculateAdvance(requested), expectedError); + t.throws(() => feeTools.calculateSplit(requested), expectedError); + } + // advance can be smaller than fee + t.is(feeTools.calculateAdvanceFee(USDC(11n)).value, 10n); +}); diff --git a/packages/fast-usdc/testing/mocks.ts b/packages/fast-usdc/testing/mocks.ts new file mode 100644 index 00000000000..92f6c885d45 --- /dev/null +++ b/packages/fast-usdc/testing/mocks.ts @@ -0,0 +1,66 @@ +export const mockOut = () => { + let logOut = ''; + let errOut = ''; + return { + log: (s: string) => (logOut += `${s}\n`), + error: (s: string) => (errOut += `${s}\n`), + getLogOut: () => logOut, + getErrOut: () => errOut, + }; +}; + +export const mockrl = (answer: string) => { + return { + question: () => Promise.resolve(answer), + close: () => {}, + }; +}; + +export const mockFile = (path: string, contents = '') => { + const read = async () => { + if (!contents) { + throw new Error(); + } + return contents; + }; + const write = async (val: string) => { + contents = val; + }; + const exists = () => !!contents; + + return { read, write, exists, path }; +}; + +export const makeVstorageMock = (records: { [key: string]: any }) => { + const queryCounts = {}; + const vstorage = { + readLatest: async (path: string) => { + queryCounts[path] = (queryCounts[path] ?? 0) + 1; + return records[path]; + }, + }; + + return { vstorage, getQueryCounts: () => queryCounts }; +}; + +export const makeFetchMock = (records: { [key: string]: any }) => { + const queryCounts = {}; + const fetch = async (path: string) => { + queryCounts[path] = (queryCounts[path] ?? 0) + 1; + return { json: async () => records[path] }; + }; + + return { fetch, getQueryCounts: () => queryCounts }; +}; + +export const makeMockSigner = () => { + let signedArgs; + const signer = { + signAndBroadcast: async (...args) => { + signedArgs = harden(args); + return { code: 0, transactionHash: 'SUCCESSHASH' }; + }, + }; + + return { getSigned: () => signedArgs, signer }; +}; diff --git a/packages/fast-usdc/tsconfig.json b/packages/fast-usdc/tsconfig.json index f690da86a72..de2e8c94eb8 100644 --- a/packages/fast-usdc/tsconfig.json +++ b/packages/fast-usdc/tsconfig.json @@ -5,5 +5,6 @@ "scripts", "src", "test", + "testing" ], } diff --git a/packages/governance/package.json b/packages/governance/package.json index 643dfa9b474..5026586c369 100644 --- a/packages/governance/package.json +++ b/packages/governance/package.json @@ -13,7 +13,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -31,7 +31,7 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", "@agoric/notifier": "^0.6.2", @@ -39,21 +39,21 @@ "@agoric/time": "^0.3.2", "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8", "import-meta-resolve": "^2.2.1" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", - "@endo/bundle-source": "^3.4.2", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/init": "^1.1.7", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "README.md", diff --git a/packages/governance/src/contractGovernance/paramManager.js b/packages/governance/src/contractGovernance/paramManager.js index ccafa4fc6b7..f79d9af10cc 100644 --- a/packages/governance/src/contractGovernance/paramManager.js +++ b/packages/governance/src/contractGovernance/paramManager.js @@ -120,7 +120,6 @@ const makeParamManagerBuilder = (publisherKit, zoe) => { }); // names are keywords so they will necessarily be TitleCase - // eslint-disable-next-line no-use-before-define getters[`get${name}`] = () => getTypedParam(type, name); // CRUCIAL: here we're creating the update functions that can change the // values of the governed contract's parameters. We'll return the updateFns @@ -292,7 +291,6 @@ const makeParamManagerBuilder = (publisherKit, zoe) => { getVisibleValue, }); - // eslint-disable-next-line no-use-before-define getters[`get${name}`] = () => getTypedParam(ParamTypes.INVITATION, name); // CRUCIAL: here we're creating the update functions that can change the // values of the governed contract's parameters. We'll return updateParams diff --git a/packages/governance/src/typeGuards.js b/packages/governance/src/typeGuards.js index 6e41726003d..acfd82f7c78 100644 --- a/packages/governance/src/typeGuards.js +++ b/packages/governance/src/typeGuards.js @@ -17,26 +17,31 @@ export const ElectionTypeShape = M.or( 'offer_filter', ); -export const ClosingRuleShape = harden({ +export const ClosingRuleShape = { timer: M.eref(TimerShape), deadline: TimestampShape, -}); +}; +harden(ClosingRuleShape); // all the strings that will be in the filter after passing -export const YesOfferFilterPositionShape = harden({ +export const YesOfferFilterPositionShape = { strings: M.arrayOf(M.string()), -}); -export const NoOfferFilterPositionShape = harden({ - dontUpdate: M.arrayOf(M.string()), -}); -export const OfferFilterPositionsShape = harden([ +}; +harden(YesOfferFilterPositionShape); + +export const NoOfferFilterPositionShape = { dontUpdate: M.arrayOf(M.string()) }; +harden(NoOfferFilterPositionShape); + +export const OfferFilterPositionsShape = [ YesOfferFilterPositionShape, NoOfferFilterPositionShape, -]); -export const OfferFilterIssueShape = harden({ - strings: M.arrayOf(M.string()), -}); -export const OfferFilterQuestionSpecShape = harden({ +]; +harden(OfferFilterPositionsShape); + +export const OfferFilterIssueShape = { strings: M.arrayOf(M.string()) }; +harden(OfferFilterIssueShape); + +export const OfferFilterQuestionSpecShape = { method: ChoiceMethodShape, issue: OfferFilterIssueShape, positions: OfferFilterPositionsShape, @@ -46,34 +51,41 @@ export const OfferFilterQuestionSpecShape = harden({ closingRule: ClosingRuleShape, quorumRule: QuorumRuleShape, tieOutcome: NoOfferFilterPositionShape, -}); -export const OfferFilterQuestionDetailsShape = harden({ +}; +harden(OfferFilterQuestionSpecShape); + +export const OfferFilterQuestionDetailsShape = { ...OfferFilterQuestionSpecShape, questionHandle: makeHandleShape('Question'), counterInstance: InstanceHandleShape, -}); +}; +harden(OfferFilterQuestionDetailsShape); // keys are parameter names, values are proposed values export const ParamChangesSpecShape = M.recordOf(M.string(), M.any()); export const YesParamChangesPositionShape = ParamChangesSpecShape; -export const NoParamChangesPositionShape = harden({ - noChange: M.arrayOf(M.string()), -}); -export const ParamChangesPositionsShape = harden([ +export const NoParamChangesPositionShape = { noChange: M.arrayOf(M.string()) }; +harden(NoParamChangesPositionShape); + +export const ParamChangesPositionsShape = [ YesParamChangesPositionShape, NoParamChangesPositionShape, -]); -export const ParamPathShape = harden({ - key: M.any(), -}); -export const ParamChangesIssueShape = harden({ +]; +harden(ParamChangesPositionsShape); + +export const ParamPathShape = { key: M.any() }; +harden(ParamPathShape); + +export const ParamChangesIssueShape = { spec: { paramPath: ParamPathShape, changes: ParamChangesSpecShape, }, contract: InstanceHandleShape, -}); -export const ParamChangesQuestionSpecShape = harden({ +}; +harden(ParamChangesIssueShape); + +export const ParamChangesQuestionSpecShape = { method: 'unranked', issue: ParamChangesIssueShape, positions: ParamChangesPositionsShape, @@ -83,27 +95,33 @@ export const ParamChangesQuestionSpecShape = harden({ closingRule: ClosingRuleShape, quorumRule: 'majority', tieOutcome: NoParamChangesPositionShape, -}); +}; +harden(ParamChangesQuestionSpecShape); -export const ParamChangesQuestionDetailsShape = harden({ +export const ParamChangesQuestionDetailsShape = { ...ParamChangesQuestionSpecShape, questionHandle: makeHandleShape('Question'), counterInstance: InstanceHandleShape, -}); +}; +harden(ParamChangesQuestionDetailsShape); -const ApiInvocationSpecShape = harden({ +const ApiInvocationSpecShape = { apiMethodName: M.string(), methodArgs: M.arrayOf(M.any()), -}); +}; +harden(ApiInvocationSpecShape); + export const YesApiInvocationPositionShape = ApiInvocationSpecShape; -export const NoApiInvocationPositionShape = harden({ - dontInvoke: M.string(), -}); -export const ApiInvocationPositionsShape = harden([ +export const NoApiInvocationPositionShape = { dontInvoke: M.string() }; +harden(NoApiInvocationPositionShape); + +export const ApiInvocationPositionsShape = [ YesApiInvocationPositionShape, NoApiInvocationPositionShape, -]); -export const ApiInvocationQuestionSpecShape = harden({ +]; +harden(ApiInvocationPositionsShape); + +export const ApiInvocationQuestionSpecShape = { method: 'unranked', issue: ApiInvocationSpecShape, positions: ApiInvocationPositionsShape, @@ -113,39 +131,53 @@ export const ApiInvocationQuestionSpecShape = harden({ closingRule: ClosingRuleShape, quorumRule: QuorumRuleShape, tieOutcome: NoApiInvocationPositionShape, -}); -export const ApiInvocationQuestionDetailsShape = harden({ +}; +harden(ApiInvocationQuestionSpecShape); + +export const ApiInvocationQuestionDetailsShape = { ...ApiInvocationQuestionSpecShape, questionHandle: makeHandleShape('Question'), counterInstance: InstanceHandleShape, -}); +}; +harden(ApiInvocationQuestionDetailsShape); -const SimpleSpecShape = harden({ - text: M.string(), -}); -export const YesSimplePositionShape = harden({ text: M.string() }); -export const NoSimplePositionShape = harden({ text: M.string() }); -export const SimplePositionsShape = harden([ +const SimpleSpecShape = { text: M.string() }; +harden(SimpleSpecShape); + +export const YesSimplePositionShape = { text: M.string() }; +harden(YesSimplePositionShape); + +export const NoSimplePositionShape = { text: M.string() }; +harden(NoSimplePositionShape); + +export const SimplePositionsShape = [ YesSimplePositionShape, NoSimplePositionShape, -]); +]; +harden(SimplePositionsShape); + export const SimpleIssueShape = SimpleSpecShape; -export const SimpleQuestionSpecShape = harden({ +harden(SimpleIssueShape); + +export const SimpleQuestionSpecShape = { method: ChoiceMethodShape, issue: SimpleIssueShape, - positions: M.arrayOf(harden({ text: M.string() })), + positions: M.arrayOf({ text: M.string() }), electionType: M.or('election', 'survey'), maxChoices: M.gte(1), maxWinners: M.gte(1), closingRule: ClosingRuleShape, quorumRule: QuorumRuleShape, tieOutcome: NoSimplePositionShape, -}); -export const SimpleQuestionDetailsShape = harden({ +}; +harden(SimpleQuestionSpecShape); + +export const SimpleQuestionDetailsShape = { ...SimpleQuestionSpecShape, questionHandle: makeHandleShape('Question'), counterInstance: InstanceHandleShape, -}); +}; +harden(SimpleQuestionDetailsShape); export const QuestionSpecShape = M.or( ApiInvocationQuestionSpecShape, @@ -199,11 +231,12 @@ export const ElectorateCreatorI = M.interface('Committee AdminFacet', { getPublicFacet: M.call().returns(ElectoratePublicShape), }); -export const QuestionStatsShape = harden({ +export const QuestionStatsShape = { spoiled: M.nat(), votes: M.nat(), results: M.arrayOf({ position: PositionShape, total: M.nat() }), -}); +}; +harden(QuestionStatsShape); export const QuestionI = M.interface('Question', { getVoteCounter: M.call().returns(InstanceHandleShape), diff --git a/packages/import-manager/package.json b/packages/import-manager/package.json index 18016783487..a1a278a5edc 100644 --- a/packages/import-manager/package.json +++ b/packages/import-manager/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint": "yarn lint:eslint", "lint-fix": "yarn lint:eslint --fix", @@ -32,7 +32,7 @@ "devDependencies": { "@agoric/swingset-vat": "^0.32.2", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "src/", diff --git a/packages/inter-protocol/package.json b/packages/inter-protocol/package.json index b2815e7b0a1..76f545f1e35 100644 --- a/packages/inter-protocol/package.json +++ b/packages/inter-protocol/package.json @@ -13,7 +13,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -31,7 +31,7 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/ertp": "^0.16.2", "@agoric/governance": "^0.10.3", "@agoric/internal": "^0.3.2", @@ -41,12 +41,12 @@ "@agoric/vat-data": "^0.5.2", "@agoric/vats": "^0.15.1", "@agoric/zoe": "^0.26.2", - "@endo/captp": "^4.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7", + "@endo/captp": "^4.4.3", + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8", "jessie.js": "^0.3.4" }, "devDependencies": { @@ -54,12 +54,12 @@ "@agoric/swingset-liveslots": "^0.10.2", "@agoric/swingset-vat": "^0.32.2", "@agoric/zone": "^0.2.2", - "@endo/bundle-source": "^3.4.2", - "@endo/init": "^1.1.6", - "@endo/promise-kit": "^1.1.7", + "@endo/bundle-source": "^3.5.0", + "@endo/init": "^1.1.7", + "@endo/promise-kit": "^1.1.8", "@fast-check/ava": "^1.1.5", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "deep-object-diff": "^1.1.9", "import-meta-resolve": "^2.2.1" }, diff --git a/packages/inter-protocol/src/auction/auctioneer.js b/packages/inter-protocol/src/auction/auctioneer.js index 28d06979b55..a09589c9a7e 100644 --- a/packages/inter-protocol/src/auction/auctioneer.js +++ b/packages/inter-protocol/src/auction/auctioneer.js @@ -586,7 +586,6 @@ export const start = async (zcf, privateArgs, baggage) => { }, }); - // eslint-disable-next-line no-use-before-define const isActive = () => scheduler.getAuctionState() === AuctionState.ACTIVE; /** @@ -653,7 +652,6 @@ export const start = async (zcf, privateArgs, baggage) => { ); }, getSchedules() { - // eslint-disable-next-line no-use-before-define return scheduler.getSchedule(); }, getScheduleUpdates() { diff --git a/packages/inter-protocol/src/auction/scheduler.js b/packages/inter-protocol/src/auction/scheduler.js index 57ead7b8d97..68eaa038a99 100644 --- a/packages/inter-protocol/src/auction/scheduler.js +++ b/packages/inter-protocol/src/auction/scheduler.js @@ -244,7 +244,6 @@ export const makeScheduler = async ( try { setTimeMonotonically(time); auctionDriver.capturePrices(); - // eslint-disable-next-line no-use-before-define return startAuction(); } catch (e) { console.error(`⚠️ Auction threw ${e}. Caught in SchedulerWaker.`); diff --git a/packages/inter-protocol/src/provisionPoolKit.js b/packages/inter-protocol/src/provisionPoolKit.js index 4e1c71aa704..ee05ea5cc06 100644 --- a/packages/inter-protocol/src/provisionPoolKit.js +++ b/packages/inter-protocol/src/provisionPoolKit.js @@ -37,6 +37,15 @@ const FIRST_LOWER_NEAR_KEYWORD = /^[a-z][a-zA-Z0-9_$]*$/; * @import {Bank, BankManager} from '@agoric/vats/src/vat-bank.js' */ +// XXX when inferred, error TS2742: cannot be named without a reference to '../../../node_modules/@endo/exo/src/get-interface.js'. This is likely not portable. A type annotation is necessary. +/** + * @typedef {{ + * machine: any; + * helper: any; + * public: any; + * }} ProvisionPoolKit + */ + /** * @typedef {import('@agoric/zoe/src/zoeService/utils.js').Instance< * import('@agoric/inter-protocol/src/psm/psm.js').start @@ -506,6 +515,7 @@ export const prepareProvisionPoolKit = ( * @param {object} opts * @param {Brand<'nat'>} opts.poolBrand * @param {ERef} opts.storageNode + * @returns {Promise} */ const makeProvisionPoolKit = async ({ poolBrand, storageNode }) => { const fundPurse = await E(poolBank).getPurse(poolBrand); diff --git a/packages/inter-protocol/src/reserve/params.js b/packages/inter-protocol/src/reserve/params.js index 5da75a96fdc..f7e8aa2eac5 100644 --- a/packages/inter-protocol/src/reserve/params.js +++ b/packages/inter-protocol/src/reserve/params.js @@ -2,8 +2,10 @@ import { CONTRACT_ELECTORATE, ParamTypes } from '@agoric/governance'; -const makeReserveTerms = (poserInvitationAmount, timer) => ({ - timer, +/** + * @param {InvitationAmount} poserInvitationAmount + */ +const makeReserveTerms = poserInvitationAmount => ({ governedParams: harden({ [CONTRACT_ELECTORATE]: { type: ParamTypes.INVITATION, diff --git a/packages/inter-protocol/test/psm/setupPsm.js b/packages/inter-protocol/test/psm/setupPsm.js index f00a283c05b..895ff2679c6 100644 --- a/packages/inter-protocol/test/psm/setupPsm.js +++ b/packages/inter-protocol/test/psm/setupPsm.js @@ -100,8 +100,8 @@ export const setupPsm = async ( brand.produce.IST.resolve(istBrand); issuer.produce.IST.resolve(istIssuer); + // @ts-expect-error mock space.produce.provisionPoolStartResult.resolve({ - // @ts-expect-error mock creatorFacet: Far('dummy', { initPSM: () => { t.log('dummy provisionPool.initPSM'); diff --git a/packages/internal/package.json b/packages/internal/package.json index 4ebd92eb032..940810d3230 100755 --- a/packages/internal/package.json +++ b/packages/internal/package.json @@ -20,23 +20,23 @@ "lint:types": "tsc" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/base-zone": "^0.1.0", - "@endo/common": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", - "@endo/stream": "^1.2.7", + "@endo/common": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", + "@endo/stream": "^1.2.8", "anylogger": "^0.21.0", "jessie.js": "^0.3.4" }, "devDependencies": { "@agoric/cosmic-proto": "^0.4.0", - "@endo/exo": "^1.5.6", - "@endo/init": "^1.1.6", + "@endo/exo": "^1.5.7", + "@endo/init": "^1.1.7", "ava": "^5.3.0", "tsd": "^0.31.1" }, diff --git a/packages/internal/src/chain-utils.js b/packages/internal/src/chain-utils.js index fe1716a6016..264c3391b1d 100644 --- a/packages/internal/src/chain-utils.js +++ b/packages/internal/src/chain-utils.js @@ -25,6 +25,7 @@ import * as _ActionType from './action-types.js'; * @typedef {BlockInfo & { * type: typeof _ActionType.AG_COSMOS_INIT; * chainID: string; + * isBootstrap?: boolean; * supplyCoins: { denom: string; amount: NatString }[]; * }} InitMsg * cosmosInitAction fields that are subject to consensus. See cosmosInitAction diff --git a/packages/internal/src/netstring.js b/packages/internal/src/netstring.js index 38d4fff30ef..fe7d5b49b42 100644 --- a/packages/internal/src/netstring.js +++ b/packages/internal/src/netstring.js @@ -89,6 +89,7 @@ export function decode(data, optMaxChunkSize) { */ // input is a byte pipe, output is a sequence of Buffers export function netstringDecoderStream(optMaxChunkSize) { + /** @type {Buffer} */ let buffered = Buffer.from(''); /** * @param {Buffer} chunk diff --git a/packages/internal/src/node/fs-stream.js b/packages/internal/src/node/fs-stream.js index 8e7ae36a48b..5d3da5edafe 100644 --- a/packages/internal/src/node/fs-stream.js +++ b/packages/internal/src/node/fs-stream.js @@ -21,13 +21,13 @@ export const fsStreamReady = stream => } const onReady = () => { - cleanup(); // eslint-disable-line no-use-before-define + cleanup(); resolve(); }; /** @param {Error} err */ const onError = err => { - cleanup(); // eslint-disable-line no-use-before-define + cleanup(); reject(err); }; diff --git a/packages/internal/src/node/shutdown.js b/packages/internal/src/node/shutdown.js index 400b66bde06..fa7b4c01699 100644 --- a/packages/internal/src/node/shutdown.js +++ b/packages/internal/src/node/shutdown.js @@ -22,7 +22,6 @@ export const makeFreshShutdown = (verbose = true) => { process.off('SIGINT', shutdown); process.off('SIGTERM', shutdown); process.off('beforeExit', shutdown); - // eslint-disable-next-line no-use-before-define process.off('uncaughtException', uncaughtShutdown); verbose && console.error(`Shutting down cleanly...`); const shutdowners = [...shutdownThunks.keys()]; diff --git a/packages/kmarshal/package.json b/packages/kmarshal/package.json index dfd8e146b51..a7511c5e812 100644 --- a/packages/kmarshal/package.json +++ b/packages/kmarshal/package.json @@ -13,7 +13,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -21,9 +21,9 @@ "lint:eslint": "eslint ." }, "dependencies": { - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/errors": "^1.2.7" + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/errors": "^1.2.8" }, "devDependencies": { "ava": "^5.3.0" diff --git a/packages/network/package.json b/packages/network/package.json index 90467360056..9ec6d9b1984 100644 --- a/packages/network/package.json +++ b/packages/network/package.json @@ -10,7 +10,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -21,24 +21,24 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", "@agoric/vat-data": "^0.5.2", - "@endo/base64": "^1.0.8", - "@endo/far": "^1.1.8", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/base64": "^1.0.9", + "@endo/far": "^1.1.9", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/swingset-liveslots": "^0.10.2", "@agoric/swingset-vat": "^0.32.2", "@agoric/vow": "^0.1.0", "@agoric/zone": "^0.2.2", - "@endo/bundle-source": "^3.4.2", + "@endo/bundle-source": "^3.5.0", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "exports": { ".": "./src/index.js" diff --git a/packages/network/test/fakes.js b/packages/network/test/fakes.js index 9ad80dca982..566c605ce05 100644 --- a/packages/network/test/fakes.js +++ b/packages/network/test/fakes.js @@ -13,7 +13,6 @@ import { * @import {ListenHandler, MakeEchoConnectionKit} from '../src/index.js'; */ -// eslint-disable-next-line no-constant-condition const log = false ? console.log : () => {}; /** diff --git a/packages/notifier/package.json b/packages/notifier/package.json index 04d51a39b9b..b52f0499548 100644 --- a/packages/notifier/package.json +++ b/packages/notifier/package.json @@ -12,7 +12,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -33,23 +33,23 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/vat-data": "^0.5.2", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/kmarshal": "^0.1.0", "@agoric/swingset-liveslots": "^0.10.2", "@agoric/swing-store": "^0.9.1", "@agoric/swingset-vat": "^0.32.2", - "@endo/init": "^1.1.6", - "@endo/ses-ava": "^1.2.7", + "@endo/init": "^1.1.7", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "exports": { ".": "./src/index.js", diff --git a/packages/notifier/src/types.ts b/packages/notifier/src/types.ts index 972ce7cf0c0..30d1281ea9d 100644 --- a/packages/notifier/src/types.ts +++ b/packages/notifier/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { StoredFacet, Unserializer, diff --git a/packages/notifier/test/makeNotifierFromSubscriber.test.js b/packages/notifier/test/makeNotifierFromSubscriber.test.js index 1193296736f..8ba52d65aeb 100644 --- a/packages/notifier/test/makeNotifierFromSubscriber.test.js +++ b/packages/notifier/test/makeNotifierFromSubscriber.test.js @@ -75,7 +75,6 @@ test('makeNotifierFromSubscriber(finishes) - getUpdateSince', async t => { const results = []; let updateCount; - // eslint-disable-next-line no-constant-condition while (true) { const result = await notifier.getUpdateSince(updateCount); ({ updateCount } = result); @@ -137,7 +136,6 @@ test('makeNotifierFromSubscriber(fails) - getUpdateSince', async t => { const results = []; let updateCount; try { - // eslint-disable-next-line no-constant-condition while (true) { const result = await notifier.getUpdateSince(updateCount); ({ updateCount } = result); diff --git a/packages/notifier/test/map-unum.js b/packages/notifier/test/map-unum.js index a0da12b78c8..46039f29a7e 100644 --- a/packages/notifier/test/map-unum.js +++ b/packages/notifier/test/map-unum.js @@ -23,7 +23,6 @@ export const makeMapLeader = initialEntries => { const change = delta => { if (deltaCount >= m.size) { - // eslint-disable-next-line no-use-before-define snapshot(); } else { deltaPublication.updateState(delta); diff --git a/packages/orchestration/index.js b/packages/orchestration/index.js index 9440115c5e6..d218e68c57a 100644 --- a/packages/orchestration/index.js +++ b/packages/orchestration/index.js @@ -10,3 +10,5 @@ export * from './src/typeGuards.js'; export * from './src/utils/denomHash.js'; export { withOrchestration } from './src/utils/start-helper.js'; +export { withChainCapabilities } from './src/chain-capabilities.js'; +export { registerChainsAndAssets } from './src/utils/chain-hub-helper.js'; diff --git a/packages/orchestration/package.json b/packages/orchestration/package.json index 7cf66699adf..6aee32e2e0e 100644 --- a/packages/orchestration/package.json +++ b/packages/orchestration/package.json @@ -14,7 +14,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint": "run-s --continue-on-error lint:*", "lint:types": "tsc", @@ -46,11 +46,11 @@ "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/base64": "^1.0.8", - "@endo/errors": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/patterns": "^1.4.6", + "@endo/base64": "^1.0.9", + "@endo/errors": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/patterns": "^1.4.7", "@noble/hashes": "^1.5.0" }, "devDependencies": { @@ -58,11 +58,11 @@ "@chain-registry/client": "^1.47.4", "@cosmjs/amino": "^0.32.3", "@cosmjs/proto-signing": "^0.32.3", - "@endo/bundle-source": "^3.4.2", - "@endo/import-bundle": "^1.3.1", - "@endo/ses-ava": "^1.2.7", + "@endo/bundle-source": "^3.5.0", + "@endo/import-bundle": "^1.3.2", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.1", - "c8": "^9.1.0", + "c8": "^10.1.2", "prettier": "^3.3.2", "ts-blank-space": "^0.4.1" }, diff --git a/packages/orchestration/scripts/fetch-chain-info.ts b/packages/orchestration/scripts/fetch-chain-info.ts index 9634dfc884e..e304d6993d9 100755 --- a/packages/orchestration/scripts/fetch-chain-info.ts +++ b/packages/orchestration/scripts/fetch-chain-info.ts @@ -1,4 +1,4 @@ -#!/usr/bin/env tsx +#!/usr/bin/env TS_BLANK_SPACE_EMIT=false node --import ts-blank-space/register /** @file Fetch canonical chain info to generate the minimum needed for agoricNames */ import { ChainRegistryClient } from '@chain-registry/client'; import fsp from 'node:fs/promises'; diff --git a/packages/orchestration/src/chain-capabilities.js b/packages/orchestration/src/chain-capabilities.js new file mode 100644 index 00000000000..20dfbdc4e07 --- /dev/null +++ b/packages/orchestration/src/chain-capabilities.js @@ -0,0 +1,60 @@ +/** + * @file Contains ChainInfo that not available from a well-known chain registry. + */ + +import { objectMap } from '@endo/patterns'; + +/** @import {CosmosChainInfo, KnownChains} from '@agoric/orchestration'; */ + +/** + * Chains with the async-icq (icq-1) module available. + * + * @satisfies {Partial>} + */ +const IcqEnabled = /** @type {const} */ ({ + omniflixhub: true, + osmosis: true, +}); +harden(IcqEnabled); + +/** + * Chains with the packet-forward-middleware module available. + * + * @satisfies {Partial>} + */ +const PfmEnabled = /** @type {const} */ ({ + agoric: true, + celestia: true, + cosmoshub: true, + juno: true, + neutron: true, + noble: true, + omniflixhub: true, + osmosis: true, + secretnetwork: true, + stargaze: true, + stride: true, + umee: true, +}); +harden(PfmEnabled); + +/** + * @param {Record} chainInfo + * @param {{ + * PfmEnabled: Record; + * IcqEnabled: Record; + * }} [opts] + */ +export const withChainCapabilities = ( + chainInfo, + opts = { + PfmEnabled, + IcqEnabled, + }, +) => { + return objectMap(chainInfo, (info, name) => ({ + ...info, + pfmEnabled: !!opts.PfmEnabled[name], + icqEnabled: !!opts.IcqEnabled[name], + })); +}; diff --git a/packages/orchestration/src/cosmos-api.ts b/packages/orchestration/src/cosmos-api.ts index b718b7fa916..298878634b9 100644 --- a/packages/orchestration/src/cosmos-api.ts +++ b/packages/orchestration/src/cosmos-api.ts @@ -97,7 +97,11 @@ export type CosmosChainInfo = Readonly<{ connections?: Record; // chainId or wellKnownName // UNTIL https://github.com/Agoric/agoric-sdk/issues/9326 icqEnabled?: boolean; - + /** + * Note: developers must provide this value themselves for `.transfer` to work + * as expected. Please see examples for details. + */ + pfmEnabled?: boolean; /** * cf https://github.com/cosmos/chain-registry/blob/master/chain.schema.json#L117 */ @@ -296,7 +300,7 @@ export interface LiquidStakingMethods { /** Methods supported only on Agoric chain accounts */ export interface LocalAccountMethods extends StakingAccountActions { /** deposit payment (from zoe, for example) to the account */ - deposit: (payment: Payment<'nat'>) => Promise; + deposit: (payment: Payment<'nat'>) => Promise>; /** withdraw a Payment from the account */ withdraw: (amount: Amount<'nat'>) => Promise>; /** diff --git a/packages/orchestration/src/examples/send-anywhere.contract.js b/packages/orchestration/src/examples/send-anywhere.contract.js index 3cfab6ec922..3d2065de836 100644 --- a/packages/orchestration/src/examples/send-anywhere.contract.js +++ b/packages/orchestration/src/examples/send-anywhere.contract.js @@ -4,6 +4,7 @@ import { M } from '@endo/patterns'; import { prepareChainHubAdmin } from '../exos/chain-hub-admin.js'; import { AnyNatAmountShape } from '../typeGuards.js'; import { withOrchestration } from '../utils/start-helper.js'; +import { registerChainsAndAssets } from '../utils/chain-hub-helper.js'; import * as flows from './send-anywhere.flows.js'; import * as sharedFlows from './shared.flows.js'; @@ -11,6 +12,7 @@ import * as sharedFlows from './shared.flows.js'; * @import {Vow} from '@agoric/vow'; * @import {Zone} from '@agoric/zone'; * @import {OrchestrationPowers, OrchestrationTools} from '../utils/start-helper.js'; + * @import {CosmosChainInfo, Denom, DenomDetail} from '@agoric/orchestration'; */ export const SingleNatAmountRecord = M.and( @@ -27,6 +29,8 @@ harden(SingleNatAmountRecord); * @param {ZCF} zcf * @param {OrchestrationPowers & { * marshaller: Marshaller; + * chainInfo?: Record; + * assetInfo?: Record; * }} privateArgs * @param {Zone} zone * @param {OrchestrationTools} tools @@ -82,6 +86,13 @@ export const contract = async ( }, ); + registerChainsAndAssets( + chainHub, + zcf.getTerms().brands, + privateArgs.chainInfo, + privateArgs.assetInfo, + ); + return { publicFacet, creatorFacet }; }; harden(contract); diff --git a/packages/orchestration/src/examples/staking-combinations.contract.js b/packages/orchestration/src/examples/staking-combinations.contract.js index 0f233c85fdf..b38da6633d6 100644 --- a/packages/orchestration/src/examples/staking-combinations.contract.js +++ b/packages/orchestration/src/examples/staking-combinations.contract.js @@ -75,7 +75,6 @@ const contract = async ( * @param {{ validator: CosmosValidatorAddress }} offerArgs */ (seat, { validator }) => - // eslint-disable-next-line no-use-before-define -- defined by orchestrateAll, necessarily after this orchFns.depositAndDelegate(account, seat, validator), 'Deposit and delegate', undefined, @@ -98,7 +97,6 @@ const contract = async ( return zcf.makeInvitation( () => - // eslint-disable-next-line no-use-before-define -- defined by orchestrateAll, necessarily after this orchFns.undelegateAndTransfer(account, { delegations, destination, diff --git a/packages/orchestration/src/exos/chain-hub-admin.js b/packages/orchestration/src/exos/chain-hub-admin.js index e790257b3b4..2a365508ebe 100644 --- a/packages/orchestration/src/exos/chain-hub-admin.js +++ b/packages/orchestration/src/exos/chain-hub-admin.js @@ -2,8 +2,7 @@ /* eslint-disable no-restricted-syntax */ import { heapVowE } from '@agoric/vow/vat.js'; import { M } from '@endo/patterns'; -import { CosmosChainInfoShape } from '../typeGuards.js'; -import { DenomDetailShape } from './chain-hub.js'; +import { CosmosChainInfoShape, DenomDetailShape } from '../typeGuards.js'; /** * @import {Zone} from '@agoric/zone'; diff --git a/packages/orchestration/src/exos/chain-hub.js b/packages/orchestration/src/exos/chain-hub.js index 3cc0ff20fe4..a782294256c 100644 --- a/packages/orchestration/src/exos/chain-hub.js +++ b/packages/orchestration/src/exos/chain-hub.js @@ -7,6 +7,7 @@ import { VowShape } from '@agoric/vow'; import { ChainAddressShape, CosmosChainInfoShape, + DenomDetailShape, IBCConnectionInfoShape, } from '../typeGuards.js'; import { getBech32Prefix } from '../utils/address.js'; @@ -19,7 +20,6 @@ import { getBech32Prefix } from '../utils/address.js'; * @import {ChainInfo, KnownChains} from '../chain-info.js'; * @import {ChainAddress, Denom} from '../orchestration-api.js'; * @import {Remote} from '@agoric/internal'; - * @import {TypedPattern} from '@agoric/internal'; */ /** @@ -40,11 +40,6 @@ import { getBech32Prefix } from '../utils/address.js'; * @property {Brand<'nat'>} [brand] - vbank brand, if registered * @see {ChainHub} `registerAsset` method */ -/** @type {TypedPattern} */ -export const DenomDetailShape = M.splitRecord( - { chainName: M.string(), baseName: M.string(), baseDenom: M.string() }, - { brand: BrandShape }, -); /** * @enum {(typeof HubName)[keyof typeof HubName]} @@ -283,7 +278,6 @@ export const makeChainHub = (zone, agoricNames, vowTools) => { }, ); - /* eslint-disable no-use-before-define -- chainHub defined below */ const lookupChainsAndConnection = vowTools.retryable( zone, 'lookupChainsAndConnection', @@ -445,6 +439,7 @@ export const makeChainHub = (zone, agoricNames, vowTools) => { /** * @param {string} address bech32 address * @returns {ChainAddress} + * @throws {Error} if chain info not found for bech32Prefix */ makeChainAddress(address) { const prefix = getBech32Prefix(address); diff --git a/packages/orchestration/src/exos/cosmos-interchain-service.js b/packages/orchestration/src/exos/cosmos-interchain-service.js index 5724cc9490a..16c182d5d3a 100644 --- a/packages/orchestration/src/exos/cosmos-interchain-service.js +++ b/packages/orchestration/src/exos/cosmos-interchain-service.js @@ -25,7 +25,7 @@ import { prepareICQConnectionKit } from './icq-connection-kit.js'; const { Vow$ } = NetworkShape; // TODO #9611 /** - * @typedef {object} OrchestrationPowers + * @typedef {object} CosmosOrchestrationPowers * @property {Remote} portAllocator * @property {undefined} reserved reserve a state key for future use. can hold * an additional power or a record of powers @@ -39,7 +39,7 @@ const { Vow$ } = NetworkShape; // TODO #9611 * @typedef {{ * icqConnections: ICQConnectionStore; * sharedICQPort: Remote | undefined; - * } & OrchestrationPowers} OrchestrationState + * } & CosmosOrchestrationPowers} OrchestrationState */ /** @@ -101,7 +101,7 @@ const prepareCosmosOrchestrationServiceKit = ( .returns(Vow$(M.remotable('ICQConnection'))), }), }, - /** @param {Partial} powers */ + /** @param {Partial} powers */ powers => { mustMatch(powers?.portAllocator, M.remotable('PortAllocator')); const icqConnections = zone.detached().mapStore('ICQConnections'); diff --git a/packages/orchestration/src/exos/packet-tools.js b/packages/orchestration/src/exos/packet-tools.js index a4ba79c2455..2b873ebc2eb 100644 --- a/packages/orchestration/src/exos/packet-tools.js +++ b/packages/orchestration/src/exos/packet-tools.js @@ -126,7 +126,7 @@ export const preparePacketTools = (zone, vowTools) => { const resolverToPattern = zone.detached().mapStore('resolverToPattern'); return { lca, - reg: /** @type {Remote | null} */ (null), + reg: /** @type {Vow | null} */ (null), resolverToPattern, upcallQueue: /** @type {any[] | null} */ (null), pending: 0, @@ -327,23 +327,19 @@ export const preparePacketTools = (zone, vowTools) => { } this.state.pending = 0; this.state.upcallQueue = null; - // FIXME when it returns undefined this causes an error: - // In "unsubscribeFromTransfers" method of (PacketToolsKit utils): result: undefined "[undefined]" - Must be a promise return watch(this.facets.utils.unsubscribeFromTransfers()); }, subscribeToTransfers() { // Subscribe to the transfers for this account. - const { lca, reg } = this.state; - if (reg) { - return when(reg); + const { lca, reg: cachedReg } = this.state; + if (cachedReg) { + return when(cachedReg); } + // Atomically update the registration. const { tap } = this.facets; - // XXX racy; fails if subscribeToTransfers is called while this promise is in flight - // e.g. 'Target "agoric1fakeLCAAddress" already registered' - return when(E(lca).monitorTransfers(tap), r => { - this.state.reg = r; - return r; - }); + const reg = watch(E(lca).monitorTransfers(tap)); + this.state.reg = reg; + return when(reg); }, unsubscribeFromTransfers() { const { reg, monitor } = this.state; diff --git a/packages/orchestration/src/facade.js b/packages/orchestration/src/facade.js index d2fe5b595d8..65de08c9e78 100644 --- a/packages/orchestration/src/facade.js +++ b/packages/orchestration/src/facade.js @@ -119,7 +119,6 @@ export const makeOrchestrationFacade = ({ const mappedFlows = new Map( Object.entries(guestFns).map(([name, guestFn]) => [ guestFn, - // eslint-disable-next-line no-use-before-define (...args) => orcFns[name](...args), ]), ); diff --git a/packages/orchestration/src/orchestration-api.ts b/packages/orchestration/src/orchestration-api.ts index 986c66ea10f..50830862c05 100644 --- a/packages/orchestration/src/orchestration-api.ts +++ b/packages/orchestration/src/orchestration-api.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ /** * @file General API of orchestration * - must not have chain-specific types without runtime narrowing by chain id @@ -103,6 +102,9 @@ export interface Chain { // TODO provide a way to get the local denom/brand/whatever for this chain } +/** + * Used with `orch.getDenomInfo('ibc/1234')`. See {@link Orchestrator.getDenomInfo} + */ export interface DenomInfo< HoldingChain extends keyof KnownChains, IssuingChain extends keyof KnownChains, diff --git a/packages/builders/scripts/testing/start-send-anywhere.js b/packages/orchestration/src/proposals/start-send-anywhere.js similarity index 53% rename from packages/builders/scripts/testing/start-send-anywhere.js rename to packages/orchestration/src/proposals/start-send-anywhere.js index e29d043ccb8..a50d87f3f7f 100644 --- a/packages/builders/scripts/testing/start-send-anywhere.js +++ b/packages/orchestration/src/proposals/start-send-anywhere.js @@ -1,7 +1,3 @@ -/** - * @file This is for use in tests in a3p-integration - * Unlike most builder scripts, this one includes the proposal exports as well. - */ import { deeplyFulfilledObject, makeTracer, @@ -12,6 +8,7 @@ import { E } from '@endo/far'; /// /** * @import {Installation} from '@agoric/zoe/src/zoeService/utils.js'; + * @import {CosmosChainInfo, Denom, DenomDetail} from '@agoric/orchestration'; */ const trace = makeTracer('StartSA', true); @@ -28,28 +25,37 @@ const trace = makeTracer('StartSA', true); * }; * }; * }} powers + * @param {{ + * options: { + * chainInfo: Record; + * assetInfo: Record; + * }; + * }} config */ -export const startSendAnywhere = async ({ - consume: { - agoricNames, - board, - chainStorage, - chainTimerService, - cosmosInterchainService, - localchain, - startUpgradable, - }, - installation: { - consume: { sendAnywhere }, - }, - instance: { - // @ts-expect-error unknown instance - produce: { sendAnywhere: produceInstance }, - }, - issuer: { - consume: { IST }, +export const startSendAnywhere = async ( + { + consume: { + agoricNames, + board, + chainStorage, + chainTimerService, + cosmosInterchainService, + localchain, + startUpgradable, + }, + installation: { + consume: { sendAnywhere }, + }, + instance: { + // @ts-expect-error unknown instance + produce: { sendAnywhere: produceInstance }, + }, + issuer: { + consume: { IST }, + }, }, -}) => { + { options: { chainInfo, assetInfo } }, +) => { trace(startSendAnywhere.name); const marshaller = await E(board).getReadonlyMarshaller(); @@ -64,6 +70,8 @@ export const startSendAnywhere = async ({ 'send-anywhere', ), timerService: chainTimerService, + chainInfo, + assetInfo, }), ); @@ -78,7 +86,7 @@ export const startSendAnywhere = async ({ }; harden(startSendAnywhere); -export const getManifest = ({ restoreRef }, { installationRef }) => { +export const getManifest = ({ restoreRef }, { installationRef, options }) => { return { manifest: { [startSendAnywhere.name]: { @@ -106,31 +114,6 @@ export const getManifest = ({ restoreRef }, { installationRef }) => { installations: { sendAnywhere: restoreRef(installationRef), }, + options, }; }; - -/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').CoreEvalBuilder} */ -export const defaultProposalBuilder = async ({ publishRef, install }) => - harden({ - // Somewhat unorthodox, source the exports from this builder module - sourceSpec: '@agoric/builders/scripts/testing/start-send-anywhere.js', - getManifestCall: [ - getManifest.name, - { - installationRef: publishRef( - install( - '@agoric/orchestration/src/examples/send-anywhere.contract.js', - ), - ), - }, - ], - }); - -/** @type {import('@agoric/deploy-script-support/src/externalTypes.js').DeployScriptFunction} */ -export default async (homeP, endowments) => { - // import dynamically so the module can work in CoreEval environment - const dspModule = await import('@agoric/deploy-script-support'); - const { makeHelpers } = dspModule; - const { writeCoreEval } = await makeHelpers(homeP, endowments); - await writeCoreEval(startSendAnywhere.name, defaultProposalBuilder); -}; diff --git a/packages/orchestration/src/typeGuards.js b/packages/orchestration/src/typeGuards.js index 48d11aa7e43..721345c0d9f 100644 --- a/packages/orchestration/src/typeGuards.js +++ b/packages/orchestration/src/typeGuards.js @@ -1,13 +1,14 @@ +import { BrandShape } from '@agoric/ertp/src/typeGuards.js'; import { VowShape } from '@agoric/vow'; import { M } from '@endo/patterns'; /** * @import {TypedPattern} from '@agoric/internal'; - * @import {ChainAddress, CosmosAssetInfo, Chain, ChainInfo, CosmosChainInfo, DenomAmount, DenomDetail, DenomInfo, AmountArg, CosmosValidatorAddress} from './types.js'; + * @import {ChainAddress, CosmosAssetInfo, Chain, ChainInfo, CosmosChainInfo, DenomAmount, DenomInfo, AmountArg, CosmosValidatorAddress, OrchestrationPowers} from './types.js'; * @import {Any as Proto3Msg} from '@agoric/cosmic-proto/google/protobuf/any.js'; - * @import {Delegation} from '@agoric/cosmic-proto/cosmos/staking/v1beta1/staking.js'; * @import {TxBody} from '@agoric/cosmic-proto/cosmos/tx/v1beta1/tx.js'; * @import {TypedJson} from '@agoric/cosmic-proto'; + * @import {DenomDetail} from './exos/chain-hub.js'; */ /** @@ -31,12 +32,11 @@ export const ChainAddressShape = { encoding: M.string(), value: M.string(), }; +harden(ChainAddressShape); /** @type {TypedPattern} */ -export const Proto3Shape = { - typeUrl: M.string(), - value: M.string(), -}; +export const Proto3Shape = { typeUrl: M.string(), value: M.string() }; +harden(ChainAddressShape); /** @internal */ export const IBCTransferOptionsShape = M.splitRecord( @@ -53,6 +53,7 @@ export const IBCTransferOptionsShape = M.splitRecord( /** @internal */ export const IBCChannelIDShape = M.string(); + /** @internal */ export const IBCChannelInfoShape = M.splitRecord({ portId: M.string(), @@ -63,8 +64,10 @@ export const IBCChannelInfoShape = M.splitRecord({ state: M.scalar(), // XXX version: M.string(), }); + /** @internal */ export const IBCConnectionIDShape = M.string(); + /** @internal */ export const IBCConnectionInfoShape = M.splitRecord({ id: IBCConnectionIDShape, @@ -99,6 +102,7 @@ export const CosmosChainInfoShape = M.splitRecord( stakingTokens: M.arrayOf({ denom: M.string() }), // UNTIL https://github.com/Agoric/agoric-sdk/issues/9326 icqEnabled: M.boolean(), + pfmEnabled: M.boolean(), }, ); @@ -115,15 +119,25 @@ export const DenomInfoShape = { brand: M.or(M.remotable('Brand'), M.undefined()), baseDenom: M.string(), }; +harden(DenomInfoShape); + +/** @type {TypedPattern} */ +export const DenomDetailShape = M.splitRecord( + { chainName: M.string(), baseName: M.string(), baseDenom: M.string() }, + { brand: BrandShape }, +); +harden(DenomDetailShape); /** @type {TypedPattern} */ export const DenomAmountShape = { denom: DenomShape, value: M.nat() }; +harden(DenomAmountShape); /** @type {TypedPattern>} */ -export const AnyNatAmountShape = harden({ +export const AnyNatAmountShape = { brand: M.remotable('Brand'), value: M.nat(), -}); +}; +harden(AnyNatAmountShape); /** @type {TypedPattern} */ export const AmountArgShape = M.or(AnyNatAmountShape, DenomAmountShape); @@ -152,10 +166,11 @@ export const ICQMsgShape = M.splitRecord( export const TypedJsonShape = M.splitRecord({ '@type': M.string() }); /** @see {Chain} */ -export const chainFacadeMethods = harden({ +export const chainFacadeMethods = { getChainInfo: M.call().returns(VowShape), makeAccount: M.call().returns(VowShape), -}); +}; +harden(chainFacadeMethods); /** * for google/protobuf/timestamp.proto, not to be confused with TimestampShape @@ -165,6 +180,7 @@ export const chainFacadeMethods = harden({ * string */ export const TimestampProtoShape = { seconds: M.string(), nanos: M.number() }; +harden(TimestampProtoShape); /** * see {@link TxBody} for more details @@ -187,6 +203,15 @@ export const TxBodyOptsShape = M.splitRecord( */ export const AnyNatAmountsRecord = M.and( M.recordOf(M.string(), AnyNatAmountShape), - M.not(harden({})), + M.not({}), ); -harden(AnyNatAmountsRecord); + +/** @type {TypedPattern} */ +export const OrchestrationPowersShape = { + agoricNames: M.remotable(), + localchain: M.remotable(), + orchestrationService: M.remotable(), + storageNode: M.remotable(), + timerService: M.remotable(), +}; +harden(OrchestrationPowersShape); diff --git a/packages/orchestration/src/types.ts b/packages/orchestration/src/types.ts index 905892a2236..7a0b23566e4 100644 --- a/packages/orchestration/src/types.ts +++ b/packages/orchestration/src/types.ts @@ -13,6 +13,7 @@ export type * from './exos/local-chain-facade.js'; export type * from './exos/portfolio-holder-kit.js'; export type * from './orchestration-api.js'; export type * from './vat-orchestration.js'; +export type * from './utils/start-helper.js'; /** * ({@link ZCF})-like tools for use in {@link OrchestrationFlow}s. diff --git a/packages/orchestration/src/utils/chain-hub-helper.js b/packages/orchestration/src/utils/chain-hub-helper.js new file mode 100644 index 00000000000..be01c8b3ef7 --- /dev/null +++ b/packages/orchestration/src/utils/chain-hub-helper.js @@ -0,0 +1,53 @@ +/** + * @import {ChainHub, CosmosChainInfo, Denom, DenomDetail} from '../types.js'; + */ + +/** + * Registers chains, connections, assets in the provided chainHub. + * + * If either is not provided, registration will be skipped. + * + * @param {ChainHub} chainHub + * @param {Record>} brands + * @param {Record | undefined} chainInfo + * @param {Record | undefined} assetInfo + */ +export const registerChainsAndAssets = ( + chainHub, + brands, + chainInfo, + assetInfo, +) => { + if (!chainInfo) { + console.log('No chain info provided, returning early.'); + return; + } + + const conns = {}; + for (const [chainName, allInfo] of Object.entries(chainInfo)) { + const { connections, ...info } = allInfo; + chainHub.registerChain(chainName, info); + conns[info.chainId] = connections; + } + const registeredPairs = new Set(); + for (const [pChainId, connInfos] of Object.entries(conns)) { + for (const [cChainId, connInfo] of Object.entries(connInfos)) { + const pair = [pChainId, cChainId].sort().join(''); + if (!registeredPairs.has(pair)) { + chainHub.registerConnection(pChainId, cChainId, connInfo); + registeredPairs.add(pair); + } + } + } + + if (!assetInfo) { + console.log('No asset info provided, returning early.'); + return; + } + for (const [denom, info] of Object.entries(assetInfo)) { + const infoWithBrand = info.brandKey + ? { ...info, brand: brands[info.brandKey] } + : info; + chainHub.registerAsset(denom, infoWithBrand); + } +}; diff --git a/packages/orchestration/src/utils/start-helper.js b/packages/orchestration/src/utils/start-helper.js index 902c7194808..e6c36bd523c 100644 --- a/packages/orchestration/src/utils/start-helper.js +++ b/packages/orchestration/src/utils/start-helper.js @@ -164,6 +164,7 @@ export const provideOrchestration = ( return { ...defaultOrchestrateKit, makeOrchestrateKit, + baggage, chainHub, vowTools, asyncFlowTools, diff --git a/packages/orchestration/src/vat-orchestration.js b/packages/orchestration/src/vat-orchestration.js index 016ccfac7b7..25622d7fbbc 100644 --- a/packages/orchestration/src/vat-orchestration.js +++ b/packages/orchestration/src/vat-orchestration.js @@ -5,7 +5,7 @@ import { prepareCosmosInterchainService } from './exos/cosmos-interchain-service /** * @import {Baggage} from '@agoric/vat-data'; - * @import {OrchestrationPowers} from './exos/cosmos-interchain-service.js'; + * @import {CosmosOrchestrationPowers} from './exos/cosmos-interchain-service.js'; */ /** @@ -26,7 +26,7 @@ export const buildRootObject = (vatPowers, vatParameters, baggage) => { ); return Far('OrchestrationVat', { - /** @param {Partial} [initialPowers] */ + /** @param {Partial} [initialPowers] */ makeCosmosInterchainService(initialPowers = {}) { return makeCosmosInterchainService(initialPowers); }, diff --git a/packages/orchestration/test/snapshots/exports.test.ts.md b/packages/orchestration/test/snapshots/exports.test.ts.md index 56f8e20e5d6..c57931aa11b 100644 --- a/packages/orchestration/test/snapshots/exports.test.ts.md +++ b/packages/orchestration/test/snapshots/exports.test.ts.md @@ -18,6 +18,7 @@ Generated by [AVA](https://avajs.dev). 'CosmosChainInfoShape', 'DelegationShape', 'DenomAmountShape', + 'DenomDetailShape', 'DenomInfoShape', 'DenomShape', 'IBCChannelIDShape', @@ -26,6 +27,7 @@ Generated by [AVA](https://avajs.dev). 'IBCConnectionInfoShape', 'IBCTransferOptionsShape', 'ICQMsgShape', + 'OrchestrationPowersShape', 'OutboundConnectionHandlerI', 'Proto3Shape', 'TimestampProtoShape', @@ -35,5 +37,7 @@ Generated by [AVA](https://avajs.dev). 'denomHash', 'prepareChainHubAdmin', 'prepareCosmosInterchainService', + 'registerChainsAndAssets', + 'withChainCapabilities', 'withOrchestration', ] diff --git a/packages/orchestration/test/snapshots/exports.test.ts.snap b/packages/orchestration/test/snapshots/exports.test.ts.snap index 223154bd90b..acdc30319ea 100644 Binary files a/packages/orchestration/test/snapshots/exports.test.ts.snap and b/packages/orchestration/test/snapshots/exports.test.ts.snap differ diff --git a/packages/pegasus/package.json b/packages/pegasus/package.json index 88dbe054e3c..532fddff733 100644 --- a/packages/pegasus/package.json +++ b/packages/pegasus/package.json @@ -10,7 +10,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -28,7 +28,7 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", "@agoric/network": "^0.1.0", @@ -38,17 +38,17 @@ "@agoric/vats": "^0.15.1", "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^3.4.2", + "@endo/bundle-source": "^3.5.0", "@agoric/zone": "^0.2.2", - "@endo/captp": "^4.4.2", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7" + "@endo/captp": "^4.4.3", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "import-meta-resolve": "^2.2.1", "@agoric/vat-data": "^0.5.2" }, diff --git a/packages/pegasus/src/pegasus.js b/packages/pegasus/src/pegasus.js index d96a2b1dd1b..cf2af1a545f 100644 --- a/packages/pegasus/src/pegasus.js +++ b/packages/pegasus/src/pegasus.js @@ -361,7 +361,6 @@ export const makePegasus = ({ zcf, board, namesByAddress, when }) => { receiveDenomPublication, remoteDenomSubscription, abort: reason => { - // eslint-disable-next-line no-use-before-define actions.abort(reason); }, }; diff --git a/packages/smart-wallet/package.json b/packages/smart-wallet/package.json index 4cc91e9dd05..75640788be1 100644 --- a/packages/smart-wallet/package.json +++ b/packages/smart-wallet/package.json @@ -20,14 +20,14 @@ "@agoric/casting": "^0.4.2", "@agoric/cosmic-proto": "^0.4.0", "@agoric/swingset-vat": "^0.32.2", - "@endo/bundle-source": "^3.4.2", - "@endo/captp": "^4.4.2", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/captp": "^4.4.3", + "@endo/init": "^1.1.7", "ava": "^5.3.0", "import-meta-resolve": "^2.2.1" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", "@agoric/notifier": "^0.6.2", @@ -37,11 +37,11 @@ "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/eventual-send": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7" + "@endo/eventual-send": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8" }, "files": [ "src/" diff --git a/packages/smart-wallet/src/offerWatcher.js b/packages/smart-wallet/src/offerWatcher.js index 4aace001224..38da65c2d77 100644 --- a/packages/smart-wallet/src/offerWatcher.js +++ b/packages/smart-wallet/src/offerWatcher.js @@ -72,13 +72,18 @@ const watchForPayout = ({ paymentWatcher }, seat) => { /** @param {VowTools} vowTools */ export const makeWatchOfferOutcomes = vowTools => { const watchForOfferResult = makeWatchForOfferResult(vowTools); - const { asPromise, allVows } = vowTools; + const { when, allVows } = vowTools; /** * @param {OutcomeWatchers} watchers * @param {UserSeat} seat */ const watchOfferOutcomes = (watchers, seat) => { - return asPromise( + // Use `when` to get a promise from the vow. + // Unlike `asPromise` this doesn't warn in case of disconnections, which is + // fine since we actually handle the outcome durably through the watchers. + // Only the `executeOffer` caller relies on the settlement of this promise, + // and only in tests. + return when( allVows([ watchForOfferResult(watchers, seat), watchForNumWants(watchers, seat), diff --git a/packages/solo/package.json b/packages/solo/package.json index 6eaf8754556..fe9b8511aa4 100644 --- a/packages/solo/package.json +++ b/packages/solo/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -35,13 +35,13 @@ "@agoric/time": "^0.3.2", "@agoric/vats": "^0.15.1", "@agoric/wallet": "^0.18.3", - "@endo/captp": "^4.4.2", - "@endo/errors": "^1.2.7", - "@endo/eventual-send": "^1.2.7", - "@endo/import-bundle": "^1.3.1", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/promise-kit": "^1.1.7", + "@endo/captp": "^4.4.3", + "@endo/errors": "^1.2.8", + "@endo/eventual-send": "^1.2.8", + "@endo/import-bundle": "^1.3.2", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/promise-kit": "^1.1.8", "anylogger": "^0.21.0", "deterministic-json": "^1.0.5", "esm": "agoric-labs/esm#Agoric-built", @@ -56,9 +56,9 @@ }, "devDependencies": { "@agoric/ertp": "^0.16.2", - "@endo/bundle-source": "^3.4.2", + "@endo/bundle-source": "^3.5.0", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "publishConfig": { "access": "public" diff --git a/packages/solo/src/chain-cosmos-sdk.js b/packages/solo/src/chain-cosmos-sdk.js index f97e9692f02..9bad3f0a1e2 100644 --- a/packages/solo/src/chain-cosmos-sdk.js +++ b/packages/solo/src/chain-cosmos-sdk.js @@ -696,14 +696,12 @@ ${chainID} chain does not yet know of address ${clientAddr}${adviseEgress( .then(txResult => { // The result had an error code (not 0 or undefined for success). if (txResult.code) { - // eslint-disable-next-line no-use-before-define failedSend( makeError(`Error in tx processing: ${txResult.log}`), ); } }) .catch(err => - // eslint-disable-next-line no-use-before-define failedSend(makeError(`Error in tx processing: ${err}`)), ); diff --git a/packages/solo/src/start.js b/packages/solo/src/start.js index b5e0d7181e4..4df27db7c8d 100644 --- a/packages/solo/src/start.js +++ b/packages/solo/src/start.js @@ -120,7 +120,6 @@ const buildSwingset = async ( const withInputQueue = makeWithQueue(); const queueThunkForKernel = withInputQueue(async thunk => { thunk(); - // eslint-disable-next-line no-use-before-define await processKernel(); }); diff --git a/packages/solo/src/vat-http.js b/packages/solo/src/vat-http.js index 1f79ca8a29f..6b9c221a5d9 100644 --- a/packages/solo/src/vat-http.js +++ b/packages/solo/src/vat-http.js @@ -28,7 +28,6 @@ export function buildRootObject(vatPowers) { const lookup = async (...path) => { // Take a snapshot of the current home. - // eslint-disable-next-line no-use-before-define const root = replObjects.home; if (path.length === 1 && Array.isArray(path[0])) { diff --git a/packages/solo/src/web.js b/packages/solo/src/web.js index 93e70d4d212..04caf2c39f4 100644 --- a/packages/solo/src/web.js +++ b/packages/solo/src/web.js @@ -370,7 +370,6 @@ export async function makeHTTPListener( return; } - // eslint-disable-next-line no-use-before-define sendJSON({ ...res, meta }); } catch (error) { inboundCommand( diff --git a/packages/spawner/package.json b/packages/spawner/package.json index 098e81d6e71..d3ee4ae17d1 100644 --- a/packages/spawner/package.json +++ b/packages/spawner/package.json @@ -11,7 +11,7 @@ "build": "yarn build:bundles", "build:bundles": "node scripts/build-bundles.js", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint": "run-s --continue-on-error lint:*", "lint-fix": "yarn lint:eslint --fix", @@ -31,18 +31,18 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", - "@endo/eventual-send": "^1.2.7", - "@endo/import-bundle": "^1.3.1", - "@endo/marshal": "^1.6.1" + "@endo/errors": "^1.2.8", + "@endo/eventual-send": "^1.2.8", + "@endo/import-bundle": "^1.3.2", + "@endo/marshal": "^1.6.2" }, "devDependencies": { "@agoric/internal": "^0.3.2", "@agoric/swingset-vat": "^0.32.2", - "@endo/bundle-source": "^3.4.2", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/init": "^1.1.7", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "src/", diff --git a/packages/stat-logger/package.json b/packages/stat-logger/package.json index 00ba9f12614..b15e65b6e94 100644 --- a/packages/stat-logger/package.json +++ b/packages/stat-logger/package.json @@ -16,7 +16,7 @@ "lint:eslint": "eslint ." }, "dependencies": { - "@endo/errors": "^1.2.7" + "@endo/errors": "^1.2.8" }, "peerDependencies": { "canvas": "^2.6.1", diff --git a/packages/store/package.json b/packages/store/package.json index 1294ca68b26..b3ca7f84675 100644 --- a/packages/store/package.json +++ b/packages/store/package.json @@ -30,15 +30,15 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", - "@endo/exo": "^1.5.6", - "@endo/marshal": "^1.6.1", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6" + "@endo/errors": "^1.2.8", + "@endo/exo": "^1.5.7", + "@endo/marshal": "^1.6.2", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7" }, "devDependencies": { - "@endo/init": "^1.1.6", - "@endo/ses-ava": "^1.2.7", + "@endo/init": "^1.1.7", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0" }, "files": [ diff --git a/packages/swing-store/package.json b/packages/swing-store/package.json index cfadd9a1986..b805068ce6c 100644 --- a/packages/swing-store/package.json +++ b/packages/swing-store/package.json @@ -13,7 +13,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -21,19 +21,19 @@ "lint:eslint": "eslint ." }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", - "@endo/base64": "^1.0.8", - "@endo/bundle-source": "^3.4.2", - "@endo/check-bundle": "^1.0.11", - "@endo/nat": "^5.0.12", + "@endo/base64": "^1.0.9", + "@endo/bundle-source": "^3.5.0", + "@endo/check-bundle": "^1.0.12", + "@endo/nat": "^5.0.13", "better-sqlite3": "^9.1.1" }, "devDependencies": { - "@endo/init": "^1.1.6", + "@endo/init": "^1.1.7", "@types/better-sqlite3": "^7.6.9", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "tmp": "^0.2.1" }, "publishConfig": { diff --git a/packages/swing-store/src/exporter.js b/packages/swing-store/src/exporter.js index 4b39a8c69a3..e8a6cc9fb62 100644 --- a/packages/swing-store/src/exporter.js +++ b/packages/swing-store/src/exporter.js @@ -133,7 +133,6 @@ export function makeSwingStoreExporter(dirPath, options = {}) { * section */ function getHostKV(key) { - typeof key === 'string' || Fail`key must be a string`; getKeyType(key) === 'host' || Fail`getHostKV requires host keys`; // @ts-expect-error unknown return sqlKVGet.get(key); diff --git a/packages/swing-store/src/hasher.js b/packages/swing-store/src/hasher.js index 384425517e5..c287cc7d3a2 100644 --- a/packages/swing-store/src/hasher.js +++ b/packages/swing-store/src/hasher.js @@ -16,7 +16,6 @@ import { createHash } from 'crypto'; function createSHA256(initial = undefined) { const hash = createHash('sha256'); let done = false; - // eslint-disable-next-line no-use-before-define const self = harden({ add, finish, sample }); function add(more) { !done || Fail`hash already finished`; diff --git a/packages/swing-store/src/kvStore.js b/packages/swing-store/src/kvStore.js index 646aaf3ae1c..4f8b58b5825 100644 --- a/packages/swing-store/src/kvStore.js +++ b/packages/swing-store/src/kvStore.js @@ -15,6 +15,7 @@ import { Fail } from '@endo/errors'; * @param {string} key */ export function getKeyType(key) { + typeof key === 'string' || Fail`key must be a string`; if (key.startsWith('local.')) { return 'local'; } else if (key.startsWith('host.')) { diff --git a/packages/swing-store/src/swingStore.js b/packages/swing-store/src/swingStore.js index 3bcfe08b5a2..314a3eb73ab 100644 --- a/packages/swing-store/src/swingStore.js +++ b/packages/swing-store/src/swingStore.js @@ -337,7 +337,6 @@ export function makeSwingStore(dirPath, forceReset, options = {}) { const kernelKVStore = { ...kvStore, set(key, value) { - typeof key === 'string' || Fail`key must be a string`; const keyType = getKeyType(key); keyType !== 'host' || Fail`kernelKVStore refuses host keys`; kvStore.set(key, value); @@ -352,7 +351,6 @@ export function makeSwingStore(dirPath, forceReset, options = {}) { } }, delete(key) { - typeof key === 'string' || Fail`key must be a string`; const keyType = getKeyType(key); keyType !== 'host' || Fail`kernelKVStore refuses host keys`; kvStore.delete(key); diff --git a/packages/swingset-liveslots/package.json b/packages/swingset-liveslots/package.json index 1944e2dff69..badc6db6845 100644 --- a/packages/swingset-liveslots/package.json +++ b/packages/swingset-liveslots/package.json @@ -17,19 +17,19 @@ "lint:eslint": "eslint ." }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", - "@endo/env-options": "^1.1.7", - "@endo/eventual-send": "^1.2.7", - "@endo/exo": "^1.5.6", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/env-options": "^1.1.8", + "@endo/eventual-send": "^1.2.8", + "@endo/exo": "^1.5.7", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "ava": "^5.3.0", diff --git a/packages/swingset-liveslots/src/collectionManager.js b/packages/swingset-liveslots/src/collectionManager.js index 9b8b6d4ff2e..69dfc18531d 100644 --- a/packages/swingset-liveslots/src/collectionManager.js +++ b/packages/swingset-liveslots/src/collectionManager.js @@ -146,56 +146,48 @@ export function makeCollectionManager( scalarMapStore: { hasWeakKeys: false, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateMapStore, durable: false, }, scalarWeakMapStore: { hasWeakKeys: true, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateWeakMapStore, durable: false, }, scalarSetStore: { hasWeakKeys: false, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateSetStore, durable: false, }, scalarWeakSetStore: { hasWeakKeys: true, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateWeakSetStore, durable: false, }, scalarDurableMapStore: { hasWeakKeys: false, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateMapStore, durable: true, }, scalarDurableWeakMapStore: { hasWeakKeys: true, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateWeakMapStore, durable: true, }, scalarDurableSetStore: { hasWeakKeys: false, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateSetStore, durable: true, }, scalarDurableWeakSetStore: { hasWeakKeys: true, kindID: 0, - // eslint-disable-next-line no-use-before-define reanimator: reanimateWeakSetStore, durable: true, }, @@ -218,7 +210,6 @@ export function makeCollectionManager( vrm.registerKind( kindID, storeKindInfo[kind].reanimator, - // eslint-disable-next-line no-use-before-define deleteCollection, storeKindInfo[kind].durable, ); @@ -313,7 +304,6 @@ export function makeCollectionManager( // * vref(o-4) -> "vc.5.r0000000001:o-4" const encodeRemotable = remotable => { - // eslint-disable-next-line no-use-before-define const ordinal = getOrdinal(remotable); ordinal !== undefined || Fail`no ordinal for ${remotable}`; const ordinalTag = zeroPad(ordinal, BIGINT_TAG_LEN); diff --git a/packages/swingset-liveslots/src/liveslots.js b/packages/swingset-liveslots/src/liveslots.js index 9363b15e027..b0d82478a8f 100644 --- a/packages/swingset-liveslots/src/liveslots.js +++ b/packages/swingset-liveslots/src/liveslots.js @@ -155,10 +155,8 @@ function build( const { type, allocatedByVat, virtual, durable } = parseVatSlot(vref); if (type === 'object' && allocatedByVat) { if (virtual || durable) { - // eslint-disable-next-line no-use-before-define vrm.setExportStatus(vref, 'reachable'); } else { - // eslint-disable-next-line no-use-before-define const remotable = requiredValForSlot(vref); exportedRemotables.add(remotable); kernelRecognizableRemotables.add(vref); @@ -183,7 +181,6 @@ function build( if (wr && !wr.deref()) { // we're in the COLLECTED state, or FINALIZED after a re-introduction - // eslint-disable-next-line no-use-before-define addToPossiblyDeadSet(baseRef); slotToVal.delete(baseRef); } @@ -209,11 +206,9 @@ function build( // Support: o~.[prop](...args) remote method invocation lsdebug(`makeImportedPresence handler.applyMethod (${slot})`); if (disavowedPresences.has(o)) { - // eslint-disable-next-line no-use-before-define exitVatWithFailure(disavowalError); throw disavowalError; } - // eslint-disable-next-line no-use-before-define return queueMessage(slot, prop, args, returnedP); }, applyFunction(o, args, returnedP) { @@ -222,7 +217,6 @@ function build( get(o, prop) { lsdebug(`makeImportedPresence handler.get (${slot})`); if (disavowedPresences.has(o)) { - // eslint-disable-next-line no-use-before-define exitVatWithFailure(disavowalError); throw disavowalError; } @@ -294,7 +288,6 @@ function build( console.error(`mIPromise handler called after resolution`); Fail`mIPromise handler called after resolution`; } - // eslint-disable-next-line no-use-before-define return queueMessage(vpid, prop, args, returnedP); }, get(p, prop) { @@ -347,17 +340,14 @@ function build( // use a slot from the corresponding allocateX function allocateExportID() { - // eslint-disable-next-line no-use-before-define return vrm.allocateNextID('exportID'); } function allocateCollectionID() { - // eslint-disable-next-line no-use-before-define return vrm.allocateNextID('collectionID'); } function allocatePromiseID() { - // eslint-disable-next-line no-use-before-define const promiseID = vrm.allocateNextID('promiseID'); return makeVatSlot('promise', true, promiseID); } @@ -385,10 +375,8 @@ function build( // do a syscall.resolve when it fires. The caller must finish // doing their syscall before this turn finishes, to ensure the // kernel isn't surprised by a spurious resolution. - // eslint-disable-next-line no-use-before-define const p = requiredValForSlot(vpid); // if (!knownResolutions.has(p)) { // TODO really? - // eslint-disable-next-line no-use-before-define followForKernel(vpid, p); return true; } @@ -400,7 +388,6 @@ function build( return makeVatSlot('object', true, exportID); } - // eslint-disable-next-line no-use-before-define const m = makeMarshal(convertValToSlot, convertSlotToVal, { marshalName: `liveSlots:${forVatID}`, serializeBodyFormat: 'smallcaps', @@ -413,7 +400,6 @@ function build( console.warn('Logging sent error stack', err), }); const unmeteredUnserialize = meterControl.unmetered(m.unserialize); - // eslint-disable-next-line no-use-before-define const unmeteredConvertSlotToVal = meterControl.unmetered(convertSlotToVal); function getSlotForVal(val) { @@ -458,7 +444,6 @@ function build( allocateExportID, getSlotForVal, requiredValForSlot, - // eslint-disable-next-line no-use-before-define registerValue, m.serialize, unmeteredUnserialize, @@ -471,10 +456,8 @@ function build( vrm, allocateExportID, allocateCollectionID, - // eslint-disable-next-line no-use-before-define convertValToSlot, unmeteredConvertSlotToVal, - // eslint-disable-next-line no-use-before-define registerValue, m.serialize, unmeteredUnserialize, @@ -486,7 +469,6 @@ function build( vrm, vom, collectionManager, - // eslint-disable-next-line no-use-before-define convertValToSlot, convertSlotToVal: unmeteredConvertSlotToVal, maybeExportPromise, @@ -516,7 +498,6 @@ function build( slot = allocatePromiseID(); } else { if (disavowedPresences.has(val)) { - // eslint-disable-next-line no-use-before-define exitVatWithFailure(disavowalError); throw disavowalError; // cannot reference a disavowed object } @@ -686,7 +667,6 @@ function build( const priorResolution = knownResolutions.get(p); if (priorResolution && !doneResolutions.has(slot)) { const [priorRejected, priorRes] = priorResolution; - // eslint-disable-next-line no-use-before-define collect(slot, priorRejected, priorRes); } } @@ -972,7 +952,6 @@ function build( } // in both cases, we are now the decider, so treat it like an // exported promise - // eslint-disable-next-line no-use-before-define followForKernel(resultVPID, p); } } @@ -1249,7 +1228,6 @@ function build( possiblyRetiredSet, slotToVal, valToSlot, - // eslint-disable-next-line no-use-before-define afterDispatchActions, }); @@ -1341,7 +1319,7 @@ function build( /** * @param {import('./types.js').VatDeliveryObject} delivery - * @returns {void | Promise} + * @returns {undefined | ReturnType} */ function dispatchToUserspace(delivery) { let result; diff --git a/packages/swingset-liveslots/src/virtualObjectManager.js b/packages/swingset-liveslots/src/virtualObjectManager.js index e58430f6c4c..e88d038b1ef 100644 --- a/packages/swingset-liveslots/src/virtualObjectManager.js +++ b/packages/swingset-liveslots/src/virtualObjectManager.js @@ -1,5 +1,5 @@ /* global globalThis */ -/* eslint-disable no-use-before-define, jsdoc/require-returns-type */ +/* eslint-disable jsdoc/require-returns-type */ import { environmentOptionsListHas } from '@endo/env-options'; import { assert, Fail, q, b } from '@endo/errors'; diff --git a/packages/swingset-liveslots/src/virtualReferences.js b/packages/swingset-liveslots/src/virtualReferences.js index ffe0daca3bb..896c47431b9 100644 --- a/packages/swingset-liveslots/src/virtualReferences.js +++ b/packages/swingset-liveslots/src/virtualReferences.js @@ -1,4 +1,4 @@ -/* eslint-disable no-use-before-define, jsdoc/require-returns-type */ +/* eslint-disable jsdoc/require-returns-type */ import { assert, Fail } from '@endo/errors'; import { Nat } from '@endo/nat'; diff --git a/packages/swingset-liveslots/tools/fakeVirtualSupport.js b/packages/swingset-liveslots/tools/fakeVirtualSupport.js index a8e745810ce..d05939e851e 100644 --- a/packages/swingset-liveslots/tools/fakeVirtualSupport.js +++ b/packages/swingset-liveslots/tools/fakeVirtualSupport.js @@ -234,7 +234,6 @@ export function makeFakeLiveSlotsStuff(options = {}) { assert.fail('fake liveSlots stuff configured without vrm'); } } - // eslint-disable-next-line no-use-before-define registerEntry(baseRef, val, facet !== undefined); if (!result) { result = val; diff --git a/packages/swingset-runner/package.json b/packages/swingset-runner/package.json index 52494f14614..c61f4109250 100644 --- a/packages/swingset-runner/package.json +++ b/packages/swingset-runner/package.json @@ -11,7 +11,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -19,7 +19,7 @@ "ci:autobench": "./autobench.js" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/deploy-script-support": "^0.10.3", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", @@ -32,18 +32,18 @@ "@agoric/telemetry": "^0.6.2", "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", - "@endo/bundle-source": "^3.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", + "@endo/bundle-source": "^3.5.0", + "@endo/eventual-send": "^1.2.8", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", "expose-gc": "^1.0.0", "n-readlines": "^1.0.1", "yargs": "^16.1.0" }, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "import-meta-resolve": "^2.2.1" }, "publishConfig": { diff --git a/packages/swingset-runner/src/auditstore.js b/packages/swingset-runner/src/auditstore.js index 568196df3a1..0c20b2fcc2a 100644 --- a/packages/swingset-runner/src/auditstore.js +++ b/packages/swingset-runner/src/auditstore.js @@ -2,7 +2,6 @@ import { Fail } from '@endo/errors'; import { parseReachableAndVatSlot } from '@agoric/swingset-vat/src/kernel/state/reachable.js'; import { parseVatSlot } from '@agoric/swingset-vat/src/lib/parseVatSlots.js'; -/* eslint-disable no-use-before-define */ export function auditRefCounts(store, doDump, printPrefix) { const refCounts = new Map(); const refSites = new Map(); diff --git a/packages/swingset-runner/src/dumpstore.js b/packages/swingset-runner/src/dumpstore.js index 74833e48ad7..de70784e199 100644 --- a/packages/swingset-runner/src/dumpstore.js +++ b/packages/swingset-runner/src/dumpstore.js @@ -1,7 +1,6 @@ import fs from 'fs'; import process from 'process'; -/* eslint-disable no-use-before-define */ export function dumpStore(kernelStorage, outfile, rawMode, truncate = true) { const transcriptStore = kernelStorage.transcriptStore; let out; diff --git a/packages/swingset-runner/src/main.js b/packages/swingset-runner/src/main.js index 6003a30227d..4da28ae2681 100644 --- a/packages/swingset-runner/src/main.js +++ b/packages/swingset-runner/src/main.js @@ -220,8 +220,6 @@ function generateIndirectConfig(baseConfig) { return config; } -/* eslint-disable no-use-before-define */ - /** * Command line utility to run a swingset for development and testing purposes. */ diff --git a/packages/swingset-runner/src/slogulator.js b/packages/swingset-runner/src/slogulator.js index 9d8bb9c504a..86cae98534c 100644 --- a/packages/swingset-runner/src/slogulator.js +++ b/packages/swingset-runner/src/slogulator.js @@ -5,8 +5,6 @@ import yargs from 'yargs'; import { Fail } from '@endo/errors'; -/* eslint-disable no-use-before-define */ - function usage() { console.error('usage message goes here'); } diff --git a/packages/swingset-xsnap-supervisor/lib/supervisor-subprocess-xsnap.js b/packages/swingset-xsnap-supervisor/lib/supervisor-subprocess-xsnap.js index d7eb1325744..d150d8da078 100644 --- a/packages/swingset-xsnap-supervisor/lib/supervisor-subprocess-xsnap.js +++ b/packages/swingset-xsnap-supervisor/lib/supervisor-subprocess-xsnap.js @@ -100,11 +100,11 @@ const meterControl = makeMeterControl(); /** * Wrap byte-level protocols with tagged array codec. * - * @param {(cmd: ArrayBuffer) => ArrayBuffer} issueCommand as from xsnap + * @param {(cmd: ArrayBufferLike) => ArrayBuffer} issueCommand as from xsnap * @typedef { [unknown, ...unknown[]] } Tagged tagged array */ function managerPort(issueCommand) { - /** @type { (item: Tagged) => ArrayBuffer } */ + /** @type { (item: Tagged) => ArrayBufferLike } */ const encode = item => { let txt; try { diff --git a/packages/swingset-xsnap-supervisor/package.json b/packages/swingset-xsnap-supervisor/package.json index 510aa3e3371..4c4ee40a5f7 100644 --- a/packages/swingset-xsnap-supervisor/package.json +++ b/packages/swingset-xsnap-supervisor/package.json @@ -19,18 +19,18 @@ "lint:types": "tsc", "lint-fix": "eslint --fix 'lib/**/*.js' 'src/**/*.js' 'scripts/**/*.js' 'test/**/*.js'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0" }, "devDependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/swingset-liveslots": "^0.10.2", - "@endo/bundle-source": "^3.4.2", - "@endo/import-bundle": "^1.3.1", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", + "@endo/bundle-source": "^3.5.0", + "@endo/import-bundle": "^1.3.2", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "LICENSE*", diff --git a/packages/telemetry/package.json b/packages/telemetry/package.json index 0db4a8592ff..e654f726b37 100644 --- a/packages/telemetry/package.json +++ b/packages/telemetry/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -22,12 +22,12 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/store": "^0.9.2", - "@endo/init": "^1.1.6", - "@endo/marshal": "^1.6.1", - "@endo/stream": "^1.2.7", + "@endo/init": "^1.1.7", + "@endo/marshal": "^1.6.2", + "@endo/stream": "^1.2.8", "@opentelemetry/api": "~1.3.0", "@opentelemetry/api-logs": "0.53.0", "@opentelemetry/exporter-prometheus": "~0.35.0", @@ -43,10 +43,10 @@ "tmp": "^0.2.1" }, "devDependencies": { - "@endo/lockdown": "^1.0.12", - "@endo/ses-ava": "^1.2.7", + "@endo/lockdown": "^1.0.13", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "tmp": "^0.2.1" }, "publishConfig": { diff --git a/packages/telemetry/src/slog-to-otel.js b/packages/telemetry/src/slog-to-otel.js index bf91db575aa..b539b7da8e4 100644 --- a/packages/telemetry/src/slog-to-otel.js +++ b/packages/telemetry/src/slog-to-otel.js @@ -976,7 +976,7 @@ export const makeSlogToOtelKit = (tracer, overrideAttrs = {}) => { spans.pop('timer-poll'); break; } - case 'cosmic-swinget-inject-kernel-upgrade-events': { + case 'cosmic-swingset-inject-kernel-upgrade-events': { spans.push('kernel-upgrade-events'); spans.pop('kernel-upgrade-events'); break; diff --git a/packages/time/package.json b/packages/time/package.json index 6977273af4a..e3bc6d94b32 100644 --- a/packages/time/package.json +++ b/packages/time/package.json @@ -32,13 +32,13 @@ "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { "@agoric/store": "^0.9.2", - "@endo/errors": "^1.2.7", - "@endo/nat": "^5.0.12", - "@endo/patterns": "^1.4.6" + "@endo/errors": "^1.2.8", + "@endo/nat": "^5.0.13", + "@endo/patterns": "^1.4.7" }, "devDependencies": { - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", "ava": "^5.3.0" }, "ava": { diff --git a/packages/time/src/typeGuards.js b/packages/time/src/typeGuards.js index 65a4f5d800c..9498f162568 100644 --- a/packages/time/src/typeGuards.js +++ b/packages/time/src/typeGuards.js @@ -6,25 +6,30 @@ import { M } from '@endo/patterns'; */ export const TimerBrandShape = M.remotable('TimerBrand'); + /** @type {TypedPattern} */ export const TimestampValueShape = M.nat(); + /** @type {TypedPattern} */ export const RelativeTimeValueShape = M.nat(); // Should we allow negatives? /** @type {TypedPattern} */ -export const TimestampRecordShape = harden({ +export const TimestampRecordShape = { timerBrand: TimerBrandShape, absValue: TimestampValueShape, -}); +}; +harden(TimestampRecordShape); /** @type {TypedPattern} */ -export const RelativeTimeRecordShape = harden({ +export const RelativeTimeRecordShape = { timerBrand: TimerBrandShape, relValue: RelativeTimeValueShape, -}); +}; +harden(RelativeTimeRecordShape); /** @type {TypedPattern} */ export const TimestampShape = M.or(TimestampRecordShape, TimestampValueShape); + /** @type {TypedPattern} */ export const RelativeTimeShape = M.or( RelativeTimeRecordShape, diff --git a/packages/time/src/types.ts b/packages/time/src/types.ts index dd3ca10ae68..b890f2853ec 100644 --- a/packages/time/src/types.ts +++ b/packages/time/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { ERef, RemotableBrand } from '@endo/eventual-send'; import type { RankComparison, RemotableObject } from '@endo/marshal'; diff --git a/packages/vat-data/package.json b/packages/vat-data/package.json index 2a9720aba4c..730f591589c 100644 --- a/packages/vat-data/package.json +++ b/packages/vat-data/package.json @@ -18,17 +18,17 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/base-zone": "^0.1.0", "@agoric/store": "^0.9.2", "@agoric/swingset-liveslots": "^0.10.2", - "@endo/exo": "^1.5.6", - "@endo/patterns": "^1.4.6" + "@endo/exo": "^1.5.7", + "@endo/patterns": "^1.4.7" }, "devDependencies": { - "@endo/init": "^1.1.6", - "@endo/far": "^1.1.8", - "@endo/ses-ava": "^1.2.7", + "@endo/init": "^1.1.7", + "@endo/far": "^1.1.9", + "@endo/ses-ava": "^1.2.8", "ava": "^5.3.0", "tsd": "^0.31.1" }, diff --git a/packages/vat-data/src/exo-utils.js b/packages/vat-data/src/exo-utils.js index c898bae3cce..867a63196e8 100644 --- a/packages/vat-data/src/exo-utils.js +++ b/packages/vat-data/src/exo-utils.js @@ -289,7 +289,10 @@ export const makeExoUtils = VatData => { * @param {Baggage} baggage * @param {string} kindName * @param {InterfaceGuard | undefined} interfaceGuard - * @param {M} methods + * @param {M & + * ThisType<{ + * self: RemotableObject & M; + * }>} methods * @param {DefineKindOptions<{ self: M }>} [options] * @returns {import('@endo/exo').Guarded} */ diff --git a/packages/vat-data/src/index.test-d.ts b/packages/vat-data/src/index.test-d.ts index 8300a1b5c50..9aff6547b06 100644 --- a/packages/vat-data/src/index.test-d.ts +++ b/packages/vat-data/src/index.test-d.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import { expectType } from 'tsd'; import type { KindFacets, diff --git a/packages/vats/package.json b/packages/vats/package.json index ebb304b455b..74b223e0b47 100644 --- a/packages/vats/package.json +++ b/packages/vats/package.json @@ -11,7 +11,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -22,7 +22,7 @@ "author": "Agoric", "license": "Apache-2.0", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/cosmic-proto": "^0.4.0", "@agoric/ertp": "^0.16.2", "@agoric/governance": "^0.10.3", @@ -36,22 +36,22 @@ "@agoric/vow": "^0.1.0", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/far": "^1.1.8", - "@endo/import-bundle": "^1.3.1", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", + "@endo/far": "^1.1.9", + "@endo/import-bundle": "^1.3.2", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", "import-meta-resolve": "^2.2.1", "jessie.js": "^0.3.4" }, "devDependencies": { "@agoric/swingset-liveslots": "^0.10.2", - "@endo/bundle-source": "^3.4.2", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/init": "^1.1.7", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "CHANGELOG.md", diff --git a/packages/vats/src/core/lib-boot.js b/packages/vats/src/core/lib-boot.js index ada8fedc1f4..beeb09dc833 100644 --- a/packages/vats/src/core/lib-boot.js +++ b/packages/vats/src/core/lib-boot.js @@ -106,7 +106,6 @@ export const makeBootstrap = ( const runBehaviors = manifest => { return runModuleBehaviors({ - // eslint-disable-next-line no-use-before-define allPowers, behaviors, manifest, diff --git a/packages/vats/src/repl.js b/packages/vats/src/repl.js index fb8736482ef..28f7be203bc 100644 --- a/packages/vats/src/repl.js +++ b/packages/vats/src/repl.js @@ -18,7 +18,6 @@ const UNJSONABLES = new Map([ // A REPL-specific data dump-to-string. This specifically is *not* JSON, but its // output is unambiguous (even though it cannot be round-tripped). export const dump = (value, spaces = 0) => - // eslint-disable-next-line no-use-before-define dump0(value, spaces, new WeakSet(), 0); function dump0(value, spaces, inProgress, depth) { diff --git a/packages/vats/src/types.ts b/packages/vats/src/types.ts index c6001f8f041..34a25fcf68f 100644 --- a/packages/vats/src/types.ts +++ b/packages/vats/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { FungibleTokenPacketData } from '@agoric/cosmic-proto/ibc/applications/transfer/v2/packet.js'; import type { BridgeId, Remote } from '@agoric/internal'; import type { Bytes } from '@agoric/network'; diff --git a/packages/vm-config/decentral-itest-orchestration-config.json b/packages/vm-config/decentral-itest-orchestration-config.json index ff410f43245..30df4738ed9 100644 --- a/packages/vm-config/decentral-itest-orchestration-config.json +++ b/packages/vm-config/decentral-itest-orchestration-config.json @@ -53,6 +53,20 @@ } ] }, + { + "module": "@agoric/builders/scripts/inter-protocol/add-collateral-core.js", + "entrypoint": "psmProposalBuilder", + "args": [ + { + "anchorOptions": { + "denom": "ibc/FE98AAD68F02F03565E9FA39A5E627946699B2B07115889ED812D8BA639576A9", + "decimalPlaces": 6, + "keyword": "USDC", + "proposedName": "USDC" + } + } + ] + }, { "$comment": "XXX orchesration works without oracles but some test setup dependency fails to resolve without this", "module": "@agoric/builders/scripts/inter-protocol/price-feed-core.js", diff --git a/packages/vm-config/package.json b/packages/vm-config/package.json index de054026eb1..5f55cdd5e10 100644 --- a/packages/vm-config/package.json +++ b/packages/vm-config/package.json @@ -8,7 +8,7 @@ "scripts": { "build": "exit 0", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -21,7 +21,7 @@ "dependencies": {}, "devDependencies": { "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "CHANGELOG.md", diff --git a/packages/vow/package.json b/packages/vow/package.json index 5d1661fa1d6..3fd4736db25 100755 --- a/packages/vow/package.json +++ b/packages/vow/package.json @@ -21,19 +21,19 @@ "dependencies": { "@agoric/base-zone": "^0.1.0", "@agoric/internal": "^0.3.2", - "@endo/env-options": "^1.1.7", - "@endo/errors": "^1.2.7", - "@endo/eventual-send": "^1.2.7", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7" + "@endo/env-options": "^1.1.8", + "@endo/errors": "^1.2.8", + "@endo/eventual-send": "^1.2.8", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8" }, "devDependencies": { "@agoric/internal": "^0.3.2", "@agoric/swingset-vat": "^0.32.2", "@agoric/zone": "^0.2.2", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", "ava": "^5.3.0", "tsd": "^0.31.1" }, diff --git a/packages/vow/src/types.ts b/packages/vow/src/types.ts index 7c7e8418b20..83a07eb07b8 100644 --- a/packages/vow/src/types.ts +++ b/packages/vow/src/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable no-use-before-define */ import type { Remote } from '@agoric/internal'; import type { Zone } from '@agoric/zone'; import type { CopyTagged, RemotableObject } from '@endo/pass-style'; diff --git a/packages/vow/test/retryable.test.js b/packages/vow/test/retryable.test.js index 5c9e98089b2..3db86d0e526 100644 --- a/packages/vow/test/retryable.test.js +++ b/packages/vow/test/retryable.test.js @@ -174,7 +174,6 @@ test('restart', async t => { await eventLoopIteration(); if (currentRun < 3) { // Trigger our own invocation restart - // eslint-disable-next-line no-use-before-define flow.restart(); } if (currentRun === 2) { diff --git a/packages/wallet/api/package.json b/packages/wallet/api/package.json index 9711905c867..4bfc4384fe1 100644 --- a/packages/wallet/api/package.json +++ b/packages/wallet/api/package.json @@ -15,13 +15,13 @@ }, "devDependencies": { "@agoric/vats": "^0.15.1", - "@endo/bundle-source": "^3.4.2", - "@endo/far": "^1.1.8", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/far": "^1.1.9", + "@endo/init": "^1.1.7", "ava": "^5.3.0" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/cache": "^0.3.2", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", @@ -32,10 +32,10 @@ "@agoric/vat-data": "^0.5.2", "@agoric/zoe": "^0.26.2", "@agoric/zone": "^0.2.2", - "@endo/eventual-send": "^1.2.7", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/promise-kit": "^1.1.7", + "@endo/eventual-send": "^1.2.8", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/promise-kit": "^1.1.8", "import-meta-resolve": "^2.2.1" }, "keywords": [], diff --git a/packages/wallet/api/src/lib-dehydrate.js b/packages/wallet/api/src/lib-dehydrate.js index 5f96148f1a2..44524d85b98 100644 --- a/packages/wallet/api/src/lib-dehydrate.js +++ b/packages/wallet/api/src/lib-dehydrate.js @@ -54,7 +54,6 @@ export const makeDehydrator = (initialUnnamedCount = 0) => { if (!isPath(strongname)) { return strongname; } - // eslint-disable-next-line no-use-before-define const { valToPetname: rootToPetname } = edgeMapping; const petname = rootToPetname.get(strongname[0]); assert(!isPath(petname)); @@ -73,7 +72,6 @@ export const makeDehydrator = (initialUnnamedCount = 0) => { // A strong path must have a root name we have mapped. const path = [...strongname]; - // eslint-disable-next-line no-use-before-define const { petnameToVal: petnameToRoot } = edgeMapping; if (!petnameToRoot.has(path[0])) { // Avoid asserting, which fills up the logs. @@ -163,11 +161,7 @@ export const makeDehydrator = (initialUnnamedCount = 0) => { const addPath = (path, val) => { isPath(path) || Fail`path ${q(path)} must be an array of strings`; - if ( - !valToPetname.has(val) && - // eslint-disable-next-line no-use-before-define - edgeMapping.valToPetname.has(path[0]) - ) { + if (!valToPetname.has(val) && edgeMapping.valToPetname.has(path[0])) { // We have a petname for the root of the path, so use it as our // strongname. valToPetname.init(val, path); diff --git a/packages/wallet/api/src/lib-wallet.js b/packages/wallet/api/src/lib-wallet.js index 721ebb256ae..5ca726cfd89 100644 --- a/packages/wallet/api/src/lib-wallet.js +++ b/packages/wallet/api/src/lib-wallet.js @@ -409,7 +409,6 @@ export function makeWalletRoot({ Object.entries(pursePetnameValueKeywordRecord).map( ([keyword, { pursePetname, value, amount, purse }]) => { if (!amount) { - // eslint-disable-next-line no-use-before-define purse = getPurse(pursePetname); amount = { value }; } else { @@ -642,7 +641,6 @@ export function makeWalletRoot({ // Now send it back to the purse. try { - // eslint-disable-next-line no-use-before-define return addPayment(payment, purse); } finally { // Once we've called addPayment, mark this one as done. @@ -688,7 +686,6 @@ export function makeWalletRoot({ // we still make it a normal incoming payment. const purseOrUndefined = purseKeywordRecord[keyword]; - // eslint-disable-next-line no-use-before-define return addPayment(payoutP, purseOrUndefined); }), ); @@ -718,7 +715,6 @@ export function makeWalletRoot({ const already = brandMapping.valToPetname.has(brand); petnameForBrand = brandMapping.suggestPetname(petnameForBrand, brand); if (!already && makePurse) { - // eslint-disable-next-line no-use-before-define p = makeEmptyPurse(petnameForBrand, petnameForBrand, true); } else { p = Promise.resolve(undefined); @@ -821,7 +817,6 @@ export function makeWalletRoot({ if (defaultAutoDeposit && !brandToAutoDepositPurse.has(brand)) { // Try to initialize the autodeposit purse for this brand. // Don't do state updates, since we'll do that next. - // eslint-disable-next-line no-use-before-define await doEnableAutoDeposit(petnameForPurse, false); } @@ -943,7 +938,6 @@ export function makeWalletRoot({ arguments: args, } = compileProposal(offer.proposalTemplate); - // eslint-disable-next-line no-use-before-define const zoeIssuer = issuerManager.get(ZOE_INVITE_BRAND_PETNAME); const { brand: invitationBrand } = brandTable.getByIssuer(zoeIssuer); const invitationP = findOrMakeInvitation( @@ -1158,7 +1152,6 @@ export function makeWalletRoot({ return; } - // eslint-disable-next-line no-use-before-define await addPayment(E.get(compiledOfferP).inviteP).catch(console.error); } @@ -1481,7 +1474,6 @@ export function makeWalletRoot({ // suggestion can be rejected and the suggested petname can be // changed return acceptPetname( - // eslint-disable-next-line no-use-before-define installationManager.add, suggestedPetname, installationHandleBoardId, diff --git a/packages/xsnap-lockdown/lib/object-inspect.js b/packages/xsnap-lockdown/lib/object-inspect.js index 4f17c8f987e..19acc2da50d 100644 --- a/packages/xsnap-lockdown/lib/object-inspect.js +++ b/packages/xsnap-lockdown/lib/object-inspect.js @@ -1,5 +1,5 @@ // @ts-nocheck -/* eslint-disable no-nested-ternary,no-use-before-define */ +/* eslint-disable no-nested-ternary */ /* global globalThis */ // Adapted from object-inspect@1.12.0 https://github.com/inspect-js/object-inspect diff --git a/packages/xsnap-lockdown/package.json b/packages/xsnap-lockdown/package.json index d2204781d6f..fbd4bace7e7 100644 --- a/packages/xsnap-lockdown/package.json +++ b/packages/xsnap-lockdown/package.json @@ -16,14 +16,14 @@ "lint:types": "tsc", "lint-fix": "eslint --fix 'src/**/*.js' 'lib/**/*.js' 'scripts/**/*.js' 'test/**/*.js'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0" }, "devDependencies": { - "@endo/bundle-source": "^3.4.2", - "@endo/init": "^1.1.6", + "@endo/bundle-source": "^3.5.0", + "@endo/init": "^1.1.7", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "rollup": "^4.24.0", "rollup-plugin-string": "^3.0.0", "source-map": "^0.7.4" diff --git a/packages/xsnap/api.js b/packages/xsnap/api.js index 3591857e9fa..cb3612f1425 100644 --- a/packages/xsnap/api.js +++ b/packages/xsnap/api.js @@ -7,7 +7,7 @@ * Also, update golden master test/xs-perf.test.js to reflect new meter * version. */ -export const METER_TYPE = 'xs-meter-32'; +export const METER_TYPE = 'xs-meter-33'; export const ExitCode = { E_UNKNOWN_ERROR: -1, diff --git a/packages/xsnap/package.json b/packages/xsnap/package.json index 349aa3017cd..43200c28793 100644 --- a/packages/xsnap/package.json +++ b/packages/xsnap/package.json @@ -24,29 +24,29 @@ "lint:types": "tsc", "lint-fix": "eslint --fix 'src/**/*.js' 'test/**/*.js' api.js", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0" }, "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/internal": "^0.3.2", "@agoric/xsnap-lockdown": "^0.14.0", - "@endo/bundle-source": "^3.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/init": "^1.1.6", - "@endo/netstring": "^1.0.12", - "@endo/promise-kit": "^1.1.7", - "@endo/stream": "^1.2.7", - "@endo/stream-node": "^1.1.7", + "@endo/bundle-source": "^3.5.0", + "@endo/eventual-send": "^1.2.8", + "@endo/init": "^1.1.7", + "@endo/netstring": "^1.0.13", + "@endo/promise-kit": "^1.1.8", + "@endo/stream": "^1.2.8", + "@endo/stream-node": "^1.1.8", "glob": "^7.1.6", "tmp": "^0.2.1" }, "devDependencies": { - "@endo/base64": "^1.0.8", - "@endo/nat": "^5.0.12", + "@endo/base64": "^1.0.9", + "@endo/nat": "^5.0.13", "@types/glob": "^8.1.0", "ava": "^5.3.0", - "c8": "^9.1.0" + "c8": "^10.1.2" }, "files": [ "LICENSE*", diff --git a/packages/xsnap/src/avaXS.js b/packages/xsnap/src/avaXS.js index 28bb74df5b7..1025c9a9411 100644 --- a/packages/xsnap/src/avaXS.js +++ b/packages/xsnap/src/avaXS.js @@ -112,7 +112,7 @@ async function runTestScript( /** * Handle callback "command" from xsnap subprocess. * - * @type { (msg: ArrayBuffer) => Promise } + * @type { (msg: ArrayBuffer) => Promise> } */ async function handleCommand(message) { /** diff --git a/packages/xsnap/src/globals.d.ts b/packages/xsnap/src/globals.d.ts index 695d772ae08..ec7f661073f 100644 --- a/packages/xsnap/src/globals.d.ts +++ b/packages/xsnap/src/globals.d.ts @@ -1,5 +1,5 @@ -declare var issueCommand: (msg: ArrayBuffer) => ArrayBuffer; +declare var issueCommand: (msg: ArrayBufferLike) => ArrayBuffer; namespace global { - declare var issueCommand: (msg: ArrayBuffer) => ArrayBuffer; + declare var issueCommand: (msg: ArrayBufferLike) => ArrayBuffer; } diff --git a/packages/xsnap/src/xsnap.js b/packages/xsnap/src/xsnap.js index ab4ce46dfed..5306281a095 100644 --- a/packages/xsnap/src/xsnap.js +++ b/packages/xsnap/src/xsnap.js @@ -501,7 +501,6 @@ export async function xsnap(options) { if (cleaned) return; cleaned = true; sourceStream.unpipe(output); - // eslint-disable-next-line no-use-before-define output.off('data', onData); output.end(); }; diff --git a/packages/xsnap/test/xsnap-eof.test.js b/packages/xsnap/test/xsnap-eof.test.js index e51407391ce..c5dcb7d8cea 100644 --- a/packages/xsnap/test/xsnap-eof.test.js +++ b/packages/xsnap/test/xsnap-eof.test.js @@ -198,7 +198,6 @@ const testInterruption = test.macro( */ async (t, beforeWait, onRequest, afterWait, verifyResults) => { const handleCommand = message => { - // eslint-disable-next-line no-use-before-define return onRequest(worker, message); }; const worker = await spawnReflectiveWorker(handleCommand); diff --git a/packages/zoe/package.json b/packages/zoe/package.json index 1de5efe1d04..5d95b51c287 100644 --- a/packages/zoe/package.json +++ b/packages/zoe/package.json @@ -13,7 +13,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava --verbose", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:unit": "ava 'test/unitTests' -T 1m --verbose", "test:swingset": "ava 'test/swingsetTests' -T 10m --verbose", "test:xs": "yarn test:xs-worker", @@ -43,7 +43,7 @@ }, "homepage": "https://github.com/Agoric/agoric-sdk#readme", "dependencies": { - "@endo/errors": "^1.2.7", + "@endo/errors": "^1.2.8", "@agoric/base-zone": "^0.1.0", "@agoric/ertp": "^0.16.2", "@agoric/internal": "^0.3.2", @@ -55,25 +55,25 @@ "@agoric/vat-data": "^0.5.2", "@agoric/vow": "^0.1.0", "@agoric/zone": "^0.2.2", - "@endo/bundle-source": "^3.4.2", - "@endo/common": "^1.2.7", - "@endo/captp": "^4.4.2", - "@endo/eventual-send": "^1.2.7", - "@endo/exo": "^1.5.6", - "@endo/far": "^1.1.8", - "@endo/import-bundle": "^1.3.1", - "@endo/marshal": "^1.6.1", - "@endo/nat": "^5.0.12", - "@endo/pass-style": "^1.4.6", - "@endo/patterns": "^1.4.6", - "@endo/promise-kit": "^1.1.7", + "@endo/bundle-source": "^3.5.0", + "@endo/common": "^1.2.8", + "@endo/captp": "^4.4.3", + "@endo/eventual-send": "^1.2.8", + "@endo/exo": "^1.5.7", + "@endo/far": "^1.1.9", + "@endo/import-bundle": "^1.3.2", + "@endo/marshal": "^1.6.2", + "@endo/nat": "^5.0.13", + "@endo/pass-style": "^1.4.7", + "@endo/patterns": "^1.4.7", + "@endo/promise-kit": "^1.1.8", "yargs-parser": "^21.1.1" }, "devDependencies": { - "@endo/init": "^1.1.6", + "@endo/init": "^1.1.7", "@agoric/kmarshal": "^0.1.0", "ava": "^5.3.0", - "c8": "^9.1.0", + "c8": "^10.1.2", "import-meta-resolve": "^2.2.1", "tsd": "^0.31.1" }, diff --git a/packages/zoe/src/contractSupport/prepare-ownable.js b/packages/zoe/src/contractSupport/prepare-ownable.js index 0f563056eb3..2c750c3c37b 100644 --- a/packages/zoe/src/contractSupport/prepare-ownable.js +++ b/packages/zoe/src/contractSupport/prepare-ownable.js @@ -62,7 +62,6 @@ export const prepareOwnable = ( const { underlying } = this.state; const { revocable } = this.facets; const customDetails = underlying.getInvitationCustomDetails(); - // eslint-disable-next-line no-use-before-define const transferHandler = makeTransferHandler(underlying); const invitation = makeInvitation( diff --git a/packages/zoe/src/contracts/priceAggregator.js b/packages/zoe/src/contracts/priceAggregator.js index 0a50a514c82..f3ee1c4de1d 100644 --- a/packages/zoe/src/contracts/priceAggregator.js +++ b/packages/zoe/src/contracts/priceAggregator.js @@ -152,7 +152,6 @@ const start = async (zcf, privateArgs) => { } if (!querierPs.length) { // Only have push results, so publish them. - // eslint-disable-next-line no-use-before-define querierPs.push(updateQuote(timestamp)); } await Promise.all(querierPs).catch(console.error); diff --git a/packages/zoe/src/contracts/simpleExchange.js b/packages/zoe/src/contracts/simpleExchange.js index 46915503549..79e910dab20 100644 --- a/packages/zoe/src/contracts/simpleExchange.js +++ b/packages/zoe/src/contracts/simpleExchange.js @@ -32,7 +32,6 @@ import { const start = zcf => { let sellSeats = []; let buySeats = []; - // eslint-disable-next-line no-use-before-define const { notifier, updater } = makeNotifierKit(getBookOrders()); assertIssuerKeywords(zcf, harden(['Asset', 'Price'])); diff --git a/packages/zoe/src/typeGuards.js b/packages/zoe/src/typeGuards.js index 53afe809d9d..0c1d7a02ddb 100644 --- a/packages/zoe/src/typeGuards.js +++ b/packages/zoe/src/typeGuards.js @@ -54,16 +54,18 @@ export const IssuerRecordShape = M.splitRecord( { displayInfo: DisplayInfoShape }, ); -export const TermsShape = harden({ +export const TermsShape = { issuers: IssuerKeywordRecordShape, brands: BrandKeywordRecordShape, -}); +}; +harden(TermsShape); -export const InstanceRecordShape = harden({ +export const InstanceRecordShape = { installation: InstallationShape, instance: InstanceHandleShape, terms: M.splitRecord(TermsShape), -}); +}; +harden(InstanceRecordShape); export const HandleI = M.interface('Handle', {}); @@ -75,7 +77,7 @@ export const TimerShape = makeHandleShape('timer'); * * @see {ProposalRecord} type */ -export const FullProposalShape = harden({ +export const FullProposalShape = { want: AmountPatternKeywordRecordShape, give: AmountKeywordRecordShape, // To accept only one, we could use M.or rather than M.splitRecord, @@ -93,7 +95,9 @@ export const FullProposalShape = harden({ }, {}, ), -}); +}; +harden(FullProposalShape); + /** @see {Proposal} type */ export const ProposalShape = M.splitRecord({}, FullProposalShape, {}); @@ -107,6 +111,7 @@ export const isOnDemandExitRule = exit => { const [exitKey] = Object.keys(exit); return exitKey === 'onDemand'; }; +harden(isOnDemandExitRule); /** * @param {ExitRule} exit @@ -116,6 +121,7 @@ export const isWaivedExitRule = exit => { const [exitKey] = Object.keys(exit); return exitKey === 'waived'; }; +harden(isWaivedExitRule); /** * @param {ExitRule} exit @@ -125,6 +131,7 @@ export const isAfterDeadlineExitRule = exit => { const [exitKey] = Object.keys(exit); return exitKey === 'afterDeadline'; }; +harden(isAfterDeadlineExitRule); export const InvitationElementShape = M.splitRecord({ description: M.string(), @@ -137,12 +144,10 @@ export const OfferHandlerI = M.interface('OfferHandler', { handle: M.call(SeatShape).optional(M.any()).returns(M.any()), }); -export const SeatHandleAllocationsShape = M.arrayOf( - harden({ - seatHandle: SeatShape, - allocation: AmountKeywordRecordShape, - }), -); +export const SeatHandleAllocationsShape = M.arrayOf({ + seatHandle: SeatShape, + allocation: AmountKeywordRecordShape, +}); export const ZoeMintShape = M.remotable('ZoeMint'); export const ZoeMintI = M.interface('ZoeMint', { @@ -180,7 +185,7 @@ export const InstanceAdminI = M.interface('InstanceAdmin', { .optional( AssetKindShape, DisplayInfoShape, - M.splitRecord(harden({}), harden({ elementShape: M.pattern() })), + M.splitRecord({}, { elementShape: M.pattern() }), ) .returns(M.remotable('zoeMint')), registerFeeMint: M.call(KeywordShape, FeeMintAccessShape).returns( @@ -195,7 +200,7 @@ export const InstanceAdminI = M.interface('InstanceAdmin', { repairContractCompletionWatcher: M.call().returns(), }); -export const InstanceStorageManagerIKit = harden({ +export const InstanceStorageManagerIKit = { instanceStorageManager: M.interface('InstanceStorageManager', { getTerms: M.call().returns(M.splitRecord(TermsShape)), getIssuers: M.call().returns(IssuerKeywordRecordShape), @@ -208,7 +213,7 @@ export const InstanceStorageManagerIKit = harden({ .optional( AssetKindShape, DisplayInfoShape, - M.splitRecord(harden({}), harden({ elementShape: M.pattern() })), + M.splitRecord({}, { elementShape: M.pattern() }), ) .returns(M.eref(ZoeMintShape)), registerFeeMint: M.call(KeywordShape, FeeMintAccessShape).returns( @@ -240,7 +245,8 @@ export const InstanceStorageManagerIKit = harden({ M.remotable('adminNode'), ).returns(ZoeMintShape), }), -}); +}; +harden(InstanceStorageManagerIKit); export const BundleCapShape = M.remotable('bundleCap'); export const BundleShape = M.and( @@ -249,18 +255,16 @@ export const BundleShape = M.and( ); export const UnwrappedInstallationShape = M.splitRecord( - harden({ - installation: InstallationShape, - }), - harden({ + { installation: InstallationShape }, + { bundle: M.recordOf(M.string(), M.string({ stringLengthLimit: Infinity })), bundleCap: BundleCapShape, bundleID: M.string(), - }), - harden({}), + }, + {}, ); -export const ZoeStorageManagerIKit = harden({ +export const ZoeStorageManagerIKit = { zoeServiceDataAccess: M.interface('ZoeService dataAccess', { getTerms: M.call(InstanceHandleShape).returns(M.splitRecord(TermsShape)), getIssuers: M.call(InstanceHandleShape).returns(IssuerKeywordRecordShape), @@ -317,7 +321,8 @@ export const ZoeStorageManagerIKit = harden({ invitationIssuerAccess: M.interface('ZoeStorage invitationIssuer', { getInvitationIssuer: M.call().returns(IssuerShape), }), -}); +}; +harden(ZoeStorageManagerIKit); export const ZoeServiceI = M.interface('ZoeService', { install: M.call(M.any()).optional(M.string()).returns(M.promise()), @@ -391,7 +396,8 @@ export const HandleOfferI = M.interface('HandleOffer', { }), }); -export const PriceQuoteShape = harden({ +export const PriceQuoteShape = { quoteAmount: AmountShape, quotePayment: M.eref(PaymentShape), -}); +}; +harden(PriceQuoteShape); diff --git a/packages/zoe/src/zoeService/installationStorage.js b/packages/zoe/src/zoeService/installationStorage.js index f931c68838a..da6c53e6555 100644 --- a/packages/zoe/src/zoeService/installationStorage.js +++ b/packages/zoe/src/zoeService/installationStorage.js @@ -101,7 +101,6 @@ export const makeInstallationStorage = (getBundleCapForID, zoeBaggage) => { InstallationStorageI, { async installBundle(allegedBundle, bundleLabel) { - // @ts-expect-error TS doesn't understand context const { self } = this; // Bundle is a very open-ended type and we must decide here whether to // treat it as either a HashBundle or SourceBundle. So we have to @@ -149,7 +148,6 @@ export const makeInstallationStorage = (getBundleCapForID, zoeBaggage) => { } }, async getBundleIDFromInstallation(allegedInstallation) { - // @ts-expect-error TS doesn't understand context const { self } = this; const { bundleID } = await self.unwrapInstallation(allegedInstallation); // AWAIT diff --git a/packages/zoe/src/zoeService/startInstance.js b/packages/zoe/src/zoeService/startInstance.js index a0a1515f2a5..35bd0a718ce 100644 --- a/packages/zoe/src/zoeService/startInstance.js +++ b/packages/zoe/src/zoeService/startInstance.js @@ -85,7 +85,6 @@ export const makeStartInstance = ( onRejected: (/** @type {Error} */ reason, instanceAdmin, adminNode) => { if (isUpgradeDisconnection(reason)) { console.log(`resetting promise watcher after upgrade`, reason); - // eslint-disable-next-line no-use-before-define watchForAdminNodeDone(adminNode, instanceAdmin); } else { instanceAdmin.failAllSeats(reason); diff --git a/packages/zoe/src/zoeService/zoe.js b/packages/zoe/src/zoeService/zoe.js index 44990d6e4c1..e8983bdfb57 100644 --- a/packages/zoe/src/zoeService/zoe.js +++ b/packages/zoe/src/zoeService/zoe.js @@ -125,9 +125,7 @@ const makeDurableZoeKit = ({ name, vatParameters: { contractBundleCap, - // eslint-disable-next-line no-use-before-define zoeService, - // eslint-disable-next-line no-use-before-define invitationIssuer: invitationIssuerAccess.getInvitationIssuer(), }, }), diff --git a/packages/zoe/test/unitTests/zcf/zcf.test.js b/packages/zoe/test/unitTests/zcf/zcf.test.js index 828d3757325..216d3eded6b 100644 --- a/packages/zoe/test/unitTests/zcf/zcf.test.js +++ b/packages/zoe/test/unitTests/zcf/zcf.test.js @@ -200,7 +200,6 @@ test(`zcf.saveIssuer - bad issuer`, async t => { test(`zcf.saveIssuer - bad issuer, makeEmptyPurse throws`, async t => { const { zcf } = await setupZCFTest(); const brand = Far('brand', { - // eslint-disable-next-line no-use-before-define isMyIssuer: i => i === badIssuer, getDisplayInfo: () => ({ decimalPlaces: 6, assetKind: AssetKind.NAT }), }); diff --git a/packages/zoe/test/unitTests/zoe-startInstance.test.js b/packages/zoe/test/unitTests/zoe-startInstance.test.js index 552b0cdf41f..61e6f0a4794 100644 --- a/packages/zoe/test/unitTests/zoe-startInstance.test.js +++ b/packages/zoe/test/unitTests/zoe-startInstance.test.js @@ -115,7 +115,6 @@ test('bad issuer, makeEmptyPurse throws', async t => { const { zoe } = setup(); const installation = await E(zoe).installBundleID('b1-contract'); const brand = Far('brand', { - // eslint-disable-next-line no-use-before-define isMyIssuer: i => i === badIssuer, getDisplayInfo: () => ({ decimalPlaces: 6, assetKind: AssetKind.NAT }), }); diff --git a/packages/zone/package.json b/packages/zone/package.json index 27bd04c2f3e..611572c4b3a 100644 --- a/packages/zone/package.json +++ b/packages/zone/package.json @@ -10,7 +10,7 @@ "prepack": "tsc --build tsconfig.build.json", "postpack": "git clean -f '*.d.ts*' '*.tsbuildinfo'", "test": "ava", - "test:c8": "c8 $C8_OPTIONS ava --config=ava-nesm.config.js", + "test:c8": "c8 --all $C8_OPTIONS ava", "test:xs": "exit 0", "lint-fix": "yarn lint:eslint --fix", "lint": "run-s --continue-on-error lint:*", @@ -29,13 +29,13 @@ "dependencies": { "@agoric/base-zone": "^0.1.0", "@agoric/vat-data": "^0.5.2", - "@endo/errors": "^1.2.7", - "@endo/far": "^1.1.8", - "@endo/pass-style": "^1.4.6" + "@endo/errors": "^1.2.8", + "@endo/far": "^1.1.9", + "@endo/pass-style": "^1.4.7" }, "devDependencies": { "@agoric/swingset-vat": "^0.32.2", - "@endo/patterns": "^1.4.6", + "@endo/patterns": "^1.4.7", "ava": "^5.3.0" }, "publishConfig": { diff --git a/packages/zone/src/durable.js b/packages/zone/src/durable.js index 8f9461e489b..b0feedd98dc 100644 --- a/packages/zone/src/durable.js +++ b/packages/zone/src/durable.js @@ -50,7 +50,6 @@ const attachDurableStores = getBaggage => { /** @type {import('.').Stores} */ return Far('durableStores', { - // eslint-disable-next-line no-use-before-define detached: () => detachedDurableStores, isStorable, mapStore, diff --git a/scripts/ava-nesm.cjs b/scripts/ava-nesm.cjs deleted file mode 100755 index 8b922b98ffc..00000000000 --- a/scripts/ava-nesm.cjs +++ /dev/null @@ -1,16 +0,0 @@ -#! /usr/bin/env node -const fs = require('fs'); -const packageJson = fs.readFileSync('package.json', 'utf-8'); -const package = JSON.parse(packageJson); -const { ava: avaConfig } = package; -if (avaConfig.require) { - const newRequire = avaConfig.require.filter(m => m !== 'esm'); - if (newRequire.length) { - avaConfig.require = newRequire; - } else { - delete avaConfig.require; - } -} -process.stdout.write(`\ -export default ${JSON.stringify(avaConfig, undefined, 2)}; -`); diff --git a/scripts/ci/generate-test-coverage-report.sh b/scripts/ci/generate-test-coverage-report.sh new file mode 100755 index 00000000000..032bfd86839 --- /dev/null +++ b/scripts/ci/generate-test-coverage-report.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# CI artifact export expects the files to be under `coverage` (same for /html below) +export NODE_V8_COVERAGE="$PWD/coverage/tmp" + +# clear out old coverage. c8 usually does this but we have to clean=false below so it accumulates across packages +rm -rf "$NODE_V8_COVERAGE" +mkdir -p "$NODE_V8_COVERAGE" + +# the package test:c8 commands will include this +export C8_OPTIONS="--clean=false" + +# XXX uses lerna when `yarn workspaces run` should work, but in v1 it always bails on missing script +yarn lerna run test:c8 + +# report over all src and tools files, not just the ones that were loaded during tests +yarn c8 report --all --include 'packages/*/{src,tools}' --reporter=html-spa --reports-dir=coverage/html diff --git a/scripts/lint-with-types.sh b/scripts/lint-with-types.sh deleted file mode 100755 index a2821b626b0..00000000000 --- a/scripts/lint-with-types.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh - -# TODO consolidate back into one job https://github.com/Agoric/agoric-sdk/pull/8061 - -# argument used by CI to split this across two jobs -SCOPE=$1 - -# taking roughly half the time to eslint all packages -PRIMARY_PACKAGES="@agoric/{cosmos,ertp,governance,inter-protocol,swing-store,swingset-vat,vats,wallet,zoe}" - -case $SCOPE in - primary) - yarn lerna run --scope=$PRIMARY_PACKAGES --no-bail lint - ;; - rest) - yarn lerna run --ignore=$PRIMARY_PACKAGES --no-bail lint - ;; - *) - echo "The regular lint command now lints with types. Just use that." - exit 0 - ;; -esac diff --git a/yarn.lock b/yarn.lock index 9212b0e52af..a8f323ee92c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -7,6 +7,11 @@ resolved "https://registry.yarnpkg.com/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz#bd9154aec9983f77b3a034ecaa015c2e4201f6cf" integrity sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA== +"@adraffy/ens-normalize@1.10.1": + version "1.10.1" + resolved "https://registry.yarnpkg.com/@adraffy/ens-normalize/-/ens-normalize-1.10.1.tgz#63430d04bd8c5e74f8d7d049338f1cd9d4f02069" + integrity sha512-96Z2IP3mYmF1Xg2cDm8f1gWGf/HUVedQ3FMifV4kG/PQ4yEP51xDtRAEfhVNt5f/uzpNkZHwWQuUcu6D6K+Ekw== + "@agoric/babel-generator@^7.17.6": version "7.17.6" resolved "https://registry.yarnpkg.com/@agoric/babel-generator/-/babel-generator-7.17.6.tgz#75ff4629468a481d670b4154bcfade11af6de674" @@ -1160,6 +1165,16 @@ triple-beam "1.3.0" winston "3.3.3" +"@cosmjs/amino@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.3.tgz#b81d4a2b8d61568431a1afcd871e1344a19d97ff" + integrity sha512-G4zXl+dJbqrz1sSJ56H/25l5NJEk/pAPIr8piAHgbXYw88OdAOlpA26PQvk2IbSN/rRgVbvlLTNgX2tzz1dyUA== + dependencies: + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" + "@cosmjs/amino@^0.32.2", "@cosmjs/amino@^0.32.3", "@cosmjs/amino@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/amino/-/amino-0.32.4.tgz#3908946c0394e6d431694c8992c5147079a1c860" @@ -1199,6 +1214,15 @@ elliptic "^6.5.4" libsodium-wrappers-sumo "^0.7.11" +"@cosmjs/encoding@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.3.tgz#e245ff511fe4a0df7ba427b5187aab69e3468e5b" + integrity sha512-p4KF7hhv8jBQX3MkB3Defuhz/W0l3PwWVYU2vkVuBJ13bJcXyhU9nJjiMkaIv+XP+W2QgRceqNNgFUC5chNR7w== + dependencies: + base64-js "^1.3.0" + bech32 "^1.1.4" + readonly-date "^1.0.0" + "@cosmjs/encoding@^0.32.1", "@cosmjs/encoding@^0.32.2", "@cosmjs/encoding@^0.32.3", "@cosmjs/encoding@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/encoding/-/encoding-0.32.4.tgz#646e0e809f7f4f1414d8fa991fb0ffe6c633aede" @@ -1223,6 +1247,13 @@ "@cosmjs/stream" "^0.32.4" xstream "^11.14.0" +"@cosmjs/math@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.3.tgz#16e4256f4da507b9352327da12ae64056a2ba6c9" + integrity sha512-amumUtZs8hCCnV+lSBaJIiZkGabQm22QGg/IotYrhcmoOEOjt82n7hMNlNXRs7V6WLMidGrGYcswB5zcmp0Meg== + dependencies: + bn.js "^5.2.0" + "@cosmjs/math@^0.32.1", "@cosmjs/math@^0.32.2", "@cosmjs/math@^0.32.3", "@cosmjs/math@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/math/-/math-0.32.4.tgz#87ac9eadc06696e30a30bdb562a495974bfd0a1a" @@ -1230,6 +1261,18 @@ dependencies: bn.js "^5.2.0" +"@cosmjs/proto-signing@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.3.tgz#91ae149b747d18666a6ccc924165b306431f7c0d" + integrity sha512-kSZ0ZUY0DwcRT0NcIn2HkadH4NKlwjfZgbLj1ABwh/4l0RgeT84QCscZCu63tJYq3K6auwqTiZSZERwlO4/nbg== + dependencies: + "@cosmjs/amino" "^0.32.3" + "@cosmjs/crypto" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/utils" "^0.32.3" + cosmjs-types "^0.9.0" + "@cosmjs/proto-signing@^0.32.1", "@cosmjs/proto-signing@^0.32.2", "@cosmjs/proto-signing@^0.32.3", "@cosmjs/proto-signing@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/proto-signing/-/proto-signing-0.32.4.tgz#5a06e087c6d677439c8c9b25b5223d5e72c4cd93" @@ -1252,7 +1295,23 @@ ws "^7" xstream "^11.14.0" -"@cosmjs/stargate@^0.32.1", "@cosmjs/stargate@^0.32.2", "@cosmjs/stargate@^0.32.3": +"@cosmjs/stargate@0.32.3": + version "0.32.3" + resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.3.tgz#5a92b222ada960ebecea72cc9f366370763f4b66" + integrity sha512-OQWzO9YWKerUinPIxrO1MARbe84XkeXJAW0lyMIjXIEikajuXZ+PwftiKA5yA+8OyditVmHVLtPud6Pjna2s5w== + dependencies: + "@confio/ics23" "^0.6.8" + "@cosmjs/amino" "^0.32.3" + "@cosmjs/encoding" "^0.32.3" + "@cosmjs/math" "^0.32.3" + "@cosmjs/proto-signing" "^0.32.3" + "@cosmjs/stream" "^0.32.3" + "@cosmjs/tendermint-rpc" "^0.32.3" + "@cosmjs/utils" "^0.32.3" + cosmjs-types "^0.9.0" + xstream "^11.14.0" + +"@cosmjs/stargate@^0.32.1", "@cosmjs/stargate@^0.32.2", "@cosmjs/stargate@^0.32.3", "@cosmjs/stargate@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/stargate/-/stargate-0.32.4.tgz#bd0e4d3bf613b629addbf5f875d3d3b50f640af1" integrity sha512-usj08LxBSsPRq9sbpCeVdyLx2guEcOHfJS9mHGCLCXpdAPEIEQEtWLDpEUc0LEhWOx6+k/ChXTc5NpFkdrtGUQ== @@ -1268,7 +1327,7 @@ cosmjs-types "^0.9.0" xstream "^11.14.0" -"@cosmjs/stream@^0.32.1", "@cosmjs/stream@^0.32.4": +"@cosmjs/stream@^0.32.1", "@cosmjs/stream@^0.32.3", "@cosmjs/stream@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/stream/-/stream-0.32.4.tgz#83e1f2285807467c56d9ea0e1113f79d9fa63802" integrity sha512-Gih++NYHEiP+oyD4jNEUxU9antoC0pFSg+33Hpp0JlHwH0wXhtD3OOKnzSfDB7OIoEbrzLJUpEjOgpCp5Z+W3A== @@ -1291,7 +1350,7 @@ readonly-date "^1.0.0" xstream "^11.14.0" -"@cosmjs/utils@^0.32.1", "@cosmjs/utils@^0.32.2", "@cosmjs/utils@^0.32.4": +"@cosmjs/utils@^0.32.1", "@cosmjs/utils@^0.32.2", "@cosmjs/utils@^0.32.3", "@cosmjs/utils@^0.32.4": version "0.32.4" resolved "https://registry.yarnpkg.com/@cosmjs/utils/-/utils-0.32.4.tgz#a9a717c9fd7b1984d9cefdd0ef6c6f254060c671" integrity sha512-D1Yc+Zy8oL/hkUkFUL/bwxvuDBzRGpc4cF7/SkdhxX4iHpSLgdOuTt1mhCh9+kl6NQREy9t7SYZ6xeW5gFe60w== @@ -1472,271 +1531,272 @@ resolved "https://registry.yarnpkg.com/@datadog/sketches-js/-/sketches-js-2.1.0.tgz#8c7e8028a5fc22ad102fa542b0a446c956830455" integrity sha512-smLocSfrt3s53H/XSVP3/1kP42oqvrkjUPtyaFd1F79ux24oE31BKt+q0c6lsa6hOYrFzsIwyc5GXAI5JmfOew== -"@endo/base64@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-1.0.8.tgz#85e18bbab74cc1469b6e3f552e8bb7f1f21bb851" - integrity sha512-wYfwgni3cY7lYCzk/8DD5150j0hukGVgJ1kczRTiGfXyd0QRxjfn0CcWeWph3ML+9Gh+CLOMotiVWQlCGMqrYQ== - -"@endo/bundle-source@^3.4.2": - version "3.4.2" - resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-3.4.2.tgz#e827ba82897e56fd37e7903b03e350193f64b894" - integrity sha512-aZw9GNzYUMteGz0DwPBGX0fokOWYsGBokvbs8NeR1gOV+WY4bguveFfdVTMV+nZncu06ohAiaw0eFvVDM7kcXQ== - dependencies: - "@endo/base64" "^1.0.8" - "@endo/compartment-mapper" "^1.3.1" - "@endo/evasive-transform" "^1.3.2" - "@endo/init" "^1.1.6" - "@endo/promise-kit" "^1.1.7" - "@endo/where" "^1.0.8" +"@endo/base64@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@endo/base64/-/base64-1.0.9.tgz#53a05e8d461a63443097165397a7aef33a11b251" + integrity sha512-iUZJSE3EeFxHgk5pRaj83Tv6B0BJHJOpV6UqGv0K3UBn4azQysWRR5IzlXzxcVIpPiSVlOhG/6uCqTxP5cE1ug== + +"@endo/bundle-source@^3.5.0": + version "3.5.0" + resolved "https://registry.yarnpkg.com/@endo/bundle-source/-/bundle-source-3.5.0.tgz#2678aeebf5e3dda1ee1b0519ac375466a3d1abf2" + integrity sha512-1yWE6s7mn79A2e/8JM4DYNckb29LnD5W1Zm/VPqfpvw8XnJUxg/49Bki0Pdcd2pQDZpCJkb4rnBelFtH6WUelw== + dependencies: + "@endo/base64" "^1.0.9" + "@endo/compartment-mapper" "^1.4.0" + "@endo/evasive-transform" "^1.3.3" + "@endo/init" "^1.1.7" + "@endo/promise-kit" "^1.1.8" + "@endo/where" "^1.0.9" "@rollup/plugin-commonjs" "^19.0.0" "@rollup/plugin-json" "^6.1.0" "@rollup/plugin-node-resolve" "^13.0.0" acorn "^8.2.4" rollup "^2.79.1" + ts-blank-space "^0.4.1" -"@endo/captp@^4.4.2": - version "4.4.2" - resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-4.4.2.tgz#2026fd609cd8b7fc8b7f30d6fdc53ba0ae85136c" - integrity sha512-v9yH9wy2HdWm+JkGUSA7wOjzftEofXHHnpbwL6gyuG7Ckl8Qr6yFG4F6azkTA/uJt0uFx8Gqj8jrhMt6hWAtAg== +"@endo/captp@^4.4.3": + version "4.4.3" + resolved "https://registry.yarnpkg.com/@endo/captp/-/captp-4.4.3.tgz#4d0078f5437fc9f4e61aa1344cef19939c630c6f" + integrity sha512-t6KJviFO3H7S5MmfSLDx2od4voK0wwAnjFEZXczru5/ggiSfmYWU47czuTFUetK38dWVOhp/TF42I/Y++4sIKQ== dependencies: - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/marshal" "^1.6.1" - "@endo/nat" "^5.0.12" - "@endo/promise-kit" "^1.1.7" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/marshal" "^1.6.2" + "@endo/nat" "^5.0.13" + "@endo/promise-kit" "^1.1.8" -"@endo/check-bundle@^1.0.11": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-1.0.11.tgz#5bd80384a2202f4f01590395d98c3e787aa45d5e" - integrity sha512-f9TIkm1hEDJJ8QLgD/m0R16GXGPolos1KoG/PQwRGYodI+ZiLsQUsWfkL6NgpjjTVA8/BxFkRLHvAmOcCW5pXg== +"@endo/check-bundle@^1.0.12": + version "1.0.12" + resolved "https://registry.yarnpkg.com/@endo/check-bundle/-/check-bundle-1.0.12.tgz#11157d2d665fbfff0102fa0076f9473009bfa487" + integrity sha512-8pbfnNCelLQJUQLz48OtMl+WT0IuiAWvxVziS9T7qJQhautZoRAdUTtwGYIePg/XrpyxHHWo27wKh8YGG0EUZQ== dependencies: - "@endo/base64" "^1.0.8" - "@endo/compartment-mapper" "^1.3.1" - "@endo/errors" "^1.2.7" + "@endo/base64" "^1.0.9" + "@endo/compartment-mapper" "^1.4.0" + "@endo/errors" "^1.2.8" -"@endo/cjs-module-analyzer@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-1.0.8.tgz#370a2b46a0610323dccc0dc2495be0ff744e6462" - integrity sha512-LGmZf+ehHaXrh0ClDFIIataTsx47Y4YOWDNUZlkOWyugHUAlh5BWoLk6t63GmXFPFs/Bn5KT1fQJqP5aQj3g6A== +"@endo/cjs-module-analyzer@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@endo/cjs-module-analyzer/-/cjs-module-analyzer-1.0.9.tgz#09f042e1e828dce7e2a3729e1b3a7667eb3e30f4" + integrity sha512-uc6SJx0BzTz/JQ2A2SPt2eMVcIZRLyJ9LF94esuQaNoC8ZJOiCDOY7OmiwdIL+xO9qL9uA4sne5/kRTc9bDGEg== -"@endo/common@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@endo/common/-/common-1.2.7.tgz#c8d8d395d6d25a9b59d73591211c001627c150fd" - integrity sha512-h3DCqituzGW+UKlzWm20tMDYJsstByYv7HzqOXnFKtrtrEXj1qE5YJj0QWFxfYlgUsxQQosx1F0BPrnEwRR7MA== +"@endo/common@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@endo/common/-/common-1.2.8.tgz#896e895a79f9ce1db09cbbe0f4bbc67198379088" + integrity sha512-aQ8ZT8XpjaTfIcWHXV4equVVGH/0PVY+HtEDl5Rk75D/p6JMCfoMwk6Gf2LDu9u+KDa8cEuNw+Rzl/bnx02ffw== dependencies: - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/promise-kit" "^1.1.7" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/promise-kit" "^1.1.8" -"@endo/compartment-mapper@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-1.3.1.tgz#bb8cc999feae270f8b8e324b78b058475b019d34" - integrity sha512-1zH5UFC8SJZDBDBLdwX2RkusieLL/+KolAeGQLrYiyXgAjgmCPwlxmrxk33Yc3OQqpBmEEIwgAR+dki8STeacw== +"@endo/compartment-mapper@^1.4.0": + version "1.4.0" + resolved "https://registry.yarnpkg.com/@endo/compartment-mapper/-/compartment-mapper-1.4.0.tgz#c44baba774b320b107b5b5e9d7868ed00ec7769f" + integrity sha512-OqR2MX5kXpAe/H6DqiwkoanOZvoVXNeTnLbKxcJ0jweVleCndlJ9oOKTp7OI66GnKRQj/U0Iu4doSm/xcUmlsg== dependencies: - "@endo/cjs-module-analyzer" "^1.0.8" - "@endo/module-source" "^1.1.1" - "@endo/trampoline" "^1.0.2" - "@endo/zip" "^1.0.8" - ses "^1.9.1" + "@endo/cjs-module-analyzer" "^1.0.9" + "@endo/module-source" "^1.1.2" + "@endo/trampoline" "^1.0.3" + "@endo/zip" "^1.0.9" + ses "^1.10.0" -"@endo/env-options@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@endo/env-options/-/env-options-1.1.7.tgz#f8f9186010cff12506fdd8f5c8cd4d9051830fd8" - integrity sha512-8twSTbM45rzIP0lHw99ei1EaW98H2BXYKjCTUcq1qgK2OvQWaoiXNcJvUQQo1g7i3oPwbXTQsY69L+nTNeCDyA== +"@endo/env-options@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@endo/env-options/-/env-options-1.1.8.tgz#dbfcfbf7574f2a793155281d035c8d6f809f5828" + integrity sha512-Xtxw9n33I4guo8q0sDyZiRuxlfaopM454AKiELgU7l3tqsylCut6IBZ0fPy4ltSHsBib7M3yF7OEMoIuLwzWVg== -"@endo/errors@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@endo/errors/-/errors-1.2.7.tgz#cd8513a8e5544f4caec3eb47dd2ec101b445ea8f" - integrity sha512-StTidOD6ermjj46VGXHdsRrPDyvD7+xsT1x20hZlYe+bZfUn0q/JvqMq51O2/fVA0UPuVu61uQXD7m5MH7sklw== +"@endo/errors@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@endo/errors/-/errors-1.2.8.tgz#c2ead8072c92115d5959e2d9ca4d1e46b8e0d8fc" + integrity sha512-YmnfN8d2ho6LrEHxthKVOXktOUc8+fePd+Ua1dGAUJWLYBa/vMaYiMuxNelkn4JxREa/7kz5YqIlnscLe4TX3A== dependencies: - ses "^1.9.1" + ses "^1.10.0" -"@endo/eslint-plugin@^2.2.2": - version "2.2.2" - resolved "https://registry.yarnpkg.com/@endo/eslint-plugin/-/eslint-plugin-2.2.2.tgz#74bf1b3cecb51792ab983d92f2a622a59341620f" - integrity sha512-tUVKReiAhUBzJaSRBQaUGf0piix3p3ofTDSBeJ3WbRQ6/D8ncTb12aSG0lpy3IfsJxbNRcfKPEulnLggBVzssQ== +"@endo/eslint-plugin@^2.2.3": + version "2.2.3" + resolved "https://registry.yarnpkg.com/@endo/eslint-plugin/-/eslint-plugin-2.2.3.tgz#713e35e57469dd52033db7876f0dd5d81769a1b4" + integrity sha512-Agug8uNCIVnYbhSeh3M2FnDcAWPrOCL74IkOh/jRg/s1zeupnUIcBUGyhXwC90ZS2xm4Z3Bo0myXFuKotc22QA== dependencies: requireindex "~1.1.0" tsutils "~3.21.0" - typescript "~5.6.2" + typescript "~5.6.3" typescript-eslint "^7.3.1" -"@endo/evasive-transform@^1.3.2": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@endo/evasive-transform/-/evasive-transform-1.3.2.tgz#94d3cd7e6f329e6bed566fd4deb0f95bea8584fe" - integrity sha512-Bd1+PJlXbOk54ICjwHiKVtAIDw8dgM3QfuE4xN8KeInA+0spOMT0QN0NFO7ISvy0Miw4blOszsfM3RnXPqQrSg== +"@endo/evasive-transform@^1.3.3": + version "1.3.3" + resolved "https://registry.yarnpkg.com/@endo/evasive-transform/-/evasive-transform-1.3.3.tgz#d82b39ba47d5e234337856579c746695cb065fe6" + integrity sha512-cstX1OykuDiZaFrJoPDgd0jE/6lZatErX/xBykLYH9UfSRxY1/h1jmo9sDgqTl8QnSWcwSjb3dtXSC0CQJXx9w== dependencies: "@agoric/babel-generator" "^7.17.6" "@babel/parser" "^7.23.6" "@babel/traverse" "^7.23.6" source-map-js "^1.2.0" -"@endo/eventual-send@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-1.2.7.tgz#b4f5408bba1dd1974f147ecb8c346d443b5a31f5" - integrity sha512-5acCJhp2OBgQc9/Sp1BKpMu1xZHvaXaZa7UybRhc5qEKlC1AHt936wkVdypER96pEVllnNYJi1lBoqBfiV5zag== +"@endo/eventual-send@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@endo/eventual-send/-/eventual-send-1.2.8.tgz#83bf2ec4a940f2b8d2992eba6902d15eb43ec8f1" + integrity sha512-3SgjX+2X4p7IGLFV7Yn6Rj8cQz71KyyzB645njFS94fWgT5LMzetjHu3+yIkoBSUHbXxl9U7EK1iS8UBPIJjDQ== dependencies: - "@endo/env-options" "^1.1.7" + "@endo/env-options" "^1.1.8" -"@endo/exo@^1.5.6": - version "1.5.6" - resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-1.5.6.tgz#312a572992a137682adce4d0506875773b53f087" - integrity sha512-F3CcDBdqsnrAewzydbGELpfTDeaod278PA2CpqNuEBQySdbn93zNuh3KNRkbPrnQSstDCwv4WBZYzqea7RPSzA== +"@endo/exo@^1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@endo/exo/-/exo-1.5.7.tgz#7d83a4c2d9c994e6428f914199cc15c8cceb2b9d" + integrity sha512-mVclo0Ll6ujK7SkG+dKroYgE0g3KRv45TvJngRJ4NxTw3U37Kig9ntDVQkDnyNAVziomVLEnkbPUYc4l16Bq3w== dependencies: - "@endo/common" "^1.2.7" - "@endo/env-options" "^1.1.7" - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/far" "^1.1.8" - "@endo/pass-style" "^1.4.6" - "@endo/patterns" "^1.4.6" + "@endo/common" "^1.2.8" + "@endo/env-options" "^1.1.8" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/far" "^1.1.9" + "@endo/pass-style" "^1.4.7" + "@endo/patterns" "^1.4.7" -"@endo/far@^1.0.0", "@endo/far@^1.1.8": - version "1.1.8" - resolved "https://registry.yarnpkg.com/@endo/far/-/far-1.1.8.tgz#c8212b8182dd671719dc54e55f6406115f2966de" - integrity sha512-xtfKPj1bhefpMouI+6q6zjfwDSSnaCZaSDqjClBrx6SnEO1B3ARdxtmiMEOgCdsw1XakvQwq8HDUWqDWEusJFQ== +"@endo/far@^1.0.0", "@endo/far@^1.1.9": + version "1.1.9" + resolved "https://registry.yarnpkg.com/@endo/far/-/far-1.1.9.tgz#ef14b5d4137309498978f002d4412786c8a879b2" + integrity sha512-R7EBw1T4Wqysh0Q/tNkpth0eb18Y+iigyzYVIbLIs0uZztr5GHLwAOUWGkceCJJ51dSgV9kYiDDeM0wBwv+ZoQ== dependencies: - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/pass-style" "^1.4.6" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/pass-style" "^1.4.7" -"@endo/import-bundle@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-1.3.1.tgz#15d9decae5e0a2d418c23894734780e752819d17" - integrity sha512-2zW0JPMZ9Shy5aJac6UvqHv5KWHPLgoArE95ugdrqrDFlirAtb7tt2/siHqUdYsStwbrX5HhMY6QMdbo27gNrQ== +"@endo/import-bundle@^1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@endo/import-bundle/-/import-bundle-1.3.2.tgz#a441cc147bb53e8a80d19574ae8776fbb841dfa3" + integrity sha512-wsJaFJPTNj3FgMuaywLZYTj2dI1sacZ8it51o84ub9kEXnB3xbaoE2qDjw00xd7cyLvVqq55zo5h+tW9qj8xLA== dependencies: - "@endo/base64" "^1.0.8" - "@endo/compartment-mapper" "^1.3.1" - "@endo/errors" "^1.2.7" - "@endo/where" "^1.0.8" - ses "^1.9.1" + "@endo/base64" "^1.0.9" + "@endo/compartment-mapper" "^1.4.0" + "@endo/errors" "^1.2.8" + "@endo/where" "^1.0.9" + ses "^1.10.0" -"@endo/init@^1.1.6": - version "1.1.6" - resolved "https://registry.yarnpkg.com/@endo/init/-/init-1.1.6.tgz#d07aead37ee228bc5ed7c1847e456585201a42d3" - integrity sha512-DMRPXL2lr71NLlurg4VfRxLvnxsDqbqWhuV4+QcgH9cWdg6RBaVn+GgUR8BTU7jGJvRgYVnFtiXCy86FvoPhkQ== +"@endo/init@^1.1.7": + version "1.1.7" + resolved "https://registry.yarnpkg.com/@endo/init/-/init-1.1.7.tgz#3ab328ae0145c3b0e247be9cbdc12d3e714fad25" + integrity sha512-JmnJ1YgoLqhmglujm401D0N1IgYPL/TYf03KgwcpfoN72RCHv0nx4iKR1T05tXJPsEawpF94vHKBV41D1MzLgg== dependencies: - "@endo/base64" "^1.0.8" - "@endo/eventual-send" "^1.2.7" - "@endo/lockdown" "^1.0.12" - "@endo/promise-kit" "^1.1.7" + "@endo/base64" "^1.0.9" + "@endo/eventual-send" "^1.2.8" + "@endo/lockdown" "^1.0.13" + "@endo/promise-kit" "^1.1.8" -"@endo/lockdown@^1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-1.0.12.tgz#589cb12c42a3cc70fc708b72c39582cb8f7e5821" - integrity sha512-2okxPEB3dvK6QN9J7+PADdJCOtCQzMDUlECAByNA+6lScTWPfV0apnI1AenV9Wje+lw7VEMf0Q32iwzhJ6Wv6g== +"@endo/lockdown@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@endo/lockdown/-/lockdown-1.0.13.tgz#b78b7a9329ba676b4e82c2e423b12b09a7811123" + integrity sha512-bFELKY1wWP/WqNWsUiP77OiHT8MjHzgrmUosLqx7uhF8u7XSyUOlFQ0pnT5R4rTDZwMNU6VWwPNt/wH7rnUfAw== dependencies: - ses "^1.9.1" + ses "^1.10.0" -"@endo/marshal@^1.6.1": - version "1.6.1" - resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-1.6.1.tgz#fc65e0bef08b247e5f144998e52325cc03ce98be" - integrity sha512-EJjupTx0OO2N9idA2eL/JabgAWC7T5A0WL1y7C5EeUMZRcVVtoaRaDDVip8jq2GK5kNy767jG5yYyRO93bZ+RA== +"@endo/marshal@^1.6.2": + version "1.6.2" + resolved "https://registry.yarnpkg.com/@endo/marshal/-/marshal-1.6.2.tgz#b1741eeeb7cea4ec71393d5b221aa45732e2378c" + integrity sha512-fe7oYCMfBdmz7Bj46bcF2VjDyyJoIht5osXpPcw/xX5zSwa6Kt4eHgP5Qwf0HHRkkR1pI1AUQFm6jgNQyAMxxQ== dependencies: - "@endo/common" "^1.2.7" - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/nat" "^5.0.12" - "@endo/pass-style" "^1.4.6" - "@endo/promise-kit" "^1.1.7" + "@endo/common" "^1.2.8" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/nat" "^5.0.13" + "@endo/pass-style" "^1.4.7" + "@endo/promise-kit" "^1.1.8" -"@endo/module-source@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@endo/module-source/-/module-source-1.1.1.tgz#2177dd3ec3a02fa882f5450280b27358f1998228" - integrity sha512-btu6OHq4vqEKgWINyZ+vl4SFLFG2ZfAQORIyrfV7VLDfTR68G1422u/dozWTgmGiooUL5Ht4HHrmkEYbnX0dIQ== +"@endo/module-source@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@endo/module-source/-/module-source-1.1.2.tgz#fab0ebed5f66d2981dae11a8435a67b5c88ad526" + integrity sha512-HvJyZBwxtDbHzaIqmuQBuPN3T6meOF51txuC93WrIYl7g4xnePo1R/wRJDiFfRC55F+tv7/Xdd3lh9dOI+8USg== dependencies: "@agoric/babel-generator" "^7.17.6" "@babel/parser" "^7.23.6" "@babel/traverse" "^7.23.6" "@babel/types" "^7.24.0" - ses "^1.9.1" + ses "^1.10.0" -"@endo/nat@^5.0.12": - version "5.0.12" - resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-5.0.12.tgz#80d71e30c55a264f35e0b4ece114e4951373724f" - integrity sha512-MOwIO/rElktFyl9qJLSU0MkFS87AuH55OgHJXyxKS8x9D7u0ke3XnDPMjvg2VRkNvAA/alOGoC6rnfwe2Q9XiQ== +"@endo/nat@^5.0.13": + version "5.0.13" + resolved "https://registry.yarnpkg.com/@endo/nat/-/nat-5.0.13.tgz#23a465506eba5c52ae91ec4e9b87d630912c6592" + integrity sha512-95slEnftfw7d35oYDXRmKl29KVJM5KXhP6zGBRTnX+ls0lLyw23aSNGnhy0RGbqIq1/kGrq3iQNbevOfrtJdNQ== -"@endo/netstring@^1.0.12": - version "1.0.12" - resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-1.0.12.tgz#b9ac05b8d989a2c88a8b12eae13c4d445101445c" - integrity sha512-9TVonLFE6JOq6Hg0ffTb3+pL7AMSFSpioBXxN4qu/0dPH3T82D+RMnHElO7pnih9fwj53Y9LJB/cmWAHJCkRhg== - dependencies: - "@endo/init" "^1.1.6" - "@endo/promise-kit" "^1.1.7" - "@endo/stream" "^1.2.7" - ses "^1.9.1" - -"@endo/pass-style@^1.4.6": - version "1.4.6" - resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-1.4.6.tgz#75092d33ad5183be120fb662361eef44c28f7768" - integrity sha512-9Tjvi2ZEek9xOOsGy4C5n1yQc91ciqi1r2LNA8BERsl/1g2AuXOtRb/cIVgeUOt1uumO5E1Wg3yKVkcnwLeVqg== - dependencies: - "@endo/env-options" "^1.1.7" - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/promise-kit" "^1.1.7" +"@endo/netstring@^1.0.13": + version "1.0.13" + resolved "https://registry.yarnpkg.com/@endo/netstring/-/netstring-1.0.13.tgz#061e7abf956e1dab7d61ed1aa4af5bbfdd6bf371" + integrity sha512-Bi9M9Ka/1KT88/1voHCCpzyE/pyCjmvwFR2npfU7QCj3nmNMGY+oPKe6fAVOX9sAYRud7p1gscCR9AkWCuKLLg== + dependencies: + "@endo/init" "^1.1.7" + "@endo/promise-kit" "^1.1.8" + "@endo/stream" "^1.2.8" + ses "^1.10.0" + +"@endo/pass-style@^1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@endo/pass-style/-/pass-style-1.4.7.tgz#8a8fd5b23322a4ece80ac6d56502ab8049609263" + integrity sha512-vuIYsA/zQCx1Ikqivfvv0yDWtbF5IGuOLYXzFzDY/VAYjN2U6a6Qgyp8TV8xLaGKqTq+QDlk/WxtFLQ34uu2BQ== + dependencies: + "@endo/env-options" "^1.1.8" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/promise-kit" "^1.1.8" "@fast-check/ava" "^1.1.5" -"@endo/patterns@^1.4.6": - version "1.4.6" - resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-1.4.6.tgz#4e23a6b1f06294ce713c8dd24041201dd242225e" - integrity sha512-gDAMbFp6BzRV4SFvn92mrxt9p3ODtyLAE6SwRt+K9mVDzL5pcjKt+LvKOGy6ngZwPkcgyf6/hzryqNPofb5Lgw== +"@endo/patterns@^1.4.7": + version "1.4.7" + resolved "https://registry.yarnpkg.com/@endo/patterns/-/patterns-1.4.7.tgz#f3e275b1f3c7b90a352f8879d7470339fede18bf" + integrity sha512-hPWdcpmYX8exTTtAFTrU1eIAZlAKhzPCSb8tvWFPU43DobAlOLez32H+tx0tWRUeZRfFNFBO0nFR+KImDZo1hw== dependencies: - "@endo/common" "^1.2.7" - "@endo/errors" "^1.2.7" - "@endo/eventual-send" "^1.2.7" - "@endo/marshal" "^1.6.1" - "@endo/promise-kit" "^1.1.7" + "@endo/common" "^1.2.8" + "@endo/errors" "^1.2.8" + "@endo/eventual-send" "^1.2.8" + "@endo/marshal" "^1.6.2" + "@endo/promise-kit" "^1.1.8" -"@endo/promise-kit@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-1.1.7.tgz#04c84ef2a2047b94925fcc8ad4feb22cb0a7b2a0" - integrity sha512-WuelSrrgyi01ieUAlaVmQPWOPcKWpifF6t6Cr6ef0Wrmpygp3d45/ucOqKkuVlBckfMQh24/KxAhsiovgy2N2A== +"@endo/promise-kit@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@endo/promise-kit/-/promise-kit-1.1.8.tgz#412c7fc746b331fe9f3df2fe1ad5a0944a875013" + integrity sha512-Pfp/y2QtNIr1BlGveANzTxr5sXs4B4BdkLF54WcVyeydi3fqvNdESSTUJSVF6xLefrJf3OqsZ4LxEQTWruMbTw== dependencies: - ses "^1.9.1" + ses "^1.10.0" -"@endo/ses-ava@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-1.2.7.tgz#730e102477cf1c316eb04d4e038cdda9728344e7" - integrity sha512-hZbbgQhVUCUOMfpr7Zs8k4oQBJaX5R2x3icWhwReD6b26PUUG2n+HrutYk3Tdtjc9BXCtOZNls3Ql1nqBu2bHA== +"@endo/ses-ava@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@endo/ses-ava/-/ses-ava-1.2.8.tgz#eeafc20e8c9f79021b03ffaa84182e347766594a" + integrity sha512-DVLwSjEB+tlS83seGfeJk3q7JxiZF7Er05PUTk4mOfAgVhCKDcPSEAm1EZ8afWS2cf/f3nZE9n1Vlc8FRBEx/A== dependencies: - "@endo/env-options" "^1.1.7" - "@endo/init" "^1.1.6" - ses "^1.9.1" + "@endo/env-options" "^1.1.8" + "@endo/init" "^1.1.7" + ses "^1.10.0" -"@endo/stream-node@^1.1.7": - version "1.1.7" - resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-1.1.7.tgz#567efb430c1d1fdd25f04813be4b5e894c27ed0d" - integrity sha512-1QrwlfhMAyk2jB9dDK0M1sDiihlDKvRLSuhV0HxJF9eG2GxT+5vCXcu0WMx+O18oXqm0YSnhkMApI+y66eDpOA== +"@endo/stream-node@^1.1.8": + version "1.1.8" + resolved "https://registry.yarnpkg.com/@endo/stream-node/-/stream-node-1.1.8.tgz#5590c12ab60eee9b140650262d0d8bbe1148a311" + integrity sha512-Lvx8P4Z1vHwbX8HEaJGDd+J4ljkaHA3KcRrAwNCkm+1EKQxiRFVKZQZrA/uCg7P9mVVtv5cAXCl9l7XN/Ti0Vw== dependencies: - "@endo/errors" "^1.2.7" - "@endo/init" "^1.1.6" - "@endo/stream" "^1.2.7" - ses "^1.9.1" + "@endo/errors" "^1.2.8" + "@endo/init" "^1.1.7" + "@endo/stream" "^1.2.8" + ses "^1.10.0" -"@endo/stream@^1.2.7": - version "1.2.7" - resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-1.2.7.tgz#60743539df3138a4589929d81e7a6df33a87e5aa" - integrity sha512-/ckaNtSFEJcEvpnw15nqH0ard/S2NPIKus4D3lmaH51K+F+cKJ6QRuXcSeTG0TTcIWYhM1YJmD6AQjUTjCBUZA== +"@endo/stream@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@endo/stream/-/stream-1.2.8.tgz#0f2226618bd0190b78ea7e725916265a9b97f8fa" + integrity sha512-Ox+3p+MIkIGtH/x62d0ZJIBW5nzm6jcQ2dDNW/AEpLXNa+Pc7vzBdBdC41CW8n7BbYt+Ak49r4/as+rbKDZiyQ== dependencies: - "@endo/eventual-send" "^1.2.7" - "@endo/promise-kit" "^1.1.7" - ses "^1.9.1" + "@endo/eventual-send" "^1.2.8" + "@endo/promise-kit" "^1.1.8" + ses "^1.10.0" -"@endo/trampoline@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@endo/trampoline/-/trampoline-1.0.2.tgz#2e2e41ccd361f21b4f208c696200150b79e093b2" - integrity sha512-S65oqY4dtRyoMREFWrW7/ujB20vkNWQzg737qnl+5Cjv2ar2te42fOjQfo7EEJ8OekybU38i0iRS6h/ZhXgKfQ== +"@endo/trampoline@^1.0.3": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@endo/trampoline/-/trampoline-1.0.3.tgz#24bcd3dee5645a747a37f284716709ffd02ec3cd" + integrity sha512-TYtvWSc97yV/LZDRc5mD4Wt9toKm2UyVjv66FAFiQRsoeKkEaXbus9Ka9byV1MwZv0P1xhCJ5yPV5Q6F9w0Wpw== -"@endo/where@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@endo/where/-/where-1.0.8.tgz#136874439b3bf043a0b4eca17062a384389ea051" - integrity sha512-zOc/laKO3+ioYRAeMR6fyzglipB8mHgIucVjZQigEa4fU4VxgNAJVEGze6Z7SPQ//ZtTcmKGsKaTlZA6dY9KMg== +"@endo/where@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@endo/where/-/where-1.0.9.tgz#eafc3c610c53b273e8b04a6d1211c84bde5f53e6" + integrity sha512-p3kcsy3kNKayOmkFhYXSSzb4igSg/+QdWv7n1RVwPwYcre1Tp7n6xKkAv2c3WsERNzBa1ZjRd3btr9c2MBBmMw== -"@endo/zip@^1.0.8": - version "1.0.8" - resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-1.0.8.tgz#1f667e4966ce3aa3c9fc31c180eba966ff2f6891" - integrity sha512-o+qrVrSPJjOyy2a8uGaIQ9lc31XDtVlYvK3/urIWPwajZyAyPp7Yrj0feGK7zjeWzfxSN7ycl27JyhN7lSXITg== +"@endo/zip@^1.0.9": + version "1.0.9" + resolved "https://registry.yarnpkg.com/@endo/zip/-/zip-1.0.9.tgz#f16b68d3e03f838de762779e5c9aa1731a27c1fc" + integrity sha512-Iuvm6oZBVQVKpLG6KtjdyTOF2od2lOdjEr2a2UC3ppCxAJRSDC9EQMsE0kkHQra5caRj1JERnoQlqYgn0ZC7ug== "@es-joy/jsdoccomment@~0.43.1": version "0.43.1" @@ -2685,6 +2745,30 @@ npmlog "^6.0.2" write-file-atomic "^4.0.1" +"@nick134-bit/noblejs@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@nick134-bit/noblejs/-/noblejs-0.0.2.tgz#97597a5d746a113b5493a8051d71ad8225f76a44" + integrity sha512-krCmMZtSifmYeAcuWIIulSnQH+c29CDHTW/6X5SM0UHw4ff6/xMTQFf1ZOlbpf04BCUI7A6j0etOmCdms5NHtg== + dependencies: + "@cosmjs/amino" "0.32.3" + "@cosmjs/encoding" "0.32.3" + "@cosmjs/math" "0.32.3" + "@cosmjs/proto-signing" "0.32.3" + "@cosmjs/stargate" "0.32.3" + typescript "^5.4.5" + +"@noble/curves@1.2.0": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.2.0.tgz#92d7e12e4e49b23105a2555c6984d41733d65c35" + integrity sha512-oYclrNgRaM9SsBUBVbb8M6DTV7ZHRTKugureoYEncY5c65HOmRzvSiTE3y5CYaPYJA/GVkrhXEoF0M3Ya9PMnw== + dependencies: + "@noble/hashes" "1.3.2" + +"@noble/hashes@1.3.2": + version "1.3.2" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.3.2.tgz#6f26dbc8fbc7205873ce3cee2f690eba0d421b39" + integrity sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== + "@noble/hashes@^1", "@noble/hashes@^1.0.0", "@noble/hashes@^1.5.0": version "1.5.0" resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.5.0.tgz#abadc5ca20332db2b1b2aa3e496e9af1213570b0" @@ -3438,6 +3522,11 @@ resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz#0574d7e87b44ee8511d08cc7f914bcb802b70818" integrity sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw== +"@sec-ant/readable-stream@^0.4.1": + version "0.4.1" + resolved "https://registry.yarnpkg.com/@sec-ant/readable-stream/-/readable-stream-0.4.1.tgz#60de891bb126abfdc5410fdc6166aca065f10a0c" + integrity sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg== + "@shikijs/core@1.16.3": version "1.16.3" resolved "https://registry.yarnpkg.com/@shikijs/core/-/core-1.16.3.tgz#082b53928bf201a8d7cfbe0b5540dc1c609d0a5e" @@ -3463,6 +3552,11 @@ resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.25.24.tgz#8c7688559979f7079aacaf31aa881c3aa410b718" integrity sha512-XJfwUVUKDHF5ugKwIcxEgc9k8b7HbznCp6eUfWgu710hMPNIO4aw4/zB5RogDQz8nd6gyCDpU9O/m6qYEWY6yQ== +"@sindresorhus/merge-streams@^4.0.0": + version "4.0.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz#abb11d99aeb6d27f1b563c38147a72d50058e339" + integrity sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ== + "@tootallnate/once@2": version "2.0.0" resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" @@ -3680,12 +3774,19 @@ dependencies: "@types/node" "*" -"@types/node@*", "@types/node@>=13.7.0", "@types/node@^22.0.0": - version "22.0.0" - resolved "https://registry.yarnpkg.com/@types/node/-/node-22.0.0.tgz#04862a2a71e62264426083abe1e27e87cac05a30" - integrity sha512-VT7KSYudcPOzP5Q0wfbowyNLaVR8QWUdw+088uFWwfvpY6uCWaXpqV6ieLAu9WBcnTa7H4Z5RLK8I5t2FuOcqw== +"@types/node@*", "@types/node@>=13.7.0", "@types/node@^22.9.0": + version "22.9.0" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.9.0.tgz#b7f16e5c3384788542c72dc3d561a7ceae2c0365" + integrity sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ== dependencies: - undici-types "~6.11.1" + undici-types "~6.19.8" + +"@types/node@22.7.5": + version "22.7.5" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.7.5.tgz#cfde981727a7ab3611a481510b473ae54442b92b" + integrity sha512-jML7s2NAzMWc//QSJ1a3prpk78cOPchGvXJsC3C6R6PSMoooztvRVQEz89gmBTBY1SPMaqo5teB4uNHPdetShQ== + dependencies: + undici-types "~6.19.2" "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -3953,6 +4054,11 @@ add-stream@^1.0.0: resolved "https://registry.yarnpkg.com/add-stream/-/add-stream-1.0.0.tgz#6a7990437ca736d5e1288db92bd3266d5f5cb2aa" integrity sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ== +aes-js@4.0.0-beta.5: + version "4.0.0-beta.5" + resolved "https://registry.yarnpkg.com/aes-js/-/aes-js-4.0.0-beta.5.tgz#8d2452c52adedebc3a3e28465d858c11ca315873" + integrity sha512-G965FqalsNyrPqgEGON7nIx1e/OVENSgiEIzyC63haUMuvNnwIgIjMs52hlTCKhkBny7A2ORNlfY9Zu+jmGk1Q== + agent-base@6, agent-base@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" @@ -4454,6 +4560,11 @@ bech32@^1.1.4: resolved "https://registry.yarnpkg.com/bech32/-/bech32-1.1.4.tgz#e38c9f37bf179b8eb16ae3a772b40c356d4832e9" integrity sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ== +bech32@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/bech32/-/bech32-2.0.0.tgz#078d3686535075c8c79709f054b1b226a133b355" + integrity sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg== + before-after-hook@^2.2.0: version "2.2.3" resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.2.3.tgz#c51e809c81a4e354084422b9b26bad88249c517c" @@ -4641,10 +4752,10 @@ bytes@3.1.2: resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -c8@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/c8/-/c8-9.1.0.tgz#0e57ba3ab9e5960ab1d650b4a86f71e53cb68112" - integrity sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg== +c8@^10.1.2: + version "10.1.2" + resolved "https://registry.yarnpkg.com/c8/-/c8-10.1.2.tgz#7fe04ced150316e2a623612ab78378289f7e6a9f" + integrity sha512-Qr6rj76eSshu5CgRYvktW0uM0CFY0yi4Fd5D0duDXO6sYinyopmftUiJVuzBQxQcwQLor7JWDVRP+dUfCmzgJw== dependencies: "@bcoe/v8-coverage" "^0.2.3" "@istanbuljs/schema" "^0.1.3" @@ -4653,7 +4764,7 @@ c8@^9.1.0: istanbul-lib-coverage "^3.2.0" istanbul-lib-report "^3.0.1" istanbul-reports "^3.1.6" - test-exclude "^6.0.0" + test-exclude "^7.0.1" v8-to-istanbul "^9.0.0" yargs "^17.7.2" yargs-parser "^21.1.1" @@ -6282,6 +6393,19 @@ etag@^1.8.1, etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== +ethers@^6.13.4: + version "6.13.4" + resolved "https://registry.yarnpkg.com/ethers/-/ethers-6.13.4.tgz#bd3e1c3dc1e7dc8ce10f9ffb4ee40967a651b53c" + integrity sha512-21YtnZVg4/zKkCQPjrDj38B1r4nQvTZLopUGMLQ1ePU2zV/joCfDC3t3iKQjWRzjjjbzR+mdAIoikeBRNkdllA== + dependencies: + "@adraffy/ens-normalize" "1.10.1" + "@noble/curves" "1.2.0" + "@noble/hashes" "1.3.2" + "@types/node" "22.7.5" + aes-js "4.0.0-beta.5" + tslib "2.7.0" + ws "8.17.1" + event-emitter@^0.3.5: version "0.3.5" resolved "https://registry.yarnpkg.com/event-emitter/-/event-emitter-0.3.5.tgz#df8c69eef1647923c7157b9ce83840610b02cc39" @@ -6305,6 +6429,24 @@ eventemitter3@^4.0.0, eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== +execa@9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-9.1.0.tgz#c42845d2b079642b8e07d9de81db13cdb91e7a9b" + integrity sha512-lSgHc4Elo2m6bUDhc3Hl/VxvUDJdQWI40RZ4KMY9bKRc+hgMOT7II/JjbNDhI8VnMtrCb7U/fhpJIkLORZozWw== + dependencies: + "@sindresorhus/merge-streams" "^4.0.0" + cross-spawn "^7.0.3" + figures "^6.1.0" + get-stream "^9.0.0" + human-signals "^7.0.0" + is-plain-obj "^4.1.0" + is-stream "^4.0.1" + npm-run-path "^5.2.0" + pretty-ms "^9.0.0" + signal-exit "^4.1.0" + strip-final-newline "^4.0.0" + yoctocolors "^2.0.0" + execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -6518,6 +6660,13 @@ figures@^5.0.0: escape-string-regexp "^5.0.0" is-unicode-supported "^1.2.0" +figures@^6.1.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-6.1.0.tgz#935479f51865fa7479f6fa94fc6fc7ac14e62c4a" + integrity sha512-d+l3qxjSesT4V7v2fh+QnmFnUWv9lSpjarhShNTgBOfA0ttejbQUAlHLitbjkoRiDulW0OPoQPYIGhIC8ohejg== + dependencies: + is-unicode-supported "^2.0.0" + file-entry-cache@^6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" @@ -6829,6 +6978,14 @@ get-stream@^6.0.0, get-stream@^6.0.1: resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== +get-stream@^9.0.0: + version "9.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-9.0.1.tgz#95157d21df8eb90d1647102b63039b1df60ebd27" + integrity sha512-kVCxPF3vQM/N0B1PmoqVUqgHP+EeVjmZSQn+1oCRPxd2P21P2F19lIgbR3HBosbB1PUhOAoctJnfEn2GbN2eZA== + dependencies: + "@sec-ant/readable-stream" "^0.4.1" + is-stream "^4.0.1" + get-symbol-description@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" @@ -6936,16 +7093,17 @@ glob@8.0.3: minimatch "^5.0.1" once "^1.3.0" -glob@^10.0.0, glob@^10.2.2, glob@^10.3.7: - version "10.3.10" - resolved "https://registry.yarnpkg.com/glob/-/glob-10.3.10.tgz#0351ebb809fd187fe421ab96af83d3a70715df4b" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== +glob@^10.0.0, glob@^10.2.2, glob@^10.3.7, glob@^10.4.1: + version "10.4.5" + resolved "https://registry.yarnpkg.com/glob/-/glob-10.4.5.tgz#f4d9f0b90ffdbab09c9d77f5f29b4262517b0956" + integrity sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg== dependencies: foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" + jackspeak "^3.1.2" + minimatch "^9.0.4" + minipass "^7.1.2" + package-json-from-dist "^1.0.0" + path-scurry "^1.11.1" glob@^7.0.0, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6: version "7.2.3" @@ -7268,6 +7426,11 @@ human-signals@^4.3.0: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-4.3.1.tgz#ab7f811e851fca97ffbd2c1fe9a958964de321b2" integrity sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ== +human-signals@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-7.0.0.tgz#93e58e0c19cfec1dded4af10cd4969f5ab75f6c8" + integrity sha512-74kytxOUSvNbjrT9KisAbaTZ/eJwD/LrbM/kh5j0IhPuJzwuA19dWvniFGwBzN9rVjg+O/e+F310PjObDXS+9Q== + humanize-ms@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/humanize-ms/-/humanize-ms-1.2.1.tgz#c46e3159a293f6b896da29316d8b6fe8bb79bbed" @@ -7694,6 +7857,11 @@ is-plain-obj@^3.0.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-3.0.0.tgz#af6f2ea14ac5a646183a5bbdb5baabbc156ad9d7" integrity sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA== +is-plain-obj@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-4.1.0.tgz#d65025edec3657ce032fd7db63c97883eaed71f0" + integrity sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg== + is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" @@ -7755,6 +7923,11 @@ is-stream@^3.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac" integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA== +is-stream@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-4.0.1.tgz#375cf891e16d2e4baec250b85926cffc14720d9b" + integrity sha512-Dnz92NInDqYckGEUJv689RbRiTSEHCQ7wOVeALbkOz999YpqT46yMRIGtSNl2iCL1waAZSx40+h59NV/EwzV/A== + is-string@^1.0.5, is-string@^1.0.7: version "1.0.7" resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" @@ -7798,6 +7971,11 @@ is-unicode-supported@^1.2.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -7870,10 +8048,10 @@ istanbul-reports@^3.1.6: html-escaper "^2.0.0" istanbul-lib-report "^3.0.0" -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-2.3.6.tgz#647ecc472238aee4b06ac0e461acc21a8c505ca8" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== +jackspeak@^3.1.2: + version "3.4.3" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-3.4.3.tgz#8833a9d89ab4acde6188942bd1c53b6390ed5a8a" + integrity sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw== dependencies: "@isaacs/cliui" "^8.0.2" optionalDependencies: @@ -8396,6 +8574,11 @@ long@*, long@^5.0.0, long@^5.2.0, long@^5.2.1: resolved "https://registry.yarnpkg.com/long/-/long-5.2.3.tgz#a3ba97f3877cf1d778eccbcb048525ebb77499e1" integrity sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q== +lru-cache@^10.2.0: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + lru-cache@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" @@ -8415,11 +8598,6 @@ lru-cache@^7.14.0, lru-cache@^7.4.4, lru-cache@^7.5.1, lru-cache@^7.7.1: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== -"lru-cache@^9.1.1 || ^10.0.0": - version "10.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.0.tgz#b9e2a6a72a129d81ab317202d93c7691df727e61" - integrity sha512-svTf/fzsKHffP42sujkO/Rjs37BCIsQVRCeNYIm9WN8rgT7ffoUnRtZCqU+6BqcSBdv8gwJeTz8knJpgACeQMw== - lru-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/lru-queue/-/lru-queue-0.1.0.tgz#2738bd9f0d3cf4f84490c5736c48699ac632cda3" @@ -8964,7 +9142,7 @@ minimatch@5.1.0: dependencies: brace-expansion "^2.0.1" -"minimatch@6 || 7 || 8 || 9", minimatch@^9.0.1, minimatch@^9.0.4, minimatch@^9.0.5: +"minimatch@6 || 7 || 8 || 9", minimatch@^9.0.4, minimatch@^9.0.5: version "9.0.5" resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== @@ -9074,10 +9252,10 @@ minipass@^5.0.0: resolved "https://registry.yarnpkg.com/minipass/-/minipass-5.0.0.tgz#3e9788ffb90b694a5d0ec94479a45b5d8738133d" integrity sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ== -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3: - version "7.0.4" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.0.4.tgz#dbce03740f50a4786ba994c1fb908844d27b038c" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== +"minipass@^5.0.0 || ^6.0.2 || ^7.0.0", minipass@^7.0.3, minipass@^7.1.2: + version "7.1.2" + resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707" + integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw== minizlib@^2.1.1, minizlib@^2.1.2: version "2.1.2" @@ -9484,7 +9662,7 @@ npm-run-path@^4.0.1: dependencies: path-key "^3.0.0" -npm-run-path@^5.1.0: +npm-run-path@^5.1.0, npm-run-path@^5.2.0: version "5.3.0" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f" integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ== @@ -9877,6 +10055,11 @@ p-waterfall@^2.1.1: dependencies: p-reduce "^2.0.0" +package-json-from-dist@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505" + integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw== + pacote@^13.0.3, pacote@^13.6.1: version "13.6.2" resolved "https://registry.yarnpkg.com/pacote/-/pacote-13.6.2.tgz#0d444ba3618ab3e5cd330b451c22967bbd0ca48a" @@ -9956,6 +10139,11 @@ parse-ms@^3.0.0: resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-3.0.0.tgz#3ea24a934913345fcc3656deda72df921da3a70e" integrity sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw== +parse-ms@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/parse-ms/-/parse-ms-4.0.0.tgz#c0c058edd47c2a590151a718990533fd62803df4" + integrity sha512-TXfryirbmq34y8QBwgqCVLi+8oA3oWx2eAnSn62ITyEhEYaWRlVZ2DvMM9eZbMs/RfxPu/PK/aBLyGj4IrqMHw== + parse-package-name@1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/parse-package-name/-/parse-package-name-1.0.0.tgz#1a108757e4ffc6889d5e78bcc4932a97c097a5a7" @@ -10041,12 +10229,12 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.10.1.tgz#9ba6bf5aa8500fe9fd67df4f0d9483b2b0bfc698" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== +path-scurry@^1.11.1: + version "1.11.1" + resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-1.11.1.tgz#7960a668888594a0720b12a911d1a742ab9f11d2" + integrity sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA== dependencies: - lru-cache "^9.1.1 || ^10.0.0" + lru-cache "^10.2.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-to-regexp@^0.1.2: @@ -10225,6 +10413,13 @@ pretty-ms@^8.0.0: dependencies: parse-ms "^3.0.0" +pretty-ms@^9.0.0: + version "9.2.0" + resolved "https://registry.yarnpkg.com/pretty-ms/-/pretty-ms-9.2.0.tgz#e14c0aad6493b69ed63114442a84133d7e560ef0" + integrity sha512-4yf0QO/sllf/1zbZWYnvWw3NxCQwLXKzIj0G849LSufP15BXKM0rbD2Z3wVnkMfjdn/CB0Dpp444gYAACdsplg== + dependencies: + parse-ms "^4.0.0" + proc-log@^2.0.0, proc-log@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-2.0.1.tgz#8f3f69a1f608de27878f91f5c688b225391cb685" @@ -10899,12 +11094,12 @@ serve-static@^2.1.0: parseurl "^1.3.3" send "^1.0.0" -ses@^1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ses/-/ses-1.9.1.tgz#54991a775cea5f9e27292bbb6706941a8203062a" - integrity sha512-izNBxTLopF1wi5CvMdJYfCLWRYZtHGCKEtr2cbBl/Dqz3qzmDFep24I3vUAWye0GYh8aUgLLuGHbfvs5IRKasg== +ses@^1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/ses/-/ses-1.10.0.tgz#b611dd4605c6a1719665bac159cbd43c84d4f3a9" + integrity sha512-HXmJbNEgY/4hsQfaz5dna39vVKNyvlElRmJYk+bjTqSXSElT0Hr6NKwWVg4j0TxP6IuHp/PNMoWJKIRXzmLbAQ== dependencies: - "@endo/env-options" "^1.1.7" + "@endo/env-options" "^1.1.8" set-blocking@^2.0.0: version "2.0.0" @@ -11407,6 +11602,11 @@ strip-final-newline@^3.0.0: resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd" integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw== +strip-final-newline@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-4.0.0.tgz#35a369ec2ac43df356e3edd5dcebb6429aa1fa5c" + integrity sha512-aulFJcD6YK8V1G7iRB5tigAP4TsHBZZrOV8pjV++zdUwmeV8uzbY7yn6h9MswN62adStNZFuCIx4haBnRuMDaw== + strip-indent@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" @@ -11602,6 +11802,15 @@ test-exclude@^6.0.0: glob "^7.1.4" minimatch "^3.0.4" +test-exclude@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-7.0.1.tgz#20b3ba4906ac20994e275bbcafd68d510264c2a2" + integrity sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^10.4.1" + minimatch "^9.0.4" + text-extensions@^1.0.0: version "1.9.0" resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" @@ -11782,10 +11991,10 @@ tsimp@^2.0.11: sock-daemon "^1.4.2" walk-up-path "^3.0.1" -"tslib@1 || 2", tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +"tslib@1 || 2", tslib@2.7.0, tslib@^2.1.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.7.0.tgz#d9b40c5c40ab59e8738f297df3087bf1a2690c01" + integrity sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA== tslib@^1.8.1, tslib@^1.9.0: version "1.14.1" @@ -11970,7 +12179,7 @@ typescript-eslint@^7.18.0, typescript-eslint@^7.3.1: "@typescript-eslint/parser" "7.18.0" "@typescript-eslint/utils" "7.18.0" -"typescript@5.1.6 - 5.6.x", typescript@^5.6.2, typescript@~5.6.2: +"typescript@5.1.6 - 5.6.x", typescript@~5.6.3: version "5.6.3" resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.6.3.tgz#5f3449e31c9d94febb17de03cc081dd56d81db5b" integrity sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw== @@ -11980,6 +12189,11 @@ typescript-eslint@^7.18.0, typescript-eslint@^7.3.1: resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== +typescript@^5.4.5, typescript@~5.7.1: + version "5.7.2" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.2.tgz#3169cf8c4c8a828cde53ba9ecb3d2b1d5dd67be6" + integrity sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg== + uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" @@ -12000,10 +12214,10 @@ unbox-primitive@^1.0.2: has-symbols "^1.0.3" which-boxed-primitive "^1.0.2" -undici-types@~6.11.1: - version "6.11.1" - resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.11.1.tgz#432ea6e8efd54a48569705a699e62d8f4981b197" - integrity sha512-mIDEX2ek50x0OlRgxryxsenE5XaQD4on5U2inY7RApK3SOJpofyw7uW2AyfMKkhAxXIceo2DeWGVGwyvng1GNQ== +undici-types@~6.19.2, undici-types@~6.19.8: + version "6.19.8" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02" + integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw== unicode-canonical-property-names-ecmascript@^2.0.0: version "2.0.0" @@ -12392,6 +12606,11 @@ write-pkg@^4.0.0: type-fest "^0.4.1" write-json-file "^3.2.0" +ws@8.17.1: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.17.1.tgz#9293da530bb548febc95371d90f9c878727d919b" + integrity sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ== + ws@^7, ws@^7.2.0: version "7.5.9" resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" @@ -12485,3 +12704,8 @@ yocto-queue@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.0.0.tgz#7f816433fb2cbc511ec8bf7d263c3b58a1a3c251" integrity sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== + +yoctocolors@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/yoctocolors/-/yoctocolors-2.1.1.tgz#e0167474e9fbb9e8b3ecca738deaa61dd12e56fc" + integrity sha512-GQHQqAopRhwU8Kt1DDM8NjibDXHC8eoh1erhGAJPEyveY9qqVeXvVikNKrDz69sHowPMorbPUrH/mx8c50eiBQ==