diff --git a/package.json b/package.json index cc5c186a..9a5b64e5 100644 --- a/package.json +++ b/package.json @@ -16,7 +16,7 @@ "description": "React hooks for using Algorand compatible wallets in dApps.", "scripts": { "dev": "yarn storybook", - "build": "rm -rf dist && rollup -c", + "build": "del -f dist && rollup -c", "test": "jest", "storybook": "start-storybook -p 6006", "deploy-storybook": "build-storybook && gh-pages -d storybook-static", @@ -134,6 +134,7 @@ "types": "dist/index.d.ts", "dependencies": { "immer": "^9.0.15", + "snapalgo-sdk": "^1.1.6", "zustand": "^4.1.4" }, "config": { diff --git a/src/clients/index.ts b/src/clients/index.ts index 6a148698..60fcd626 100644 --- a/src/clients/index.ts +++ b/src/clients/index.ts @@ -7,8 +7,9 @@ import algosigner from './algosigner' import walletconnect from './walletconnect' import kmd from './kmd' import mnemonic from './mnemonic' +import metamask from './metamask' -export { pera, myalgo, defly, exodus, algosigner, walletconnect, kmd, mnemonic } +export { pera, myalgo, defly, exodus, algosigner, walletconnect, kmd, mnemonic, metamask} export default { [pera.metadata.id]: pera, @@ -19,5 +20,6 @@ export default { [algosigner.metadata.id]: algosigner, [walletconnect.metadata.id]: walletconnect, [kmd.metadata.id]: kmd, - [mnemonic.metadata.id]: mnemonic + [mnemonic.metadata.id]: mnemonic, + [metamask.metadata.id]: metamask, } diff --git a/src/clients/metamask/client.ts b/src/clients/metamask/client.ts new file mode 100644 index 00000000..69354a88 --- /dev/null +++ b/src/clients/metamask/client.ts @@ -0,0 +1,203 @@ +/** + * Helpful resources: + * https://github.com/PureStake/algosigner/blob/develop/docs/dApp-integration.md + */ +import type _algosdk from 'algosdk' +import BaseWallet from '../base' +import Algod, { getAlgodClient } from '../../algod' +import { PROVIDER_ID, DEFAULT_NETWORK } from '../../constants' +import type { DecodedTransaction, DecodedSignedTransaction, Network } from '../../types' +import { ICON } from './constants' +import type { + WindowExtended, + AlgoSignerTransaction, + AlgoSigner, + AlgoSignerClientConstructor, + InitParams +} from './types' +import { useWalletStore } from '../../store' +import {Wallet} from 'snapalgo-sdk'; + +class MetamaskClient extends BaseWallet { + #client: AlgoSigner + network: Network + walletStore: typeof useWalletStore + init: boolean + + constructor({ metadata, client, algosdk, algodClient, network }: AlgoSignerClientConstructor) { + super(metadata, algosdk, algodClient) + this.#client = client + this.network = network + this.walletStore = useWalletStore + this.init = false + } + + static metadata = { + id: PROVIDER_ID.METAMASK, + name: 'Metamask', + icon: ICON, + isWalletConnect: false + } + + static async init({ algodOptions, algosdkStatic, network = DEFAULT_NETWORK }: InitParams) { + + + + const algosdk = algosdkStatic || (await Algod.init(algodOptions)).algosdk + const algodClient = getAlgodClient(algosdk, algodOptions) + const algosigner = (window as WindowExtended).algorand + + return new MetamaskClient({ + metadata: MetamaskClient.metadata, + id: PROVIDER_ID.ALGOSIGNER, + client: algosigner, + algosdk: algosdk, + algodClient: algodClient, + network + }) + + } + + async connect() { + const testId = `local:http://localhost:8081`; + + if(this.init === false){ + console.log(testId); + new Wallet(); + } + console.log(window.algorand); + console.log(this.getGenesisID()); + const { accounts } = await window.algorand.enable({ genesisID: this.getGenesisID() }) + + if (accounts.length === 0) { + throw new Error(`No accounts found for ${MetamaskClient.metadata.id}`) + } + + const mappedAccounts = await Promise.all( + accounts.map(async (address, index) => { + // check to see if this is a rekeyed account + const { 'auth-addr': authAddr } = await this.getAccountInfo(address) + + return { + name: `AlgoSigner ${index + 1}`, + address, + providerId: MetamaskClient.metadata.id, + ...(authAddr && { authAddr }) + } + }) + ) + + // sort the accounts in the order they were returned by AlgoSigner + mappedAccounts.sort((a, b) => accounts.indexOf(a.address) - accounts.indexOf(b.address)) + this.init = true; + return { + ...MetamaskClient.metadata, + accounts: mappedAccounts + } + } + + // eslint-disable-next-line @typescript-eslint/require-await + async reconnect(onDisconnect: () => void) { + if (window === undefined || (window as WindowExtended).algorand === undefined) { + onDisconnect() + } + + return null + } + + // eslint-disable-next-line @typescript-eslint/require-await + async disconnect() { + return + } + + async signTransactions( + connectedAccounts: string[], + transactions: Uint8Array[], + indexesToSign?: number[], + returnGroup = true + ) { + // Decode the transactions to access their properties. + const decodedTxns = transactions.map((txn) => { + let rawTxn = this.algosdk.decodeObj(txn); + return rawTxn; + }) as Array + + const signedIndexes: number[] = [] + + // Marshal the transactions, + // and add the signers property if they shouldn't be signed. + const txnsToSign = decodedTxns.reduce((acc, txn, i) => { + const isSigned = 'txn' in txn + + const sender = this.algosdk.encodeAddress(isSigned ? txn.txn.snd : txn.snd) + const authAddress = this.getAuthAddress(sender) // rekeyed-to account, or undefined + + if (indexesToSign && indexesToSign.length && indexesToSign.includes(i)) { + signedIndexes.push(i) + acc.push({ + txn: window.algorand.base64Encode(transactions[i]), + ...(authAddress && { authAddr: authAddress }) + }) + } else if (!isSigned && connectedAccounts.includes(sender)) { + signedIndexes.push(i) + acc.push({ + txn: window.algorand.base64Encode(transactions[i]), + ...(authAddress && { authAddr: authAddress }) + }) + } else { + acc.push({ + txn: window.algorand.base64Encode( + isSigned + ? this.algosdk.decodeSignedTransaction(transactions[i]).txn.toByte() + : this.algosdk.decodeUnsignedTransaction(transactions[i]).toByte() + ), + signers: [] + }) + } + + return acc + }, []) + + // Sign them with the client. + const result = await window.algorand.signTxns(txnsToSign) + + // Join the newly signed transactions with the original group of transactions + // if `returnGroup` is true + const signedTxns = transactions.reduce((acc, txn, i) => { + if (signedIndexes.includes(i)) { + const signedByUser = result[i] + signedByUser && acc.push(new Uint8Array(Buffer.from(signedByUser, 'base64'))) + } else if (returnGroup) { + acc.push(txn) + } + + return acc + }, []) + + return signedTxns + } + + getGenesisID() { + if (this.network === 'betanet') { + return 'betanet-v1.0' + } + if (this.network === 'testnet') { + return 'testnet-v1.0' + } + if (this.network === 'mainnet') { + return 'mainnet-v1.0' + } + return this.network + } + + getAuthAddress(address: string): string | undefined { + const accounts = this.walletStore.getState().accounts + const account = accounts.find( + (acct) => acct.address === address && acct.providerId === this.metadata.id + ) + + return account?.authAddr + } +} + +export default MetamaskClient diff --git a/src/clients/metamask/constants.ts b/src/clients/metamask/constants.ts new file mode 100644 index 00000000..fb7727d2 --- /dev/null +++ b/src/clients/metamask/constants.ts @@ -0,0 +1,3 @@ +export const ICON = `data:image/png;base64,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` + +export const DEFAULT_NETWORK = 'MainNet' diff --git a/src/clients/metamask/index.ts b/src/clients/metamask/index.ts new file mode 100644 index 00000000..882671f1 --- /dev/null +++ b/src/clients/metamask/index.ts @@ -0,0 +1,3 @@ +import metamask from './client' + +export default metamask diff --git a/src/clients/metamask/types.ts b/src/clients/metamask/types.ts new file mode 100644 index 00000000..0dce3f52 --- /dev/null +++ b/src/clients/metamask/types.ts @@ -0,0 +1,64 @@ +import type _algosdk from 'algosdk' +import { PROVIDER_ID } from '../../constants' +import type { AlgodClientOptions, Network, Metadata } from '../../types' + +export type WindowExtended = { algorand: AlgoSigner } & Window & typeof globalThis + +export type GenesisId = 'betanet-v1.0' | 'testnet-v1.0' | 'mainnet-v1.0' | string + +export type EnableParams = { + // specific genesis ID requested by the dApp + genesisID?: GenesisId + // specific genesis hash requested by the dApp + genesisHash?: string + // array of specific accounts requested by the dApp + accounts?: string[] +} + +export type EnableResponse = { + // specific genesis ID shared by the user + genesisID: GenesisId + // specific genesis hash shared by the user + genesisHash: string + // array of specific accounts shared by the user + accounts: string[] +} + +export type AlgoSignerTransaction = { + // Base64-encoded string of a transaction binary + txn: string + // array of addresses to sign with (defaults to the sender), + // setting this to an empty array tells AlgoSigner + // that this transaction is not meant to be signed + signers?: string[] + // Base64-encoded string of a signed transaction binary + stxn?: string + // address of a multisig wallet to sign with + multisig?: string + // used to specify which account is doing the signing when dealing with rekeyed accounts + authAddr?: string +} + +export type AlgoSigner = { + enable: (params?: EnableParams) => Promise + signTxns: (transactions: AlgoSignerTransaction[]) => Promise + encoding: { + msgpackToBase64(transaction: Uint8Array): string + byteArrayToString(transaction: Uint8Array): string + } +} + +export type AlgoSignerClientConstructor = { + metadata: Metadata + client: AlgoSigner + id: PROVIDER_ID + algosdk: typeof _algosdk + algodClient: _algosdk.Algodv2 + network: Network +} + +export type InitParams = { + algodOptions?: AlgodClientOptions + algosdkStatic?: typeof _algosdk + network?: Network +} diff --git a/src/constants/constants.ts b/src/constants/constants.ts index 09300011..e7039bde 100644 --- a/src/constants/constants.ts +++ b/src/constants/constants.ts @@ -9,7 +9,8 @@ export enum PROVIDER_ID { DEFLY = 'defly', EXODUS = 'exodus', WALLETCONNECT = 'walletconnect', - MNEMONIC = 'mnemonic' + MNEMONIC = 'mnemonic', + METAMASK = 'metamask' } export const DEFAULT_NETWORK: Network = 'mainnet' diff --git a/src/utils/providers.ts b/src/utils/providers.ts index 561d51ea..2929010b 100644 --- a/src/utils/providers.ts +++ b/src/utils/providers.ts @@ -1,5 +1,5 @@ -import { PROVIDER_ID } from 'src/constants' -import { useWalletStore } from 'src/store' +import { PROVIDER_ID } from '../constants' +import { useWalletStore } from '../store' export const getActiveProviders = () => { const accounts = useWalletStore.getState().accounts diff --git a/yarn.lock b/yarn.lock index 7890f903..6d76e35e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -187,6 +187,13 @@ dependencies: "@babel/types" "^7.18.6" +"@babel/helper-module-imports@^7.16.7": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz#16146307acdc40cc00c3b2c647713076464bdbf0" + integrity sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w== + dependencies: + "@babel/types" "^7.22.15" + "@babel/helper-module-transforms@^7.12.1", "@babel/helper-module-transforms@^7.18.6", "@babel/helper-module-transforms@^7.19.0": version "7.19.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.19.0.tgz#309b230f04e22c58c6a2c0c0c7e50b216d350c30" @@ -265,11 +272,21 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz#38d3acb654b4701a9b77fb0615a96f775c3a9e63" integrity sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw== +"@babel/helper-string-parser@^7.22.5": + version "7.22.5" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" + integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== + "@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== +"@babel/helper-validator-identifier@^7.22.19": + version "7.22.20" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz#c4ae002c61d2879e724581d96665583dbc1dc0e0" + integrity sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A== + "@babel/helper-validator-option@^7.18.6": version "7.18.6" resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.18.6.tgz#bf0d2b5a509b1f336099e4ff36e1a63aa5db4db8" @@ -1085,6 +1102,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.18.3", "@babel/runtime@^7.8.7": + version "7.22.15" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" + integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== + dependencies: + regenerator-runtime "^0.14.0" + "@babel/template@^7.12.7", "@babel/template@^7.18.10", "@babel/template@^7.3.3": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -1119,6 +1143,15 @@ "@babel/helper-validator-identifier" "^7.19.1" to-fast-properties "^2.0.0" +"@babel/types@^7.22.15": + version "7.22.19" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.22.19.tgz#7425343253556916e440e662bb221a93ddb75684" + integrity sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg== + dependencies: + "@babel/helper-string-parser" "^7.22.5" + "@babel/helper-validator-identifier" "^7.22.19" + to-fast-properties "^2.0.0" + "@base2/pretty-print-object@1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@base2/pretty-print-object/-/pretty-print-object-1.0.1.tgz#371ba8be66d556812dc7fb169ebc3c08378f69d4" @@ -1230,6 +1263,86 @@ resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70" integrity sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw== +"@emotion/babel-plugin@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/babel-plugin/-/babel-plugin-11.11.0.tgz#c2d872b6a7767a9d176d007f5b31f7d504bb5d6c" + integrity sha512-m4HEDZleaaCH+XgDDsPF15Ht6wTLsgDTeR3WYj9Q/k76JtWhrJjcP4+/XlG8LGT/Rol9qUfOIztXeA84ATpqPQ== + dependencies: + "@babel/helper-module-imports" "^7.16.7" + "@babel/runtime" "^7.18.3" + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/serialize" "^1.1.2" + babel-plugin-macros "^3.1.0" + convert-source-map "^1.5.0" + escape-string-regexp "^4.0.0" + find-root "^1.1.0" + source-map "^0.5.7" + stylis "4.2.0" + +"@emotion/cache@^11.11.0": + version "11.11.0" + resolved "https://registry.yarnpkg.com/@emotion/cache/-/cache-11.11.0.tgz#809b33ee6b1cb1a625fef7a45bc568ccd9b8f3ff" + integrity sha512-P34z9ssTCBi3e9EI1ZsWpNHcfY1r09ZO0rZbRO2ob3ZQMnFI35jB536qoXbkdesr5EUhYi22anuEJuyxifaqAQ== + dependencies: + "@emotion/memoize" "^0.8.1" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + "@emotion/weak-memoize" "^0.3.1" + stylis "4.2.0" + +"@emotion/css@^11.11.2": + version "11.11.2" + resolved "https://registry.yarnpkg.com/@emotion/css/-/css-11.11.2.tgz#e5fa081d0c6e335352e1bc2b05953b61832dca5a" + integrity sha512-VJxe1ucoMYMS7DkiMdC2T7PWNbrEI0a39YRiyDvK2qq4lXwjRbVP/z4lpG+odCsRzadlR+1ywwrTzhdm5HNdew== + dependencies: + "@emotion/babel-plugin" "^11.11.0" + "@emotion/cache" "^11.11.0" + "@emotion/serialize" "^1.1.2" + "@emotion/sheet" "^1.2.2" + "@emotion/utils" "^1.2.1" + +"@emotion/hash@^0.9.1": + version "0.9.1" + resolved "https://registry.yarnpkg.com/@emotion/hash/-/hash-0.9.1.tgz#4ffb0055f7ef676ebc3a5a91fb621393294e2f43" + integrity sha512-gJB6HLm5rYwSLI6PQa+X1t5CFGrv1J1TWG+sOyMCeKz2ojaj6Fnl/rZEspogG+cvqbt4AE/2eIyD2QfLKTBNlQ== + +"@emotion/memoize@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/memoize/-/memoize-0.8.1.tgz#c1ddb040429c6d21d38cc945fe75c818cfb68e17" + integrity sha512-W2P2c/VRW1/1tLox0mVUalvnWXxavmv/Oum2aPsRcoDJuob75FC3Y8FbpfLwUegRcxINtGUMPq0tFCvYNTBXNA== + +"@emotion/serialize@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@emotion/serialize/-/serialize-1.1.2.tgz#017a6e4c9b8a803bd576ff3d52a0ea6fa5a62b51" + integrity sha512-zR6a/fkFP4EAcCMQtLOhIgpprZOwNmCldtpaISpvz348+DP4Mz8ZoKaGGCQpbzepNIUWbq4w6hNZkwDyKoS+HA== + dependencies: + "@emotion/hash" "^0.9.1" + "@emotion/memoize" "^0.8.1" + "@emotion/unitless" "^0.8.1" + "@emotion/utils" "^1.2.1" + csstype "^3.0.2" + +"@emotion/sheet@^1.2.2": + version "1.2.2" + resolved "https://registry.yarnpkg.com/@emotion/sheet/-/sheet-1.2.2.tgz#d58e788ee27267a14342303e1abb3d508b6d0fec" + integrity sha512-0QBtGvaqtWi+nx6doRwDdBIzhNdZrXUppvTM4dtZZWEGTXL/XE/yJxLMGlDT1Gt+UHH5IX1n+jkXyytE/av7OA== + +"@emotion/unitless@^0.8.1": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@emotion/unitless/-/unitless-0.8.1.tgz#182b5a4704ef8ad91bde93f7a860a88fd92c79a3" + integrity sha512-KOEGMu6dmJZtpadb476IsZBclKvILjopjUii3V+7MnXIQCYh8W3NgNcgwo21n9LXZX6EDIKvqfjYxXebDwxKmQ== + +"@emotion/utils@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@emotion/utils/-/utils-1.2.1.tgz#bbab58465738d31ae4cb3dbb6fc00a5991f755e4" + integrity sha512-Y2tGf3I+XVnajdItskUCn6LX+VUDmP6lTL4fcqsXAv43dnlbZiuW4MWQW38rW/BVWSE7Q/7+XQocmpnRYILUmg== + +"@emotion/weak-memoize@^0.3.1": + version "0.3.1" + resolved "https://registry.yarnpkg.com/@emotion/weak-memoize/-/weak-memoize-0.3.1.tgz#d0fce5d07b0620caa282b5131c297bb60f9d87e6" + integrity sha512-EsBwpc7hBUJWAsNPBmJy4hxWx12v6bshQsldrVmjxJoc3isbxhOrF2IcCpaXxfvq03NwkI7sbsOLXbYuqF/8Ww== + "@eslint-community/eslint-utils@^4.2.0": version "4.2.0" resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.2.0.tgz#a831e6e468b4b2b5ae42bf658bea015bf10bc518" @@ -3767,6 +3880,17 @@ aggregate-error@^3.0.0: clean-stack "^2.0.0" indent-string "^4.0.0" +agnostic-draggable@^1.4.5: + version "1.5.1" + resolved "https://registry.yarnpkg.com/agnostic-draggable/-/agnostic-draggable-1.5.1.tgz#c0ce1a80a17f31e34f26548efc1d934e010f7e30" + integrity sha512-SRf6lOUuQG6SwOaE33FASPvoJXwiN97oW0wAaCg0JJ2AsfAwKYZulHSGYSXAowjbc3f3EGYcvERKADd8enIwMg== + dependencies: + "@emotion/css" "^11.11.2" + animejs "^3.2.1" + dom-helpers "^5.2.1" + events "^3.3.0" + lodash "^4.17.21" + airbnb-js-shims@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/airbnb-js-shims/-/airbnb-js-shims-2.2.1.tgz#db481102d682b98ed1daa4c5baa697a05ce5c040" @@ -3853,6 +3977,11 @@ algosdk@^2.1.0: tweetnacl "^1.0.3" vlq "^2.0.4" +animejs@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/animejs/-/animejs-3.2.1.tgz#de9fe2e792f44a777a7fdf6ae160e26604b0cdda" + integrity sha512-sWno3ugFryK5nhiDm/2BKeFCpZv7vzerWUcUPyAZLDhMek3+S/p418ldZJbJXo5ZUOpfm2kP2XRO4NJcULMy9A== + ansi-align@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/ansi-align/-/ansi-align-3.0.1.tgz#0cdf12e111ace773a86e9a1fad1225c43cb19a59" @@ -4270,7 +4399,7 @@ babel-plugin-jest-hoist@^29.2.0: "@types/babel__core" "^7.1.14" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^3.0.1: +babel-plugin-macros@^3.0.1, babel-plugin-macros@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-3.1.0.tgz#9ef6dc74deb934b4db344dc973ee851d148c50c1" integrity sha512-Cg7TFGpIr01vOQNODXOOaGz2NpCU5gl8x1qJFbb6hbZxR7XrcE2vtbAsTAbJ7/xwJtUuJEw8K8Zr/AE0LHlesg== @@ -4361,6 +4490,11 @@ balanced-match@^1.0.0: resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== +base64-arraybuffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-1.0.2.tgz#1c37589a7c4b0746e34bd1feb951da2df01c1bdc" + integrity sha512-I3yl4r9QB5ZRY3XuJVEPfc2XhZO6YweFPI+UovAzn+8/hb3oJ6lnysaFcjVpkCPfVWFUDvoZ8kmVDP7WyRtYtQ== + base64-js@^1.0.2, base64-js@^1.3.1: version "1.5.1" resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" @@ -5054,6 +5188,15 @@ cliui@^5.0.0: strip-ansi "^5.2.0" wrap-ansi "^5.1.0" +cliui@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1" + integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.0" + wrap-ansi "^6.2.0" + cliui@^7.0.2: version "7.0.4" resolved "https://registry.yarnpkg.com/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" @@ -5314,7 +5457,7 @@ conventional-commit-types@^3.0.0: resolved "https://registry.yarnpkg.com/conventional-commit-types/-/conventional-commit-types-3.0.0.tgz#7c9214e58eae93e85dd66dbfbafe7e4fffa2365b" integrity sha512-SmmCYnOniSsAa9GqWOeLqc179lfr5TRu5b4QFDkbsrJ5TZjPJx85wtOr3zn+1dbeNiXDKGPbZ72IKbPhLXh/Lg== -convert-source-map@^1.4.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: +convert-source-map@^1.4.0, convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.9.0.tgz#7faae62353fb4213366d0ca98358d22e8368b05f" integrity sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A== @@ -5500,7 +5643,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.2, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -crypto-browserify@^3.11.0: +crypto-browserify@^3.11.0, crypto-browserify@^3.12.0: version "3.12.0" resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== @@ -5517,6 +5660,18 @@ crypto-browserify@^3.11.0: randombytes "^2.0.0" randomfill "^1.0.3" +crypto-price@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/crypto-price/-/crypto-price-0.0.6.tgz#9e55e57e7e477ab2ece1a1c30e90a73dc77228cd" + integrity sha512-GQFAnyUxS/NsEB9NyqNIvFn3to/bJR3BtNBK3+qNUL6EHUd1UM3z3wo83SaABpgjj2RTpSheRIXtUWwTsJqmig== + dependencies: + node-fetch "^2.1.2" + +crypto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" + integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== + css-declaration-sorter@^6.3.0: version "6.3.1" resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-6.3.1.tgz#be5e1d71b7a992433fb1c542c7a1b835e45682ec" @@ -5949,6 +6104,14 @@ dom-converter@^0.2.0: dependencies: utila "~0.4" +dom-helpers@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/dom-helpers/-/dom-helpers-5.2.1.tgz#d9400536b2bf8225ad98fe052e029451ac40e902" + integrity sha512-nRCa7CK3VTrM2NmGkIy4cbK7IZlgBE/PYMn55rrXefr5xXDP0LdtfPnblFDoVdcAfslJ7or6iqAUnx0CCGIWQA== + dependencies: + "@babel/runtime" "^7.8.7" + csstype "^3.0.2" + dom-serializer@^1.0.1: version "1.4.1" resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-1.4.1.tgz#de5d41b1aea290215dc45a6dae8adcf1d32e2d30" @@ -6052,6 +6215,11 @@ email-addresses@^3.0.1: resolved "https://registry.yarnpkg.com/email-addresses/-/email-addresses-3.1.0.tgz#cabf7e085cbdb63008a70319a74e6136188812fb" integrity sha512-k0/r7GrWVL32kZlGwfPNgB2Y/mMXVTq/decgLczm/j34whdaspNrZO8CnXPf1laaHxI6ptUlsnAxN+UAPw+fzg== +emitter-component@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/emitter-component/-/emitter-component-1.1.1.tgz#065e2dbed6959bf470679edabeaf7981d1003ab6" + integrity sha512-G+mpdiAySMuB7kesVRLuyvYRqDmshB7ReKEVuyBPkzQlmiDiLrt7hHHIy4Aff552bgknVN7B2/d3lzhGO5dvpQ== + emittery@^0.10.2: version "0.10.2" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.10.2.tgz#902eec8aedb8c41938c46e9385e9db7e03182933" @@ -6072,6 +6240,11 @@ emojis-list@^3.0.0: resolved "https://registry.yarnpkg.com/emojis-list/-/emojis-list-3.0.0.tgz#5570662046ad29e2e916e71aae260abdff4f6a78" integrity sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q== +encode-utf8@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/encode-utf8/-/encode-utf8-1.0.3.tgz#f30fdd31da07fb596f281beb2f6b027851994cda" + integrity sha512-ucAnuBEhUK4boH2HjVYG5Q2mQyPorvv0u/ocS+zhdw0S8AlHYY+GOFhP1Gio5z4icpP2ivFSvhtFjQi8+T9ppw== + encodeurl@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" @@ -6499,7 +6672,7 @@ eventemitter3@^4.0.4: resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.7.tgz#2de9b68f6528d5644ef5c59526a1b4a07306169f" integrity sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw== -events@^3.0.0, events@^3.2.0: +events@^3.0.0, events@^3.2.0, events@^3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== @@ -6838,7 +7011,7 @@ find-node-modules@^2.1.2: findup-sync "^4.0.0" merge "^2.1.1" -find-root@1.1.0: +find-root@1.1.0, find-root@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== @@ -8932,6 +9105,18 @@ jest@^29.1.2: import-local "^3.0.2" jest-cli "^29.2.1" +jquery-ui@^1.13.1: + version "1.13.2" + resolved "https://registry.yarnpkg.com/jquery-ui/-/jquery-ui-1.13.2.tgz#de03580ae6604773602f8d786ad1abfb75232034" + integrity sha512-wBZPnqWs5GaYJmo1Jj0k/mrSkzdQzKDwhXNtHKcBdAcKVxMM3KNYFq+iJ2i1rwiG53Z8M4mTn3Qxrm17uH1D4Q== + dependencies: + jquery ">=1.8.0 <4.0.0" + +"jquery@>=1.8.0 <4.0.0", jquery@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/jquery/-/jquery-3.7.1.tgz#083ef98927c9a6a74d05a6af02806566d16274de" + integrity sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg== + js-sdsl@^4.1.4: version "4.3.0" resolved "https://registry.yarnpkg.com/js-sdsl/-/js-sdsl-4.3.0.tgz#aeefe32a451f7af88425b11fdb5f58c90ae1d711" @@ -9853,6 +10038,13 @@ node-fetch@2.6.7, node-fetch@^2.6.1, node-fetch@^2.6.7: dependencies: whatwg-url "^5.0.0" +node-fetch@^2.1.2: + version "2.7.0" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" + integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== + dependencies: + whatwg-url "^5.0.0" + node-gyp-build@^4.3.0: version "4.6.0" resolved "https://registry.yarnpkg.com/node-gyp-build/-/node-gyp-build-4.6.0.tgz#0c52e4cbf54bbd28b709820ef7b6a3c2d6209055" @@ -10573,6 +10765,11 @@ pngjs@^3.3.0: resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== +pngjs@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-5.0.0.tgz#e79dd2b215767fd9c04561c01236df960bce7fbb" + integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== + pnp-webpack-plugin@1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" @@ -11167,6 +11364,16 @@ qrcode@1.4.4: pngjs "^3.3.0" yargs "^13.2.4" +qrcode@^1.5.0: + version "1.5.3" + resolved "https://registry.yarnpkg.com/qrcode/-/qrcode-1.5.3.tgz#03afa80912c0dccf12bc93f615a535aad1066170" + integrity sha512-puyri6ApkEHYiVl4CFzo1tDkAZ+ATcnbJrJ6RiBM1Fhctdn/ix9MTE3hRph33omisEbC/2fcfemsseiKgBPKZg== + dependencies: + dijkstrajs "^1.0.1" + encode-utf8 "^1.0.3" + pngjs "^5.0.0" + yargs "^15.3.1" + qs@6.11.0, qs@^6.10.0: version "6.11.0" resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" @@ -11428,6 +11635,11 @@ regenerator-runtime@^0.13.4, regenerator-runtime@^0.13.7: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== +regenerator-runtime@^0.14.0: + version "0.14.0" + resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" + integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA== + regenerator-transform@^0.15.0: version "0.15.0" resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz#cbd9ead5d77fae1a48d957cf889ad0586adb6537" @@ -12108,6 +12320,22 @@ slash@^3.0.0: resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== +snapalgo-sdk@^1.1.6: + version "1.1.6" + resolved "https://registry.yarnpkg.com/snapalgo-sdk/-/snapalgo-sdk-1.1.6.tgz#6619abd2880bdc46336745df32a9f2c2b784c1a6" + integrity sha512-6Q7bSsXSS9FCNjistDy9Y7fSIdhDYQn1GqVd0fi5nt9NWNqiX6tekJ9IUhytnyb7xKzPJM/YOooVw+KabvAVZw== + dependencies: + agnostic-draggable "^1.4.5" + algo-msgpack-with-bigint "^2.1.1" + base64-arraybuffer "^1.0.2" + crypto "^1.0.1" + crypto-browserify "^3.12.0" + crypto-price "^0.0.6" + jquery "^3.6.0" + jquery-ui "^1.13.1" + qrcode "^1.5.0" + stream "^0.0.2" + snapdragon-node@^2.0.1: version "2.1.1" resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" @@ -12180,7 +12408,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.1.tgz#0af66605a745a5a2f91cf1bbf8a7afbc283dec56" integrity sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw== -source-map@^0.5.0, source-map@^0.5.6: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ== @@ -12334,6 +12562,13 @@ stream-shift@^1.0.0: resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== +stream@^0.0.2: + version "0.0.2" + resolved "https://registry.yarnpkg.com/stream/-/stream-0.0.2.tgz#7f5363f057f6592c5595f00bc80a27f5cec1f0ef" + integrity sha512-gCq3NDI2P35B2n6t76YJuOp7d6cN/C7Rt0577l91wllh0sY9ZBuw9KaSGqH/b0hzn3CWWJbpbW0W0WvQ1H/Q7g== + dependencies: + emitter-component "^1.1.1" + strict-uri-encode@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz#b9c7330c7042862f6b142dc274bbcc5866ce3546" @@ -12585,6 +12820,11 @@ stylehacks@^5.1.0: browserslist "^4.16.6" postcss-selector-parser "^6.0.4" +stylis@4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/stylis/-/stylis-4.2.0.tgz#79daee0208964c8fe695a42fcffcac633a211a51" + integrity sha512-Orov6g6BB1sDfYgzWfTHDOxamtX1bE/zo104Dh9e6fqJ3PooipYyfJ0pUmrZO2wAvO8YbEyeFrkV91XTsGMSrw== + supports-color@^5.3.0: version "5.5.0" resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" @@ -13688,6 +13928,15 @@ wrap-ansi@^5.1.0: string-width "^3.0.0" strip-ansi "^5.0.0" +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + wrap-ansi@^7.0.0: version "7.0.0" resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" @@ -13790,6 +14039,14 @@ yargs-parser@^13.1.2: camelcase "^5.0.0" decamelize "^1.2.0" +yargs-parser@^18.1.2: + version "18.1.3" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0" + integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ== + dependencies: + camelcase "^5.0.0" + decamelize "^1.2.0" + yargs-parser@^20.2.2, yargs-parser@^20.2.9: version "20.2.9" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" @@ -13816,6 +14073,23 @@ yargs@^13.2.4: y18n "^4.0.0" yargs-parser "^13.1.2" +yargs@^15.3.1: + version "15.4.1" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8" + integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A== + dependencies: + cliui "^6.0.0" + decamelize "^1.2.0" + find-up "^4.1.0" + get-caller-file "^2.0.1" + require-directory "^2.1.1" + require-main-filename "^2.0.0" + set-blocking "^2.0.0" + string-width "^4.2.0" + which-module "^2.0.0" + y18n "^4.0.0" + yargs-parser "^18.1.2" + yargs@^16.2.0: version "16.2.0" resolved "https://registry.yarnpkg.com/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66"