From 8d99f2456d53cb0f31b11f225882e8e5881bc7de Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 2 Mar 2023 19:51:56 +0200 Subject: [PATCH 1/6] implement webview provider --- README.md | 2 +- package-lock.json | 303 ++++++++++++++++++++++++++- package.json | 3 +- src/AuthProviders/WebviewProvider.ts | 168 +++++++++++++++ src/WebviewTransport.ts | 102 +++++++++ src/types/index.ts | 35 ++++ src/utils/webview.ts | 82 ++++++++ 7 files changed, 689 insertions(+), 6 deletions(-) create mode 100644 src/AuthProviders/WebviewProvider.ts create mode 100644 src/WebviewTransport.ts create mode 100644 src/utils/webview.ts diff --git a/README.md b/README.md index 814a037..7de4a3e 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ const authSignature = provider.getSignature(); Event listeners can be set for login/logout events. ```typescript -import {WalletConnectProviderFactory} from "./WalletConnectProviderFactory"; +import {WalletConnectProviderFactory} from "@elrond-giants/erdjs-auth"; const provider = new WalletConnectProviderFactory("devnet").createProvider(); diff --git a/package-lock.json b/package-lock.json index 34d0bb5..9d4fe93 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,6 +9,7 @@ "version": "0.5.0", "license": "GPL-3.0-or-later", "dependencies": { + "@multiversx/sdk-core": "^11.4.1", "@multiversx/sdk-extension-provider": "^2.0.7", "@multiversx/sdk-hw-provider": "^3.0.3", "@multiversx/sdk-wallet": "^3.0.0", @@ -180,6 +181,35 @@ "node": ">=8.9.0" } }, + "node_modules/@multiversx/sdk-core": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-11.4.1.tgz", + "integrity": "sha512-kGnSoEcygBUpOABJgpJIbeRBptQ54xq/OVHcw/pOAi0koLJHgu4xiwPihcsxMJ4jWN4PrWDy+zMo/ypeozYVGg==", + "dependencies": { + "@multiversx/sdk-transaction-decoder": "1.0.2", + "bech32": "1.1.4", + "bignumber.js": "9.0.1", + "blake2b": "2.1.3", + "buffer": "6.0.3", + "json-duplicate-key-handle": "1.0.0", + "keccak": "3.0.2", + "protobufjs": "6.11.3" + } + }, + "node_modules/@multiversx/sdk-core/node_modules/keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "hasInstallScript": true, + "dependencies": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": ">=10.0.0" + } + }, "node_modules/@multiversx/sdk-extension-provider": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@multiversx/sdk-extension-provider/-/sdk-extension-provider-2.0.7.tgz", @@ -200,6 +230,19 @@ "platform": "1.3.6" } }, + "node_modules/@multiversx/sdk-transaction-decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-transaction-decoder/-/sdk-transaction-decoder-1.0.2.tgz", + "integrity": "sha512-j43QsKquu8N51WLmVlJ7dV2P3A1448R7/ktvl8r3i6wRMpfdtzDPNofTdHmMRT7DdQdvs4+RNgz8hVKL11Etsw==", + "dependencies": { + "bech32": "^2.0.0" + } + }, + "node_modules/@multiversx/sdk-transaction-decoder/node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + }, "node_modules/@multiversx/sdk-wallet": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@multiversx/sdk-wallet/-/sdk-wallet-3.0.0.tgz", @@ -236,6 +279,60 @@ "qs": "6.10.3" } }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "dependencies": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "node_modules/@stablelib/aead": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", @@ -402,11 +499,15 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" }, + "node_modules/@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "node_modules/@types/node": { "version": "18.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz", - "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==", - "peer": true + "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==" }, "node_modules/@walletconnect/browser-utils": { "version": "1.8.0", @@ -1072,6 +1173,11 @@ "node": ">=8.0.0" } }, + "node_modules/backslash": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/backslash/-/backslash-0.2.0.tgz", + "integrity": "sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A==" + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -1101,6 +1207,14 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, + "node_modules/bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==", + "engines": { + "node": "*" + } + }, "node_modules/binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -1828,6 +1942,14 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/json-duplicate-key-handle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-duplicate-key-handle/-/json-duplicate-key-handle-1.0.0.tgz", + "integrity": "sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw==", + "dependencies": { + "backslash": "^0.2.0" + } + }, "node_modules/keccak": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", @@ -1880,6 +2002,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "node_modules/loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -2162,6 +2289,31 @@ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" }, + "node_modules/protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "hasInstallScript": true, + "dependencies": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + }, + "bin": { + "pbjs": "bin/pbjs", + "pbts": "bin/pbts" + } + }, "node_modules/qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", @@ -2876,6 +3028,33 @@ "resolved": "https://registry.npmjs.org/@multiversx/sdk-bls-wasm/-/sdk-bls-wasm-0.3.5.tgz", "integrity": "sha512-c0tIdQUnbBLSt6NYU+OpeGPYdL0+GV547HeHT8Xc0BKQ7Cj0v82QUoA2QRtWrR1G4MNZmLsIacZSsf6DrIS2Bw==" }, + "@multiversx/sdk-core": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-core/-/sdk-core-11.4.1.tgz", + "integrity": "sha512-kGnSoEcygBUpOABJgpJIbeRBptQ54xq/OVHcw/pOAi0koLJHgu4xiwPihcsxMJ4jWN4PrWDy+zMo/ypeozYVGg==", + "requires": { + "@multiversx/sdk-transaction-decoder": "1.0.2", + "bech32": "1.1.4", + "bignumber.js": "9.0.1", + "blake2b": "2.1.3", + "buffer": "6.0.3", + "json-duplicate-key-handle": "1.0.0", + "keccak": "3.0.2", + "protobufjs": "6.11.3" + }, + "dependencies": { + "keccak": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.2.tgz", + "integrity": "sha512-PyKKjkH53wDMLGrvmRGSNWgmSxZOUqbnXwKL9tmgbFYA1iAYqW21kfR7mZXV0MlESiefxQQE9X9fTa3X+2MPDQ==", + "requires": { + "node-addon-api": "^2.0.0", + "node-gyp-build": "^4.2.0", + "readable-stream": "^3.6.0" + } + } + } + }, "@multiversx/sdk-extension-provider": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@multiversx/sdk-extension-provider/-/sdk-extension-provider-2.0.7.tgz", @@ -2896,6 +3075,21 @@ "platform": "1.3.6" } }, + "@multiversx/sdk-transaction-decoder": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@multiversx/sdk-transaction-decoder/-/sdk-transaction-decoder-1.0.2.tgz", + "integrity": "sha512-j43QsKquu8N51WLmVlJ7dV2P3A1448R7/ktvl8r3i6wRMpfdtzDPNofTdHmMRT7DdQdvs4+RNgz8hVKL11Etsw==", + "requires": { + "bech32": "^2.0.0" + }, + "dependencies": { + "bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==" + } + } + }, "@multiversx/sdk-wallet": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@multiversx/sdk-wallet/-/sdk-wallet-3.0.0.tgz", @@ -2932,6 +3126,60 @@ "qs": "6.10.3" } }, + "@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "requires": { + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" + } + }, + "@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, "@stablelib/aead": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@stablelib/aead/-/aead-1.0.1.tgz", @@ -3098,11 +3346,15 @@ "resolved": "https://registry.npmjs.org/@tsconfig/node16/-/node16-1.0.3.tgz", "integrity": "sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ==" }, + "@types/long": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/long/-/long-4.0.2.tgz", + "integrity": "sha512-MqTGEo5bj5t157U6fA/BiDynNkn0YknVdh48CMPkTSpFTVmvao5UQmm7uEF6xBEo7qIMAlY/JSleYaE6VOdpaA==" + }, "@types/node": { "version": "18.14.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-18.14.2.tgz", - "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==", - "peer": true + "integrity": "sha512-1uEQxww3DaghA0RxqHx0O0ppVlo43pJhepY51OxuQIKHpjbnYLA7vcdwioNPzIqmC2u3I/dmylcqjlh0e7AyUA==" }, "@walletconnect/browser-utils": { "version": "1.8.0", @@ -3750,6 +4002,11 @@ "resolved": "https://registry.npmjs.org/atomic-sleep/-/atomic-sleep-1.0.0.tgz", "integrity": "sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ==" }, + "backslash": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/backslash/-/backslash-0.2.0.tgz", + "integrity": "sha512-Avs+8FUZ1HF/VFP4YWwHQZSGzRPm37ukU1JQYQWijuHhtXdOuAzcZ8PcAzfIw898a8PyBzdn+RtnKA6MzW0X2A==" + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3765,6 +4022,11 @@ "resolved": "https://registry.npmjs.org/bech32/-/bech32-1.1.4.tgz", "integrity": "sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==" }, + "bignumber.js": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/bignumber.js/-/bignumber.js-9.0.1.tgz", + "integrity": "sha512-IdZR9mh6ahOBv/hYGiXyVuyCetmGJhtYkqLBpTStdhEGjegpPlUawydyaF3pbIOFynJTpllEs+NP+CS9jKFLjA==" + }, "binary-extensions": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", @@ -4302,6 +4564,14 @@ "argparse": "^2.0.1" } }, + "json-duplicate-key-handle": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-duplicate-key-handle/-/json-duplicate-key-handle-1.0.0.tgz", + "integrity": "sha512-OLIxL+UpfwUsqcLX3i6Z51ChTou/Vje+6bSeGUSubj96dF/SfjObDprLy++ZXYH07KITuEzsXS7PX7e/BGf4jw==", + "requires": { + "backslash": "^0.2.0" + } + }, "keccak": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/keccak/-/keccak-3.0.1.tgz", @@ -4338,6 +4608,11 @@ "is-unicode-supported": "^0.1.0" } }, + "long": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", + "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + }, "loupe": { "version": "2.3.6", "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.6.tgz", @@ -4553,6 +4828,26 @@ "resolved": "https://registry.npmjs.org/process-warning/-/process-warning-1.0.0.tgz", "integrity": "sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q==" }, + "protobufjs": { + "version": "6.11.3", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-6.11.3.tgz", + "integrity": "sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==", + "requires": { + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/long": "^4.0.1", + "@types/node": ">=13.7.0", + "long": "^4.0.0" + } + }, "qs": { "version": "6.10.3", "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", diff --git a/package.json b/package.json index 4a25053..e6d1fd3 100644 --- a/package.json +++ b/package.json @@ -16,11 +16,12 @@ "author": "ElrondGiants", "license": "GPL-3.0-or-later", "dependencies": { + "@multiversx/sdk-core": "^11.4.1", "@multiversx/sdk-extension-provider": "^2.0.7", "@multiversx/sdk-hw-provider": "^3.0.3", "@multiversx/sdk-wallet": "^3.0.0", - "@multiversx/sdk-web-wallet-provider": "^2.2.1", "@multiversx/sdk-wallet-connect-provider": "^3.1.0", + "@multiversx/sdk-web-wallet-provider": "^2.2.1", "tslib": "^2.4.0" }, "devDependencies": { diff --git a/src/AuthProviders/WebviewProvider.ts b/src/AuthProviders/WebviewProvider.ts new file mode 100644 index 0000000..eb00478 --- /dev/null +++ b/src/AuthProviders/WebviewProvider.ts @@ -0,0 +1,168 @@ +import { + AuthProviderType, + EventHandler, + EventType, + IAuthProvider, + IAuthState, + IEventBus, + Transaction, + WebViewProviderRequestEnums, + WebViewProviderResponseEnums +} from "../types"; +import WebviewTransport from "../WebviewTransport"; +import {Transaction as CoreTx} from "@multiversx/sdk-core" +import {decodeAuthToken} from "../utils/webview"; + +export default class WebviewProvider implements IAuthProvider { + private token: string | null = null; + private webviewNetwork = new WebviewTransport(); + private address: string | null = null; + private signature: string | null = null; + + constructor(private eventBus: IEventBus) { } + + getAddress(): string | null { + return this.address; + } + + getBaseProvider(): any { + } + + getSignature(): string | null { + return this.signature; + } + + getType(): AuthProviderType { + return AuthProviderType.WEBVIEW; + } + + init(): Promise { + if (window !== undefined) { + const params = new URLSearchParams(window.location.search); + const token = params.get("accessToken"); + if (!token) { + return Promise.resolve(false); + } + this.doLogin(token); + return Promise.resolve(true); + } + + return Promise.resolve(false); + } + + async login(token?: string): Promise { + const getAccessToken = () => new Promise((resolve, reject) => { + this.webviewNetwork.on( + WebViewProviderResponseEnums.loginResponse, + (message: any) => { + const {accessToken, error} = message; + if (error) { + reject(error); + } else { + resolve(accessToken); + } + } + ); + }); + this.webviewNetwork.post(WebViewProviderRequestEnums.loginRequest); + try { + const accessToken = await getAccessToken(); + + return this.doLogin(accessToken); + } catch (e) { + console.error(e); + throw e; + } finally { + this.webviewNetwork.off(WebViewProviderResponseEnums.loginResponse); + } + } + + doLogin(accessToken: string): string { + if (!accessToken) {return "";} + this.token = accessToken; + // todo decode token and get address and signature + const _token = decodeAuthToken(accessToken); + if (!_token) {return "";} + const {signature, address} = _token; + this.address = address; + this.signature = signature; + + this.eventBus.emit("login", {}); + + return address; + } + + logout(): Promise { + this.webviewNetwork.post(WebViewProviderRequestEnums.logoutRequest); + this.token = null; + this.address = null; + this.signature = null; + + this.eventBus.emit("logout", {}); + + return Promise.resolve(true); + } + + on(event: EventType, handler: EventHandler): void { + this.eventBus.subscribe(event, handler); + } + + off(event: EventType, handler: EventHandler): void { + this.eventBus.unsubscribe(event, handler); + } + + async signTransaction(tx: Transaction): Promise { + const txs = await this.signTransactions([tx]); + + return txs[0]; + } + + async signTransactions(transactions: Transaction[]): Promise { + const signTxs = () => new Promise((resolve, reject) => { + (window as any).transactionsSigned = (txs: any, error: string) => { + if (error) { + reject(error); + (window as any).transactionsSigned = null; + return; + } + const signedTxs = JSON.parse(txs); + resolve(signedTxs.map((tx: any) => CoreTx.fromPlainObject(tx))); + (window as any).transactionsSigned = null; + }; + + this.webviewNetwork.on( + WebViewProviderResponseEnums.signTransactionsResponse, + (message: any) => { + const {transactions, error} = message; + if (error) { + reject(error); + } else { + resolve(transactions.map((tx: any) => CoreTx.fromPlainObject(tx))); + } + } + ); + }); + + try { + this.webviewNetwork.post( + WebViewProviderRequestEnums.signTransactionsRequest, + transactions + ); + + return await signTxs(); + } catch (e) { + throw e; + } finally { + this.webviewNetwork.off(WebViewProviderResponseEnums.signTransactionsResponse); + } + } + + toJson(): IAuthState { + return { + address: this.address, + authenticated: !!this.address, + authProviderType: this.getType(), + }; + } + +}; diff --git a/src/WebviewTransport.ts b/src/WebviewTransport.ts new file mode 100644 index 0000000..92b0977 --- /dev/null +++ b/src/WebviewTransport.ts @@ -0,0 +1,102 @@ +import {WebviewPlatforms, WebViewProviderRequestEnums, WebViewProviderResponseEnums} from "./types"; +import {detectPlatform} from "./utils/webview"; + +const targetOrigin = window?.parent?.origin ?? '*'; +export default class WebviewTransport { + private platform: WebviewPlatforms + private handlers = new Map void>(); + + constructor() { + this.platform = detectPlatform(); + if (typeof window === "undefined") { + (window as any).addEventListener("message", this.handleMessageEvent.bind(this)); + document.addEventListener("message", this.handleMessageEvent.bind(this)); + } + } + + on(type: WebViewProviderResponseEnums, callback: (message: any) => void) { + this.handlers.set(type, callback); + } + + off(type: WebViewProviderResponseEnums) { + this.handlers.delete(type); + } + + post(requestType: WebViewProviderRequestEnums, data?: any) { + postMessage(this.platform, requestType, data); + } + + + handleMessageEvent(event: any) { + if ( + event.target?.origin !== targetOrigin + && this.platform !== WebviewPlatforms.reactNative + ) { + return; + } + + try { + const {message, type} = JSON.parse(event.data); + if (!type) { + console.error("Message received without type"); + } + const callback = this.handlers.get(type); + if (callback) {callback(message);} + + } catch (e) { + if (e instanceof SyntaxError) { + console.error("Error parsing response."); + } + console.error("Failed to handle event."); + } + } + + disconnect() { + window.removeEventListener("message", this.handleMessageEvent.bind(this)); + document.removeEventListener("message", this.handleMessageEvent.bind(this)); + } + +}; + +const postMessage = ( + platform: WebviewPlatforms, + type: WebViewProviderRequestEnums, + message?: any +) => { + switch (platform) { + case WebviewPlatforms.ios: + return postIosMessage(type, message); + case WebviewPlatforms.reactNative: + return postReactNativeMessage(type, message); + case WebviewPlatforms.web: + return postWebMessage(type, message); + default: + const unreachable = (): never => {throw "Unreachable assert failed."} + return unreachable(); + } +}; + +const postReactNativeMessage = (type: WebViewProviderRequestEnums, message?: any) => { + (window as any).ReactNativeWebView.postMessage(JSON.stringify(type, message)); +}; + +const postWebMessage = (type: WebViewProviderRequestEnums, message?: any) => { + (window as any).postMessage(JSON.stringify(type, message), targetOrigin); +}; + +const postIosMessage = (type: WebViewProviderRequestEnums, message?: any) => { + const methodWords = type.split("_").map((s, i) => { + let word = s.toLowerCase(); + if (i < 1) {return word;} + + return word.charAt(0).toUpperCase() + word.slice(1); + }); + methodWords.pop(); // remove "Request" word + const method = methodWords.join(""); + if (type === WebViewProviderRequestEnums.signTransactionsRequest) { + (window as any).webkit.messageHandlers[method].postMessage(message, targetOrigin); + } else { + (window as any).webkit.messageHandlers[method].postMessage(message); + } + +}; diff --git a/src/types/index.ts b/src/types/index.ts index 924c90b..786f034 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -17,6 +17,7 @@ export enum AuthProviderType { EXTENSION = "extension", LEDGER = "ledger", PEM = "pem", + WEBVIEW = "webview", NONE = "none", } @@ -96,3 +97,37 @@ export interface IEventBus { emit(key: EventType, payload: any): void; } + +export enum WebviewPlatforms { + ios = 'ios', + reactNative = 'reactNative', + web = 'web' +} + +export enum WebViewProviderRequestEnums { + signTransactionsRequest = 'SIGN_TRANSACTIONS_REQUEST', + signMessageRequest = 'SIGN_MESSAGE_REQUEST', + loginRequest = 'LOGIN_REQUEST', + logoutRequest = 'LOGOUT_REQUEST', + reloginRequest = 'RELOGIN_REQUEST' +} + +export enum WebViewProviderResponseEnums { + signTransactionsResponse = 'SIGN_TRANSACTIONS_RESPONSE', + signMessageResponse = 'SIGN_MESSAGE_RESPONSE', + loginResponse = 'LOGIN_RESPONSE', + reloginResponse = 'RELOGIN_RESPONSE' +} + +export type DecodedLoginTokenType = { + blockHash: string; + extraInfo?: { timestamp?: number }; + origin: string; + ttl: number; +} + +export type AuthToken = { + address: string; + body: string; + signature: string; +} & DecodedLoginTokenType; \ No newline at end of file diff --git a/src/utils/webview.ts b/src/utils/webview.ts new file mode 100644 index 0000000..3186a73 --- /dev/null +++ b/src/utils/webview.ts @@ -0,0 +1,82 @@ +import {AuthToken, DecodedLoginTokenType, WebviewPlatforms} from "../types"; + +const isString = (x: any) => Object.prototype.toString.call(x) === '[object String]'; + +const decodeBase64 = (s: string) => Buffer.from(s, "base64").toString(); + +export const detectPlatform = () => { + const _window = typeof window !== 'undefined' ? (window as any) : {}; + + if (_window.ReactNativeWebView) {return WebviewPlatforms.reactNative;} + if (_window.webkit) {return WebviewPlatforms.ios;} + + return WebviewPlatforms.web; +}; + +export const decodeAuthToken = (token: string): AuthToken | null => { + if (!isString(token)) {return null;} + + const parts = token.split('.'); + if (parts.length !== 3) { + console.error("Invalid native auth token"); + + return null; + } + + const [_address, _body, signature] = parts; + try { + const address = Buffer.from(_address, "base64").toString(); + const body = Buffer.from(_body, "base64").toString(); + const loginToken = decodeLoginToken(body); + if (!loginToken) { + return { + address, + body, + signature, + blockHash: '', + origin: '', + ttl: 0 + }; + } + + return { + ...loginToken, + address, + body, + signature, + }; + + } catch (e) { + return null; + } +} + +const decodeLoginToken = (loginToken: string): DecodedLoginTokenType | null => { + const parts = loginToken.split('.'); + if (parts.length !== 4) { + console.error( + 'Invalid loginToken. You may be trying to decode a nativeAuthToken. ' + + 'Try using decodeNativeAuthToken method instead' + ); + + return null; + } + + try { + const [origin, blockHash, ttl, extraInfo] = parts; + const parsedExtraInfo = JSON.parse(decodeBase64(extraInfo)); + const parsedOrigin = decodeBase64(origin); + + return { + ttl: Number(ttl), + extraInfo: parsedExtraInfo, + origin: parsedOrigin, + blockHash + }; + } catch (e) { + console.error(`Error trying to decode ${loginToken}:`, e); + + return null; + + } +}; \ No newline at end of file From 962fe079ef55d3430c7b3a1e387cccb4dd7473b7 Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 2 Mar 2023 20:00:23 +0200 Subject: [PATCH 2/6] 0.6.0-beta.0 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 9d4fe93..7544c53 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@elrond-giants/erdjs-auth", - "version": "0.5.0", + "version": "0.6.0-beta.0", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@elrond-giants/erdjs-auth", - "version": "0.5.0", + "version": "0.6.0-beta.0", "license": "GPL-3.0-or-later", "dependencies": { "@multiversx/sdk-core": "^11.4.1", diff --git a/package.json b/package.json index e6d1fd3..cf42936 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elrond-giants/erdjs-auth", - "version": "0.5.0", + "version": "0.6.0-beta.0", "description": "Easy to use MultiversX typescript Auth Providers, with a common interface.", "main": "dist/index.js", "types": "dist/index.d.js", From cb44144b80f898a0bbcdd50cd5186ff2b3bfea22 Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 2 Mar 2023 21:07:26 +0200 Subject: [PATCH 3/6] add webview provider factory --- src/AuthProviders/WebviewProvider.ts | 3 +-- src/AuthProviders/index.ts | 3 ++- src/Factories/WebviewProviderFactory.ts | 11 +++++++++++ src/Factories/index.ts | 1 + src/WebviewTransport.ts | 26 +++++++++++++------------ src/index.ts | 8 ++++++-- 6 files changed, 35 insertions(+), 17 deletions(-) create mode 100644 src/Factories/WebviewProviderFactory.ts diff --git a/src/AuthProviders/WebviewProvider.ts b/src/AuthProviders/WebviewProvider.ts index eb00478..5f69c93 100644 --- a/src/AuthProviders/WebviewProvider.ts +++ b/src/AuthProviders/WebviewProvider.ts @@ -13,7 +13,7 @@ import WebviewTransport from "../WebviewTransport"; import {Transaction as CoreTx} from "@multiversx/sdk-core" import {decodeAuthToken} from "../utils/webview"; -export default class WebviewProvider implements IAuthProvider { +export class WebviewProvider implements IAuthProvider { private token: string | null = null; private webviewNetwork = new WebviewTransport(); private address: string | null = null; @@ -80,7 +80,6 @@ export default class WebviewProvider implements IAuthProvider { doLogin(accessToken: string): string { if (!accessToken) {return "";} this.token = accessToken; - // todo decode token and get address and signature const _token = decodeAuthToken(accessToken); if (!_token) {return "";} const {signature, address} = _token; diff --git a/src/AuthProviders/index.ts b/src/AuthProviders/index.ts index ad341de..6752e71 100644 --- a/src/AuthProviders/index.ts +++ b/src/AuthProviders/index.ts @@ -2,4 +2,5 @@ export { LedgerProvider } from "./LedgerProvider"; export { ExtensionProvider } from "./ExtensionProvider"; export { WalletConnectProvider } from "./WalletConnectProvider"; -export {WebProvider} from "./WebProvider"; +export { WebProvider } from "./WebProvider"; +export { WebviewProvider } from "./WebviewProvider"; diff --git a/src/Factories/WebviewProviderFactory.ts b/src/Factories/WebviewProviderFactory.ts new file mode 100644 index 0000000..6c98aad --- /dev/null +++ b/src/Factories/WebviewProviderFactory.ts @@ -0,0 +1,11 @@ +import {IAuthProvider, IAuthProviderFactory} from "../types"; +import {WebviewProvider} from "../AuthProviders"; +import EventsBus from "../EventBus"; + +export class WebviewProviderFactory implements IAuthProviderFactory { + constructor() {} + + createProvider(): IAuthProvider { + return new WebviewProvider(new EventsBus()); + } +} \ No newline at end of file diff --git a/src/Factories/index.ts b/src/Factories/index.ts index 5ee985d..511fc93 100644 --- a/src/Factories/index.ts +++ b/src/Factories/index.ts @@ -2,4 +2,5 @@ export { WalletConnectProviderFactory } from "./WalletConnectProviderFactory"; export { WebProviderFactory } from "./WebProviderFactory"; export { LedgerProviderFactory } from "./LedgerProviderFactory"; export { ExtensionProviderFactory } from "./ExtensionProviderFactory"; +export { WebviewProviderFactory } from "./WebviewProviderFactory"; // export { PemProviderFactory } from "./PemProviderFactory"; diff --git a/src/WebviewTransport.ts b/src/WebviewTransport.ts index 92b0977..ba07ba9 100644 --- a/src/WebviewTransport.ts +++ b/src/WebviewTransport.ts @@ -1,14 +1,15 @@ import {WebviewPlatforms, WebViewProviderRequestEnums, WebViewProviderResponseEnums} from "./types"; import {detectPlatform} from "./utils/webview"; -const targetOrigin = window?.parent?.origin ?? '*'; export default class WebviewTransport { private platform: WebviewPlatforms private handlers = new Map void>(); + private targetOrigin = "*"; constructor() { + this.targetOrigin = window?.parent?.origin ?? "*"; this.platform = detectPlatform(); - if (typeof window === "undefined") { + if (typeof window !== "undefined") { (window as any).addEventListener("message", this.handleMessageEvent.bind(this)); document.addEventListener("message", this.handleMessageEvent.bind(this)); } @@ -23,13 +24,13 @@ export default class WebviewTransport { } post(requestType: WebViewProviderRequestEnums, data?: any) { - postMessage(this.platform, requestType, data); + postMessage(this.platform, requestType, this.targetOrigin, data); } handleMessageEvent(event: any) { if ( - event.target?.origin !== targetOrigin + event.target?.origin !== this.targetOrigin && this.platform !== WebviewPlatforms.reactNative ) { return; @@ -61,30 +62,31 @@ export default class WebviewTransport { const postMessage = ( platform: WebviewPlatforms, type: WebViewProviderRequestEnums, + targetOrigin: string, message?: any ) => { switch (platform) { case WebviewPlatforms.ios: - return postIosMessage(type, message); + return postIosMessage(type, targetOrigin, message); case WebviewPlatforms.reactNative: - return postReactNativeMessage(type, message); + return postReactNativeMessage(type, targetOrigin, message); case WebviewPlatforms.web: - return postWebMessage(type, message); + return postWebMessage(type, targetOrigin, message); default: const unreachable = (): never => {throw "Unreachable assert failed."} return unreachable(); } }; -const postReactNativeMessage = (type: WebViewProviderRequestEnums, message?: any) => { - (window as any).ReactNativeWebView.postMessage(JSON.stringify(type, message)); +const postReactNativeMessage = (type: WebViewProviderRequestEnums, targetOrigin: string, message?: any) => { + (window as any).ReactNativeWebView.postMessage(JSON.stringify({type, message})); }; -const postWebMessage = (type: WebViewProviderRequestEnums, message?: any) => { - (window as any).postMessage(JSON.stringify(type, message), targetOrigin); +const postWebMessage = (type: WebViewProviderRequestEnums, targetOrigin: string, message?: any) => { + window.postMessage(JSON.stringify({type, message}), targetOrigin); }; -const postIosMessage = (type: WebViewProviderRequestEnums, message?: any) => { +const postIosMessage = (type: WebViewProviderRequestEnums, targetOrigin: string, message?: any) => { const methodWords = type.split("_").map((s, i) => { let word = s.toLowerCase(); if (i < 1) {return word;} diff --git a/src/index.ts b/src/index.ts index 7e56402..b0754e9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,13 +1,17 @@ +import {WebviewProvider} from "./AuthProviders"; + export { WalletConnectProviderFactory, WebProviderFactory, ExtensionProviderFactory, - LedgerProviderFactory + LedgerProviderFactory, + WebviewProviderFactory } from "./Factories"; export { WalletConnectProvider, WebProvider, ExtensionProvider, - LedgerProvider + LedgerProvider, + WebviewProvider } from "./AuthProviders"; From b2f79b0427b22db343261a177c5c452c63d61595 Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 2 Mar 2023 21:07:37 +0200 Subject: [PATCH 4/6] 0.6.0-beta.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7544c53..2bac746 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@elrond-giants/erdjs-auth", - "version": "0.6.0-beta.0", + "version": "0.6.0-beta.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@elrond-giants/erdjs-auth", - "version": "0.6.0-beta.0", + "version": "0.6.0-beta.1", "license": "GPL-3.0-or-later", "dependencies": { "@multiversx/sdk-core": "^11.4.1", diff --git a/package.json b/package.json index cf42936..6e5305f 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elrond-giants/erdjs-auth", - "version": "0.6.0-beta.0", + "version": "0.6.0-beta.1", "description": "Easy to use MultiversX typescript Auth Providers, with a common interface.", "main": "dist/index.js", "types": "dist/index.d.js", From b5f63a542d1bd312c92004644207f02c4e273b07 Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 23 Mar 2023 12:11:19 +0200 Subject: [PATCH 5/6] fix sign tx --- src/AuthProviders/WebviewProvider.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/AuthProviders/WebviewProvider.ts b/src/AuthProviders/WebviewProvider.ts index 5f69c93..a259678 100644 --- a/src/AuthProviders/WebviewProvider.ts +++ b/src/AuthProviders/WebviewProvider.ts @@ -145,7 +145,7 @@ export class WebviewProvider implements IAuthProvider { try { this.webviewNetwork.post( WebViewProviderRequestEnums.signTransactionsRequest, - transactions + transactions.map((tx) => (tx as CoreTx).toPlainObject()) ); return await signTxs(); From 23a04506af1af443b26338c01cde6f08c05bdb7b Mon Sep 17 00:00:00 2001 From: Vlad Drinceanu Date: Thu, 23 Mar 2023 12:11:50 +0200 Subject: [PATCH 6/6] bump version --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 6e5305f..2d6af4c 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@elrond-giants/erdjs-auth", - "version": "0.6.0-beta.1", + "version": "0.6.0-beta.2", "description": "Easy to use MultiversX typescript Auth Providers, with a common interface.", "main": "dist/index.js", "types": "dist/index.d.js",