{"_id":"@buidly/sdk-dapp-with-lythra","_rev":"3-abcaf3ab53b5685943fb598944801c3f","name":"@buidly/sdk-dapp-with-lythra","dist-tags":{"latest":"2.22.4"},"versions":{"2.22.1":{"name":"@buidly/sdk-dapp-with-lythra","version":"2.22.1","description":"A library to hold the main logic for a dapp on the MultiversX blockchain","author":{"name":"Buidly"},"license":"GPL-3.0-or-later","repository":{"type":"git","url":"@buidly/sdk-dapp-with-lythra"},"main":"./__commonjs","browser":"./","react-native":"./","engines":{"node":">=16"},"scripts":{"start":"yarn watch","build:esm-types":"tsc --project tsconfig.json","build:cjs-types":"tsc --build tsconfig.cjs.json","build":"rimraf dist && node esbuild.js && yarn build:esm-types && yarn build:cjs-types && cp package.json dist && cp README.md dist","publish-package":"yarn test && yarn build && cd dist && npm publish","publish-package-next":"yarn test && yarn build && cd dist && npm publish --tag next","publish-yalc":"yarn build && cd dist && yalc publish --push","watch":"yarn node esbuild-watch.js && yarn build:esm-types && yarn build:cjs-types -- --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","storybook":"start-storybook -p 6006","test-storybook":"test-storybook","build-storybook":"build-storybook","lint":"eslint --fix --ext js,ts,tsx src","pre-release":"node prerelease-script.js"},"devDependencies":{"@babel/core":"7.20.5","@ledgerhq/hw-transport-mocker":"6.27.17","@octokit/rest":"19.0.5","@storybook/addon-actions":"6.5.14","@storybook/addon-essentials":"6.5.14","@storybook/addon-interactions":"6.5.14","@storybook/addon-jest":"6.5.14","@storybook/addon-links":"6.5.14","@storybook/builder-webpack4":"6.5.14","@storybook/jest":"0.0.10","@storybook/manager-webpack4":"6.5.14","@storybook/preset-scss":"1.0.3","@storybook/react":"6.5.14","@storybook/test-runner":"0.9.1","@storybook/testing-library":"0.0.13","@testing-library/jest-dom":"5.16.2","@testing-library/react":"13.3.0","@types/lodash":"4.14.181","@types/lodash.debounce":"4.0.6","@types/lodash.isequal":"4.5.5","@types/lodash.omit":"4.5.6","@types/lodash.throttle":"4.1.6","@types/lodash.uniqby":"4.7.7","@types/platform":"1.3.4","@types/qrcode":"1.4.2","@types/qs":"6.9.7","@typescript-eslint/eslint-plugin":"5.0.0","@typescript-eslint/parser":"5.14.0","axios-mock-adapter":"1.21.2","babel-loader":"8.3.0","better-sqlite3":"7.6.2","css-loader":"5.2.6","dotenv":"16.0.3","esbuild":"0.14.47","esbuild-node-externals":"1.4.1","esbuild-plugin-replace":"1.3.0","esbuild-plugin-svgr":"1.0.1","esbuild-sass-plugin":"2.2.6","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-config-react":"1.1.7","eslint-config-standard":"17.0.0","eslint-config-standard-react":"9.2.0","eslint-import-resolver-alias":"1.1.2","eslint-import-resolver-typescript":"2.4.0","eslint-plugin-import":"2.26.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"3.4.0","eslint-plugin-promise":"6.0.0","eslint-plugin-react":"7.30.0","eslint-plugin-react-hooks":"4.5.0","glob":"8.0.3","history":"5.3.0","husky":"8.0.1","identity-obj-proxy":"3.0.0","jest":"28.1.1","jest-environment-jsdom":"28.1.3","jest-mock":"29.3.1","mini-css-extract-plugin":"2.7.1","msw":"1.3.1","node-stdlib-browser":"1.2.0","postcss":"8.4.14","postcss-modules":"4.3.1","process":"0.11.10","react":"18.2.0","react-router-dom":"6.4.4","rimraf":"3.0.2","sass":"1.56.1","sass-loader":"10.1.1","storybook-css-modules":"1.0.8","style-loader":"2.0.0","ts-jest":"28.0.7","typescript":"4.7.3"},"keywords":["multiversx","blockchain","dapp","smart-contract","transaction"],"peerDependencies":{"@types/react":"^18.0.24","@types/react-dom":"^18.0.8","react":"^18.2.0","react-dom":"^18.2.0"},"resolutions":{"react":"18.2.0","react-dom":"18.2.0","@types/react":"18.0.14","@types/react-dom":"18.0.5","@reduxjs/toolkit":"1.8.2","react-redux":"8.0.2","redux-persist":"6.0.0"},"optionalDependencies":{"@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"dependencies":{"@multiversx/sdk-core":"12.6.0","@multiversx/sdk-extension-provider":"3.0.0","@multiversx/sdk-hw-provider":"6.4.0","@multiversx/sdk-native-auth-client":"1.0.5","@multiversx/sdk-network-providers":"1.5.0","@multiversx/sdk-opera-provider":"1.0.0-alpha.1","@multiversx/sdk-wallet":"4.2.0","@multiversx/sdk-wallet-connect-provider":"4.0.3","@multiversx/sdk-web-wallet-provider":"3.1.0","@reduxjs/toolkit":"1.8.2","axios":"0.24.0","bignumber.js":"9.x","linkify-react":"4.0.2","linkifyjs":"4.0.2","lodash.debounce":"4.0.8","lodash.isequal":"4.5.0","lodash.omit":"4.5.0","lodash.throttle":"4.1.1","lodash.uniqby":"4.7.0","qs":"6.10.3","react-idle-timer":"5.0.0","react-redux":"8.0.2","redux-persist":"6.0.0","reselect":"4.0.0","shx":"0.3.4","socket.io-client":"4.6.1","@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"gitHead":"7d416b47388f465b0efc6b6e9d46cf908501318a","_id":"@buidly/sdk-dapp-with-lythra@2.22.1","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-afBkF8gmI+2G/UT7c4rPJn91nyPgNnNg6MBMNpy7d4TuXOEEhknEUqHc9BCjDKVu+7A7KbqX1ojK/ekm1CUdVw==","shasum":"3e428e352682b7c262b289f850441f1d24b770d3","tarball":"https://registry.npmjs.org/@buidly/sdk-dapp-with-lythra/-/sdk-dapp-with-lythra-2.22.1.tgz","fileCount":4211,"unpackedSize":78510079,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIBU30hlpuPbyaCIm3m6HK8y+9sBEfFLfWc0TCoD3ZfBBAiEAn38lP752lbja/nYGMqh6vsVaSss7XERPX3kHRrZWSR8="}]},"_npmUser":{"name":"mstoica95","email":"marius.stoica@stakegold.com"},"directories":{},"maintainers":[{"name":"mstoica95","email":"marius.stoica@stakegold.com"},{"name":"gabrielmatei","email":"gabrielvmatei@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk-dapp-with-lythra_2.22.1_1696832787503_0.36089488462536967"},"_hasShrinkwrap":false},"2.22.2":{"name":"@buidly/sdk-dapp-with-lythra","version":"2.22.2","description":"A library to hold the main logic for a dapp on the MultiversX blockchain","author":{"name":"Buidly"},"license":"GPL-3.0-or-later","repository":{"type":"git","url":"@buidly/sdk-dapp-with-lythra"},"main":"./__commonjs","browser":"./","react-native":"./","engines":{"node":">=16"},"scripts":{"start":"yarn watch","build:esm-types":"tsc --project tsconfig.json","build:cjs-types":"tsc --build tsconfig.cjs.json","build":"rimraf dist && node esbuild.js && yarn build:esm-types && yarn build:cjs-types && cp package.json dist && cp README.md dist","publish-package":"yarn test && yarn build && cd dist && npm publish","publish-package-next":"yarn test && yarn build && cd dist && npm publish --tag next","publish-yalc":"yarn build && cd dist && yalc publish --push","watch":"yarn node esbuild-watch.js && yarn build:esm-types && yarn build:cjs-types -- --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","storybook":"start-storybook -p 6006","test-storybook":"test-storybook","build-storybook":"build-storybook","lint":"eslint --fix --ext js,ts,tsx src","pre-release":"node prerelease-script.js"},"devDependencies":{"@babel/core":"7.20.5","@ledgerhq/hw-transport-mocker":"6.27.17","@octokit/rest":"19.0.5","@storybook/addon-actions":"6.5.14","@storybook/addon-essentials":"6.5.14","@storybook/addon-interactions":"6.5.14","@storybook/addon-jest":"6.5.14","@storybook/addon-links":"6.5.14","@storybook/builder-webpack4":"6.5.14","@storybook/jest":"0.0.10","@storybook/manager-webpack4":"6.5.14","@storybook/preset-scss":"1.0.3","@storybook/react":"6.5.14","@storybook/test-runner":"0.9.1","@storybook/testing-library":"0.0.13","@testing-library/jest-dom":"5.16.2","@testing-library/react":"13.3.0","@types/lodash":"4.14.181","@types/lodash.debounce":"4.0.6","@types/lodash.isequal":"4.5.5","@types/lodash.omit":"4.5.6","@types/lodash.throttle":"4.1.6","@types/lodash.uniqby":"4.7.7","@types/platform":"1.3.4","@types/qrcode":"1.4.2","@types/qs":"6.9.7","@typescript-eslint/eslint-plugin":"5.0.0","@typescript-eslint/parser":"5.14.0","axios-mock-adapter":"1.21.2","babel-loader":"8.3.0","better-sqlite3":"7.6.2","css-loader":"5.2.6","dotenv":"16.0.3","esbuild":"0.14.47","esbuild-node-externals":"1.4.1","esbuild-plugin-replace":"1.3.0","esbuild-plugin-svgr":"1.0.1","esbuild-sass-plugin":"2.2.6","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-config-react":"1.1.7","eslint-config-standard":"17.0.0","eslint-config-standard-react":"9.2.0","eslint-import-resolver-alias":"1.1.2","eslint-import-resolver-typescript":"2.4.0","eslint-plugin-import":"2.26.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"3.4.0","eslint-plugin-promise":"6.0.0","eslint-plugin-react":"7.30.0","eslint-plugin-react-hooks":"4.5.0","glob":"8.0.3","history":"5.3.0","husky":"8.0.1","identity-obj-proxy":"3.0.0","jest":"28.1.1","jest-environment-jsdom":"28.1.3","jest-mock":"29.3.1","mini-css-extract-plugin":"2.7.1","msw":"1.3.1","node-stdlib-browser":"1.2.0","postcss":"8.4.14","postcss-modules":"4.3.1","process":"0.11.10","react":"18.2.0","react-router-dom":"6.4.4","rimraf":"3.0.2","sass":"1.56.1","sass-loader":"10.1.1","storybook-css-modules":"1.0.8","style-loader":"2.0.0","ts-jest":"28.0.7","typescript":"4.7.3"},"keywords":["multiversx","blockchain","dapp","smart-contract","transaction"],"peerDependencies":{"@types/react":"^18.0.24","@types/react-dom":"^18.0.8","react":"^18.2.0","react-dom":"^18.2.0"},"resolutions":{"react":"18.2.0","react-dom":"18.2.0","@types/react":"18.0.14","@types/react-dom":"18.0.5","@reduxjs/toolkit":"1.8.2","react-redux":"8.0.2","redux-persist":"6.0.0"},"optionalDependencies":{"@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"dependencies":{"@multiversx/sdk-core":"12.6.0","@multiversx/sdk-extension-provider":"3.0.0","@multiversx/sdk-hw-provider":"6.4.0","@multiversx/sdk-native-auth-client":"1.0.5","@multiversx/sdk-network-providers":"1.5.0","@multiversx/sdk-opera-provider":"1.0.0-alpha.1","@multiversx/sdk-wallet":"4.2.0","@multiversx/sdk-wallet-connect-provider":"4.0.3","@multiversx/sdk-web-wallet-provider":"3.1.0","@reduxjs/toolkit":"1.8.2","axios":"0.24.0","bignumber.js":"9.x","linkify-react":"4.0.2","linkifyjs":"4.0.2","lodash.debounce":"4.0.8","lodash.isequal":"4.5.0","lodash.omit":"4.5.0","lodash.throttle":"4.1.1","lodash.uniqby":"4.7.0","qs":"6.10.3","react-idle-timer":"5.0.0","react-redux":"8.0.2","redux-persist":"6.0.0","reselect":"4.0.0","shx":"0.3.4","socket.io-client":"4.6.1","@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"gitHead":"e078059af54897662ddd793cfa7e98ad47993f7c","_id":"@buidly/sdk-dapp-with-lythra@2.22.2","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-wGN+u4oa4P+Ee03rkgz2hAE47H/vkgtTpsavQHANa8gEQu7imwCKB10dnVGD5qrS0SqH8GV8OBDdlDjA2Hae5A==","shasum":"415df50ea87eab311a768683948bc49a815f2a2e","tarball":"https://registry.npmjs.org/@buidly/sdk-dapp-with-lythra/-/sdk-dapp-with-lythra-2.22.2.tgz","fileCount":4198,"unpackedSize":78456092,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIGC9JZmGEWnPyE9FGtwnphrOLp/5mVqk0zdnKWb2aQJOAiEAoI0piAgumFU4htwKG+6mrp5Gn26b4fmpjvWkLQIdYrE="}]},"_npmUser":{"name":"mstoica95","email":"marius.stoica@stakegold.com"},"directories":{},"maintainers":[{"name":"mstoica95","email":"marius.stoica@stakegold.com"},{"name":"gabrielmatei","email":"gabrielvmatei@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk-dapp-with-lythra_2.22.2_1696925923676_0.5214478869294938"},"_hasShrinkwrap":false},"2.22.3":{"name":"@buidly/sdk-dapp-with-lythra","version":"2.22.3","description":"A library to hold the main logic for a dapp on the MultiversX blockchain","author":{"name":"Buidly"},"license":"GPL-3.0-or-later","repository":{"type":"git","url":"@buidly/sdk-dapp-with-lythra"},"main":"./__commonjs","browser":"./","react-native":"./","engines":{"node":">=16"},"scripts":{"start":"yarn watch","build:esm-types":"tsc --project tsconfig.json","build:cjs-types":"tsc --build tsconfig.cjs.json","build":"rimraf dist && node esbuild.js && yarn build:esm-types && yarn build:cjs-types && cp package.json dist && cp README.md dist","publish-package":"yarn test && yarn build && cd dist && npm publish","publish-package-next":"yarn test && yarn build && cd dist && npm publish --tag next","publish-yalc":"yarn build && cd dist && yalc publish --push","watch":"yarn node esbuild-watch.js && yarn build:esm-types && yarn build:cjs-types -- --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","storybook":"start-storybook -p 6006","test-storybook":"test-storybook","build-storybook":"build-storybook","lint":"eslint --fix --ext js,ts,tsx src","pre-release":"node prerelease-script.js"},"devDependencies":{"@babel/core":"7.20.5","@ledgerhq/hw-transport-mocker":"6.27.17","@octokit/rest":"19.0.5","@storybook/addon-actions":"6.5.14","@storybook/addon-essentials":"6.5.14","@storybook/addon-interactions":"6.5.14","@storybook/addon-jest":"6.5.14","@storybook/addon-links":"6.5.14","@storybook/builder-webpack4":"6.5.14","@storybook/jest":"0.0.10","@storybook/manager-webpack4":"6.5.14","@storybook/preset-scss":"1.0.3","@storybook/react":"6.5.14","@storybook/test-runner":"0.9.1","@storybook/testing-library":"0.0.13","@testing-library/jest-dom":"5.16.2","@testing-library/react":"13.3.0","@types/lodash":"4.14.181","@types/lodash.debounce":"4.0.6","@types/lodash.isequal":"4.5.5","@types/lodash.omit":"4.5.6","@types/lodash.throttle":"4.1.6","@types/lodash.uniqby":"4.7.7","@types/platform":"1.3.4","@types/qrcode":"1.4.2","@types/qs":"6.9.7","@typescript-eslint/eslint-plugin":"5.0.0","@typescript-eslint/parser":"5.14.0","axios-mock-adapter":"1.21.2","babel-loader":"8.3.0","better-sqlite3":"7.6.2","css-loader":"5.2.6","dotenv":"16.0.3","esbuild":"0.14.47","esbuild-node-externals":"1.4.1","esbuild-plugin-replace":"1.3.0","esbuild-plugin-svgr":"1.0.1","esbuild-sass-plugin":"2.2.6","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-config-react":"1.1.7","eslint-config-standard":"17.0.0","eslint-config-standard-react":"9.2.0","eslint-import-resolver-alias":"1.1.2","eslint-import-resolver-typescript":"2.4.0","eslint-plugin-import":"2.26.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"3.4.0","eslint-plugin-promise":"6.0.0","eslint-plugin-react":"7.30.0","eslint-plugin-react-hooks":"4.5.0","glob":"8.0.3","history":"5.3.0","husky":"8.0.1","identity-obj-proxy":"3.0.0","jest":"28.1.1","jest-environment-jsdom":"28.1.3","jest-mock":"29.3.1","mini-css-extract-plugin":"2.7.1","msw":"1.3.1","node-stdlib-browser":"1.2.0","postcss":"8.4.14","postcss-modules":"4.3.1","process":"0.11.10","react":"18.2.0","react-router-dom":"6.4.4","rimraf":"3.0.2","sass":"1.56.1","sass-loader":"10.1.1","storybook-css-modules":"1.0.8","style-loader":"2.0.0","ts-jest":"28.0.7","typescript":"4.7.3"},"keywords":["multiversx","blockchain","dapp","smart-contract","transaction"],"peerDependencies":{"@types/react":"^18.0.24","@types/react-dom":"^18.0.8","react":"^18.2.0","react-dom":"^18.2.0"},"resolutions":{"react":"18.2.0","react-dom":"18.2.0","@types/react":"18.0.14","@types/react-dom":"18.0.5","@reduxjs/toolkit":"1.8.2","react-redux":"8.0.2","redux-persist":"6.0.0"},"optionalDependencies":{"@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"dependencies":{"@multiversx/sdk-core":"12.6.0","@multiversx/sdk-extension-provider":"3.0.0","@multiversx/sdk-hw-provider":"6.4.0","@multiversx/sdk-native-auth-client":"1.0.5","@multiversx/sdk-network-providers":"1.5.0","@multiversx/sdk-opera-provider":"1.0.0-alpha.1","@multiversx/sdk-wallet":"4.2.0","@multiversx/sdk-wallet-connect-provider":"4.0.3","@multiversx/sdk-web-wallet-provider":"3.1.0","@reduxjs/toolkit":"1.8.2","axios":"0.24.0","bignumber.js":"9.x","linkify-react":"4.0.2","linkifyjs":"4.0.2","lodash.debounce":"4.0.8","lodash.isequal":"4.5.0","lodash.omit":"4.5.0","lodash.throttle":"4.1.1","lodash.uniqby":"4.7.0","qs":"6.10.3","react-idle-timer":"5.0.0","react-redux":"8.0.2","redux-persist":"6.0.0","reselect":"4.0.0","shx":"0.3.4","socket.io-client":"4.6.1","@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"gitHead":"f121b690d0bc38e4444f64d557cbb53e1b5cf5e8","_id":"@buidly/sdk-dapp-with-lythra@2.22.3","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-OR2qdEb2LdRjUOe95UoqZIkVaOswgQNC2j6frWi6/QvgPs/87+p+3llkVagACxxJn1bRQEDZ8Mm9BA87ghrXVw==","shasum":"3f09e33c6dc70ac3e756db3182f7889284d13ca0","tarball":"https://registry.npmjs.org/@buidly/sdk-dapp-with-lythra/-/sdk-dapp-with-lythra-2.22.3.tgz","fileCount":4198,"unpackedSize":78456700,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCbdomNfYmN7Q51a6ypwvxDxK7c0FgdDUV5/O0T/bN3swIgUfDwRBDDu7D0uUHEwpB+bZIvYDdsbrHSpKRuU5F4eDw="}]},"_npmUser":{"name":"mstoica95","email":"marius.stoica@stakegold.com"},"directories":{},"maintainers":[{"name":"mstoica95","email":"marius.stoica@stakegold.com"},{"name":"gabrielmatei","email":"gabrielvmatei@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk-dapp-with-lythra_2.22.3_1697006252878_0.11667532974345751"},"_hasShrinkwrap":false},"2.22.4":{"name":"@buidly/sdk-dapp-with-lythra","version":"2.22.4","description":"A library to hold the main logic for a dapp on the MultiversX blockchain","author":{"name":"Buidly"},"license":"GPL-3.0-or-later","repository":{"type":"git","url":"@buidly/sdk-dapp-with-lythra"},"main":"./__commonjs","browser":"./","react-native":"./","engines":{"node":">=16"},"scripts":{"start":"yarn watch","build:esm-types":"tsc --project tsconfig.json","build:cjs-types":"tsc --build tsconfig.cjs.json","build":"rimraf dist && node esbuild.js && yarn build:esm-types && yarn build:cjs-types && cp package.json dist && cp README.md dist","publish-package":"yarn test && yarn build && cd dist && npm publish","publish-package-next":"yarn test && yarn build && cd dist && npm publish --tag next","publish-yalc":"yarn build && cd dist && yalc publish --push","watch":"yarn node esbuild-watch.js && yarn build:esm-types && yarn build:cjs-types -- --watch","test":"jest","test:watch":"jest --watch","test:coverage":"jest --coverage","storybook":"start-storybook -p 6006","test-storybook":"test-storybook","build-storybook":"build-storybook","lint":"eslint --fix --ext js,ts,tsx src","pre-release":"node prerelease-script.js"},"devDependencies":{"@babel/core":"7.20.5","@ledgerhq/hw-transport-mocker":"6.27.17","@octokit/rest":"19.0.5","@storybook/addon-actions":"6.5.14","@storybook/addon-essentials":"6.5.14","@storybook/addon-interactions":"6.5.14","@storybook/addon-jest":"6.5.14","@storybook/addon-links":"6.5.14","@storybook/builder-webpack4":"6.5.14","@storybook/jest":"0.0.10","@storybook/manager-webpack4":"6.5.14","@storybook/preset-scss":"1.0.3","@storybook/react":"6.5.14","@storybook/test-runner":"0.9.1","@storybook/testing-library":"0.0.13","@testing-library/jest-dom":"5.16.2","@testing-library/react":"13.3.0","@types/lodash":"4.14.181","@types/lodash.debounce":"4.0.6","@types/lodash.isequal":"4.5.5","@types/lodash.omit":"4.5.6","@types/lodash.throttle":"4.1.6","@types/lodash.uniqby":"4.7.7","@types/platform":"1.3.4","@types/qrcode":"1.4.2","@types/qs":"6.9.7","@typescript-eslint/eslint-plugin":"5.0.0","@typescript-eslint/parser":"5.14.0","axios-mock-adapter":"1.21.2","babel-loader":"8.3.0","better-sqlite3":"7.6.2","css-loader":"5.2.6","dotenv":"16.0.3","esbuild":"0.14.47","esbuild-node-externals":"1.4.1","esbuild-plugin-replace":"1.3.0","esbuild-plugin-svgr":"1.0.1","esbuild-sass-plugin":"2.2.6","eslint":"8.24.0","eslint-config-prettier":"8.5.0","eslint-config-react":"1.1.7","eslint-config-standard":"17.0.0","eslint-config-standard-react":"9.2.0","eslint-import-resolver-alias":"1.1.2","eslint-import-resolver-typescript":"2.4.0","eslint-plugin-import":"2.26.0","eslint-plugin-node":"11.1.0","eslint-plugin-prettier":"3.4.0","eslint-plugin-promise":"6.0.0","eslint-plugin-react":"7.30.0","eslint-plugin-react-hooks":"4.5.0","glob":"8.0.3","history":"5.3.0","husky":"8.0.1","identity-obj-proxy":"3.0.0","jest":"28.1.1","jest-environment-jsdom":"28.1.3","jest-mock":"29.3.1","mini-css-extract-plugin":"2.7.1","msw":"1.3.1","node-stdlib-browser":"1.2.0","postcss":"8.4.14","postcss-modules":"4.3.1","process":"0.11.10","react":"18.2.0","react-router-dom":"6.4.4","rimraf":"3.0.2","sass":"1.56.1","sass-loader":"10.1.1","storybook-css-modules":"1.0.8","style-loader":"2.0.0","ts-jest":"28.0.7","typescript":"4.7.3"},"keywords":["multiversx","blockchain","dapp","smart-contract","transaction"],"peerDependencies":{"@types/react":"^18.0.24","@types/react-dom":"^18.0.8","react":"^18.2.0","react-dom":"^18.2.0"},"resolutions":{"react":"18.2.0","react-dom":"18.2.0","@types/react":"18.0.14","@types/react-dom":"18.0.5","@reduxjs/toolkit":"1.8.2","react-redux":"8.0.2","redux-persist":"6.0.0"},"optionalDependencies":{"@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"dependencies":{"@multiversx/sdk-core":"12.6.0","@multiversx/sdk-extension-provider":"3.0.0","@multiversx/sdk-hw-provider":"6.4.0","@multiversx/sdk-native-auth-client":"1.0.5","@multiversx/sdk-network-providers":"1.5.0","@multiversx/sdk-opera-provider":"1.0.0-alpha.1","@multiversx/sdk-wallet":"4.2.0","@multiversx/sdk-wallet-connect-provider":"4.0.3","@multiversx/sdk-web-wallet-provider":"3.1.0","@reduxjs/toolkit":"1.8.2","axios":"0.24.0","bignumber.js":"9.x","linkify-react":"4.0.2","linkifyjs":"4.0.2","lodash.debounce":"4.0.8","lodash.isequal":"4.5.0","lodash.omit":"4.5.0","lodash.throttle":"4.1.1","lodash.uniqby":"4.7.0","qs":"6.10.3","react-idle-timer":"5.0.0","react-redux":"8.0.2","redux-persist":"6.0.0","reselect":"4.0.0","shx":"0.3.4","socket.io-client":"4.6.1","@fortawesome/fontawesome-svg-core":"6.4.0","@fortawesome/free-solid-svg-icons":"6.4.0","@fortawesome/react-fontawesome":"0.2.0","classnames":"2.3.1","platform":"1.3.6","qrcode":"1.5.0","swr":"2.2.0"},"gitHead":"40ca2f0640e5bb1a4002e0d9901079b113247de9","_id":"@buidly/sdk-dapp-with-lythra@2.22.4","_nodeVersion":"18.16.1","_npmVersion":"9.5.1","dist":{"integrity":"sha512-BqTrpp/uyAdIuIerXLFp/0PGkmqtA2RM6BMe+yTvXVrFQjD15sFGyTNUddQEcuvvsf5EC9JARwCP0/sJ03Ap8g==","shasum":"bc6c48941ba3d0deaef25656f29be99df189b474","tarball":"https://registry.npmjs.org/@buidly/sdk-dapp-with-lythra/-/sdk-dapp-with-lythra-2.22.4.tgz","fileCount":4198,"unpackedSize":78456704,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQC7FJjwumjiJSXkkWaRDDPedug5bunru75c7zoeEB3m+gIhAKBECYX8cc7H+/RNd88y4ysQXkmpuWCCxbwitugTQISO"}]},"_npmUser":{"name":"mstoica95","email":"marius.stoica@stakegold.com"},"directories":{},"maintainers":[{"name":"mstoica95","email":"marius.stoica@stakegold.com"},{"name":"gabrielmatei","email":"gabrielvmatei@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/sdk-dapp-with-lythra_2.22.4_1697045150348_0.4481051486254919"},"_hasShrinkwrap":false}},"time":{"created":"2023-10-09T06:26:27.412Z","2.22.1":"2023-10-09T06:26:28.557Z","modified":"2023-10-11T17:25:51.064Z","2.22.2":"2023-10-10T08:18:44.305Z","2.22.3":"2023-10-11T06:37:33.530Z","2.22.4":"2023-10-11T17:25:50.855Z"},"maintainers":[{"name":"mstoica95","email":"marius.stoica@stakegold.com"},{"name":"gabrielmatei","email":"gabrielvmatei@gmail.com"}],"description":"A library to hold the main logic for a dapp on the MultiversX blockchain","keywords":["multiversx","blockchain","dapp","smart-contract","transaction"],"repository":{"type":"git","url":"@buidly/sdk-dapp-with-lythra"},"author":{"name":"Buidly"},"license":"GPL-3.0-or-later","readme":"# sdk-dapp\n\n> A library that holds the core functional logic of a dapp on the MultiversX blockchain\n\n[![NPM](https://img.shields.io/npm/v/@multiversx/sdk-dapp.svg)](https://www.npmjs.com/package/@multiversx/sdk-dapp) [![JavaScript Style Guide](https://img.shields.io/badge/code_style-standard-brightgreen.svg)](https://standardjs.com)\n\nSee [Dapp template](https://template-dapp.multiversx.com/) for live demo or checkout usage in the [Github repo](https://github.com/multiversx/mx-template-dapp)\n\n# Installation\n\nThe library can be installed via npm or yarn.\n\n```bash\nnpm install @multiversx/sdk-dapp\n```\n\nor\n\n```bash\nyarn add @multiversx/sdk-dapp\n```\n\nIf you need only the sdk-dapp basic logic, without the additional UI, consider using the `--no-optional` flag.\nThis will not install the packages needed for the optional UI components.\n\n```bash\nnpm install @multiversx/sdk-dapp --no-optional\n```\n\nor\n\n```bash\nyarn add @multiversx/sdk-dapp --no-optional\n```\n\n### **If you're transitioning from dapp-core 1.x to @multiversx/sdk-dapp (dapp-core 2.0), please read the [Migration guide](https://github.com/multiversx/mx-sdk-dapp/wiki/Migration-guide-2.0)**\n\n# Usage\n\nsdk-dapp aims to abstract and simplify the process of interacting with users' wallets and with the MultiversX blockchain, allowing developers to easily get started with a new application or integrate sdk-dapp into an existing application.\n\nThis library covers two main areas: **User Identity** and **Transactions**. The API for interacting with library's logic is exposed via hooks and methods that can be called for logging in the user, getting the status of the user or sending transactions.\n\nHowever, to simplify usage even further, the library also comes with a default UI that already uses these hooks and methods under the hood. These UI elements can be easily customized with custom css classes.\n\nThe default UI is exposed via the `UI` module.\n\n`import * as DappUI from \"@multiversx/sdk-dapp/UI\";`\n\n**Please be aware that this style of importing might also import unused code.**\n\nTo reduce the amount of dead code, you can use named imports for each component like\n\n```typescript\nimport { UnlockPage } from '@multiversx/sdk-dapp/UI/pages';\nor;\nimport { UnlockPage } from '@multiversx/sdk-dapp/UI/pages/UnlockPage';\n```\n\nMore on this below.\n\n## Prerequisites\n\nThere are a couple of requirements that need to be met for the application to work properly.\n\n**_If you experience bugs, please make sure that you read these, before opening an issue_**\n\n<details>\n  <summary>\n      React\n  </summary>\n\n### React\n\nThis library was built for applications that use React, it might not be suitable for usage with other libraries or frameworks.\n\n  </details>\n\n<details>\n  <summary>\n    DappProvider\n </summary>\n\n### DappProvider\n\nYou need to wrap your application with the **DappProvider** component, which is exported by the library, as we need to create a global Context to be able to manipulate the data.\n\n- import the Provider:\n\n```typescript\nimport { DappProvider } from '@multiversx/sdk-dapp/wrappers/DappProvider';\nor;\nimport { DappProvider } from '@multiversx/sdk-dapp/wrappers';\n```\n\n- Wrap your application with this Provider.\n\n```jsx\n<DappProvider\n    environment=\"devnet\"\n    customNetworkConfig={customNetworkConfig} // optional\n    dappConfig={dappConfig} // optional\n>\n```\n\n`environment` is a required key that is needed to configure the app's endpoints for a specific environment. Accepted values are `testnet`, `devnet` and `mainnet` (also configured in `EnvironmentsEnum`)\n\nDappProvider also accepts an optional `customNetworkConfig` object with a couple of keys.\nThis allows using different APIs and different connection providers to configure your network configuration.\n\n**All keys are optional**\n\n```typescript\n{\n  id?: string;\n  name?: string;\n  egldLabel?: string;\n  decimals?: string;\n  digits?: string;\n  gasPerDataByte?: string;\n  walletConnectDeepLink?: string; // a string that will create a deeplink for an application that is used on a mobile phone, instead of generating the login QR code.\n  walletConnectV2ProjectId?: string; // a unique ProjectID needed to access the WalletConnect 2.0 Relay Cloud\n  walletAddress?: string;\n  apiAddress?: string;\n  explorerAddress?: string;\n  apiTimeout?: 4000;\n}\n```\n\nDappProvider also accepts an optional `dappConfig` object.\n\n```typescript\n{\n  logoutRoute?: string;  // a route to redirect after auto-logout (session expired, native auth token expired or idle app)\n}\n```\n\n  </details>\n\n<details>\n  <summary>\n    UI Wrappers\n </summary>\n\n### UI Wrappers\n\nThe library exposes a couple of Components that are connected to the redux store and are used to display various elements\nwhen something happens inside the app:\n\n- `TransactionsToastList` will display new transactions in nice toasts at the bottom of the screen. This component is fully customizable.\n\n```jsx\n  import {TransactionsToastList} from \"@multiversx/sdk-dapp/UI/TransactionsToastList\";\n\n  // all properties are optional\n  <TransactionsToastList\n    className = 'transactions-toast-list'\n    transactionToastClassName=\"transactions-toast-class\"\n    successfulToastLifetime={30000}\n    parentElement={\n      /*\n        React NodeElement where the toast will be rendered\n        */\n    }\n  />\n\n```\n\n- `SignTransactionsModals` will show a modal when a new transaction is submitted, prompting the user to verify and sign it.\n\n**Important! This is required** to make transactions work, except when you use hooks to sign the transactions manually (more on this below).\n\n```jsx\nimport { SignTransactionsModals } from '@multiversx/sdk-dapp/UI/SignTransactionsModals';\n\n<App>\n  <SignTransactionsModals />\n  <Content />\n</App>;\n```\n\n`NotificationModal` Will show a modal to the user with various warnings and errors.\n\n```jsx\nimport { NotificationModal } from '@multiversx/sdk-dapp/UI/NotificationModal';\n\n<App>\n  <NotificationModal />\n  <Content />\n</App>;\n```\n\nIf you want to show custom notifications, you can use the `useGetNotification` hook to get the notifications (like insufficient funds, errors etc).\n\n</details>\n\n## User Identity\n\nsdk-dapp makes logging in and persisting user's session easy and hassle-free.\n\nA handy component is AuthenticatedRoutesWrapper, which can be used to protect certain routes and redirect the user to login page if the user is not authenticated.\n\nImport from sdk-dapp:\n\n```typescript\nimport { AuthenticatedRoutesWrapper } from '@multiversx/sdk-dapp/wrappers/AuthenticatedRoutesWrapper';\nor;\nimport { AuthenticatedRoutesWrapper } from '@multiversx/sdk-dapp/wrappers';\n```\n\nUse with routes:\n\n```jsx\n<AuthenticatedRoutesWrapper routes={routes} unlockRoute='/unlock'>\n  {appContent}\n</AuthenticatedRoutesWrapper>\n```\n\n**routes** should be an array with objects with a signature similar to this:\n\n```typescript\n{\n    path: \"/dashboard\",\n    title: \"Dashboard\",\n    component: Dashboard,\n    authenticatedRoute: true,\n  }\n```\n\nThe important parts that makes this component work are the flag **authenticatedRoute: true** and the key **path**, which means that this route should be accessible only to authenticated users.\n\n  <details>\n    <summary>\n      Login UI\n  </summary>\n\n### Login UI\n\nThere are a couple of very handy React components that can be used to login the user and protect certain routes if the user is not logged in.\n\nUnder the `DappUI` object mentioned above, you can find 4 buttons (one for each provider) which abstract away all the logic of loggin in the user and render the default UI. These buttons can be easily customized with a custom css class.\nThe exported buttons are:\n\n- ExtensionLoginButton\n- WalletConnectLoginButton\n- LedgerLoginButton\n- WebWalletLoginButton\n\nexample:\n\n```jsx\n<ExtensionLoginButton\n  callbackRoute='/dashboard'\n  buttonClassName='extension-login'\n  loginButtonText='Extension login'\n/>\n```\n\nThey can also be used with children\n\n```jsx\n<ExtensionLoginButton\n  callbackRoute=\"/dashboard\"\n  buttonClassName=\"extension-login\"\n  loginButtonText=\"Extension login\"\n>\n  <>\n    <icon/>\n    <p>Login text</p>\n  <>\n</ExtensionLoginButton>\n```\n\n`WalletConnectLoginButton` and `LedgerLoginButton` will trigger a modal with a QR code and the ledger login UI, respectively.\nThese are automatically triggered by the buttons.\n\nIf, however, you want access to these containers without the buttons,\nyou can easily import and use them.\n\n```jsx\n<WalletConnectLoginContainer\n  callbackRoute={callbackRoute}\n  loginButtonText='Login with xPortal'\n  title='xPortal Login'\n  className='wallect-connect-login-modal'\n  lead='Scan the QR code using xPortal'\n  wrapContentInsideModal={wrapContentInsideModal}\n  redirectAfterLogin={redirectAfterLogin}\n  token={token}\n  onLoginRedirect={onLoginRedirect}\n  onClose={onClose}\n/>\n```\n\n```jsx\n<LedgerLoginContainer\n  callbackRoute={callbackRoute}\n  className='ledger-login-modal'\n  wrapContentInsideModal={wrapContentInsideModal}\n  redirectAfterLogin={redirectAfterLogin}\n  nativeAuth\n  onClose={onClose}\n  onLoginRedirect={onLoginRedirect}\n/>\n```\n\n```jsx\n<WebWalletLoginButton\n  callbackRoute=\"/dashboard\"\n  loginButtonText=\"Web Wallet login\"\n>\n```\n\nIf you have a custom Web Wallet provider you can integrate it by using the `customWalletAddress` prop:\n```jsx\n<WebWalletLoginButton\n  callbackRoute=\"/dashboard\"\n  loginButtonText=\"Custom Web Wallet login\"\n  customWalletAddress=\"https://custom-web-wallet.com\"\n>\n```\n\nAll login buttons and hooks accept a prop called `redirectAfterLogin` which specifies of the user should be redirected automatically after login.\nThe default value for this boolean is false, since most apps listen for the \"isLoggedIn\" boolean and redirect programmatically.\n\nIf you need to authenticate some requests, you can provide the `nativeAuth` flag to your login buttons. It comes as a boolean or as a configuration object. This token will be available in `useGetLoginInfo` hook later, inside `tokenLogin.nativeAuthToken`. If you need to use an interceptor for your requests, make sure to check out the implementation of `AxiosInterceptorContext`. Use it like:\n\n```typescript\nimport { AxiosInterceptorContext } from '@multiversx/sdk-dapp/wrappers/AxiosInterceptorContext';\n```\n\n```jsx\n<AxiosInterceptorContext.Provider>\n  <AxiosInterceptorContext.Interceptor\n    authenticatedDomanis={['https://my-api.com']}\n  >\n    <Router>\n      <DappProvider environment={EnvironmentsEnum.devnet}>\n        <>\n          <AxiosInterceptorContext.Listener />\n          {/*\n              // other components below\n              */}\n          <TransactionsToastList />\n          <NotificationModal />\n          <SignTransactionsModals />\n\n          <Routes>...</Routes>\n        </>\n      </DappProvider>\n    </Router>\n  </AxiosInterceptorContext.Interceptor>\n</AxiosInterceptorContext.Provider>\n```\n\nAnother handly component is AuthenticatedRoutesWrapper, which can be used to protect certain routes and redirect the user to login page if the user is not authenticated.\n\nImport from sdk-dapp:\n\n```typescript\nimport { AuthenticatedRoutesWrapper } from '@multiversx/sdk-dapp/wrappers/AuthenticatedRoutesWrapper';\n```\n\nUse with routes:\n\n```jsx\n<AuthenticatedRoutesWrapper routes={routes} unlockRoute={routeNames.unlock}>\n  {appContent}\n</AuthenticatedRoutesWrapper>\n```\n\n**routes** should be an array with objects with a signature similar to this:\n\n```typescript\n{\n    path: \"/dashboard\",\n    title: \"Dashboard\",\n    component: Dashboard,\n    authenticatedRoute: true,\n  }\n```\n\nThe important parts that makes this component work are the flag **authenticatedRoute: true** and the key **path**, which means that this route should be accessible only to authenticated users.\n\n</details>\n\n  <details><summary>\nLogin hooks\n  </summary>\n\n### Login hooks\n\nThis area covers the login hooks, which expose a trigger function and the login data, ready to be rendered.\n\nThese hooks are exposed as named exports, which can be imported from sdk-dapp:\n\n```typescript\nimport {\n  useExtensionLogin,\n  useWalletConnectV2Login,\n  useLedgerLogin,\n  useWebWalletLogin\n} from '@multiversx/sdk-dapp/hooks';\nor;\nimport { useExtensionLogin } from '@multiversx/sdk-dapp/hooks/login/useExtensionLogin';\nimport { useWalletConnectV2Login } from '@multiversx/sdk-dapp/hooks/login/useWalletConnectV2Login';\nimport { useLedgerLogin } from '@multiversx/sdk-dapp/hooks/login/useLedgerLogin';\nimport { useWebWalletLogin } from '@multiversx/sdk-dapp/hooks/login/useWebWalletLogin';\n```\n\nThere are 4 available hooks:\n\n- useExtensionLogin\n- useWalletConnectV2Login\n- useLedgerLogin\n- useWebWalletLogin\n\nAll hooks have the same response signature:\n\nreturn type is as follows:\n\n```typescript\nconst [initiateLogin, genericLoginReturnType, customLoginReturnType] =\n  useLoginHook({\n    callbackRoute,\n    token,\n    nativeAuth,\n    onLoginRedirect\n  });\n```\n\n- **initiateLogin** is a function that needs to be called for the login flow to be initiated;\n- **genericLoginReturnType** is an object that is exactly the same for all hooks:\n\n```typescript\n{\n  error: string,\n  loginFailed: boolean,\n  isLoading: boolean,\n  isLoggedIn: boolean\n}\n```\n\n- **customLoginReturnType** is an object that is custom for each hook and returns specific data for that login:\n\n  - null for useExtensionLogin;\n\n  - null for useWebWalletLogin;\n\n  - `{ uriDeepLink: string, qrCodeSvg: svgElement }` for useWalletConnectV2Login;\n\n  -\n\n```typescript\n{\n  accounts: string[];\n  showAddressList: boolean;\n  startIndex: number;\n  selectedAddress: SelectedAddress | null;\n  onGoToPrevPage: () => void;\n  onGoToNextPage: () => void;\n  onSelectAddress: (address: SelectedAddress | null) => void;\n  onConfirmSelectedAddress: () => void;\n}\n```\n\nfor useLedgerLogin;\n\n</details>\n\n  <details>\n<summary>\nReading User State\n  </summary>\n\n### Reading User State\n\nOnce logged in, the user's session is persisted and can be read and deleted via a couple of handy functions.\n\nFor logging out, the library exposes a simple function called **logout**, which can be called to clear the user data.\n\nthe function accepts 2 arguments:\n\n- `callbackUrl: string (optional)` the url to redirect the user to after logging him out\n- `onRedirect: (callbackUrl: string) => void (optional)` a function that will be called instead of redirecting the user.\n  This allows you to control how the redirect is done, for example, with react-router-dom, instead of window.location.href assignment.\n  _Important_ this function will not be called for web wallet logout\n\nYou can opt-in for using the `useIdleTimer` hook, which logs out the user after a period of inactivity (default set to 10 minutes). Optionally it accepts an `onLogout` function that fulfills your dapp's specific logout business logic. Make sure to call the above `logout` function inside this `onLogout` callback.\n\nYou can also opt-in for using the `useRegisterWebsocketListener` hook. The hooks accepts a callback which will get fired once a websocket message is received, receiving the `string` argument provided by the event. Optionally you can simply listen to changes on account/transactions with the `useGetWebsocketEvent` hook.\n\nThere are 2 ways of reading the user current state: hooks (to be used inside components and for reacting to changes in the data) and simple functions (for reading data outside of React components or inside handlers).\n\n- hooks: `useGetLoginInfo, useGetAccountInfo, useGetNetworkConfig, useGetWebsocketEvent`;\n- functions: `getAccount, getAccountBalance, getAccountShard, getAddress, getIsLoggedIn;`\n\n</details>\n\n## Transactions\n\nThe sdk-dapp library exposes a straight-forward way of sending transactions and tracking their status, with a couple of handy UI components;\n\n<details><summary>\nSending Transactions\n  </summary>\n\n### Sending Transactions\n\nThe API for sending transactions is a function called **sendTransactions**:\n\n`import { sendTransactions } from \"@multiversx/sdk-dapp\";`\n\nIt can be used to send a transaction with minimum information:\n\n```typescript\nconst { sessionId, error } = await sendTransactions({\n    transactions: [\n        {\n          value: '1000000000000000000',\n          data: 'ping',\n          receiver: contractAddress\n        },\n      ],\n    callbackRoute?: string // (optional, defaults to window.location.pathname) the route to be redirected to after signing. Will not redirect if the user is already on the specified route;\n    transactionsDisplayInfo: TransactionsDisplayInfoType // (optional, default to null) custom message for toasts texts;\n    minGasLimit?: number (optional, defaults to 50_000);\n    sessionInformation?: any (optional, defaults to null) extra sessionInformation that will be passed back to you via getSignedTransactions hook;\n    signWithoutSending?: boolean // (optional, defaults to false), the transaction will be signed without being sent to the blockchain;\n    completedTransactionsDelay?: number // delay the transaction status from going into \"successful\" state;\n    redirectAfterSigning?: boolean // (optional, defaults to true), whether to redirect to the provided callbackRoute;\n    });\n```\n\nIt returns a Promise that will be fulfilled with `{error?: string; sessionId: string | null;}`\n\n`sessionId` is the transaction's batch id which can be used to track a transaction's status and react to it.\n\n**Important! For the transaction to be signed, you will have to use either `SignTransactionsModals` defined above, in the `Prerequisites` section,\nor the `useSignTransactions` hook defined below. If you don't use one of these, the transactions won't be signed**\n\n</details>\n\n<details>\n<summary>\nSending sync transactions in batches (batch transactions mechanism)\n</summary>\n\n### Sending transactions synchronously in batches\n\nThe API for sending sync transactions is a function called **sendBatchTransactions**:\n\n`import { sendBatchTransactions } from \"@multiversx/sdk-dapp/services/transactions/sendBatchTransactions\";`\n\nIt can be used to send a group of transactions (that ca be synchronized) with minimum information:\n\n\n```typescript\nconst { batchId, error } = await sendBatchTransactions({\n    transactions: [\n      [\n        {\n          value: '1000000000000000000',\n          data: 'tx1',\n          receiver: receiverAddress\n        },\n      ],\n      [\n        {\n          value: '1000000000000000000',\n          data: 'tx2',\n          receiver: receiverAddress\n        },\n        {\n          value: '1000000000000000000',\n          data: 'tx3',\n          receiver: receiverAddress\n        },\n      ]\n    ],\n  /**\n   * the route to be redirected to after signing. Will not redirect if the user is already on the specified route\n   * @default window.location.pathname\n   */\n  callbackRoute?: string;\n  /**\n   * custom message for toasts texts\n   * @default null\n   */\n  transactionsDisplayInfo: TransactionsDisplayInfoType;\n  /**\n   * Minimum amount of gas in order to process the transaction.\n   * @default 50_000\n   */\n  minGasLimit?: number (optional, defaults to 50_000);\n  /**\n   * Contains extra sessionInformation that will be passed back via getSignedTransactions hook\n   */\n  sessionInformation?: any (optional, defaults to null)\n  /**\n   * The transactions will be signed without being sent to the blockchain\n   */\n  signWithoutSending?: boolean;\n  /**\n   * Delay the transaction status from going into \"successful\" state\n   */\n  completedTransactionsDelay?: number;\n  /**\n   * If true, redirects to the provided callbackRoute\n   */\n  redirectAfterSigning?: boolean;\n  });\n```\n\nIt returns a Promise that will be fulfilled with `{error?: string; batchId: string | null;}`\n\n- `batchId` is the transactions' batch id used to send the batch to the batch service and to track the transactions status and react to it. This is composed by the `sessionId` (received after signing) and the user address. Eg. `12123423123-erd1address...`.\n- `error` is the error that can appear during the signing/sending process.\n\n### How to synchronize transactions ?\n`sendBatchTransactions` accepts an argument `transactions` which is an array of transactions arrays.\nEach transaction array will be sent to the blockchain in the order they are provided.\nHaving the example above, the transactions will be sent in the following order:\n- `tx1`\n- `tx2, tx3`\n\n`tx1` will be sent first, waits until is completed, then `tx2` and `tx3` will be sent in parallel. This means that the groups are sent synchronously, but the transactions inside a group are sent in parallel.\n\n** Important! This function will send the transactions automatically in batches, based on the provided transactions array, immediately after signing.\nIf you do not want them to be sent automatically, but on demand, then you should use send callback exposed by the `useSendBatchTransactions` hook.\nBe sure to save the `sessionId` passed to the batch. We recommend to generate a new sessionId like this: `Date.now().toString();` **\n\n```typescript\nimport { sendBatchTransactions } from '@multiversx/sdk-dapp/services/transactions/sendBatchTransactions';\nimport { useSendBatchTransactions } from '@multiversx/sdk-dapp/hooks/transactions/batch/useSendBatchTransactions';\n\n\nconst { send: sendBatchToBlockchain } = useSendBatchTransactions();\n\n// Use signWithoutSending: true to sign the transactions without sending them to the blockchain\nsendBatchTransactions({\n  transactions,\n  signWithoutSending: true,\n  callbackRoute: window.location.pathname,\n  redirectAfterSign: true\n});\n\nconst { error, batchId, data } = await sendBatchToBlockchain({\n  transactions,\n  sessionId\n});\n```\n\n**Important! For the transaction to be signed, you will have to use either `SignTransactionsModals` defined above, in the `Prerequisites` section,\nor the `useSignTransactions` hook defined below. If you don't use one of these, the transactions won't be signed**\n\n</details>\n\n<details>\n<summary>\nTransaction Signing Flow\n</summary>\n\n### Transaction Signing Flow\n\nOnce a transaction has been submitted, you have to use either the `SignTransactionsModals` or the `useSignTransactions` hook,\nfor the user to be prompted in his provider (Extension, xPortal App etc) to sign the transaction.\n\nIf you don't want to use the default modals that appear for the user when the signing process happens,\nyou have to use the `useSignTransactions` hook to sign those transactions.\n\n```typescript\nconst {\n  callbackRoute,\n  transactions,\n  error,\n  sessionId,\n  onAbort,\n  hasTransactions,\n  canceledTransactionsMessage\n} = useSignTransactions();\n```\n\nThis hook will let you know if there are any transactions and you can programmatically abort the signing process.\n\nWe suggest displaying a message on the screen that confirms the transaction that needs to be signed.\n\nYou can also get the provider via\n\n```typescript\nconst { providerType, provider } = useGetAccountProvider();\n```\n\nand use that to display an appropriate message to the user.\n\nFor ledger, signing a transaction is simple if you're using the `SignTransactionsModal` component.\n\nIt is fully customizable and will take care of walking the user through the signing flow.\n\nIf, however, you want to implement a different experience, you will have to use the `useSignTransactionsWithLedger` hook.\n\nit accepts the following props:\n\n```typescript\n{\n  onCancel: () => void;\n}\n```\n\nand returns an object with the following keys:\n\n```typescript\n{\n  onSignTransaction: () => void;\n  onNext: () => void;\n  onPrev: () => void;\n  waitingForDevice: boolean;\n  onAbort: (e: React.MouseEvent) => void;\n  isLastTransaction: boolean;\n  currentStep: number;\n  signedTransactions?: Record<string, Transaction>;\n  currentTransaction: {\n      transaction: Transaction;\n      transactionTokenInfo: {\n          tokenId: string;\n          amount: string;\n          receiver: string;\n          type?: string;\n          nonce?: string;\n          multiTxData?: string;\n      };\n      isTokenTransaction: boolean;\n      tokenDecimals: number;\n      dataField: string;\n  };\n  }\n```\n\n</details>\n\n<details><summary>\nTracking a transaction\n  </summary>\n\n### Tracking a transaction\n\nThe library has a built-in implementation for tracking the transactions sent normally or synchronously via batch transactions.\nAlso, exposes a hook called `useTrackTransactionStatus`;\n\n### 1. Built-in tracking\n\nThere is a `TransactionTracker` component that is used to track transactions. It is used by default in the `DappProvider` component.\nThis component is using the `useTransactionsTracker` and `useBatchTransactionsTracker` hooks to track the transactions.\n\n`useTransactionsTracker` - track transactions sent normally\n`useBatchTransactionsTracker` track batch transactions\n\nThe developers are be able to create their own implementation for the transaction tracking component (using these hooks or creating their own logic) and pass it to the `DappProvider` component through `customComponents` field.\n\n```jsx\nimport { TransactionsTracker } from \"your/module\";\n<DappProvider\n  environment={environment}\n  customNetworkConfig={{\n    name: 'customConfig',\n    apiTimeout,\n    walletConnectV2ProjectId\n  }}\n  customComponents={{\n    transactionTracker: {\n      component: TransactionsTracker,\n      props: {\n        onSuccess: (sessionId) => {\n          console.log(`Session ${sessionId} successfully completed`);\n        },\n        onFail: (sessionId, errorMessage) => {\n          if (errorMessage) {\n            console.log(`Session ${sessionId} failed, ${errorMessage}`);\n            return;\n          }\n\n          console.log(`Session ${sessionId} failed`);\n        }\n      }\n    }\n  }}\n>\n````\nThe props passed to the `TransactionsTracker` component are:\n```typescript\nexport interface TransactionsTrackerType {\n  getTransactionsByHash?: GetTransactionsByHashesType;\n  onSuccess?: (sessionId: string | null) => void;\n  onFail?: (sessionId: string | null, errorMessage?: string) => void;\n}\n```\nAlso, the same props can be passed to the `useTransactionsTracker` and `useBatchTransactionsTracker` hooks.\n\n```typescript\nimport { useBatchTransactionsTracker } from 'hooks/transactions/batch/tracker/useBatchTransactionsTracker';\nimport { useTransactionsTracker } from 'hooks/transactions/useTransactionsTracker';\n\nconst props = {\n  onSuccess: (sessionId) => {\n    console.log(`Session ${sessionId} successfully completed`);\n  },\n  onFail: (sessionId, errorMessage) => {\n    if (errorMessage) {\n      console.log(`Session ${sessionId} failed, ${errorMessage}`);\n      return;\n    }\n\n    console.log(`Session ${sessionId} failed`);\n  }\n};\n\nuseTransactionsTracker(props);\nuseBatchTransactionsTracker(props);\n```\n\nThe transactions trackers will automatically update the transactions statuses in the store. This functionality is used by the `TransactionToastList` component to display the transactions statuses.\n\n### 2. Tracking transaction status\n\n```typescript\nimport {useTrackTransactionStatus} from @multiversx/sdk-dapp/hooks;\n\nconst transactionStatus = useTrackTransactionStatus({\n  transactionId: sessionId,\n  onSuccess,\n  onFail,\n  onCancelled,\n});\n```\n\ntransactionStatus has the following information about the transaction:\n\n```typescript\n{\n  isPending,\n    isSuccessful,\n    isFailed,\n    isCancelled,\n    errorMessage,\n    status,\n    transactions;\n}\n```\n\nIt's safe to pass in `null` as a sessionId, so if the transaction wasn't yet sent, the hook will just return an empty object.\n\n</details>\n\n<details><summary>\nTracking transactions' statuses\n  </summary>\n\n### Tracking transactions' statuses\n\nsdk-dapp also exposes a number of handy hooks for tracking all, pending, failed, successful and timed out transactions.\n\nUse:\n\n- `useGetPendingTransactions` to get a list of all pending transactions.\n- `useGetSuccessfulTransactions` to get a list of all successful transactions.\n- `useGetFailedTransactions` to get a list of all pending transactions.\n\nAn especially useful hook called `useGetActiveTransactionsStatus` will keep you updated with the status\nof all transactions at a certain point in time.\n\nit's return signature is\n\n```typescript\n{\n  pending: boolean, // at least one transaction is pending;\n  hasPendingTransactions: boolean, // the user has at least 1 pending transaction active;\n  timedOut: boolean, // there are no pending transactions and at least one has timed out;\n  fail: boolean, // there are no pending and no timedOut transactions and at least one has failed;\n  success: boolean, // all transactions are successful and all smart contract calls have been processed successfully;\n}\n```\n\n</details>\n\n  <details><summary>\nTransaction Toasts UI\n  </summary>\n\n### Transaction Toasts UI\n\nsdk-dapp also exposes a toast component for tracking transactions that uses the above mentioned hooks and displays toasts with transactions statuses.\n\nThe toasts list is exposed via **TransactionsToastList** UI component and can be used just by rendering it inside the application.\n`TransactionToastList` component renders also custom toasts. A custom toast can be added using the util function: `addNewCustomToast` and can be removed using `deleteCustomToast`\n\nWhen `TransactionToastList` is also used for displaying custom toasts, is enough to call `addNewCustomToast` to add new custom toast to the list;\n\n```jsx\n<App>\n  <Router />\n  <TransactionsToastList />\n</App>\n```\n\n**Important**: This has to be inside the `<DappProvider/>` children.\n\nIn case you don't want to use `TransactionToastList` and just display a custom toast, then you have to import `CustomToast` component\n\n```jsx\nconst customToast = addNewCustomToast(\n  {\n    toastId: 'toast-id',\n    message: '',\n    type: 'custom',\n    duration: 2000\n  }\n);\n\n<CustomToast\n  {...customToast}\n  onDelete: () => deleteCustomToast(toastId)\n />\n```\n\n</details>\n\n  <details><summary>\nRemoving transactions manually\n  </summary>\n\n### Removing transactions manually\n\nsdk-dapp takes care to change transactions' statuses and removes them when needed,\nbut if you need to do this manually, you can use the exposed functions for this:\n\n```typescript\nremoveTransactionsToSign(sessionId);\nremoveSignedTransaction(sessionId);\nremoveAllTransactionsToSign();\nremoveAllSignedTransactions();\n```\n\n</details>\n\n# Unit testing with Jest\n\nThe sdk-dapp library exposes bundles for both CommonJS and ESModules, however, in some environments, Jest might require manual mapping of the CommonJS output. To implement it, add the following snippet inside your jest config file.\n\n```javascript\nmoduleNameMapper: {\n    '@multiversx/sdk-dapp/(.*)':\n      '<rootDir>/node_modules/@multiversx/sdk-dapp/__commonjs/$1.js'\n}\n```\n\n# sdk-dapp exports\n\nSince version 2.0, sdk-dapp does not have a default export object.\nYou have to import everything from its own separate module. Below you can find all the exports.\n\nYou can either import everything from a module, or if you really want to make sure you're not importing anything\nthat is not used, you can import everything from its own file.\n\nYou can either go into their specific folder in the module for extra trimming, or import everything together.\n\nfor example, these 2 imports are both valid:\n\n```typescript\nimport {\n  useExtensionLogin,\n  useGetAccountInfo\n} from '@multiversx/sdk-dapp/hooks';\n```\n\nand\n\n```typescript\nimport { useExtensionLogin } from '@multiversx/sdk-dapp/hooks/login';\nimport { useGetAccountInfo } from '@multiversx/sdk-dapp/hooks/account';\n```\n\n## constants exports\n\n```typescript\nimport {\n  GAS_PRICE_MODIFIER,\n  GAS_PER_DATA_BYTE,\n  GAS_LIMIT,\n  GAS_PRICE,\n  DECIMALS,\n  DIGITS,\n  mnemonicWords,\n  ledgerErrorCodes,\n  fallbackNetworkConfigurations\n} from '@multiversx/sdk-dapp/constants';\n```\n\n## hooks exports\n\n### Login\n\n```typescript\nimport {\n  useExtensionLogin,\n  useLedgerLogin,\n  useWalletConnectV2Login,\n  useWebWalletLogin\n} from '@multiversx/sdk-dapp/hooks/login';\n```\n\n### Account\n\n```typescript\nimport {\n  useGetAccount, // if you only need the account as on network\n  useGetAccountInfo, // if you need all account information from store\n  useGetAccountProvider,\n  useGetLoginInfo,\n  useGetWebsocketSignalTimestamp // get a Date.now() timestamp every time a change occurs on the account on network\n} from '@multiversx/sdk-dapp/hooks/account';\n```\n\n### Transactions\n\n```typescript\nimport {\n  useCheckTransactionStatus,\n  useGetActiveTransactionsStatus,\n  useGetFailedTransactions,\n  useGetPendingTransactions,\n  useGetSignedTransactions,\n  useGetSignTransactionsError,\n  useGetSuccessfulTransactions,\n  useGetTokenDetails,\n  useGetTransactionDisplayInfo,\n  useParseMultiEsdtTransferData,\n  useParseSignedTransactions,\n  useSignMultipleTransactions,\n  useSignTransactions,\n  useSignTransactionsWithDevice,\n  useSignTransactionsWithLedger\n} from '@multiversx/sdk-dapp/hooks/transactions';\n```\n\n### Misc\n\n```typescript\nimport {\n  useDebounce,\n  useGetNetworkConfig,\n  useGetNotification,\n  useUpdateEffect\n} from '@multiversx/sdk-dapp/hooks';\n```\n\n## services exports\n\n```typescript\nimport {\n  removeTransactionsToSign,\n  removeSignedTransaction,\n  removeAllSignedTransactions,\n  removeAllTransactionsToSign,\n  isCrossShardTransaction,\n  sendTransactions,\n  signTransactions,\n  calcTotalFee\n} from '@multiversx/sdk-dapp/services';\n```\n\n## utils exports\n\n### Account\n\n```typescript\nimport {\n  addressIsValid,\n  getAccount,\n  getAccountBalance,\n  getAccountShard,\n  getAddress,\n  getLatestNonce,\n  getShardOfAddress,\n  refreshAccount,\n  setNonce,\n  signMessage\n} from '@multiversx/sdk-dapp/utils/account';\n```\n\n### Operations\n\n```typescript\nimport {\n  calculateFeeLimit,\n  formatAmount,\n  nominate,\n  getUsdValue\n} from '@multiversx/sdk-dapp/utils/operations';\n```\n\n### Transactions\n\n```typescript\nimport {\n  getTokenFromData,\n  isTokenTransfer,\n  parseMultiEsdtTransferData,\n  parseTransactionAfterSigning\n} from '@multiversx/sdk-dapp/utils/transactions';\n```\n\n### Validation\n\n```typescript\nimport {\n  getIdentifierType,\n  stringIsFloat,\n  stringIsInteger,\n  isContract,\n  isStringBase64\n} from '@multiversx/sdk-dapp/utils';\n```\n\n### Misc\n\n```typescript\nimport {\n  encodeToBase64,\n  decodeBase64,\n  logout,\n  getTokenFromData,\n  getIsLoggedIn,\n  isSelfESDTContract,\n  getAddressFromDataField\n} from '@multiversx/sdk-dapp/utils';\n```\n\n## Wrappers\n\n```typescript\nimport {\n  DappProvider,\n  AuthenticatedRoutesWrapper,\n  AppInitializer\n} from '@multiversx/sdk-dapp/wrappers';\n```\n\n## Web-specific imports\n\n```typescript\nimport { useIdleTimer } from '@multiversx/sdk-dapp/web';\n```\n\n## UI\n\n```typescript\nimport {\n  CopyButton,\n  FormatAmount,\n  ExplorerLink,\n  ExtensionLoginButton,\n  LedgerLoginButton,\n  LedgerLoginContainer,\n  NotificationModal,\n  PageState,\n  ProgressSteps,\n  SignTransactionsModals,\n  SignWithDeviceModal,\n  SignWithExtensionModal,\n  SignWithLedgerModal,\n  TransactionsToastList,\n  TransactionToast,\n  Trim,\n  UsdValue,\n  WalletConnectLoginButton,\n  WalletConnectLoginContainer,\n  WebWalletLoginButton\n} from '@multiversx/sdk-dapp/UI';\n```\n\nor\n\n```typescript\nimport { CopyButton } from '@multiversx/sdk-dapp/UI/CopyButton';\nimport { FormatAmount } from '@multiversx/sdk-dapp/UI/FormatAmount';\nimport { ExplorerLink } from '@multiversx/sdk-dapp/UI/ExplorerLink';\n\netc;\n```\n\n**Important**: `shouldRenderDefaultCss` was removed from all components.\n\n## React Native support\n\nWe are aware that there are projects out there that would like to use this library to allow users to seamlessly authenticate with the xPortal App.\n\nYou can use this library for its utility functions, like \"formatAmount, parseAmount\", mnemonic words list or its constants.\n\nHowever, certain architectural decisions that we made do not work out of the box with React Native runtime (neither Metro nor Re.pack).\nDue to this, you cannot yet use the DappProvider wrapping logic in a React Native application.\n\nWe have a couple of solutions in mind and are actively working on exploring ways to overcome these limitations.\nUntil then, you can use @multiversx/erdjs libraries and @walletconnect to connect to the xPortal App.\nThere are also guide for doing this from the [community](https://github.com/S4F-IT/maiar-integration/blob/master/README.md)\n\n## Next.js support\n\nIf you are using [Next.js](https://nextjs.org/), make sure to check out the [README](https://github.com/multiversx/mx-template-nextjs-dapp/blob/main/README.md) and implementation of the [Next.js Template dApp](https://github.com/multiversx/mx-template-nextjs-dapp).\n\n## WalletConnect 2.0 Setup\n\nStarting with the 2.0 version of the dApp SDK ( previously `@elrondnetwork/dapp-core@2.0.0` ) and `@multiversx/sdk-dapp@2.2.8` [WalletConnect 2.0](https://docs.walletconnect.com/2.0/) is available as a login and signing provider, allowing users to login by scanning a QR code with the Mobile App\n\nThis is an implementation of [sdk-wallet-connect-provider](https://github.com/multiversx/mx-sdk-js-wallet-connect-provider) ( [docs](https://docs.multiversx.com/sdk-and-tools/sdk-js/sdk-js-signing-providers/#the-wallet-connect-provider) ) signing provider\n\nAs a ProjectID is needed for the complete functionality, the following change is needed:\n\n### Set the `walletConnectV2ProjectId`\n\nIn the [DappProvider](#dappprovider) wrapper a `walletConnectV2ProjectId` must be provided in the `customNetworkConfig`\n\nThe Project ID can be generated for free here: [https://cloud.walletconnect.com/sign-in](https://cloud.walletconnect.com/sign-in)\n\n```jsx\n<DappProvider\n    environment=\"devnet\"\n    customNetworkConfig={{\n      name: 'customConfig',\n      walletConnectV2ProjectId: '9b1a9564f91...'\n    }}\n>\n```\n\nThe WalletConnect Project ID grants you access to the [WalletConnect Cloud Relay](https://docs.walletconnect.com/2.0/cloud/relay) that securely manages communication between the device and the dApp.\n\nIf the Project ID is valid, the new functionality will work out of the box with the [Transactions and Message signing](#transactions) flows.\n\n## Roadmap\n\nSee the [open issues](https://github.com/multiversx/mx-sdk-dapp/issues) for a list of proposed features (and known issues).\n\n## Contributing\n\nContributions are what make the open source community such an amazing place to be learn, inspire, and create. Any contributions you make are **greatly appreciated**.\n\nOne can contribute by creating _pull requests_, or by opening _issues_ for discovered bugs or desired features.\n\n1. Fork the Project\n2. Create your Feature Branch (`git checkout -b feature/AmazingFeature`)\n3. Commit your Changes (`git commit -m 'Add some AmazingFeature'`)\n4. Push to the Branch (`git push origin feature/AmazingFeature`)\n5. Open a Pull Request\n\n## License\n\nGPL-3.0-or-later\n","readmeFilename":"README.md"}