From 763e8c050e48c6fac51e0fc75d8697a527443b38 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Tue, 20 Sep 2022 17:24:24 +0300 Subject: [PATCH 01/10] EN-13168: added relayed v1 tx builder --- src/errors.ts | 11 ++- src/relayedTransactionV1Builder.spec.ts | 76 ++++++++++++++++++++ src/relayedTransactionV1Builder.ts | 92 +++++++++++++++++++++++++ src/relayedTransactionV2Builder.ts | 4 +- 4 files changed, 180 insertions(+), 3 deletions(-) create mode 100644 src/relayedTransactionV1Builder.spec.ts create mode 100644 src/relayedTransactionV1Builder.ts diff --git a/src/errors.ts b/src/errors.ts index f8c40d75..65a6eb3f 100644 --- a/src/errors.ts +++ b/src/errors.ts @@ -183,7 +183,7 @@ export class ErrTransactionWatcherTimeout extends Err { } /** - * Signals an issue related to waiting for a specific {@link TransactionStatus}. + * Signals an issue related to waiting for a specific transaction status. */ export class ErrExpectedTransactionStatusNotReached extends Err { public constructor() { @@ -303,6 +303,15 @@ export class ErrNotImplemented extends Err { } } +/** + * Signals invalid arguments when using the relayed v1 builder + */ +export class ErrInvalidRelayedV1BuilderArguments extends Err { + public constructor() { + super("invalid arguments for relayed v1 builder"); + } +} + /** * Signals invalid arguments when using the relayed v2 builder */ diff --git a/src/relayedTransactionV1Builder.spec.ts b/src/relayedTransactionV1Builder.spec.ts new file mode 100644 index 00000000..413d451a --- /dev/null +++ b/src/relayedTransactionV1Builder.spec.ts @@ -0,0 +1,76 @@ +import {loadTestWallets, TestWallet} from "./testutils"; +import {assert} from "chai"; +import * as errors from "./errors"; +import {RelayedTransactionV1Builder} from "./relayedTransactionV1Builder"; +import {Transaction} from "./transaction"; +import {Address} from "./address"; +import {TransactionPayload} from "./transactionPayload"; + +describe("test relayed v1 transaction builder", function () { + let alice: TestWallet, bob: TestWallet; + + before(async function () { + ({alice, bob} = await loadTestWallets()); + }); + + it("should throw exception if args were not set", async function () { + const builder = new RelayedTransactionV1Builder(); + assert.throw(() => builder.build(), errors.ErrInvalidRelayedV1BuilderArguments); + + const innerTx = new Transaction({ + nonce: 15, + sender: alice.address, + receiver: Address.fromBech32("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"), + gasLimit: 10, + chainID: "1", + data: new TransactionPayload("getContractConfig"), + }); + builder.setInnerTransaction(innerTx); + assert.throw(() => builder.build(), errors.ErrInvalidRelayedV1BuilderArguments); + + const networkConfig = { + MinGasLimit: 50_000, + GasPerDataByte: 1_500, + GasPriceModifier: 0.01, + ChainID: "T" + }; + builder.setNetworkConfig(networkConfig); + assert.throw(() => builder.build(), errors.ErrInvalidRelayedV1BuilderArguments); + + builder.setRelayerAddress(alice.getAddress()); + assert.doesNotThrow(() => builder.build()); + }); + + it("should compute relayed v1 transaction", async function () { + const networkConfig = { + MinGasLimit: 50_000, + GasPerDataByte: 1_500, + GasPriceModifier: 0.01, + ChainID: "T" + }; + + const innerTx = new Transaction({ + nonce: 198, + sender: bob.address, + receiver: Address.fromBech32("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"), + gasLimit: 60000000, + chainID: networkConfig.ChainID, + data: new TransactionPayload("getContractConfig"), + }); + + await bob.signer.sign(innerTx); + + const builder = new RelayedTransactionV1Builder(); + const relayedTxV1 = builder + .setInnerTransaction(innerTx) + .setNetworkConfig(networkConfig) + .setRelayerAddress(alice.address) + .build(); + + relayedTxV1.setNonce(2627); + await alice.signer.sign(relayedTxV1); + + console.log(relayedTxV1.serializeForSigning(alice.address).toString()); + console.log(relayedTxV1.getSignature().hex()); + }); +}); diff --git a/src/relayedTransactionV1Builder.ts b/src/relayedTransactionV1Builder.ts new file mode 100644 index 00000000..5ec2301a --- /dev/null +++ b/src/relayedTransactionV1Builder.ts @@ -0,0 +1,92 @@ +import {Transaction} from "./transaction"; +import {IAddress} from "./interface"; +import {INetworkConfig} from "./interfaceOfNetwork"; +import {ErrInvalidRelayedV1BuilderArguments} from "./errors"; +import {TransactionPayload} from "./transactionPayload"; +import {ContractFunction, StringValue} from "./smartcontracts"; +import {Address} from "./address"; +import BigNumber from "bignumber.js"; + +export class RelayedTransactionV1Builder { + + innerTransaction: Transaction | undefined; + relayerAddress: IAddress | undefined; + netConfig: INetworkConfig | undefined; + + /** + * Sets the inner transaction to be used. It has to be already signed. + * + * @param {Transaction} transaction The inner transaction to be used + */ + setInnerTransaction(transaction: Transaction): RelayedTransactionV1Builder { + this.innerTransaction = transaction; + return this; + } + + /** + * Sets the network config to be used for building the relayed v2 transaction + * + * @param {INetworkConfig} netConfig The network configuration to be used + */ + setNetworkConfig(netConfig: INetworkConfig): RelayedTransactionV1Builder { + this.netConfig = netConfig; + return this; + } + + setRelayerAddress(relayerAddress: IAddress): RelayedTransactionV1Builder { + this.relayerAddress = relayerAddress; + return this; + } + + /** + * Tries to build the relayed v1 transaction based on the previously set fields + * + * @throws ErrInvalidRelayedV1BuilderArguments + * @return Transaction + */ + build(): Transaction { + if (!this.innerTransaction || !this.netConfig || !this.relayerAddress || !this.innerTransaction.getSignature()) { + throw new ErrInvalidRelayedV1BuilderArguments(); + } + + const serializedTransaction = this.prepareInnerTransaction(); + const payload = TransactionPayload.contractCall() + .setFunction(new ContractFunction("relayedTx")) + .setArgs([ + new StringValue(serializedTransaction), + //new StringValue(serializedTransaction.toString("hex")) + ]) + .build(); + + return new Transaction({ + sender: this.relayerAddress, + receiver: this.innerTransaction.getSender(), + value: 0, + gasLimit: + this.netConfig.MinGasLimit + this.netConfig.GasPerDataByte * payload.length() + this.innerTransaction.getGasLimit().valueOf(), + data: payload, + chainID: this.netConfig.ChainID, + }); + } + + private prepareInnerTransaction() : string { + if (!this.innerTransaction) { + return ""; + } + + const txObject = { + "nonce": this.innerTransaction.getNonce().valueOf(), + "sender": new Address(this.innerTransaction.getSender().bech32()).pubkey().toString("base64"), + "receiver": new Address(this.innerTransaction.getReceiver().bech32()).pubkey().toString("base64"), + "value": new BigNumber(this.innerTransaction.getValue().toString(), 10).toNumber(), + "gasPrice": this.innerTransaction.getGasPrice().valueOf(), + "gasLimit": this.innerTransaction.getGasLimit().valueOf(), + "data": this.innerTransaction.getData().valueOf().toString("base64"), + "signature": Buffer.from(this.innerTransaction.getSignature().hex(), 'hex').toString("base64"), + "chainID": Buffer.from(this.innerTransaction.getChainID().valueOf()).toString("base64"), + "version": this.innerTransaction.getVersion().valueOf(), + }; + + return JSON.stringify(txObject); + } +} diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index 81256c61..1414694b 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -1,8 +1,7 @@ import {Transaction} from "./transaction"; import {TransactionPayload} from "./transactionPayload"; import {AddressValue, BytesValue, ContractFunction, U64Value} from "./smartcontracts"; -import {IAddress, IChainID, IGasLimit, INonce, ITransactionPayload} from "./interface"; -import {ISigner} from "@elrondnetwork/erdjs-walletcore/out/interface"; +import {IGasLimit} from "./interface"; import {INetworkConfig} from "./interfaceOfNetwork"; import {ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments} from "./errors"; @@ -69,6 +68,7 @@ export class RelayedTransactionV2Builder { ]) .build(); + // TODO: fix sender, or don't set it at all return new Transaction({ sender: this.innerTransaction.getSender(), receiver: this.innerTransaction.getSender(), From f0123db94fd6e124d00eca2c2d7606dcdb291c95 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Wed, 21 Sep 2022 16:18:48 +0300 Subject: [PATCH 02/10] EN-13168: minor fixes --- package-lock.json | 582 ++++++++++++------------ src/relayedTransactionV1Builder.ts | 7 +- src/relayedTransactionV2Builder.spec.ts | 19 +- src/relayedTransactionV2Builder.ts | 30 +- 4 files changed, 337 insertions(+), 301 deletions(-) diff --git a/package-lock.json b/package-lock.json index 430b15b4..44c8d1d8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -65,30 +65,30 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", + "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz", + "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==", "dev": true, "dependencies": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.1", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -119,12 +119,12 @@ "dev": true }, "node_modules/@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", "dev": true, "dependencies": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -147,14 +147,14 @@ } }, "node_modules/@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", + "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", "dev": true, "dependencies": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" }, "engines": { @@ -174,13 +174,13 @@ } }, "node_modules/@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -211,9 +211,9 @@ } }, "node_modules/@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", "dev": true, "dependencies": { "@babel/helper-environment-visitor": "^7.18.9", @@ -221,18 +221,18 @@ "@babel/helper-simple-access": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true, "engines": { "node": ">=6.9.0" @@ -262,10 +262,19 @@ "node": ">=6.9.0" } }, + "node_modules/@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true, "engines": { "node": ">=6.9.0" @@ -281,14 +290,14 @@ } }, "node_modules/@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", "dev": true, "dependencies": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" }, "engines": { "node": ">=6.9.0" @@ -309,9 +318,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", "dev": true, "bin": { "parser": "bin/babel-parser.js" @@ -375,33 +384,33 @@ } }, "node_modules/@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "dev": true, "dependencies": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.19.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" }, @@ -410,11 +419,12 @@ } }, "node_modules/@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", "dev": true, "dependencies": { + "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" }, @@ -582,9 +592,9 @@ "dev": true }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.0.3", @@ -1453,9 +1463,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "funding": [ { @@ -1468,10 +1478,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "update-browserslist-db": "^1.0.9" }, "bin": { "browserslist": "cli.js" @@ -1590,9 +1600,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "version": "1.0.30001409", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz", + "integrity": "sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ==", "dev": true, "funding": [ { @@ -2126,9 +2136,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.206", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.206.tgz", - "integrity": "sha512-h+Fadt1gIaQ06JaIiyqPsBjJ08fV5Q7md+V8bUvQW/9OvXfL2LRICTz2EcnnCP7QzrFTS6/27MRV6Bl9Yn97zA==", + "version": "1.4.256", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", + "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", "dev": true }, "node_modules/elliptic": { @@ -2168,16 +2178,16 @@ } }, "node_modules/es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", "dev": true, "dependencies": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.2", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", @@ -2189,9 +2199,9 @@ "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", @@ -2222,9 +2232,9 @@ } }, "node_modules/es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -2268,27 +2278,27 @@ "dev": true }, "node_modules/es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha512-7S8YXIcUfPMOr3rqJBVMePAbRsD1nWeSMQ86K/lDI76S3WKXz+KWILvTIPbTroubOkZTGh+b+7/xIIphZXNYbA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, "dependencies": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" } }, - "node_modules/es6-set/node_modules/es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==", - "dev": true, - "dependencies": { - "d": "1", - "es5-ext": "~0.10.14" - } + "node_modules/es6-set/node_modules/type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true }, "node_modules/es6-symbol": { "version": "3.1.3", @@ -2510,18 +2520,18 @@ } }, "node_modules/ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "dependencies": { - "type": "^2.5.0" + "type": "^2.7.2" } }, "node_modules/ext/node_modules/type": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.1.tgz", - "integrity": "sha512-OvgH5rB0XM+iDZGQ1Eg/o7IZn0XYJFVrN/9FQ4OWIYILyJJgVP2s1hLTOFn6UOZoDUI/HctGa0PFlE2n2HW3NQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true }, "node_modules/falafel": { @@ -2593,9 +2603,9 @@ } }, "node_modules/follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true, "funding": [ { @@ -2727,9 +2737,9 @@ } }, "node_modules/get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "dependencies": { "function-bind": "^1.1.1", @@ -3119,9 +3129,9 @@ "dev": true }, "node_modules/is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", "dev": true, "engines": { "node": ">= 0.4" @@ -3131,9 +3141,9 @@ } }, "node_modules/is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "dependencies": { "has": "^1.0.3" @@ -3436,9 +3446,9 @@ } }, "node_modules/jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "node_modules/jsonparse": { @@ -3668,9 +3678,9 @@ "dev": true }, "node_modules/marked": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", - "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz", + "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==", "dev": true, "bin": { "marked": "bin/marked.js" @@ -4218,14 +4228,14 @@ } }, "node_modules/object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" }, "engines": { @@ -4517,9 +4527,9 @@ } }, "node_modules/queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, "node_modules/randombytes": { @@ -5539,9 +5549,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", + "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", "dev": true, "funding": [ { @@ -5857,27 +5867,27 @@ } }, "@babel/compat-data": { - "version": "7.18.8", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.18.8.tgz", - "integrity": "sha512-HSmX4WZPPK3FUxYp7g2T6EyO8j96HlZJlxmKPSh6KAcqwyDrfx7hKjXpAW/0FhFfTJsR0Yt4lAjLI2coMptIHQ==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.19.1.tgz", + "integrity": "sha512-72a9ghR0gnESIa7jBN53U32FOVCEoztyIlKaNoU05zRhEecduGK9L9c3ww7Mp06JiR+0ls0GBPFJQwwtjn9ksg==", "dev": true }, "@babel/core": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.18.9.tgz", - "integrity": "sha512-1LIb1eL8APMy91/IMW+31ckrfBM4yCoLaVzoDhZUKSM4cu1L1nIidyxkCgzPAgrC5WEz36IPEr/eSeSF9pIn+g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.19.1.tgz", + "integrity": "sha512-1H8VgqXme4UXCRv7/Wa1bq7RVymKOzC7znjyFM8KiEzwFqcKUKYNoQef4GhdklgNvoBXyW4gYhuBNCM5o1zImw==", "dev": true, "requires": { "@ampproject/remapping": "^2.1.0", "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", - "@babel/helper-compilation-targets": "^7.18.9", - "@babel/helper-module-transforms": "^7.18.9", - "@babel/helpers": "^7.18.9", - "@babel/parser": "^7.18.9", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/generator": "^7.19.0", + "@babel/helper-compilation-targets": "^7.19.1", + "@babel/helper-module-transforms": "^7.19.0", + "@babel/helpers": "^7.19.0", + "@babel/parser": "^7.19.1", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.1", + "@babel/types": "^7.19.0", "convert-source-map": "^1.7.0", "debug": "^4.1.0", "gensync": "^1.0.0-beta.2", @@ -5903,12 +5913,12 @@ } }, "@babel/generator": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.18.9.tgz", - "integrity": "sha512-wt5Naw6lJrL1/SGkipMiFxJjtyczUWTP38deiP1PO60HsBjDeKk08CGC3S8iVuvf0FmTdgKwU1KIXzSKL1G0Ug==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.19.0.tgz", + "integrity": "sha512-S1ahxf1gZ2dpoiFgA+ohK9DIpz50bJ0CWs7Zlzb54Z4sG8qmdIrGrVqmy1sAtTVRb+9CU6U8VqT9L0Zj7hxHVg==", "dev": true, "requires": { - "@babel/types": "^7.18.9", + "@babel/types": "^7.19.0", "@jridgewell/gen-mapping": "^0.3.2", "jsesc": "^2.5.1" }, @@ -5927,14 +5937,14 @@ } }, "@babel/helper-compilation-targets": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.18.9.tgz", - "integrity": "sha512-tzLCyVmqUiFlcFoAPLA/gL9TeYrF61VLNtb+hvkuVaB5SUjW7jcfrglBIX1vUIoT7CLP3bBlIMeyEsIl2eFQNg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.19.1.tgz", + "integrity": "sha512-LlLkkqhCMyz2lkQPvJNdIYU7O5YjWRgC2R4omjCTpZd8u8KMQzZvX4qce+/BluN1rcQiV7BoGUpmQ0LeHerbhg==", "dev": true, "requires": { - "@babel/compat-data": "^7.18.8", + "@babel/compat-data": "^7.19.1", "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.20.2", + "browserslist": "^4.21.3", "semver": "^6.3.0" } }, @@ -5945,13 +5955,13 @@ "dev": true }, "@babel/helper-function-name": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.18.9.tgz", - "integrity": "sha512-fJgWlZt7nxGksJS9a0XdSaI4XvpExnNIgRP+rVefWh5U7BL8pPuir6SJUmFKRfjWQ51OtWSzwOxhaH/EBWWc0A==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.19.0.tgz", + "integrity": "sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/types": "^7.19.0" } }, "@babel/helper-hoist-variables": { @@ -5973,9 +5983,9 @@ } }, "@babel/helper-module-transforms": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.18.9.tgz", - "integrity": "sha512-KYNqY0ICwfv19b31XzvmI/mfcylOzbLtowkw+mfvGPAQ3kfCnMLYbED3YecL5tPd8nAYFQFAd6JHp2LxZk/J1g==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz", + "integrity": "sha512-3HBZ377Fe14RbLIA+ac3sY4PTgpxHVkFrESaWhoI5PuyXPBBX8+C34qblV9G89ZtycGJCmCI/Ut+VUDK4bltNQ==", "dev": true, "requires": { "@babel/helper-environment-visitor": "^7.18.9", @@ -5983,15 +5993,15 @@ "@babel/helper-simple-access": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", "@babel/helper-validator-identifier": "^7.18.6", - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/helper-plugin-utils": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.18.9.tgz", - "integrity": "sha512-aBXPT3bmtLryXaoJLyYPXPlSD4p1ld9aYeR+sJNOZjJJGiOpb+fKfh3NkcCu7J54nUJwCERPBExCCpyCOHnu/w==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.19.0.tgz", + "integrity": "sha512-40Ryx7I8mT+0gaNxm8JGTZFUITNqdLAgdg0hXzeVZxVD6nFsdhQvip6v8dqkRHzsz1VFpFAaOCHNn0vKBL7Czw==", "dev": true }, "@babel/helper-simple-access": { @@ -6012,10 +6022,16 @@ "@babel/types": "^7.18.6" } }, + "@babel/helper-string-parser": { + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.18.10.tgz", + "integrity": "sha512-XtIfWmeNY3i4t7t4D2t02q50HvqHybPqW2ki1kosnvWCwuCMeo81Jf0gwr85jy/neUdg5XDdeFE/80DXiO+njw==", + "dev": true + }, "@babel/helper-validator-identifier": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.18.6.tgz", - "integrity": "sha512-MmetCkz9ej86nJQV+sFCxoGGrUbU3q02kgLciwkrt9QqEB7cP39oKEY0PakknEO0Gu20SskMRi+AYZ3b1TpN9g==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", "dev": true }, "@babel/helper-validator-option": { @@ -6025,14 +6041,14 @@ "dev": true }, "@babel/helpers": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.18.9.tgz", - "integrity": "sha512-Jf5a+rbrLoR4eNdUmnFu8cN5eNJT6qdTdOg5IHIzq87WwyRw9PwguLFOWYgktN/60IP4fgDUawJvs7PjQIzELQ==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.19.0.tgz", + "integrity": "sha512-DRBCKGwIEdqY3+rPJgG/dKfQy9+08rHIAJx8q2p+HSWP87s2HCrQmaAMMyMll2kIXKCW0cO1RdQskx15Xakftg==", "dev": true, "requires": { - "@babel/template": "^7.18.6", - "@babel/traverse": "^7.18.9", - "@babel/types": "^7.18.9" + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.19.0", + "@babel/types": "^7.19.0" } }, "@babel/highlight": { @@ -6047,9 +6063,9 @@ } }, "@babel/parser": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.18.9.tgz", - "integrity": "sha512-9uJveS9eY9DJ0t64YbIBZICtJy8a5QrDEVdiLCG97fVLpDTpGX7t8mMSb6OWw6Lrnjqj4O8zwjELX3dhoMgiBg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.19.1.tgz", + "integrity": "sha512-h7RCSorm1DdTVGJf3P2Mhj3kdnkmF/EiysUkzS2TdgAYqyjFdMQJbVuXOBej2SBJaXan/lIVtT6KkGbyyq753A==", "dev": true }, "@babel/plugin-syntax-async-generators": { @@ -6092,40 +6108,41 @@ } }, "@babel/template": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.6.tgz", - "integrity": "sha512-JoDWzPe+wgBsTTgdnIma3iHNFC7YVJoPssVBDjiHfNlyt4YcunDtcDOUmfVDfCK5MfdsaIoX9PkijPhjH3nYUw==", + "version": "7.18.10", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.18.10.tgz", + "integrity": "sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.18.6", - "@babel/types": "^7.18.6" + "@babel/parser": "^7.18.10", + "@babel/types": "^7.18.10" } }, "@babel/traverse": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.18.9.tgz", - "integrity": "sha512-LcPAnujXGwBgv3/WHv01pHtb2tihcyW1XuL9wd7jqh1Z8AQkTd+QVjMrMijrln0T7ED3UXLIy36P9Ao7W75rYg==", + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.19.1.tgz", + "integrity": "sha512-0j/ZfZMxKukDaag2PtOPDbwuELqIar6lLskVPPJDjXMXjfLb1Obo/1yjxIGqqAJrmfaTIY3z2wFLAQ7qSkLsuA==", "dev": true, "requires": { "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.18.9", + "@babel/generator": "^7.19.0", "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.18.9", + "@babel/helper-function-name": "^7.19.0", "@babel/helper-hoist-variables": "^7.18.6", "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.18.9", - "@babel/types": "^7.18.9", + "@babel/parser": "^7.19.1", + "@babel/types": "^7.19.0", "debug": "^4.1.0", "globals": "^11.1.0" } }, "@babel/types": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.18.9.tgz", - "integrity": "sha512-WwMLAg2MvJmt/rKEVQBBhIVffMmnilX4oe0sRe7iPOHIGsqpruFHHdrfj4O1CMMtgMtCU4oPafZjDPCRgO57Wg==", + "version": "7.19.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.19.0.tgz", + "integrity": "sha512-YuGopBq3ke25BVSiS6fgF49Ul9gH1x70Bcr6bqRLjWCkcX8Hre1/5+z+IiWOIerRMSSEfGZVB9z9kyq7wVs9YA==", "dev": true, "requires": { + "@babel/helper-string-parser": "^7.18.10", "@babel/helper-validator-identifier": "^7.18.6", "to-fast-properties": "^2.0.0" } @@ -6279,9 +6296,9 @@ "dev": true }, "@jridgewell/trace-mapping": { - "version": "0.3.14", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.14.tgz", - "integrity": "sha512-bJWEfQ9lPTvm3SneWwRFVLzrh6nhjwqw7TUFFBEMzwvg7t7PCDenf2lDwqo4NQXzdpgBXyFgDWnQA+2vkruksQ==", + "version": "0.3.15", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.15.tgz", + "integrity": "sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==", "dev": true, "requires": { "@jridgewell/resolve-uri": "^3.0.3", @@ -7069,15 +7086,15 @@ } }, "browserslist": { - "version": "4.21.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", - "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "version": "4.21.4", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.4.tgz", + "integrity": "sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001370", - "electron-to-chromium": "^1.4.202", + "caniuse-lite": "^1.0.30001400", + "electron-to-chromium": "^1.4.251", "node-releases": "^2.0.6", - "update-browserslist-db": "^1.0.5" + "update-browserslist-db": "^1.0.9" } }, "buffer": { @@ -7161,9 +7178,9 @@ "dev": true }, "caniuse-lite": { - "version": "1.0.30001373", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001373.tgz", - "integrity": "sha512-pJYArGHrPp3TUqQzFYRmP/lwJlj8RCbVe3Gd3eJQkAV8SAC6b19XS9BjMvRdvaS8RMkaTN8ZhoHP6S1y8zzwEQ==", + "version": "1.0.30001409", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001409.tgz", + "integrity": "sha512-V0mnJ5dwarmhYv8/MzhJ//aW68UpvnQBXv8lJ2QUsvn2pHcmAuNtu8hQEDz37XnA1iE+lRR9CIfGWWpgJ5QedQ==", "dev": true }, "chai": { @@ -7619,9 +7636,9 @@ } }, "electron-to-chromium": { - "version": "1.4.206", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.206.tgz", - "integrity": "sha512-h+Fadt1gIaQ06JaIiyqPsBjJ08fV5Q7md+V8bUvQW/9OvXfL2LRICTz2EcnnCP7QzrFTS6/27MRV6Bl9Yn97zA==", + "version": "1.4.256", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", + "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", "dev": true }, "elliptic": { @@ -7663,16 +7680,16 @@ } }, "es-abstract": { - "version": "1.20.1", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.1.tgz", - "integrity": "sha512-WEm2oBhfoI2sImeM4OF2zE2V3BYdSF+KnSi9Sidz51fQHd7+JuF8Xgcj9/0o+OWeIeIS/MiuNnlruQrJf16GQA==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.20.2.tgz", + "integrity": "sha512-XxXQuVNrySBNlEkTYJoDNFe5+s2yIOpzq80sUHEdPdQr0S5nTLz4ZPPPswNIpKseDDUS5yghX1gfLIHQZ1iNuQ==", "dev": true, "requires": { "call-bind": "^1.0.2", "es-to-primitive": "^1.2.1", "function-bind": "^1.1.1", "function.prototype.name": "^1.1.5", - "get-intrinsic": "^1.1.1", + "get-intrinsic": "^1.1.2", "get-symbol-description": "^1.0.0", "has": "^1.0.3", "has-property-descriptors": "^1.0.0", @@ -7684,9 +7701,9 @@ "is-shared-array-buffer": "^1.0.2", "is-string": "^1.0.7", "is-weakref": "^1.0.2", - "object-inspect": "^1.12.0", + "object-inspect": "^1.12.2", "object-keys": "^1.1.1", - "object.assign": "^4.1.2", + "object.assign": "^4.1.4", "regexp.prototype.flags": "^1.4.3", "string.prototype.trimend": "^1.0.5", "string.prototype.trimstart": "^1.0.5", @@ -7705,9 +7722,9 @@ } }, "es5-ext": { - "version": "0.10.61", - "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.61.tgz", - "integrity": "sha512-yFhIqQAzu2Ca2I4SE2Au3rxVfmohU9Y7wqGR+s7+H7krk26NXhIRAZDgqd6xqjCEFUomDEA3/Bo/7fKmIkW1kA==", + "version": "0.10.62", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.62.tgz", + "integrity": "sha512-BHLqn0klhEpnOKSrzn/Xsz2UIW8j+cGmo9JLzr8BiUapV8hPL9+FliFqjwr9ngW7jWdnxv6eO+/LqyhJVqgrjA==", "dev": true, "requires": { "es6-iterator": "^2.0.3", @@ -7747,27 +7764,24 @@ "dev": true }, "es6-set": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", - "integrity": "sha512-7S8YXIcUfPMOr3rqJBVMePAbRsD1nWeSMQ86K/lDI76S3WKXz+KWILvTIPbTroubOkZTGh+b+7/xIIphZXNYbA==", + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.6.tgz", + "integrity": "sha512-TE3LgGLDIBX332jq3ypv6bcOpkLO0AslAQo7p2VqX/1N46YNsvIWgvjojjSEnWEGWMhr1qUbYeTSir5J6mFHOw==", "dev": true, "requires": { - "d": "1", - "es5-ext": "~0.10.14", - "es6-iterator": "~2.0.1", - "es6-symbol": "3.1.1", - "event-emitter": "~0.3.5" + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "es6-iterator": "~2.0.3", + "es6-symbol": "^3.1.3", + "event-emitter": "^0.3.5", + "type": "^2.7.2" }, "dependencies": { - "es6-symbol": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", - "integrity": "sha512-exfuQY8UGtn/N+gL1iKkH8fpNd5sJ760nJq6mmZAHldfxMD5kX07lbQuYlspoXsuknXNv9Fb7y2GsPOnQIbxHg==", - "dev": true, - "requires": { - "d": "1", - "es5-ext": "~0.10.14" - } + "type": { + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", + "dev": true } } }, @@ -7952,18 +7966,18 @@ } }, "ext": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/ext/-/ext-1.6.0.tgz", - "integrity": "sha512-sdBImtzkq2HpkdRLtlLWDa6w4DX22ijZLKx8BMPUuKe1c5lbN6xwQDQCxSfxBQnHZ13ls/FH0MQZx/q/gr6FQg==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", "dev": true, "requires": { - "type": "^2.5.0" + "type": "^2.7.2" }, "dependencies": { "type": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/type/-/type-2.6.1.tgz", - "integrity": "sha512-OvgH5rB0XM+iDZGQ1Eg/o7IZn0XYJFVrN/9FQ4OWIYILyJJgVP2s1hLTOFn6UOZoDUI/HctGa0PFlE2n2HW3NQ==", + "version": "2.7.2", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.2.tgz", + "integrity": "sha512-dzlvlNlt6AXU7EBSfpAscydQ7gXB+pPGsPnfJnZpiNJBDj7IaJzQlBZYGdEi4R9HmPdBv2XmWJ6YUtoTa7lmCw==", "dev": true } } @@ -8024,9 +8038,9 @@ "dev": true }, "follow-redirects": { - "version": "1.15.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.1.tgz", - "integrity": "sha512-yLAMQs+k0b2m7cVxpS1VKJVvoz7SS9Td1zss3XRwXj+ZDH00RJgnuLx7E44wx02kQLrdM3aOOy+FpzS7+8OizA==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.2.tgz", + "integrity": "sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==", "dev": true }, "for-each": { @@ -8119,9 +8133,9 @@ "dev": true }, "get-intrinsic": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.2.tgz", - "integrity": "sha512-Jfm3OyCxHh9DJyc28qGk+JmfkpO41A4XkneDSujN9MDXrm4oDKdHvndhZ2dN94+ERNfkYJWDclW6k2L/ZGHjXA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", "dev": true, "requires": { "function-bind": "^1.1.1", @@ -8411,15 +8425,15 @@ "dev": true }, "is-callable": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.4.tgz", - "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.6.tgz", + "integrity": "sha512-krO72EO2NptOGAX2KYyqbP9vYMlNAXdB53rq6f8LXY6RY7JdSR/3BD6wLUlPHSAesmY9vstNrjvqGaCiRK/91Q==", "dev": true }, "is-core-module": { - "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.10.0.tgz", + "integrity": "sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==", "dev": true, "requires": { "has": "^1.0.3" @@ -8623,9 +8637,9 @@ "dev": true }, "jsonc-parser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.1.0.tgz", - "integrity": "sha512-DRf0QjnNeCUds3xTjKlQQ3DpJD51GvDjJfnxUVWg6PZTo2otSm+slzNAxU/35hF8/oJIKoG9slq30JYOsF2azg==", + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", + "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", "dev": true }, "jsonparse": { @@ -8804,9 +8818,9 @@ "dev": true }, "marked": { - "version": "4.0.18", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.18.tgz", - "integrity": "sha512-wbLDJ7Zh0sqA0Vdg6aqlbT+yPxqLblpAZh1mK2+AO2twQkPywvvqQNfEPVwSSRjZ7dZcdeVBIAgiO7MMp3Dszw==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.1.0.tgz", + "integrity": "sha512-+Z6KDjSPa6/723PQYyc1axYZpYYpDnECDaU6hkaf5gqBieBkMKYReL5hteF2QizhlMbgbo8umXl/clZ67+GlsA==", "dev": true }, "md5.js": { @@ -9241,14 +9255,14 @@ "dev": true }, "object.assign": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", - "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3", - "has-symbols": "^1.0.1", + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", "object-keys": "^1.1.1" } }, @@ -9479,9 +9493,9 @@ "dev": true }, "queue-tick": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.0.tgz", - "integrity": "sha512-ULWhjjE8BmiICGn3G8+1L9wFpERNxkf8ysxkAer4+TFdRefDaXOCV5m92aMB9FtBVmn/8sETXLXY6BfW7hyaWQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", + "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", "dev": true }, "randombytes": { @@ -10312,9 +10326,9 @@ } }, "update-browserslist-db": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", - "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.9.tgz", + "integrity": "sha512-/xsqn21EGVdXI3EXSum1Yckj3ZVZugqyOZQ/CxYPBD/R+ko9NSUScf8tFF4dOKY+2pvSSJA/S+5B8s4Zr4kyvg==", "dev": true, "requires": { "escalade": "^3.1.1", diff --git a/src/relayedTransactionV1Builder.ts b/src/relayedTransactionV1Builder.ts index 5ec2301a..8f0dc3a7 100644 --- a/src/relayedTransactionV1Builder.ts +++ b/src/relayedTransactionV1Builder.ts @@ -33,6 +33,11 @@ export class RelayedTransactionV1Builder { return this; } + /** + * Sets the address of the relayer (the one that will actually pay the fee + * + * @param relayerAddress + */ setRelayerAddress(relayerAddress: IAddress): RelayedTransactionV1Builder { this.relayerAddress = relayerAddress; return this; @@ -69,7 +74,7 @@ export class RelayedTransactionV1Builder { }); } - private prepareInnerTransaction() : string { + private prepareInnerTransaction(): string { if (!this.innerTransaction) { return ""; } diff --git a/src/relayedTransactionV2Builder.spec.ts b/src/relayedTransactionV2Builder.spec.ts index 7c4d2043..22a4ee16 100644 --- a/src/relayedTransactionV2Builder.spec.ts +++ b/src/relayedTransactionV2Builder.spec.ts @@ -1,9 +1,9 @@ -import { loadTestWallets, TestWallet } from "./testutils"; -import { RelayedTransactionV2Builder } from "./relayedTransactionV2Builder"; -import { Address } from "./address"; -import { TransactionPayload } from "./transactionPayload"; -import { assert } from "chai"; -import { Transaction } from "./transaction"; +import {loadTestWallets, TestWallet} from "./testutils"; +import {RelayedTransactionV2Builder} from "./relayedTransactionV2Builder"; +import {Address} from "./address"; +import {TransactionPayload} from "./transactionPayload"; +import {assert} from "chai"; +import {Transaction} from "./transaction"; import * as errors from "./errors"; describe("test relayed v2 transaction builder", function () { @@ -39,7 +39,11 @@ describe("test relayed v2 transaction builder", function () { builder = builder.setNetworkConfig(networkConfig).setInnerTransactionGasLimit(10).setInnerTransaction(innerTx); assert.throw(() => builder.build(), errors.ErrGasLimitShouldBe0ForInnerTransaction); - innerTx.setGasLimit({ valueOf: function() { return 10; } }); + innerTx.setGasLimit({ + valueOf: function () { + return 10; + } + }); builder = builder.setNetworkConfig(networkConfig).setInnerTransactionGasLimit(10).setInnerTransaction(innerTx); assert.throw(() => builder.build(), errors.ErrGasLimitShouldBe0ForInnerTransaction); }); @@ -68,6 +72,7 @@ describe("test relayed v2 transaction builder", function () { .setInnerTransaction(innerTx) .setInnerTransactionGasLimit(60_000_000) .setNetworkConfig(networkConfig) + .setRelayerAddress(alice.getAddress()) .build(); await alice.signer.sign(relayedTxV2); diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index 1414694b..dbdd45e4 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -1,7 +1,7 @@ import {Transaction} from "./transaction"; import {TransactionPayload} from "./transactionPayload"; import {AddressValue, BytesValue, ContractFunction, U64Value} from "./smartcontracts"; -import {IGasLimit} from "./interface"; +import {IAddress, IGasLimit} from "./interface"; import {INetworkConfig} from "./interfaceOfNetwork"; import {ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments} from "./errors"; @@ -9,6 +9,7 @@ export class RelayedTransactionV2Builder { innerTransaction: Transaction | undefined; innerTransactionGasLimit: IGasLimit | undefined; + relayerAddress: IAddress | undefined; netConfig: INetworkConfig | undefined; /** @@ -17,7 +18,7 @@ export class RelayedTransactionV2Builder { * * @param {Transaction} transaction The inner transaction to be used */ - setInnerTransaction(transaction: Transaction) : RelayedTransactionV2Builder { + setInnerTransaction(transaction: Transaction): RelayedTransactionV2Builder { this.innerTransaction = transaction; return this; } @@ -28,7 +29,7 @@ export class RelayedTransactionV2Builder { * @param {IGasLimit} gasLimit The gas limit to be used. The inner transaction needs to have the gas limit set to 0, * so this field will specify the gas to be used for the SC call of the inner transaction */ - setInnerTransactionGasLimit(gasLimit: IGasLimit) : RelayedTransactionV2Builder { + setInnerTransactionGasLimit(gasLimit: IGasLimit): RelayedTransactionV2Builder { this.innerTransactionGasLimit = gasLimit; return this; } @@ -38,23 +39,34 @@ export class RelayedTransactionV2Builder { * * @param {INetworkConfig} netConfig The network configuration to be used */ - setNetworkConfig(netConfig: INetworkConfig) : RelayedTransactionV2Builder { + setNetworkConfig(netConfig: INetworkConfig): RelayedTransactionV2Builder { this.netConfig = netConfig; return this; } /** - * Tries to build the relayed v2 transaction based on the previously set fields + * Sets the address of the relayer (the one that will actually pay the fee + * + * @param relayerAddress + */ + setRelayerAddress(relayerAddress: IAddress): RelayedTransactionV2Builder { + this.relayerAddress = relayerAddress; + return this; + } + + /** + * Tries to build the relayed v2 transaction based on the previously set fields. + * It returns a transaction that isn't signed * * @throws ErrInvalidRelayedV2BuilderArguments * @throws ErrGasLimitShouldBe0ForInnerTransaction * @return Transaction */ - build() : Transaction { - if(!this.innerTransaction || !this.innerTransactionGasLimit || !this.netConfig || !this.innerTransaction.getSignature()) { + build(): Transaction { + if (!this.innerTransaction || !this.innerTransactionGasLimit || !this.relayerAddress || !this.netConfig || !this.innerTransaction.getSignature()) { throw new ErrInvalidRelayedV2BuilderArguments(); } - if(this.innerTransaction.getGasLimit() != 0){ + if (this.innerTransaction.getGasLimit() != 0) { throw new ErrGasLimitShouldBe0ForInnerTransaction(); } @@ -70,7 +82,7 @@ export class RelayedTransactionV2Builder { // TODO: fix sender, or don't set it at all return new Transaction({ - sender: this.innerTransaction.getSender(), + sender: this.relayerAddress, receiver: this.innerTransaction.getSender(), value: 0, gasLimit: From a8940d80c1a1bda3cfbdc732fd69dea067d52065 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Wed, 21 Sep 2022 16:23:48 +0300 Subject: [PATCH 03/10] removed TODO --- src/relayedTransactionV2Builder.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index dbdd45e4..cbc3a461 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -80,7 +80,6 @@ export class RelayedTransactionV2Builder { ]) .build(); - // TODO: fix sender, or don't set it at all return new Transaction({ sender: this.relayerAddress, receiver: this.innerTransaction.getSender(), From 2a4506732acde0201de32e8a04c8351669e9ca8d Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Wed, 21 Sep 2022 16:33:16 +0300 Subject: [PATCH 04/10] fix test --- src/relayedTransactionV2Builder.spec.ts | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/relayedTransactionV2Builder.spec.ts b/src/relayedTransactionV2Builder.spec.ts index 22a4ee16..6d8cb4f7 100644 --- a/src/relayedTransactionV2Builder.spec.ts +++ b/src/relayedTransactionV2Builder.spec.ts @@ -36,7 +36,11 @@ describe("test relayed v2 transaction builder", function () { chainID: networkConfig.ChainID, data: new TransactionPayload("getContractConfig"), }); - builder = builder.setNetworkConfig(networkConfig).setInnerTransactionGasLimit(10).setInnerTransaction(innerTx); + builder = builder + .setNetworkConfig(networkConfig) + .setInnerTransactionGasLimit(10) + .setInnerTransaction(innerTx) + .setRelayerAddress(alice.address); assert.throw(() => builder.build(), errors.ErrGasLimitShouldBe0ForInnerTransaction); innerTx.setGasLimit({ From 36c4c3bfbd2bface645b66f4baf83dadee8327e9 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Wed, 21 Sep 2022 18:02:09 +0300 Subject: [PATCH 05/10] fix after self review --- src/relayedTransactionV1Builder.spec.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/relayedTransactionV1Builder.spec.ts b/src/relayedTransactionV1Builder.spec.ts index 413d451a..8bebe6ab 100644 --- a/src/relayedTransactionV1Builder.spec.ts +++ b/src/relayedTransactionV1Builder.spec.ts @@ -70,7 +70,7 @@ describe("test relayed v1 transaction builder", function () { relayedTxV1.setNonce(2627); await alice.signer.sign(relayedTxV1); - console.log(relayedTxV1.serializeForSigning(alice.address).toString()); - console.log(relayedTxV1.getSignature().hex()); + assert.equal(relayedTxV1.getData().toString(), "relayedTx@7b226e6f6e6365223a3139382c2273656e646572223a2267456e574f65576d6d413063306a6b71764d354241707a61644b46574e534f69417643575163776d4750673d222c227265636569766572223a22414141414141414141414141415141414141414141414141414141414141414141414141414141432f2f383d222c2276616c7565223a302c226761735072696365223a313030303030303030302c226761734c696d6974223a36303030303030302c2264617461223a225a3256305132397564484a68593352446232356d6157633d222c227369676e6174757265223a2239682b6e6742584f5536776674315464437368534d4b3454446a5a32794f74686336564c576e3478724d5a706248427738677a6c6659596d362b766b505258303764634a562b4745635462616a7049692b5a5a5942773d3d222c22636861696e4944223a2256413d3d222c2276657273696f6e223a317d"); + assert.equal(relayedTxV1.getSignature().hex(), "c7d2c3b971f44eca676c10624d3c4319f8898af159f003e1e59f446cb75e5a294c9f0758d800e04d3daff11e67d20c4c1f85fd54aad6deb947ef391e6dd09d07"); }); }); From b1b7b256e8bebb5e73f46985783bb2b2e82e9181 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Thu, 22 Sep 2022 11:27:58 +0300 Subject: [PATCH 06/10] add optional setRelayerNonce --- src/relayedTransactionV1Builder.spec.ts | 7 ++++++- src/relayedTransactionV1Builder.ts | 22 ++++++++++++++++++++-- src/relayedTransactionV2Builder.spec.ts | 6 ++++++ src/relayedTransactionV2Builder.ts | 21 +++++++++++++++++++-- 4 files changed, 51 insertions(+), 5 deletions(-) diff --git a/src/relayedTransactionV1Builder.spec.ts b/src/relayedTransactionV1Builder.spec.ts index 8bebe6ab..5b771c11 100644 --- a/src/relayedTransactionV1Builder.spec.ts +++ b/src/relayedTransactionV1Builder.spec.ts @@ -63,13 +63,18 @@ describe("test relayed v1 transaction builder", function () { const builder = new RelayedTransactionV1Builder(); const relayedTxV1 = builder .setInnerTransaction(innerTx) + .setRelayerNonce({ + valueOf: function () { + return 2627; + } + }) .setNetworkConfig(networkConfig) .setRelayerAddress(alice.address) .build(); - relayedTxV1.setNonce(2627); await alice.signer.sign(relayedTxV1); + assert.equal(relayedTxV1.getNonce().valueOf(), 2627); assert.equal(relayedTxV1.getData().toString(), "relayedTx@7b226e6f6e6365223a3139382c2273656e646572223a2267456e574f65576d6d413063306a6b71764d354241707a61644b46574e534f69417643575163776d4750673d222c227265636569766572223a22414141414141414141414141415141414141414141414141414141414141414141414141414141432f2f383d222c2276616c7565223a302c226761735072696365223a313030303030303030302c226761734c696d6974223a36303030303030302c2264617461223a225a3256305132397564484a68593352446232356d6157633d222c227369676e6174757265223a2239682b6e6742584f5536776674315464437368534d4b3454446a5a32794f74686336564c576e3478724d5a706248427738677a6c6659596d362b766b505258303764634a562b4745635462616a7049692b5a5a5942773d3d222c22636861696e4944223a2256413d3d222c2276657273696f6e223a317d"); assert.equal(relayedTxV1.getSignature().hex(), "c7d2c3b971f44eca676c10624d3c4319f8898af159f003e1e59f446cb75e5a294c9f0758d800e04d3daff11e67d20c4c1f85fd54aad6deb947ef391e6dd09d07"); }); diff --git a/src/relayedTransactionV1Builder.ts b/src/relayedTransactionV1Builder.ts index 8f0dc3a7..706a7f1b 100644 --- a/src/relayedTransactionV1Builder.ts +++ b/src/relayedTransactionV1Builder.ts @@ -1,5 +1,5 @@ import {Transaction} from "./transaction"; -import {IAddress} from "./interface"; +import {IAddress, INonce} from "./interface"; import {INetworkConfig} from "./interfaceOfNetwork"; import {ErrInvalidRelayedV1BuilderArguments} from "./errors"; import {TransactionPayload} from "./transactionPayload"; @@ -11,6 +11,7 @@ export class RelayedTransactionV1Builder { innerTransaction: Transaction | undefined; relayerAddress: IAddress | undefined; + relayerNonce: INonce | undefined; netConfig: INetworkConfig | undefined; /** @@ -43,6 +44,16 @@ export class RelayedTransactionV1Builder { return this; } + /** + * (optional) Sets the nonce of the relayer + * + * @param relayerNonce + */ + setRelayerNonce(relayerNonce: INonce) : RelayedTransactionV1Builder { + this.relayerNonce = relayerNonce; + return this; + } + /** * Tries to build the relayed v1 transaction based on the previously set fields * @@ -63,7 +74,8 @@ export class RelayedTransactionV1Builder { ]) .build(); - return new Transaction({ + let relayedTransaction = new Transaction({ + nonce: this.relayerNonce, sender: this.relayerAddress, receiver: this.innerTransaction.getSender(), value: 0, @@ -72,6 +84,12 @@ export class RelayedTransactionV1Builder { data: payload, chainID: this.netConfig.ChainID, }); + + if (this.relayerNonce) { + relayedTransaction.setNonce(this.relayerNonce); + } + + return relayedTransaction; } private prepareInnerTransaction(): string { diff --git a/src/relayedTransactionV2Builder.spec.ts b/src/relayedTransactionV2Builder.spec.ts index 6d8cb4f7..d789668a 100644 --- a/src/relayedTransactionV2Builder.spec.ts +++ b/src/relayedTransactionV2Builder.spec.ts @@ -75,11 +75,17 @@ describe("test relayed v2 transaction builder", function () { const relayedTxV2 = builder .setInnerTransaction(innerTx) .setInnerTransactionGasLimit(60_000_000) + .setRelayerNonce({ + valueOf(): number { + return 37; + } + }) .setNetworkConfig(networkConfig) .setRelayerAddress(alice.getAddress()) .build(); await alice.signer.sign(relayedTxV2); + assert.equal(relayedTxV2.getNonce().valueOf(), 37); assert.equal( relayedTxV2.getData().toString(), "relayedTxV2@000000000000000000010000000000000000000000000000000000000002ffff@0f@676574436f6e7472616374436f6e666967@b6c5262d9837853e2201de357c1cc4c9803988a42d7049d26b7785dd0ac2bd4c6a8804b6fd9cf845fe2c2a622774b1a2dbd0a417c9a0bc3f0563a85bd15e710a"); diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index cbc3a461..b45ddb75 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -1,7 +1,7 @@ import {Transaction} from "./transaction"; import {TransactionPayload} from "./transactionPayload"; import {AddressValue, BytesValue, ContractFunction, U64Value} from "./smartcontracts"; -import {IAddress, IGasLimit} from "./interface"; +import {IAddress, IGasLimit, INonce} from "./interface"; import {INetworkConfig} from "./interfaceOfNetwork"; import {ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments} from "./errors"; @@ -10,6 +10,7 @@ export class RelayedTransactionV2Builder { innerTransaction: Transaction | undefined; innerTransactionGasLimit: IGasLimit | undefined; relayerAddress: IAddress | undefined; + relayerNonce: INonce | undefined; netConfig: INetworkConfig | undefined; /** @@ -54,6 +55,16 @@ export class RelayedTransactionV2Builder { return this; } + /** + * (optional) Sets the nonce of the relayer + * + * @param relayerNonce + */ + setRelayerNonce(relayerNonce: INonce): RelayedTransactionV2Builder { + this.relayerNonce = relayerNonce; + return this; + } + /** * Tries to build the relayed v2 transaction based on the previously set fields. * It returns a transaction that isn't signed @@ -80,7 +91,7 @@ export class RelayedTransactionV2Builder { ]) .build(); - return new Transaction({ + let relayedTransaction = new Transaction({ sender: this.relayerAddress, receiver: this.innerTransaction.getSender(), value: 0, @@ -89,5 +100,11 @@ export class RelayedTransactionV2Builder { data: payload, chainID: this.netConfig.ChainID, }); + + if (this.relayerNonce) { + relayedTransaction.setNonce(this.relayerNonce); + } + + return relayedTransaction; } } From d0c7766cce84559fe9eee4e33316b6ab1e5439d9 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Thu, 22 Sep 2022 11:30:24 +0300 Subject: [PATCH 07/10] fix after review --- src/relayedTransactionV1Builder.ts | 6 ++---- src/relayedTransactionV2Builder.ts | 3 +-- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/src/relayedTransactionV1Builder.ts b/src/relayedTransactionV1Builder.ts index 706a7f1b..295484f2 100644 --- a/src/relayedTransactionV1Builder.ts +++ b/src/relayedTransactionV1Builder.ts @@ -8,7 +8,6 @@ import {Address} from "./address"; import BigNumber from "bignumber.js"; export class RelayedTransactionV1Builder { - innerTransaction: Transaction | undefined; relayerAddress: IAddress | undefined; relayerNonce: INonce | undefined; @@ -25,7 +24,7 @@ export class RelayedTransactionV1Builder { } /** - * Sets the network config to be used for building the relayed v2 transaction + * Sets the network config to be used for building the relayed v1 transaction * * @param {INetworkConfig} netConfig The network configuration to be used */ @@ -35,7 +34,7 @@ export class RelayedTransactionV1Builder { } /** - * Sets the address of the relayer (the one that will actually pay the fee + * Sets the address of the relayer (the one that will actually pay the fee) * * @param relayerAddress */ @@ -70,7 +69,6 @@ export class RelayedTransactionV1Builder { .setFunction(new ContractFunction("relayedTx")) .setArgs([ new StringValue(serializedTransaction), - //new StringValue(serializedTransaction.toString("hex")) ]) .build(); diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index b45ddb75..cbfbe54d 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -6,7 +6,6 @@ import {INetworkConfig} from "./interfaceOfNetwork"; import {ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments} from "./errors"; export class RelayedTransactionV2Builder { - innerTransaction: Transaction | undefined; innerTransactionGasLimit: IGasLimit | undefined; relayerAddress: IAddress | undefined; @@ -46,7 +45,7 @@ export class RelayedTransactionV2Builder { } /** - * Sets the address of the relayer (the one that will actually pay the fee + * Sets the address of the relayer (the one that will actually pay the fee) * * @param relayerAddress */ From 60673b026d34abfd6414df6d8a60335c37a5f996 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Thu, 22 Sep 2022 11:32:35 +0300 Subject: [PATCH 08/10] update package lock --- package-lock.json | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/package-lock.json b/package-lock.json index 8c037695..52f3488d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -2136,9 +2136,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.4.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", - "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", + "version": "1.4.257", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.257.tgz", + "integrity": "sha512-C65sIwHqNnPC2ADMfse/jWTtmhZMII+x6ADI9gENzrOiI7BpxmfKFE84WkIEl5wEg+7+SfIkwChDlsd1Erju2A==", "dev": true }, "node_modules/elliptic": { @@ -7636,9 +7636,9 @@ } }, "electron-to-chromium": { - "version": "1.4.256", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.256.tgz", - "integrity": "sha512-x+JnqyluoJv8I0U9gVe+Sk2st8vF0CzMt78SXxuoWCooLLY2k5VerIBdpvG7ql6GKI4dzNnPjmqgDJ76EdaAKw==", + "version": "1.4.257", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.257.tgz", + "integrity": "sha512-C65sIwHqNnPC2ADMfse/jWTtmhZMII+x6ADI9gENzrOiI7BpxmfKFE84WkIEl5wEg+7+SfIkwChDlsd1Erju2A==", "dev": true }, "elliptic": { From b6e7c99c74ca07841cf303194a3150e38a25bc78 Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Thu, 22 Sep 2022 12:23:56 +0300 Subject: [PATCH 09/10] fixes after second review --- src/relayedTransactionV1Builder.spec.ts | 20 ++++++++------------ src/relayedTransactionV1Builder.ts | 18 +++++++++--------- src/relayedTransactionV2Builder.spec.ts | 18 +++++++----------- src/relayedTransactionV2Builder.ts | 12 ++++++------ 4 files changed, 30 insertions(+), 38 deletions(-) diff --git a/src/relayedTransactionV1Builder.spec.ts b/src/relayedTransactionV1Builder.spec.ts index 5b771c11..14b1f401 100644 --- a/src/relayedTransactionV1Builder.spec.ts +++ b/src/relayedTransactionV1Builder.spec.ts @@ -1,10 +1,10 @@ -import {loadTestWallets, TestWallet} from "./testutils"; -import {assert} from "chai"; +import { loadTestWallets, TestWallet } from "./testutils"; +import { assert} from "chai"; import * as errors from "./errors"; -import {RelayedTransactionV1Builder} from "./relayedTransactionV1Builder"; -import {Transaction} from "./transaction"; -import {Address} from "./address"; -import {TransactionPayload} from "./transactionPayload"; +import { RelayedTransactionV1Builder } from "./relayedTransactionV1Builder"; +import { Transaction } from "./transaction"; +import { Address } from "./address"; +import { TransactionPayload } from "./transactionPayload"; describe("test relayed v1 transaction builder", function () { let alice: TestWallet, bob: TestWallet; @@ -21,7 +21,7 @@ describe("test relayed v1 transaction builder", function () { nonce: 15, sender: alice.address, receiver: Address.fromBech32("erd1qqqqqqqqqqqqqqqpqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqqzllls8a5w6u"), - gasLimit: 10, + gasLimit: 10000000, chainID: "1", data: new TransactionPayload("getContractConfig"), }); @@ -63,11 +63,7 @@ describe("test relayed v1 transaction builder", function () { const builder = new RelayedTransactionV1Builder(); const relayedTxV1 = builder .setInnerTransaction(innerTx) - .setRelayerNonce({ - valueOf: function () { - return 2627; - } - }) + .setRelayerNonce(2627) .setNetworkConfig(networkConfig) .setRelayerAddress(alice.address) .build(); diff --git a/src/relayedTransactionV1Builder.ts b/src/relayedTransactionV1Builder.ts index 295484f2..1ee4f6f9 100644 --- a/src/relayedTransactionV1Builder.ts +++ b/src/relayedTransactionV1Builder.ts @@ -1,10 +1,10 @@ -import {Transaction} from "./transaction"; -import {IAddress, INonce} from "./interface"; -import {INetworkConfig} from "./interfaceOfNetwork"; -import {ErrInvalidRelayedV1BuilderArguments} from "./errors"; -import {TransactionPayload} from "./transactionPayload"; -import {ContractFunction, StringValue} from "./smartcontracts"; -import {Address} from "./address"; +import { Transaction } from "./transaction"; +import { IAddress, INonce } from "./interface"; +import { INetworkConfig } from "./interfaceOfNetwork"; +import { ErrInvalidRelayedV1BuilderArguments } from "./errors"; +import { TransactionPayload } from "./transactionPayload"; +import { ContractFunction, StringValue } from "./smartcontracts"; +import { Address } from "./address"; import BigNumber from "bignumber.js"; export class RelayedTransactionV1Builder { @@ -72,13 +72,13 @@ export class RelayedTransactionV1Builder { ]) .build(); + const gasLimit = this.netConfig.MinGasLimit + this.netConfig.GasPerDataByte * payload.length() + this.innerTransaction.getGasLimit().valueOf(); let relayedTransaction = new Transaction({ nonce: this.relayerNonce, sender: this.relayerAddress, receiver: this.innerTransaction.getSender(), value: 0, - gasLimit: - this.netConfig.MinGasLimit + this.netConfig.GasPerDataByte * payload.length() + this.innerTransaction.getGasLimit().valueOf(), + gasLimit: gasLimit, data: payload, chainID: this.netConfig.ChainID, }); diff --git a/src/relayedTransactionV2Builder.spec.ts b/src/relayedTransactionV2Builder.spec.ts index d789668a..daf3ec0b 100644 --- a/src/relayedTransactionV2Builder.spec.ts +++ b/src/relayedTransactionV2Builder.spec.ts @@ -1,9 +1,9 @@ -import {loadTestWallets, TestWallet} from "./testutils"; -import {RelayedTransactionV2Builder} from "./relayedTransactionV2Builder"; -import {Address} from "./address"; -import {TransactionPayload} from "./transactionPayload"; -import {assert} from "chai"; -import {Transaction} from "./transaction"; +import { loadTestWallets, TestWallet } from "./testutils"; +import { RelayedTransactionV2Builder } from "./relayedTransactionV2Builder"; +import { Address } from "./address"; +import { TransactionPayload } from "./transactionPayload"; +import { assert } from "chai"; +import { Transaction } from "./transaction"; import * as errors from "./errors"; describe("test relayed v2 transaction builder", function () { @@ -75,11 +75,7 @@ describe("test relayed v2 transaction builder", function () { const relayedTxV2 = builder .setInnerTransaction(innerTx) .setInnerTransactionGasLimit(60_000_000) - .setRelayerNonce({ - valueOf(): number { - return 37; - } - }) + .setRelayerNonce(37) .setNetworkConfig(networkConfig) .setRelayerAddress(alice.getAddress()) .build(); diff --git a/src/relayedTransactionV2Builder.ts b/src/relayedTransactionV2Builder.ts index cbfbe54d..66363fd0 100644 --- a/src/relayedTransactionV2Builder.ts +++ b/src/relayedTransactionV2Builder.ts @@ -1,9 +1,9 @@ -import {Transaction} from "./transaction"; -import {TransactionPayload} from "./transactionPayload"; -import {AddressValue, BytesValue, ContractFunction, U64Value} from "./smartcontracts"; -import {IAddress, IGasLimit, INonce} from "./interface"; -import {INetworkConfig} from "./interfaceOfNetwork"; -import {ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments} from "./errors"; +import { Transaction } from "./transaction"; +import { TransactionPayload } from "./transactionPayload"; +import { AddressValue, BytesValue, ContractFunction, U64Value } from "./smartcontracts"; +import { IAddress, IGasLimit, INonce } from "./interface"; +import { INetworkConfig } from "./interfaceOfNetwork"; +import { ErrGasLimitShouldBe0ForInnerTransaction, ErrInvalidRelayedV2BuilderArguments } from "./errors"; export class RelayedTransactionV2Builder { innerTransaction: Transaction | undefined; From 8efa3831a4f2ab1d88d4bcedbda12a83bdedcc5e Mon Sep 17 00:00:00 2001 From: Bogdan Rosianu Date: Thu, 22 Sep 2022 12:38:06 +0300 Subject: [PATCH 10/10] bump version + update changelog --- CHANGELOG.md | 3 +++ package-lock.json | 4 ++-- package.json | 2 +- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 745143d4..cb0ba4a6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -4,6 +4,9 @@ All notable changes will be documented in this file. Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how to structure this file. +## 11.1.0 +- [Add builder for relayed v1 transactions](https://github.com/ElrondNetwork/elrond-sdk-erdjs/pull/235) + ## 11.0.1 - [Fix construction of AbiRegistry](https://github.com/ElrondNetwork/elrond-sdk-erdjs/pull/234) diff --git a/package-lock.json b/package-lock.json index 52f3488d..d57992fc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@elrondnetwork/erdjs", - "version": "11.0.1", + "version": "11.1.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@elrondnetwork/erdjs", - "version": "11.0.1", + "version": "11.1.0", "license": "MIT", "dependencies": { "@elrondnetwork/transaction-decoder": "1.0.0", diff --git a/package.json b/package.json index 4cabcd33..b4210aa0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elrondnetwork/erdjs", - "version": "11.0.1", + "version": "11.1.0", "description": "Smart Contracts interaction framework", "main": "out/index.js", "types": "out/index.d.js",