diff --git a/packages/core/src/cypress/ensureRdpPort.ts b/packages/core/src/cypress/ensureRdpPort.ts new file mode 100644 index 000000000..bb7f0a6ba --- /dev/null +++ b/packages/core/src/cypress/ensureRdpPort.ts @@ -0,0 +1,13 @@ +export default function ensureRdpPort(args: string[]) { + const existing = args.find((arg) => arg.slice(0, 23) === '--remote-debugging-port') + + if (existing) { + return Number(existing.split('=')[1]) + } + + const port = 40000 + Math.round(Math.random() * 25000) + + args.push(`--remote-debugging-port=${port}`) + + return port +} diff --git a/packages/core/src/cypress/index.ts b/packages/core/src/cypress/index.ts new file mode 100644 index 000000000..3c8e8cf74 --- /dev/null +++ b/packages/core/src/cypress/index.ts @@ -0,0 +1 @@ +export { default as ensureRdpPort } from './ensureRdpPort' diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index 33435f5c6..49d444d32 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -1 +1,2 @@ export { default as testWithSynpress } from './testWithSynpress' +export * from './cypress' diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index fb7ea1374..ade8d9488 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -249,6 +249,9 @@ importers: '@vitest/coverage-v8': specifier: 1.2.2 version: 1.2.2(vitest@1.2.2) + cypress: + specifier: 13.9.0 + version: 13.9.0 rimraf: specifier: 5.0.5 version: 5.0.5 @@ -802,6 +805,39 @@ packages: chalk: 4.1.2 dev: true + /@cypress/request@3.0.1: + resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==} + engines: {node: '>= 6'} + dependencies: + aws-sign2: 0.7.0 + aws4: 1.12.0 + caseless: 0.12.0 + combined-stream: 1.0.8 + extend: 3.0.2 + forever-agent: 0.6.1 + form-data: 2.3.3 + http-signature: 1.3.6 + is-typedarray: 1.0.0 + isstream: 0.1.2 + json-stringify-safe: 5.0.1 + mime-types: 2.1.35 + performance-now: 2.1.0 + qs: 6.10.4 + safe-buffer: 5.2.1 + tough-cookie: 4.1.4 + tunnel-agent: 0.6.0 + uuid: 8.3.2 + dev: true + + /@cypress/xvfb@1.2.4(supports-color@8.1.1): + resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + dependencies: + debug: 3.2.7(supports-color@8.1.1) + lodash.once: 4.1.1 + transitivePeerDependencies: + - supports-color + dev: true + /@depay/solana-web3.js@1.26.0: resolution: {integrity: sha512-aAhDxfNGraE8VBwM5g/BhHnNCENlLSKDJ3yIh2EZd4mfmKM/4utv0cNUhTEytUAvvFoaMcOXXQ5U5sE1IMXFrQ==} dependencies: @@ -2392,6 +2428,14 @@ packages: resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} dev: true + /@types/sinonjs__fake-timers@8.1.1: + resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==} + dev: true + + /@types/sizzle@2.3.8: + resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + dev: true + /@types/statuses@2.0.5: resolution: {integrity: sha512-jmIUGWrAiwu3dZpxntxieC+1n/5c3mjrImkmOSQ2NC5uP6cYO4aAZDdSmRcI5C1oiTmqlZGHC+/NmJrKogbP5A==} dev: true @@ -2413,6 +2457,14 @@ packages: resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} dev: true + /@types/yauzl@2.10.3: + resolution: {integrity: sha512-oJoftv0LSuaDZE3Le4DbKX+KS9G36NzOeSap90UIK0yMA/NhKJhqlSGtNDORNRaIbQfzjXDrQa0ytJ6mNRGz/Q==} + requiresBuild: true + dependencies: + '@types/node': 20.11.17 + dev: true + optional: true + /@viem/anvil@0.0.7: resolution: {integrity: sha512-F+3ljCT1bEt8T4Fzm9gWpIgO3Dc7bzG1TtUtkStkJFMuummqZ8kvYc3UFMo5j3F51fSWZZvEkjs3+i7qf0AOqQ==} dependencies: @@ -2444,7 +2496,7 @@ packages: dependencies: '@ampproject/remapping': 2.3.0 '@bcoe/v8-coverage': 0.2.3 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-lib-source-maps: 4.0.1 @@ -2723,7 +2775,7 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -2935,17 +2987,37 @@ packages: engines: {node: '>=0.10.0'} dev: true + /asn1@0.2.6: + resolution: {integrity: sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==} + dependencies: + safer-buffer: 2.1.2 + dev: true + + /assert-plus@1.0.0: + resolution: {integrity: sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==} + engines: {node: '>=0.8'} + dev: true + /assertion-error@1.1.0: resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} dev: true + /astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + dev: true + /async@3.2.5: resolution: {integrity: sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==} dev: true /asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - dev: false + + /at-least-node@1.0.0: + resolution: {integrity: sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==} + engines: {node: '>= 4.0.0'} + dev: true /available-typed-arrays@1.0.7: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} @@ -2954,6 +3026,14 @@ packages: possible-typed-array-names: 1.0.0 dev: true + /aws-sign2@0.7.0: + resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==} + dev: true + + /aws4@1.12.0: + resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==} + dev: true + /axios@1.6.7: resolution: {integrity: sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==} dependencies: @@ -2981,6 +3061,16 @@ packages: resolution: {integrity: sha512-FuwxlW4H5kh37X/oW59pwTzzTKRzfrrQwhmyspRM7swOEZcHtDZSCt45U6oKgtuFE+WYPblePMVIPR4RZrh/hw==} dev: false + /base64-js@1.5.1: + resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} + dev: true + + /bcrypt-pbkdf@1.0.2: + resolution: {integrity: sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==} + dependencies: + tweetnacl: 0.14.5 + dev: true + /bech32@1.1.4: resolution: {integrity: sha512-s0IrSOzLlbvX7yp4WBfPITzpAU8sqQcpsmwXDiKwrG4r491vwCO/XpejasRNl0piBMe/DvP4Tz0mIS/X1DPJBQ==} dev: false @@ -3008,10 +3098,18 @@ packages: chainsaw: 0.1.0 dev: false + /blob-util@2.0.2: + resolution: {integrity: sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ==} + dev: true + /bluebird@3.4.7: resolution: {integrity: sha512-iD3898SR7sWVRHbiQv+sHUtHnMvC1o3nW5rAcqnq3uOn07DSAppZYUkIGslDz6gXC7HfunPe7YVBgoEJASPcHA==} dev: false + /bluebird@3.7.2: + resolution: {integrity: sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==} + dev: true + /bn.js@4.12.0: resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} dev: false @@ -3094,6 +3192,13 @@ packages: engines: {node: '>=0.10'} dev: false + /buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + dev: true + /buffers@0.1.1: resolution: {integrity: sha512-9q/rDEGSb/Qsvv2qvzIzdluL5k7AaJOTrw23z9reQthrbF7is4CtlT0DXyO1oei2DCp4uojjzQ7igaSHp1kAEQ==} engines: {node: '>=0.2.0'} @@ -3179,6 +3284,11 @@ packages: responselike: 3.0.0 dev: true + /cachedir@2.4.0: + resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==} + engines: {node: '>=6'} + dev: true + /call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -3209,6 +3319,10 @@ packages: engines: {node: '>=14.16'} dev: true + /caseless@0.12.0: + resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==} + dev: true + /chai@4.4.1: resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} @@ -3270,6 +3384,11 @@ packages: get-func-name: 2.0.2 dev: true + /check-more-types@2.24.0: + resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==} + engines: {node: '>= 0.8.0'} + dev: true + /chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -3304,6 +3423,13 @@ packages: engines: {node: '>=10'} dev: true + /cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + dependencies: + restore-cursor: 3.1.0 + dev: true + /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3325,6 +3451,14 @@ packages: '@colors/colors': 1.5.0 dev: true + /cli-truncate@2.1.0: + resolution: {integrity: sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg==} + engines: {node: '>=8'} + dependencies: + slice-ansi: 3.0.0 + string-width: 4.2.3 + dev: true + /cli-truncate@4.0.0: resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} engines: {node: '>=18'} @@ -3402,7 +3536,6 @@ packages: engines: {node: '>= 0.8'} dependencies: delayed-stream: 1.0.0 - dev: false /commander@10.0.1: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} @@ -3423,6 +3556,11 @@ packages: resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} engines: {node: '>= 6'} + /commander@6.2.1: + resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==} + engines: {node: '>= 6'} + dev: true + /commitlint-config-gitmoji@2.3.1: resolution: {integrity: sha512-T15ssbsyNc6szHlnGWo0/xvIA1mObqM70E9TwKNVTpksxhm+OdFht8hvDdKJAVi4nlZX5tcfTeILOi7SHBGH3w==} dependencies: @@ -3440,6 +3578,11 @@ packages: gitmojis: 3.14.0 dev: true + /common-tags@1.8.2: + resolution: {integrity: sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA==} + engines: {node: '>=4.0.0'} + dev: true + /compress-commons@5.0.3: resolution: {integrity: sha512-/UIcLWvwAQyVibgpQDPtfNM3SvqN7G9elAPAV7GM0L53EbNWwWiCsWtK8Fwed/APEbptPHXs5PuW+y8Bq8lFTA==} engines: {node: '>= 12.0.0'} @@ -3515,6 +3658,10 @@ packages: engines: {node: '>= 0.6'} dev: true + /core-util-is@1.0.2: + resolution: {integrity: sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==} + dev: true + /core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3581,6 +3728,63 @@ packages: stream-transform: 2.1.3 dev: true + /cypress@13.9.0: + resolution: {integrity: sha512-atNjmYfHsvTuCaxTxLZr9xGoHz53LLui3266WWxXJHY7+N6OdwJdg/feEa3T+buez9dmUXHT1izCOklqG82uCQ==} + engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0} + hasBin: true + requiresBuild: true + dependencies: + '@cypress/request': 3.0.1 + '@cypress/xvfb': 1.2.4(supports-color@8.1.1) + '@types/sinonjs__fake-timers': 8.1.1 + '@types/sizzle': 2.3.8 + arch: 2.2.0 + blob-util: 2.0.2 + bluebird: 3.7.2 + buffer: 5.7.1 + cachedir: 2.4.0 + chalk: 4.1.2 + check-more-types: 2.24.0 + cli-cursor: 3.1.0 + cli-table3: 0.6.5 + commander: 6.2.1 + common-tags: 1.8.2 + dayjs: 1.11.11 + debug: 4.3.4(supports-color@8.1.1) + enquirer: 2.4.1 + eventemitter2: 6.4.7 + execa: 4.1.0 + executable: 4.1.1 + extract-zip: 2.0.1(supports-color@8.1.1) + figures: 3.2.0 + fs-extra: 9.1.0 + getos: 3.2.1 + is-ci: 3.0.1 + is-installed-globally: 0.4.0 + lazy-ass: 1.6.0 + listr2: 3.14.0(enquirer@2.4.1) + lodash: 4.17.21 + log-symbols: 4.1.0 + minimist: 1.2.8 + ospath: 1.2.2 + pretty-bytes: 5.6.0 + process: 0.11.10 + proxy-from-env: 1.0.0 + request-progress: 3.0.0 + semver: 7.6.2 + supports-color: 8.1.1 + tmp: 0.2.3 + untildify: 4.0.0 + yauzl: 2.10.0 + dev: true + + /dashdash@1.14.1: + resolution: {integrity: sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + dev: true + /data-view-buffer@1.0.1: resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} engines: {node: '>= 0.4'} @@ -3608,6 +3812,10 @@ packages: is-data-view: 1.0.1 dev: true + /dayjs@1.11.11: + resolution: {integrity: sha512-okzr3f11N6WuqYtZSvm+F776mB41wRZMhKP+hc34YdW+KmtYYK9iqvHSwo2k9FEH3fhGXvOPV6yz2IcSrfRUDg==} + dev: true + /debug@2.6.9: resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} peerDependencies: @@ -3619,7 +3827,19 @@ packages: ms: 2.0.0 dev: true - /debug@4.3.4: + /debug@3.2.7(supports-color@8.1.1): + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + dependencies: + ms: 2.1.3 + supports-color: 8.1.1 + dev: true + + /debug@4.3.4(supports-color@8.1.1): resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -3629,6 +3849,7 @@ packages: optional: true dependencies: ms: 2.1.2 + supports-color: 8.1.1 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -3694,7 +3915,6 @@ packages: /delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dev: false /delegates@1.0.0: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} @@ -3747,6 +3967,13 @@ packages: /eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + /ecc-jsbn@0.1.2: + resolution: {integrity: sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==} + dependencies: + jsbn: 0.1.1 + safer-buffer: 2.1.2 + dev: true + /elliptic@6.5.4: resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==} dependencies: @@ -3777,6 +4004,12 @@ packages: dev: true optional: true + /end-of-stream@1.4.4: + resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} + dependencies: + once: 1.4.0 + dev: true + /enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -4061,6 +4294,10 @@ packages: - utf-8-validate dev: false + /eventemitter2@6.4.7: + resolution: {integrity: sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg==} + dev: true + /eventemitter3@4.0.7: resolution: {integrity: sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==} dev: false @@ -4069,6 +4306,21 @@ packages: resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} dev: true + /execa@4.1.0: + resolution: {integrity: sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==} + engines: {node: '>=10'} + dependencies: + cross-spawn: 7.0.3 + get-stream: 5.2.0 + human-signals: 1.1.1 + is-stream: 2.0.1 + merge-stream: 2.0.0 + npm-run-path: 4.0.1 + onetime: 5.1.2 + signal-exit: 3.0.7 + strip-final-newline: 2.0.0 + dev: true + /execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} @@ -4113,10 +4365,21 @@ packages: strip-final-newline: 3.0.0 dev: true + /executable@4.1.1: + resolution: {integrity: sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg==} + engines: {node: '>=4'} + dependencies: + pify: 2.3.0 + dev: true + /exponential-backoff@3.1.1: resolution: {integrity: sha512-dX7e/LHVJ6W3DE1MHWi9S1EYzDESENfLrYohG2G++ovZrYOkm4Knwa0mc1cn84xJOR4KEU0WSchhLbd0UklbHw==} dev: true + /extend@3.0.2: + resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + dev: true + /extendable-error@0.1.7: resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==} dev: true @@ -4130,6 +4393,25 @@ packages: tmp: 0.0.33 dev: true + /extract-zip@2.0.1(supports-color@8.1.1): + resolution: {integrity: sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg==} + engines: {node: '>= 10.17.0'} + hasBin: true + dependencies: + debug: 4.3.4(supports-color@8.1.1) + get-stream: 5.2.0 + yauzl: 2.10.0 + optionalDependencies: + '@types/yauzl': 2.10.3 + transitivePeerDependencies: + - supports-color + dev: true + + /extsprintf@1.3.0: + resolution: {integrity: sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==} + engines: {'0': node >=0.6.0} + dev: true + /fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} dev: true @@ -4167,6 +4449,19 @@ packages: dependencies: reusify: 1.0.4 + /fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + dependencies: + pend: 1.2.0 + dev: true + + /figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + dependencies: + escape-string-regexp: 1.0.5 + dev: true + /fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} @@ -4225,11 +4520,24 @@ packages: cross-spawn: 7.0.3 signal-exit: 4.1.0 + /forever-agent@0.6.1: + resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} + dev: true + /form-data-encoder@2.1.4: resolution: {integrity: sha512-yDYSgNMraqvnxiEXO4hi88+YZxaHC6QKzb5N84iRCTDeRO7ZALpir/lVmf/uXUhnwUr2O4HU8s/n6x+yNjQkHw==} engines: {node: '>= 14.17'} dev: true + /form-data@2.3.3: + resolution: {integrity: sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==} + engines: {node: '>= 0.12'} + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + dev: true + /form-data@4.0.0: resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} engines: {node: '>= 6'} @@ -4271,6 +4579,16 @@ packages: universalify: 0.1.2 dev: true + /fs-extra@9.1.0: + resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} + engines: {node: '>=10'} + dependencies: + at-least-node: 1.0.0 + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 + dev: true + /fs-minipass@2.1.0: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} @@ -4385,6 +4703,13 @@ packages: engines: {node: '>=12'} dev: true + /get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + dependencies: + pump: 3.0.0 + dev: true + /get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -4403,6 +4728,18 @@ packages: get-intrinsic: 1.2.4 dev: true + /getos@3.2.1: + resolution: {integrity: sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q==} + dependencies: + async: 3.2.5 + dev: true + + /getpass@0.1.7: + resolution: {integrity: sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==} + dependencies: + assert-plus: 1.0.0 + dev: true + /git-hooks-list@3.1.0: resolution: {integrity: sha512-LF8VeHeR7v+wAbXqfgRlTSX/1BJR9Q1vEMR8JAz1cEg6GX07+zyj3sAdDvYjj/xnlIfVuGgj4qBei1K3hKH+PA==} dev: true @@ -4645,7 +4982,7 @@ packages: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -4661,6 +4998,15 @@ packages: - debug dev: false + /http-signature@1.3.6: + resolution: {integrity: sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw==} + engines: {node: '>=0.10'} + dependencies: + assert-plus: 1.0.0 + jsprim: 2.0.2 + sshpk: 1.18.0 + dev: true + /http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -4674,7 +5020,7 @@ packages: engines: {node: '>= 6'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) transitivePeerDependencies: - supports-color dev: true @@ -4683,6 +5029,11 @@ packages: resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==} dev: true + /human-signals@1.1.1: + resolution: {integrity: sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==} + engines: {node: '>=8.12.0'} + dev: true + /human-signals@2.1.0: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} @@ -4730,6 +5081,10 @@ packages: dev: true optional: true + /ieee754@1.2.1: + resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + dev: true + /ignore-walk@6.0.5: resolution: {integrity: sha512-VuuG0wCnjhnylG1ABXT3dAuIpTNDs/G8jlpmwXY03fXoXy/8ZK8/T+hMzt8L4WnrLCJgdybqgPagnF/f97cg3A==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -5013,6 +5368,11 @@ packages: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} dev: true + /is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + dev: true + /is-weakref@1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -5054,6 +5414,10 @@ packages: ws: 8.13.0 dev: false + /isstream@0.1.2: + resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==} + dev: true + /istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -5072,7 +5436,7 @@ packages: resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} engines: {node: '>=10'} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -5126,6 +5490,10 @@ packages: argparse: 2.0.1 dev: true + /jsbn@0.1.1: + resolution: {integrity: sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==} + dev: true + /jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} dev: true @@ -5169,6 +5537,14 @@ packages: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} dev: true + /json-schema@0.4.0: + resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} + dev: true + + /json-stringify-safe@5.0.1: + resolution: {integrity: sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==} + dev: true + /json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5191,7 +5567,6 @@ packages: universalify: 2.0.1 optionalDependencies: graceful-fs: 4.2.11 - dev: false /jsonlines@0.1.1: resolution: {integrity: sha512-ekDrAGso79Cvf+dtm+mL8OBI2bmAOt3gssYs833De/C9NmIpWDWyUO4zPgB5x2/OhY366dkhgfPMYfwZF7yOZA==} @@ -5202,6 +5577,16 @@ packages: engines: {'0': node >= 0.2.0} dev: true + /jsprim@2.0.2: + resolution: {integrity: sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + extsprintf: 1.3.0 + json-schema: 0.4.0 + verror: 1.10.0 + dev: true + /keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} dependencies: @@ -5225,6 +5610,11 @@ packages: package-json: 8.1.1 dev: true + /lazy-ass@1.6.0: + resolution: {integrity: sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw==} + engines: {node: '> 0.8'} + dev: true + /lazystream@1.0.1: resolution: {integrity: sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==} engines: {node: '>= 0.6.3'} @@ -5251,7 +5641,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.1 @@ -5267,6 +5657,26 @@ packages: resolution: {integrity: sha512-3mk/Zag0+IJxeDrxSgaDPy4zZ3w05PRZeJNnlWhzFz5OkX49J4krc+A8X2d2M69vGMBEX0uyl8M+W+8gH+kBqQ==} dev: false + /listr2@3.14.0(enquirer@2.4.1): + resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==} + engines: {node: '>=10.0.0'} + peerDependencies: + enquirer: '>= 2.3.0 < 3' + peerDependenciesMeta: + enquirer: + optional: true + dependencies: + cli-truncate: 2.1.0 + colorette: 2.0.20 + enquirer: 2.4.1 + log-update: 4.0.0 + p-map: 4.0.0 + rfdc: 1.3.1 + rxjs: 7.8.1 + through: 2.3.8 + wrap-ansi: 7.0.0 + dev: true + /listr2@8.0.1: resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} engines: {node: '>=18.0.0'} @@ -5323,6 +5733,10 @@ packages: resolution: {integrity: sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==} dev: true + /lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + dev: true + /lodash.sortby@4.7.0: resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} @@ -5334,6 +5748,24 @@ packages: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true + /log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + dev: true + + /log-update@4.0.0: + resolution: {integrity: sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg==} + engines: {node: '>=10'} + dependencies: + ansi-escapes: 4.3.2 + cli-cursor: 3.1.0 + slice-ansi: 4.0.0 + wrap-ansi: 6.2.0 + dev: true + /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -6006,6 +6438,10 @@ packages: engines: {node: '>=0.10.0'} dev: true + /ospath@1.2.2: + resolution: {integrity: sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA==} + dev: true + /outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} dev: true @@ -6184,10 +6620,18 @@ packages: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} dev: true + /pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + dev: true + /perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} dev: true + /performance-now@2.1.0: + resolution: {integrity: sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==} + dev: true + /picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} dev: true @@ -6202,6 +6646,11 @@ packages: hasBin: true dev: true + /pify@2.3.0: + resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} + engines: {node: '>=0.10.0'} + dev: true + /pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} @@ -6291,6 +6740,11 @@ packages: hasBin: true dev: true + /pretty-bytes@5.6.0: + resolution: {integrity: sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==} + engines: {node: '>=6'} + dev: true + /pretty-format@29.7.0: resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6308,6 +6762,11 @@ packages: /process-nextick-args@2.0.1: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + /process@0.11.10: + resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} + engines: {node: '>= 0.6.0'} + dev: true + /progress@2.0.3: resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} engines: {node: '>=0.4.0'} @@ -6341,6 +6800,10 @@ packages: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} dev: true + /proxy-from-env@1.0.0: + resolution: {integrity: sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A==} + dev: true + /proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} dev: false @@ -6349,6 +6812,17 @@ packages: resolution: {integrity: sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==} dev: true + /psl@1.9.0: + resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} + dev: true + + /pump@3.0.0: + resolution: {integrity: sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==} + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + dev: true + /punycode@1.4.1: resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} dev: true @@ -6364,6 +6838,17 @@ packages: escape-goat: 4.0.0 dev: true + /qs@6.10.4: + resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==} + engines: {node: '>=0.6'} + dependencies: + side-channel: 1.0.6 + dev: true + + /querystringify@2.2.0: + resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} + dev: true + /queue-microtask@1.2.3: resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} @@ -6398,7 +6883,7 @@ packages: /rc-config-loader@4.1.3: resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} dependencies: - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) js-yaml: 4.1.0 json5: 2.2.3 require-from-string: 2.0.2 @@ -6554,6 +7039,12 @@ packages: engines: {node: '>=8'} dev: true + /request-progress@3.0.0: + resolution: {integrity: sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg==} + dependencies: + throttleit: 1.0.1 + dev: true + /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6570,7 +7061,6 @@ packages: /requires-port@1.0.0: resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} - dev: false /resolve-alpn@1.2.1: resolution: {integrity: sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==} @@ -6596,6 +7086,14 @@ packages: lowercase-keys: 3.0.0 dev: true + /restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + dev: true + /restore-cursor@4.0.0: resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -6883,6 +7381,24 @@ packages: engines: {node: '>=12'} dev: true + /slice-ansi@3.0.0: + resolution: {integrity: sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ==} + engines: {node: '>=8'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + + /slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + dev: true + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -6922,7 +7438,7 @@ packages: engines: {node: '>= 10'} dependencies: agent-base: 6.0.2 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) socks: 2.8.3 transitivePeerDependencies: - supports-color @@ -7025,6 +7541,22 @@ packages: resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} dev: true + /sshpk@1.18.0: + resolution: {integrity: sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==} + engines: {node: '>=0.10.0'} + hasBin: true + dependencies: + asn1: 0.2.6 + assert-plus: 1.0.0 + bcrypt-pbkdf: 1.0.2 + dashdash: 1.14.1 + ecc-jsbn: 0.1.2 + getpass: 0.1.7 + jsbn: 0.1.1 + safer-buffer: 2.1.2 + tweetnacl: 0.14.5 + dev: true + /ssri@10.0.6: resolution: {integrity: sha512-MGrFH9Z4NP9Iyhqn16sDtBpRRNJ0Y2hNa6D65h736fVSaPCHr4DM4sWUNvVaSuC+0OBGhwsrydQwmgfg5LncqQ==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} @@ -7213,6 +7745,12 @@ packages: dependencies: has-flag: 4.0.0 + /supports-color@8.1.1: + resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} + engines: {node: '>=10'} + dependencies: + has-flag: 4.0.0 + /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -7276,6 +7814,14 @@ packages: tslib: 2.6.2 dev: true + /throttleit@1.0.1: + resolution: {integrity: sha512-vDZpf9Chs9mAdfY046mcPt8fg5QSZr37hEH4TXYBnDF+izxgrbRGUAAaBvIk/fJm9aOFCGFd1EsNg5AZCbnQCQ==} + dev: true + + /through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + dev: true + /tinybench@2.8.0: resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} dev: true @@ -7308,6 +7854,11 @@ packages: os-tmpdir: 1.0.2 dev: true + /tmp@0.2.3: + resolution: {integrity: sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w==} + engines: {node: '>=14.14'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -7319,6 +7870,16 @@ packages: dependencies: is-number: 7.0.0 + /tough-cookie@4.1.4: + resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} + engines: {node: '>=6'} + dependencies: + psl: 1.9.0 + punycode: 2.3.1 + universalify: 0.2.0 + url-parse: 1.5.10 + dev: true + /tr46@1.0.1: resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} dependencies: @@ -7366,7 +7927,7 @@ packages: bundle-require: 4.1.0(esbuild@0.19.12) cac: 6.7.14 chokidar: 3.6.0 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) esbuild: 0.19.12 execa: 5.1.1 globby: 11.1.0 @@ -7401,12 +7962,18 @@ packages: engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} dependencies: '@tufjs/models': 1.0.4 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) make-fetch-happen: 11.1.1 transitivePeerDependencies: - supports-color dev: true + /tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + dependencies: + safe-buffer: 5.2.1 + dev: true + /turbo-darwin-64@1.12.3: resolution: {integrity: sha512-dDglIaux+A4jOnB9CDH69sujmrnuLJLrKw1t3J+if6ySlFuxSwC++gDq9TVuOZo2+S7lFkGh+x5ytn3wp+jE8Q==} cpu: [x64] @@ -7467,6 +8034,10 @@ packages: turbo-windows-arm64: 1.12.3 dev: true + /tweetnacl@0.14.5: + resolution: {integrity: sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==} + dev: true + /type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -7649,10 +8220,14 @@ packages: engines: {node: '>= 4.0.0'} dev: true + /universalify@0.2.0: + resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} + engines: {node: '>= 4.0.0'} + dev: true + /universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - dev: false /untildify@4.0.0: resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==} @@ -7707,9 +8282,21 @@ packages: punycode: 2.3.1 dev: true + /url-parse@1.5.10: + resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} + dependencies: + querystringify: 2.2.0 + requires-port: 1.0.0 + dev: true + /util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} + /uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + dev: true + /v8-to-istanbul@9.2.0: resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} engines: {node: '>=10.12.0'} @@ -7736,6 +8323,15 @@ packages: engines: {node: '>= 0.8'} dev: true + /verror@1.10.0: + resolution: {integrity: sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==} + engines: {'0': node >=0.6.0} + dependencies: + assert-plus: 1.0.0 + core-util-is: 1.0.2 + extsprintf: 1.3.0 + dev: true + /viem@2.9.9(typescript@5.3.3): resolution: {integrity: sha512-SUIHBL6M5IIlqDCMEQwAAvHzeglaM4FEqM6bCI+srLXtFYmrpV4tWhnpobQRNwh4f7HIksmKLLZ+cytv8FfnJQ==} peerDependencies: @@ -7765,7 +8361,7 @@ packages: hasBin: true dependencies: cac: 6.7.14 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) pathe: 1.1.2 picocolors: 1.0.1 vite: 5.2.11(@types/node@20.11.17) @@ -7905,7 +8501,7 @@ packages: acorn-walk: 8.3.2 cac: 6.7.14 chai: 4.4.1 - debug: 4.3.4 + debug: 4.3.4(supports-color@8.1.1) execa: 8.0.1 local-pkg: 0.5.0 magic-string: 0.30.10 @@ -8220,6 +8816,13 @@ packages: yargs-parser: 21.1.1 dev: true + /yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + dev: true + /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} diff --git a/wallets/ethereum-wallet-mock/cypress.config.ts b/wallets/ethereum-wallet-mock/cypress.config.ts new file mode 100644 index 000000000..e57319d60 --- /dev/null +++ b/wallets/ethereum-wallet-mock/cypress.config.ts @@ -0,0 +1,16 @@ +import { defineConfig } from 'cypress' +import { installSynpress } from './src/cypress' + +export default defineConfig({ + chromeWebSecurity: false, + e2e: { + baseUrl: 'http://localhost:9999', + specPattern: 'test/cypress/**/*.cy.{js,jsx,ts,tsx}', + supportFile: 'src/cypress/support/e2e.{js,jsx,ts,tsx}', + fixturesFolder: 'src/cypress/fixtures', + testIsolation: false, + async setupNodeEvents(on, config) { + return installSynpress(on, config) + } + } +}) diff --git a/wallets/ethereum-wallet-mock/cypress/screenshots/metamask/setupMetaMask.cy.ts/should add new MetaMask account (failed).png b/wallets/ethereum-wallet-mock/cypress/screenshots/metamask/setupMetaMask.cy.ts/should add new MetaMask account (failed).png new file mode 100644 index 000000000..ad858c099 Binary files /dev/null and b/wallets/ethereum-wallet-mock/cypress/screenshots/metamask/setupMetaMask.cy.ts/should add new MetaMask account (failed).png differ diff --git a/wallets/ethereum-wallet-mock/package.json b/wallets/ethereum-wallet-mock/package.json index 43bafcb3f..5296f1131 100644 --- a/wallets/ethereum-wallet-mock/package.json +++ b/wallets/ethereum-wallet-mock/package.json @@ -19,7 +19,9 @@ "build:types": "tsc --emitDeclarationOnly --project tsconfig.build.json", "clean": "rimraf dist types", "test:e2e:headful": "playwright test", + "test:e2e:headful:cypress": "cypress run --browser chrome --headed", "test:e2e:headless": "HEADLESS=true playwright test", + "test:e2e:headless:cypress": "cypress run --headless --browser chrome", "test:e2e:headless:ui": "HEADLESS=true playwright test --ui", "test:watch": "vitest watch", "types:check": "tsc --noEmit" @@ -34,6 +36,7 @@ "@synthetixio/synpress-tsconfig": "0.0.1-alpha.7", "@types/node": "20.11.17", "@vitest/coverage-v8": "1.2.2", + "cypress": "13.9.0", "rimraf": "5.0.5", "tsup": "8.0.2", "typescript": "5.3.3" diff --git a/wallets/ethereum-wallet-mock/playwright.config.ts b/wallets/ethereum-wallet-mock/playwright.config.ts index 0994ed0a0..a1c5c34e5 100644 --- a/wallets/ethereum-wallet-mock/playwright.config.ts +++ b/wallets/ethereum-wallet-mock/playwright.config.ts @@ -5,7 +5,7 @@ import { defineConfig, devices } from '@playwright/test' */ export default defineConfig({ // Look for test files in the "test/e2e" directory, relative to this configuration file. - testDir: './test/e2e', + testDir: './test/playwright', // We're increasing the timeout to 60 seconds to allow all traces to be recorded. // Sometimes it threw an error saying that traces were not recorded in the 30 seconds timeout limit. diff --git a/wallets/ethereum-wallet-mock/src/EthereumWalletMock.ts b/wallets/ethereum-wallet-mock/src/EthereumWalletMock.ts index 5e518c54c..602c6e105 100644 --- a/wallets/ethereum-wallet-mock/src/EthereumWalletMock.ts +++ b/wallets/ethereum-wallet-mock/src/EthereumWalletMock.ts @@ -9,8 +9,9 @@ export class EthereumWalletMock { seedPhrase = '' wallet: WalletMock = 'metamask' - constructor(readonly page: Page) { + constructor(readonly page: Page, wallet: WalletMock = 'metamask') { this.page = page + this.wallet = wallet } /** @@ -21,14 +22,25 @@ export class EthereumWalletMock { importWallet(seedPhrase: string) { this.seedPhrase = seedPhrase + console.log(this.wallet) + return this.page.evaluate( ([blockchain, wallet, accounts]) => { + class WalletConnectStub {} + + let connector: WalletConnectStub | undefined + + if (wallet === 'walletconnect') { + connector = WalletConnectStub + } + return Web3Mock.mock({ blockchain, wallet, accounts: { return: accounts - } + }, + connector }) }, [BLOCKCHAIN, this.wallet, [ACCOUNT_MOCK]] @@ -178,6 +190,7 @@ export class EthereumWalletMock { */ async connectToDapp(wallet: WalletMock = 'metamask') { this.wallet = wallet + return this.page.evaluate( ([blockchain, accounts, wallet]) => { // Cannot pass custom class as an argument to `page.evaluate` diff --git a/wallets/ethereum-wallet-mock/src/cypress/errors.ts b/wallets/ethereum-wallet-mock/src/cypress/errors.ts new file mode 100644 index 000000000..fe094a48b --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/errors.ts @@ -0,0 +1,3 @@ +export const NO_CONTEXT = 'No browser context found. Connect Playwright first - connectPlaywright()' +export const NO_PAGE = 'No page found. Use getPage()' +export const MISSING_INIT = 'EthereumWalletMock not initialized. Use initEthereumWalletMock()' diff --git a/wallets/ethereum-wallet-mock/src/cypress/index.ts b/wallets/ethereum-wallet-mock/src/cypress/index.ts new file mode 100644 index 000000000..c1cf1560a --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/index.ts @@ -0,0 +1 @@ +export { default as installSynpress } from './installSynpress' diff --git a/wallets/ethereum-wallet-mock/src/cypress/initEthereumWalletMock.ts b/wallets/ethereum-wallet-mock/src/cypress/initEthereumWalletMock.ts new file mode 100644 index 000000000..8fce2436e --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/initEthereumWalletMock.ts @@ -0,0 +1,77 @@ +import { readFileSync } from 'fs' +import { type BrowserContext, type Page, chromium } from '@playwright/test' + +import { EthereumWalletMock } from '../EthereumWalletMock' +import { SEED_PHRASE, mockEthereum, web3MockPath } from '../utils' +import { MISSING_INIT, NO_CONTEXT, NO_PAGE } from './errors' + +let context: BrowserContext | undefined +let cypressPage: Page | undefined +let ethereumWalletMock: EthereumWalletMock | undefined + +let ethereumObjectLoaded = false + +const getCypressPage = async () => { + if (!context) { + console.error(NO_CONTEXT) + return + } + + cypressPage = context.pages()[0] + + return cypressPage +} + +export async function connectPlaywrightToChrome(port: number) { + const debuggerDetails = await fetch(`http://127.0.0.1:${port}/json/version`) + + const debuggerDetailsConfig = (await debuggerDetails.json()) as { + webSocketDebuggerUrl: string + } + + const browser = await chromium.connectOverCDP(debuggerDetailsConfig.webSocketDebuggerUrl) + + context = browser.contexts()[0] + + return browser.isConnected() +} + +export async function initEthereumWalletMock(port: number) { + await connectPlaywrightToChrome(port) + + if (!context) { + console.error(NO_CONTEXT) + return + } + + await getCypressPage() + + if (!cypressPage) { + console.error(NO_PAGE) + return + } + + await context.addInitScript({ + content: `${readFileSync(web3MockPath, 'utf-8')}\n(${mockEthereum.toString()})();` + }) + + // As we want to refresh the page after mocking the ethereum object + if (!ethereumObjectLoaded) { + await cypressPage.reload() + ethereumObjectLoaded = true + } + + ethereumWalletMock = new EthereumWalletMock(cypressPage, 'coinbase') + await ethereumWalletMock.importWallet(SEED_PHRASE) +} + +export function getEthereumWalletMock() { + if (!context || !cypressPage || !ethereumWalletMock) { + console.error(MISSING_INIT) + return + } + + if (ethereumWalletMock) return ethereumWalletMock + + return new EthereumWalletMock(cypressPage) +} diff --git a/wallets/ethereum-wallet-mock/src/cypress/installSynpress.ts b/wallets/ethereum-wallet-mock/src/cypress/installSynpress.ts new file mode 100644 index 000000000..71c6f884c --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/installSynpress.ts @@ -0,0 +1,30 @@ +import { ensureRdpPort } from '@synthetixio/synpress-core' + +import { initEthereumWalletMock } from './initEthereumWalletMock' +import setupTasks from './setupTasks' + +let port: number + +export default function installSynpress(on: Cypress.PluginEvents, config: Cypress.PluginConfigOptions) { + const browsers = config.browsers.filter((b) => b.name === 'chrome') + if (browsers.length === 0) { + throw new Error('No Chrome browser found in the configuration') + } + + on('before:browser:launch', async (_, launchOptions) => { + // Enable debug mode to establish playwright connection + const args = Array.isArray(launchOptions) ? launchOptions : launchOptions.args + port = ensureRdpPort(args) + }) + + on('before:spec', async () => { + await initEthereumWalletMock(port) + }) + + setupTasks(on) + + return { + ...config, + browsers + } +} diff --git a/wallets/ethereum-wallet-mock/src/cypress/setupTasks.ts b/wallets/ethereum-wallet-mock/src/cypress/setupTasks.ts new file mode 100644 index 000000000..aed5ac9af --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/setupTasks.ts @@ -0,0 +1,39 @@ +import { getEthereumWalletMock } from "./initEthereumWalletMock"; +import type { WalletMock } from "../EthereumWalletMock"; + +export default function setupTasks(on: Cypress.PluginEvents) { + on("task", { + importWallet: async function (seedPhrase: string) { + const ethereumWalletMock = getEthereumWalletMock(); + if (ethereumWalletMock) { + await ethereumWalletMock.importWallet(seedPhrase); + return true; + } + return false; + }, + addNewAccount: async function () { + const ethereumWalletMock = getEthereumWalletMock(); + if (ethereumWalletMock) { + await ethereumWalletMock.addNewAccount(); + return true; + } + return false; + }, + getAllAccounts: async function () { + const ethereumWalletMock = getEthereumWalletMock(); + if (ethereumWalletMock) { + return await ethereumWalletMock.getAllAccounts(); + } + return []; + }, + connectToDapp: async function (walletName: WalletMock) { + const ethereumWalletMock = getEthereumWalletMock(); + + if (ethereumWalletMock) { + await ethereumWalletMock.connectToDapp(walletName); + return true; + } + return false; + }, + }); +} diff --git a/wallets/ethereum-wallet-mock/src/cypress/support/commands.ts b/wallets/ethereum-wallet-mock/src/cypress/support/commands.ts new file mode 100644 index 000000000..88021a178 --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/support/commands.ts @@ -0,0 +1,39 @@ +/// +// *********************************************** +// This example commands.ts shows you how to +// create various custom commands and overwrite +// existing commands. +// +// For more comprehensive examples of custom +// commands please read more here: +// https://on.cypress.io/custom-commands +// *********************************************** + +import type { WalletMock } from '../../EthereumWalletMock' +import type { Network } from '../../network/Network' + +declare global { + namespace Cypress { + interface Chainable { + importWallet(seedPhrase: string): Chainable + importWalletFromPrivateKey(privateKey: `0x${string}`): Chainable + addNewAccount(): Chainable + getAllAccounts(): Chainable> + switchAccount(accountAddress: string): Chainable + addNetwork(network: Network): Chainable + getAccountAddress(): Chainable<`0x${string}`> + switchNetwork(networkName: string): Chainable + connectToDapp(wallet?: WalletMock): Chainable + } + } +} + +Cypress.Commands.add('importWallet', (seedPhrase) => cy.task('importWallet', seedPhrase)) +Cypress.Commands.add('importWalletFromPrivateKey', (privateKey) => cy.task('importWalletFromPrivateKey', privateKey)) +Cypress.Commands.add('addNewAccount', () => cy.task('addNewAccount')) +Cypress.Commands.add('getAllAccounts', () => cy.task('getAllAccounts')) +Cypress.Commands.add('switchAccount', (accountAddress) => cy.task('switchAccount', accountAddress)) +Cypress.Commands.add('addNetwork', (network) => cy.task('addNetwork', network)) +Cypress.Commands.add('getAccountAddress', () => cy.task('getAccountAddress')) +Cypress.Commands.add('switchNetwork', (networkName) => cy.task('switchNetwork', networkName)) +Cypress.Commands.add('connectToDapp', (wallet) => cy.task('connectToDapp', wallet)) diff --git a/wallets/ethereum-wallet-mock/src/cypress/support/e2e.ts b/wallets/ethereum-wallet-mock/src/cypress/support/e2e.ts new file mode 100644 index 000000000..c90b6b6d3 --- /dev/null +++ b/wallets/ethereum-wallet-mock/src/cypress/support/e2e.ts @@ -0,0 +1,17 @@ +// *********************************************************** +// This example support/e2e.ts is processed and +// loaded automatically before your test files. +// +// This is a great place to put global configuration and +// behavior that modifies Cypress. +// +// You can change the location of this file or turn off +// automatically serving support files with the +// 'supportFile' configuration option. +// +// You can read more here: +// https://on.cypress.io/configuration +// *********************************************************** + +// Import commands.js using ES2015 syntax: +import './commands' diff --git a/wallets/ethereum-wallet-mock/src/fixtures/ethereumWalletMockFixtures.ts b/wallets/ethereum-wallet-mock/src/fixtures/ethereumWalletMockFixtures.ts index c69e9ca60..bb2b53853 100644 --- a/wallets/ethereum-wallet-mock/src/fixtures/ethereumWalletMockFixtures.ts +++ b/wallets/ethereum-wallet-mock/src/fixtures/ethereumWalletMockFixtures.ts @@ -1,16 +1,11 @@ import { readFileSync } from 'fs' -import { createRequire } from 'node:module' import { test as base } from '@playwright/test' import { EthereumWalletMock } from '../EthereumWalletMock' -import { SEED_PHRASE, mockEthereum } from '../utils' +import { SEED_PHRASE, mockEthereum, web3MockPath } from '../utils' export const ANVIL_CHAIN_ID = 31337 export const ANVIL_URL_URL = 'http://anvil:5000' -const require = createRequire(import.meta.url) -// Relative path to the web3-mock bundle -const web3MockPath = require.resolve('@depay/web3-mock/dist/umd/index.bundle.js') - type EthereumWalletMockFixtures = { ethereumWalletMock: EthereumWalletMock } diff --git a/wallets/ethereum-wallet-mock/src/utils/constants.ts b/wallets/ethereum-wallet-mock/src/utils/constants.ts index 9dfc79a8d..8ec553d44 100644 --- a/wallets/ethereum-wallet-mock/src/utils/constants.ts +++ b/wallets/ethereum-wallet-mock/src/utils/constants.ts @@ -1,3 +1,6 @@ +import { createRequire } from 'node:module' +const require = createRequire(import.meta.url) + export const BLOCKCHAIN = 'ethereum' export const ACCOUNT_MOCK = '0xd73b04b0e696b0945283defa3eee453814758f1a' @@ -7,3 +10,6 @@ export const SEED_PHRASE = 'test test test test test test test test test test te export const PRIVATE_KEY = 'ea084c575a01e2bbefcca3db101eaeab1d8af15554640a510c73692db24d0a6a' export const OPTIMISM_NETWORK_ID = '0xa' + +// Relative path to the web3-mock bundle +export const web3MockPath = require.resolve('@depay/web3-mock/dist/umd/index.bundle.js') diff --git a/wallets/ethereum-wallet-mock/test/cypress/metamask/setupMetaMask.cy.ts b/wallets/ethereum-wallet-mock/test/cypress/metamask/setupMetaMask.cy.ts new file mode 100644 index 000000000..8938da0ae --- /dev/null +++ b/wallets/ethereum-wallet-mock/test/cypress/metamask/setupMetaMask.cy.ts @@ -0,0 +1,7 @@ +it('should add new MetaMask account', () => { + cy.getAllAccounts().should('have.length', 1) + + cy.addNewAccount() + + cy.getAllAccounts().should('have.length', 2) +}) diff --git a/wallets/ethereum-wallet-mock/test/cypress/mock/mockEthereum.cy.ts b/wallets/ethereum-wallet-mock/test/cypress/mock/mockEthereum.cy.ts new file mode 100644 index 000000000..e0dae3be6 --- /dev/null +++ b/wallets/ethereum-wallet-mock/test/cypress/mock/mockEthereum.cy.ts @@ -0,0 +1,48 @@ +// it("should be able to access ethereum API", () => { +// cy.window().then((window) => { +// expect(!!window.ethereum).to.be.true; +// }); +// }); +// +// it("should be connected to metamask by default", () => { +// cy.window().then((window) => { +// expect(window.ethereum.isMetaMask).to.be.true; +// }); +// }); +// +// it("should connect to ethereum", () => { +// cy.window().then((window) => { +// window.ethereum +// .request({ +// method: "eth_chainId", +// }) +// .then((currentChainId: string) => { +// expect(currentChainId).to.equal("0x1"); +// }); +// }); +// }); + +it("should be able to connect to every supported ethereum wallet", () => { + cy.window().then((window) => { + expect(window.ethereum.isMetaMask).to.be.true; + expect(!!window.ethereum.isCoinbaseWallet).to.be.false; + }); + + // cy.connectToDapp("coinbase"); + // cy.window().then((window) => { + // console.log(window.ethereum) + // expect(window.ethereum.isCoinbaseWallet).to.be.true; + // }); + + // cy.connectToDapp("walletconnect"); + cy.importWallet('test test test test test test test test test test test junk') + // cy.window().then((window) => { + // expect(window.ethereum.isWalletLink).to.be.true; + // }); + + cy.reload(); + + cy.getAllAccounts().then(console.log) + + cy.wait(1000000) +}); diff --git a/wallets/ethereum-wallet-mock/test/e2e/addNewAccount.spec.ts b/wallets/ethereum-wallet-mock/test/e2e/addNewAccount.spec.ts deleted file mode 100644 index 9baf68fd4..000000000 --- a/wallets/ethereum-wallet-mock/test/e2e/addNewAccount.spec.ts +++ /dev/null @@ -1,17 +0,0 @@ -import test from '../synpress' - -const { expect } = test - -test('should add a new account with specified name', async ({ ethereumWalletMock }) => { - // Imported wallet includes 1 account - expect(await ethereumWalletMock.getAllAccounts()).toHaveLength(1) - - await ethereumWalletMock.addNewAccount() - - expect(await ethereumWalletMock.getAllAccounts()).toHaveLength(2) - - await ethereumWalletMock.addNewAccount() - await ethereumWalletMock.addNewAccount() - - expect(await ethereumWalletMock.getAllAccounts()).toHaveLength(4) -}) diff --git a/wallets/ethereum-wallet-mock/test/e2e/importWalletFromPrivateKey.spec.ts b/wallets/ethereum-wallet-mock/test/e2e/importWalletFromPrivateKey.spec.ts deleted file mode 100644 index 345c6b8a6..000000000 --- a/wallets/ethereum-wallet-mock/test/e2e/importWalletFromPrivateKey.spec.ts +++ /dev/null @@ -1,12 +0,0 @@ -import test from '../synpress' - -const { expect } = test - -test('should import account using private key', async ({ page, ethereumWalletMock }) => { - await ethereumWalletMock.importWalletFromPrivateKey( - '0xea084c575a01e2bbefcca3db101eaeab1d8af15554640a510c73692db24d0a6a' - ) - - await page.locator('#getAccounts').click() - await expect(page.locator('#getAccountsResult')).toHaveText('0xa2ce797cA71d0EaE1be5a7EffD27Fd6C38126801') -}) diff --git a/wallets/ethereum-wallet-mock/test/e2e/metamask/mock/mockEthereum.spec.ts b/wallets/ethereum-wallet-mock/test/e2e/metamask/mock/mockEthereum.spec.ts deleted file mode 100644 index 6b8ccf5e8..000000000 --- a/wallets/ethereum-wallet-mock/test/e2e/metamask/mock/mockEthereum.spec.ts +++ /dev/null @@ -1,42 +0,0 @@ -import synpress from '../../../synpress' - -const test = synpress - -const { expect } = test - -test('should be able to access ethereum API', async ({ page }) => { - const ethereum = await page.evaluate(() => window.ethereum) - expect(ethereum).toBeTruthy() -}) - -test('should be connected to metamask by default', async ({ page }) => { - const ethereum = await page.evaluate(() => window.ethereum) - expect(ethereum.isMetaMask).toBe(true) -}) - -test('should connect to ethereum', async ({ page }) => { - const currentChainId = await page.evaluate(() => - window.ethereum.request({ - method: 'eth_chainId' - }) - ) - - expect(currentChainId).toEqual('0x1') -}) - -test('should be able to connect to every supported ethereum wallet', async ({ page, ethereumWalletMock }) => { - // Metamask - let ethereum = await page.evaluate(() => window.ethereum) - expect(ethereum.isMetaMask).toBe(true) - expect(ethereum.isCoinbaseWallet).toBe(undefined) - - // Coinbase wallet - await ethereumWalletMock.connectToDapp('coinbase') - ethereum = await page.evaluate(() => window.ethereum) - expect(ethereum.isCoinbaseWallet).toBe(true) - - // Walletconnect - await ethereumWalletMock.connectToDapp('walletconnect') - ethereum = await page.evaluate(() => window.ethereum) - expect(ethereum.isWalletLink).toBe(true) -}) diff --git a/wallets/ethereum-wallet-mock/test/e2e/switchAccount.spec.ts b/wallets/ethereum-wallet-mock/test/e2e/switchAccount.spec.ts deleted file mode 100644 index d24721557..000000000 --- a/wallets/ethereum-wallet-mock/test/e2e/switchAccount.spec.ts +++ /dev/null @@ -1,10 +0,0 @@ -import test from '../synpress' - -const { expect } = test - -test('should switch account', async ({ page, ethereumWalletMock }) => { - await ethereumWalletMock.switchAccount('0x4444797cA71d0EaE1be5a7EffD27Fd6C38126801') - - await page.locator('#getAccounts').click() - await expect(page.locator('#getAccountsResult')).toHaveText('0x4444797cA71d0EaE1be5a7EffD27Fd6C38126801') -}) diff --git a/wallets/ethereum-wallet-mock/test/e2e/switchNetwork.spec.ts b/wallets/ethereum-wallet-mock/test/e2e/switchNetwork.spec.ts deleted file mode 100644 index 039fe2aef..000000000 --- a/wallets/ethereum-wallet-mock/test/e2e/switchNetwork.spec.ts +++ /dev/null @@ -1,34 +0,0 @@ -import { ANVIL_CHAIN_ID, ANVIL_URL_URL } from '../../src' - -import test from '../synpress' - -const { expect } = test - -function createAnvilNetwork() { - return { - name: 'Anvil', - rpcUrl: ANVIL_URL_URL, - chainId: ANVIL_CHAIN_ID, - blockExplorerUrl: 'https://etherscan.io/', - nativeCurrency: { - decimals: 18, - name: 'Anvil', - symbol: 'ETH' - } - } -} - -test('should switch network', async ({ ethereumWalletMock, page }) => { - const network = createAnvilNetwork() - - await ethereumWalletMock.addNetwork(network) - - await ethereumWalletMock.switchNetwork(network.name) - - const chainId = await page.evaluate(async () => { - return await window.ethereum.request({ method: 'eth_chainId' }) - }) - - // Mocked Optimism chain id due to https://github.com/DePayFi/web3-mock/issues/33 - expect(chainId).toBe('0xa') -}) diff --git a/wallets/ethereum-wallet-mock/test/e2e/metamask/addNewAccount.spec.ts b/wallets/ethereum-wallet-mock/test/playwright/metamask/addNewAccount.spec.ts similarity index 100% rename from wallets/ethereum-wallet-mock/test/e2e/metamask/addNewAccount.spec.ts rename to wallets/ethereum-wallet-mock/test/playwright/metamask/addNewAccount.spec.ts diff --git a/wallets/ethereum-wallet-mock/test/e2e/metamask/importWalletFromPrivateKey.spec.ts b/wallets/ethereum-wallet-mock/test/playwright/metamask/importWalletFromPrivateKey.spec.ts similarity index 100% rename from wallets/ethereum-wallet-mock/test/e2e/metamask/importWalletFromPrivateKey.spec.ts rename to wallets/ethereum-wallet-mock/test/playwright/metamask/importWalletFromPrivateKey.spec.ts diff --git a/wallets/ethereum-wallet-mock/test/e2e/metamask/switchAccount.spec.ts b/wallets/ethereum-wallet-mock/test/playwright/metamask/switchAccount.spec.ts similarity index 100% rename from wallets/ethereum-wallet-mock/test/e2e/metamask/switchAccount.spec.ts rename to wallets/ethereum-wallet-mock/test/playwright/metamask/switchAccount.spec.ts diff --git a/wallets/ethereum-wallet-mock/test/e2e/metamask/switchNetwork.spec.ts b/wallets/ethereum-wallet-mock/test/playwright/metamask/switchNetwork.spec.ts similarity index 100% rename from wallets/ethereum-wallet-mock/test/e2e/metamask/switchNetwork.spec.ts rename to wallets/ethereum-wallet-mock/test/playwright/metamask/switchNetwork.spec.ts diff --git a/wallets/ethereum-wallet-mock/test/e2e/mock/mockEthereum.spec.ts b/wallets/ethereum-wallet-mock/test/playwright/mock/mockEthereum.spec.ts similarity index 100% rename from wallets/ethereum-wallet-mock/test/e2e/mock/mockEthereum.spec.ts rename to wallets/ethereum-wallet-mock/test/playwright/mock/mockEthereum.spec.ts diff --git a/wallets/ethereum-wallet-mock/tsconfig.json b/wallets/ethereum-wallet-mock/tsconfig.json index f36ef006c..91c6d73bd 100644 --- a/wallets/ethereum-wallet-mock/tsconfig.json +++ b/wallets/ethereum-wallet-mock/tsconfig.json @@ -3,7 +3,9 @@ "extends": "./tsconfig.build.json", "compilerOptions": { "rootDir": ".", - "exactOptionalPropertyTypes": false // Allows for `undefined` in `playwright.config.ts` + "exactOptionalPropertyTypes": false, // Allows for `undefined` in `playwright.config.ts` + "types": ["cypress"], + "sourceMap": false }, "include": ["src", "test"], "files": ["environment.d.ts", "playwright.config.ts", "vitest.config.ts"] diff --git a/wallets/metamask/test/wallet-setup/basic.setup.d.ts b/wallets/metamask/test/wallet-setup/basic.setup.d.ts new file mode 100644 index 000000000..1bc70ea7c --- /dev/null +++ b/wallets/metamask/test/wallet-setup/basic.setup.d.ts @@ -0,0 +1,9 @@ +export declare const SEED_PHRASE = 'test test test test test test test test test test test junk' +export declare const PASSWORD = 'Tester@1234' +declare const _default: { + hash: string + fn: import('@synthetixio/synpress-cache').WalletSetupFunction + walletPassword: string +} +export default _default +//# sourceMappingURL=basic.setup.d.ts.map diff --git a/wallets/metamask/test/wallet-setup/basic.setup.d.ts.map b/wallets/metamask/test/wallet-setup/basic.setup.d.ts.map new file mode 100644 index 000000000..d4aad874b --- /dev/null +++ b/wallets/metamask/test/wallet-setup/basic.setup.d.ts.map @@ -0,0 +1 @@ +{"version":3,"file":"basic.setup.d.ts","sourceRoot":"","sources":["basic.setup.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,WAAW,gEAAgE,CAAA;AAExF,eAAO,MAAM,QAAQ,gBAAgB,CAAA;;;;;;AAErC,wBAIE"} \ No newline at end of file diff --git a/wallets/metamask/test/wallet-setup/basic.setup.ts b/wallets/metamask/test/wallet-setup/basic.setup.ts index 82b61fbff..bd95e161f 100644 --- a/wallets/metamask/test/wallet-setup/basic.setup.ts +++ b/wallets/metamask/test/wallet-setup/basic.setup.ts @@ -1,9 +1,9 @@ import { defineWalletSetup } from '@synthetixio/synpress-cache' import { MetaMask } from '../../src' -const SEED_PHRASE = 'test test test test test test test test test test test junk' +export const SEED_PHRASE = 'test test test test test test test test test test test junk' -const PASSWORD = 'Tester@1234' +export const PASSWORD = 'Tester@1234' export default defineWalletSetup(PASSWORD, async (context, walletPage) => { const metamask = new MetaMask(context, walletPage, PASSWORD) diff --git a/wallets/metamask/tsconfig.json b/wallets/metamask/tsconfig.json index d5e9e89c1..15e94bcc2 100644 --- a/wallets/metamask/tsconfig.json +++ b/wallets/metamask/tsconfig.json @@ -2,7 +2,8 @@ "extends": "./tsconfig.build.json", "compilerOptions": { "rootDir": ".", - "exactOptionalPropertyTypes": false // Allows for `undefined` in `playwright.config.ts` + "exactOptionalPropertyTypes": false, // Allows for `undefined` in `playwright.config.ts` + "types": ["cypress"], }, "include": [ "src",