diff --git a/.env b/.env index 93e6c82ee..6516b6c9c 100644 --- a/.env +++ b/.env @@ -1,3 +1,4 @@ SOROBAN_NETWORK_PASSPHRASE="Standalone Network ; February 2017" SOROBAN_RPC_URL="http://localhost:8000/soroban/rpc" +SOROBAN_ACCOUNT="me" FRIENDBOT_URL="http://localhost:8000/friendbot" diff --git a/package.json b/package.json index 584d37329..f4981c110 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "build:test": "tsc -p ./test/unit/tsconfig.json", "build:browser": "webpack -c config/webpack.config.browser.js", "build:docs": "cross-env NODE_ENV=docs yarn _babel", - "clean": "rm -rf lib/ dist/ coverage/ .nyc_output/ jsdoc/ test/e2e/.soroban test/e2e/contract-*.txt test/e2e/wasms/specs/*.json", + "clean": "rm -rf lib/ dist/ coverage/ .nyc_output/ jsdoc/ test/e2e/.soroban", "docs": "yarn build:docs && jsdoc -c ./config/.jsdoc.json --verbose", "test": "yarn build:test && yarn test:node && yarn test:integration && yarn test:browser", "test:e2e": "./test/e2e/initialize.sh && ava", @@ -138,7 +138,6 @@ "randombytes": "^2.1.0", "sinon": "^17.0.1", "sinon-chai": "^3.7.0", - "stellar-hd-wallet": "^0.0.10", "taffydb": "^2.7.3", "terser-webpack-plugin": "^5.3.10", "ts-node": "^10.9.2", diff --git a/test/e2e/initialize.sh b/test/e2e/initialize.sh index 0d5b7529b..0fff64f5e 100755 --- a/test/e2e/initialize.sh +++ b/test/e2e/initialize.sh @@ -14,9 +14,8 @@ dirname="$(CDPATH= cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" echo "###################### Initializing e2e tests ########################" -soroban="$dirname/../../target/bin/soroban" -if [[ -f "$soroban" ]]; then - echo "Using soroban binary from ./target/bin" +if [[ -f "$dirname/../../target/bin/soroban" ]]; then + echo "Tests will use soroban binary from ./target/bin" else echo "Building pinned soroban binary" (cd "$dirname/../.." && cargo install_soroban) @@ -34,68 +33,4 @@ if [[ "$NETWORK_STATUS" != "healthy" ]]; then exit 1 fi -# Print command before executing, from https://stackoverflow.com/a/23342259/249801 -# Discussion: https://github.com/stellar/soroban-tools/pull/1034#pullrequestreview-1690667116 -exe() { echo"${@/eval/}" ; "$@" ; } - -function fund_all() { - exe eval "$soroban keys generate root" - exe eval "$soroban keys generate alice" - exe eval "$soroban keys generate bob" -} -function install() { - exe eval "($soroban contract install --source root --wasm $dirname/$1 --ignore-checks) > $dirname/$2" -} -function deploy() { - exe eval "($soroban contract deploy --source root --wasm-hash $(cat $dirname/$1) --ignore-checks) > $dirname/$2" -} -function deploy_all() { - install wasms/test_custom_types.wasm contract-hash-custom-types.txt - install wasms/test_hello_world.wasm contract-hash-hello-world.txt - install wasms/test_swap.wasm contract-hash-swap.txt - install wasms/test_token.wasm contract-hash-token.txt -} -function initialize() { - exe eval "$soroban contract invoke --source root --id $(cat $dirname/$1) -- initialize --admin $($soroban keys address root) --decimal 0 --name 'Token $2' --symbol '$2'" -} -function initialize_all() { - initialize contract-id-token-a.txt A - initialize contract-id-token-b.txt B -} -function generate_spec() { - exe eval "$soroban contract inspect --wasm $dirname/wasms/$1.wasm --output xdr-base64-array > $dirname/wasms/specs/$1.json" -} -function generate_spec_all() { - generate_spec test_custom_types - generate_spec test_hello_world - generate_spec test_swap - generate_spec test_token -} -function mint() { - exe eval "$soroban contract invoke --source root --id $(cat $dirname/$1) -- mint --amount 2000000 --to $($soroban keys address $2)" -} -function mint_all() { - mint contract-id-token-a.txt alice - mint contract-id-token-b.txt bob -} -function check_specs() { - ls -l $dirname/wasms/specs/*.json 2> /dev/null | wc -l | xargs -} -function check_balance() { - ls -l $dirname/contract-id-*.txt 2> /dev/null | wc -l | xargs - if [ $? -eq 0 ]; then - return 0 - fi - $soroban contract invoke --id $(cat $dirname/contract-id-token-$1.txt) -- balance --id $($soroban keys address $2) | xargs -} - -if [ $(check_specs) == 4 ]; then - echo "Skipping initialization" - echo " specs generated: $(check_specs)" - echo "To re-initialize, delete generated files with 'yarn clean'" - exit 0 -fi - -fund_all -deploy_all -generate_spec_all +soroban keys generate $SOROBAN_ACCOUNT diff --git a/test/e2e/src/test-swap.js b/test/e2e/src/test-swap.js index 416fa76d5..97731e5b6 100644 --- a/test/e2e/src/test-swap.js +++ b/test/e2e/src/test-swap.js @@ -1,32 +1,42 @@ const test = require('ava') -const { SorobanRpc } = require('../../..') -const { clientFor, alice, bob, root } = require('./util') +const { Keypair, SorobanRpc } = require('../../..') +const { clientFor } = require('./util') + +const root = Keypair.random() +const alice = Keypair.random() +const bob = Keypair.random() const amountAToSwap = 2n const amountBToSwap = 1n -const alicePk = alice.keypair.publicKey() -const bobPk = bob.keypair.publicKey() +const alicePk = alice.publicKey() +const bobPk = bob.publicKey() test.before(async t => { - const { client: tokenA, contractId: tokenAId } = await clientFor('token', { caller: root.keypair }) - const { client: tokenB, contractId: tokenBId } = await clientFor('token', { caller: root.keypair }) - const { client: swapContractAsRoot, contractId: swapId } = await clientFor('swap', { caller: root.keypair }) - + const { client: tokenA, contractId: tokenAId } = await clientFor('token', { keypair: root }) + const { client: tokenB, contractId: tokenBId } = await clientFor('token', { keypair: root }) + const { client: swapContractAsRoot, contractId: swapId } = await clientFor('swap', { keypair: root }) await ( - await tokenA.initialize({ admin: root.keypair.publicKey(), decimal: 0, name: 'Token A', symbol: 'A' }) + await tokenA.initialize({ admin: root.publicKey(), decimal: 0, name: 'Token A', symbol: 'A' }) ).signAndSend() await ( - await tokenA.mint({ amount: 2000000n, to: alice.keypair.publicKey() }) + await tokenA.mint({ amount: 2000000n, to: alicePk }) ).signAndSend() await ( - await tokenB.initialize({ admin: root.keypair.publicKey(), decimal: 0, name: 'Token B', symbol: 'B' }) + await tokenB.initialize({ admin: root.publicKey(), decimal: 0, name: 'Token B', symbol: 'B' }) ).signAndSend() await ( - await tokenB.mint({ amount: 2000000n, to: bob.keypair.publicKey() }) + await tokenB.mint({ amount: 2000000n, to: bobPk }) ).signAndSend() - t.context = { swapContractAsRoot, swapId, tokenA, tokenB, tokenAId, tokenBId } // eslint-disable-line no-param-reassign + t.context = { // eslint-disable-line no-param-reassign + swapContractAsRoot, + swapId, + tokenA, + tokenAId, + tokenB, + tokenBId, + } }) test('calling `signAndSend()` too soon throws descriptive error', async t => { @@ -79,7 +89,7 @@ test('alice swaps bob 10 A for 1 B', async t => { // root serializes & sends to alice const jsonFromRoot = tx.toJSON() const { client: clientAlice } = await clientFor('swap', { - caller: alice.keypair, + keypair: alice, contractId: t.context.swapId, }) const txAlice = clientAlice.txFromJSON(jsonFromRoot) @@ -88,7 +98,7 @@ test('alice swaps bob 10 A for 1 B', async t => { // alice serializes & sends to bob const jsonFromAlice = txAlice.toJSON() const { client: clientBob } = await clientFor('swap', { - caller: bob.keypair, + keypair: bob, contractId: t.context.swapId, }) const txBob = clientBob.txFromJSON(jsonFromAlice) @@ -97,7 +107,7 @@ test('alice swaps bob 10 A for 1 B', async t => { // bob serializes & sends back to root const jsonFromBob = txBob.toJSON() const { client: clientRoot } = await clientFor('swap', { - caller: root.keypair, + keypair: root, contractId: t.context.swapId, }) const txRoot = clientRoot.txFromJSON(jsonFromBob) diff --git a/test/e2e/src/util.js b/test/e2e/src/util.js index de5dcd295..660949076 100644 --- a/test/e2e/src/util.js +++ b/test/e2e/src/util.js @@ -1,61 +1,26 @@ const { spawnSync } = require('node:child_process') -const fs = require('node:fs') -const StellarHDWallet = require('stellar-hd-wallet') -const { Address, ContractSpec, Keypair, SorobanRpc } = require('../../..') -const helloWorldXdr = require('../wasms/specs/test_hello_world.json') -const swapXdr = require('../wasms/specs/test_swap.json') -const customTypesXdr = require('../wasms/specs/test_custom_types.json') -const tokenXdr = require('../wasms/specs/test_token.json') +const { ContractSpec, Keypair, SorobanRpc } = require('../../..') const contracts = { customTypes: { - hash: fs.readFileSync(`${__dirname}/../contract-hash-custom-types.txt`, "utf8").trim(), - xdr: customTypesXdr, + hash: spawnSync("./target/bin/soroban", ["contract", "install", "--wasm", `${__dirname}/../wasms/test_custom_types.wasm`], { shell: true, encoding: "utf8" }).stdout.trim(), + xdr: JSON.parse(spawnSync("./target/bin/soroban", ["contract", "inspect", "--wasm", `${__dirname}/../wasms/test_custom_types.wasm`, "--output", "xdr-base64-array"], { shell: true, encoding: "utf8" }).stdout.trim()), }, helloWorld: { - hash: fs.readFileSync(`${__dirname}/../contract-hash-hello-world.txt`, "utf8").trim(), - xdr: helloWorldXdr, + hash: spawnSync("./target/bin/soroban", ["contract", "install", "--wasm", `${__dirname}/../wasms/test_hello_world.wasm`], { shell: true, encoding: "utf8" }).stdout.trim(), + xdr: JSON.parse(spawnSync("./target/bin/soroban", ["contract", "inspect", "--wasm", `${__dirname}/../wasms/test_hello_world.wasm`, "--output", "xdr-base64-array"], { shell: true, encoding: "utf8" }).stdout.trim()), }, swap: { - hash: fs.readFileSync(`${__dirname}/../contract-hash-swap.txt`, "utf8").trim(), - xdr: swapXdr, + hash: spawnSync("./target/bin/soroban", ["contract", "install", "--wasm", `${__dirname}/../wasms/test_swap.wasm`], { shell: true, encoding: "utf8" }).stdout.trim(), + xdr: JSON.parse(spawnSync("./target/bin/soroban", ["contract", "inspect", "--wasm", `${__dirname}/../wasms/test_swap.wasm`, "--output", "xdr-base64-array"], { shell: true, encoding: "utf8" }).stdout.trim()), }, token: { - hash: fs.readFileSync(`${__dirname}/../contract-hash-token.txt`, "utf8").trim(), - xdr: tokenXdr, + hash: spawnSync("./target/bin/soroban", ["contract", "install", "--wasm", `${__dirname}/../wasms/test_token.wasm`], { shell: true, encoding: "utf8" }).stdout.trim(), + xdr: JSON.parse(spawnSync("./target/bin/soroban", ["contract", "inspect", "--wasm", `${__dirname}/../wasms/test_token.wasm`, "--output", "xdr-base64-array"], { shell: true, encoding: "utf8" }).stdout.trim()), }, }; module.exports.contracts = contracts -const rootKeypair = Keypair.fromSecret(spawnSync("./target/bin/soroban", ["keys", "show", "root"], { shell: true, encoding: "utf8" }).stdout.trim()); -const aliceKeypair = Keypair.fromSecret(spawnSync("./target/bin/soroban", ["keys", "show", "alice"], { shell: true, encoding: "utf8" }).stdout.trim()); -const bobKeypair = Keypair.fromSecret(spawnSync("./target/bin/soroban", ["keys", "show", "bob"], { shell: true, encoding: "utf8" }).stdout.trim()); - -const root = { - keypair: rootKeypair, - address: Address.fromString(rootKeypair.publicKey()), -} -module.exports.root = root - -const alice = { - keypair: aliceKeypair, - address: Address.fromString(aliceKeypair.publicKey()), -} -module.exports.alice = alice - -const bob = { - keypair: bobKeypair, - address: Address.fromString(bobKeypair.publicKey()), -} -module.exports.bob = bob - -function generateKeypair() { - const mnemonic = StellarHDWallet.generateMnemonic() - const account = StellarHDWallet.fromMnemonic(mnemonic) - return account.getKeypair(0) -} -module.exports.generateKeypair = generateKeypair - const rpcUrl = process.env.SOROBAN_RPC_URL ?? "http://localhost:8000/soroban/rpc"; module.exports.rpcUrl = rpcUrl const networkPassphrase = process.env.SOROBAN_NETWORK_PASSPHRASE ?? "Standalone Network ; February 2017"; @@ -63,18 +28,16 @@ module.exports.networkPassphrase = networkPassphrase const friendbotUrl = process.env.SOROBAN_FRIENDBOT_URL ?? "http://localhost:8000/friendbot"; module.exports.friendbotUrl = friendbotUrl -module.exports.wallet = new SorobanRpc.ExampleNodeWallet(root.keypair, networkPassphrase) - /** * Generates a ContractClient for the contract with the given name. - * Also generates a new account to use as as the caller of this contract. This + * Also generates a new account to use as as the keypair of this contract. This * account is funded by friendbot. You can pass in an account to re-use the * same account with multiple contract clients. * * By default, will re-deploy the contract every time. Pass in the same * `contractId` again if you want to re-use the a contract instance. */ -async function clientFor(contract, { caller = generateKeypair(), contractId } = {}) { +async function clientFor(contract, { keypair = Keypair.random(), contractId } = {}) { if (!contracts[contract]) { throw new Error( `Contract ${contract} not found. ` + @@ -82,9 +45,9 @@ async function clientFor(contract, { caller = generateKeypair(), contractId } = ) } - const publicKey = caller.publicKey(); + const publicKey = keypair.publicKey(); await fetch(`${friendbotUrl}/friendbot?addr=${publicKey}`) - const wallet = new SorobanRpc.ExampleNodeWallet(caller, networkPassphrase) + const wallet = new SorobanRpc.ExampleNodeWallet(keypair, networkPassphrase) const spec = new ContractSpec(contracts[contract].xdr) @@ -98,7 +61,7 @@ async function clientFor(contract, { caller = generateKeypair(), contractId } = "contract", "deploy", "--source", - caller.secret(), + keypair.secret(), "--wasm-hash", wasmHash, ], { shell: true, encoding: "utf8" }).stdout.trim(); @@ -110,7 +73,7 @@ async function clientFor(contract, { caller = generateKeypair(), contractId } = wallet, }); return { - caller, + keypair, client, contractId, publicKey, diff --git a/test/e2e/wasms/specs/README.md b/test/e2e/wasms/specs/README.md deleted file mode 100644 index accbb3c7a..000000000 --- a/test/e2e/wasms/specs/README.md +++ /dev/null @@ -1,10 +0,0 @@ -Contract Specs, soon to be obsolete -=================================== - -Ok, so if you read the README in the parent directory, you know that we are currently including WASM files in this project because we don't yet have a good way of including the original Rust projects from which those WASM files are generated. - -We also don't yet have a way to fetch the XDR contract spec from deployed contracts, using stellar-sdk. Instead, we need to generate JSON files from the WASM files using the CLI (`soroban contract inspect`; see [initialize.sh](../../initialize.sh)). - -In the future, we can use something like `wasm-walrus-tools` to fetch the XDR contract spec from deployed contracts, and we won't need this directory anymore. - -These JSON files are generated automatically by the `initialize.sh` script, and are not included in the git repository. diff --git a/yarn.lock b/yarn.lock index e0328574b..3e4662328 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2277,11 +2277,6 @@ bcrypt-pbkdf@^1.0.0: dependencies: tweetnacl "^0.14.3" -bignumber.js@^4.0.0: - version "4.1.0" - resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-4.1.0.tgz" - integrity sha512-eJzYkFYy9L4JzXsbymsFn3p54D+llV27oTQ+ziJG7WFRheJcNZilgVXMG0LoZtlQSKBsJdWtLFqOD0u+U0jZKA== - bignumber.js@^9.1.2: version "9.1.2" resolved "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.1.2.tgz" @@ -2292,17 +2287,6 @@ binary-extensions@^2.0.0: resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== -bip39@^2.5.0: - version "2.6.0" - resolved "https://registry.npmjs.org/bip39/-/bip39-2.6.0.tgz" - integrity sha512-RrnQRG2EgEoqO24ea+Q/fftuPUZLmrEM3qNhhGsA3PbaXaCW791LTzPuVyx/VprXQcTbPJ3K3UeTna8ZnVl2sg== - dependencies: - create-hash "^1.1.0" - pbkdf2 "^3.0.9" - randombytes "^2.0.1" - safe-buffer "^5.0.1" - unorm "^1.3.3" - bluebird@^3.7.2: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" @@ -2454,14 +2438,6 @@ buffer-xor@^1.0.3: resolved "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz" integrity sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ== -buffer@^5.1.0: - version "5.7.1" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - buffer@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" @@ -2966,13 +2942,6 @@ cors@~2.8.5: object-assign "^4" vary "^1" -crc@^3.5.0: - version "3.8.0" - resolved "https://registry.npmjs.org/crc/-/crc-3.8.0.tgz" - integrity sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ== - dependencies: - buffer "^5.1.0" - create-ecdh@^4.0.0: version "4.0.4" resolved "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz" @@ -4398,7 +4367,7 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.2.1: +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== @@ -4457,11 +4426,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, i resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@^1.3.5: - version "1.3.8" - resolved "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz" - integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== - internal-slot@^1.0.5: version "1.0.6" resolved "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz" @@ -4888,14 +4852,6 @@ js-tokens@^4.0.0: resolved "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== -js-xdr@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/js-xdr/-/js-xdr-1.3.0.tgz" - integrity sha512-fjLTm2uBtFvWsE3l2J14VjTuuB8vJfeTtYuNS7LiLHDWIX2kt0l1pqq9334F8kODUkKPMuULjEcbGbkFFwhx5g== - dependencies: - lodash "^4.17.5" - long "^2.2.3" - js-yaml@4.1.0, js-yaml@^4.1.0: version "4.1.0" resolved "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz" @@ -5271,7 +5227,7 @@ lodash.merge@^4.6.2: resolved "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz" integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== -lodash@^4.17.11, lodash@^4.17.15, lodash@^4.17.21, lodash@^4.17.5: +lodash@^4.17.15, lodash@^4.17.21: version "4.17.21" resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== @@ -5306,11 +5262,6 @@ log4js@^6.4.1: rfdc "^1.3.0" streamroller "^3.1.5" -long@^2.2.3: - version "2.4.0" - resolved "https://registry.npmjs.org/long/-/long-2.4.0.tgz" - integrity sha512-ijUtjmO/n2A5PaosNG9ZGDsQ3vxJg7ZW8vsY8Kp0f2yIZWhSJvjmegV7t+9RPQKxKrvj8yKGehhS+po14hPLGQ== - loupe@^2.3.6: version "2.3.7" resolved "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz" @@ -5606,11 +5557,6 @@ ms@2.1.3, ms@^2.1.1, ms@^2.1.3: resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== -nan@^2.14.0: - version "2.18.0" - resolved "https://registry.npmjs.org/nan/-/nan-2.18.0.tgz" - integrity sha512-W7tfG7vMOGtD30sHoZSSc/JVYiyDPEyQVso/Zz+/uQd0B0L46gtC+pHha5FFMRpil6fm/AoEcRWyOVi4+E/f8w== - nanoid@3.3.3: version "3.3.3" resolved "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz" @@ -5642,7 +5588,7 @@ nise@^5.1.5: just-extend "^6.2.0" path-to-regexp "^6.2.1" -node-gyp-build@^4.1.0, node-gyp-build@^4.6.0: +node-gyp-build@^4.6.0: version "4.8.0" resolved "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz" integrity sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og== @@ -6100,7 +6046,7 @@ pathval@^1.1.1: resolved "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz" integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== -pbkdf2@^3.0.3, pbkdf2@^3.0.9: +pbkdf2@^3.0.3: version "3.1.2" resolved "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz" integrity sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA== @@ -6806,15 +6752,6 @@ socket.io@^4.4.1: socket.io-adapter "~2.5.2" socket.io-parser "~4.2.4" -sodium-native@^2.3.0: - version "2.4.9" - resolved "https://registry.npmjs.org/sodium-native/-/sodium-native-2.4.9.tgz" - integrity sha512-mbkiyA2clyfwAyOFIzMvsV6ny2KrKEIhFVASJxWfsmgfUEymgLIS2MLHHcGIQMkrcKhPErRaMR5Dzv0EEn+BWg== - dependencies: - ini "^1.3.5" - nan "^2.14.0" - node-gyp-build "^4.1.0" - sodium-native@^4.0.1: version "4.0.5" resolved "https://registry.npmjs.org/sodium-native/-/sodium-native-4.0.5.tgz" @@ -6927,31 +6864,6 @@ statuses@~1.5.0: resolved "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz" integrity sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA== -stellar-base@^0.13.1: - version "0.13.2" - resolved "https://registry.npmjs.org/stellar-base/-/stellar-base-0.13.2.tgz" - integrity sha512-y0GO3L+HWPx4auyR8QiAC2uRqoa23MzJ9BnVzm1Li/0VsC5oWH82K7Nj040o++Q61KLIVhiZyKZNwCLHj1+0zw== - dependencies: - base32.js "^0.1.0" - bignumber.js "^4.0.0" - crc "^3.5.0" - js-xdr "^1.1.1" - lodash "^4.17.11" - sha.js "^2.3.6" - tweetnacl "^1.0.0" - optionalDependencies: - sodium-native "^2.3.0" - -stellar-hd-wallet@^0.0.10: - version "0.0.10" - resolved "https://registry.npmjs.org/stellar-hd-wallet/-/stellar-hd-wallet-0.0.10.tgz" - integrity sha512-rkg3Q394S6A4h1EYWwACz1v8hkU8zkW574THZ0yY96A8aUqifdBPtVYMInyYbq+le5S+K/Q05x/TZzTAPTIivQ== - dependencies: - bip39 "^2.5.0" - create-hmac "^1.1.7" - lodash "^4.17.11" - stellar-base "^0.13.1" - stream-browserify@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" @@ -7346,7 +7258,7 @@ tweetnacl@^0.14.3, tweetnacl@~0.14.0: resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz" integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== -tweetnacl@^1.0.0, tweetnacl@^1.0.3: +tweetnacl@^1.0.3: version "1.0.3" resolved "https://registry.npmjs.org/tweetnacl/-/tweetnacl-1.0.3.tgz" integrity sha512-6rt+RN7aOi1nGMyC4Xa5DdYiukl2UWCbcJft7YhxReBGQD7OAM8Pbxw6YMo4r2diNEA8FEmu32YOn9rhaiE5yw== @@ -7483,6 +7395,7 @@ typedarray@^0.0.6: integrity sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w== "typescript-5.3@npm:typescript@~5.3.0-0", typescript@^5.3.3: + name typescript-5.3 version "5.3.3" resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== @@ -7550,11 +7463,6 @@ universalify@^0.1.0: resolved "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz" integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== -unorm@^1.3.3: - version "1.6.0" - resolved "https://registry.npmjs.org/unorm/-/unorm-1.6.0.tgz" - integrity sha512-b2/KCUlYZUeA7JFUuRJZPUtr4gZvBh7tavtv4fvk4+KV9pfGiR6CQAQAWl49ZpR3ts2dk4FYkP7EIgDJoiOLDA== - unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz"