From 23470b1a1bd53e15ceb3db38b382713df48b19e7 Mon Sep 17 00:00:00 2001 From: "Jason Ridgway-Taylor (~misfur-mondut)" <57174310+glottologist@users.noreply.github.com> Date: Fri, 19 May 2023 13:37:37 +0100 Subject: [PATCH] 325 bot jit liquidity (#337) * Added skeleton for liquidity cli * Added initial start of jit implementation * Added buy side jit provisioning rules to bot * Added initial always on provision * Corrected path in message for always-on * Tidy up * Tidy up * Add interaction with batcher contract on ghostnet (#336) * gitignore for javascript compiled files * Add a dependency to Taquito * Add interaction with Batcher contract: deposit and redeem. Also, wallets. * Working versions for both liquidity bots * Packaged build to single file and add release action * Added working sub dir to build and manual trigger for testing * Added example config files into build file and expanded ghostnet example * Corrected release pathing * Corrected release pathing * Compress and hash release artefacts * corrected compression * Added zip compression to release artefacts * Added zip compression to release artefacts * Removed pre-release clause * Removed bundled compilation * Package node modules with liq bots * Updated packaging to prune modules * Always on only submits once per batch * Tidied bot status message * Tidied bot status message * Correctly parse status * Update batcher-bot/liquidity/src/utils.ts Co-authored-by: Ulrik Strid * PRC: Throw if no private key in environment * Added usage README content for liq bot * PRC: Use if in structure rather than getting all keys * PRC: Change lets to consts where applicable in provisioning * PRC: Change lets to consts where applicable in provisioning * PRC: Declare events prior to subscription --------- Co-authored-by: aguillon Co-authored-by: Ulrik Strid --- .github/workflows/release-bots.yml | 44 + .gitignore | 3 + batcher-bot/liquidity/.gitignore | 2 + batcher-bot/liquidity/README.md | 126 + batcher-bot/liquidity/assets/fonts/Larry3D.js | 925 +++++ batcher-bot/liquidity/package-lock.json | 3109 +++++++++++++++++ batcher-bot/liquidity/package.json | 41 + batcher-bot/liquidity/src/bot.ts | 229 ++ batcher-bot/liquidity/src/index.ts | 84 + .../liquidity-config-example-ghostnet.json | 25 + .../src/liquidity-config-example-mainnet.json | 15 + batcher-bot/liquidity/src/provision.ts | 240 ++ batcher-bot/liquidity/src/settings.ts | 36 + batcher-bot/liquidity/src/submitter.ts | 172 + batcher-bot/liquidity/src/types.ts | 54 + batcher-bot/liquidity/src/utils.ts | 75 + batcher-bot/liquidity/tsconfig.json | 16 + batcher-bot/notifications/flake.lock | 44 - batcher-bot/notifications/flake.nix | 41 - flake.nix | 11 +- 20 files changed, 5198 insertions(+), 94 deletions(-) create mode 100644 .github/workflows/release-bots.yml create mode 100644 batcher-bot/liquidity/.gitignore create mode 100644 batcher-bot/liquidity/README.md create mode 100644 batcher-bot/liquidity/assets/fonts/Larry3D.js create mode 100644 batcher-bot/liquidity/package-lock.json create mode 100644 batcher-bot/liquidity/package.json create mode 100644 batcher-bot/liquidity/src/bot.ts create mode 100644 batcher-bot/liquidity/src/index.ts create mode 100644 batcher-bot/liquidity/src/liquidity-config-example-ghostnet.json create mode 100644 batcher-bot/liquidity/src/liquidity-config-example-mainnet.json create mode 100644 batcher-bot/liquidity/src/provision.ts create mode 100644 batcher-bot/liquidity/src/settings.ts create mode 100644 batcher-bot/liquidity/src/submitter.ts create mode 100644 batcher-bot/liquidity/src/types.ts create mode 100644 batcher-bot/liquidity/src/utils.ts create mode 100644 batcher-bot/liquidity/tsconfig.json delete mode 100644 batcher-bot/notifications/flake.lock delete mode 100644 batcher-bot/notifications/flake.nix diff --git a/.github/workflows/release-bots.yml b/.github/workflows/release-bots.yml new file mode 100644 index 00000000..1cbcf3e0 --- /dev/null +++ b/.github/workflows/release-bots.yml @@ -0,0 +1,44 @@ +name: Release Liquidity Bots + +on: + workflow_dispatch: # adding the workflow_dispatch so it can be triggered manually + push: + tags: + - 'bots-v*' + +defaults: + run: + working-directory: batcher-bot/liquidity +jobs: + release: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v2 + - name: Setup Node + uses: actions/setup-node@v1 + with: + node-version: '18.x' + - name: Install modules + run: npm install + - name: Build + run: npm run build + - name: Package + run: npm run package + - name: Tar compress + run: tar -cvf batcher-liquidity-bot.tar.xz dist/* + - name: Hash Tar + run: echo $(md5sum batcher-liquidity-bot.tar.xz) > batcher-liquidity-bot.tar.hash.md + - name: Zip compress + run: zip -r batcher-liquidity-bot.zip dist/* + - name: Hash Tar + run: echo $(md5sum batcher-liquidity-bot.zip) > batcher-liquidity-bot.zip.hash.md + - name: Release + uses: softprops/action-gh-release@v1 + with: + fail_on_unmatched_files: true + files: | + ./batcher-bot/liquidity/batcher-liquidity-bot.tar.xz + ./batcher-bot/liquidity/batcher-liquidity-bot.tar.hash.md + ./batcher-bot/liquidity/batcher-liquidity-bot.zip + ./batcher-bot/liquidity/batcher-liquidity-bot.zip.hash.md diff --git a/.gitignore b/.gitignore index c9eb4589..3b9562a2 100644 --- a/.gitignore +++ b/.gitignore @@ -57,5 +57,8 @@ USDT_token_storage.tz # Tezos client artefacts .tezos-client/ +node_modules ./*/node_modules/ +dist batcher-bot/notifications/node_modules/ +batcher-bot/liquidity/node_modules/ diff --git a/batcher-bot/liquidity/.gitignore b/batcher-bot/liquidity/.gitignore new file mode 100644 index 00000000..77271620 --- /dev/null +++ b/batcher-bot/liquidity/.gitignore @@ -0,0 +1,2 @@ +lib/*.js +lib/*.d.ts diff --git a/batcher-bot/liquidity/README.md b/batcher-bot/liquidity/README.md new file mode 100644 index 00000000..d45c2e98 --- /dev/null +++ b/batcher-bot/liquidity/README.md @@ -0,0 +1,126 @@ +# Liquidity Bot + +## Pre-requisites + +To run the bot you will need to have an environment that has Node.js installed. + +> The releases were developed and tested with v18.14.0 of Node. + +## Installation + +The release package can be downloaded from the releases pages of the repo in either zip or tar.xz formats. A hash.md for each format is supplied so that the contents of the file can be verified. + +## Operation + +Once the release has been downloaded and unpacked it can be run from the command line. + +### Liquidity Modes + +The liquidity bot allows deposits to be made automatically based on configuration. There are two specific modes of liquidity: + +- JIT (just-in-time): This mode listens for trades in each batch and places an opposing deposit. +- ALWAYS-ON : This mode supplies a given deposit at batch open. + +To run the bot simply specify the mode as the first argument. The second argument should be the path to the configuration file: + +Jit mode: +```bash +node index.js jit +``` + +Alwys-on mode: +```bash +node index.js always-on +``` + +### Liquidity configuration + +Both modes use a configuration file that supplies rules for the deposits for one or more pairs. Examples of config files for mainnet and ghostnet are bundled with the release; they include the variables for the Batcher contract address, the address of a Tezos node and the relevant tzkt api address. + +Example of ghostnet config file. + +```json +{ + "batcher_address": "KT1VbeN9etQe5c2b6EAFfCZVaSTpiieHj5u1", + "tezos_node_uri": "https://ghostnet.tezos.marigold.dev", + "tzkt_uri_api": "https://api.ghostnet.tzkt.io", + "token_pairs": [ + { + "name": "tzBTC/USDT", + "side": "both", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "worse", + "sell_limit_per_batch": 200, + "sell_tolerance": "oracle" + }, + { + "name": "tzBTC/EURL", + "side": "either", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "oracle", + "sell_limit_per_batch": 220, + "sell_tolerance": "better" + } + ] + + +} + +``` + +More importantly, they contain the configuration of the liquidity provision for the token pairs. + +```json + "token_pairs": [ + { + "name": "tzBTC/USDT", + "side": "both", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "worse", + "sell_limit_per_batch": 200, + "sell_tolerance": "oracle" + }, + { + "name": "tzBTC/EURL", + "side": "either", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "oracle", + "sell_limit_per_batch": 220, + "sell_tolerance": "better" + } + ] + +``` + +When running the bot, a user is free to only include the pairs they are interested in. For each pair, the configuration should include the name of the pair, the side one wishes to supply liquidity for, and the amount limit per batch and tolerance for each side. + +### Name + +The name of the pair should be the same as that specified in the `valid_swap` item in the Batcher contract storage. At the time of writing this is either *tzBTC/USDT* or *tzBTC/EURL*. + +### Side + +The 'side' configuration is the side that a user is interested in trading. These can be: + +- both - one can supply liquidity to both sides of a trade if one should choose. +- either - one can supply either side of a trade; *this is only a valid option for the 'jit' mode*. +- buy - only supply liquidity for the buy side of a given pair +- sell - only supply liquidity for the sell side of a given pair + +### Limit Per Batch + +The `buy_limit_per_batch` and `sell_limit_per_batch` configurations define the deposit size that will occur in any given batch. + +### Tolerance + +With the `buy_tolerance` and `sell_tolerance`, one can set their choice of price level for a given batch that one is willing to trade at. These follow the usual Batcher conventions: + +- worse - A worse price but a better chance of the order being filled +- oracle - Trade at the Oracle price accepted after the batch has closed +- better - A better price but less chance of being filled. + +> The tolerances are ten basis points off a given future Oracle price. + +## Redemption + +In either mode the bot will redeem any holdings once a batch is cleared. diff --git a/batcher-bot/liquidity/assets/fonts/Larry3D.js b/batcher-bot/liquidity/assets/fonts/Larry3D.js new file mode 100644 index 00000000..3c5b0780 --- /dev/null +++ b/batcher-bot/liquidity/assets/fonts/Larry3D.js @@ -0,0 +1,925 @@ +export default `flf2a$ 9 6 30 1 5 +larry3d.flf by Larry Gelberg (larryg@avs.com) +(stolen liberally from Juan Car's puffy.flf) +tweaked by Glenn Chappell +Version 1.2 2/24/94 + +$$$ @ + $$$ @ + $$$ @ + $$$ @ + $$$ @ + $$$ @ + $$$ @ + $$$ @ + $$$@@ + __ @ +/\\ \\ @ +\\ \\ \\ @ + \\ \\ \\ @ + \\ \\_\\ @ + \\/\\_\\@ + \\/_/@ + @ + @@ + __ __ @ +/\\ \\\\ \\ @ +\\ \\_\\\\_\\ @ + \\/_//_/$ @ + $ $ @ + $ $@ + @ + @ + @@ + __ __ @ + _\\ \\\\ \\__ @ +/\\__ _ _\\ @ +\\/_L\\ \\\\ \\L_ @ + /\\_ _ _\\@ + \\/_/\\_\\\\_\\/@ + \\/_//_/ @ + @ + @@ + __ @ +/\\ \\_ @ +\\/'__\`\\ @ +/\\ \\_\\_\\ @ +\\ \\____ \\ @ + \\/\\ \\_\\ \\@ + \\ \`\\_ _/@ + \`\\_/\\_\\@ + \\/_/@@ + __ __ @ +/\\_\\ / / @ +\\/_/ / / @ + / / @ + / / __ @ + /_/ /\\_\\@ + /_/ \\/_/@ + @ + @@ + ____ @ +/| _ \\ @ +|/\\ | @ + \\// __\`\\/\\ @ + /| \\L> <_@ + | \\_____/\\/@ + \\/____/\\/ @ + @ + @@ + __ @ +/\\ \\ @ +\\ \\/$ @ + \\/ $ @ + $ $ @ + $ $@ + @ + @ + @@ + _ @ + /' \\ @ +/\\ ,/' @ +\\ \\ \\ @ + \\ \\ \`\\ @ + \\ \`\\__\\@ + \`\\/_/ @ + @ + @@ + __ @ +/\\ \`\\ @ +\\\`\\ \\ @ + \`\\\`\\ \\ @ + \`\\/' \\@ + /\\__/@ + \\/_/ @ + @ + @@ + __ @ + _\\ \\ _ @ +/\\_\` ' \\ @ +\\/_> <_ @ + /\\_, ,_\\@ + \\/_/\\_\\/@ + \\/_/ @ + @ + @@ + __ @ + /\\ \\ @ + \\_\\ \\___ @ +/\\___ __\\@ +\\/__/\\ \\_/@ + \\ \\_\\ @ + \\/_/ @ + @ + @@ + @ + @ + @ + @ + __ @ +/\\ \\@ +\\ \\/@ + \\/ @ + @@ + @ + @ + @ + _______ @ +/\\______\\@ +\\/______/@ + @ + @ + @@ + @ + @ + @ + @ + __ @ +/\\_\\@ +\\/_/@ + @ + @@ + __@ + / /@ + / / @ + / / @ + / / @ + /_/ @ +/_/ @ + @ + @@ + __ @ + /'__\`\\ @ +/\\ \\/\\ \\ @ +\\ \\ \\ \\ \\ @ + \\ \\ \\_\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + _ @ + /' \\ @ +/\\_, \\ @ +\\/_/\\ \\ @ + \\ \\ \\ @ + \\ \\_\\@ + \\/_/@ + @ + @@ + ___ @ + /'___\`\\ @ +/\\_\\ /\\ \\ @ +\\/_/// /__ @ + // /_\\ \\@ + /\\______/@ + \\/_____/ @ + @ + @@ + __ @ + /'__\`\\ @ +/\\_\\L\\ \\ @ +\\/_/_\\_<_ @ + /\\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + __ __ @ +/\\ \\\\ \\ @ +\\ \\ \\\\ \\ @ + \\ \\ \\\\ \\_ @ + \\ \\__ ,__\\@ + \\/_/\\_\\_/@ + \\/_/ @ + @ + @@ + ______ @ +/\\ ___\\ @ +\\ \\ \\__/ @ + \\ \\___\`\`\\ @ + \\/\\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ____ @ + /'___\\ @ +/\\ \\__/ @ +\\ \\ _\`\`\\ @ + \\ \\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ________ @ +/\\_____ \\@ +\\/___//'/'@ + /' /' @ + /' /' @ + /\\_/ @ + \\// @ + @ + @@ + __ @ + /'_ \`\\ @ +/\\ \\L\\ \\ @ +\\/_> _ <_ @ + /\\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + __ @ + /'_ \`\\ @ +/\\ \\L\\ \\ @ +\\ \\___, \\ @ + \\/__,/\\ \\ @ + \\ \\_\\@ + \\/_/@ + @ + @@ + @ + @ + __ @ +/\\_\\ @ +\\/_/_ @ + /\\_\\@ + \\/_/@ + @ + @@ + @ + @ + __ @ +/\\_\\ @ +\\/_/_ @ + /\\ \\@ + \\ \\/@ + \\/ @ + @@ + ___ @ + / / @ + / / @ +/< < @ +\\ \`\\ \`\\ @ + \`\\ \`\\_|@ + \`\\// @ + @ + @@ + @ + _______ @ +/\\______\\ @ +\\/______/_ @ + /\\______\\@ + \\/______/@ + @ + @ + @@ + __ @ +/\\ \`\\ @ +\\ \`\\ \`\\ @ + \`\\ > >@ + / / @ + /\\_/ @ + \\// @ + @ + @@ + _ @ + /'_\`\\ @ +/\\_\\/\\\`\\@ +\\/_//'/'@ + /\\_\\ @ + \\/\\_\\@ + \\/_/@ + @ + @@ + @ + __ @ + /'_\`\\_ @ + /'/'_\` \\ @ +/\\ \\ \\L\\ \\ @ +\\ \\ \`\\__,_\\@ + \\ \`\\_____\\@ + \`\\/_____/@ + @@ + ______ @ +/\\ _ \\ @ +\\ \\ \\L\\ \\ @ + \\ \\ __ \\ @ + \\ \\ \\/\\ \\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\ \\ @ + \\ \\ _ <' @ + \\ \\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\/\\_\\ @ + \\ \\ \\/_/_ @ + \\ \\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\/\\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\_\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\_\\ @ + \\ \\ _\\L @ + \\ \\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\_\\@ + \\ \\ _\\/@ + \\ \\ \\/ @ + \\ \\_\\ @ + \\/_/ @ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\_\\ @ + \\ \\ \\L_L @ + \\ \\ \\/, \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\_\\ \\ @ + \\ \\ _ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + ______ @ +/\\__ _\\ @ +\\/_/\\ \\/ @ + \\ \\ \\ @ + \\_\\ \\__ @ + /\\_____\\@ + \\/_____/@ + @ + @@ + _____ @ +/\\___ \\ @ +\\/__/\\ \\ @ + _\\ \\ \\ @ + /\\ \\_\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\/'/' @ + \\ \\ , < @ + \\ \\ \\\\\`\\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + __ @ +/\\ \\ @ +\\ \\ \\ @ + \\ \\ \\ __ @ + \\ \\ \\L\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + @ + /'\\_/\`\\ @ +/\\ \\ @ +\\ \\ \\__\\ \\ @ + \\ \\ \\_/\\ \\ @ + \\ \\_\\\\ \\_\\@ + \\/_/ \\/_/@ + @ + @@ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \`\\\\ \\ @ + \\ \\ , \` \\ @ + \\ \\ \\\`\\ \\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + _____ @ +/\\ __\`\\ @ +\\ \\ \\/\\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\_\\ \\ @ + \\ \\_____\\@ + \\/_____/@ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\ \\@ + \\ \\ ,__/@ + \\ \\ \\/ @ + \\ \\_\\ @ + \\/_/ @ + @ + @@ + _____ @ +/\\ __\`\\ @ +\\ \\ \\/\\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\\\'\\\\ @ + \\ \\___\\_\\@ + \\/__//_/@ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\ \\L\\ \\ @ + \\ \\ , / @ + \\ \\ \\\\ \\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/ /@ + @ + @@ + ____ @ +/\\ _\`\\ @ +\\ \\,\\L\\_\\ @ + \\/_\\__ \\ @ + /\\ \\L\\ \\ @ + \\ \`\\____\\@ + \\/_____/@ + @ + @@ + ______ @ +/\\__ _\\ @ +\\/_/\\ \\/ @ + \\ \\ \\ @ + \\ \\ \\ @ + \\ \\_\\@ + \\/_/@ + @ + @@ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\ \\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\_\\ \\ @ + \\ \\_____\\@ + \\/_____/@ + @ + @@ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\ \\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\_/ \\@ + \\ \`\\___/@ + \`\\/__/ @ + @ + @@ + __ __ @ +/\\ \\ __/\\ \\ @ +\\ \\ \\/\\ \\ \\ \\ @ + \\ \\ \\ \\ \\ \\ \\ @ + \\ \\ \\_/ \\_\\ \\@ + \\ \`\\___x___/@ + '\\/__//__/ @ + @ + @@ + __ __ @ +/\\ \\ /\\ \\ @ +\\ \`\\\`\\/'/' @ + \`\\/ > < @ + \\/'/\\\`\\ @ + /\\_\\\\ \\_\\@ + \\/_/ \\/_/@ + @ + @@ + __ __ @ +/\\ \\ /\\ \\@ +\\ \`\\\`\\\\/'/@ + \`\\ \`\\ /' @ + \`\\ \\ \\ @ + \\ \\_\\@ + \\/_/@ + @ + @@ + ________ @ +/\\_____ \\ @ +\\/____//'/' @ + //'/' @ + //'/'___ @ + /\\_______\\@ + \\/_______/@ + @ + @@ + ____ @ +/\\ _\\ @ +\\ \\ \\/ @ + \\ \\ \\ @ + \\ \\ \\_ @ + \\ \\___\\@ + \\/___/@ + @ + @@ + __ @ +/\\ \`\\ @ +\\\`\\ \`\\ @ +\`\\\`\\ \`\\ @ + \`\\\`\\ \`\\ @ + \`\\\`\\__\\@ + \`\\/__/@ + @ + @@ + ____ @ +/\\__ \\ @ +\\/_/\\ \\ @ + \\ \\ \\ @ + \\_\\ \\ @ + /\\___\\@ + \\/___/@ + @ + @@ + __ @ + / \`\\ @ +/\\_/\\_\\ @ +\\//\\// $ @ + $ $ @ + $ $@ + @ + @ + @@ + @ + @ + @ + @ + @ +$ $ @ + $_______ @ + /\\______\\@ + \\/______/@@ + __ @ +/\\ \\ @ +\\ \\\\$ @ + \\// $ @ + $ $ @ + $ $@ + @ + @ + @@ + @ + @ + __ @ + /'__\`\\ @ +/\\ \\L\\.\\_ @ +\\ \\__/.\\_\\@ + \\/__/\\/_/@ + @ + @@ + __ @ +/\\ \\ @ +\\ \\ \\____ @ + \\ \\ '__\`\\ @ + \\ \\ \\L\\ \\@ + \\ \\_,__/@ + \\/___/ @ + @ + @@ + @ + @ + ___ @ + /'___\\ @ +/\\ \\__/ @ +\\ \\____\\@ + \\/____/@ + @ + @@ + __ @ + /\\ \\ @ + \\_\\ \\ @ + /'_\` \\ @ +/\\ \\L\\ \\ @ +\\ \\___,_\\@ + \\/__,_ /@ + @ + @@ + @ + @ + __ @ + /'__\`\\ @ +/\\ __/ @ +\\ \\____\\@ + \\/____/@ + @ + @@ + ___ @ + /'___\\ @ +/\\ \\__/ @ +\\ \\ ,__\\@ + \\ \\ \\_/@ + \\ \\_\\ @ + \\/_/ @ + @ + @@ + @ + @ + __ @ + /'_ \`\\ @ +/\\ \\L\\ \\ @ +\\ \\____ \\ @ + \\/___L\\ \\@ + /\\____/@ + \\_/__/ @@ + __ @ +/\\ \\ @ +\\ \\ \\___ @ + \\ \\ _ \`\\ @ + \\ \\ \\ \\ \\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + @ + __ @ +/\\_\\ @ +\\/\\ \\ @ + \\ \\ \\ @ + \\ \\_\\@ + \\/_/@ + @ + @@ + @ + __ @ +/\\_\\ @ +\\/\\ \\ @ + \\ \\ \\ @ + _\\ \\ \\ @ +/\\ \\_\\ \\@ +\\ \\____/@ + \\/___/ @@ + __ @ +/\\ \\ @ +\\ \\ \\/'\\ @ + \\ \\ , < @ + \\ \\ \\\\\`\\ @ + \\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + ___ @ +/\\_ \\ @ +\\//\\ \\ @ + \\ \\ \\ @ + \\_\\ \\_ @ + /\\____\\@ + \\/____/@ + @ + @@ + @ + @ + ___ ___ @ +/' __\` __\`\\ @ +/\\ \\/\\ \\/\\ \\ @ +\\ \\_\\ \\_\\ \\_\\@ + \\/_/\\/_/\\/_/@ + @ + @@ + @ + @ + ___ @ +/' _ \`\\ @ +/\\ \\/\\ \\ @ +\\ \\_\\ \\_\\@ + \\/_/\\/_/@ + @ + @@ + @ + @ + ___ @ + / __\`\\ @ +/\\ \\L\\ \\@ +\\ \\____/@ + \\/___/ @ + @ + @@ + @ + @ + _____ @ +/\\ '__\`\\ @ +\\ \\ \\L\\ \\@ + \\ \\ ,__/@ + \\ \\ \\/ @ + \\ \\_\\ @ + \\/_/ @@ + @ + @ + __ @ + /'__\`\\ @ +/\\ \\L\\ \\ @ +\\ \\___, \\ @ + \\/___/\\ \\ @ + \\ \\_\\@ + \\/_/@@ + @ + @ + _ __ @ +/\\\`'__\\@ +\\ \\ \\/ @ + \\ \\_\\ @ + \\/_/ @ + @ + @@ + @ + @ + ____ @ + /',__\\ @ +/\\__, \`\\@ +\\/\\____/@ + \\/___/ @ + @ + @@ + __ @ +/\\ \\__ @ +\\ \\ ,_\\ @ + \\ \\ \\/ @ + \\ \\ \\_ @ + \\ \\__\\@ + \\/__/@ + @ + @@ + @ + @ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\_\\ \\@ + \\ \\____/@ + \\/___/ @ + @ + @@ + @ + @ + __ __ @ +/\\ \\/\\ \\ @ +\\ \\ \\_/ |@ + \\ \\___/ @ + \\/__/ @ + @ + @@ + @ + @ + __ __ __ @ +/\\ \\/\\ \\/\\ \\ @ +\\ \\ \\_/ \\_/ \\@ + \\ \\___x___/'@ + \\/__//__/ @ + @ + @@ + @ + @ + __ _ @ +/\\ \\/'\\ @ +\\/> \\@ + /\\___/@ + \\/__/ @@ + @ + @ + ____ @ +/\\_ ,\`\\ @ +\\/_/ /_ @ + /\\____\\@ + \\/____/@ + @ + @@ + _ @ + /' \\@ + \\ ,/'@ + <' \\ @ +< \\ \`\\ @ + \\\`\\__\\@ + \\/__/@ + @ + @@ + __ @ +/\\ \\ @ +\\ \\ \\ @ + \\ \\ \\ @ + \\ \\ \\ @ + \\ \\ \\ @ + \\ \\ \\ @ + \\ \\_\\@ + \\/_/@@ + __ @ +/\\ \`\\ @ +\\\`\\ \\ @ + \\ \\ \`>@ + //' \\ @ +/\\__/' @ +\\/_/ @ + @ + @@ + _ _ @ + /' \\/' \\ @ +/\\_/\\__//$ @ +\\//\\/__/ $ @ + $ $@ + @ + @ + @ + @@ + __ __ @ +/\\_\\/\\_\\ @ +\\/\\ _ \\ @ + \\ \\ \\L\\ \\ @ + \\ \\ __ \\ @ + \\ \\_\\/\\_\\@ + \\/_/\\/_/@ + @ + @@ + __ __ @ +/\\_\\/\\_\\ @ +\\/\\ __ \\ @ + \\ \\ \\/\\ \\ @ + \\ \\ \\_\\ \\ @ + \\ \\_____\\@ + \\/_____/@ + @ + @@ + __ __ @ +/\\_\\/\\_\\ @ +\\/\\ \\/\\ \\ @ + \\ \\ \\ \\ \\ @ + \\ \\ \\_\\ \\ @ + \\ \\_____\\@ + \\/_____/@ + @ + @@ + __ __ @ +/\\_\\/\\_\\ @ +\\/_/\\/_/_ @ + /'_\` \\ @ + /\\ \\L\\ \\ @ + \\ \`\\__,_\\@ + \`\\/_,__/@ + @ + @@ + __ __ @ +/\\_\\/\\_\\ @ +\\/_/\\/_/ @ + /'_\`\\ @ + /\\ \\L\\ \\@ + \\ \`\\___/@ + \`\\/__/ @ + @ + @@ + __ __ @ +/\\_\\ \\_\\ @ +\\/_/\\/_/_ @ + /\\ \\/\\ \\ @ + \\ \\ \\_\\ \\@ + \\ \`\\___/@ + \`\\/__/ @ + @ + @@ + ______ @ +/\\ __ \\ @ +\\ \\ \\/\\ \\ @ + \\ \\ \\<_<_ @ + \\ \\ \\ \\ \\@ + \\ \\ \\\\_/@ + \\ \\_\\/ @ + \\/_/ @ + @@ +` diff --git a/batcher-bot/liquidity/package-lock.json b/batcher-bot/liquidity/package-lock.json new file mode 100644 index 00000000..779a6bf0 --- /dev/null +++ b/batcher-bot/liquidity/package-lock.json @@ -0,0 +1,3109 @@ +{ + "name": "batcher-liquidity-bot", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "batcher-liquidity-bot", + "version": "0.0.1", + "license": "ISC", + "dependencies": { + "@dipdup/tzkt-api": "^0.0.1", + "@microsoft/signalr": "^7.0.5", + "@taquito/signer": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/tzip12": "^16.1.2", + "@taquito/tzip16": "^16.1.2", + "chalk": "^4.1.2", + "clear": "^0.1.0", + "commander": "^10.0.1", + "env-cmd": "^10.1.0", + "figlet": "^1.6.0", + "fs-extra": "^11.1.1", + "path": "^0.12.7", + "prelude-ts": "^1.0.6" + }, + "devDependencies": { + "@types/commander": "^2.12.2", + "@types/elliptic": "^6.4.14", + "@types/figlet": "^1.5.6", + "@types/node": "^20.1.3", + "nodemon": "^2.0.22", + "ts-node": "^10.9.1", + "typescript": "^5.0.4" + } + }, + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "0.3.9" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@dipdup/tzkt-api": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@dipdup/tzkt-api/-/tzkt-api-0.0.1.tgz", + "integrity": "sha512-d+2KSK+aumrKl21rccYOfU4gQMNWf2MNi/rQL2Ibp/JzlYfuGpsQH5HaA8kYtpquOgFXjTRhNO95RYj5trYw/g==", + "deprecated": "Package no longer supported. Contact Support at https://www.npmjs.com/support for more info." + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@microsoft/signalr": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-7.0.5.tgz", + "integrity": "sha512-j84syCKlXkQAOQhyrzRmW7w/M2UXQ6OKcXXFIVNjmiiZbEGIvSvJDRAuyMFjArdQOXz+etJgd58H/prTbyTCrA==", + "dependencies": { + "abort-controller": "^3.0.0", + "eventsource": "^2.0.2", + "fetch-cookie": "^2.0.3", + "node-fetch": "^2.6.7", + "ws": "^7.4.5" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "dependencies": { + "@stablelib/int": "^1.0.1" + } + }, + "node_modules/@stablelib/blake2b": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/blake2b/-/blake2b-1.0.1.tgz", + "integrity": "sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + }, + "node_modules/@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + }, + "node_modules/@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "dependencies": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "node_modules/@stablelib/hmac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "node_modules/@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "dependencies": { + "@stablelib/bytes": "^1.0.1" + } + }, + "node_modules/@stablelib/nacl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stablelib/nacl/-/nacl-1.0.4.tgz", + "integrity": "sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==", + "dependencies": { + "@stablelib/poly1305": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1", + "@stablelib/x25519": "^1.0.3", + "@stablelib/xsalsa20": "^1.0.2" + } + }, + "node_modules/@stablelib/pbkdf2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/pbkdf2/-/pbkdf2-1.0.1.tgz", + "integrity": "sha512-d5jwK6jW1DkMyzqY8D1Io+fRXcsUVr95lk5LKX9ghaUdAITTc1ZL0bff+R0IrwSixbHluxhnivG7vDw59AZ/Nw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "dependencies": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/salsa20": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/salsa20/-/salsa20-1.0.2.tgz", + "integrity": "sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "node_modules/@stablelib/x25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "dependencies": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@stablelib/xsalsa20": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/xsalsa20/-/xsalsa20-1.0.2.tgz", + "integrity": "sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==", + "dependencies": { + "@stablelib/binary": "^1.0.1", + "@stablelib/salsa20": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "node_modules/@taquito/axios-fetch-adapter": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@taquito/axios-fetch-adapter/-/axios-fetch-adapter-0.3.1.tgz", + "integrity": "sha512-emPSsrYQumiUcZsDcTAP68gLJpKoJmbzwyy2D2h2/Zm3Q1TbAJJS1kbnwvQZfq0FjYyYCWYSITtAS3w0EUAG4g==", + "peerDependencies": { + "axios": ">=0.26.0" + } + }, + "node_modules/@taquito/http-utils": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-16.1.2.tgz", + "integrity": "sha512-02J9Q744ZEs0wbjBpm6NFzJCtjscuSOeQ3LaWfS1wx7XfMiNMLCOiWZt1RtjlIbcXKEYcOgvjfIy/A/tYl6cqQ==", + "dependencies": { + "@taquito/axios-fetch-adapter": "^0.3.1", + "axios": "^0.26.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/local-forging": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/local-forging/-/local-forging-16.1.2.tgz", + "integrity": "sha512-KSJMO7xo4mdM7cU2iTCNcWNn/vaABaCMXa2ONvb5TD0o3MHizqCP0M2rEfkP48eajlcBLF1RcOExSVWj+5+v/Q==", + "dependencies": { + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/michel-codec": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-16.1.2.tgz", + "integrity": "sha512-kpVpfFQo96SZhHHUQUq7lNvZM44CTJnBk2sN6pIIxMaQiLXHshkE0KTqSUl3ocp/7ssd/Q7v4MsW/NSt3dthJQ==", + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/michelson-encoder": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-16.1.2.tgz", + "integrity": "sha512-9gD4sgLgkuy4cTcp9eZ4DCasic3Ymi5BGCCVGXzNzzimbvdBPrMtDQMgBRu07mlTm9/4OENdDTuMk4QtIYfOqQ==", + "dependencies": { + "@taquito/rpc": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "fast-json-stable-stringify": "^2.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/rpc": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-16.1.2.tgz", + "integrity": "sha512-r2cwT3tnvofBtytDCP/P8G8i9gw2hgw73hiGhYw4CkYaRyVYcuBMwmr8soy/e3B8U2sHSsiyoUmBC9Z0AfkApQ==", + "dependencies": { + "@taquito/http-utils": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/signer": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/signer/-/signer-16.1.2.tgz", + "integrity": "sha512-0gh/Hbz86d4343sEefNDyMjR8jnxtjxvCRR3/aMIN+IvhJTNC1LCsNfENgGIHjLr2R68YbPDRq2wpyq6+z/8nA==", + "dependencies": { + "@stablelib/blake2b": "^1.0.1", + "@stablelib/ed25519": "^1.0.3", + "@stablelib/hmac": "^1.0.1", + "@stablelib/nacl": "^1.0.4", + "@stablelib/pbkdf2": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@taquito/taquito": "^16.1.2", + "@taquito/utils": "^16.1.2", + "@types/bn.js": "^5.1.1", + "bip39": "^3.0.4", + "elliptic": "^6.5.4", + "pbkdf2": "^3.1.2", + "typedarray-to-buffer": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/taquito": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-16.1.2.tgz", + "integrity": "sha512-0yjQRIjr1ZcVzTQ9QvtwZl4QAH2jM21vXTCOcHLxEuxjk052vr4OuS3WI+lk7hACtJXfwlA9DZ3zyNt9WdKFHA==", + "hasInstallScript": true, + "dependencies": { + "@taquito/http-utils": "^16.1.2", + "@taquito/local-forging": "^16.1.2", + "@taquito/michel-codec": "^16.1.2", + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/rpc": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "rxjs": "^6.6.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/tzip12": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/tzip12/-/tzip12-16.1.2.tgz", + "integrity": "sha512-6BcDrY7l7noxIioMUFb5nBYW+Q8AGG7JkrNeQACqNzroNm31yRva6SM5fypSX9xbEkimcOaxostcNFWvZ3U0EQ==", + "dependencies": { + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/tzip16": "^16.1.2" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/tzip16": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/tzip16/-/tzip16-16.1.2.tgz", + "integrity": "sha512-3wsCpusiMi4nXJtaH8O3nYgjrNzY2Xb8Ep6jVOmZCAQrSm7P5Rn6FZzYM9T69+QtAmAEDCAyOF2jzM7QF/hrlg==", + "dependencies": { + "@taquito/http-utils": "^16.1.2", + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/rpc": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "crypto-js": "^4.1.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@taquito/utils": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-16.1.2.tgz", + "integrity": "sha512-CIs/qu8aFzetuo4B6EuGMD1JN5F+fxj+RYYpg69gTunzGiq8hx3D8BpRqidK4esiiNtUu1UrGiI5k1fr8myezQ==", + "dependencies": { + "@stablelib/blake2b": "^1.0.1", + "@stablelib/ed25519": "^1.0.3", + "@types/bs58check": "^2.1.0", + "bignumber.js": "^9.1.0", + "blakejs": "^1.2.1", + "bs58check": "^2.1.2", + "buffer": "^6.0.3", + "elliptic": "^6.5.4", + "typedarray-to-buffer": "^4.0.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "node_modules/@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/bs58check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.0.tgz", + "integrity": "sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "deprecated": "This is a stub types definition for commander (https://github.com/tj/commander.js). commander provides its own type definitions, so you don't need @types/commander installed!", + "dev": true, + "dependencies": { + "commander": "*" + } + }, + "node_modules/@types/elliptic": { + "version": "6.4.14", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.14.tgz", + "integrity": "sha512-z4OBcDAU0GVwDTuwJzQCiL6188QvZMkvoERgcVjq0/mPM8jCfdwZ3x5zQEVoL9WCAru3aG5wl3Z5Ww5wBWn7ZQ==", + "dev": true, + "dependencies": { + "@types/bn.js": "*" + } + }, + "node_modules/@types/figlet": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.6.tgz", + "integrity": "sha512-AOdn9cKJGXpqfHeif16xeGMwWefB4nsOyxkdRMpc+PEP3nUxzu3psJfIqhjrCNW4Sejt5i6rISWmEwK0sw03mA==", + "dev": true + }, + "node_modules/@types/node": { + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.3.tgz", + "integrity": "sha512-NP2yfZpgmf2eDRPmgGq+fjGjSwFgYbihA8/gK+ey23qT9RkxsgNTZvGOEpXgzIGqesTYkElELLgtKoMQTys5vA==" + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "node_modules/axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "dependencies": { + "follow-redirects": "^1.14.8" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "dependencies": { + "safe-buffer": "^5.0.1" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "dependencies": { + "@noble/hashes": "^1.2.0" + } + }, + "node_modules/blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "dependencies": { + "base-x": "^3.0.2" + } + }, + "node_modules/bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "dependencies": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/clear": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", + "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==", + "engines": { + "node": "*" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "dependencies": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "bin": { + "env-cmd": "bin/env-cmd.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/env-cmd/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fetch-cookie": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.1.0.tgz", + "integrity": "sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==", + "dependencies": { + "set-cookie-parser": "^2.4.8", + "tough-cookie": "^4.0.0" + } + }, + "node_modules/figlet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.6.0.tgz", + "integrity": "sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==", + "bin": { + "figlet": "bin/index.js" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "node_modules/fs-extra/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "node_modules/hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonfile/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/list": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/list/-/list-2.0.19.tgz", + "integrity": "sha512-nnVaRp4RaMAQkCpypTThsdxKqgPMiSwJq93eAm2/IbpUa8sd04XKBhkKu+bMk63HmdjK8b8Cuh4xARHWX2ye/Q==" + }, + "node_modules/make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "dependencies": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "bin": { + "nodemon": "bin/nodemon.js" + }, + "engines": { + "node": ">=8.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/nodemon" + } + }, + "node_modules/nodemon/node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/nodemon/node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "dependencies": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/prelude-ts": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/prelude-ts/-/prelude-ts-1.0.6.tgz", + "integrity": "sha512-AESHLCJ7psPqtj69LEJlZ2ENTnYeI2IJyxpWz459Ag556O/4u41JLOK11ZHTsMeUrRJQ+xWA6ulw/hGycXgEkA==", + "dependencies": { + "hamt_plus": "1.0.2", + "list": "2.0.19" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "node_modules/pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "node_modules/punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "dependencies": { + "semver": "~7.0.0" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/simple-update-notifier/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "dependencies": { + "nopt": "~1.0.10" + }, + "bin": { + "nodetouch": "bin/nodetouch.js" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "node_modules/ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/typedarray-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", + "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true, + "engines": { + "node": ">=6" + } + } + }, + "dependencies": { + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, + "@dipdup/tzkt-api": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@dipdup/tzkt-api/-/tzkt-api-0.0.1.tgz", + "integrity": "sha512-d+2KSK+aumrKl21rccYOfU4gQMNWf2MNi/rQL2Ibp/JzlYfuGpsQH5HaA8kYtpquOgFXjTRhNO95RYj5trYw/g==" + }, + "@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@microsoft/signalr": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/@microsoft/signalr/-/signalr-7.0.5.tgz", + "integrity": "sha512-j84syCKlXkQAOQhyrzRmW7w/M2UXQ6OKcXXFIVNjmiiZbEGIvSvJDRAuyMFjArdQOXz+etJgd58H/prTbyTCrA==", + "requires": { + "abort-controller": "^3.0.0", + "eventsource": "^2.0.2", + "fetch-cookie": "^2.0.3", + "node-fetch": "^2.6.7", + "ws": "^7.4.5" + } + }, + "@noble/hashes": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.0.tgz", + "integrity": "sha512-ilHEACi9DwqJB0pw7kv+Apvh50jiiSyR/cQ3y4W7lOR5mhvn/50FLUfsnfJz0BDZtl/RR16kXvptiv6q1msYZg==" + }, + "@stablelib/binary": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/binary/-/binary-1.0.1.tgz", + "integrity": "sha512-ClJWvmL6UBM/wjkvv/7m5VP3GMr9t0osr4yVgLZsLCOz4hGN9gIAFEqnJ0TsSMAN+n840nf2cHZnA5/KFqHC7Q==", + "requires": { + "@stablelib/int": "^1.0.1" + } + }, + "@stablelib/blake2b": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/blake2b/-/blake2b-1.0.1.tgz", + "integrity": "sha512-B3KyKoBAjkIFeH7romcF96i+pVFYk7K2SBQ1pZvaxV+epSBXJ+n0C66esUhyz6FF+5FbdQVm77C5fzGFcEZpKA==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/bytes": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/bytes/-/bytes-1.0.1.tgz", + "integrity": "sha512-Kre4Y4kdwuqL8BR2E9hV/R5sOrUj6NanZaZis0V6lX5yzqC3hBuVSDXUIBqQv/sCpmuWRiHLwqiT1pqqjuBXoQ==" + }, + "@stablelib/constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/constant-time/-/constant-time-1.0.1.tgz", + "integrity": "sha512-tNOs3uD0vSJcK6z1fvef4Y+buN7DXhzHDPqRLSXUel1UfqMB1PWNsnnAezrKfEwTLpN0cGH2p9NNjs6IqeD0eg==" + }, + "@stablelib/ed25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/ed25519/-/ed25519-1.0.3.tgz", + "integrity": "sha512-puIMWaX9QlRsbhxfDc5i+mNPMY+0TmQEskunY1rZEBPi1acBCVQAhnsk/1Hk50DGPtVsZtAWQg4NHGlVaO9Hqg==", + "requires": { + "@stablelib/random": "^1.0.2", + "@stablelib/sha512": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/hash": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hash/-/hash-1.0.1.tgz", + "integrity": "sha512-eTPJc/stDkdtOcrNMZ6mcMK1e6yBbqRBaNW55XA1jU8w/7QdnCF0CmMmOD1m7VSkBR44PWrMHU2l6r8YEQHMgg==" + }, + "@stablelib/hmac": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/hmac/-/hmac-1.0.1.tgz", + "integrity": "sha512-V2APD9NSnhVpV/QMYgCVMIYKiYG6LSqw1S65wxVoirhU/51ACio6D4yDVSwMzuTJXWZoVHbDdINioBwKy5kVmA==", + "requires": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/int": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/int/-/int-1.0.1.tgz", + "integrity": "sha512-byr69X/sDtDiIjIV6m4roLVWnNNlRGzsvxw+agj8CIEazqWGOQp2dTYgQhtyVXV9wpO6WyXRQUzLV/JRNumT2w==" + }, + "@stablelib/keyagreement": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/keyagreement/-/keyagreement-1.0.1.tgz", + "integrity": "sha512-VKL6xBwgJnI6l1jKrBAfn265cspaWBPAPEc62VBQrWHLqVgNRE09gQ/AnOEyKUWrrqfD+xSQ3u42gJjLDdMDQg==", + "requires": { + "@stablelib/bytes": "^1.0.1" + } + }, + "@stablelib/nacl": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@stablelib/nacl/-/nacl-1.0.4.tgz", + "integrity": "sha512-PJ2U/MrkXSKUM8C4qFs87WeCNxri7KQwR8Cdwm9q2sweGuAtTvOJGuW0F3N+zn+ySLPJA98SYWSSpogMJ1gCmw==", + "requires": { + "@stablelib/poly1305": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1", + "@stablelib/x25519": "^1.0.3", + "@stablelib/xsalsa20": "^1.0.2" + } + }, + "@stablelib/pbkdf2": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/pbkdf2/-/pbkdf2-1.0.1.tgz", + "integrity": "sha512-d5jwK6jW1DkMyzqY8D1Io+fRXcsUVr95lk5LKX9ghaUdAITTc1ZL0bff+R0IrwSixbHluxhnivG7vDw59AZ/Nw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/hmac": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/poly1305": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/poly1305/-/poly1305-1.0.1.tgz", + "integrity": "sha512-1HlG3oTSuQDOhSnLwJRKeTRSAdFNVB/1djy2ZbS35rBSJ/PFqx9cf9qatinWghC2UbfOYD8AcrtbUQl8WoxabA==", + "requires": { + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/random": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/random/-/random-1.0.2.tgz", + "integrity": "sha512-rIsE83Xpb7clHPVRlBj8qNe5L8ISQOzjghYQm/dZ7VaM2KHYwMW5adjQjrzTZCchFnNCNhkwtnOBa9HTMJCI8w==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/salsa20": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/salsa20/-/salsa20-1.0.2.tgz", + "integrity": "sha512-nfjKzw0KTKrrKBasEP+j7UP4I8Xudom8lVZIBCp0kQNARXq72IlSic0oabg2FC1NU68L4RdHrNJDd8bFwrphYA==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/constant-time": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/sha512": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/sha512/-/sha512-1.0.1.tgz", + "integrity": "sha512-13gl/iawHV9zvDKciLo1fQ8Bgn2Pvf7OV6amaRVKiq3pjQ3UmEpXxWiAfV8tYjUpeZroBxtyrwtdooQT/i3hzw==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/hash": "^1.0.1", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/wipe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stablelib/wipe/-/wipe-1.0.1.tgz", + "integrity": "sha512-WfqfX/eXGiAd3RJe4VU2snh/ZPwtSjLG4ynQ/vYzvghTh7dHFcI1wl+nrkWG6lGhukOxOsUHfv8dUXr58D0ayg==" + }, + "@stablelib/x25519": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@stablelib/x25519/-/x25519-1.0.3.tgz", + "integrity": "sha512-KnTbKmUhPhHavzobclVJQG5kuivH+qDLpe84iRqX3CLrKp881cF160JvXJ+hjn1aMyCwYOKeIZefIH/P5cJoRw==", + "requires": { + "@stablelib/keyagreement": "^1.0.1", + "@stablelib/random": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "@stablelib/xsalsa20": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@stablelib/xsalsa20/-/xsalsa20-1.0.2.tgz", + "integrity": "sha512-7XdBGbcNgBShmuhDXv1G1WPVCkjZdkb1oPMzSidO7Fve0MHntH6TjFkj5bfLI+aRE+61weO076vYpP/jmaAYog==", + "requires": { + "@stablelib/binary": "^1.0.1", + "@stablelib/salsa20": "^1.0.2", + "@stablelib/wipe": "^1.0.1" + } + }, + "@taquito/axios-fetch-adapter": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@taquito/axios-fetch-adapter/-/axios-fetch-adapter-0.3.1.tgz", + "integrity": "sha512-emPSsrYQumiUcZsDcTAP68gLJpKoJmbzwyy2D2h2/Zm3Q1TbAJJS1kbnwvQZfq0FjYyYCWYSITtAS3w0EUAG4g==", + "requires": {} + }, + "@taquito/http-utils": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/http-utils/-/http-utils-16.1.2.tgz", + "integrity": "sha512-02J9Q744ZEs0wbjBpm6NFzJCtjscuSOeQ3LaWfS1wx7XfMiNMLCOiWZt1RtjlIbcXKEYcOgvjfIy/A/tYl6cqQ==", + "requires": { + "@taquito/axios-fetch-adapter": "^0.3.1", + "axios": "^0.26.0" + } + }, + "@taquito/local-forging": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/local-forging/-/local-forging-16.1.2.tgz", + "integrity": "sha512-KSJMO7xo4mdM7cU2iTCNcWNn/vaABaCMXa2ONvb5TD0o3MHizqCP0M2rEfkP48eajlcBLF1RcOExSVWj+5+v/Q==", + "requires": { + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0" + } + }, + "@taquito/michel-codec": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/michel-codec/-/michel-codec-16.1.2.tgz", + "integrity": "sha512-kpVpfFQo96SZhHHUQUq7lNvZM44CTJnBk2sN6pIIxMaQiLXHshkE0KTqSUl3ocp/7ssd/Q7v4MsW/NSt3dthJQ==" + }, + "@taquito/michelson-encoder": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/michelson-encoder/-/michelson-encoder-16.1.2.tgz", + "integrity": "sha512-9gD4sgLgkuy4cTcp9eZ4DCasic3Ymi5BGCCVGXzNzzimbvdBPrMtDQMgBRu07mlTm9/4OENdDTuMk4QtIYfOqQ==", + "requires": { + "@taquito/rpc": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "fast-json-stable-stringify": "^2.1.0" + } + }, + "@taquito/rpc": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/rpc/-/rpc-16.1.2.tgz", + "integrity": "sha512-r2cwT3tnvofBtytDCP/P8G8i9gw2hgw73hiGhYw4CkYaRyVYcuBMwmr8soy/e3B8U2sHSsiyoUmBC9Z0AfkApQ==", + "requires": { + "@taquito/http-utils": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0" + } + }, + "@taquito/signer": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/signer/-/signer-16.1.2.tgz", + "integrity": "sha512-0gh/Hbz86d4343sEefNDyMjR8jnxtjxvCRR3/aMIN+IvhJTNC1LCsNfENgGIHjLr2R68YbPDRq2wpyq6+z/8nA==", + "requires": { + "@stablelib/blake2b": "^1.0.1", + "@stablelib/ed25519": "^1.0.3", + "@stablelib/hmac": "^1.0.1", + "@stablelib/nacl": "^1.0.4", + "@stablelib/pbkdf2": "^1.0.1", + "@stablelib/sha512": "^1.0.1", + "@taquito/taquito": "^16.1.2", + "@taquito/utils": "^16.1.2", + "@types/bn.js": "^5.1.1", + "bip39": "^3.0.4", + "elliptic": "^6.5.4", + "pbkdf2": "^3.1.2", + "typedarray-to-buffer": "^4.0.0" + } + }, + "@taquito/taquito": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/taquito/-/taquito-16.1.2.tgz", + "integrity": "sha512-0yjQRIjr1ZcVzTQ9QvtwZl4QAH2jM21vXTCOcHLxEuxjk052vr4OuS3WI+lk7hACtJXfwlA9DZ3zyNt9WdKFHA==", + "requires": { + "@taquito/http-utils": "^16.1.2", + "@taquito/local-forging": "^16.1.2", + "@taquito/michel-codec": "^16.1.2", + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/rpc": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "rxjs": "^6.6.3" + } + }, + "@taquito/tzip12": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/tzip12/-/tzip12-16.1.2.tgz", + "integrity": "sha512-6BcDrY7l7noxIioMUFb5nBYW+Q8AGG7JkrNeQACqNzroNm31yRva6SM5fypSX9xbEkimcOaxostcNFWvZ3U0EQ==", + "requires": { + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/tzip16": "^16.1.2" + } + }, + "@taquito/tzip16": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/tzip16/-/tzip16-16.1.2.tgz", + "integrity": "sha512-3wsCpusiMi4nXJtaH8O3nYgjrNzY2Xb8Ep6jVOmZCAQrSm7P5Rn6FZzYM9T69+QtAmAEDCAyOF2jzM7QF/hrlg==", + "requires": { + "@taquito/http-utils": "^16.1.2", + "@taquito/michelson-encoder": "^16.1.2", + "@taquito/rpc": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/utils": "^16.1.2", + "bignumber.js": "^9.1.0", + "crypto-js": "^4.1.1" + } + }, + "@taquito/utils": { + "version": "16.1.2", + "resolved": "https://registry.npmjs.org/@taquito/utils/-/utils-16.1.2.tgz", + "integrity": "sha512-CIs/qu8aFzetuo4B6EuGMD1JN5F+fxj+RYYpg69gTunzGiq8hx3D8BpRqidK4esiiNtUu1UrGiI5k1fr8myezQ==", + "requires": { + "@stablelib/blake2b": "^1.0.1", + "@stablelib/ed25519": "^1.0.3", + "@types/bs58check": "^2.1.0", + "bignumber.js": "^9.1.0", + "blakejs": "^1.2.1", + "bs58check": "^2.1.2", + "buffer": "^6.0.3", + "elliptic": "^6.5.4", + "typedarray-to-buffer": "^4.0.0" + } + }, + "@tsconfig/node10": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.9.tgz", + "integrity": "sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==", + "dev": true + }, + "@tsconfig/node12": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@tsconfig/node12/-/node12-1.0.11.tgz", + "integrity": "sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==", + "dev": true + }, + "@tsconfig/node14": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@tsconfig/node14/-/node14-1.0.3.tgz", + "integrity": "sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==", + "dev": true + }, + "@tsconfig/node16": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.4.tgz", + "integrity": "sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==", + "dev": true + }, + "@types/bn.js": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/@types/bn.js/-/bn.js-5.1.1.tgz", + "integrity": "sha512-qNrYbZqMx0uJAfKnKclPh+dTwK33KfLHYqtyODwd5HnXOjnkhc4qgn3BrK6RWyGZm5+sIFE7Q7Vz6QQtJB7w7g==", + "requires": { + "@types/node": "*" + } + }, + "@types/bs58check": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@types/bs58check/-/bs58check-2.1.0.tgz", + "integrity": "sha512-OxsysnJQh82vy9DRbOcw9m2j/WiyqZLn0YBhKxdQ+aCwoHj+tWzyCgpwAkr79IfDXZKxc6h7k89T9pwS78CqTQ==", + "requires": { + "@types/node": "*" + } + }, + "@types/commander": { + "version": "2.12.2", + "resolved": "https://registry.npmjs.org/@types/commander/-/commander-2.12.2.tgz", + "integrity": "sha512-0QEFiR8ljcHp9bAbWxecjVRuAMr16ivPiGOw6KFQBVrVd0RQIcM3xKdRisH2EDWgVWujiYtHwhSkSUoAAGzH7Q==", + "dev": true, + "requires": { + "commander": "*" + } + }, + "@types/elliptic": { + "version": "6.4.14", + "resolved": "https://registry.npmjs.org/@types/elliptic/-/elliptic-6.4.14.tgz", + "integrity": "sha512-z4OBcDAU0GVwDTuwJzQCiL6188QvZMkvoERgcVjq0/mPM8jCfdwZ3x5zQEVoL9WCAru3aG5wl3Z5Ww5wBWn7ZQ==", + "dev": true, + "requires": { + "@types/bn.js": "*" + } + }, + "@types/figlet": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/@types/figlet/-/figlet-1.5.6.tgz", + "integrity": "sha512-AOdn9cKJGXpqfHeif16xeGMwWefB4nsOyxkdRMpc+PEP3nUxzu3psJfIqhjrCNW4Sejt5i6rISWmEwK0sw03mA==", + "dev": true + }, + "@types/node": { + "version": "20.1.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.1.3.tgz", + "integrity": "sha512-NP2yfZpgmf2eDRPmgGq+fjGjSwFgYbihA8/gK+ey23qT9RkxsgNTZvGOEpXgzIGqesTYkElELLgtKoMQTys5vA==" + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "requires": { + "event-target-shim": "^5.0.0" + } + }, + "acorn": { + "version": "8.8.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.8.2.tgz", + "integrity": "sha512-xjIYgE8HBrkpd/sJqOGNspf8uHG+NOHGOw6a/Urj8taM2EXfdNAH2oFcPeIFfsv3+kz/mJrS5VuMqbNLjCa2vw==", + "dev": true + }, + "acorn-walk": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.2.0.tgz", + "integrity": "sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "axios": { + "version": "0.26.1", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.26.1.tgz", + "integrity": "sha512-fPwcX4EvnSHuInCMItEhAGnaSEXRBjtzh9fOtsE6E1G6p7vl7edEeZe11QHf18+6+9gR5PbKV/sGKNaD8YaMeA==", + "requires": { + "follow-redirects": "^1.14.8" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base-x": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/base-x/-/base-x-3.0.9.tgz", + "integrity": "sha512-H7JU6iBHTal1gp56aKoaa//YUxEaAOUiydvrV/pILqIHXTtqxSkATOnDA2u+jZ/61sD+L/412+7kzXRtWukhpQ==", + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "bignumber.js": { + "version": "9.1.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.1.tgz", + "integrity": "sha512-pHm4LsMJ6lzgNGVfZHjMoO8sdoRhOzOH4MLmY65Jg70bpxCKu5iOHNJyfF6OyvYw7t8Fpf35RuzUyqnQsj8Vig==" + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true + }, + "bip39": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bip39/-/bip39-3.1.0.tgz", + "integrity": "sha512-c9kiwdk45Do5GL0vJMe7tS95VjCii65mYAH7DfWl3uW8AVzXKQVUm64i3hzVybBDMp9r7j9iNxR85+ul8MdN/A==", + "requires": { + "@noble/hashes": "^1.2.0" + } + }, + "blakejs": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/blakejs/-/blakejs-1.2.1.tgz", + "integrity": "sha512-QXUSXI3QVc/gJME0dBpXrag1kbzOqCjCX8/b54ntNyW6sjtoqxqRk3LTmXzaJoh71zMsDCjM+47jS7XiwN/+fQ==" + }, + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "bs58": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/bs58/-/bs58-4.0.1.tgz", + "integrity": "sha512-Ok3Wdf5vOIlBrgCvTq96gBkJw+JUEzdBgyaza5HLtPm7yTHkjRy8+JzNyHF7BHa0bNWOQIp3m5YF0nnFcOIKLw==", + "requires": { + "base-x": "^3.0.2" + } + }, + "bs58check": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/bs58check/-/bs58check-2.1.2.tgz", + "integrity": "sha512-0TS1jicxdU09dwJMNZtVAfzPi6Q6QeN0pM1Fkzrjn+XYHvzMKPU3pHVpva+769iNVSfIYWf7LJ6WR+BuuMf8cA==", + "requires": { + "bs58": "^4.0.0", + "create-hash": "^1.1.0", + "safe-buffer": "^5.1.2" + } + }, + "buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + } + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "clear": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clear/-/clear-0.1.0.tgz", + "integrity": "sha512-qMjRnoL+JDPJHeLePZJuao6+8orzHMGP04A8CdwCNsKhRbOnKRjefxONR7bwILT3MHecxKBjHkKL/tkZ8r4Uzw==" + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==" + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "requires": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "requires": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "create-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/create-require/-/create-require-1.1.1.tgz", + "integrity": "sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==", + "dev": true + }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "crypto-js": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/crypto-js/-/crypto-js-4.1.1.tgz", + "integrity": "sha512-o2JlM7ydqd3Qk9CA0L4NL6mTzU2sdx96a+oOfPu8Mkl/PK51vSyoi8/rQ8NknZtk44vq15lmhAj9CIAGwgeWKw==" + }, + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "requires": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } + } + }, + "env-cmd": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/env-cmd/-/env-cmd-10.1.0.tgz", + "integrity": "sha512-mMdWTT9XKN7yNth/6N6g2GuKuJTsKMDHlQFUDacb/heQRRWOTIZ42t1rMHnQu4jYxU1ajdTeJM+9eEETlqToMA==", + "requires": { + "commander": "^4.0.0", + "cross-spawn": "^7.0.0" + }, + "dependencies": { + "commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==" + } + } + }, + "event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" + }, + "eventsource": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==" + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "fetch-cookie": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fetch-cookie/-/fetch-cookie-2.1.0.tgz", + "integrity": "sha512-39+cZRbWfbibmj22R2Jy6dmTbAWC+oqun1f1FzQaNurkPDUP4C38jpeZbiXCR88RKRVDp8UcDrbFXkNhN+NjYg==", + "requires": { + "set-cookie-parser": "^2.4.8", + "tough-cookie": "^4.0.0" + } + }, + "figlet": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/figlet/-/figlet-1.6.0.tgz", + "integrity": "sha512-31EQGhCEITv6+hi2ORRPyn3bulaV9Fl4xOdR169cBzH/n1UqcxsiSB/noo6SJdD7Kfb1Ljit+IgR1USvF/XbdA==" + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "follow-redirects": { + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==" + }, + "fs-extra": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.1.1.tgz", + "integrity": "sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==", + "requires": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" + }, + "hamt_plus": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/hamt_plus/-/hamt_plus-1.0.2.tgz", + "integrity": "sha512-t2JXKaehnMb9paaYA7J0BX8QQAY8lwfQ9Gjf4pg/mk4krt+cmwmU652HOoWonf+7+EQV97ARPMhhVgU1ra2GhA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "requires": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore-by-default": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-1.0.1.tgz", + "integrity": "sha512-Ius2VYcGNk7T90CppJqcIkS5ooHUZyIQK+ClZfMfMNFEF9VSE73Fq+906u/CWu92x4gzZMWOwfFYckPObzdEbA==", + "dev": true + }, + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + }, + "dependencies": { + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" + } + } + }, + "list": { + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/list/-/list-2.0.19.tgz", + "integrity": "sha512-nnVaRp4RaMAQkCpypTThsdxKqgPMiSwJq93eAm2/IbpUa8sd04XKBhkKu+bMk63HmdjK8b8Cuh4xARHWX2ye/Q==" + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node-fetch": { + "version": "2.6.11", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.11.tgz", + "integrity": "sha512-4I6pdBY1EthSqDmJkiNk3JIT8cswwR9nfeW/cPdUagJYEQG7R95WRH74wpz7ma8Gh/9dI9FP+OU+0E4FvtA55w==", + "requires": { + "whatwg-url": "^5.0.0" + } + }, + "nodemon": { + "version": "2.0.22", + "resolved": "https://registry.npmjs.org/nodemon/-/nodemon-2.0.22.tgz", + "integrity": "sha512-B8YqaKMmyuCO7BowF1Z1/mkPqLk6cs/l63Ojtd6otKjMx47Dq1utxfRxcavH1I7VSaL8n5BUaoutadnsX3AAVQ==", + "dev": true, + "requires": { + "chokidar": "^3.5.2", + "debug": "^3.2.7", + "ignore-by-default": "^1.0.1", + "minimatch": "^3.1.2", + "pstree.remy": "^1.1.8", + "semver": "^5.7.1", + "simple-update-notifier": "^1.0.7", + "supports-color": "^5.5.0", + "touch": "^3.1.0", + "undefsafe": "^2.0.5" + }, + "dependencies": { + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "nopt": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-1.0.10.tgz", + "integrity": "sha512-NWmpvLSqUrgrAC9HCuxEvb+PSloHpqVu+FqcO4eeF2h5qYRhA7ev6KvelyQAKtegUbC6RypJnlEOhd8vloNKYg==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "path": { + "version": "0.12.7", + "resolved": "https://registry.npmjs.org/path/-/path-0.12.7.tgz", + "integrity": "sha512-aXXC6s+1w7otVF9UletFkFcDsJeO7lSZBPUQhtb5O0xJe8LtYhj/GxldoL09bBj9+ZmE2hNoHqQSFMN5fikh4Q==", + "requires": { + "process": "^0.11.1", + "util": "^0.10.3" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "prelude-ts": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/prelude-ts/-/prelude-ts-1.0.6.tgz", + "integrity": "sha512-AESHLCJ7psPqtj69LEJlZ2ENTnYeI2IJyxpWz459Ag556O/4u41JLOK11ZHTsMeUrRJQ+xWA6ulw/hGycXgEkA==", + "requires": { + "hamt_plus": "1.0.2", + "list": "2.0.19" + } + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==" + }, + "psl": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", + "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==" + }, + "pstree.remy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", + "integrity": "sha512-77DZwxQmxKnu3aR542U+X8FypNzbfJ+C5XQDk3uWjWxn6151aIMGthWYRXTqT1E5oJvg+ljaa2OJi+VfvCOQ8w==", + "dev": true + }, + "punycode": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.0.tgz", + "integrity": "sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==" + }, + "querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==" + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "requires": { + "tslib": "^1.9.0" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==" + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" + }, + "simple-update-notifier": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/simple-update-notifier/-/simple-update-notifier-1.1.0.tgz", + "integrity": "sha512-VpsrsJSUcJEseSbMHkrsrAVSdvVS5I96Qo1QAQ4FxQ9wXFcB+pjj7FB7/us9+GcgfW4ziHtYMc1J0PLczb55mg==", + "dev": true, + "requires": { + "semver": "~7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "requires": { + "safe-buffer": "~5.2.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "touch": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/touch/-/touch-3.1.0.tgz", + "integrity": "sha512-WBx8Uy5TLtOSRtIq+M03/sKDrXCLHxwDcquSP2c43Le03/9serjQBIztjRz6FkJez9D/hleyAXTBGLwwZUw9lA==", + "dev": true, + "requires": { + "nopt": "~1.0.10" + } + }, + "tough-cookie": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.2.tgz", + "integrity": "sha512-G9fqXWoYFZgTc2z8Q5zaHy/vJMjm+WV0AkAeHxVCQiEB1b+dGvWzFW6QV07cY5jQ5gRkeid2qIkzkxUnmoQZUQ==", + "requires": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + } + }, + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "ts-node": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", + "dev": true, + "requires": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "typedarray-to-buffer": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-4.0.0.tgz", + "integrity": "sha512-6dOYeZfS3O9RtRD1caom0sMxgK59b27+IwoNy8RDPsmslSGOyU+mpTamlaIW7aNKi90ZQZ9DFaZL3YRoiSCULQ==" + }, + "typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true + }, + "undefsafe": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/undefsafe/-/undefsafe-2.0.5.tgz", + "integrity": "sha512-WxONCrssBM8TSPRqN5EmsjVrsv4A8X12J4ArBiiayv3DyyG3ZlIg6yysuuSYdZsVz3TKcTg2fd//Ujd4CHV1iA==", + "dev": true + }, + "universalify": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", + "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==" + }, + "url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "requires": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "requires": { + "inherits": "2.0.3" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "requires": { + "isexe": "^2.0.0" + } + }, + "ws": { + "version": "7.5.9", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", + "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", + "requires": {} + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/batcher-bot/liquidity/package.json b/batcher-bot/liquidity/package.json new file mode 100644 index 00000000..4e274efa --- /dev/null +++ b/batcher-bot/liquidity/package.json @@ -0,0 +1,41 @@ +{ + "name": "batcher-liquidity-bot", + "version": "0.0.1", + "description": "Just in time and always on liquidity bot for the Batcher DEX", + "main": "index.js", + "scripts": { + "start": "nodemon --watch 'src/**/*.ts' --exec 'ts-node' src/index.ts", + "create": "npm run build", + "build": "rm -rf ./dist && tsc -p .", + "package": "npm prune --production && cp README.md dist/ && cp src/liquidity-config-* dist/ && cp -rf node_modules dist/", + "local": "sudo npm i -g && npm run start", + "refresh": "rm -rf ./node_modules ./package-lock.json && npm install" + }, + "author": "", + "license": "ISC", + "dependencies": { + "@dipdup/tzkt-api": "^0.0.1", + "@microsoft/signalr": "^7.0.5", + "@taquito/signer": "^16.1.2", + "@taquito/taquito": "^16.1.2", + "@taquito/tzip12": "^16.1.2", + "@taquito/tzip16": "^16.1.2", + "chalk": "^4.1.2", + "clear": "^0.1.0", + "commander": "^10.0.1", + "env-cmd": "^10.1.0", + "figlet": "^1.6.0", + "fs-extra": "^11.1.1", + "path": "^0.12.7", + "prelude-ts": "^1.0.6" + }, + "devDependencies": { + "@types/commander": "^2.12.2", + "@types/elliptic": "^6.4.14", + "@types/figlet": "^1.5.6", + "@types/node": "^20.1.3", + "nodemon": "^2.0.22", + "ts-node": "^10.9.1", + "typescript": "^5.0.4" + } +} diff --git a/batcher-bot/liquidity/src/bot.ts b/batcher-bot/liquidity/src/bot.ts new file mode 100644 index 00000000..b063d7cb --- /dev/null +++ b/batcher-bot/liquidity/src/bot.ts @@ -0,0 +1,229 @@ +import { HubConnection } from "@microsoft/signalr"; +import { + contract_details, + liquidity_settings, + batch_provision, + token_pair, +} from "./types"; +import { parse_deposit } from "./utils"; +import { submit_deposit, submit_redemption } from "./submitter"; +import { can_provision_always_on, can_provision_jit } from "./provision"; +import { TezosToolkit } from "@taquito/taquito"; + +const redeem_on_cleared = ( + batcher_contract: string, + msg: any, + tezos: TezosToolkit +) => { + for (let i = 0; i < Object.keys(msg.data).length; i++) { + try { + const message = msg.data[i]; + if (message.path == "batch_set.batches") { + const val = message.content.value; + const batch_number = val.batch_number; + const status = Object.keys(val.status)[0]; + if (status == "cleared") { + console.info(`Batch ${batch_number} was cleared. Redeeming `); + submit_redemption(batcher_contract, tezos).then(() => { + console.info(`Redeemed holdings `); + }); + } + } + } catch (error: any) { + console.info("Error parsing bigmap for redemption", error); + console.error(error); + } + } +}; +const getPairName = (fromName: string, toName: string) => { + if (fromName > toName) { + return fromName + "/" + toName; + } + + return toName + "/" + fromName; +}; + +const parse_status = (status:any) => { + + try{ + if ('cleared' in status){ + return `cleared @ ${status.cleared.at}`; + } + + if ('closed' in status){ + return `closed @ ${status.closed.closing_time}`; + } + return `opened @ ${status.open}`; + } catch (error:any) + { + console.info("Error parsing status"); + console.error(error); + } + + +} + +const always_on_provision = ( + tezos: TezosToolkit, + message: any, + details: contract_details, + settings: liquidity_settings +) => { + for (let i = 0; i < Object.keys(message.data).length; i++) { + try { + const msg = message.data[i]; + if (msg.path == "batch_set.batches") { + const val = msg.content.value; + const batch_number = val.batch_number; + const status = Object.keys(val.status)[0]; + const raw_pair = val.pair; + const pair: string = getPairName(raw_pair.name_0, raw_pair.name_1); + const parsed_status = parse_status(val.status); + console.info("Batch change",`${batch_number} ${pair} was ${parsed_status}`); + if (status == "open") { + if (settings.token_pairs.has(pair)) { + const setting = settings.token_pairs.get(pair); + if (setting) { + console.info( + `Batch ${batch_number} is open. Provisioning liquidity` + ); + let buy_token = { + token_id: raw_pair.token_id_0, + name: raw_pair.name_0, + decimals: raw_pair.decimals_0, + standard: raw_pair.standard_0, + address: raw_pair.address_0, + }; + let sell_token = { + token_id: raw_pair.token_id_1, + name: raw_pair.name_1, + decimals: raw_pair.decimals_1, + standard: raw_pair.standard_1, + address: raw_pair.address_1, + }; + + const order_list_opt = can_provision_always_on( + batch_number, + setting, + buy_token, + sell_token, + details + ); + + if (order_list_opt.isSome()) { + const ords = order_list_opt.get(); + for (let j = 0; j < ords.length; j++) { + let ord = ords[i]; + console.info("Provisioning -> ", ord); + submit_deposit(details, ord, tezos).then(() => { + console.info("Provisioned order."); + }); + } + } + } + } + } + } + } catch (error: any) { + console.error(error); + } + } +}; + +const jit_provision = ( + tezos: TezosToolkit, + message: any, + details: contract_details, + settings: liquidity_settings +) => { + for (let i = 0; i < Object.keys(message.data).length; i++) { + try { + const msg = message.data[i]; + if (msg.parameter) { + const entrypoint = msg.parameter.entrypoint; + const sender = msg.sender.address; + if (entrypoint == "deposit" && sender != details.user_address) { + console.info("Deposit msg", msg); + const val = msg.parameter.value; + const pair: string = getPairName( + val.swap.from.token.name, + val.swap.to.name + ); + + const current_batch_indices = + msg.storage.batch_set.current_batch_indices; + const batch_number = current_batch_indices[pair]; + + if (settings.token_pairs.has(pair)) { + const jit_setting = settings.token_pairs.get(pair); + if (jit_setting) { + const order = parse_deposit(val); + const order_opt = can_provision_jit( + batch_number, + jit_setting, + order + ); + if (order_opt.isSome()) { + const ord = order_opt.get(); + console.info("Provisioning -> ", JSON.stringify(ord)); + submit_deposit(details, ord, tezos).then(() => { + console.info("Provisioned order."); + }); + } + } + } + } + } + } catch (error: any) { + console.error(error); + } + } +}; + +export const run_jit = async ( + tezos: TezosToolkit, + details: contract_details, + settings: liquidity_settings, + socket_connection: HubConnection +) => { + await socket_connection.start(); + + socket_connection.on("operations", (msg: any) => { + if (!msg.data) return; + jit_provision(tezos, msg, details, settings); + }); + + socket_connection.on("bigmaps", (msg: any) => { + if (!msg.data) return; + redeem_on_cleared(details.address, msg, tezos); + }); + + await socket_connection.invoke("SubscribeToOperations", { + address: details.address, + types: "transaction", + }); + + await socket_connection.invoke("SubscribeToBigMaps", { + contract: details.address, + }); + +}; + +export const run_always_on = async ( + tezos: TezosToolkit, + details: contract_details, + settings: liquidity_settings, + socket_connection: HubConnection +) => { + await socket_connection.start(); + + await socket_connection.invoke("SubscribeToBigMaps", { + contract: details.address, + }); + + socket_connection.on("bigmaps", (msg: any) => { + if (!msg.data) return; + always_on_provision(tezos, msg, details, settings); + redeem_on_cleared(details.address, msg, tezos); + }); +}; diff --git a/batcher-bot/liquidity/src/index.ts b/batcher-bot/liquidity/src/index.ts new file mode 100644 index 00000000..64c35d4b --- /dev/null +++ b/batcher-bot/liquidity/src/index.ts @@ -0,0 +1,84 @@ +#!/usr/bin/env node +import { TezosToolkit } from "@taquito/taquito"; +import { InMemorySigner } from "@taquito/signer"; +import { run_jit, run_always_on } from "./bot"; +import { contract_details, liquidity_settings } from "./types"; +import { load_settings } from "./settings"; +import { HubConnection, HubConnectionBuilder } from "@microsoft/signalr"; +import { get_contract_detail_from_storage, echo_terminal } from "./utils"; +import { Option } from "prelude-ts"; +const clear = require("clear"); +const { Command } = require("commander"); +const cli = new Command(); + +clear(); + +echo_terminal("Batcher Bot", Option.none()); + +const get_connection = (uri: string): HubConnection => { + return new HubConnectionBuilder().withUrl(uri + "/v1/ws").build(); +}; +const preload = async ( + tezos: TezosToolkit, + settings: liquidity_settings +): Promise => { + const contract_uri: string = `${settings.tzkt_uri_api}/v1/contracts/${settings.batcher_address}/storage`; + console.info("contract_uri", contract_uri); + const priv_key = process.env["TEZOS_PRIV_KEY"]; + if(!priv_key){ + throw new Error("A Tezos private key is required to run the liquidity bot"); + } + tezos.setProvider({ + signer: await InMemorySigner.fromSecretKey(priv_key), + }); + + const user_address = await tezos.signer.publicKeyHash(); + return fetch(contract_uri) + .then((response) => response.json()) + .then((json) => { + return get_contract_detail_from_storage( + user_address, + settings.batcher_address, + json + ); + }); +}; + +cli + .name("batcher-liquidity-bot") + .version("0.0.1") + .description("Batcher Liquidity Bot CLI"); + +cli + .command("jit") + .description("Run Jit liquidity for Batcher") + .argument("", "Path to settings file") + .action((p: string) => { + const sett = load_settings(p); + const socket_connection = get_connection(sett.tzkt_uri_api); + const Tezos = new TezosToolkit(sett.tezos_node_uri); + preload(Tezos, sett).then((contract_config: contract_details) => { + echo_terminal("Just-In-Time-Liquidity", Option.of("Mnemonic")); + run_jit(Tezos, contract_config, sett, socket_connection); + }); + }); + +cli + .command("always-on") + .description("Run always-on liquidity for Batcher") + .argument("", "Path to settings file") + .action((p: string) => { + const sett = load_settings(p); + const socket_connection = get_connection(sett.tzkt_uri_api); + const Tezos = new TezosToolkit(sett.tezos_node_uri); + preload(Tezos, sett).then((contract_config: contract_details) => { + echo_terminal("Always-On-Liquidity", Option.of("Mnemonic")); + run_always_on(Tezos, contract_config, sett, socket_connection); + }); + }); + +cli.parse(process.argv); + +if (!process.argv.slice(2).length) { + cli.outputHelp(); +} diff --git a/batcher-bot/liquidity/src/liquidity-config-example-ghostnet.json b/batcher-bot/liquidity/src/liquidity-config-example-ghostnet.json new file mode 100644 index 00000000..ec9db860 --- /dev/null +++ b/batcher-bot/liquidity/src/liquidity-config-example-ghostnet.json @@ -0,0 +1,25 @@ +{ + "batcher_address": "KT1VbeN9etQe5c2b6EAFfCZVaSTpiieHj5u1", + "tezos_node_uri": "https://ghostnet.tezos.marigold.dev", + "tzkt_uri_api": "https://api.ghostnet.tzkt.io", + "token_pairs": [ + { + "name": "tzBTC/USDT", + "side": "both", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "worse", + "sell_limit_per_batch": 200, + "sell_tolerance": "oracle" + }, + { + "name": "tzBTC/EURL", + "side": "either", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "oracle", + "sell_limit_per_batch": 220, + "sell_tolerance": "better" + } + ] + + +} diff --git a/batcher-bot/liquidity/src/liquidity-config-example-mainnet.json b/batcher-bot/liquidity/src/liquidity-config-example-mainnet.json new file mode 100644 index 00000000..e868eb5e --- /dev/null +++ b/batcher-bot/liquidity/src/liquidity-config-example-mainnet.json @@ -0,0 +1,15 @@ +{ + "batcher_address": "KT1VbeN9etQe5c2b6EAFfCZVaSTpiieHj5u1", + "tezos_node_uri": "https://ghostnet.tezos.marigold.dev", + "tzkt_uri_api": "https://api.ghostnet.tzkt.io", + "token_pairs": [ + { + "name": "tzBTC/USDT", + "side": "both", + "buy_limit_per_batch": 0.02, + "buy_tolerance": "oracle", + "sell_limit_per_batch": 200, + "sell_tolerance": "oracle" + } + ] +} diff --git a/batcher-bot/liquidity/src/provision.ts b/batcher-bot/liquidity/src/provision.ts new file mode 100644 index 00000000..f5dff39d --- /dev/null +++ b/batcher-bot/liquidity/src/provision.ts @@ -0,0 +1,240 @@ +import { + batch_provision, + order, + token_pair, + contract_details, + token, +} from "./types"; +import { Option } from "prelude-ts"; + +const provision = new Map(); + +const parse_tolerance = (side: number, tol: string): number => { + if (side == 0) { + if (tol == "worse") { + return 0; + } + + if (tol == "better") { + return 2; + } + + return 1; + } else { + if (tol == "worse") { + return 2; + } + + if (tol == "better") { + return 0; + } + + return 1; + } +}; + +const provision_sell = ( + batch_number: number, + token_pair: token_pair, + order: order +): Option => { + let existing_buy_provision = 0; + let existing_sell_provision = 0; + + const existing_provision = provision.get(batch_number); + try { + if (existing_provision) { + existing_buy_provision = existing_provision.buy_side_provision; + existing_sell_provision = existing_provision.sell_side_provision; + } + } catch {} + + if (token_pair.side == "either" && existing_buy_provision > 0) { + return Option.none(); + } + + const upper_provision_bound = token_pair.sell_limit_per_batch; + const remaining = upper_provision_bound - existing_sell_provision; + + if (remaining <= 0) { + return Option.none(); + } + + const sell_decimals = order.swap.to.decimals; + const scaled_amount = remaining * 10 ** sell_decimals; + + const prov_order: order = { + swap: { + from: { + token: order.swap.to, + amount: scaled_amount, + }, + to: order.swap.from.token, + }, + side: 1, + tolerance: parse_tolerance(1, token_pair.sell_tolerance), + }; + const updated_provision: batch_provision = { + batch_number: batch_number, + buy_side_provision: existing_buy_provision, + sell_side_provision: existing_sell_provision + remaining, + }; + + provision.set(batch_number, updated_provision); + + return Option.of(prov_order); +}; + +const provision_buy = ( + batch_number: number, + token_pair: token_pair, + order: order +): Option => { + let existing_buy_provision = 0; + let existing_sell_provision = 0; + + const existing_provision = provision.get(batch_number); + try { + if (existing_provision) { + existing_buy_provision = existing_provision.buy_side_provision; + existing_sell_provision = existing_provision.sell_side_provision; + } + } catch {} + + if (token_pair.side == "either" && existing_sell_provision > 0) { + return Option.none(); + } + + const upper_provision_bound = token_pair.buy_limit_per_batch; + const remaining = upper_provision_bound - existing_buy_provision; + + if (remaining <= 0) { + return Option.none(); + } + + const buy_decimals = order.swap.to.decimals; + const scaled_amount = remaining * 10 ** buy_decimals; + + let prov_order: order = { + swap: { + from: { + token: order.swap.to, + amount: scaled_amount, + }, + to: order.swap.from.token, + }, + side: 0, + tolerance: parse_tolerance(0, token_pair.sell_tolerance), + }; + const updated_provision: batch_provision = { + batch_number: batch_number, + buy_side_provision: existing_buy_provision + remaining, + sell_side_provision: existing_sell_provision, + }; + + provision.set(batch_number, updated_provision); + + return Option.of(prov_order); +}; + +export const can_provision_always_on = ( + batch_number: number, + token_pair: token_pair, + buy_token: token, + sell_token: token, + details: contract_details +): Option> => { + let orders = new Array(); + const s = token_pair.side; + + try { + const already_provisioned = provision.has(batch_number) + console.info("Already provisioned", already_provisioned); + if(!already_provisioned) { + + let updated_provision: batch_provision = { + batch_number: batch_number, + buy_side_provision: 0, + sell_side_provision: 0, + }; + + + const buy_decimals = buy_token.decimals; + const buy_scaled_amount = + token_pair.buy_limit_per_batch * 10 ** buy_decimals; + + const buy_order = { + swap: { + from: { + token: buy_token, + amount: buy_scaled_amount, + }, + to: sell_token, + }, + side: 0, + tolerance: parse_tolerance(0, token_pair.buy_tolerance), + }; + + let sell_decimals = sell_token.decimals; + let sell_scaled_amount = + token_pair.sell_limit_per_batch * 10 ** sell_decimals; + + const sell_order = { + swap: { + from: { + token: sell_token, + amount: sell_scaled_amount, + }, + to: buy_token, + }, + side: 1, + tolerance: parse_tolerance(1, token_pair.buy_tolerance), + }; + + if ((s == "sell")) { + orders.push(sell_order); + updated_provision = { ...updated_provision, sell_side_provision: token_pair.sell_limit_per_batch } + } + if ((s == "buy")) { + orders.push(buy_order); + updated_provision = { ...updated_provision, buy_side_provision: token_pair.buy_limit_per_batch } + } + if ((s == "both")) { + orders.push(buy_order); + orders.push(sell_order); + updated_provision = { ...updated_provision, sell_side_provision: token_pair.sell_limit_per_batch, buy_side_provision: token_pair.buy_limit_per_batch } + } + provision.set(batch_number, updated_provision); + } + } catch (error: any) { + console.error(error); + } + + if (orders.length > 0) { + return Option.of(orders); + } else { + return Option.none(); + } +}; + +export const can_provision_jit = ( + batch_number: number, + token_pair: token_pair, + order: order +): Option => { + const s = token_pair.side; + + if (order.side == 0) { + if (s == "both" || s == "either" || s == "sell") { + return provision_sell(batch_number, token_pair, order); + } + } + + if (order.side == 1) { + if (s == "both" || s == "either" || s == "buy") { + return provision_buy(batch_number, token_pair, order); + } + } + + return Option.none(); +}; diff --git a/batcher-bot/liquidity/src/settings.ts b/batcher-bot/liquidity/src/settings.ts new file mode 100644 index 00000000..c002716c --- /dev/null +++ b/batcher-bot/liquidity/src/settings.ts @@ -0,0 +1,36 @@ +import { liquidity_settings } from "./types"; + +const path = require("path"); +const fs = require("fs-extra"); + +export const load_settings = (settings_path: string): liquidity_settings => { + let resolved_path = path.parse(settings_path); + if (!path.isAbsolute(settings_path)) { + resolved_path = path.join(path.dirname(__filename), settings_path); + } + resolved_path = path.normalize(resolved_path); + const settings = fs.readJsonSync(resolved_path); + + const tpm = new Map(); + + for (let i = 0; i < Object.keys(settings.token_pairs).length; i++) { + const tp = settings.token_pairs[i]; + const tsett = { + name: tp.name, + side: tp.side, + buy_limit_per_batch: tp.buy_limit_per_batch, + buy_tolerance: tp.buy_tolerance, + sell_limit_per_batch: tp.sell_limit_per_batch, + sell_tolerance: tp.sell_tolerance, + }; + tpm.set(tp.name, tsett); + } + console.info("Liquidity Settings", tpm); + + return { + batcher_address: settings.batcher_address, + tezos_node_uri: settings.tezos_node_uri, + tzkt_uri_api: settings.tzkt_uri_api, + token_pairs: tpm, + }; +}; diff --git a/batcher-bot/liquidity/src/submitter.ts b/batcher-bot/liquidity/src/submitter.ts new file mode 100644 index 00000000..d574f2f5 --- /dev/null +++ b/batcher-bot/liquidity/src/submitter.ts @@ -0,0 +1,172 @@ +import { + compose, + OpKind, + TezosToolkit, + WalletContract, +} from "@taquito/taquito"; +import { contract_details, order, token } from "./types"; +import { tzip12 } from "@taquito/tzip12"; +import { tzip16 } from "@taquito/tzip16"; + +export async function submit_fa2_deposit( + user_address: string, + batcher_contract: string, + order: order, + tezos: TezosToolkit, + swap_params: any +) { + let token_address = order.swap.from.token.address; + let token_id: number = order.swap.from.token.token_id; + if (token_address) { + const fa2_add_operator_params = [ + { + add_operator: { + owner: user_address, + operator: batcher_contract, + token_id: token_id, + }, + }, + ]; + + const fa2_remove_operator_params = [ + { + remove_operator: { + owner: user_address, + operator: batcher_contract, + token_id: token_id, + }, + }, + ]; + try { + const batcherContract = await tezos.wallet.at(batcher_contract); + const tokenfa2Contract: WalletContract = await tezos.wallet.at( + token_address, + compose(tzip12, tzip16) + ); + const deposit_op = await tezos.wallet + .batch([ + { + kind: OpKind.TRANSACTION, + ...tokenfa2Contract.methods + .update_operators(fa2_add_operator_params) + .toTransferParams(), + }, + { + kind: OpKind.TRANSACTION, + ...batcherContract.methodsObject + .deposit(swap_params) + .toTransferParams(), + to: batcher_contract, + amount: 10000, + mutez: true, + }, + { + kind: OpKind.TRANSACTION, + ...tokenfa2Contract.methods + .update_operators(fa2_remove_operator_params) + .toTransferParams(), + }, + ]) + .send(); + + await deposit_op.confirmation(); + } catch (error: any) { + console.error(error); + } + } else { + throw new Error("No valid token address for fa12 token"); + } +} + +export async function submit_fa12_deposit( + batcher_contract: string, + order: order, + tezos: TezosToolkit, + swap_params: any +) { + let token_address = order.swap.from.token.address; + let amount = order.swap.from.amount; + if (token_address) { + try { + const batcherContract = await tezos.wallet.at(batcher_contract); + const tokenfa12Contract: WalletContract = await tezos.wallet.at( + token_address, + compose(tzip12, tzip16) + ); + const deposit_op = await tezos.wallet + .batch([ + { + kind: OpKind.TRANSACTION, + ...tokenfa12Contract.methods + .approve(batcher_contract, amount) + .toTransferParams(), + }, + { + kind: OpKind.TRANSACTION, + ...batcherContract.methodsObject + .deposit(swap_params) + .toTransferParams(), + to: batcher_contract, + amount: 10000, + mutez: true, + }, + ]) + .send(); + const confirmation = await deposit_op.confirmation(); + } catch (error: any) { + console.error(error); + } + } else { + throw new Error("No valid token address for fa12 token"); + } +} + +export async function submit_deposit( + contract_details: contract_details, + order: order, + tezos: TezosToolkit +) { + let fromToken: token = order.swap.from.token; + let user_address = contract_details.user_address; + let batcher_address = contract_details.address; + if (fromToken.standard) { + const swap_params = { + swap: order.swap, + created_at: Math.floor(Date.now() / 1000), + side: order.side, + tolerance: order.tolerance, + }; + + if (fromToken.standard == "FA2 token") { + return await submit_fa2_deposit( + user_address, + batcher_address, + order, + tezos, + swap_params + ); + } else { + return await submit_fa12_deposit( + batcher_address, + order, + tezos, + swap_params + ); + } + } +} + +export async function submit_redemption( + batcher_contract: string, + tezos: TezosToolkit +) { + try { + const batcher = await tezos.contract.at(batcher_contract); + const redeemOp = batcher.methods.redeem(); + const op = await redeemOp.send(); + await op.confirmation(); + console.log("Successfully redeemed!"); + } catch (error: any) { + console.error(error); + } +} diff --git a/batcher-bot/liquidity/src/types.ts b/batcher-bot/liquidity/src/types.ts new file mode 100644 index 00000000..96751c99 --- /dev/null +++ b/batcher-bot/liquidity/src/types.ts @@ -0,0 +1,54 @@ +import { Option, None } from "prelude-ts"; +export type liquidity_type = "jit" | "alwayson"; + +export type token_pair = { + name: string; + side: string; + buy_limit_per_batch: number; + buy_tolerance: string; + sell_limit_per_batch: number; + sell_tolerance: string; +}; + +export type liquidity_settings = { + batcher_address: string; + tezos_node_uri: string; + tzkt_uri_api: string; + token_pairs: Map; +}; + +export type token = { + token_id: number; + name: string; + address: string; + decimals: number; + standard: string; +}; + +export type token_amount = { + token: token; + amount: number; +}; + +export type swap = { + from: token_amount; + to: token; +}; + +export type contract_details = { + user_address: string; + address: string; + valid_tokens: Map; +}; + +export type batch_provision = { + batch_number: number; + buy_side_provision: number; + sell_side_provision: number; +}; + +export type order = { + side: number; + tolerance: number; + swap: swap; +}; diff --git a/batcher-bot/liquidity/src/utils.ts b/batcher-bot/liquidity/src/utils.ts new file mode 100644 index 00000000..e84a49fb --- /dev/null +++ b/batcher-bot/liquidity/src/utils.ts @@ -0,0 +1,75 @@ +import { token, swap, contract_details, order } from "./types"; +import { Option, None } from "prelude-ts"; +const chalk = require("chalk"); +const figlet = require("figlet"); + +export const echo_terminal = (msg: string, font: Option) => { + let font_to_use = "Larry 3D"; + if (font.isSome()) { + font_to_use = font.get(); + } + console.log( + chalk.bold.bgBlack.redBright( + figlet.textSync(msg, { + horizontalLayout: "fitted", + verticalLayout: "fitted", + font: font_to_use, + }) + ) + ); +}; + +export const parse_token = (jt: any): token => { + return { + token_id: jt.token_id, + name: jt.name, + address: jt.address, + decimals: jt.decimals, + standard: jt.standard, + }; +}; + +export const parse_tokens_from_storage = (storage: any): Map => { + const map = new Map(); + if (storage.valid_tokens) { + let vt = storage.valid_tokens; + Object.keys(vt).forEach(key => { + let token = parse_token(vt[key]); + map.set(key, token); + }); + } + return map; +}; + +export const get_contract_detail_from_storage = ( + user_address: string, + address: string, + storage: any +): contract_details => { + let tokens = parse_tokens_from_storage(storage); + return { + user_address: user_address, + address: address, + valid_tokens: tokens, + }; +}; + +export const parse_deposit = (o: any): order => { + let side = o.side; + let tol = o.tolerance; + let to_token = parse_token(o.swap.to); + let from_token = parse_token(o.swap.from.token); + let amount = o.swap.from.amount; + + return { + side: side, + tolerance: tol, + swap: { + to: to_token, + from: { + token: from_token, + amount: amount, + }, + }, + }; +}; diff --git a/batcher-bot/liquidity/tsconfig.json b/batcher-bot/liquidity/tsconfig.json new file mode 100644 index 00000000..a48a25eb --- /dev/null +++ b/batcher-bot/liquidity/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "target": "es6", + "module": "commonjs", + "lib": ["es2020", "dom"], + "declaration": true, + "outDir": "./dist", + "rootDir": "./src", + "strict": false, + "types": ["node"], + "esModuleInterop": true, + "inlineSourceMap": true, + "inlineSources": true, + "moduleResolution": "nodenext" + } +} diff --git a/batcher-bot/notifications/flake.lock b/batcher-bot/notifications/flake.lock deleted file mode 100644 index e9efdd8f..00000000 --- a/batcher-bot/notifications/flake.lock +++ /dev/null @@ -1,44 +0,0 @@ -{ - "nodes": { - "js2nix": { - "flake": false, - "locked": { - "lastModified": 1680501697, - "narHash": "sha256-Bmv0ERVeb6vjYzy4MuCDgSiz9fSm/Bhg+Xk3AxPisBw=", - "owner": "canva-public", - "repo": "js2nix", - "rev": "d37912f6cc824e7f41bea7a481af1739ca195c8f", - "type": "github" - }, - "original": { - "owner": "canva-public", - "repo": "js2nix", - "type": "github" - } - }, - "nixpkgs": { - "locked": { - "lastModified": 1682566018, - "narHash": "sha256-HPzPRFiy2o/7k7mtnwfM1E6NVZHiFbPdmYCMoIpkHO4=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "8e3b64db39f2aaa14b35ee5376bd6a2e707cadc2", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "root": { - "inputs": { - "js2nix": "js2nix", - "nixpkgs": "nixpkgs" - } - } - }, - "root": "root", - "version": 7 -} diff --git a/batcher-bot/notifications/flake.nix b/batcher-bot/notifications/flake.nix deleted file mode 100644 index 3ea8048e..00000000 --- a/batcher-bot/notifications/flake.nix +++ /dev/null @@ -1,41 +0,0 @@ -{ - inputs.nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable"; - inputs.js2nix = { - url = "github:canva-public/js2nix"; - flake = false; - }; - - outputs = { self, nixpkgs, js2nix }: - let - supportedSystems = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; - forAllSystems = nixpkgs.lib.genAttrs supportedSystems; - pkgs = forAllSystems (system: nixpkgs.legacyPackages.${system}.extend (self: super: { - js2nix = self.callPackage js2nix { }; - })); - in - rec { - packages = forAllSystems (system: { - default = - let - env = pkgs.${system}.js2nix { - package-json = ./package.json; - yarn-lock = ./yarn.lock; - }; - in - pkgs.${system}.buildEnv { - name = "batcher-bot"; - paths = [ - ]; - pathsToLink = [ "/bin" ]; - }; - }); - - devShells = forAllSystems (system: { - default = pkgs.${system}.mkShellNoCC { - packages = with pkgs.${system}; [ - yarn - ]; - }; - }); - }; -} diff --git a/flake.nix b/flake.nix index 2653cac2..bbf8da2e 100644 --- a/flake.nix +++ b/flake.nix @@ -11,8 +11,7 @@ outputs = { self, nixpkgs, flake-utils, nix-filter }@inputs: flake-utils.lib.eachDefaultSystem (system: - let - pkgs = import nixpkgs { inherit system; }; + let pkgs = import nixpkgs { inherit system; }; in { devShells.${system}.default = pkgs.mkShell { name = "batcher"; @@ -48,13 +47,7 @@ name = "batcher"; src = ./.; - buildInputs = with pkgs; - with ocamlPackages; [ - cmake - glibc - nixfmt - ]; - + buildInputs = with pkgs; with ocamlPackages; [ cmake glibc nixfmt ]; buildPhase = '' mkdir -p $out