diff --git a/extension/config-overrides.js b/extension/config-overrides.js index cd5278da..c57941ba 100644 --- a/extension/config-overrides.js +++ b/extension/config-overrides.js @@ -8,12 +8,13 @@ module.exports = function override(config, env) { config.resolve.extensions.push(".wasm"); config.module.rules.forEach(rule => { - (rule.oneOf || []).forEach(oneOf => { - if (oneOf.loader && oneOf.loader.indexOf("file-loader") >= 0) { - // Make file-loader ignore WASM files - oneOf.exclude.push(/\.wasm$/); - } - }); + if (!rule.oneOf) { + return; + } + + let fileLoader = rule.oneOf[rule.oneOf.length - 1]; + + fileLoader.exclude.push(/\.wasm$/); }); config.plugins = (config.plugins || []).concat([ @@ -32,5 +33,10 @@ module.exports = function override(config, env) { ), ]); + config.experiments = { + syncWebAssembly: true, + asyncWebAssembly: true, + }; + return config; }; diff --git a/extension/package.json b/extension/package.json index e600dd48..d7ef907f 100644 --- a/extension/package.json +++ b/extension/package.json @@ -11,12 +11,6 @@ "eject": "react-scripts eject", "dev": "concurrently \"yarn:start\" \"yarn:watch\"" }, - "eslintConfig": { - "extends": [ - "react-app", - "react-app/jest" - ] - }, "browserslist": { "production": [ ">0.2%", @@ -46,17 +40,21 @@ "@types/react": "^16.9.0", "@types/react-dom": "^16.9.0", "@types/uuid": "^8.3.1", + "@wasm-tool/wasm-pack-plugin": "^1.5.0", "chakra-ui-steps": "^1.3.0", + "concurrently": "^6.2.0", "debug": "^4.3.1", + "filemanager-webpack-plugin": "^3.0.0", "framer-motion": "^4.0.0", "moment": "^2.29.1", "react": "^17.0.2", + "react-app-rewired": "^2.1.6", "react-async": "^10.0.1", "react-browser-extension-scripts": "4.0.10", "react-dom": "^17.0.2", "react-icons": "^4.2.0", "react-qr-code": "^1.1.1", - "react-scripts": "4.0.1", + "source-map-loader": "^3.0.0", "type-fest": "^2.0.0", "typescript": "^4.1.2", "uuid": "^8.3.2", @@ -65,11 +63,5 @@ "web-vitals": "^1.0.1", "webextension-polyfill": "^0.8.0", "webextension-polyfill-ts": "^0.25.0" - }, - "devDependencies": { - "@wasm-tool/wasm-pack-plugin": "^1.3.1", - "concurrently": "^6.2.0", - "filemanager-webpack-plugin": "^3.0.0", - "react-app-rewired": "^2.1.6" } } diff --git a/extension/src/background/index.ts b/extension/src/background/index.ts index 84e07516..72525d1b 100644 --- a/extension/src/background/index.ts +++ b/extension/src/background/index.ts @@ -3,27 +3,26 @@ import { browser } from "webextension-polyfill-ts"; import WavesProvider from "../in-page"; import { BackupDetails, LoanDetails, LoanToSign, SwapToSign, Txid } from "../models"; import { - bip39SeedWords, - createLoanBackup, - createNewBip39Wallet, - extractLoan, - extractTrade, - getAddress, - getBalances, - getBlockHeight, - getOpenLoans, - getPastTransactions, - loadLoanBackup, - makeBuyCreateSwapPayload, - makeLoanRequestPayload, - makeSellCreateSwapPayload, - repayLoan, - signAndSendSwap, - signLoan, - unlockWallet, - walletStatus, - withdrawAll, -} from "../wasmProxy"; + bip39_seed_words, + create_loan_backup, + create_new_bip39_wallet, + extract_loan, + extract_trade, + get_address, + get_balances, + get_block_height, + get_open_loans, + get_past_transactions, + load_loan_backup, + make_buy_create_swap_payload, + make_loan_request, + make_sell_create_swap_payload, + repay_loan, + sign_and_send_swap_transaction, + sign_loan, + wallet_status, + withdraw_everything_to, +} from "../wallet"; // TODO: Is this global or do we need one per file? Debug.enable("*"); @@ -62,18 +61,18 @@ export function invokeBackgroundScriptRpc(message: Omit walletStatus(walletName)); -addRpcMessageListener("getBuyCreateSwapPayload", ([usdt]) => makeBuyCreateSwapPayload(walletName, usdt)); -addRpcMessageListener("getSellCreateSwapPayload", ([btc]) => makeSellCreateSwapPayload(walletName, btc)); -addRpcMessageListener("getNewAddress", () => getAddress(walletName)); +addRpcMessageListener("walletStatus", () => wallet_status(walletName)); +addRpcMessageListener("getBuyCreateSwapPayload", ([usdt]) => make_buy_create_swap_payload(walletName, usdt)); +addRpcMessageListener("getSellCreateSwapPayload", ([btc]) => make_sell_create_swap_payload(walletName, btc)); +addRpcMessageListener("getNewAddress", () => get_address(walletName)); addRpcMessageListener( "makeLoanRequestPayload", - ([collateral, feerate]) => makeLoanRequestPayload(walletName, collateral, feerate), + ([collateral, feerate]) => make_loan_request(walletName, collateral, feerate), ); addRpcMessageListener("signAndSendSwap", ([txHex]) => { return new Promise((resolve, reject) => { - extractTrade(walletName, txHex) + extract_trade(walletName, txHex) .then(decoded => { swapToSign = { txHex, decoded }; resolveSwapSignRequest = resolve; @@ -89,7 +88,7 @@ addRpcMessageListener("signAndSendSwap", ([txHex]) => { }); addRpcMessageListener("signLoan", ([loanRequest]) => { return new Promise((resolve, reject) => { - extractLoan(walletName, loanRequest) + extract_loan(walletName, loanRequest) .then(details => { loanToSign = { details }; resolveLoanSignRequest = resolve; @@ -121,7 +120,7 @@ function addRpcMessageListener( // @ts-ignore window.getWalletStatus = async () => { - return walletStatus(walletName); + return wallet_status(walletName); }; // @ts-ignore window.unlockWallet = async (password: string) => { @@ -129,11 +128,11 @@ window.unlockWallet = async (password: string) => { }; // @ts-ignore window.getBalances = async () => { - return getBalances(walletName); + return get_balances(walletName); }; // @ts-ignore window.getAddress = async () => { - return getAddress(walletName); + return get_address(walletName); }; // @ts-ignore window.getSwapToSign = async () => { @@ -145,7 +144,7 @@ window.signAndSendSwap = (txHex: string) => { throw new Error("No pending promise functions for swap sign request"); } - signAndSendSwap(walletName, txHex) + sign_and_send_swap_transaction(walletName, txHex) .then(resolveSwapSignRequest) .catch(rejectSwapSignRequest) .then(cleanupPendingSwap); @@ -175,7 +174,7 @@ window.signLoan = async () => { // that the wallet is signing the same transaction the user has authorised // if we receive an error, we respond directly, else we return the details - return await signLoan(walletName).catch(rejectLoanSignRequest); + return await sign_loan(walletName).catch(rejectLoanSignRequest); }; // @ts-ignore @@ -191,12 +190,12 @@ window.confirmLoan = async (payload: string) => { // @ts-ignore window.createLoanBackup = async (loanTx: string) => { - return createLoanBackup(walletName, loanTx); + return create_loan_backup(walletName, loanTx); }; // @ts-ignore window.loadLoanBackup = async (backupDetails: BackupDetails) => { - return loadLoanBackup(backupDetails); + return loan_loan_backup(backupDetails); }; // @ts-ignore @@ -210,32 +209,32 @@ window.rejectLoan = () => { }; // @ts-ignore window.withdrawAll = async (address: string) => { - return withdrawAll(walletName, address); + return withdraw_everything_to(walletName, address); }; // @ts-ignore window.getOpenLoans = async (): LoanDetails[] => { - return getOpenLoans(); + return get_open_loans(); }; // @ts-ignore window.repayLoan = async (txid: string): void => { - return repayLoan(walletName, txid); + return repay_loan(walletName, txid); }; // @ts-ignore window.getPastTransactions = async (): Txid[] => { - return getPastTransactions(walletName); + return get_past_transaction(walletName); }; // @ts-ignore window.bip39SeedWords = async (): string => { - return bip39SeedWords(); + return bip39_seed_words(); }; // @ts-ignore window.createWalletFromBip39 = async (seed_words: string, password: string) => { - return createNewBip39Wallet(walletName, seed_words, password); + return create_new_bip39_wallet(walletName, seed_words, password); }; // @ts-ignore window.getBlockHeight = async () => { - return getBlockHeight(); + return get_block_height(); }; function updateBadge() { diff --git a/extension/src/components/ConfirmLoanWizard.tsx b/extension/src/components/ConfirmLoanWizard.tsx index 935f7fce..6da2b8d6 100644 --- a/extension/src/components/ConfirmLoanWizard.tsx +++ b/extension/src/components/ConfirmLoanWizard.tsx @@ -18,7 +18,7 @@ import Debug from "debug"; import moment from "moment"; import React, { useState } from "react"; import { useAsync } from "react-async"; -import { FiCheck, FiClipboard, FiExternalLink } from "react-icons/all"; +import { FiCheck, FiClipboard, FiExternalLink } from "react-icons/fi"; import { browser } from "webextension-polyfill-ts"; import { confirmLoan, createLoanBackup, getBlockHeight, rejectLoan, signLoan } from "../background-proxy"; import { LoanToSign, USDT_TICKER } from "../models"; diff --git a/extension/src/wasmProxy.ts b/extension/src/wasmProxy.ts deleted file mode 100644 index f3c85ed7..00000000 --- a/extension/src/wasmProxy.ts +++ /dev/null @@ -1,174 +0,0 @@ -import Debug from "debug"; -import { - Address, - BackupDetails, - BalanceUpdate, - CreateSwapPayload, - LoanDetails, - LoanRequestPayload, - Status, - Trade, - Txid, - WalletStatus, -} from "./models"; - -Debug.enable("*"); -const debug = Debug("wasmProxy"); - -export async function walletStatus(name: string): Promise { - const { wallet_status } = await import("./wallet"); - - debug("walletStatus"); - const status = await wallet_status(name); - - if (status.loaded && status.exists) { - let address = await getAddress(name); - return { status: Status.Loaded, address }; - } else if (status.exists) { - return { status: Status.NotLoaded }; - } else { - return { status: Status.None }; - } -} - -export async function getAddress(name: string): Promise
{ - const { get_address } = await import("./wallet"); - - debug("getAddress"); - return get_address(name); -} - -export async function unlockWallet(name: string, password: string): Promise { - const { load_existing_wallet } = await import("./wallet"); - - debug("unlockWallet"); - return load_existing_wallet(name, password); -} - -export async function getBalances(name: string): Promise { - const { get_balances } = await import("./wallet"); - - debug("getBalances"); - return get_balances(name); -} - -export async function makeSellCreateSwapPayload(name: string, btc: string): Promise { - const { make_sell_create_swap_payload } = await import("./wallet"); - - debug("makeSellCreateSwapPayload"); - return make_sell_create_swap_payload(name, btc); -} - -export async function makeBuyCreateSwapPayload(name: string, usdt: string): Promise { - const { make_buy_create_swap_payload } = await import("./wallet"); - - debug("makeBuyCreateSwapPayload"); - return make_buy_create_swap_payload(name, usdt); -} - -export async function makeLoanRequestPayload( - name: string, - collateral: string, - fee_rate: string, -): Promise { - const { make_loan_request } = await import("./wallet"); - - debug("makeLoanRequestPayload"); - return make_loan_request(name, collateral, fee_rate); -} - -export async function signAndSendSwap(name: string, hex: string): Promise { - const { sign_and_send_swap_transaction } = await import("./wallet"); - - debug("signAndSendSwap"); - - const tx = { inner: hex }; - return sign_and_send_swap_transaction(name, tx); -} - -export async function extractTrade(name: string, hex: string): Promise { - const { extract_trade } = await import("./wallet"); - - debug("extractTrade"); - const tx = { inner: hex }; - return extract_trade(name, tx); -} - -// TODO: Replace any with actual LoanResponse interface -export async function extractLoan(name: string, loanResponse: any): Promise { - const { extract_loan } = await import("./wallet"); - - debug("extractLoan"); - return extract_loan(name, loanResponse); -} - -export async function signLoan(name: string): Promise { - const { sign_loan } = await import("./wallet"); - - debug("signLoan"); - return (await sign_loan(name)).inner; -} - -export async function createLoanBackup(name: string, loanTx: string): Promise { - const { create_loan_backup } = await import("./wallet"); - - debug("createLoanBackup"); - const tx = { inner: loanTx }; - return create_loan_backup(name, tx); -} - -export async function loadLoanBackup(backupDetails: BackupDetails): Promise { - const { load_loan_backup } = await import("./wallet"); - - debug("loadLoanBackup"); - return load_loan_backup(backupDetails); -} - -export async function withdrawAll(name: string, address: string): Promise { - const { withdraw_everything_to } = await import("./wallet"); - - debug("withdrawAll"); - return withdraw_everything_to(name, address); -} - -export async function getOpenLoans(): Promise { - const { get_open_loans } = await import("./wallet"); - - debug("getOpenLoans"); - return get_open_loans(); -} - -export async function repayLoan(name: string, txid: string): Promise { - const { repay_loan } = await import("./wallet"); - - debug("repayLoan"); - return repay_loan(name, txid); -} - -export async function getPastTransactions(name: string): Promise { - const { get_past_transactions } = await import("./wallet"); - - debug("getPastTransactions"); - return get_past_transactions(name); -} - -export async function bip39SeedWords(): Promise { - const { bip39_seed_words } = await import("./wallet"); - - debug("bip39_seed_words"); - return bip39_seed_words(); -} - -export async function createNewBip39Wallet(name: string, seedWords: string, password: string): Promise { - const { create_new_bip39_wallet } = await import("./wallet"); - - debug("create_new_bip39_wallet"); - return create_new_bip39_wallet(name, seedWords, password); -} - -export async function getBlockHeight(): Promise { - const { get_block_height } = await import("./wallet"); - - debug("getBlockHeight"); - return get_block_height(); -} diff --git a/extension/yarn.lock b/extension/yarn.lock index d81ec7e9..2832c388 100644 --- a/extension/yarn.lock +++ b/extension/yarn.lock @@ -83,27 +83,6 @@ semver "^5.4.1" source-map "^0.5.0" -"@babel/core@^7.9.0": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.14.6.tgz#e0814ec1a950032ff16c13a2721de39a8416fcab" - integrity sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA== - dependencies: - "@babel/code-frame" "^7.14.5" - "@babel/generator" "^7.14.5" - "@babel/helper-compilation-targets" "^7.14.5" - "@babel/helper-module-transforms" "^7.14.5" - "@babel/helpers" "^7.14.6" - "@babel/parser" "^7.14.6" - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.2" - json5 "^2.1.2" - semver "^6.3.0" - source-map "^0.5.0" - "@babel/generator@^7.12.1", "@babel/generator@^7.12.17": version "7.12.17" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.17.tgz#9ef1dd792d778b32284411df63f4f668a9957287" @@ -495,15 +474,6 @@ "@babel/traverse" "^7.12.17" "@babel/types" "^7.12.17" -"@babel/helpers@^7.14.6": - version "7.14.6" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.14.6.tgz#5b58306b95f1b47e2a0199434fa8658fa6c21635" - integrity sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA== - dependencies: - "@babel/template" "^7.14.5" - "@babel/traverse" "^7.14.5" - "@babel/types" "^7.14.5" - "@babel/highlight@^7.10.4", "@babel/highlight@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.12.13.tgz#8ab538393e00370b26271b01fa08f7f27f2e795c" @@ -527,7 +497,7 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.17.tgz#bc85d2d47db38094e5bb268fc761716e7d693848" integrity sha512-r1yKkiUTYMQ8LiEI0UcQx5ETw5dpTLn9wijn9hk6KkTtOK95FndDN10M+8/s6k/Ymlbivw0Av9q4SlgF80PtHg== -"@babel/parser@^7.14.5", "@babel/parser@^7.14.6": +"@babel/parser@^7.14.5": version "7.14.6" resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.14.6.tgz#d85cc68ca3cac84eae384c06f032921f5227f4b2" integrity sha512-oG0ej7efjEXxb4UgE+klVx+3j4MVo+A2vCzm7OUN4CLo6WhQ+vSOD2yJ8m7B+DghObxtLxt3EfgMWpq+AsWehQ== @@ -1346,7 +1316,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-transform-react-constant-elements@^7.12.1", "@babel/plugin-transform-react-constant-elements@^7.9.0": +"@babel/plugin-transform-react-constant-elements@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.14.5.tgz#41790d856f7c5cec82d2bcf5d0e5064d682522ed" integrity sha512-NBqLEx1GxllIOXJInJAQbrnwwYJsV3WaMHIcOwD8rhYS0AabTWn7kHdHgPgu5RmHLU0q4DMxhAMu8ue/KampgQ== @@ -1661,7 +1631,7 @@ core-js-compat "^3.6.2" semver "^5.5.0" -"@babel/preset-env@^7.12.1", "@babel/preset-env@^7.9.5": +"@babel/preset-env@^7.12.1": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.14.5.tgz#c0c84e763661fd0e74292c3d511cb33b0c668997" integrity sha512-ci6TsS0bjrdPpWGnQ+m4f+JSSzDKlckqKIJJt9UZ/+g7Zz9k0N8lYU8IeLg/01o2h8LyNZDMLGgRLDTxpudLsA== @@ -1836,7 +1806,7 @@ "@babel/plugin-transform-react-jsx-source" "^7.12.1" "@babel/plugin-transform-react-pure-annotations" "^7.12.1" -"@babel/preset-react@^7.12.5", "@babel/preset-react@^7.9.4": +"@babel/preset-react@^7.12.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.14.5.tgz#0fbb769513f899c2c56f3a882fa79673c2d4ab3c" integrity sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ== @@ -3005,18 +2975,6 @@ mkdirp "^1.0.4" rimraf "^3.0.2" -"@pmmmwh/react-refresh-webpack-plugin@0.4.2": - version "0.4.2" - resolved "https://registry.yarnpkg.com/@pmmmwh/react-refresh-webpack-plugin/-/react-refresh-webpack-plugin-0.4.2.tgz#1f9741e0bde9790a0e13272082ed7272a083620d" - integrity sha512-Loc4UDGutcZ+Bd56hBInkm6JyjyCwWy4t2wcDXzN8EDPANgVRj0VP8Nxn0Zq2pc+WKauZwEivQgbDGg4xZO20A== - dependencies: - ansi-html "^0.0.7" - error-stack-parser "^2.0.6" - html-entities "^1.2.1" - native-url "^0.2.6" - schema-utils "^2.6.5" - source-map "^0.7.3" - "@popperjs/core@2.4.4": version "2.4.4" resolved "https://registry.yarnpkg.com/@popperjs/core/-/core-2.4.4.tgz#11d5db19bd178936ec89cd84519c4de439574398" @@ -3167,7 +3125,7 @@ "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" "@svgr/babel-plugin-transform-svg-component" "^5.5.0" -"@svgr/core@^5.4.0", "@svgr/core@^5.5.0": +"@svgr/core@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== @@ -3183,7 +3141,7 @@ dependencies: "@babel/types" "^7.12.6" -"@svgr/plugin-jsx@^5.4.0", "@svgr/plugin-jsx@^5.5.0": +"@svgr/plugin-jsx@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== @@ -3193,7 +3151,7 @@ "@svgr/hast-util-to-babel-ast" "^5.5.0" svg-parser "^2.0.2" -"@svgr/plugin-svgo@^5.4.0", "@svgr/plugin-svgo@^5.5.0": +"@svgr/plugin-svgo@^5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== @@ -3202,20 +3160,6 @@ deepmerge "^4.2.2" svgo "^1.2.2" -"@svgr/webpack@5.4.0": - version "5.4.0" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.4.0.tgz#b68bc86e29cf007292b96ced65f80971175632e0" - integrity sha512-LjepnS/BSAvelnOnnzr6Gg0GcpLmnZ9ThGFK5WJtm1xOqdBE/1IACZU7MMdVzjyUkfFqGz87eRE4hFaSLiUwYg== - dependencies: - "@babel/core" "^7.9.0" - "@babel/plugin-transform-react-constant-elements" "^7.9.0" - "@babel/preset-env" "^7.9.5" - "@babel/preset-react" "^7.9.4" - "@svgr/core" "^5.4.0" - "@svgr/plugin-jsx" "^5.4.0" - "@svgr/plugin-svgo" "^5.4.0" - loader-utils "^2.0.0" - "@svgr/webpack@5.5.0": version "5.5.0" resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" @@ -3712,14 +3656,14 @@ "@typescript-eslint/types" "4.15.2" eslint-visitor-keys "^2.0.0" -"@wasm-tool/wasm-pack-plugin@^1.3.1": - version "1.4.0" - resolved "https://registry.yarnpkg.com/@wasm-tool/wasm-pack-plugin/-/wasm-pack-plugin-1.4.0.tgz#752e4a6d8fe35477a3c6cafd2ac6b0351f692848" - integrity sha512-zQh0gA7E73dgwhUM9sXX2rsaXsdWUIdK1kMlEhds3oi6ASn+ePxhb/quZweoeo0SjxuETVb0iu+/nxUZ5HxsUQ== +"@wasm-tool/wasm-pack-plugin@^1.5.0": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@wasm-tool/wasm-pack-plugin/-/wasm-pack-plugin-1.5.0.tgz#cb3a363321a326594730e496d68e7e9a0199f42c" + integrity sha512-qsGJ953zrXZdXW58cfYOh2nBXp0SYBsFhkxqh9p4JK8cXllEzHeRXoVO+qtgEB31+s1tsL8eda3Uy97W/7yOAg== dependencies: chalk "^2.4.1" command-exists "^1.2.7" - watchpack "^1.6.0" + watchpack "^2.1.1" which "^2.0.2" "@webassemblyjs/ast@1.9.0": @@ -3877,7 +3821,7 @@ resolved "https://registry.yarnpkg.com/@xtuc/long/-/long-4.2.2.tgz#d291c6a4e97989b5c61d9acf396ae4fe133a718d" integrity sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ== -abab@^2.0.3: +abab@^2.0.3, abab@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.5.tgz#c0b678fb32d60fc1219c784d6a826fe385aeb79a" integrity sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q== @@ -4059,7 +4003,7 @@ ansi-escapes@^4.2.1, ansi-escapes@^4.3.1: dependencies: type-fest "^0.11.0" -ansi-html@0.0.7, ansi-html@^0.0.7: +ansi-html@0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= @@ -5342,15 +5286,6 @@ cliui@^7.0.2: strip-ansi "^6.0.0" wrap-ansi "^7.0.0" -clone-deep@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" - integrity sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ== - dependencies: - is-plain-object "^2.0.4" - kind-of "^6.0.2" - shallow-clone "^3.0.0" - clone-response@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" @@ -6716,13 +6651,6 @@ error-ex@^1.2.0, error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -error-stack-parser@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/error-stack-parser/-/error-stack-parser-2.0.6.tgz#5a99a707bd7a4c58a797902d48d82803ede6aad8" - integrity sha512-d51brTeqC+BHlwF0BhPtcYgF5nlzf9ZZ0ZIUQNZpc9ZB9qw5IJ2diTrBY9jlCJkTLITYPjmiX6OWCwH+fuyNgQ== - dependencies: - stackframe "^1.1.1" - es-abstract@^1.17.2: version "1.17.7" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.7.tgz#a4de61b2f66989fc7421676c1cb9787573ace54c" @@ -7793,7 +7721,7 @@ fx-runner@1.1.0: which "1.2.4" winreg "0.0.12" -gensync@^1.0.0-beta.1, gensync@^1.0.0-beta.2: +gensync@^1.0.0-beta.1: version "1.0.0-beta.2" resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== @@ -8210,7 +8138,7 @@ html-encoding-sniffer@^2.0.1: dependencies: whatwg-encoding "^1.0.5" -html-entities@^1.2.1, html-entities@^1.3.1: +html-entities@^1.3.1: version "1.4.0" resolved "https://registry.yarnpkg.com/html-entities/-/html-entities-1.4.0.tgz#cfbd1b01d2afaf9adca1b10ae7dffab98c71d2dc" integrity sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA== @@ -8362,6 +8290,13 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + icss-utils@^4.0.0, icss-utils@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/icss-utils/-/icss-utils-4.1.1.tgz#21170b53789ee27447c2f47dd683081403f9a467" @@ -10433,13 +10368,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -native-url@^0.2.6: - version "0.2.6" - resolved "https://registry.yarnpkg.com/native-url/-/native-url-0.2.6.tgz#ca1258f5ace169c716ff44eccbddb674e10399ae" - integrity sha512-k4bDC87WtgrdD362gZz6zoiXQrl40kYlBmpfmSjwRO1VU0V5ccwJTlxuE72F6m3V0vc1xOf6n3UCP9QyerRqmA== - dependencies: - querystring "^0.2.0" - natural-compare-lite@~1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz#17b09581988979fddafe0201e931ba933c96cbb4" @@ -12210,11 +12138,6 @@ querystring@0.2.0: resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= -querystring@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.1.tgz#40d77615bb09d16902a85c3e38aa8b5ed761c2dd" - integrity sha512-wkvS7mL/JMugcup3/rMitHmd9ecIGd2lhFhK9N3UUQ450h66d1r3Y9nvXzQAW1Lq+wyx61k/1pfKS5KuKiyEbg== - querystringify@^2.1.1: version "2.2.0" resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" @@ -12470,11 +12393,6 @@ react-qr-code@^1.1.1: prop-types "^15.7.2" qr.js "0.0.0" -react-refresh@^0.8.3: - version "0.8.3" - resolved "https://registry.yarnpkg.com/react-refresh/-/react-refresh-0.8.3.tgz#721d4657672d400c5e3c75d063c4a85fb2d5d68f" - integrity sha512-X8jZHc7nCMjaCqoU+V2I0cOhNW+QMBwSUkeXnTi8IPe6zaRWfn60ZzvFDZqWPfmSJfjub7dDW1SP0jaHWLu/hg== - react-remove-scroll-bar@^2.1.0: version "2.2.0" resolved "https://registry.yarnpkg.com/react-remove-scroll-bar/-/react-remove-scroll-bar-2.2.0.tgz#d4d545a7df024f75d67e151499a6ab5ac97c8cdd" @@ -12494,72 +12412,6 @@ react-remove-scroll@2.4.1: use-callback-ref "^1.2.3" use-sidecar "^1.0.1" -react-scripts@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-scripts/-/react-scripts-4.0.1.tgz#34974c0f4cfdf1655906c95df6a04d80db8b88f0" - integrity sha512-NnniMSC/wjwhcJAyPJCWtxx6CWONqgvGgV9+QXj1bwoW/JI++YF1eEf3Upf/mQ9KmP57IBdjzWs1XvnPq7qMTQ== - dependencies: - "@babel/core" "7.12.3" - "@pmmmwh/react-refresh-webpack-plugin" "0.4.2" - "@svgr/webpack" "5.4.0" - "@typescript-eslint/eslint-plugin" "^4.5.0" - "@typescript-eslint/parser" "^4.5.0" - babel-eslint "^10.1.0" - babel-jest "^26.6.0" - babel-loader "8.1.0" - babel-plugin-named-asset-import "^0.3.7" - babel-preset-react-app "^10.0.0" - bfj "^7.0.2" - camelcase "^6.1.0" - case-sensitive-paths-webpack-plugin "2.3.0" - css-loader "4.3.0" - dotenv "8.2.0" - dotenv-expand "5.1.0" - eslint "^7.11.0" - eslint-config-react-app "^6.0.0" - eslint-plugin-flowtype "^5.2.0" - eslint-plugin-import "^2.22.1" - eslint-plugin-jest "^24.1.0" - eslint-plugin-jsx-a11y "^6.3.1" - eslint-plugin-react "^7.21.5" - eslint-plugin-react-hooks "^4.2.0" - eslint-plugin-testing-library "^3.9.2" - eslint-webpack-plugin "^2.1.0" - file-loader "6.1.1" - fs-extra "^9.0.1" - html-webpack-plugin "4.5.0" - identity-obj-proxy "3.0.0" - jest "26.6.0" - jest-circus "26.6.0" - jest-resolve "26.6.0" - jest-watch-typeahead "0.6.1" - mini-css-extract-plugin "0.11.3" - optimize-css-assets-webpack-plugin "5.0.4" - pnp-webpack-plugin "1.6.4" - postcss-flexbugs-fixes "4.2.1" - postcss-loader "3.0.0" - postcss-normalize "8.0.1" - postcss-preset-env "6.7.0" - postcss-safe-parser "5.0.2" - prompts "2.4.0" - react-app-polyfill "^2.0.0" - react-dev-utils "^11.0.1" - react-refresh "^0.8.3" - resolve "1.18.1" - resolve-url-loader "^3.1.2" - sass-loader "8.0.2" - semver "7.3.2" - style-loader "1.3.0" - terser-webpack-plugin "4.2.3" - ts-pnp "1.2.0" - url-loader "4.1.1" - webpack "4.44.2" - webpack-dev-server "3.11.0" - webpack-manifest-plugin "2.2.0" - workbox-webpack-plugin "5.1.4" - optionalDependencies: - fsevents "^2.1.3" - react-style-singleton@^2.1.0: version "2.1.1" resolved "https://registry.yarnpkg.com/react-style-singleton/-/react-style-singleton-2.1.1.tgz#ce7f90b67618be2b6b94902a30aaea152ce52e66" @@ -13090,7 +12942,7 @@ safe-regex@^1.1.0: dependencies: ret "~0.1.10" -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -13115,17 +12967,6 @@ sanitize.css@^10.0.0: resolved "https://registry.yarnpkg.com/sanitize.css/-/sanitize.css-10.0.0.tgz#b5cb2547e96d8629a60947544665243b1dc3657a" integrity sha512-vTxrZz4dX5W86M6oVWVdOVe72ZiPs41Oi7Z6Km4W5Turyz28mrXSJhhEBZoRtzJWIv3833WKVwLSDWWkEfupMg== -sass-loader@8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-8.0.2.tgz#debecd8c3ce243c76454f2e8290482150380090d" - integrity sha512-7o4dbSK8/Ol2KflEmSco4jTjQoV988bM82P9CZdmo9hR3RLnvNc0ufMNdMrB0caq38JQ/FgF4/7RcbcfKzxoFQ== - dependencies: - clone-deep "^4.0.1" - loader-utils "^1.2.3" - neo-async "^2.6.1" - schema-utils "^2.6.1" - semver "^6.3.0" - sass-loader@^10.0.5: version "10.2.0" resolved "https://registry.yarnpkg.com/sass-loader/-/sass-loader-10.2.0.tgz#3d64c1590f911013b3fa48a0b22a83d5e1494716" @@ -13166,7 +13007,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: +schema-utils@^2.6.5, schema-utils@^2.7.0, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -13336,13 +13177,6 @@ sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" - integrity sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA== - dependencies: - kind-of "^6.0.2" - shebang-command@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" @@ -13519,6 +13353,20 @@ source-list-map@^2.0.0: resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34" integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw== +source-map-js@^0.6.2: + version "0.6.2" + resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-0.6.2.tgz#0bb5de631b41cfbda6cfba8bd05a80efdfd2385e" + integrity sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug== + +source-map-loader@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/source-map-loader/-/source-map-loader-3.0.0.tgz#f2a04ee2808ad01c774dea6b7d2639839f3b3049" + integrity sha512-GKGWqWvYr04M7tn8dryIWvb0s8YM41z82iQv01yBtIylgxax0CwvSy6gc2Y02iuXwEfGWRlMicH0nvms9UZphw== + dependencies: + abab "^2.0.5" + iconv-lite "^0.6.2" + source-map-js "^0.6.2" + source-map-resolve@^0.5.0, source-map-resolve@^0.5.2: version "0.5.3" resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" @@ -13693,11 +13541,6 @@ stack-utils@^2.0.2: dependencies: escape-string-regexp "^2.0.0" -stackframe@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/stackframe/-/stackframe-1.2.0.tgz#52429492d63c62eb989804c11552e3d22e779303" - integrity sha512-GrdeshiRmS1YLMYgzF16olf2jJ/IzxXY9lhKOskuVziubpTYcYqyOwYeJKzQkwy7uN0fYSsbsC4RQaXf9LCrYA== - static-extend@^0.1.1: version "0.1.2" resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" @@ -14813,7 +14656,7 @@ watchpack@2.1.1: glob-to-regexp "^0.4.1" graceful-fs "^4.1.2" -watchpack@^1.6.0, watchpack@^1.7.4: +watchpack@^1.7.4: version "1.7.5" resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-1.7.5.tgz#1267e6c55e0b9b5be44c2023aed5437a2c26c453" integrity sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ== @@ -14824,6 +14667,14 @@ watchpack@^1.6.0, watchpack@^1.7.4: chokidar "^3.4.1" watchpack-chokidar2 "^2.0.1" +watchpack@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.2.0.tgz#47d78f5415fe550ecd740f99fe2882323a58b1ce" + integrity sha512-up4YAn/XHgZHIxFBVCdlMiWDj6WaLKpwVeGQk2I5thdYxF/KmF0aaz6TfJZ/hfl1h/XlcDr7k1KH7ThDagpFaA== + dependencies: + glob-to-regexp "^0.4.1" + graceful-fs "^4.1.2" + wbuf@^1.1.0, wbuf@^1.7.3: version "1.7.3" resolved "https://registry.yarnpkg.com/wbuf/-/wbuf-1.7.3.tgz#c1d8d149316d3ea852848895cb6a0bfe887b87df"