diff --git a/common/changes/@cityofzion/wallet-connect-sdk-core/main_2024-04-16-13-23.json b/common/changes/@cityofzion/wallet-connect-sdk-core/main_2024-04-16-13-23.json new file mode 100644 index 0000000..50dad49 --- /dev/null +++ b/common/changes/@cityofzion/wallet-connect-sdk-core/main_2024-04-16-13-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@cityofzion/wallet-connect-sdk-core", + "comment": "Implemented wipe methods", + "type": "minor" + } + ], + "packageName": "@cityofzion/wallet-connect-sdk-core" +} \ No newline at end of file diff --git a/common/changes/@cityofzion/wallet-connect-sdk-react/main_2024-04-16-13-23.json b/common/changes/@cityofzion/wallet-connect-sdk-react/main_2024-04-16-13-23.json new file mode 100644 index 0000000..882b0e4 --- /dev/null +++ b/common/changes/@cityofzion/wallet-connect-sdk-react/main_2024-04-16-13-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@cityofzion/wallet-connect-sdk-react", + "comment": "Implemented wipe methods", + "type": "minor" + } + ], + "packageName": "@cityofzion/wallet-connect-sdk-react" +} \ No newline at end of file diff --git a/common/changes/@cityofzion/wallet-connect-sdk-svelte/main_2024-04-16-13-23.json b/common/changes/@cityofzion/wallet-connect-sdk-svelte/main_2024-04-16-13-23.json new file mode 100644 index 0000000..8538bc0 --- /dev/null +++ b/common/changes/@cityofzion/wallet-connect-sdk-svelte/main_2024-04-16-13-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@cityofzion/wallet-connect-sdk-svelte", + "comment": "Implemented wipe methods", + "type": "minor" + } + ], + "packageName": "@cityofzion/wallet-connect-sdk-svelte" +} \ No newline at end of file diff --git a/common/changes/@cityofzion/wallet-connect-sdk-wallet-core/main_2024-04-16-13-23.json b/common/changes/@cityofzion/wallet-connect-sdk-wallet-core/main_2024-04-16-13-23.json new file mode 100644 index 0000000..da6bfdd --- /dev/null +++ b/common/changes/@cityofzion/wallet-connect-sdk-wallet-core/main_2024-04-16-13-23.json @@ -0,0 +1,10 @@ +{ + "changes": [ + { + "packageName": "@cityofzion/wallet-connect-sdk-wallet-core", + "comment": "Implemented wipe methods", + "type": "minor" + } + ], + "packageName": "@cityofzion/wallet-connect-sdk-wallet-core" +} \ No newline at end of file diff --git a/e2e/pnpm-lock.yaml b/e2e/pnpm-lock.yaml index ed2f8cb..fa5f91a 100644 --- a/e2e/pnpm-lock.yaml +++ b/e2e/pnpm-lock.yaml @@ -7,7 +7,7 @@ settings: dependencies: concurrently: specifier: ^8.2.1 - version: 8.2.1 + version: 8.2.2 cross-env: specifier: ^7.0.3 version: 7.0.3 @@ -15,31 +15,31 @@ dependencies: devDependencies: '@playwright/test': specifier: ^1.38.1 - version: 1.38.1 + version: 1.43.1 '@types/node': specifier: ^20.8.2 - version: 20.8.2 + version: 20.12.7 '@typescript-eslint/eslint-plugin': specifier: ^6.7.4 - version: 6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.2.2) + version: 6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5) '@typescript-eslint/parser': specifier: ^6.7.4 - version: 6.7.4(eslint@8.50.0)(typescript@5.2.2) + version: 6.21.0(eslint@8.57.0)(typescript@5.4.5) eslint: specifier: ^8.50.0 - version: 8.50.0 + version: 8.57.0 playwright: specifier: ^1.38.1 - version: 1.38.1 + version: 1.43.1 prettier: specifier: ^3.0.3 - version: 3.0.3 + version: 3.2.5 ts-node: specifier: 10.9.1 - version: 10.9.1(@types/node@20.8.2)(typescript@5.2.2) + version: 10.9.1(@types/node@20.12.7)(typescript@5.4.5) typescript: specifier: ^5.2.2 - version: 5.2.2 + version: 5.4.5 packages: @@ -48,11 +48,11 @@ packages: engines: {node: '>=0.10.0'} dev: true - /@babel/runtime@7.23.1: - resolution: {integrity: sha512-hC2v6p8ZSI/W0HUzh3V8C5g+NwSKzKPtJwSpTjwl0o297GP9+ZLQSkdvHz46CM3LqyoXxq+5G9komY+eSqSO0g==} + /@babel/runtime@7.24.4: + resolution: {integrity: sha512-dkxf7+hn8mFBwKjs9bvBlArzLVxVbS8usaPUDd5p2a9JCL9tB8OaOVN1isD4+Xyk4ns89/xeOmbQvgdK7IIVdA==} engines: {node: '>=6.9.0'} dependencies: - regenerator-runtime: 0.14.0 + regenerator-runtime: 0.14.1 dev: false /@cspotcode/source-map-support@0.8.1: @@ -62,30 +62,30 @@ packages: '@jridgewell/trace-mapping': 0.3.9 dev: true - /@eslint-community/eslint-utils@4.4.0(eslint@8.50.0): + /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 dependencies: - eslint: 8.50.0 + eslint: 8.57.0 eslint-visitor-keys: 3.4.3 dev: true - /@eslint-community/regexpp@4.9.1: - resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + /@eslint-community/regexpp@4.10.0: + resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true - /@eslint/eslintrc@2.1.2: - resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + /@eslint/eslintrc@2.1.4: + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 debug: 4.3.4 espree: 9.6.1 - globals: 13.22.0 - ignore: 5.2.4 + globals: 13.24.0 + ignore: 5.3.1 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -94,16 +94,16 @@ packages: - supports-color dev: true - /@eslint/js@8.50.0: - resolution: {integrity: sha512-NCC3zz2+nvYd+Ckfh87rA47zfu2QsQpvc6k1yzTk+b9KzRj0wkGa8LSoGOXN6Zv4lRf/EIoZ80biDh9HOI+RNQ==} + /@eslint/js@8.57.0: + resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@humanwhocodes/config-array@0.11.11: - resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + /@humanwhocodes/config-array@0.11.14: + resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} engines: {node: '>=10.10.0'} dependencies: - '@humanwhocodes/object-schema': 1.2.1 + '@humanwhocodes/object-schema': 2.0.3 debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: @@ -115,8 +115,8 @@ packages: engines: {node: '>=12.22'} dev: true - /@humanwhocodes/object-schema@1.2.1: - resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} + /@humanwhocodes/object-schema@2.0.3: + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} dev: true /@jridgewell/resolve-uri@3.1.2: @@ -153,19 +153,19 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.15.0 + fastq: 1.17.1 dev: true - /@playwright/test@1.38.1: - resolution: {integrity: sha512-NqRp8XMwj3AK+zKLbZShl0r/9wKgzqI/527bkptKXomtuo+dOjU9NdMASQ8DNC9z9zLOMbG53T4eihYr3XR+BQ==} + /@playwright/test@1.43.1: + resolution: {integrity: sha512-HgtQzFgNEEo4TE22K/X7sYTYNqEMMTZmFS8kTq6m8hXj+m1D8TgwgIbumHddJa9h4yl4GkKb8/bgAl2+g7eDgA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright: 1.38.1 + playwright: 1.43.1 dev: true - /@tsconfig/node10@1.0.10: - resolution: {integrity: sha512-PiaIWIoPvO6qm6t114ropMCagj6YAF24j9OkCA2mJDXFnlionEwhsBCJ8yek4aib575BI3OkART/90WsgHgLWw==} + /@tsconfig/node10@1.0.11: + resolution: {integrity: sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw==} dev: true /@tsconfig/node12@1.0.11: @@ -180,20 +180,22 @@ packages: resolution: {integrity: sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==} dev: true - /@types/json-schema@7.0.13: - resolution: {integrity: sha512-RbSSoHliUbnXj3ny0CNFOoxrIDV6SUGyStHsvDqosw6CkdPV8TtWGlfecuK4ToyMEAql6pzNxgCFKanovUzlgQ==} + /@types/json-schema@7.0.15: + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} dev: true - /@types/node@20.8.2: - resolution: {integrity: sha512-Vvycsc9FQdwhxE3y3DzeIxuEJbWGDsnrxvMADzTDF/lcdR9/K+AQIeAghTQsHtotg/q0j3WEOYS/jQgSdWue3w==} + /@types/node@20.12.7: + resolution: {integrity: sha512-wq0cICSkRLVaf3UGLMGItu/PtdY7oaXaI/RVU+xliKVOtRna3PRY57ZDfztpDL0n11vfymMUnXv8QwYCO7L1wg==} + dependencies: + undici-types: 5.26.5 dev: true - /@types/semver@7.5.3: - resolution: {integrity: sha512-OxepLK9EuNEIPxWNME+C6WwbRAOOI2o2BaQEGzz5Lu2e4Z5eDnEo+/aVEDMIXywoJitJ7xWd641wrGLZdtwRyw==} + /@types/semver@7.5.8: + resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true - /@typescript-eslint/eslint-plugin@6.7.4(@typescript-eslint/parser@6.7.4)(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-DAbgDXwtX+pDkAHwiGhqP3zWUGpW49B7eqmgpPtg+BKJXwdct79ut9+ifqOFPJGClGKSHXn2PTBatCnldJRUoA==} + /@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0)(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha @@ -203,26 +205,26 @@ packages: typescript: optional: true dependencies: - '@eslint-community/regexpp': 4.9.1 - '@typescript-eslint/parser': 6.7.4(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/scope-manager': 6.7.4 - '@typescript-eslint/type-utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.4 + '@eslint-community/regexpp': 4.10.0 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 - eslint: 8.50.0 + eslint: 8.57.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/parser@6.7.4(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-I5zVZFY+cw4IMZUeNCU7Sh2PO5O57F7Lr0uyhgCJmhN/BuTlnc55KxPonR4+EM3GBdfiCyGZye6DgMjtubQkmA==} + /@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -231,27 +233,27 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 6.7.4 - '@typescript-eslint/types': 6.7.4 - '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) - '@typescript-eslint/visitor-keys': 6.7.4 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 - eslint: 8.50.0 - typescript: 5.2.2 + eslint: 8.57.0 + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager@6.7.4: - resolution: {integrity: sha512-SdGqSLUPTXAXi7c3Ob7peAGVnmMoGzZ361VswK2Mqf8UOYcODiYvs8rs5ILqEdfvX1lE7wEZbLyELCW+Yrql1A==} + /@typescript-eslint/scope-manager@6.21.0: + resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.4 - '@typescript-eslint/visitor-keys': 6.7.4 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 dev: true - /@typescript-eslint/type-utils@6.7.4(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-n+g3zi1QzpcAdHFP9KQF+rEFxMb2KxtnJGID3teA/nxKHOVi3ylKovaqEzGBbVY2pBttU6z85gp0D00ufLzViQ==} + /@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 @@ -260,23 +262,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) - '@typescript-eslint/utils': 6.7.4(eslint@8.50.0)(typescript@5.2.2) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.4.5) debug: 4.3.4 - eslint: 8.50.0 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + eslint: 8.57.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types@6.7.4: - resolution: {integrity: sha512-o9XWK2FLW6eSS/0r/tgjAGsYasLAnOWg7hvZ/dGYSSNjCh+49k5ocPN8OmG5aZcSJ8pclSOyVKP2x03Sj+RrCA==} + /@typescript-eslint/types@6.21.0: + resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} engines: {node: ^16.0.0 || >=18.0.0} dev: true - /@typescript-eslint/typescript-estree@6.7.4(typescript@5.2.2): - resolution: {integrity: sha512-ty8b5qHKatlNYd9vmpHooQz3Vki3gG+3PchmtsA4TgrZBKWHNjWfkQid7K7xQogBqqc7/BhGazxMD5vr6Ha+iQ==} + /@typescript-eslint/typescript-estree@6.21.0(typescript@5.4.5): + resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: typescript: '*' @@ -284,51 +286,56 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 6.7.4 - '@typescript-eslint/visitor-keys': 6.7.4 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.2.2) - typescript: 5.2.2 + minimatch: 9.0.3 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.4.5) + typescript: 5.4.5 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/utils@6.7.4(eslint@8.50.0)(typescript@5.2.2): - resolution: {integrity: sha512-PRQAs+HUn85Qdk+khAxsVV+oULy3VkbH3hQ8hxLRJXWBEd7iI+GbQxH5SEUSH7kbEoTp6oT1bOwyga24ELALTA==} + /@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.4.5): + resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) - '@types/json-schema': 7.0.13 - '@types/semver': 7.5.3 - '@typescript-eslint/scope-manager': 6.7.4 - '@typescript-eslint/types': 6.7.4 - '@typescript-eslint/typescript-estree': 6.7.4(typescript@5.2.2) - eslint: 8.50.0 - semver: 7.5.4 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@types/json-schema': 7.0.15 + '@types/semver': 7.5.8 + '@typescript-eslint/scope-manager': 6.21.0 + '@typescript-eslint/types': 6.21.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.4.5) + eslint: 8.57.0 + semver: 7.6.0 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys@6.7.4: - resolution: {integrity: sha512-pOW37DUhlTZbvph50x5zZCkFn3xzwkGtNoJHzIM3svpiSkJzwOYr/kVBaXmf+RAQiUDs1AHEZVNPg6UJCJpwRA==} + /@typescript-eslint/visitor-keys@6.21.0: + resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} engines: {node: ^16.0.0 || >=18.0.0} dependencies: - '@typescript-eslint/types': 6.7.4 + '@typescript-eslint/types': 6.21.0 eslint-visitor-keys: 3.4.3 dev: true - /acorn-jsx@5.3.2(acorn@8.10.0): + /@ungap/structured-clone@1.2.0: + resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + dev: true + + /acorn-jsx@5.3.2(acorn@8.11.3): resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: - acorn: 8.10.0 + acorn: 8.11.3 dev: true /acorn-walk@8.3.2: @@ -336,8 +343,8 @@ packages: engines: {node: '>=0.4.0'} dev: true - /acorn@8.10.0: - resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} + /acorn@8.11.3: + resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} engines: {node: '>=0.4.0'} hasBin: true dev: true @@ -385,6 +392,12 @@ packages: concat-map: 0.0.1 dev: true + /brace-expansion@2.0.1: + resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} + dependencies: + balanced-match: 1.0.2 + dev: true + /braces@3.0.2: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} @@ -426,8 +439,8 @@ packages: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} dev: true - /concurrently@8.2.1: - resolution: {integrity: sha512-nVraf3aXOpIcNud5pB9M82p1tynmZkrSGQ1p6X/VY8cJ+2LMVqAgXsJxYYefACSHbTYlm92O1xuhdGTjwoEvbQ==} + /concurrently@8.2.2: + resolution: {integrity: sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==} engines: {node: ^14.13.0 || >=16.0.0} hasBin: true dependencies: @@ -466,7 +479,7 @@ packages: resolution: {integrity: sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==} engines: {node: '>=0.11'} dependencies: - '@babel/runtime': 7.23.1 + '@babel/runtime': 7.24.4 dev: false /debug@4.3.4: @@ -508,8 +521,8 @@ packages: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} dev: false - /escalade@3.1.1: - resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} + /escalade@3.1.2: + resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} dev: false @@ -531,18 +544,19 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint@8.50.0: - resolution: {integrity: sha512-FOnOGSuFuFLv/Sa+FDVRZl4GGVAAFFi8LecRsI5a1tMO5HIE8nCm4ivAlzt4dT3ol/PaaGC0rJEEXQmHJBGoOg==} + /eslint@8.57.0: + resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.50.0) - '@eslint-community/regexpp': 4.9.1 - '@eslint/eslintrc': 2.1.2 - '@eslint/js': 8.50.0 - '@humanwhocodes/config-array': 0.11.11 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/regexpp': 4.10.0 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.0 + '@humanwhocodes/config-array': 0.11.14 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 @@ -558,9 +572,9 @@ packages: file-entry-cache: 6.0.1 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.22.0 + globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.2.4 + ignore: 5.3.1 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -581,8 +595,8 @@ packages: resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - acorn: 8.10.0 - acorn-jsx: 5.3.2(acorn@8.10.0) + acorn: 8.11.3 + acorn-jsx: 5.3.2(acorn@8.11.3) eslint-visitor-keys: 3.4.3 dev: true @@ -614,8 +628,8 @@ packages: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true - /fast-glob@3.3.1: - resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==} + /fast-glob@3.3.2: + resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} engines: {node: '>=8.6.0'} dependencies: '@nodelib/fs.stat': 2.0.5 @@ -633,8 +647,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq@1.15.0: - resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} + /fastq@1.17.1: + resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} dependencies: reusify: 1.0.4 dev: true @@ -643,7 +657,7 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flat-cache: 3.1.0 + flat-cache: 3.2.0 dev: true /fill-range@7.0.1: @@ -661,17 +675,17 @@ packages: path-exists: 4.0.0 dev: true - /flat-cache@3.1.0: - resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==} - engines: {node: '>=12.0.0'} + /flat-cache@3.2.0: + resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} + engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.9 - keyv: 4.5.3 + flatted: 3.3.1 + keyv: 4.5.4 rimraf: 3.0.2 dev: true - /flatted@3.2.9: - resolution: {integrity: sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==} + /flatted@3.3.1: + resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} dev: true /fs.realpath@1.0.0: @@ -716,8 +730,8 @@ packages: path-is-absolute: 1.0.1 dev: true - /globals@13.22.0: - resolution: {integrity: sha512-H1Ddc/PbZHTDVJSnj8kWptIRSD6AM3pK+mKytuIVF4uoBV7rshFlhhvA58ceJ5wp3Er58w6zj7bykMpYXt3ETw==} + /globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} dependencies: type-fest: 0.20.2 @@ -729,8 +743,8 @@ packages: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 - fast-glob: 3.3.1 - ignore: 5.2.4 + fast-glob: 3.3.2 + ignore: 5.3.1 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -743,8 +757,8 @@ packages: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} - /ignore@5.2.4: - resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} + /ignore@5.3.1: + resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} dev: true @@ -821,8 +835,8 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /keyv@4.5.3: - resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==} + /keyv@4.5.4: + resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: json-buffer: 3.0.1 dev: true @@ -880,6 +894,13 @@ packages: brace-expansion: 1.1.11 dev: true + /minimatch@9.0.3: + resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} + engines: {node: '>=16 || 14 >=14.17'} + dependencies: + brace-expansion: 2.0.1 + dev: true + /ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} dev: true @@ -951,18 +972,18 @@ packages: engines: {node: '>=8.6'} dev: true - /playwright-core@1.38.1: - resolution: {integrity: sha512-tQqNFUKa3OfMf4b2jQ7aGLB8o9bS3bOY0yMEtldtC2+spf8QXG9zvXLTXUeRsoNuxEYMgLYR+NXfAa1rjKRcrg==} + /playwright-core@1.43.1: + resolution: {integrity: sha512-EI36Mto2Vrx6VF7rm708qSnesVQKbxEWvPrfA1IPY6HgczBplDx7ENtx+K2n4kJ41sLLkuGfmb0ZLSSXlDhqPg==} engines: {node: '>=16'} hasBin: true dev: true - /playwright@1.38.1: - resolution: {integrity: sha512-oRMSJmZrOu1FP5iu3UrCx8JEFRIMxLDM0c/3o4bpzU5Tz97BypefWf7TuTNPWeCe279TPal5RtPPZ+9lW/Qkow==} + /playwright@1.43.1: + resolution: {integrity: sha512-V7SoH0ai2kNt1Md9E3Gwas5B9m8KR2GVvwZnAI6Pg0m3sh7UvgiYhRrhsziCmqMJNouPckiOhk8T+9bSAK0VIA==} engines: {node: '>=16'} hasBin: true dependencies: - playwright-core: 1.38.1 + playwright-core: 1.43.1 optionalDependencies: fsevents: 2.3.2 dev: true @@ -972,14 +993,14 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier@3.0.3: - resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==} + /prettier@3.2.5: + resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} engines: {node: '>=14'} hasBin: true dev: true - /punycode@2.3.0: - resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==} + /punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} dev: true @@ -987,8 +1008,8 @@ packages: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} dev: true - /regenerator-runtime@0.14.0: - resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==} + /regenerator-runtime@0.14.1: + resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} dev: false /require-directory@2.1.1: @@ -1025,8 +1046,8 @@ packages: tslib: 2.6.2 dev: false - /semver@7.5.4: - resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==} + /semver@7.6.0: + resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} engines: {node: '>=10'} hasBin: true dependencies: @@ -1105,16 +1126,16 @@ packages: hasBin: true dev: false - /ts-api-utils@1.0.3(typescript@5.2.2): - resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} - engines: {node: '>=16.13.0'} + /ts-api-utils@1.3.0(typescript@5.4.5): + resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' dependencies: - typescript: 5.2.2 + typescript: 5.4.5 dev: true - /ts-node@10.9.1(@types/node@20.8.2)(typescript@5.2.2): + /ts-node@10.9.1(@types/node@20.12.7)(typescript@5.4.5): resolution: {integrity: sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==} hasBin: true peerDependencies: @@ -1129,18 +1150,18 @@ packages: optional: true dependencies: '@cspotcode/source-map-support': 0.8.1 - '@tsconfig/node10': 1.0.10 + '@tsconfig/node10': 1.0.11 '@tsconfig/node12': 1.0.11 '@tsconfig/node14': 1.0.3 '@tsconfig/node16': 1.0.4 - '@types/node': 20.8.2 - acorn: 8.10.0 + '@types/node': 20.12.7 + acorn: 8.11.3 acorn-walk: 8.3.2 arg: 4.1.3 create-require: 1.1.1 diff: 4.0.2 make-error: 1.3.6 - typescript: 5.2.2 + typescript: 5.4.5 v8-compile-cache-lib: 3.0.1 yn: 3.1.1 dev: true @@ -1161,16 +1182,20 @@ packages: engines: {node: '>=10'} dev: true - /typescript@5.2.2: - resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==} + /typescript@5.4.5: + resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} engines: {node: '>=14.17'} hasBin: true dev: true + /undici-types@5.26.5: + resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + dev: true + /uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.3.0 + punycode: 2.3.1 dev: true /v8-compile-cache-lib@3.0.1: @@ -1216,7 +1241,7 @@ packages: engines: {node: '>=12'} dependencies: cliui: 8.0.1 - escalade: 3.1.1 + escalade: 3.1.2 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/e2e/src/models/ExampleProject.ts b/e2e/src/models/ExampleProject.ts index 12313f6..02f7cea 100644 --- a/e2e/src/models/ExampleProject.ts +++ b/e2e/src/models/ExampleProject.ts @@ -45,4 +45,24 @@ export default class ExampleProject { if (seconds < 0) throw Error('Cannot await negative seconds') await this.page.waitForTimeout(seconds * 1000) } + + // Don't use this command with tags that are expected not to exist. + async awaitTestId(testId: string) { + await this.page.waitForSelector(`[data-testid="${testId}"]`) + } + + async awaitAndGetTestId(testId: string) { + await this.awaitTestId(testId) + return this.page.getByTestId(testId) + } + + async awaitAndGetAllTestId(testId: string) { + await this.awaitTestId(testId) + return this.page.getByTestId(testId).all() + } + + async awaitAndClickTestId(testId: string) { + await this.awaitTestId(testId) + await (await this.awaitAndGetTestId(testId)).click() + } } diff --git a/e2e/src/pageCommonSteps/DappReactSteps.ts b/e2e/src/pageCommonSteps/DappReactSteps.ts index 87e3537..a24abf1 100644 --- a/e2e/src/pageCommonSteps/DappReactSteps.ts +++ b/e2e/src/pageCommonSteps/DappReactSteps.ts @@ -2,8 +2,7 @@ import ExampleProject from '../models/ExampleProject' import { getCleanInnerHTML } from '../helpers/CleanerHelper' export async function getReactDappUri(dappPage: ExampleProject): Promise { - await dappPage.page.getByTestId('hello-world__get-uri-button').click() // Click the button to get the dapp URI - await dappPage.awaitSeconds(2) // Wait for 2 seconds - await dappPage.page.getByTestId('hello-world__get-uri-button').click() // Click the button to get the dapp URI - return await getCleanInnerHTML(dappPage.page.getByTestId('hello-world__dapp-uri')) // Get and store the clean dapp URI + await dappPage.awaitAndClickTestId('hello-world__get-uri-button') // Click the button to get the dapp URI + await dappPage.awaitAndClickTestId('hello-world__get-uri-button') // Click the button to get the dapp URI + return await getCleanInnerHTML(await dappPage.awaitAndGetTestId('hello-world__dapp-uri')) // Get and store the clean dapp URI } diff --git a/e2e/src/pageCommonSteps/WalletReactSteps.ts b/e2e/src/pageCommonSteps/WalletReactSteps.ts index 43d259e..7f418a1 100644 --- a/e2e/src/pageCommonSteps/WalletReactSteps.ts +++ b/e2e/src/pageCommonSteps/WalletReactSteps.ts @@ -3,29 +3,26 @@ import { ACCOUNT_PASSWORD } from '../constants/GenericData' import { MAX_RETRIES } from '../constants/DevConstants' export async function createNewReactWallet(walletPage: ExampleProject) { - await walletPage.page.getByTestId('account-entry__continue').click() // Select network - await walletPage.page.getByTestId('account-entry__create-new-account').click() // Select to create a new account - await walletPage.page.getByTestId('account-entry__password-input').fill(ACCOUNT_PASSWORD) // Fill in the password - await walletPage.page.getByTestId('account-entry__login-or-create').click() // Finish the account creation + await walletPage.awaitAndClickTestId('account-entry__continue') // Select network + await walletPage.awaitAndClickTestId('account-entry__create-new-account') // Select to create a new account + await (await walletPage.awaitAndGetTestId('account-entry__password-input')).fill(ACCOUNT_PASSWORD) // Fill in the password + await walletPage.awaitAndClickTestId('account-entry__login-or-create') // Finish the account creation } export async function connectDappToReactWallet(walletPage: ExampleProject, dappUri: string) { await walletPage.page.getByTestId('connect-dapp__dapp-uri-input').focus() // Focus on the input field for the dapp URI await walletPage.page.getByTestId('connect-dapp__dapp-uri-input').fill(dappUri.trim()) // Fill in the dapp URI - await walletPage.awaitSeconds(1) // Wait for 1 second - await walletPage.page.getByTestId('proposal-card__approve').click() // Click the approve button - await walletPage.awaitSeconds(1) // Wait for 1 second + await walletPage.awaitAndClickTestId('proposal-card__approve') // Click the approve button } export async function acceptPendingRequestToReactWallet(walletPage: ExampleProject) { let retries = 0 let requests = [] do { - requests = await walletPage.page.getByTestId('default-card__pending-request').all() - if (requests.length == 0) await walletPage.awaitSeconds(2) + requests = await walletPage.awaitAndGetAllTestId('default-card__pending-request') + if (requests.length === 0) await walletPage.awaitSeconds(1) retries++ } while (retries < MAX_RETRIES && requests.length == 0) - if (requests.length == 0) throw Error('No pending requests are found') - await (await walletPage.page.getByTestId('default-card__pending-request').all())[0].click() - await walletPage.awaitSeconds(2) - await walletPage.page.getByTestId('request-card__approve').click() + if (requests.length === 0) throw Error('No pending requests are found') + await walletPage.awaitAndClickTestId('default-card__pending-request') + await walletPage.awaitAndClickTestId('request-card__approve') } diff --git a/e2e/tests/DappMethods.spec.ts b/e2e/tests/DappMethods.spec.ts index ac96396..528afc3 100644 --- a/e2e/tests/DappMethods.spec.ts +++ b/e2e/tests/DappMethods.spec.ts @@ -10,7 +10,7 @@ test('Create a new account and connect with a dapp (React)', async ({ context }) const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - const dappCard = walletPage.page.getByTestId('default-card_sesseion-card') // Get the dapp card element + const dappCard = await walletPage.awaitAndGetTestId('default-card_sesseion-card') // Get the dapp card element // Check if the dapp card element is defined, indicating successful connection expect(dappCard).toBeDefined() @@ -21,11 +21,9 @@ test('Test Disconnect on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__disconnect').click() // Click on disconnect button - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await dappPage.page.getByTestId('hello-world__dapp-uri').all() + await dappPage.awaitAndClickTestId('hello-world__disconnect') // Click on disconnect button + await dappPage.awaitTestId('hello-world__dapp-uri') + const response = await dappPage.awaitAndGetAllTestId('hello-world__dapp-uri') expect(response).toBeDefined() // Verify if the response had a return expect(response.length).toBeGreaterThan(0) }) @@ -35,11 +33,8 @@ test('Test Get My balance on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__get-my-balance').click() // Click on get my balance button - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + await dappPage.awaitAndClickTestId('hello-world__get-my-balance') // Click on get my balance button + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response.state).toBeDefined() // Verify if the response returned state expect(response.state).toBe('HALT') // Verify if state is HALT @@ -50,19 +45,16 @@ test('Test Sign and Verify Message on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__sign-and-verify').click() // Click on sign and verify button + await dappPage.awaitAndClickTestId('hello-world__sign-and-verify') // Click on sign and verify button await acceptPendingRequestToReactWallet(walletPage) - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response.publicKey).toBeDefined() // Verify if the response returned publicKey expect(response.data).toBeDefined() // Verify if the response returned data expect(response.salt).toBeDefined() expect(response.messageHex).toBeDefined() // Verify if the response returned messageHex await acceptPendingRequestToReactWallet(walletPage) - const response2 = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response2 = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response2).toBeDefined() // Verify if the response had a return expect(response2 as boolean).toBeTruthy() // Verify if the response returned true }) @@ -72,19 +64,15 @@ test('Test Sign Without Salt on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__sign-without-salt-and-verify').click() // Click on sign without salt and verify button + await dappPage.awaitAndClickTestId('hello-world__sign-without-salt-and-verify') // Click on sign without salt and verify button await acceptPendingRequestToReactWallet(walletPage) - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response.publicKey).toBeDefined() // Verify if the response returned publicKey expect(response.data).toBeDefined() // Verify if the response returned data expect(response.messageHex).toBeDefined() // Verify if the response returned messageHex await acceptPendingRequestToReactWallet(walletPage) - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response2 = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response2 = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response2).toBeDefined() // Verify if the response had a return expect(response2 as boolean).toBeTruthy() // Verify if the response returned true }) @@ -94,12 +82,9 @@ test('Test Verify Failing Message on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__verify-failing').click() // Click on verify failing button + await dappPage.awaitAndClickTestId('hello-world__verify-failing') // Click on verify failing button await acceptPendingRequestToReactWallet(walletPage) - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response as boolean).toBeFalsy() // Verify if the response returned false }) @@ -109,11 +94,8 @@ test('Test Traverse Iterator on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__traverse-iterator').click() // Click on traverse iterator button - await dappPage.awaitSeconds(3) // Wait for 3 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + await dappPage.awaitAndClickTestId('hello-world__traverse-iterator') // Click on traverse iterator button + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect((response as any[]).length).toBeGreaterThan(1) }) @@ -123,11 +105,8 @@ test('Test Get Wallet Info on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__get-wallet-info').click() // Click on get wallet info button - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + await dappPage.awaitAndClickTestId('hello-world__get-wallet-info') // Click on get wallet info button + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response.isLedger).toBeDefined() // Verify if the response returned isLedger }) @@ -137,11 +116,8 @@ test('Test Calculate Fee on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__calculate-fee').click() // Click on calculate fee button - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + await dappPage.awaitAndClickTestId('hello-world__calculate-fee') + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return expect(response.networkFee).toBeDefined() // Verify if the response returned networkFee expect(response.systemFee).toBeDefined() // Verify if the response returned systemFee @@ -153,11 +129,26 @@ test('Test Sign Transaction on dapp (React)', async ({ context }) => { const dappPage = DAPP_REACT const walletPage = WALLET_REACT await connectReactDappToNewReactAccount(context, dappPage, walletPage) - await dappPage.page.waitForLoadState('networkidle') // Wait to load request - await dappPage.awaitSeconds(5) // Wait for 5 seconds - await dappPage.page.getByTestId('hello-world__sign-transaction').click() // Click on Sign Transaction button + await dappPage.awaitAndClickTestId('hello-world__sign-transaction') // Click on Sign Transaction button await acceptPendingRequestToReactWallet(walletPage) - await dappPage.awaitSeconds(2) // Wait for 2 seconds - const response = await getAnyFromInnerHTML(dappPage.page.getByTestId('hello-world__method-response')) + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) expect(response).toBeDefined() // Verify if the response had a return }) + +test('Test Wipe Methods on dapp (React)', async ({ context }) => { + // Define the dapp and wallet pages + const dappPage = DAPP_REACT + const walletPage = WALLET_REACT + const amountOfMethodsToBeWiped = 3 + await connectReactDappToNewReactAccount(context, dappPage, walletPage) + for (let i = 0; i < amountOfMethodsToBeWiped; i++) { + // Click on Sign Transaction button amountOfMethodsToBeWiped times + await dappPage.awaitAndClickTestId('hello-world__sign-transaction') + } + await dappPage.awaitAndClickTestId('hello-world__wipe-methods') // Click on Wipe Methods button + const response = await getAnyFromInnerHTML(await dappPage.awaitAndGetTestId('hello-world__method-response')) + expect(response).toBeDefined() + expect((response as string[]).length).toBe(amountOfMethodsToBeWiped) + const pendingRequests = await walletPage.page.getByTestId('default-card__pending-request').all() + expect(pendingRequests.length).toBe(0) // Verify if has no pending Requests +}) diff --git a/examples/wc-dapp-react/src/Constants.ts b/examples/wc-dapp-react/src/Constants.ts new file mode 100644 index 0000000..a552f44 --- /dev/null +++ b/examples/wc-dapp-react/src/Constants.ts @@ -0,0 +1,29 @@ +import { Method, NetworkType } from '@cityofzion/wallet-connect-sdk-react' + +export const networks: Record = { + 'neo3:mainnet': { + name: 'MainNet', + }, + 'neo3:testnet': { + name: 'TestNet', + }, + 'neo3:private': { + name: 'Private Network', + }, +} + +export const dappMethods: Method[] = [ + 'invokeFunction', + 'testInvoke', + 'signMessage', + 'verifyMessage', + 'traverseIterator', + 'getWalletInfo', + 'getNetworkVersion', + 'decrypt', + 'encrypt', + 'decryptFromArray', + 'calculateFee', + 'signTransaction', + 'wipeRequests', +] diff --git a/examples/wc-dapp-react/src/components/HelloWorld.tsx b/examples/wc-dapp-react/src/components/HelloWorld.tsx index 1c20284..cef0be8 100644 --- a/examples/wc-dapp-react/src/components/HelloWorld.tsx +++ b/examples/wc-dapp-react/src/components/HelloWorld.tsx @@ -1,18 +1,7 @@ import React, { useState } from 'react' import { TypeChecker } from '@cityofzion/neon-dappkit-types' import { NetworkType, useWalletConnect, SignMessageVersion } from '@cityofzion/wallet-connect-sdk-react' - -const networks: Record = { - 'neo3:mainnet': { - name: 'MainNet', - }, - 'neo3:testnet': { - name: 'TestNet', - }, - 'neo3:private': { - name: 'Private Network', - }, -} +import { dappMethods, networks } from '../Constants' function HelloWorld() { const [dappUri, setDappUri] = useState('') @@ -21,37 +10,11 @@ function HelloWorld() { const [networkType, setNetworkType] = React.useState('neo3:testnet') const connect = async (): Promise => { - await wcSdk.connect(networkType, [ - 'invokeFunction', - 'testInvoke', - 'signMessage', - 'verifyMessage', - 'traverseIterator', - 'getWalletInfo', - 'getNetworkVersion', - 'decrypt', - 'encrypt', - 'decryptFromArray', - 'calculateFee', - 'signTransaction', - ]) + await wcSdk.connect(networkType, dappMethods) } const getUri = async (): Promise => { - const { uri, approval } = await wcSdk.createConnection('neo3:testnet', [ - 'invokeFunction', - 'testInvoke', - 'signMessage', - 'verifyMessage', - 'traverseIterator', - 'getWalletInfo', - 'getNetworkVersion', - 'decrypt', - 'encrypt', - 'decryptFromArray', - 'calculateFee', - 'signTransaction', - ]) + const { uri, approval } = await wcSdk.createConnection(networkType, dappMethods) if (uri) { setDappUri(uri) await navigator.clipboard.writeText(uri) @@ -409,6 +372,12 @@ function HelloWorld() { // you can grab this response and do an invokeFunction using owner account (eg.: NhGomBpYnKXArr55nHRQ5rzy79TwKVXZbr) } + const wipeMethods = async () => { + const resp = await wcSdk.wipeRequests() + console.log(resp) + setResponse(JSON.stringify(resp, null, 2)) + } + return (
{!wcSdk && Loading...} @@ -491,6 +460,9 @@ function HelloWorld() { +

Response:

diff --git a/examples/wc-wallet-react/src/constants/default.ts b/examples/wc-wallet-react/src/constants/default.ts index abbcded..140caa6 100644 --- a/examples/wc-wallet-react/src/constants/default.ts +++ b/examples/wc-wallet-react/src/constants/default.ts @@ -17,6 +17,7 @@ export const DEFAULT_METHODS: Method[] = [ 'decryptFromArray', 'calculateFee', 'signTransaction', + 'wipeRequests', ] export const DEFAULT_LOGGER = 'error' diff --git a/packages/wallet-connect-sdk-core/src/index.ts b/packages/wallet-connect-sdk-core/src/index.ts index 86097b5..7ad6e39 100644 --- a/packages/wallet-connect-sdk-core/src/index.ts +++ b/packages/wallet-connect-sdk-core/src/index.ts @@ -49,6 +49,7 @@ export type Method = | 'decryptFromArray' | 'calculateFee' | 'signTransaction' + | 'wipeRequests' /** * A number that will be compared by the wallet to check if it is compatible with the dApp @@ -77,6 +78,7 @@ export const DEFAULT_AUTO_ACCEPT_METHODS: Method[] = [ 'traverseIterator', 'getNetworkVersion', 'calculateFee', + 'wipeRequests', ] export class WcSdkError extends Error { @@ -658,6 +660,26 @@ class WcSdk implements Neo3Invoker, Neo3Signer { return resp as DecryptFromArrayResult } + async wipeRequests(): Promise { + const request = { + id: 1, + jsonrpc: '2.0', + method: 'wipeRequests', + params: [], + } + const resp = await this.signClient.request({ + topic: this.session?.topic ?? '', + chainId: this.getChainId() ?? '', + request, + }) + + if (!resp) { + throw new WcSdkError(resp) + } + + return resp as string[] + } + private validateContractInvocationMulti(request: ContractInvocationMulti): boolean { // verify fields this.objectValidation(request, ['signers', 'invocations']) diff --git a/packages/wallet-connect-sdk-react/src/index.tsx b/packages/wallet-connect-sdk-react/src/index.tsx index 8be3b65..6170160 100644 --- a/packages/wallet-connect-sdk-react/src/index.tsx +++ b/packages/wallet-connect-sdk-react/src/index.tsx @@ -110,6 +110,8 @@ interface IWalletConnectContext extends Neo3Invoker, Neo3Signer { * @return network information */ getNetworkVersion: () => Promise + + wipeRequests: () => Promise } export const WalletConnectContext = React.createContext({} as IWalletConnectContext) @@ -257,6 +259,10 @@ export const WalletConnectProvider: React.FC<{ [getSdkOrError], ) + const wipeRequests = useCallback(() => { + return getSdkOrError().wipeRequests() + }, [getSdkOrError]) + const setupWcClient = useCallback(async () => { if (!options) return const wcSdk = await WcSdk.init(options) @@ -301,6 +307,7 @@ export const WalletConnectProvider: React.FC<{ decryptFromArray, signTransaction, calculateFee, + wipeRequests, } return {children} diff --git a/packages/wallet-connect-sdk-svelte/src/WcSdkStore.ts b/packages/wallet-connect-sdk-svelte/src/WcSdkStore.ts index cd0f13b..efb2542 100644 --- a/packages/wallet-connect-sdk-svelte/src/WcSdkStore.ts +++ b/packages/wallet-connect-sdk-svelte/src/WcSdkStore.ts @@ -212,6 +212,10 @@ export class WCSDKStore implements IWalletConnectStore { this.sessionWritable.set(result) } + async wipeRequests(): Promise { + return await this.SdkOrError.wipeRequests() + } + get session() { return derived(this.sessionWritable, (session) => session) } diff --git a/packages/wallet-connect-sdk-wallet-core/src/sdk.ts b/packages/wallet-connect-sdk-wallet-core/src/sdk.ts index 16b6771..7b21b25 100644 --- a/packages/wallet-connect-sdk-wallet-core/src/sdk.ts +++ b/packages/wallet-connect-sdk-wallet-core/src/sdk.ts @@ -18,6 +18,7 @@ import { TNamespaces, EStatus, TAdapterMethodParam, + ResponseErrorCode, } from './types' import { COMPATIBILITY_VERSION } from '@cityofzion/wallet-connect-sdk-core' import { sleep } from './utils' @@ -43,6 +44,7 @@ export class WcWalletSDK { private _proposals: TSessionProposal[] = [] private _requests: TSessionRequest[] = [] private _status: EStatus = EStatus.NOT_STARTED + private _nonAdapterMethods: Record Promise> private wccvs: Map = new Map() @@ -56,6 +58,9 @@ export class WcWalletSDK { constructor(options: TInitOptions) { this.clientOptions = options.clientOptions this.blockchainsOptions = options.blockchains + this._nonAdapterMethods = { + wipeRequests: this.wipeRequests.bind(this), + } } /** @@ -221,7 +226,7 @@ export class WcWalletSDK { await this.signClient.disconnect({ topic: session.topic, reason: reason ?? { - code: 5900, + code: ResponseErrorCode.DISCONNECT, message: 'USER_DISCONNECTED', }, }) @@ -290,7 +295,7 @@ export class WcWalletSDK { await this.signClient.reject({ id: proposal.id, reason: reason ?? { - code: 1, + code: ResponseErrorCode.REJECT, message: 'Rejected by the user', }, }) @@ -319,17 +324,23 @@ export class WcWalletSDK { const session = this.sessions.find((session) => session.topic === request.topic) if (!session) throw new Error('Session not found') - const method = request.params.request.method - if (!blockchainOptions.methods.includes(method)) throw new Error('Invalid request method') + let result: any = null - const adapterMethod = blockchainOptions.adapter[method] as (params: TAdapterMethodParam) => Promise - if (!adapterMethod || typeof adapterMethod !== 'function') throw new Error('Invalid request method') + const method = request.params.request.method + const nonAdapterMethod = this._nonAdapterMethods[method] const startExecutionTime = performance.now() - const result = await adapterMethod.apply(blockchainOptions.adapter, [{ request, session }]) + if (nonAdapterMethod && typeof nonAdapterMethod === 'function') { + result = await nonAdapterMethod.apply(this, [{ request, session }]) + } else if (blockchainOptions.methods.includes(method)) { + const adapterMethod = blockchainOptions.adapter[method] as (params: TAdapterMethodParam) => Promise + if (!adapterMethod || typeof adapterMethod !== 'function') throw new Error('Invalid request method') - const executionTime = performance.now() - startExecutionTime + result = await adapterMethod.apply(blockchainOptions.adapter, [{ request, session }]) + } else throw new Error('Invalid request method') + + const executionTime = Math.abs(performance.now() - startExecutionTime) if (executionTime < MIN_TIME_OF_EXECUTION) await sleep(MIN_TIME_OF_EXECUTION - executionTime) response = { @@ -367,7 +378,7 @@ export class WcWalletSDK { response: formatJsonRpcError( request.id, reason ?? { - code: 1, + code: ResponseErrorCode.REJECT, message: 'rejected by the user', }, ), @@ -377,4 +388,31 @@ export class WcWalletSDK { this.requests = filteredRequests } } + + private async wipeRequests({ session, request }: TAdapterMethodParam): Promise { + const wipedRequests: string[] = [] + const dappRequests: TSessionRequest[] = (this._requests.filter( + (dappRequest: TSessionRequest) => dappRequest.topic === session.topic && dappRequest.id !== request.id, + ) ?? []) as TSessionRequest[] + + await Promise.all( + dappRequests.map(async (dappRequest) => { + try { + await this.signClient.respond({ + topic: dappRequest.topic, + response: formatJsonRpcError(dappRequest.id, { + code: ResponseErrorCode.REJECT, + message: 'rejected by the dapp', + }), + }) + } finally { + wipedRequests.push(dappRequest.params.request.method) + } + }), + ) + + this.requests = this.requests.filter((dappRequest: TSessionRequest) => dappRequest.topic !== session.topic) + + return wipedRequests + } } diff --git a/packages/wallet-connect-sdk-wallet-core/src/types.ts b/packages/wallet-connect-sdk-wallet-core/src/types.ts index b521c71..d6c5590 100644 --- a/packages/wallet-connect-sdk-wallet-core/src/types.ts +++ b/packages/wallet-connect-sdk-wallet-core/src/types.ts @@ -63,4 +63,9 @@ export type TAdapterMethodParam = { session: TSession } +export enum ResponseErrorCode { + REJECT = 1, + DISCONNECT = 5900, +} + export { WalletConnectTypes }