diff --git a/package-lock.json b/package-lock.json index 7e8dfdc6..c8f9bf36 100644 --- a/package-lock.json +++ b/package-lock.json @@ -69,7 +69,7 @@ "moment": "^2.24.0", "multer": "^1.4.5-lts.1", "mustache": "^2.3.2", - "mysql2": "^2.3.3", + "mysql2": "^3.11.3", "nanoid": "^2.0.1", "neo4j-driver": "^1.7.2", "node-eta": "^0.9.0", @@ -429,20 +429,6 @@ "url": "https://github.com/sponsors/daffl" } }, - "node_modules/@feathersjs/authentication-oauth/node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/@feathersjs/authentication/node_modules/@feathersjs/commons": { "version": "5.0.25", "resolved": "https://registry.npmjs.org/@feathersjs/commons/-/commons-5.0.25.tgz", @@ -1541,21 +1527,22 @@ } }, "node_modules/@stoplight/spectral-core": { - "version": "1.18.3", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.18.3.tgz", - "integrity": "sha512-YY8x7X2SWJIhGTLPol+eFiQpWPz0D0mJdkK2i4A0QJG68KkNhypP6+JBC7/Kz3XWjqr0L/RqAd+N5cQLPOKZGQ==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-core/-/spectral-core-1.19.1.tgz", + "integrity": "sha512-YiWhXdjyjn4vCl3102ywzwCEJzncxapFcj4dxcj1YP/bZ62DFeGJ8cEaMP164vSw2kI3rX7EMMzI/c8XOUnTfQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@stoplight/better-ajv-errors": "1.0.3", "@stoplight/json": "~3.21.0", "@stoplight/path": "1.3.2", "@stoplight/spectral-parsers": "^1.0.0", - "@stoplight/spectral-ref-resolver": "^1.0.0", + "@stoplight/spectral-ref-resolver": "^1.0.4", "@stoplight/spectral-runtime": "^1.0.0", "@stoplight/types": "~13.6.0", "@types/es-aggregate-error": "^1.0.2", "@types/json-schema": "^7.0.11", - "ajv": "^8.6.0", + "ajv": "^8.17.1", "ajv-errors": "~3.0.0", "ajv-formats": "~2.1.0", "es-aggregate-error": "^1.0.7", @@ -1585,6 +1572,23 @@ "node": "^12.20 || >=14.13" } }, + "node_modules/@stoplight/spectral-core/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@stoplight/spectral-core/node_modules/jsonpath-plus": { "version": "7.1.0", "resolved": "https://registry.npmjs.org/jsonpath-plus/-/jsonpath-plus-7.1.0.tgz", @@ -1596,10 +1600,11 @@ } }, "node_modules/@stoplight/spectral-formats": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.6.0.tgz", - "integrity": "sha512-X27qhUfNluiduH0u/QwJqhOd8Wk5YKdxVmKM03Aijlx0AH1H5mYt3l9r7t2L4iyJrsBaFPnMGt7UYJDGxszbNA==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-formats/-/spectral-formats-1.7.0.tgz", + "integrity": "sha512-vJ1vIkA2s96fdJp0d3AJBGuPAW3sj8yMamyzR+dquEFO6ZAoYBo/BVsKKQskYzZi/nwljlRqUmGVmcf2PncIaA==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@stoplight/json": "^3.17.0", "@stoplight/spectral-core": "^1.8.0", @@ -1611,18 +1616,21 @@ } }, "node_modules/@stoplight/spectral-formatters": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-formatters/-/spectral-formatters-1.3.0.tgz", - "integrity": "sha512-ryuMwlzbPUuyn7ybSEbFYsljYmvTaTyD51wyCQs4ROzgfm3Yo5QDD0IsiJUzUpKK/Ml61ZX8ebgiPiRFEJtBpg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-formatters/-/spectral-formatters-1.4.0.tgz", + "integrity": "sha512-nxYQldDzVg32pxQ4cMX27eMtB1A39ea+GSf0wIJ20mqkSBfIgLnRZ+GKkBxhgF9JzSolc4YtweydsubGQGd7ag==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@stoplight/path": "^1.3.2", "@stoplight/spectral-core": "^1.15.1", "@stoplight/spectral-runtime": "^1.1.0", "@stoplight/types": "^13.15.0", + "@types/markdown-escape": "^1.1.3", "chalk": "4.1.2", "cliui": "7.0.4", "lodash": "^4.17.21", + "markdown-escape": "^2.0.0", "node-sarif-builder": "^2.0.3", "strip-ansi": "6.0", "text-table": "^0.2.0", @@ -1724,17 +1732,18 @@ } }, "node_modules/@stoplight/spectral-functions": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.7.2.tgz", - "integrity": "sha512-f+61/FtIkQeIo+a269CeaeqjpyRsgDyIk6DGr7iS4hyuk1PPk7Uf6MNRDs9FEIBh7CpdEJ+HSHbMLwgpymWTIw==", + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-functions/-/spectral-functions-1.9.0.tgz", + "integrity": "sha512-T+xl93ji8bpus4wUsTq8Qr2DSu2X9PO727rbxW61tTCG0s17CbsXOLYI+Ezjg5P6aaQlgXszGX8khtc57xk8Yw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@stoplight/better-ajv-errors": "1.0.3", "@stoplight/json": "^3.17.1", "@stoplight/spectral-core": "^1.7.0", - "@stoplight/spectral-formats": "^1.0.0", + "@stoplight/spectral-formats": "^1.7.0", "@stoplight/spectral-runtime": "^1.1.0", - "ajv": "^8.6.3", + "ajv": "^8.17.1", "ajv-draft-04": "~1.0.0", "ajv-errors": "~3.0.0", "ajv-formats": "~2.1.0", @@ -1745,6 +1754,23 @@ "node": ">=12" } }, + "node_modules/@stoplight/spectral-functions/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@stoplight/spectral-owasp-ruleset": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/@stoplight/spectral-owasp-ruleset/-/spectral-owasp-ruleset-2.0.1.tgz", @@ -1800,19 +1826,20 @@ } }, "node_modules/@stoplight/spectral-ruleset-bundler": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.5.2.tgz", - "integrity": "sha512-4QUVUFAU+S7IQ9XeCu+0TQMYxKFpKnkOAfa9unRQ1iPL2cviaipEN6witpbAptdHJD3UUjx4OnwlX8WwmXSq9w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-bundler/-/spectral-ruleset-bundler-1.6.0.tgz", + "integrity": "sha512-8CU7e4aEGdfU9ncVDtlnJSawg/6epzAHrQTjuNu1QfKAOoiwyG7oUk2XUTHWcvq6Q67iUctb0vjOokR+MPVg0Q==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@rollup/plugin-commonjs": "~22.0.2", "@stoplight/path": "1.3.2", "@stoplight/spectral-core": ">=1", - "@stoplight/spectral-formats": ">=1", + "@stoplight/spectral-formats": "^1.7.0", "@stoplight/spectral-functions": ">=1", "@stoplight/spectral-parsers": ">=1", - "@stoplight/spectral-ref-resolver": ">=1", - "@stoplight/spectral-ruleset-migrator": "^1.7.4", + "@stoplight/spectral-ref-resolver": "^1.0.4", + "@stoplight/spectral-ruleset-migrator": "^1.9.6", "@stoplight/spectral-rulesets": ">=1", "@stoplight/spectral-runtime": "^1.1.0", "@stoplight/types": "^13.6.0", @@ -1827,10 +1854,11 @@ } }, "node_modules/@stoplight/spectral-ruleset-migrator": { - "version": "1.9.5", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.9.5.tgz", - "integrity": "sha512-76n/HETr3UinVl/xLNldrH9p0JNoD8Gz4K75J6E4OHp4xD0P+BA2e8+W30HjIvqm1LJdLU2BNma0ioy+q3B9RA==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-ruleset-migrator/-/spectral-ruleset-migrator-1.10.0.tgz", + "integrity": "sha512-nDfkVfYeWWv0UvILC4TWZSnRqQ4rHgeOJO1/lHQ7XHeG5iONanQ639B1aK6ZS6vuUc8gwuyQsrPF67b4sHIyYw==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@stoplight/json": "~3.21.0", "@stoplight/ordered-object-literal": "~1.0.4", @@ -1840,7 +1868,7 @@ "@stoplight/types": "^13.6.0", "@stoplight/yaml": "~4.2.3", "@types/node": "*", - "ajv": "^8.6.0", + "ajv": "^8.17.1", "ast-types": "0.14.2", "astring": "^1.7.5", "reserved": "0.1.2", @@ -1872,24 +1900,43 @@ "integrity": "sha512-sV+51I7WYnLJnKPn2EMWgS4EUfoP4iWEbrWwbXsj0MZCB/xOK8j6+C9fntIdOM50kpx45ZLC3s6kwKivWuqvyg==", "dev": true }, + "node_modules/@stoplight/spectral-ruleset-migrator/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@stoplight/spectral-rulesets": { - "version": "1.18.1", - "resolved": "https://registry.npmjs.org/@stoplight/spectral-rulesets/-/spectral-rulesets-1.18.1.tgz", - "integrity": "sha512-buLzYi4rHjZOG2d5LC/s3YpySrCGrwR4irKDyrxLlbbqmB8BDOsrdO+7G9UGvRCJwAy/xs1VWcjokzGnG68K+Q==", + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@stoplight/spectral-rulesets/-/spectral-rulesets-1.20.2.tgz", + "integrity": "sha512-7Y8orZuNyGyeHr9n50rMfysgUJ+/zzIEHMptt66jiy82GUWl+0nr865DkMuXdC5GryfDYhtjoRTUCVsXu80Nkg==", "dev": true, + "license": "Apache-2.0", "dependencies": { "@asyncapi/specs": "^4.1.0", "@stoplight/better-ajv-errors": "1.0.3", "@stoplight/json": "^3.17.0", "@stoplight/spectral-core": "^1.8.1", - "@stoplight/spectral-formats": "^1.5.0", + "@stoplight/spectral-formats": "^1.7.0", "@stoplight/spectral-functions": "^1.5.1", "@stoplight/spectral-runtime": "^1.1.1", "@stoplight/types": "^13.6.0", "@types/json-schema": "^7.0.7", - "ajv": "^8.8.2", + "ajv": "^8.17.1", "ajv-formats": "~2.1.0", "json-schema-traverse": "^1.0.0", + "leven": "3.1.0", "lodash": "~4.17.21", "tslib": "^2.3.0" }, @@ -1897,6 +1944,23 @@ "node": ">=12" } }, + "node_modules/@stoplight/spectral-rulesets/node_modules/ajv": { + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", + "dev": true, + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, "node_modules/@stoplight/spectral-runtime": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/@stoplight/spectral-runtime/-/spectral-runtime-1.1.2.tgz", @@ -2060,7 +2124,8 @@ "node_modules/@types/cookie": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", - "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==" + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "license": "MIT" }, "node_modules/@types/cookies": { "version": "0.9.0", @@ -2256,6 +2321,13 @@ "integrity": "sha512-X+2qazGS3jxLAIz5JDXDzglAF3KpijdhFxlf/V1+hEsOUc+HnWi81L/uv/EvGuV90WY+7mPGFCUDGfQC3Gj95Q==", "dev": true }, + "node_modules/@types/markdown-escape": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/markdown-escape/-/markdown-escape-1.1.3.tgz", + "integrity": "sha512-JIc1+s3y5ujKnt/+N+wq6s/QdL2qZ11fP79MijrVXsAAnzSxCbT2j/3prHRouJdZ2yFLN3vkP0HytfnoCczjOw==", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/@types/mime/-/mime-1.3.5.tgz", @@ -2665,6 +2737,7 @@ "version": "5.4.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "license": "MIT", "optional": true, "dependencies": { "bn.js": "^4.0.0", @@ -2722,9 +2795,11 @@ } }, "node_modules/aws-sdk": { - "version": "2.1297.0", - "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1297.0.tgz", - "integrity": "sha512-hZbG8tfluU2ijCCBQnQzCiPbArFtaWqAUFAWAGZ0+Df7OzTm7ya9fLYV3j3L6p2PacAyAuxXaeMbgMHlHi/D3w==", + "version": "2.1691.0", + "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.1691.0.tgz", + "integrity": "sha512-/F2YC+DlsY3UBM2Bdnh5RLHOPNibS/+IcjUuhP8XuctyrN+MlL+fWDAiela32LTDk7hMy4rx8MTgvbJ+0blO5g==", + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { "buffer": "4.9.2", "events": "1.1.1", @@ -2735,7 +2810,7 @@ "url": "0.10.3", "util": "^0.12.4", "uuid": "8.0.0", - "xml2js": "0.4.19" + "xml2js": "0.6.2" }, "engines": { "node": ">= 10.0.0" @@ -2757,19 +2832,20 @@ "uuid": "dist/bin/uuid" } }, - "node_modules/aws-sdk/node_modules/xml2js": { - "version": "0.4.19", - "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.19.tgz", - "integrity": "sha512-esZnJZJOiJR9wWKMyuvSE1y6Dq5LCuJanqhxslH2bxM6duahNZ+HMpCLhBQGZkbX6xRf8x1Y2eJlgt2q3qo49Q==", - "dependencies": { - "sax": ">=0.6.0", - "xmlbuilder": "~9.0.1" + "node_modules/aws-ssl-profiles": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/aws-ssl-profiles/-/aws-ssl-profiles-1.1.2.tgz", + "integrity": "sha512-NZKeq9AfyQvEeNlN0zSYAaWrmBffJh3IELMZfRpJVWgrpEbtEpnjvzqBPf+mxoI287JohRDoa+/nsfqqiZmF6g==", + "license": "MIT", + "engines": { + "node": ">= 6.0.0" } }, "node_modules/axios": { - "version": "1.6.8", - "resolved": "https://registry.npmjs.org/axios/-/axios-1.6.8.tgz", - "integrity": "sha512-v/ZHtJDU39mDpyBoFVkETcd/uNdxrWRrg3bKpOKzXFA6Bvqopts6ALSMU3y6ijYxbw2B+wPrIv46egTzJXCLGQ==", + "version": "1.7.7", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.7.7.tgz", + "integrity": "sha512-S4kL7XrjgBmvdGut0sN3yJxqYzrDOnivkBiN0OFs6hLiUam3UPvswUo0kqGyhqUZGEOytHyumEdXsAkgCOUf3Q==", + "license": "MIT", "dependencies": { "follow-redirects": "^1.15.6", "form-data": "^4.0.0", @@ -2850,6 +2926,7 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "license": "MIT", "engines": { "node": "^4.5.0 || >= 5.9" } @@ -2970,12 +3047,14 @@ "version": "4.12.0", "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "license": "MIT", "optional": true }, "node_modules/body-parser": { - "version": "1.20.2", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", - "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "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==", + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.5", @@ -2985,7 +3064,7 @@ "http-errors": "2.0.0", "iconv-lite": "0.4.24", "on-finished": "2.4.1", - "qs": "6.11.0", + "qs": "6.13.0", "raw-body": "2.5.2", "type-is": "~1.6.18", "unpipe": "1.0.0" @@ -3024,11 +3103,12 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" @@ -3038,6 +3118,7 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==", + "license": "MIT", "optional": true }, "node_modules/browser-stdout": { @@ -3186,14 +3267,6 @@ "resolved": "https://registry.npmjs.org/async/-/async-3.2.3.tgz", "integrity": "sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==" }, - "node_modules/cache-manager/node_modules/lru-cache": { - "version": "7.18.3", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", - "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", - "engines": { - "node": ">=12" - } - }, "node_modules/call-bind": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", @@ -3689,16 +3762,18 @@ "version": "0.6.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "optional": true, "engines": { "node": ">= 0.6" } }, "node_modules/cookie-parser": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.4.tgz", - "integrity": "sha512-lo13tqF3JEtFO7FyA49CqbhaFkskRJ0u/UAiINgrIXeRCY41c88/zxtrECl8AKH3B0hj9q10+h3Kt8I7KlW4tw==", + "version": "1.4.7", + "resolved": "https://registry.npmjs.org/cookie-parser/-/cookie-parser-1.4.7.tgz", + "integrity": "sha512-nGUvgXnotP3BsjiLX2ypbQnWoGUPIIfHQNZkkC668ntrzGWEZVW70HDEB1qnNGMicPje6EttlIgzo51YSwNQGw==", + "license": "MIT", "dependencies": { - "cookie": "0.3.1", + "cookie": "0.7.2", "cookie-signature": "1.0.6" }, "engines": { @@ -3706,9 +3781,10 @@ } }, "node_modules/cookie-parser/node_modules/cookie": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.3.1.tgz", - "integrity": "sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s=", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4187,9 +4263,10 @@ "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=" }, "node_modules/elliptic": { - "version": "6.5.5", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.5.tgz", - "integrity": "sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==", + "version": "6.5.7", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.7.tgz", + "integrity": "sha512-ESVCtTwiA+XhY3wyh24QqRGBoP3rEdDUl3EDUUo9tft074fi19IrdpH7hLCMMP3CIj7jb3W96rn8lt/BqIlt5Q==", + "license": "MIT", "optional": true, "dependencies": { "bn.js": "^4.11.9", @@ -4252,37 +4329,40 @@ } }, "node_modules/engine.io": { - "version": "6.5.4", - "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.5.4.tgz", - "integrity": "sha512-KdVSDKhVKyOi+r5uEabrDLZw2qXStVvCsEB/LN3mw4WFi6Gx50jTyuxYVCwAAC0U46FdnzP/ScKRBTXb/NiEOg==", + "version": "6.6.2", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-6.6.2.tgz", + "integrity": "sha512-gmNvsYi9C8iErnZdVcJnvCpSKbWTt1E8+JZo8b+daLninywUWi5NQ5STSHZ9rFjFO7imNcvb8Pc5pe/wMR5xEw==", + "license": "MIT", "dependencies": { "@types/cookie": "^0.4.1", "@types/cors": "^2.8.12", "@types/node": ">=10.0.0", "accepts": "~1.3.4", "base64id": "2.0.0", - "cookie": "~0.4.1", + "cookie": "~0.7.2", "cors": "~2.8.5", "debug": "~4.3.1", "engine.io-parser": "~5.2.1", - "ws": "~8.11.0" + "ws": "~8.17.1" }, "engines": { "node": ">=10.2.0" } }, "node_modules/engine.io-parser": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.2.tgz", - "integrity": "sha512-RcyUFKA93/CXH20l4SoVvzZfrSDMOTUS3bWVpTt2FuFP+XYrL8i8oonHP7WInRyVHXh0n/ORtoeiE1os+8qkSw==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-5.2.3.tgz", + "integrity": "sha512-HqD3yTBfnBxIrbnM1DoD6Pcq8NECnh8d4As1Qgh0z5Gg3jRRIqijury0CL3ghu/edArpUYiYqQiDUQBIs4np3Q==", + "license": "MIT", "engines": { "node": ">=10.0.0" } }, "node_modules/engine.io/node_modules/cookie": { - "version": "0.4.2", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.2.tgz", - "integrity": "sha512-aSWTXFzaKWkvHO1Ny/s+ePFpvKsPnjc551iI41v3ny/ow6tBG5Vd+FuqGNhh1LxOmVzOlGUriIlOaokOvhaStA==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -4745,15 +4825,6 @@ "node": ">=0.10.0" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, "node_modules/eslint-plugin-n": { "version": "15.6.1", "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-15.6.1.tgz", @@ -4797,26 +4868,12 @@ "node": ">= 4" } }, - "node_modules/eslint-plugin-n/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/eslint-plugin-n/node_modules/semver": { - "version": "7.3.8", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.8.tgz", - "integrity": "sha512-NB1ctGL5rlHrPJtFDVIVzTyQylMLu9N9VICA6HSFJo8MCGVTMW6gfpicwKmmK/dAjTOrqu5l63JJOpDSrAis3A==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -4824,12 +4881,6 @@ "node": ">=10" } }, - "node_modules/eslint-plugin-n/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/eslint-plugin-promise": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/eslint-plugin-promise/-/eslint-plugin-promise-6.1.1.tgz", @@ -5236,36 +5287,37 @@ } }, "node_modules/express": { - "version": "4.19.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", - "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "version": "4.21.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.21.1.tgz", + "integrity": "sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==", + "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.2", + "body-parser": "1.20.3", "content-disposition": "0.5.4", "content-type": "~1.0.4", - "cookie": "0.6.0", + "cookie": "0.7.1", "cookie-signature": "1.0.6", "debug": "2.6.9", "depd": "2.0.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.2.0", + "finalhandler": "1.3.1", "fresh": "0.5.2", "http-errors": "2.0.0", - "merge-descriptors": "1.0.1", + "merge-descriptors": "1.0.3", "methods": "~1.1.2", "on-finished": "2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.7", + "path-to-regexp": "0.1.10", "proxy-addr": "~2.0.7", - "qs": "6.11.0", + "qs": "6.13.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.18.0", - "serve-static": "1.15.0", + "send": "0.19.0", + "serve-static": "1.16.2", "setprototypeof": "1.2.0", "statuses": "2.0.1", "type-is": "~1.6.18", @@ -5316,9 +5368,19 @@ } }, "node_modules/express-openapi-validator/node_modules/path-to-regexp": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.2.2.tgz", - "integrity": "sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-6.3.0.tgz", + "integrity": "sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==", + "license": "MIT" + }, + "node_modules/express/node_modules/cookie": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", + "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } }, "node_modules/express/node_modules/debug": { "version": "2.6.9", @@ -5328,6 +5390,15 @@ "ms": "2.0.0" } }, + "node_modules/express/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/express/node_modules/ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -5381,10 +5452,17 @@ "node": ">= 6.0.0" } }, + "node_modules/fast-uri": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.3.tgz", + "integrity": "sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==", + "dev": true, + "license": "BSD-3-Clause" + }, "node_modules/fast-xml-parser": { - "version": "4.3.6", - "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.3.6.tgz", - "integrity": "sha512-M2SovcRxD4+vC493Uc2GZVcZaj66CCJhWurC4viynVSTvrpErCShNcDz1lAho6n9REQKvL/ll4A4/fw6Y9z8nw==", + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.5.0.tgz", + "integrity": "sha512-/PlTQCI96+fZMAOLMZK4CWG1ItCbfZ/0jx7UIJFChPNrx7tcEgerUgWbeieCM9MfHInUDyK8DWYZ+YrywDJuTg==", "funding": [ { "type": "github", @@ -5395,6 +5473,7 @@ "url": "https://paypal.me/naturalintelligence" } ], + "license": "MIT", "dependencies": { "strnum": "^1.0.5" }, @@ -5643,9 +5722,10 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", "dependencies": { "to-regex-range": "^5.0.1" }, @@ -5654,12 +5734,13 @@ } }, "node_modules/finalhandler": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", - "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", + "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "license": "MIT", "dependencies": { "debug": "2.6.9", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "on-finished": "2.4.1", "parseurl": "~1.3.3", @@ -5674,14 +5755,25 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "node_modules/finalhandler/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "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==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/find-up": { "version": "5.0.0", @@ -6203,33 +6295,25 @@ "dev": true }, "node_modules/grant": { - "version": "5.4.22", - "resolved": "https://registry.npmjs.org/grant/-/grant-5.4.22.tgz", - "integrity": "sha512-DEi+/JjXT84mmFYhSmv+SX14v+3Z7vuCIYAMwtdPCTXHMSLhWqSYqWAMXDUQZuV7yaJv2d84AYnkCFNooLKBsA==", + "version": "5.4.23", + "resolved": "https://registry.npmjs.org/grant/-/grant-5.4.23.tgz", + "integrity": "sha512-lEMfgem990lWTU+j9jbOKmIsvvetVlwGzsWjoCgKz9zKcP7edI6mjyUA5QUSn7aeBYONTE3WnfhBhvONQGP1Hg==", + "license": "MIT", "dependencies": { - "qs": "^6.11.2", - "request-compose": "^2.1.6", + "qs": "^6.13.0", + "request-compose": "^2.1.7", "request-oauth": "^1.0.1" }, "engines": { "node": ">=12.0.0" }, "optionalDependencies": { - "cookie": "^0.5.0", + "cookie": "^0.6.0", "cookie-signature": "^1.2.1", - "jwk-to-pem": "^2.0.5", + "jwk-to-pem": "^2.0.6", "jws": "^4.0.0" } }, - "node_modules/grant/node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", - "optional": true, - "engines": { - "node": ">= 0.6" - } - }, "node_modules/grant/node_modules/cookie-signature": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.2.1.tgz", @@ -6239,20 +6323,6 @@ "node": ">=6.6.0" } }, - "node_modules/grant/node_modules/qs": { - "version": "6.12.1", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", - "integrity": "sha512-zWmv4RSuB9r2mYQw3zxQuHWeU+42aKi1wWig/j4ele4ygELZ7PEO6MM7rim9oAQH2A5MWfsAVf/jPvTPgCbvUQ==", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/grapheme-splitter": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz", @@ -6438,6 +6508,7 @@ "version": "1.1.7", "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "license": "MIT", "optional": true, "dependencies": { "inherits": "^2.0.3", @@ -6531,6 +6602,7 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "license": "MIT", "optional": true, "dependencies": { "hash.js": "^1.0.3", @@ -7008,6 +7080,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", "engines": { "node": ">=0.12.0" } @@ -7583,13 +7656,14 @@ } }, "node_modules/jwk-to-pem": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.5.tgz", - "integrity": "sha512-L90jwellhO8jRKYwbssU9ifaMVqajzj3fpRjDKcsDzrslU9syRbFqfkXtT4B89HYAap+xsxNcxgBSB09ig+a7A==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/jwk-to-pem/-/jwk-to-pem-2.0.6.tgz", + "integrity": "sha512-zPC/5vjyR08TpknpTGW6Z3V3lDf9dU92oHbf0jJlG8tGOzslF9xk2UiO/seSx2llCUrNAe+AvmuGTICSXiYU7A==", + "license": "Apache-2.0", "optional": true, "dependencies": { "asn1.js": "^5.3.0", - "elliptic": "^6.5.4", + "elliptic": "^6.5.7", "safe-buffer": "^5.0.1" } }, @@ -7968,15 +8042,25 @@ } }, "node_modules/long": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/long/-/long-4.0.0.tgz", - "integrity": "sha512-XsP+KhQif4bjX1kbuSiySJFNAehNxgLb6hPRGJ9QsUr8ajHkuXGdrHmFUTUUXhDwVX2R5bY4JNZEwbUiMhV+MA==" + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==", + "license": "Apache-2.0" }, "node_modules/long-timeout": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/long-timeout/-/long-timeout-0.1.1.tgz", "integrity": "sha1-lyHXiLR+C8taJMLivuGg2lXatRQ=" }, + "node_modules/lru-cache": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-7.18.3.tgz", + "integrity": "sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/lru-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/lru-queue/-/lru-queue-0.1.0.tgz", @@ -7985,6 +8069,21 @@ "es5-ext": "~0.10.2" } }, + "node_modules/lru.min": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/lru.min/-/lru.min-1.1.1.tgz", + "integrity": "sha512-FbAj6lXil6t8z4z3j0E5mfRlPzxkySotzUHwRXjlpRh10vc6AI6WN62ehZj82VG7M20rqogJ0GLwar2Xa05a8Q==", + "license": "MIT", + "engines": { + "bun": ">=1.0.0", + "deno": ">=1.30.0", + "node": ">=8.0.0" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wellwelwel" + } + }, "node_modules/magic-string": { "version": "0.25.9", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", @@ -8000,6 +8099,13 @@ "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", "dev": true }, + "node_modules/markdown-escape": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/markdown-escape/-/markdown-escape-2.0.0.tgz", + "integrity": "sha512-Trz4v0+XWlwy68LJIyw3bLbsJiC8XAbRCKF9DbEtZjyndKOGVx6n+wNB0VfoRmY2LKboQLeniap3xrb6LGSJ8A==", + "dev": true, + "license": "MIT" + }, "node_modules/md5-file": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/md5-file/-/md5-file-4.0.0.tgz", @@ -8035,9 +8141,13 @@ } }, "node_modules/merge-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", - "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.3.tgz", + "integrity": "sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, "node_modules/merge2": { "version": "1.4.1", @@ -8057,11 +8167,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -8072,6 +8183,7 @@ "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", "bin": { "mime": "cli.js" }, @@ -8113,12 +8225,14 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "license": "ISC", "optional": true }, "node_modules/minimalistic-crypto-utils": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==", + "license": "MIT", "optional": true }, "node_modules/minimatch": { @@ -8470,16 +8584,18 @@ } }, "node_modules/mysql2": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-2.3.3.tgz", - "integrity": "sha512-wxJUev6LgMSgACDkb/InIFxDprRa6T95+VEoR+xPvtngtccNH2dGjEB/fVZ8yg1gWv1510c9CvXuJHi5zUm0ZA==", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/mysql2/-/mysql2-3.11.3.tgz", + "integrity": "sha512-Qpu2ADfbKzyLdwC/5d4W7+5Yz7yBzCU05YWt5npWzACST37wJsB23wgOSo00qi043urkiRwXtEvJc9UnuLX/MQ==", + "license": "MIT", "dependencies": { - "denque": "^2.0.1", + "aws-ssl-profiles": "^1.1.1", + "denque": "^2.1.0", "generate-function": "^2.3.1", "iconv-lite": "^0.6.3", - "long": "^4.0.0", - "lru-cache": "^6.0.0", - "named-placeholders": "^1.1.2", + "long": "^5.2.1", + "lru.min": "^1.0.0", + "named-placeholders": "^1.1.3", "seq-queue": "^0.0.5", "sqlstring": "^2.3.2" }, @@ -8498,22 +8614,6 @@ "node": ">=0.10.0" } }, - "node_modules/mysql2/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mysql2/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" - }, "node_modules/mz": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", @@ -8526,30 +8626,17 @@ } }, "node_modules/named-placeholders": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.2.tgz", - "integrity": "sha512-wiFWqxoLL3PGVReSZpjLVxyJ1bRqe+KKJVbr4hGs1KWfTZTQyezHFBbuKj9hsizHyGV2ne7EMjHdxEGAybD5SA==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/named-placeholders/-/named-placeholders-1.1.3.tgz", + "integrity": "sha512-eLoBxg6wE/rZkJPhU/xRX1WTpkFEwDJEN96oxFrTsqBdbT5ec295Q+CoHrL9IT0DipqKhmGcaZmwOt8OON5x1w==", + "license": "MIT", "dependencies": { - "lru-cache": "^4.1.3" + "lru-cache": "^7.14.1" }, "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/named-placeholders/node_modules/lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "node": ">=12.0.0" } }, - "node_modules/named-placeholders/node_modules/yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=" - }, "node_modules/nanoid": { "version": "2.1.8", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-2.1.8.tgz", @@ -9140,9 +9227,10 @@ } }, "node_modules/path-to-regexp": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", - "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + "version": "0.1.10", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.10.tgz", + "integrity": "sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==", + "license": "MIT" }, "node_modules/path-type": { "version": "4.0.0", @@ -9432,11 +9520,6 @@ "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==" }, - "node_modules/pseudomap": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", - "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=" - }, "node_modules/pstree.remy": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/pstree.remy/-/pstree.remy-1.1.8.tgz", @@ -9461,11 +9544,12 @@ } }, "node_modules/qs": { - "version": "6.11.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", - "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "version": "6.13.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", + "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", + "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "side-channel": "^1.0.6" }, "engines": { "node": ">=0.6" @@ -9526,6 +9610,7 @@ "version": "1.2.1", "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", "engines": { "node": ">= 0.6" } @@ -9666,9 +9751,10 @@ } }, "node_modules/request-compose": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/request-compose/-/request-compose-2.1.6.tgz", - "integrity": "sha512-S07L+2VbJB32WddD/o/PnYGKym63zLVbymygVWXvt8L79VAngcjAxhHaGuFOICLxEV90EasEPzqPKKHPspXP8w==", + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/request-compose/-/request-compose-2.1.7.tgz", + "integrity": "sha512-27amNkWTK4Qq25XEwdmrhb4VLMiQzRSKuDfsy1o1griykcyXk5MxMHmJG+OKTRdO9PgsO7Kkn7GrEkq0UAIIMQ==", + "license": "Apache-2.0", "engines": { "node": ">=12.0.0" } @@ -9819,10 +9905,11 @@ } }, "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "version": "2.79.2", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.2.tgz", + "integrity": "sha512-fS6iqSPZDs3dr/y7Od6y5nha8dW1YnbgtsyotCVvoFGKbERG++CVRFv1meyGDE1SNItQA8BrnCw7ScdAhRJ3XQ==", "dev": true, + "license": "MIT", "bin": { "rollup": "dist/bin/rollup" }, @@ -9926,10 +10013,21 @@ "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.1.tgz", "integrity": "sha1-e45lYZCyKOgaZq6nSEgNgozS03o=" }, + "node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, "node_modules/send": { - "version": "0.18.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", - "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "version": "0.19.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", + "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", @@ -9953,6 +10051,7 @@ "version": "2.6.9", "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", "dependencies": { "ms": "2.0.0" } @@ -9960,12 +10059,14 @@ "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==" + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT" }, "node_modules/send/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==" + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" }, "node_modules/seq-queue": { "version": "0.0.5", @@ -10114,19 +10215,29 @@ "integrity": "sha512-kKvNJn6Mm93gAczWVJg7wH+wGYWNrDHdWvpUmHyEsgCtIwwo3bqPtV4tR5tuPaUhTOo/kvhVwd8XwwOllGYkbg==" }, "node_modules/serve-static": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", - "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", + "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "license": "MIT", "dependencies": { - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.18.0" + "send": "0.19.0" }, "engines": { "node": ">= 0.8.0" } }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, "node_modules/set-function-length": { "version": "1.2.2", "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", @@ -10361,15 +10472,16 @@ } }, "node_modules/socket.io": { - "version": "4.7.5", - "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.7.5.tgz", - "integrity": "sha512-DmeAkF6cwM9jSfmp6Dr/5/mfMwb5Z5qRrSXLpo3Fq5SqyU8CMF15jIN4ZhfSwu35ksM1qmHZDQ/DK5XTccSTvA==", + "version": "4.8.0", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.8.0.tgz", + "integrity": "sha512-8U6BEgGjQOfGz3HHTYaC/L1GaxDCJ/KM0XTkJly0EhZ5U/du9uNEZy4ZgYzEzIqlx2CMm25CrCqr1ck899eLNA==", + "license": "MIT", "dependencies": { "accepts": "~1.3.4", "base64id": "~2.0.0", "cors": "~2.8.5", "debug": "~4.3.2", - "engine.io": "~6.5.2", + "engine.io": "~6.6.0", "socket.io-adapter": "~2.5.2", "socket.io-parser": "~4.2.4" }, @@ -10378,12 +10490,13 @@ } }, "node_modules/socket.io-adapter": { - "version": "2.5.4", - "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.4.tgz", - "integrity": "sha512-wDNHGXGewWAjQPt3pyeYBtpWSq9cLE5UW1ZUPL/2eGK9jtse/FpXib7epSTsz0Q0m+6sg6Y4KtcFTlah1bdOVg==", + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.5.5.tgz", + "integrity": "sha512-eLDQas5dzPgOWCk9GuuJC2lBqItuhKI4uxGgo9aIV7MYbk2h9Q6uULEh8WBzThoI7l+qU9Ast9fVUmkqPP9wYg==", + "license": "MIT", "dependencies": { "debug": "~4.3.4", - "ws": "~8.11.0" + "ws": "~8.17.1" } }, "node_modules/socket.io-parser": { @@ -10774,6 +10887,7 @@ "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", "dependencies": { "is-number": "^7.0.0" }, @@ -11389,21 +11503,6 @@ "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=" }, - "node_modules/utf-8-validate": { - "version": "5.0.10", - "resolved": "https://registry.npmjs.org/utf-8-validate/-/utf-8-validate-5.0.10.tgz", - "integrity": "sha512-Z6czzLq4u8fPOyx7TU6X3dvUZVvoJmxSQ+IcrlmagKhilxlhZgxPK6C5Jqbkw1IDUmFTM+cz9QDnnLTwDz/2gQ==", - "hasInstallScript": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">=6.14.2" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -11643,10 +11742,11 @@ } }, "node_modules/word-wrap": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -11834,15 +11934,16 @@ "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "node_modules/ws": { - "version": "8.11.0", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.11.0.tgz", - "integrity": "sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.17.1.tgz", + "integrity": "sha512-6XQFvXTkbfUOZOKKILFG1PDK2NDQs4azKQl26T0YS5CxqWLgXajbPZ+h4gZekJyRqFU8pvnbAbbs/3TgRPy+GQ==", + "license": "MIT", "engines": { "node": ">=10.0.0" }, "peerDependencies": { "bufferutil": "^4.0.1", - "utf-8-validate": "^5.0.2" + "utf-8-validate": ">=5.0.2" }, "peerDependenciesMeta": { "bufferutil": { @@ -11881,14 +11982,6 @@ "node": ">=4.0" } }, - "node_modules/xmlbuilder": { - "version": "9.0.7", - "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-9.0.7.tgz", - "integrity": "sha1-Ey7mPS7FVlxVfiD0wi35rKaGsQ0=", - "engines": { - "node": ">=4.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", diff --git a/package.json b/package.json index 1c766968..c4278ab5 100644 --- a/package.json +++ b/package.json @@ -103,7 +103,7 @@ "moment": "^2.24.0", "multer": "^1.4.5-lts.1", "mustache": "^2.3.2", - "mysql2": "^2.3.3", + "mysql2": "^3.11.3", "nanoid": "^2.0.1", "neo4j-driver": "^1.7.2", "node-eta": "^0.9.0", diff --git a/src/hooks/access-rights.js b/src/hooks/access-rights.js index e4bd84cc..c7f083ee 100644 --- a/src/hooks/access-rights.js +++ b/src/hooks/access-rights.js @@ -78,6 +78,7 @@ const obfuscate = () => context => { } break case 'articles.get': + case 'content-items.get': if (shouldBeObfuscated(context.result.issue.accessRights)) { debug( `${prefix} issue obfuscated due to context.result.issue.accessRights: ${context.result.issue.accessRights}` @@ -86,6 +87,7 @@ const obfuscate = () => context => { } break case 'articles.find': + case 'content-items.find': case 'articles-suggestions.get': debug(`${prefix} verify accessRights per article issue`) for (let i = 0, l = context.result.data.length; i < l; i += 1) { diff --git a/src/schema/schemas/Article.json b/src/schema/schemas/ContentItem.json similarity index 75% rename from src/schema/schemas/Article.json rename to src/schema/schemas/ContentItem.json index d1f7f83f..b5dd02f5 100644 --- a/src/schema/schemas/Article.json +++ b/src/schema/schemas/ContentItem.json @@ -1,29 +1,29 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "Article", - "description": "A journal/magazine article", + "title": "ContentItem", + "description": "A journal/magazine content item (article, advertisement, etc.)", "type": "object", "additionalProperties": false, "properties": { "uid": { "type": "string", - "description": "The unique identifier of the article" + "description": "The unique identifier of the content item" }, "type": { "type": "string", - "description": "The type of the article. NOTE: may be empty." + "description": "The type of the content item. NOTE: may be empty." }, "title": { "type": "string", - "description": "The title of the article" + "description": "The title of the content item" }, "size": { "type": "integer", - "description": "The size of the article in characters" + "description": "The size of the content item in characters" }, "nbPages": { "type": "integer", - "description": "The number of pages in this article" + "description": "The number of pages in this content item" }, "pages": { "type": "array", @@ -37,7 +37,7 @@ }, "excerpt": { "type": "string", - "description": "The excerpt of the article" + "description": "The excerpt of the content item" }, "locations": { "type": "array", @@ -53,7 +53,7 @@ }, "language": { "type": "string", - "description": "The language code of the article" + "description": "The language code of the content item" }, "issue": { "$ref": "./NewspaperIssue.json" @@ -61,13 +61,13 @@ "matches": { "type": "array", "items": { - "$ref": "./ArticleMatch.json" + "$ref": "./ContentItemMatch.json" } }, "regions": { "type": "array", "items": { - "$ref": "./ArticleRegion.json" + "$ref": "./ContentItemRegion.json" } }, "regionBreaks": { @@ -93,17 +93,17 @@ }, "date": { "oneOf": [ - { "type": "string", "description": "The date of the article", "format": "date-time" }, + { "type": "string", "description": "The date of the content item", "format": "date-time" }, { "type": "null" } ] }, "year": { "type": "integer", - "description": "The year of the article" + "description": "The year of the content item" }, "country": { "type": "string", - "description": "The country code of the article" + "description": "The country code of the content item" }, "tags": { "type": "array", @@ -119,15 +119,15 @@ "$ref": "./Newspaper.json" }, "dataProvider": { - "oneOf": [{ "type": "string", "description": "The provider article" }, { "type": "null" }] + "oneOf": [{ "type": "string", "description": "The provider of the content item" }, { "type": "null" }] }, "topics": { "type": "array", - "items": { "$ref": "./ArticleTopic.json" } + "items": { "$ref": "./ContentItemTopic.json" } }, "content": { "type": "string", - "description": "The content of the article" + "description": "The content of the content item" }, "mentions": { "type": "array", diff --git a/src/schema/schemas/ArticleMatch.json b/src/schema/schemas/ContentItemMatch.json similarity index 94% rename from src/schema/schemas/ArticleMatch.json rename to src/schema/schemas/ContentItemMatch.json index 6ca8dea7..fe9a9382 100644 --- a/src/schema/schemas/ArticleMatch.json +++ b/src/schema/schemas/ContentItemMatch.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ArticleMatch", + "title": "ContentItemMatch", "description": "TODO", "type": "object", "additionalProperties": false, diff --git a/src/schema/schemas/ArticleRegion.json b/src/schema/schemas/ContentItemRegion.json similarity index 95% rename from src/schema/schemas/ArticleRegion.json rename to src/schema/schemas/ContentItemRegion.json index cdd20ee0..81ec5d3d 100644 --- a/src/schema/schemas/ArticleRegion.json +++ b/src/schema/schemas/ContentItemRegion.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ArticleRegion", + "title": "ContentItemRegion", "description": "TODO", "type": "object", "additionalProperties": false, diff --git a/src/schema/schemas/ArticleTopic.json b/src/schema/schemas/ContentItemTopic.json similarity index 92% rename from src/schema/schemas/ArticleTopic.json rename to src/schema/schemas/ContentItemTopic.json index bd4881e1..1f5c2dac 100644 --- a/src/schema/schemas/ArticleTopic.json +++ b/src/schema/schemas/ContentItemTopic.json @@ -1,6 +1,6 @@ { "$schema": "http://json-schema.org/draft-07/schema#", - "title": "ArticleTopic", + "title": "ContentItemTopic", "description": "TODO", "type": "object", "additionalProperties": false, diff --git a/src/services/articles-search/articles-search.class.js b/src/services/articles-search/articles-search.class.js index bfc355e0..990e667e 100644 --- a/src/services/articles-search/articles-search.class.js +++ b/src/services/articles-search/articles-search.class.js @@ -14,7 +14,7 @@ class ArticlesSearch { this.options = options || {} /** @type {import('../../cachedSolr').CachedSolrClient} */ this.solr = app.service('cachedSolr') - this.articlesService = app.service('articles') + this.articlesService = app.service('content-items') } /** diff --git a/src/services/articles/articles.schema.ts b/src/services/articles/articles.schema.ts index 669cca0f..40822410 100644 --- a/src/services/articles/articles.schema.ts +++ b/src/services/articles/articles.schema.ts @@ -30,21 +30,21 @@ const findParameters: MethodParameter[] = [ * NOTE: Keep this in sync with validators in search.hooks.ts */ export const docs: ServiceSwaggerOptions = { - description: 'Articles', + description: 'Content items', securities: ['find', 'get'], operations: { find: { - operationId: 'findArticles', - description: 'Find articles that match the given query', + operationId: 'findContentItem', + description: 'Find content items that match the given query', parameters: findParameters, responses: getStandardResponses({ method: 'find', - schema: 'Article', + schema: 'ContentItem', }), }, get: { - operationId: 'getArticle', - description: 'Get an article by its UID', + operationId: 'getContentItem', + description: 'Get a content item by its UID', parameters: [ { in: 'path', @@ -53,12 +53,12 @@ export const docs: ServiceSwaggerOptions = { schema: { type: 'string', }, - description: 'UID of the article', + description: 'UID of the content item', }, ], responses: getStandardResponses({ method: 'get', - schema: 'Article', + schema: 'ContentItem', }), }, }, diff --git a/src/services/articles/articles.service.js b/src/services/articles/articles.service.js deleted file mode 100644 index 9c131ea6..00000000 --- a/src/services/articles/articles.service.js +++ /dev/null @@ -1,29 +0,0 @@ -import { createSwaggerServiceOptions } from 'feathers-swagger'; -import { docs } from './articles.schema'; - -// Initializes the `articles` service on path `/articles` -const createService = require('./articles.class'); -const hooks = require('./articles.hooks'); - -module.exports = function (app) { - const paginate = app.get('paginate'); - - const options = { - name: 'articles', - paginate, - // need to pass config and queries to neo4j.service - config: app.get('neo4j'), - app, - }; - - // Initialize our service with any options it requires - app.use('/articles', createService(options), { - events: [], - docs: createSwaggerServiceOptions({ schemas: {}, docs }), - }); - - // Get our initialized service so that we can register hooks and filters - const service = app.service('articles'); - - service.hooks(hooks); -}; diff --git a/src/services/articles/articles.service.ts b/src/services/articles/articles.service.ts new file mode 100644 index 00000000..1dbb0018 --- /dev/null +++ b/src/services/articles/articles.service.ts @@ -0,0 +1,43 @@ +import { ServiceOptions } from '@feathersjs/feathers' +import { createSwaggerServiceOptions } from 'feathers-swagger' +import { ImpressoApplication } from '../../types' +import { docs } from './articles.schema' + +// Initializes the `articles` service on path `/articles` +const createService = require('./articles.class') +const hooks = require('./articles.hooks') + +export default function (app: ImpressoApplication) { + const paginate = app.get('paginate') + + /** + * Even though the service is historically called 'articles' + * it technically deals with content items. We keep the original prefix + * for the internal use (web app), but expose it as 'content-items' for the public API. + */ + const prefix = app.get('isPublicApi') ? '/content-items' : '/articles' + + const options = { + name: 'articles', + paginate, + app, + } + + const svc = createService(options) + + // Initialize our service with any options it requires + app.use('/content-items', svc, { + events: [], + docs: createSwaggerServiceOptions({ schemas: {}, docs }), + } as ServiceOptions) + + // Get our initialized service so that we can register hooks and filters + const service = app.service('content-items') + + service.hooks(hooks) + + if (!app.get('isPublicApi')) { + // Expose the service as 'articles' for the web app + app.use('/articles', service) + } +} diff --git a/src/services/search-exporter/search-exporter.class.js b/src/services/search-exporter/search-exporter.class.js index 8911adb2..447263af 100644 --- a/src/services/search-exporter/search-exporter.class.js +++ b/src/services/search-exporter/search-exporter.class.js @@ -1,59 +1,66 @@ /* eslint-disable no-unused-vars */ -const debug = require('debug')('impresso/services:search'); -const { NotFound, NotImplemented } = require('@feathersjs/errors'); -const { protobuf } = require('impresso-jscommons'); -const solr = require('../../solr'); -const article = require('../../models/articles.model'); +const debug = require('debug')('impresso/services:search-exporter') +const { NotFound, NotImplemented } = require('@feathersjs/errors') +const { protobuf } = require('impresso-jscommons') +const solr = require('../../solr') +const article = require('../../models/articles.model') class Service { - constructor (options) { - this.solr = solr.client(options.app.get('solr'), options.app.get('solrConnectionPool')); - this.name = options.name; - this.options = options || {}; - this.app = options.app; + constructor(options) { + this.solr = solr.client(options.app.get('solr'), options.app.get('solrConnectionPool')) + this.name = options.name + this.options = options || {} + this.app = options.app + debug('Service created') } - async create (data, params) { - const client = this.app.get('celeryClient'); + async create(data, params) { + const client = this.app.get('celeryClient') if (!client) { - return {}; + return {} } - const q = params.sanitized.sq; - debug('[create] from solr query:', q, 'filters:', params.sanitized.filters); + const q = params.sanitized.sq + debug('[create] from solr query:', q, 'filters:', params.sanitized.filters) const pq = protobuf.searchQuery.serialize({ filters: params.sanitized.filters, - }); - debug('[create] protobuffered:', pq); + }) + debug('[create] protobuffered:', pq) - return client.run({ - task: 'impresso.tasks.export_query_as_csv', - args: [ - // user id - params.user.id, - // query - q, - // description - data.sanitized.description || '', - // query_hash - pq, - ], - }).catch((err) => { - if (err.result.exc_type === 'DoesNotExist') { - throw new NotFound(err.result.exc_message); - } else if (err.result.exc_type === 'OperationalError') { - // probably db is not availabe - throw new NotImplemented(); - } - console.error(err); - throw new NotImplemented(); - }); + return client + .run({ + task: 'impresso.tasks.export_query_as_csv', + args: [ + // user id + params.user.id, + // query + q, + // description + data.sanitized.description || '', + // query_hash + pq, + ], + }) + .then(result => { + debug('[create] result:', result) + return { taskId: result.taskId } + }) + .catch(err => { + if (err.result.exc_type === 'DoesNotExist') { + throw new NotFound(err.result.exc_message) + } else if (err.result.exc_type === 'OperationalError') { + // probably db is not availabe + throw new NotImplemented() + } + console.error(err) + throw new NotImplemented() + }) } } module.exports = function (options) { - return new Service(options); -}; + return new Service(options) +} -module.exports.Service = Service; +module.exports.Service = Service diff --git a/src/services/search-queries-comparison/search-queries-comparison.class.js b/src/services/search-queries-comparison/search-queries-comparison.class.js index df9f66ea..b45ad111 100644 --- a/src/services/search-queries-comparison/search-queries-comparison.class.js +++ b/src/services/search-queries-comparison/search-queries-comparison.class.js @@ -151,7 +151,6 @@ async function getResponseFacetsFromSolrResponse(solrResponse) { class SearchQueriesComparison { setup(app) { // this.solrClient = app.get('solrClient'); - // this.articlesService = app.service('articles'); /** @type {import('../../cachedSolr').CachedSolrClient} */ this.solr = app.service('cachedSolr') diff --git a/src/services/search/search.class.js b/src/services/search/search.class.js index 12341929..eb742607 100644 --- a/src/services/search/search.class.js +++ b/src/services/search/search.class.js @@ -211,7 +211,7 @@ class Service { ) const resultItems = await measureTime( - () => getItemsFromSolrResponse(solrResponse, this.app.service('articles'), userInfo), + () => getItemsFromSolrResponse(solrResponse, this.app.service('content-items'), userInfo), 'search.find.svc.articles' ) const facets = await getFacetsFromSolrResponse(solrResponse) diff --git a/src/services/search/search.schema.ts b/src/services/search/search.schema.ts index fbee93e9..f2748193 100644 --- a/src/services/search/search.schema.ts +++ b/src/services/search/search.schema.ts @@ -55,16 +55,16 @@ const findParameters: MethodParameter[] = [ * NOTE: Keep this in sync with validators in search.hooks.ts */ export const docs: ServiceSwaggerOptions = { - description: 'Search articles', + description: 'Search content items', securities: ['find'], operations: { find: { operationId: 'search', - description: 'Find articles that match the given query', + description: 'Find content items that match the given query', parameters: findParameters, responses: getStandardResponses({ method: 'find', - schema: 'Article', + schema: 'ContentItem', }), }, }, diff --git a/test/integration/sanity-check.test.js b/test/integration/sanity-check.test.js index 4d481df4..85390abb 100644 --- a/test/integration/sanity-check.test.js +++ b/test/integration/sanity-check.test.js @@ -1,5 +1,5 @@ -const assert = require('assert'); -const app = require('../../src/app'); +const assert = require('assert') +const app = require('../../src/app') /* ./node_modules/.bin/eslint \ @@ -9,34 +9,37 @@ const app = require('../../src/app'); NODE_ENV=development DEBUG=impresso/* mocha test/sanity-check.test.js */ -describe('Newspaper issues and \'Public Domain\' contents', function () { - this.timeout(15000); +describe("Newspaper issues and 'Public Domain' contents", function () { + this.timeout(15000) it('get issue "not-found", should throw a not found.', async () => { - const result = await app.service('issues').get('NOT-FOUND').catch(({ code }) => { - assert.strictEqual(code, 404); - }); + const result = await app + .service('issues') + .get('NOT-FOUND') + .catch(({ code }) => { + assert.strictEqual(code, 404) + }) // result should be undefined; - assert.strictEqual(result, undefined); - }); + assert.strictEqual(result, undefined) + }) it('get issue "LCG-1851-12-24-a", Public Domain', async () => { - const result = await app.service('issues').get('LCG-1851-12-24-a'); + const result = await app.service('issues').get('LCG-1851-12-24-a') // result should be undefined; - assert.strictEqual(result.uid, 'LCG-1851-12-24-a'); - assert.strictEqual(result.cover, 'LCG-1851-12-24-a-p0001'); - assert.strictEqual(result.accessRights, 'OpenPublic'); - assert.strictEqual(result.pages[3].iiif, 'https://impresso-project.ch/api/proxy/iiif/LCG-1851-12-24-a-p0004'); - }); + assert.strictEqual(result.uid, 'LCG-1851-12-24-a') + assert.strictEqual(result.cover, 'LCG-1851-12-24-a-p0001') + assert.strictEqual(result.accessRights, 'OpenPublic') + assert.strictEqual(result.pages[3].iiif, 'https://impresso-project.ch/api/proxy/iiif/LCG-1851-12-24-a-p0004') + }) it('get issue "actionfem-1927-10-15", Closed, no authentication (obfuscate)', async () => { - const result = await app.service('issues').get('actionfem-1927-10-15-a'); - assert.strictEqual(result.uid, 'actionfem-1927-10-15-a'); - assert.strictEqual(result.cover, 'actionfem-1927-10-15-a-p0001'); - assert.strictEqual(result.accessRights, 'Closed'); + const result = await app.service('issues').get('actionfem-1927-10-15-a') + assert.strictEqual(result.uid, 'actionfem-1927-10-15-a') + assert.strictEqual(result.cover, 'actionfem-1927-10-15-a-p0001') + assert.strictEqual(result.accessRights, 'Closed') // check iiif; - assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl); - }); + assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl) + }) it('get issue "actionfem-1927-10-15-a", Closed, with authentication! (not obfuscate)', async () => { const result = await app.service('issues').get('actionfem-1927-10-15-a', { @@ -44,88 +47,95 @@ describe('Newspaper issues and \'Public Domain\' contents', function () { user: { uid: 'local-user-not-guest', }, - }); - assert.strictEqual(result.uid, 'actionfem-1927-10-15-a'); - assert.strictEqual(result.cover, 'actionfem-1927-10-15-a-p0001'); - assert.strictEqual(result.accessRights, 'Closed'); + }) + assert.strictEqual(result.uid, 'actionfem-1927-10-15-a') + assert.strictEqual(result.cover, 'actionfem-1927-10-15-a-p0001') + assert.strictEqual(result.accessRights, 'Closed') // check iiif; - assert.notStrictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl); - }); -}); + assert.notStrictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl) + }) +}) -describe('\'OpenPrivate\' behaviour', function () { - this.timeout(15000); +describe("'OpenPrivate' behaviour", function () { + this.timeout(15000) it('get issue "EXP-1857-11-19-a", OpenPrivate (obfuscate for the moment)', async () => { const result = await app.service('issues').get('EXP-1857-11-19-a', { authenticated: false, - }); - assert.strictEqual(result.uid, 'EXP-1857-11-19-a'); - assert.strictEqual(result.cover, 'EXP-1857-11-19-a-p0001'); - assert.strictEqual(result.accessRights, 'OpenPrivate'); + }) + assert.strictEqual(result.uid, 'EXP-1857-11-19-a') + assert.strictEqual(result.cover, 'EXP-1857-11-19-a-p0001') + assert.strictEqual(result.accessRights, 'OpenPrivate') // check iiif; - assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl); - }); + assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl) + }) it('get article "EXP-1857-11-19-a-i0001" obfuscated OpenPrivate', async () => { - const result = await app.service('articles').get('EXP-1857-11-19-a-i0001', { + const result = await app.service('content-items').get('EXP-1857-11-19-a-i0001', { authenticated: false, - }); - assert.strictEqual(result.issue.uid, 'EXP-1857-11-19-a'); - assert.strictEqual(result.issue.accessRights, 'OpenPrivate'); - assert.strictEqual(result.content, app.get('accessRights').unauthorizedContent); - assert.strictEqual(result.obfuscated, true); + }) + assert.strictEqual(result.issue.uid, 'EXP-1857-11-19-a') + assert.strictEqual(result.issue.accessRights, 'OpenPrivate') + assert.strictEqual(result.content, app.get('accessRights').unauthorizedContent) + assert.strictEqual(result.obfuscated, true) // check iiif; - assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl); - }); + assert.strictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl) + }) it('get article "EXP-1857-11-19-a-i0001" OpenPrivate, but authentified!', async () => { - const result = await app.service('articles').get('EXP-1857-11-19-a-i0001', { + const result = await app.service('content-items').get('EXP-1857-11-19-a-i0001', { authenticated: true, user: { uid: 'local-user-not-guest', }, - }); - assert.strictEqual(result.issue.uid, 'EXP-1857-11-19-a'); - assert.strictEqual(result.issue.accessRights, 'OpenPrivate'); - assert.notStrictEqual(result.content, app.get('accessRights').unauthorizedContent); - assert.strictEqual(result.obfuscated, undefined); + }) + assert.strictEqual(result.issue.uid, 'EXP-1857-11-19-a') + assert.strictEqual(result.issue.accessRights, 'OpenPrivate') + assert.notStrictEqual(result.content, app.get('accessRights').unauthorizedContent) + assert.strictEqual(result.obfuscated, undefined) // check iiif; - assert.notStrictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl); - }); -}); + assert.notStrictEqual(result.pages[0].iiif, app.get('accessRights').unauthorizedIIIFUrl) + }) +}) -describe('\'Luxwort\' contents', function () { - this.timeout(15000); +describe("'Luxwort' contents", function () { + this.timeout(15000) - const service = app.service('articles'); + const service = app.service('content-items') it('registered the service', () => { - assert.ok(service); - }); + assert.ok(service) + }) it('get article "luxwort-1927-07-13-a-i0051", check excerpt in language DE and IIIF', async () => { - const result = await service.get('luxwort-1927-07-13-a-i0051'); - assert.ok(result); - assert.strictEqual(result.title, 'Pub. 14 Page 6', 'check title'); - assert.strictEqual(result.excerpt, 'La tainills Remerciements famille J.-P. Peters-Schmitz, pprrooffoonnddés-- ment touchée des nombreuses marques de Sympathie et de condoléances gui lvi ont...', 'check excerpt'); - }); + const result = await service.get('luxwort-1927-07-13-a-i0051') + assert.ok(result) + assert.strictEqual(result.title, 'Pub. 14 Page 6', 'check title') + assert.strictEqual( + result.excerpt, + 'La tainills Remerciements famille J.-P. Peters-Schmitz, pprrooffoonnddés-- ment touchée des nombreuses marques de Sympathie et de condoléances gui lvi ont...', + 'check excerpt' + ) + }) it('get article "actionfem-1927-10-15-a-i0012", check custom iiif and title FR and content DE', async () => { - const result = await service.get('actionfem-1927-10-15-a-i0012'); - assert.strictEqual(result.title, 'Unsere Einstellung.'); - assert.strictEqual(result.excerpt, 'Es gereicht uns zur besonderen Genugtuung, am heutigen Tage die erste Nummer L\'Action Féminine der Oeffentlichteit zu übergeben. Unsere Monatsschrift...'); + const result = await service.get('actionfem-1927-10-15-a-i0012') + assert.strictEqual(result.title, 'Unsere Einstellung.') + assert.strictEqual( + result.excerpt, + "Es gereicht uns zur besonderen Genugtuung, am heutigen Tage die erste Nummer L'Action Féminine der Oeffentlichteit zu übergeben. Unsere Monatsschrift..." + ) // assert.strictEqual(result.pages[0].iiif, 'https://iiif.eluxemburgensia.lu/iiif/2/ark:%2f70795%2fs8qgx6%2fpages%2f1/info.json', 'external iiif'); - }); -}); + }) +}) // WRONG table of content generated for // https://solrdev.dhlab.epfl.ch/solr/impresso_dev/select?q=id:luxland-2007-12-21-a-i0001 describe('Test /images service for crazy contents', function () { - this.timeout(5000); - const service = app.service('images'); + this.timeout(5000) + const service = app.service('images') it('get NO images from issue obermosel-1930-12-23-a without errors', async () => { - assert.ok(service); + assert.ok(service) const result = await service.find({ query: { filters: [ @@ -135,9 +145,9 @@ describe('Test /images service for crazy contents', function () { }, ], }, - }); - assert.strictEqual(result.total, 0); - }); + }) + assert.strictEqual(result.total, 0) + }) it('get images from issue GDL-1998-02-28-a', async () => { const result = await service.find({ @@ -149,10 +159,10 @@ describe('Test /images service for crazy contents', function () { }, ], }, - }); - assert.strictEqual(result.total > 0, true); - }); -}); + }) + assert.strictEqual(result.total > 0, true) + }) +}) // WRONG table of content generated for // https://solrdev.dhlab.epfl.ch/solr/impresso_dev/select?q=id:luxland-2007-12-21-a-i0001 diff --git a/test/integration/services/articles-tags.test.js b/test/integration/services/articles-tags.test.js index cf7aaf41..eb7dc90a 100644 --- a/test/integration/services/articles-tags.test.js +++ b/test/integration/services/articles-tags.test.js @@ -1,6 +1,6 @@ -const assert = require('assert'); -const app = require('../../../src/app'); -const { generateUser, removeGeneratedUser } = require('./utils'); +const assert = require('assert') +const app = require('../../../src/app') +const { generateUser, removeGeneratedUser } = require('./utils') /* ./node_modules/.bin/eslint \ src/services/utils.js src/models src/services/articles-tags \ @@ -12,54 +12,57 @@ src/services/utils.js src/models src/services/articles-tags \ test/services/articles-tags.test.js --fix && mocha test/services/articles-tags.test.js */ -describe('\'articles-tags\' service', function () { - this.timeout(10000); +describe("'articles-tags' service", function () { + this.timeout(10000) - const service = app.service('articles-tags'); + const service = app.service('articles-tags') let user = { username: 'guest-test-2', password: 'Apaaiiai87!!', email: 'guest-test-2@impresso-project.ch', - }; + } - let tag; + let tag it('registered the service', () => { - assert.ok(service, 'Registered the service'); - }); + assert.ok(service, 'Registered the service') + }) it('setup the test', async () => { - user = await generateUser(user); - assert.ok(user.uid); - }); + user = await generateUser(user) + assert.ok(user.uid) + }) // it('attach a tag to our test article', async () => { - const results = await service.create({ - article_uid: 'GDL-1902-05-12-a-i0012', - tag: 'brave new world', - }, { - user, - }); + const results = await service.create( + { + article_uid: 'GDL-1902-05-12-a-i0012', + tag: 'brave new world', + }, + { + user, + } + ) - tag = results.data; - assert.equal(results.info._stats.relationshipsCreated, 2); - assert.equal(results.data.name, 'brave new world'); - assert.ok(results.data.labels); - }); + tag = results.data + assert.equal(results.info._stats.relationshipsCreated, 2) + assert.equal(results.data.name, 'brave new world') + assert.ok(results.data.labels) + }) it('check that the tag is in the taglist', async () => { - const resultAuth = await app.service('articles').get('GDL-1902-05-12-a-i0012', { + const resultAuth = await app.service('content-items').get('GDL-1902-05-12-a-i0012', { user, - }); - assert.ok(resultAuth.labels); + }) + assert.ok(resultAuth.labels) // Does contain the tag - assert.equal(resultAuth.tags[0].uid, tag.uid); + assert.equal(resultAuth.tags[0].uid, tag.uid) - const result = await app.service('articles').get('GDL-1902-05-12-a-i0012'); + const result = await app.service('content-items').get('GDL-1902-05-12-a-i0012') // SHOULD not contain the tag - assert.equal(result.tags.length, 0); - }); + assert.equal(result.tags.length, 0) + }) it('remove the tag attached to our beloved article', async () => { // console.log(tag); @@ -68,12 +71,12 @@ describe('\'articles-tags\' service', function () { query: { tag_uid: tag.uid, }, - }); - assert.equal(results.info._stats.relationshipsDeleted, 1); + }) + assert.equal(results.info._stats.relationshipsDeleted, 1) // console.log(results); - }); + }) it('remove setup', async () => { - await removeGeneratedUser(user); - }); -}); + await removeGeneratedUser(user) + }) +}) diff --git a/test/integration/services/articles.test.js b/test/integration/services/articles.test.js index 6582f282..f2a9d38f 100644 --- a/test/integration/services/articles.test.js +++ b/test/integration/services/articles.test.js @@ -1,5 +1,5 @@ -const assert = require('assert'); -const app = require('../../../src/app'); +const assert = require('assert') +const app = require('../../../src/app') /* ./node_modules/.bin/eslint \ @@ -13,87 +13,96 @@ const app = require('../../../src/app'); src/services/articles test/services/articles.test.js --fix && mocha test/services/articles.test.js */ -describe('\'articles\' service', function () { - this.timeout(15000); - const service = app.service('articles'); +describe("'articles' service", function () { + this.timeout(15000) + const service = app.service('content-items') it('registered the service', () => { - assert.ok(service); - }); + assert.ok(service) + }) it('find endpoint should just work', async () => { - const result = await service.find({ - query: {}, - }).catch((err) => { - assert.fail(err.data); - }); + const result = await service + .find({ + query: {}, + }) + .catch(err => { + assert.fail(err.data) + }) - assert.ok(result.data, 'there should be some article'); - assert.ok(result.data[0].issue, 'there should be an issue for the first article'); - assert.ok(result.data[0].pages, 'there should be pages'); - assert.equal(result.data[0].labels[0], 'article'); - }); + assert.ok(result.data, 'there should be some article') + assert.ok(result.data[0].issue, 'there should be an issue for the first article') + assert.ok(result.data[0].pages, 'there should be pages') + assert.equal(result.data[0].labels[0], 'article') + }) it('find given an issue filter', async () => { - const result = await service.find({ - query: { - filters: [{ - type: 'issue', - q: 'GDL-1947-03-12-a', - }], - }, - }).catch((err) => { - assert.fail(err.data); - }); - assert.ok(result.total); - assert.ok(result.data[0].uid); - assert.equal(result.data[0].labels[0], 'article'); - assert.equal(result.info.filters[0].q, 'GDL-1947-03-12-a'); - }); + const result = await service + .find({ + query: { + filters: [ + { + type: 'issue', + q: 'GDL-1947-03-12-a', + }, + ], + }, + }) + .catch(err => { + assert.fail(err.data) + }) + assert.ok(result.total) + assert.ok(result.data[0].uid) + assert.equal(result.data[0].labels[0], 'article') + assert.equal(result.info.filters[0].q, 'GDL-1947-03-12-a') + }) it('find given a single page filter', async () => { - const pageUid = 'GDL-1902-05-13-a-p0001'; - const result = await service.find({ - query: { - filters: [{ - type: 'page', - q: pageUid, - }], - }, - }).catch((err) => { - assert.fail(err.data); - }); + const pageUid = 'GDL-1902-05-13-a-p0001' + const result = await service + .find({ + query: { + filters: [ + { + type: 'page', + q: pageUid, + }, + ], + }, + }) + .catch(err => { + assert.fail(err.data) + }) // console.log(result); - assert.ok(result.total); - assert.ok(result.data[0].uid); - assert.equal(result.data[0].labels[0], 'article'); - assert.equal(result.data[0].regions[0].pageUid, pageUid); - assert.ok(result.data[0].regions[0].coords); - assert.ok(result.data[0].regions[0].iiif_fragment); - }); + assert.ok(result.total) + assert.ok(result.data[0].uid) + assert.equal(result.data[0].labels[0], 'article') + assert.equal(result.data[0].regions[0].pageUid, pageUid) + assert.ok(result.data[0].regions[0].coords) + assert.ok(result.data[0].regions[0].iiif_fragment) + }) it('get an article contents given an article id', async () => { - const result = await service.get('GDL-1902-05-13-a-i0006').catch((err) => { - assert.fail(err); - }); - assert.equal(result.uid, 'GDL-1902-05-13-a-i0006'); - assert.ok(result.regions, 'Check image regions'); - assert.ok(result.content, 'Check property content'); - assert.ok(result.excerpt, 'Check property excerpt'); - assert.ok(result.title, 'Check property title'); + const result = await service.get('GDL-1902-05-13-a-i0006').catch(err => { + assert.fail(err) + }) + assert.equal(result.uid, 'GDL-1902-05-13-a-i0006') + assert.ok(result.regions, 'Check image regions') + assert.ok(result.content, 'Check property content') + assert.ok(result.excerpt, 'Check property excerpt') + assert.ok(result.title, 'Check property title') // assert.ok(res.total); - }); + }) // it('get multiple articles given a article ids', async () => { - const results = await service.get('GDL-1954-06-29-a-i0084,GDL-1951-04-23-a-i0096') - .catch((err) => { - assert.fail(err.data); - }); // [type]=entity&filters[0][context]=include + const results = await service.get('GDL-1954-06-29-a-i0084,GDL-1951-04-23-a-i0096').catch(err => { + assert.fail(err.data) + }) // [type]=entity&filters[0][context]=include // console.log(results); - assert.ok(results.length); + assert.ok(results.length) // should NOT have contents.... - assert.ok(results[0].uid, 'Check result'); - assert.ok(!results[0].contents, true); - assert.ok(results[0].title, 'Check property title'); + assert.ok(results[0].uid, 'Check result') + assert.ok(!results[0].contents, true) + assert.ok(results[0].title, 'Check property title') // assert.ok(res.total); - }); -}); + }) +})