diff --git a/packages/currency/package.json b/packages/currency/package.json index 8ab594bb1..bbae5fa91 100644 --- a/packages/currency/package.json +++ b/packages/currency/package.json @@ -43,6 +43,7 @@ }, "dependencies": { "@metamask/contract-metadata": "1.31.0", + "@mysten/sui": "1.45.0", "@requestnetwork/types": "0.54.0", "@requestnetwork/utils": "0.54.0", "@ton/core": "0.61.0", diff --git a/packages/currency/src/chains/declarative/data/sui.ts b/packages/currency/src/chains/declarative/data/sui.ts new file mode 100644 index 000000000..43700dd02 --- /dev/null +++ b/packages/currency/src/chains/declarative/data/sui.ts @@ -0,0 +1 @@ +export const chainId = 'sui'; diff --git a/packages/currency/src/chains/declarative/index.ts b/packages/currency/src/chains/declarative/index.ts index 8ae254a05..48dc6b9dc 100644 --- a/packages/currency/src/chains/declarative/index.ts +++ b/packages/currency/src/chains/declarative/index.ts @@ -5,6 +5,7 @@ import * as SolanaDefinition from './data/solana'; import * as StarknetDefinition from './data/starknet'; import * as TonDefinition from './data/ton'; import * as AleoDefinition from './data/aleo'; +import * as SuiDefinition from './data/sui'; export type DeclarativeChain = CurrencyTypes.Chain; @@ -14,4 +15,5 @@ export const chains: Record implements CurrencyTypes.ICurrency return this.validateStarknetAddress(address); } else if (currency.network === 'aleo') { return this.validateAleoAddress(address); + } else if (currency.network === 'sui') { + return this.validateSuiAddress(address); } return addressValidator.validate(address, 'ETH'); case RequestLogicTypes.CURRENCY.BTC: @@ -350,6 +353,19 @@ export class CurrencyManager implements CurrencyTypes.ICurrency } } + /** + * Validate a Sui address. + * @param address + * @returns True if the address is valid, false otherwise + */ + validateSuiAddress(address: string): boolean { + try { + return !!isValidSuiAddress(address); + } catch { + return false; + } + } + /** * Returns the list of currencies supported by Request out of the box * Contains: diff --git a/packages/types/src/currency-types.ts b/packages/types/src/currency-types.ts index 6a3dd1c19..a672b6c5e 100644 --- a/packages/types/src/currency-types.ts +++ b/packages/types/src/currency-types.ts @@ -42,7 +42,7 @@ export type BtcChainName = 'mainnet' | 'testnet'; /** * List of supported Declarative chains */ -export type DeclarativeChainName = 'tron' | 'solana' | 'ton' | 'starknet' | 'aleo'; +export type DeclarativeChainName = 'tron' | 'solana' | 'ton' | 'starknet' | 'aleo' | 'sui'; /** * List of supported NEAR chains diff --git a/yarn.lock b/yarn.lock index 797f7db0e..752d44723 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,6 +2,19 @@ # yarn lockfile v1 +"@0no-co/graphql.web@^1.0.5": + version "1.2.0" + resolved "https://registry.yarnpkg.com/@0no-co/graphql.web/-/graphql.web-1.2.0.tgz#296d00581bfaaabfda1e976849d927824aaea81b" + integrity sha512-/1iHy9TTr63gE1YcR5idjx8UREz1s0kFhydf3bBLCXyqjhkIc6igAzTOx3zPifCwFR87tsh/4Pa9cNts6d2otw== + +"@0no-co/graphqlsp@^1.12.13": + version "1.15.1" + resolved "https://registry.yarnpkg.com/@0no-co/graphqlsp/-/graphqlsp-1.15.1.tgz#a8fe30d1eb2ac88380a1e23fe5aa65880179c79d" + integrity sha512-UBDBuVGpX5Ti0PjGnSAzkMG04psNYxKfJ+1bgF8HFPfHHpKNVl4GULHSNW0GTOngcYCYA70c+InoKw0qjHwmVQ== + dependencies: + "@gql.tada/internal" "^1.0.0" + graphql "^15.5.0 || ^16.0.0 || ^17.0.0" + "@aduh95/viz.js@^3.1.0": version "3.4.0" resolved "https://registry.npmjs.org/@aduh95/viz.js/-/viz.js-3.4.0.tgz" @@ -2499,6 +2512,22 @@ resolved "https://registry.npmjs.org/@gar/promisify/-/promisify-1.1.3.tgz" integrity sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw== +"@gql.tada/cli-utils@1.7.2": + version "1.7.2" + resolved "https://registry.yarnpkg.com/@gql.tada/cli-utils/-/cli-utils-1.7.2.tgz#3dcdc4baacaed8f499b65b4202fdccdaf7340273" + integrity sha512-Qbc7hbLvCz6IliIJpJuKJa9p05b2Jona7ov7+qofCsMRxHRZE1kpAmZMvL8JCI4c0IagpIlWNaMizXEQUe8XjQ== + dependencies: + "@0no-co/graphqlsp" "^1.12.13" + "@gql.tada/internal" "1.0.8" + graphql "^15.5.0 || ^16.0.0 || ^17.0.0" + +"@gql.tada/internal@1.0.8", "@gql.tada/internal@^1.0.0": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@gql.tada/internal/-/internal-1.0.8.tgz#3ba9fa6534809788bbbe103492f70b8e9d754027" + integrity sha512-XYdxJhtHC5WtZfdDqtKjcQ4d7R1s0d1rnlSs3OcBEUbYiPoJJfZU7tWsVXuv047Z6msvmr4ompJ7eLSK5Km57g== + dependencies: + "@0no-co/graphql.web" "^1.0.5" + "@graphql-codegen/cli@4.0.1": version "4.0.1" resolved "https://registry.npmjs.org/@graphql-codegen/cli/-/cli-4.0.1.tgz" @@ -4022,6 +4051,42 @@ outvariant "^1.2.1" strict-event-emitter "^0.5.1" +"@mysten/bcs@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@mysten/bcs/-/bcs-1.9.2.tgz#3bf0e30f14595c9d9e5c142e94b5646ac1318da7" + integrity sha512-kBk5xrxV9OWR7i+JhL/plQrgQ2/KJhB2pB5gj+w6GXhbMQwS3DPpOvi/zN0Tj84jwPvHMllpEl0QHj6ywN7/eQ== + dependencies: + "@mysten/utils" "0.2.0" + "@scure/base" "^1.2.6" + +"@mysten/sui@1.45.0": + version "1.45.0" + resolved "https://registry.yarnpkg.com/@mysten/sui/-/sui-1.45.0.tgz#306f79c88b18ca58b6ff889066184a1cda839640" + integrity sha512-WYpZmrGWE/FeQaRhYrAYpHcHallj4BFIfSmjq6BkODzEhP9HfMplQAtd8AmtctwO7cpHJ+BjPUOguEAcf1gU4g== + dependencies: + "@graphql-typed-document-node/core" "^3.2.0" + "@mysten/bcs" "1.9.2" + "@mysten/utils" "0.2.0" + "@noble/curves" "=1.9.4" + "@noble/hashes" "^1.8.0" + "@protobuf-ts/grpcweb-transport" "^2.11.1" + "@protobuf-ts/runtime" "^2.11.1" + "@protobuf-ts/runtime-rpc" "^2.11.1" + "@scure/base" "^1.2.6" + "@scure/bip32" "^1.7.0" + "@scure/bip39" "^1.6.0" + gql.tada "^1.8.13" + graphql "^16.11.0" + poseidon-lite "0.2.1" + valibot "^0.36.0" + +"@mysten/utils@0.2.0": + version "0.2.0" + resolved "https://registry.yarnpkg.com/@mysten/utils/-/utils-0.2.0.tgz#8c4fa3858284de84c333bc7ae09510cf54d55a54" + integrity sha512-CM6kJcJHX365cK6aXfFRLBiuyXc5WSBHQ43t94jqlCAIRw8umgNcTb5EnEA9n31wPAQgLDGgbG/rCUISCTJ66w== + dependencies: + "@scure/base" "^1.2.6" + "@near-js/accounts@1.2.1": version "1.2.1" resolved "https://registry.npmjs.org/@near-js/accounts/-/accounts-1.2.1.tgz" @@ -4166,6 +4231,13 @@ dependencies: "@noble/hashes" "1.6.0" +"@noble/curves@=1.9.4": + version "1.9.4" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.4.tgz#a748c6837ee7854a558cc3b951aedd87a5e7d6a5" + integrity sha512-2bKONnuM53lINoDrSmK8qP8W271ms7pygDhZt4SiLOoLwBtoHqeCFi6RG42V8zd3mLHuJFhU/Bmaqo4nX0/kBw== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/curves@~1.8.1": version "1.8.2" resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.8.2.tgz#8f24c037795e22b90ae29e222a856294c1d9ffc7" @@ -4173,6 +4245,13 @@ dependencies: "@noble/hashes" "1.7.2" +"@noble/curves@~1.9.0": + version "1.9.7" + resolved "https://registry.yarnpkg.com/@noble/curves/-/curves-1.9.7.tgz#79d04b4758a43e4bca2cbdc62e7771352fa6b951" + integrity sha512-gbKGcRUYIjA3/zCCNaWDciTMFI0dCkvou3TL8Zmy5Nc7sJ47a0jtOeZoTaMxkuqRo9cRhjOdZJXegxYE5FN/xw== + dependencies: + "@noble/hashes" "1.8.0" + "@noble/hashes@1.2.0", "@noble/hashes@~1.2.0": version "1.2.0" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.2.0.tgz" @@ -4208,6 +4287,11 @@ resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.7.2.tgz#d53c65a21658fb02f3303e7ee3ba89d6754c64b4" integrity sha512-biZ0NUSxyjLLqo6KxEJ1b+C2NAx0wtDoFvCaXHGgUkeHzf3Xc1xKumFKREuT7f7DARNZ/slvYUwFG6B0f2b6hQ== +"@noble/hashes@1.8.0", "@noble/hashes@^1.8.0", "@noble/hashes@~1.8.0": + version "1.8.0" + resolved "https://registry.yarnpkg.com/@noble/hashes/-/hashes-1.8.0.tgz#cee43d801fcef9644b11b8194857695acd5f815a" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== + "@noble/hashes@^1.1.2": version "1.5.0" resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.5.0.tgz" @@ -5058,6 +5142,26 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== +"@protobuf-ts/grpcweb-transport@^2.11.1": + version "2.11.1" + resolved "https://registry.yarnpkg.com/@protobuf-ts/grpcweb-transport/-/grpcweb-transport-2.11.1.tgz#63a8a0d6043851fec14de4b091121377d2549683" + integrity sha512-1W4utDdvOB+RHMFQ0soL4JdnxjXV+ddeGIUg08DvZrA8Ms6k5NN6GBFU2oHZdTOcJVpPrDJ02RJlqtaoCMNBtw== + dependencies: + "@protobuf-ts/runtime" "^2.11.1" + "@protobuf-ts/runtime-rpc" "^2.11.1" + +"@protobuf-ts/runtime-rpc@^2.11.1": + version "2.11.1" + resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.11.1.tgz#a6eb2f384bceae8d23a01d0b0e37faf0af36c179" + integrity sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ== + dependencies: + "@protobuf-ts/runtime" "^2.11.1" + +"@protobuf-ts/runtime@^2.11.1": + version "2.11.1" + resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.11.1.tgz#ee2bf2fac6e2d8deac0ca63471a77481548e5553" + integrity sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ== + "@rainbow-me/fee-suggestions@2.1.0": version "2.1.0" resolved "https://registry.npmjs.org/@rainbow-me/fee-suggestions/-/fee-suggestions-2.1.0.tgz" @@ -5158,6 +5262,11 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.1.tgz#dd0b2a533063ca612c17aa9ad26424a2ff5aa865" integrity sha512-DGmGtC8Tt63J5GfHgfl5CuAXh96VF/LD8K9Hr/Gv0J2lAoRGlPOMpqMpMbCTOoOJMZCk2Xt+DskdDyn6dEFdzQ== +"@scure/base@^1.2.6", "@scure/base@~1.2.5": + version "1.2.6" + resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" + integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== + "@scure/base@~1.1.0": version "1.1.1" resolved "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz" @@ -5168,11 +5277,6 @@ resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.1.9.tgz#e5e142fbbfe251091f9c5f1dd4c834ac04c3dbd1" integrity sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg== -"@scure/base@~1.2.5": - version "1.2.6" - resolved "https://registry.yarnpkg.com/@scure/base/-/base-1.2.6.tgz#ca917184b8231394dd8847509c67a0be522e59f6" - integrity sha512-g/nm5FgUa//MCj1gV09zTJTaM6KBAHqLN907YVQqf7zC49+DcO4B1so4ZX07Ef10Twr6nuqYEH9GEggFXA4Fmg== - "@scure/bip32@1.1.5": version "1.1.5" resolved "https://registry.npmjs.org/@scure/bip32/-/bip32-1.1.5.tgz" @@ -5200,6 +5304,15 @@ "@noble/hashes" "~1.4.0" "@scure/base" "~1.1.6" +"@scure/bip32@^1.7.0": + version "1.7.0" + resolved "https://registry.yarnpkg.com/@scure/bip32/-/bip32-1.7.0.tgz#b8683bab172369f988f1589640e53c4606984219" + integrity sha512-E4FFX/N3f4B80AKWp5dP6ow+flD1LQZo/w8UnLGYZO674jS6YnYeepycOOksv+vLPSpgN35wgKgy+ybfTb2SMw== + dependencies: + "@noble/curves" "~1.9.0" + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + "@scure/bip39@1.1.1": version "1.1.1" resolved "https://registry.npmjs.org/@scure/bip39/-/bip39-1.1.1.tgz" @@ -5224,6 +5337,14 @@ "@noble/hashes" "~1.4.0" "@scure/base" "~1.1.6" +"@scure/bip39@^1.6.0": + version "1.6.0" + resolved "https://registry.yarnpkg.com/@scure/bip39/-/bip39-1.6.0.tgz#475970ace440d7be87a6086cbee77cb8f1a684f9" + integrity sha512-+lF0BbLiJNwVlev4eKelw1WWLaiKXw7sSl8T6FvBlWkdX+94aGJ4o8XjUdlyhTCjd8c+B3KT3JfS8P0bLRNU6A== + dependencies: + "@noble/hashes" "~1.8.0" + "@scure/base" "~1.2.5" + "@scure/starknet@1.1.0": version "1.1.0" resolved "https://registry.yarnpkg.com/@scure/starknet/-/starknet-1.1.0.tgz#d1902e053d98196e161b9b2c3996b20999094e7a" @@ -14405,6 +14526,16 @@ got@^7.1.0: url-parse-lax "^1.0.0" url-to-options "^1.0.1" +gql.tada@^1.8.13: + version "1.9.0" + resolved "https://registry.yarnpkg.com/gql.tada/-/gql.tada-1.9.0.tgz#94555d50cf6e969db25c8e88bf0b3fe603732bf4" + integrity sha512-1LMiA46dRs5oF7Qev6vMU32gmiNvM3+3nHoQZA9K9j2xQzH8xOAWnnJrLSbZOFHTSdFxqn86TL6beo1/7ja/aA== + dependencies: + "@0no-co/graphql.web" "^1.0.5" + "@0no-co/graphqlsp" "^1.12.13" + "@gql.tada/cli-utils" "1.7.2" + "@gql.tada/internal" "1.0.8" + graceful-fs@4.2.10: version "4.2.10" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz" @@ -14480,6 +14611,11 @@ graphql@16.8.1, graphql@^16.8.1: resolved "https://registry.npmjs.org/graphql/-/graphql-16.8.1.tgz" integrity sha512-59LZHPdGZVh695Ud9lRzPBVTtlX9ZCV150Er2W43ro37wVof0ctenSaskPPjN7lVTIN8mSZt8PHUNKZuNQUuxw== +"graphql@^15.5.0 || ^16.0.0 || ^17.0.0", graphql@^16.11.0: + version "16.12.0" + resolved "https://registry.yarnpkg.com/graphql/-/graphql-16.12.0.tgz#28cc2462435b1ac3fdc6976d030cef83a0c13ac7" + integrity sha512-DKKrynuQRne0PNpEbzuEdHlYOMksHSUI8Zc9Unei5gTsMNA2/vMpoMz/yKba50pejK56qj98qM0SjYxAKi13gQ== + growl@1.10.3: version "1.10.3" resolved "https://registry.npmjs.org/growl/-/growl-1.10.3.tgz" @@ -20499,6 +20635,11 @@ pngjs@^5.0.0: resolved "https://registry.npmjs.org/pngjs/-/pngjs-5.0.0.tgz" integrity sha512-40QW5YalBNfQo5yRYmiw7Yz6TKKVr3h6970B2YE+3fQpsWcrbj1PzJgxeJ19DRQjhMbKPIuMY8rFaXc8moolVw== +poseidon-lite@0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/poseidon-lite/-/poseidon-lite-0.2.1.tgz#7ad98e3a3aa5b91a1fd3a61a87460e9e46fd76d6" + integrity sha512-xIr+G6HeYfOhCuswdqcFpSX47SPhm0EpisWJ6h7fHlWwaVIvH3dLnejpatrtw6Xc6HaLrpq05y7VRfvDmDGIog== + posix-character-classes@^0.1.0: version "0.1.1" resolved "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz" @@ -24942,6 +25083,11 @@ v8-to-istanbul@^9.0.1: "@types/istanbul-lib-coverage" "^2.0.1" convert-source-map "^2.0.0" +valibot@^0.36.0: + version "0.36.0" + resolved "https://registry.yarnpkg.com/valibot/-/valibot-0.36.0.tgz#74e746694b1abcc1879e4393db551d4ce1e10578" + integrity sha512-CjF1XN4sUce8sBK9TixrDqFM7RwNkuXdJu174/AwmQUB62QbCQADg5lLe8ldBalFgtj1uKj+pKwDJiNo4Mn+eQ== + valid-url@^1.0.9: version "1.0.9" resolved "https://registry.npmjs.org/valid-url/-/valid-url-1.0.9.tgz"