diff --git a/package-lock.json b/package-lock.json index 58c9d8ee55e..208d540b3cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10278,6 +10278,548 @@ "win32" ] }, + "node_modules/@pact-foundation/pact": { + "version": "13.1.3", + "resolved": "https://registry.npmjs.org/@pact-foundation/pact/-/pact-13.1.3.tgz", + "integrity": "sha512-AYSGAfA6b29wQR9RJqoVxasdAV9bx5+wpXvGc654O4+WmpxHs4BF6e8JVAuYVtfb3ego/HyPp+qQ08qKW1Tnxg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@pact-foundation/pact-core": "^15.1.0", + "@types/express": "^4.17.11", + "axios": "^1.7.4", + "body-parser": "^1.20.3", + "cli-color": "^2.0.1", + "express": "^4.21.0", + "graphql": "^14.0.0", + "graphql-tag": "^2.9.1", + "http-proxy": "^1.18.1", + "https-proxy-agent": "^7.0.4", + "js-base64": "^3.6.1", + "lodash": "^4.17.21", + "lodash.isfunction": "3.0.8", + "lodash.isnil": "4.0.0", + "lodash.isundefined": "3.0.1", + "lodash.omit": "^4.5.0", + "pkginfo": "^0.4.1", + "ramda": "^0.30.0", + "randexp": "^0.5.3" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pact-foundation/pact-core": { + "version": "15.2.1", + "resolved": "https://registry.npmjs.org/@pact-foundation/pact-core/-/pact-core-15.2.1.tgz", + "integrity": "sha512-IhWwc026bqffjHAVjOfVnDzmhRlr7FBVrLeg/pKjhrcIi0Z/bWahU0u3LEKKctnMkICSH4nAVTYZEg3kUNTxag==", + "cpu": [ + "x64", + "ia32", + "arm64" + ], + "dev": true, + "license": "MIT", + "os": [ + "darwin", + "linux", + "win32" + ], + "dependencies": { + "check-types": "7.3.0", + "node-gyp-build": "^4.6.0", + "pino": "^8.7.0", + "pino-pretty": "^9.1.1", + "underscore": "1.12.1" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "deprecated": "Glob versions prior to v9 are no longer supported", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/help-me": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/help-me/-/help-me-4.2.0.tgz", + "integrity": "sha512-TAOnTB8Tz5Dw8penUuzHVrKNKlCIbwwbHnXraNJxPwf8LRtE2HlM84RYuezMFcwOJmoYOCWVDyJ8TQGxn9PgxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "glob": "^8.0.0", + "readable-stream": "^3.6.0" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/@pact-foundation/pact-core/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/pino-pretty": { + "version": "9.4.1", + "resolved": "https://registry.npmjs.org/pino-pretty/-/pino-pretty-9.4.1.tgz", + "integrity": "sha512-loWr5SNawVycvY//hamIzyz3Fh5OSpvkcO13MwdDW+eKIGylobPLqnVGTDwDXkdmpJd1BhEG+qhDw09h6SqJiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "colorette": "^2.0.7", + "dateformat": "^4.6.3", + "fast-copy": "^3.0.0", + "fast-safe-stringify": "^2.1.1", + "help-me": "^4.0.1", + "joycon": "^3.1.1", + "minimist": "^1.2.6", + "on-exit-leak-free": "^2.1.0", + "pino-abstract-transport": "^1.0.0", + "pump": "^3.0.0", + "readable-stream": "^4.0.0", + "secure-json-parse": "^2.4.0", + "sonic-boom": "^3.0.0", + "strip-json-comments": "^3.1.1" + }, + "bin": { + "pino-pretty": "bin.js" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/pino-pretty/node_modules/readable-stream": { + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.5.2.tgz", + "integrity": "sha512-yjavECdqeZ3GLXNgRXgeQEdz9fvDDkNKyHnbHRFtOr7/LcfgBcmct7t/ET+HaCTqfh06OzoAxrkN/IfjJBVe+g==", + "dev": true, + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@pact-foundation/pact-core/node_modules/underscore": { + "version": "1.12.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.12.1.tgz", + "integrity": "sha512-hEQt0+ZLDVUMhebKxL4x1BTtDY7bavVofhZ9KZ4aI26X9SRaE+Y3m83XUL1UP2jn8ynjndwCCpEHdUG+9pP1Tw==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/agent-base": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", + "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@pact-foundation/pact/node_modules/body-parser": { + "version": "1.20.3", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", + "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "dev": true, + "license": "MIT", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.13.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/@pact-foundation/pact/node_modules/body-parser/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/body-parser/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@pact-foundation/pact/node_modules/express": { + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.0.tgz", + "integrity": "sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng==", + "dev": true, + "license": "MIT", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.3", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.3.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.10", + "proxy-addr": "~2.0.7", + "qs": "6.13.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.19.0", + "serve-static": "1.16.2", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/express/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/express/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/finalhandler": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@pact-foundation/pact/node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/graphql": { + "version": "14.7.0", + "resolved": "https://registry.npmjs.org/graphql/-/graphql-14.7.0.tgz", + "integrity": "sha512-l0xWZpoPKpppFzMfvVyFmp9vLN7w/ZZJPefUicMCepfJeQ8sMcztloGYY9DfjVPo6tIUDzU5Hw3MUbIjj9AVVA==", + "dev": true, + "license": "MIT", + "dependencies": { + "iterall": "^1.2.2" + }, + "engines": { + "node": ">= 6.x" + } + }, + "node_modules/@pact-foundation/pact/node_modules/https-proxy-agent": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", + "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "dev": true, + "license": "MIT", + "dependencies": { + "agent-base": "^7.0.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@pact-foundation/pact/node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/merge-descriptors": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@pact-foundation/pact/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@pact-foundation/pact/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/path-to-regexp": { + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/qs": { + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.0.6" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/@pact-foundation/pact/node_modules/ramda": { + "version": "0.30.1", + "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", + "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", + "dev": true, + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/ramda" + } + }, + "node_modules/@pact-foundation/pact/node_modules/send": { + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "license": "MIT", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/@pact-foundation/pact/node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true, + "license": "MIT" + }, + "node_modules/@pact-foundation/pact/node_modules/send/node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/@pact-foundation/pact/node_modules/serve-static": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "dev": true, + "license": "MIT", + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.19.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, "node_modules/@phenomnomnominal/tsquery": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz", @@ -22850,12 +23392,13 @@ } }, "node_modules/axios": { - "version": "1.6.7", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.7.tgz", - "integrity": "sha512-/hDJGff6/c7u0hDkvkGxR/oy6CbCs8ziCsC7SqmhjfozqiJGc8Z11wrv9z9lYfY4K8l+H9TpjcMDX0xOZmx+RA==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", "dev": true, + "license": "MIT", "dependencies": { - "follow-redirects": "^1.15.4", + "follow-redirects": "^1.15.6", "form-data": "^4.0.0", "proxy-from-env": "^1.1.0" } @@ -24392,6 +24935,13 @@ "node": ">= 0.8.0" } }, + "node_modules/check-types": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/check-types/-/check-types-7.3.0.tgz", + "integrity": "sha512-bzDMlwEIZFtyK70RHwQhMCvXpPyJZgOCCKlvH9oAJz4quUQse8ZynYE5RQzKpY7b5PoL6G+jQMcZzUPD4p6tFg==", + "dev": true, + "license": "MIT" + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -24524,6 +25074,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/cli-color": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/cli-color/-/cli-color-2.0.4.tgz", + "integrity": "sha512-zlnpg0jNcibNrO7GG9IeHH7maWFeCz+Ja1wx/7tZNU5ASSSSZ+/qZciM0/LHCYxSdqv5h2sdbQ/PXYdOuetXvA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.64", + "es6-iterator": "^2.0.3", + "memoizee": "^0.4.15", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -26639,6 +27206,20 @@ "@commitlint/load": ">6.1.1" } }, + "node_modules/d": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.2.tgz", + "integrity": "sha512-MOqHvMWF9/9MX6nza0KgvFH4HpMU0EF5uUDXqX/BtxtU8NfB0QzRtJ8Oe/6SuS4kbhyzVJwjd97EA4PKrzJ8bw==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/damerau-levenshtein": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", @@ -26786,7 +27367,6 @@ "version": "4.6.3", "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-4.6.3.tgz", "integrity": "sha512-2P0p0pFGzHS5EMnhdxQi7aJN+iMheud0UhG4dlE1DLAlvL8JHjJJTX/CSm4JXwV0Ka5nGk3zC5mcb5bUQUxxMA==", - "peer": true, "engines": { "node": "*" } @@ -27991,6 +28571,16 @@ "url": "https://dotenvx.com" } }, + "node_modules/drange": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/drange/-/drange-1.1.1.tgz", + "integrity": "sha512-pYxfDYpued//QpnLIm4Avk7rsNtAtQkUES2cwAYSvD/wd2pKD71gN2Ebj3e7klzXwjocvE8c5vx/1fxwpqmSxA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/duplexer": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", @@ -28528,12 +29118,55 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/es5-ext": { + "version": "0.10.64", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.64.tgz", + "integrity": "sha512-p2snDhiLaXe6dahss1LddxqEm+SkuDvV8dnIQG0MWjyHpcMNfXKPE+/Cc0y+PhxJX3A4xGNeFCj5oc0BUh6deg==", + "dev": true, + "hasInstallScript": true, + "license": "ISC", + "dependencies": { + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.3", + "esniff": "^2.0.1", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/es6-error": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/es6-error/-/es6-error-4.1.1.tgz", "integrity": "sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==", "dev": true }, + "node_modules/es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha512-zw4SRzoUkd+cl+ZoE15A9o1oQd920Bb0iOJMQkQhl3jNc03YqVjAhG7scf9C5KWRU/R13Orf588uCC6525o02g==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "node_modules/es6-symbol": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.4.tgz", + "integrity": "sha512-U9bFFjX8tFiATgtkJ1zg25+KviIXpgRvRHS8sau3GfhVzThRQrOeksPeT0BWW2MNZs1OEWJ1DPXOQMn0KKRkvg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "ext": "^1.7.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/es6-templates": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/es6-templates/-/es6-templates-0.2.3.tgz", @@ -28590,6 +29223,19 @@ "node": ">=0.10.0" } }, + "node_modules/es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, "node_modules/esbuild": { "version": "0.23.1", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", @@ -30736,6 +31382,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/esniff": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/esniff/-/esniff-2.0.1.tgz", + "integrity": "sha512-kTUIGKQ/mDPFoJ0oVfcmyJn4iBDRptjNVIzwIFR7tqWXdVI9xfA2RMwY/gbSpJG3lkdWNEjLap/NqVHZiJsdfg==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.1", + "es5-ext": "^0.10.62", + "event-emitter": "^0.3.5", + "type": "^2.7.2" + }, + "engines": { + "node": ">=0.10" + } + }, "node_modules/espree": { "version": "9.6.1", "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", @@ -30837,6 +31499,17 @@ "node": ">= 0.6" } }, + "node_modules/event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha512-D9rRn9y7kLPnJ+hMq7S/nhvoKwwvVJahBi2BPmx3bvbsEdK3W9ii8cBSGjP+72/LnM4n6fo3+dkCX5FeTQruXA==", + "dev": true, + "license": "MIT", + "dependencies": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, "node_modules/event-target-shim": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", @@ -31017,6 +31690,16 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/ext": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.7.0.tgz", + "integrity": "sha512-6hxeJYaL110a9b5TEJSj0gojyHQAmA2ch5Os+ySCiA1QGdS697XWY1pzsrSjqA9LDEEgdB/KypIlR59RcLuHYw==", + "dev": true, + "license": "ISC", + "dependencies": { + "type": "^2.7.2" + } + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -31113,8 +31796,7 @@ "node_modules/fast-copy": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/fast-copy/-/fast-copy-3.0.2.tgz", - "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==", - "peer": true + "integrity": "sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==" }, "node_modules/fast-deep-equal": { "version": "3.1.3", @@ -31205,8 +31887,7 @@ "node_modules/fast-safe-stringify": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz", - "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==", - "peer": true + "integrity": "sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA==" }, "node_modules/fast-url-parser": { "version": "1.1.3", @@ -31908,9 +32589,9 @@ "integrity": "sha512-Rwix9pBtC1Nuy5wysTmKy+UjbDJpIfg8eHjw0rjZ1mX4GNLz1Bmd16uDpI3Gk1i70Fgcs8Csg2lPm8HULFg9DQ==" }, "node_modules/follow-redirects": { - "version": "1.15.5", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", - "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==", + "version": "1.15.9", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz", + "integrity": "sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==", "dev": true, "funding": [ { @@ -31918,6 +32599,7 @@ "url": "https://github.com/sponsors/RubenVerborgh" } ], + "license": "MIT", "engines": { "node": ">=4.0" }, @@ -35057,6 +35739,13 @@ "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", "dev": true }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", + "dev": true, + "license": "MIT" + }, "node_modules/is-proto-prop": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-proto-prop/-/is-proto-prop-2.0.0.tgz", @@ -35521,6 +36210,13 @@ "node": ">=8" } }, + "node_modules/iterall": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/iterall/-/iterall-1.3.0.tgz", + "integrity": "sha512-QZ9qOMdF+QLHxy1QIpUHUU1D5pS2CG2P69LF6L6CPjPYA/XMOmKV3PZpawHoAjHNyB0swdVTRxdYT4tbBbxqwg==", + "dev": true, + "license": "MIT" + }, "node_modules/iterator.prototype": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.2.tgz", @@ -37694,11 +38390,17 @@ "version": "3.1.1", "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", - "peer": true, "engines": { "node": ">=10" } }, + "node_modules/js-base64": { + "version": "3.7.7", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-3.7.7.tgz", + "integrity": "sha512-7rCnleh0z2CkXhH67J8K1Ytz0b2Y+yxTPL+/KOJoa20hfnVQ/3/T6W/KflYI4bRHRagNeXeU2bkNGI3v1oS/lw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/js-string-escape": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/js-string-escape/-/js-string-escape-1.0.1.tgz", @@ -39271,11 +39973,25 @@ "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==" }, + "node_modules/lodash.isfunction": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/lodash.isfunction/-/lodash.isfunction-3.0.8.tgz", + "integrity": "sha512-WQj3vccQSW5IKeRl8F0bezPlZH5/LFXtNPICsbZLsv+HmVfWAfrzy2ZajGqmNLonIjPIcPOk3uXOGv5jgPgTyg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.isinteger": { "version": "4.0.4", "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", "integrity": "sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==" }, + "node_modules/lodash.isnil": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/lodash.isnil/-/lodash.isnil-4.0.0.tgz", + "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.isnumber": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", @@ -39291,6 +40007,13 @@ "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", "integrity": "sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==" }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", + "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.kebabcase": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", @@ -39321,6 +40044,13 @@ "integrity": "sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==", "dev": true }, + "node_modules/lodash.omit": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.omit/-/lodash.omit-4.5.0.tgz", + "integrity": "sha512-XeqSp49hNGmlkj2EJlfrQFIzQ6lXdNro9sddtQzcJY8QaoC2GO0DT7xaIokHeyM+mIT0mPMlPvkYzg2xCuHdZg==", + "dev": true, + "license": "MIT" + }, "node_modules/lodash.once": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", @@ -39607,6 +40337,16 @@ "yallist": "^3.0.2" } }, + "node_modules/lru-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", + "integrity": "sha512-BpdYkt9EvGl8OfWHDQPISVpcl5xZthb+XPsbELj5AQXxIC8IriDZIQYjBJPEm5rS420sjZ0TLEzRcq5KdBhYrQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "es5-ext": "~0.10.2" + } + }, "node_modules/lz-string": { "version": "1.5.0", "resolved": "https://registry.npmjs.org/lz-string/-/lz-string-1.5.0.tgz", @@ -39813,6 +40553,26 @@ "url": "https://github.com/sponsors/streamich" } }, + "node_modules/memoizee": { + "version": "0.4.17", + "resolved": "https://registry.npmjs.org/memoizee/-/memoizee-0.4.17.tgz", + "integrity": "sha512-DGqD7Hjpi/1or4F/aYAspXKNm5Yili0QDAFAY4QYvpqpgiY6+1jOfqpmByzjxbWd/T9mChbCArXAbDAsTm5oXA==", + "dev": true, + "license": "ISC", + "dependencies": { + "d": "^1.0.2", + "es5-ext": "^0.10.64", + "es6-weak-map": "^2.0.3", + "event-emitter": "^0.3.5", + "is-promise": "^2.2.2", + "lru-queue": "^0.1.0", + "next-tick": "^1.1.0", + "timers-ext": "^0.1.7" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -40541,6 +41301,13 @@ } } }, + "node_modules/next-tick": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.1.0.tgz", + "integrity": "sha512-CXdUiJembsNjuToQvxayPZF9Vqht7hewsvy2sOWafLvi2awflj9mOC6bHIg50orX8IJvWKY9wYQ/zB2kogPslQ==", + "dev": true, + "license": "ISC" + }, "node_modules/next/node_modules/postcss": { "version": "8.4.31", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", @@ -41243,7 +42010,6 @@ "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-4.8.0.tgz", "integrity": "sha512-u6fs2AEUljNho3EYTJNBfImO5QTo/J/1Etd+NVdCj7qWKUSN/bSLkZwhDv7I+w/MSC6qJ4cknepkAYykDdK8og==", "dev": true, - "optional": true, "bin": { "node-gyp-build": "bin.js", "node-gyp-build-optional": "optional.js", @@ -43688,6 +44454,16 @@ "pathe": "^1.1.2" } }, + "node_modules/pkginfo": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/pkginfo/-/pkginfo-0.4.1.tgz", + "integrity": "sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, "node_modules/playwright": { "version": "1.44.1", "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.44.1.tgz", @@ -44857,6 +45633,20 @@ "url": "https://opencollective.com/ramda" } }, + "node_modules/randexp": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.5.3.tgz", + "integrity": "sha512-U+5l2KrcMNOUPYvazA3h5ekF80FHTUG+87SEAmHZmolh1M+i/WyTCxVzmi+tidIa1tM4BSe8g2Y/D3loWDjj+w==", + "dev": true, + "license": "MIT", + "dependencies": { + "drange": "^1.0.2", + "ret": "^0.2.0" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -46024,6 +46814,16 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "node_modules/ret": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.2.2.tgz", + "integrity": "sha512-M0b3YWQs7R3Z917WRQy1HHA7Ba7D8hvZg6UE5mLykJxQVE2ju0IXbGlaHPPlkY+WN7wFP+wUMXmBFA0aV6vYGQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/retry": { "version": "0.13.1", "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", @@ -46704,8 +47504,7 @@ "node_modules/secure-json-parse": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/secure-json-parse/-/secure-json-parse-2.7.0.tgz", - "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==", - "peer": true + "integrity": "sha512-6aU+Rwsezw7VR8/nyvKTx8QpWH9FrcYiXXlqC4z5d5XQBDRqtbfsRjnwGyqbi3gddNtWHuEk9OANUotL26qKUw==" }, "node_modules/select-hose": { "version": "2.0.0", @@ -49079,6 +49878,20 @@ "node": ">=4" } }, + "node_modules/timers-ext": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/timers-ext/-/timers-ext-0.1.8.tgz", + "integrity": "sha512-wFH7+SEAcKfJpfLPkrgMPvvwnEtj8W4IurvEyrKsDleXnKLCDw71w8jltvfLa8Rm4qQxxT4jmDBYbJG/z7qoww==", + "dev": true, + "license": "ISC", + "dependencies": { + "es5-ext": "^0.10.64", + "next-tick": "^1.1.0" + }, + "engines": { + "node": ">=0.12" + } + }, "node_modules/tiny-invariant": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", @@ -49593,6 +50406,13 @@ "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", "dev": true }, + "node_modules/type": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/type/-/type-2.7.3.tgz", + "integrity": "sha512-8j+1QmAbPvLZow5Qpi6NCaN8FB60p/6x8/vfNqOk/hC+HuvFZhL4+WfekuhQLiqFZXOgQdrs3B+XxEmCc6b3FQ==", + "dev": true, + "license": "ISC" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -55582,6 +56402,7 @@ "@microsoft/api-extractor": "7.47.3", "@microsoft/api-extractor-model": "7.29.3", "@microsoft/tsdoc": "0.15.0", + "@pact-foundation/pact": "13.1.3", "esbuild-plugin-alias-path": "2.0.2", "eslint-plugin-canonical": "4.18.0", "execa": "8.0.1", diff --git a/packages/atomic/playwright-utils/base-page-object.ts b/packages/atomic/playwright-utils/base-page-object.ts index 807285fd74c..db854756b92 100644 --- a/packages/atomic/playwright-utils/base-page-object.ts +++ b/packages/atomic/playwright-utils/base-page-object.ts @@ -22,13 +22,20 @@ export class BasePageObject< async load({ args, story = 'default', - }: {args?: Component; story?: string} = {}) { + queryParams = {}, + }: { + args?: Component; + story?: string; + queryParams?: Record; + } = {}) { if (args) { await this.page.goto( - `${this.urlRoot}?id=${this.tag}--${story}&args=${buildArgsParam(undefined, this.camelToKebab(args))}` + `${this.urlRoot}?id=${this.tag}--${story}&args=${buildArgsParam(undefined, this.camelToKebab(args))}&${new URLSearchParams(queryParams).toString()}` ); } else { - await this.page.goto(`${this.urlRoot}?id=${this.tag}--${story}`); + await this.page.goto( + `${this.urlRoot}?id=${this.tag}--${story}&${new URLSearchParams(queryParams).toString()}` + ); } } diff --git a/packages/atomic/playwright.config.ts b/packages/atomic/playwright.config.ts index a773b2e7a0c..91b07a25505 100644 --- a/packages/atomic/playwright.config.ts +++ b/packages/atomic/playwright.config.ts @@ -1,15 +1,21 @@ import {defineConfig, devices} from '@playwright/test'; +import {resolve} from 'node:path'; const DEFAULT_DESKTOP_VIEWPORT = { width: 1920, height: 1080, }; +const pactDirectory = resolve( + import.meta.dirname, + '../headless/pact-provider/pacts' +); + export default defineConfig({ testDir: './src', testMatch: '*.e2e.ts', fullyParallel: true, - forbidOnly: !!process.env.CI, + forbidOnly: !!process.env.CI && false, //temp retries: process.env.CI ? 2 : 0, workers: process.env.CI ? 1 : undefined, reporter: process.env.CI @@ -39,11 +45,19 @@ export default defineConfig({ timeout: 7 * 1000, }, webServer: process.env.CI - ? { - command: 'npx http-server ./dist-storybook -p 4400', - port: 4400, - timeout: 120 * 1000, - reuseExistingServer: !process.env.CI, - } + ? [ + { + command: 'npx http-server ./dist-storybook -p 4400', + port: 4400, + timeout: 120 * 1000, + reuseExistingServer: !process.env.CI, + }, + { + command: `docker run -t -p 1234:1234 -v "${pactDirectory}/:/app/pacts" pactfoundation/pact-stub-server -p 1234 -d pacts -o`, + port: 1234, + timeout: 60 * 10 * 1000, + reuseExistingServer: !process.env.CI, + }, + ] : undefined, }); diff --git a/packages/atomic/src/components/search/atomic-search-box/e2e/atomic-search-box.e2e.ts b/packages/atomic/src/components/search/atomic-search-box/e2e/atomic-search-box.e2e.ts index dc8d09792d9..9e7fd52e1bb 100644 --- a/packages/atomic/src/components/search/atomic-search-box/e2e/atomic-search-box.e2e.ts +++ b/packages/atomic/src/components/search/atomic-search-box/e2e/atomic-search-box.e2e.ts @@ -2,7 +2,12 @@ import {test, expect} from './fixture'; test.describe('default', () => { test.beforeEach(async ({searchBox}) => { - await searchBox.load({args: {suggestionTimeout: 5000}}); + await searchBox.load({ + args: {suggestionTimeout: 5000}, + queryParams: { + searchProxyUrl: encodeURIComponent('http://localhost:1234'), + }, + }); }); test('should have an enabled search button', async ({searchBox}) => { @@ -21,7 +26,7 @@ test.describe('default', () => { await searchBox.searchInput.click(); }); - test('should display suggested queries', async ({searchBox}) => { + test.only('should display suggested queries', async ({searchBox}) => { await expect(searchBox.searchSuggestions().first()).toBeVisible(); }); diff --git a/packages/atomic/storybookUtils/search/search-interface-wrapper.tsx b/packages/atomic/storybookUtils/search/search-interface-wrapper.tsx index f1b742f1d6e..b5491112a93 100644 --- a/packages/atomic/storybookUtils/search/search-interface-wrapper.tsx +++ b/packages/atomic/storybookUtils/search/search-interface-wrapper.tsx @@ -27,10 +27,17 @@ export const wrapInSearchInterface = ( 'root-interface' ); await step('Render the Search Interface', async () => { - await searchInterface!.initialize({ + const engineConfig = { ...getSampleSearchEngineConfiguration(), ...config, - }); + }; + const proxyUrl = new URL( + searchInterface.ownerDocument.location.href + ).searchParams.get('searchProxyUrl'); + if (proxyUrl) { + engineConfig.search!.proxyBaseUrl = decodeURIComponent(proxyUrl); + } + await searchInterface!.initialize(engineConfig); }); if (skipFirstSearch) { return; diff --git a/packages/bueno/src/values/string-value.ts b/packages/bueno/src/values/string-value.ts index 78f9a04d452..4c9e819eb37 100644 --- a/packages/bueno/src/values/string-value.ts +++ b/packages/bueno/src/values/string-value.ts @@ -9,9 +9,6 @@ interface StringValueConfig extends ValueConfig { ISODate?: boolean; } -// Source: https://github.com/jquery-validation/jquery-validation/blob/c1db10a34c0847c28a5bd30e3ee1117e137ca834/src/core.js#L1349 -const urlRegex = - /^(?:(?:(?:https?|ftp):)?\/\/)(?:\S+(?::\S*)?@)?(?:(?!(?:10|127)(?:\.\d{1,3}){3})(?!(?:169\.254|192\.168)(?:\.\d{1,3}){2})(?!172\.(?:1[6-9]|2\d|3[0-1])(?:\.\d{1,3}){2})(?:[1-9]\d?|1\d\d|2[01]\d|22[0-3])(?:\.(?:1?\d{1,2}|2[0-4]\d|25[0-5])){2}(?:\.(?:[1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(?:(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)(?:\.(?:[a-z\u00a1-\uffff0-9]-*)*[a-z\u00a1-\uffff0-9]+)*(?:\.(?:[a-z\u00a1-\uffff]{2,})).?)(?::\d{2,5})?(?:[/?#]\S*)?$/i; const ISODateStringRegex = /^\d{4}(-\d\d(-\d\d(T\d\d:\d\d(:\d\d)?(\.\d+)?(([+-]\d\d:\d\d)|Z)?)?)?)?$/i; @@ -48,8 +45,12 @@ export class StringValue return 'value is an empty string.'; } - if (url && !urlRegex.test(value)) { - return 'value is not a valid URL.'; + if (url) { + try { + new URL(value); + } catch (error) { + return 'value is not a valid URL.'; + } } if (regex && !regex.test(value)) { diff --git a/packages/bueno/tsconfig.json b/packages/bueno/tsconfig.json index bd8d6d5a735..82060685445 100644 --- a/packages/bueno/tsconfig.json +++ b/packages/bueno/tsconfig.json @@ -8,8 +8,7 @@ "esModuleInterop": true, "noUnusedLocals": true, "noUnusedParameters": true, - "isolatedModules": true, - "types": [] + "isolatedModules": true }, "include": ["src"], "exclude": ["**/*.test.ts"] diff --git a/packages/bueno/tsconfig.test.json b/packages/bueno/tsconfig.test.json index 1db23a4d5ed..a8d4317b49c 100644 --- a/packages/bueno/tsconfig.test.json +++ b/packages/bueno/tsconfig.test.json @@ -1,5 +1,4 @@ { "extends": "./tsconfig.json", - "compilerOptions": {"types": ["jest"]}, "exclude": [] } diff --git a/packages/headless/package.json b/packages/headless/package.json index 19fb833b3d0..14f3e1a8c1d 100644 --- a/packages/headless/package.json +++ b/packages/headless/package.json @@ -166,6 +166,7 @@ "@microsoft/api-extractor": "7.47.3", "@microsoft/api-extractor-model": "7.29.3", "@microsoft/tsdoc": "0.15.0", + "@pact-foundation/pact": "13.1.3", "esbuild-plugin-alias-path": "2.0.2", "eslint-plugin-canonical": "4.18.0", "execa": "8.0.1", diff --git a/packages/headless/pact-provider/commons/actionHistoryMatcher.ts b/packages/headless/pact-provider/commons/actionHistoryMatcher.ts new file mode 100644 index 00000000000..61bed2d17aa --- /dev/null +++ b/packages/headless/pact-provider/commons/actionHistoryMatcher.ts @@ -0,0 +1,19 @@ +import {MatchersV3} from '@pact-foundation/pact'; +import {iso8601Matcher} from './timeMatchers.js'; + +const actionHistoryQueryMatcher = { + name: 'Query', + time: iso8601Matcher, + value: MatchersV3.string(), +}; + +const actionHistoryPageViewMatcher = { + name: 'PageView', + time: iso8601Matcher, + value: MatchersV3.string(), +}; + +export const actionsHistoryMatchers = MatchersV3.eachLike( + [actionHistoryQueryMatcher, actionHistoryPageViewMatcher], + 0 +); diff --git a/packages/headless/pact-provider/commons/analyticsMatcher.ts b/packages/headless/pact-provider/commons/analyticsMatcher.ts new file mode 100644 index 00000000000..5a8aad5875f --- /dev/null +++ b/packages/headless/pact-provider/commons/analyticsMatcher.ts @@ -0,0 +1,14 @@ +import {MatchersV3} from '@pact-foundation/pact'; +import {iso8601Matcher} from './timeMatchers.js'; + +export const analyticsMatcher = { + clientId: MatchersV3.uuid('7e1ca7a0-b049-45cd-8f25-54bbb6722ea7'), + clientTimestamp: iso8601Matcher, + documentReferrer: MatchersV3.string(), + documentLocation: MatchersV3.string(), + originContext: 'Search', + capture: true, + source: MatchersV3.arrayContaining( + MatchersV3.regex(/@coveo\/headless@\d+.\d+.\d+/, '@coveo/headless@0.0.0') + ), +}; diff --git a/packages/headless/pact-provider/commons/timeMatchers.ts b/packages/headless/pact-provider/commons/timeMatchers.ts new file mode 100644 index 00000000000..aa581f4fa7e --- /dev/null +++ b/packages/headless/pact-provider/commons/timeMatchers.ts @@ -0,0 +1,6 @@ +import {MatchersV3} from '@pact-foundation/pact'; + +export const iso8601Matcher = MatchersV3.timestamp( + "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", + '2021-01-01T00:00:00.000Z' +); diff --git a/packages/headless/pact-provider/pacts/Headless-SearchUI.json b/packages/headless/pact-provider/pacts/Headless-SearchUI.json new file mode 100644 index 00000000000..b9c93b5f5c2 --- /dev/null +++ b/packages/headless/pact-provider/pacts/Headless-SearchUI.json @@ -0,0 +1,285 @@ +{ + "consumer": { + "name": "Headless" + }, + "interactions": [ + { + "description": "a request for query suggestions", + "providerStates": [ + { + "name": "There are suggestions" + } + ], + "request": { + "body": { + "actionsHistory": [], + "analytics": { + "capture": true, + "clientId": "7e1ca7a0-b049-45cd-8f25-54bbb6722ea7", + "clientTimestamp": "2021-01-01T00:00:00.000Z", + "documentLocation": "some string", + "documentReferrer": "some string", + "originContext": "Search", + "source": ["@coveo/headless@0.0.0"] + }, + "count": 1234, + "locale": "en", + "q": "", + "searchHub": "default", + "tab": "default", + "timezone": "America/Toronto" + }, + "generators": { + "body": { + "$.count": { + "max": 10, + "min": 0, + "type": "RandomInt" + } + } + }, + "headers": { + "Content-Type": "application/json" + }, + "matchingRules": { + "body": { + "$.actionsHistory": { + "combine": "AND", + "matchers": [ + { + "match": "type", + "min": 0 + } + ] + }, + "$.analytics.clientId": { + "combine": "AND", + "matchers": [ + { + "match": "regex", + "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + ] + }, + "$.analytics.clientTimestamp": { + "combine": "AND", + "matchers": [ + { + "format": "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", + "match": "datetime" + } + ] + }, + "$.analytics.documentLocation": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.analytics.documentReferrer": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.analytics.source": { + "combine": "AND", + "matchers": [ + { + "match": "arrayContains", + "variants": [ + { + "index": 0, + "rules": { + "$": { + "combine": "AND", + "matchers": [ + { + "match": "regex", + "regex": "@coveo\\/headless@\\d+.\\d+.\\d+" + } + ] + } + } + } + ] + } + ] + }, + "$.count": { + "combine": "AND", + "matchers": [ + { + "match": "number" + } + ] + }, + "$.locale": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.searchHub": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.tab": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.timezone": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + } + }, + "query": { + "organizationId": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + } + } + }, + "method": "POST", + "path": "/querySuggest", + "query": { + "organizationId": ["some string"] + } + }, + "response": { + "body": { + "completions": [ + { + "executableConfidence": 12.34, + "expression": "suede", + "highlighted": "[suede]", + "objectId": "e2490de5-5bd3-43d5-b7c4-526e33f71304", + "score": 1 + } + ], + "responseId": "e2490de5-5bd3-43d5-b7c4-526e33f71304" + }, + "generators": { + "body": { + "$.completions[*].executableConfidence": { + "digits": 10, + "type": "RandomDecimal" + }, + "$.completions[*].objectId": { + "type": "Uuid" + }, + "$.responseId": { + "type": "Uuid" + } + } + }, + "headers": { + "Content-Type": "application/json" + }, + "matchingRules": { + "body": { + "$.completions": { + "combine": "AND", + "matchers": [ + { + "match": "type", + "max": 8 + } + ] + }, + "$.completions[*].executableConfidence": { + "combine": "AND", + "matchers": [ + { + "match": "decimal" + } + ] + }, + "$.completions[*].expression": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.completions[*].highlighted": { + "combine": "AND", + "matchers": [ + { + "match": "type" + } + ] + }, + "$.completions[*].objectId": { + "combine": "AND", + "matchers": [ + { + "match": "regex", + "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + ] + }, + "$.completions[*].score": { + "combine": "AND", + "matchers": [ + { + "match": "decimal" + } + ] + }, + "$.responseId": { + "combine": "AND", + "matchers": [ + { + "match": "regex", + "regex": "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}" + } + ] + } + }, + "header": {}, + "status": {} + }, + "status": 200 + } + } + ], + "metadata": { + "pact-js": { + "version": "13.1.3" + }, + "pactRust": { + "ffi": "0.4.22", + "models": "1.2.3" + }, + "pactSpecification": { + "version": "3.0.0" + } + }, + "provider": { + "name": "SearchUI" + } +} diff --git a/packages/headless/pact-provider/provider.ts b/packages/headless/pact-provider/provider.ts new file mode 100644 index 00000000000..f5c271ec675 --- /dev/null +++ b/packages/headless/pact-provider/provider.ts @@ -0,0 +1,21 @@ +import {PactV3} from '@pact-foundation/pact'; +import {resolve} from 'node:path'; +import { + queryMatcherFactory, + responseMatcherFactory, +} from './querySuggest/matcher.js'; + +// Create a 'pact' between the two applications in the integration we are testing +export const providerFactory = () => + new PactV3({ + dir: resolve(import.meta.dirname, 'pacts'), + consumer: 'Headless', + provider: 'SearchUI', + }); + +export const addSuggestionInteraction = (provider: PactV3) => + provider + .given('There are suggestions') + .uponReceiving('a request for query suggestions') + .withRequest(queryMatcherFactory()) + .willRespondWith(responseMatcherFactory()); diff --git a/packages/headless/pact-provider/querySuggest/matcher.ts b/packages/headless/pact-provider/querySuggest/matcher.ts new file mode 100644 index 00000000000..7dffc6c10d6 --- /dev/null +++ b/packages/headless/pact-provider/querySuggest/matcher.ts @@ -0,0 +1,40 @@ +import {MatchersV3} from '@pact-foundation/pact'; +import {actionsHistoryMatchers} from '../commons/actionHistoryMatcher.js'; +import {analyticsMatcher} from '../commons/analyticsMatcher.js'; + +export const queryMatcherFactory = () => ({ + method: 'POST', + path: '/querySuggest', + query: { + organizationId: MatchersV3.string(), + }, + body: { + actionsHistory: actionsHistoryMatchers, + analytics: analyticsMatcher, + q: '', + count: MatchersV3.number(), + locale: MatchersV3.string('en'), + timezone: MatchersV3.string('America/Toronto'), + tab: MatchersV3.string('default'), + searchHub: MatchersV3.string('default'), + }, +}); + +export const responseMatcherFactory = () => ({ + status: 200, + headers: {'Content-Type': 'application/json'}, + body: { + completions: MatchersV3.atMostLike( + { + expression: MatchersV3.string('suede'), + score: MatchersV3.decimal(1.0), + highlighted: MatchersV3.string('[suede]'), + executableConfidence: MatchersV3.decimal(), + objectId: MatchersV3.uuid(), + }, + 8, + 1 + ), + responseId: MatchersV3.uuid(), + }, +}); diff --git a/packages/headless/pact-provider/utils/commons.ts b/packages/headless/pact-provider/utils/commons.ts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/packages/headless/src/api/analytics/search-analytics.test.ts b/packages/headless/src/api/analytics/search-analytics.test.ts index b238254b84f..c77e6ae4b6a 100644 --- a/packages/headless/src/api/analytics/search-analytics.test.ts +++ b/packages/headless/src/api/analytics/search-analytics.test.ts @@ -256,7 +256,7 @@ describe('#configureLegacyAnalytics', () => { facetValue ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', facetField: state.facetSet[facetId].request.field, facetId, facetTitle: `${state.facetSet[facetId].request.field}_${facetId}`, @@ -275,7 +275,7 @@ describe('#configureLegacyAnalytics', () => { facetId ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', facetField: state.facetSet[facetId].request.field, facetId, facetTitle: `${state.facetSet[facetId].request.field}_${facetId}`, @@ -295,7 +295,7 @@ describe('#configureLegacyAnalytics', () => { criteria ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', facetField: state.facetSet[facetId].request.field, facetId, facetTitle: `${state.facetSet[facetId].request.field}_${facetId}`, @@ -321,7 +321,7 @@ describe('#configureLegacyAnalytics', () => { () => state ).getRangeBreadcrumbFacetMetadata(facetId, facetValue) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', facetField: state.facetSet[facetId].request.field, facetId, facetTitle: `${state.facetSet[facetId].request.field}_${facetId}`, @@ -339,7 +339,7 @@ describe('#configureLegacyAnalytics', () => { expect( new SearchAnalyticsProvider(() => state).getResultSortMetadata() ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', resultsSortBy, }); }); @@ -358,7 +358,7 @@ describe('#configureLegacyAnalytics', () => { staticFilterValue ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', staticFilterId, staticFilterValue, }); @@ -373,7 +373,7 @@ describe('#configureLegacyAnalytics', () => { undoneQuery ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', undoneQuery, }); }); @@ -390,7 +390,7 @@ describe('#configureLegacyAnalytics', () => { () => state ).getCategoryBreadcrumbFacetMetadata(categoryFacetId, categoryFacetPath) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', categoryFacetField: state.categoryFacetSet[categoryFacetId].request.field, categoryFacetId, @@ -431,7 +431,7 @@ describe('#configureLegacyAnalytics', () => { suggestion ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', partialQueries, partialQuery: partialQueries[partialQueries.length - 1], querySuggestResponseId: '', @@ -448,7 +448,7 @@ describe('#configureLegacyAnalytics', () => { expect( new SearchAnalyticsProvider(() => state).getInterfaceChangeMetadata() ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', interfaceChangeTo: originLevel2, }); }); @@ -469,7 +469,7 @@ describe('#configureLegacyAnalytics', () => { metadata ) ).toEqual({ - coveoHeadlessVersion: 'Test version', + coveoHeadlessVersion: '0.0.0', ...metadata, }); }); diff --git a/packages/headless/src/api/search/search-api-client.test.ts b/packages/headless/src/api/search/search-api-client.test.ts index 6aaf39bcc35..694ca43a83c 100644 --- a/packages/headless/src/api/search/search-api-client.test.ts +++ b/packages/headless/src/api/search/search-api-client.test.ts @@ -416,7 +416,6 @@ describe('search api client', () => { timezone: state.configuration.search.timezone, locale: state.configuration.search.locale, actionsHistory: expect.any(Array), - visitorId: expect.any(String), }, preprocessRequest: NoopPreprocessRequest, requestMetadata: {method: 'querySuggest'}, diff --git a/packages/headless/src/controllers/search-box/__snapshots__/headless-search-box.contract.test.ts.snap b/packages/headless/src/controllers/search-box/__snapshots__/headless-search-box.contract.test.ts.snap new file mode 100644 index 00000000000..26e019abc20 --- /dev/null +++ b/packages/headless/src/controllers/search-box/__snapshots__/headless-search-box.contract.test.ts.snap @@ -0,0 +1,16 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`SearchBox > when there are suggestions available > should return suggestions 1`] = ` +{ + "isLoading": false, + "isLoadingSuggestions": false, + "searchBoxId": "search_boxi", + "suggestions": [ + { + "highlightedValue": "suede", + "rawValue": "suede", + }, + ], + "value": "", +} +`; diff --git a/packages/headless/src/controllers/search-box/headless-search-box.contract.test.ts b/packages/headless/src/controllers/search-box/headless-search-box.contract.test.ts new file mode 100644 index 00000000000..e7eb02d5305 --- /dev/null +++ b/packages/headless/src/controllers/search-box/headless-search-box.contract.test.ts @@ -0,0 +1,68 @@ +import {PactV3} from '@pact-foundation/pact'; +import {describe, it, expect} from 'vitest'; +import { + providerFactory, + addSuggestionInteraction, +} from '../../../pact-provider/provider.js'; +import { + buildSearchEngine, + getSampleSearchEngineConfiguration, +} from '../../app/search-engine/search-engine.js'; +import {buildSearchBox, SearchBox} from './headless-search-box.js'; + +const getSearchBoxController = (url: string) => { + const configuration = getSampleSearchEngineConfiguration(); + configuration.search!.proxyBaseUrl = url; + const engine = buildSearchEngine({ + configuration, + navigatorContextProvider: () => ({ + clientId: crypto.randomUUID(), + location: 'some location', + referrer: 'some referrer', + userAgent: 'some user agent', + }), + }); + return buildSearchBox(engine); +}; + +describe('SearchBox', () => { + let provider: PactV3; + beforeEach(() => { + vi.spyOn(Math, 'random').mockReturnValue(0.5); + provider = providerFactory(); + }); + + afterEach(() => { + vi.clearAllMocks(); + }); + + describe('when there are suggestions available', () => { + beforeEach(() => { + provider = addSuggestionInteraction(provider); + }); + + it('should return suggestions', async () => { + await provider.executeTest(async (mockServer) => { + const searchBox = getSearchBoxController(mockServer.url); + searchBox.showSuggestions(); + await waitForNSubscribeCallback(searchBox, 2); + expect(searchBox.state).toMatchSnapshot(); + }); + }); + }); +}); + +async function waitForNSubscribeCallback( + searchBox: SearchBox, + subscribeThreshold: number +) { + await new Promise((resolve) => { + let subscribeCount = 0; + searchBox.subscribe(() => { + if (++subscribeCount < subscribeThreshold) { + return; + } + resolve(); + }); + }); +} diff --git a/packages/headless/src/features/query-suggest/query-suggest-actions.ts b/packages/headless/src/features/query-suggest/query-suggest-actions.ts index 9333740bd6d..b60bd456e6d 100644 --- a/packages/headless/src/features/query-suggest/query-suggest-actions.ts +++ b/packages/headless/src/features/query-suggest/query-suggest-actions.ts @@ -180,18 +180,20 @@ export const buildQuerySuggestRequest = async ( ...(s.pipeline && {pipeline: s.pipeline}), ...(s.searchHub && {searchHub: s.searchHub}), tab: s.configuration.analytics.originLevel2, - ...(s.configuration.analytics.enabled && { - visitorId: await getVisitorID(s.configuration.analytics), - ...(s.configuration.analytics.enabled && - s.configuration.analytics.analyticsMode === 'legacy' - ? await legacyFromAnalyticsStateToAnalyticsParams( - s.configuration.analytics - ) - : fromAnalyticsStateToAnalyticsParams( - s.configuration.analytics, - navigatorContext - )), - }), + ...(s.configuration.analytics.enabled && + s.configuration.analytics.analyticsMode === 'legacy' && { + visitorId: await getVisitorID(s.configuration.analytics), + ...(await legacyFromAnalyticsStateToAnalyticsParams( + s.configuration.analytics + )), + }), + ...(s.configuration.analytics.enabled && + s.configuration.analytics.analyticsMode === 'next' && { + ...fromAnalyticsStateToAnalyticsParams( + s.configuration.analytics, + navigatorContext + ), + }), ...(s.configuration.search.authenticationProviders.length && { authentication: s.configuration.search.authenticationProviders.join(','), }), diff --git a/packages/headless/src/utils/version.ts b/packages/headless/src/utils/version.ts index 8ab3bf529b5..645471480fb 100644 --- a/packages/headless/src/utils/version.ts +++ b/packages/headless/src/utils/version.ts @@ -1,4 +1,4 @@ -export const VERSION = process.env.VERSION || 'Test version'; +export const VERSION = process.env.VERSION || '0.0.0'; export const COVEO_FRAMEWORK = ['@coveo/atomic', '@coveo/quantic'] as const;