feature/IO-3255-simplified-parts-management - Checkpoint
This commit is contained in:
159
client/package-lock.json
generated
159
client/package-lock.json
generated
@@ -21,15 +21,15 @@
|
||||
"@jsreport/browser-client": "^3.1.0",
|
||||
"@reduxjs/toolkit": "^2.8.2",
|
||||
"@sentry/cli": "^2.46.0",
|
||||
"@sentry/react": "^9.28.1",
|
||||
"@sentry/react": "^9.30.0",
|
||||
"@sentry/vite-plugin": "^3.5.0",
|
||||
"@splitsoftware/splitio-react": "^2.3.1",
|
||||
"@tanem/react-nprogress": "^5.0.53",
|
||||
"antd": "^5.26.0",
|
||||
"antd": "^5.26.1",
|
||||
"apollo-link-logger": "^2.0.1",
|
||||
"apollo-link-sentry": "^4.3.0",
|
||||
"autosize": "^6.0.1",
|
||||
"axios": "^1.8.4",
|
||||
"axios": "^1.10.0",
|
||||
"classnames": "^2.5.1",
|
||||
"css-box-model": "^1.2.1",
|
||||
"dayjs": "^1.11.13",
|
||||
@@ -48,19 +48,19 @@
|
||||
"memoize-one": "^6.0.0",
|
||||
"normalize-url": "^8.0.2",
|
||||
"object-hash": "^3.0.0",
|
||||
"phone": "^3.1.59",
|
||||
"phone": "^3.1.62",
|
||||
"prop-types": "^15.8.1",
|
||||
"query-string": "^9.2.0",
|
||||
"query-string": "^9.2.1",
|
||||
"raf-schd": "^4.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-big-calendar": "^1.19.3",
|
||||
"react-big-calendar": "^1.19.4",
|
||||
"react-color": "^2.19.3",
|
||||
"react-cookie": "^8.0.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-drag-listview": "^2.0.0",
|
||||
"react-grid-gallery": "^1.0.1",
|
||||
"react-grid-layout": "1.3.4",
|
||||
"react-i18next": "^15.5.2",
|
||||
"react-i18next": "^15.5.3",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-image-lightbox": "^5.1.4",
|
||||
"react-markdown": "^10.1.0",
|
||||
@@ -71,7 +71,7 @@
|
||||
"react-resizable": "^3.0.5",
|
||||
"react-router-dom": "^6.30.0",
|
||||
"react-sticky": "^6.0.3",
|
||||
"react-virtuoso": "^4.12.8",
|
||||
"react-virtuoso": "^4.13.0",
|
||||
"recharts": "^2.15.2",
|
||||
"redux": "^5.0.1",
|
||||
"redux-actions": "^3.0.3",
|
||||
@@ -81,7 +81,7 @@
|
||||
"reselect": "^5.1.1",
|
||||
"sass": "^1.89.2",
|
||||
"socket.io-client": "^4.8.1",
|
||||
"styled-components": "^6.1.18",
|
||||
"styled-components": "^6.1.19",
|
||||
"subscriptions-transport-ws": "^0.11.0",
|
||||
"use-memo-one": "^1.1.3",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
@@ -94,7 +94,7 @@
|
||||
"@dotenvx/dotenvx": "^1.44.2",
|
||||
"@emotion/babel-plugin": "^11.13.5",
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@eslint/js": "^9.28.0",
|
||||
"@eslint/js": "^9.29.0",
|
||||
"@playwright/test": "^1.53.0",
|
||||
"@sentry/webpack-plugin": "^3.5.0",
|
||||
"@testing-library/dom": "^10.4.0",
|
||||
@@ -2398,13 +2398,10 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@babel/runtime": {
|
||||
"version": "7.27.0",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz",
|
||||
"integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==",
|
||||
"version": "7.27.6",
|
||||
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.6.tgz",
|
||||
"integrity": "sha512-vbavdySgbTTrmFE+EsiqUTzlOr5bzlnJtUv9PynGCAKvfQqjIXbvFdumPM/GxMDfyuGMJaJAU6TO4zc1Jf1i8Q==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"regenerator-runtime": "^0.14.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=6.9.0"
|
||||
}
|
||||
@@ -2913,9 +2910,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
|
||||
"integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
|
||||
"version": "9.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
|
||||
"integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -4469,50 +4466,50 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/@sentry-internal/browser-utils": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.28.1.tgz",
|
||||
"integrity": "sha512-P/FEZkT7UqTw9P/2n/Y4Aa1OtGP6dnCvyqzPPkjiRdVa7Ep7S5ElBJloGv7077TLLBtAfCsEUVRlM1F6/jQoaA==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/browser-utils/-/browser-utils-9.30.0.tgz",
|
||||
"integrity": "sha512-e6ZlN8oWheCB0YJSGlBNUlh6UPnY5Ecj1P+/cgeKBhNm7c3bIx4J50485hB8LQsu+b7Q11L2o/wucZ//Pb6FCg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry/core": "9.28.1"
|
||||
"@sentry/core": "9.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry-internal/feedback": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.28.1.tgz",
|
||||
"integrity": "sha512-HOk/c26D3nlClO/xEefev8fIJzRA621PFQvNFPu/y0Z5HujEqSmIsrff0cXszPPYD95h4Mwk63E0ZYdspdeXcw==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/feedback/-/feedback-9.30.0.tgz",
|
||||
"integrity": "sha512-qAZ7xxLqZM7GlEvmSUmTHnoueg+fc7esMQD4vH8pS7HI3n9C5MjGn3HHlndRpD8lL7iUUQ0TPZQgU6McbzMDyw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry/core": "9.28.1"
|
||||
"@sentry/core": "9.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry-internal/replay": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.28.1.tgz",
|
||||
"integrity": "sha512-Tv9pkfAX+1bmhxF42TL0c4uTiK2+rp5LMYEPdz6JBfpfvG/Z1unPGsuB7fQmHYKyfHBQJmi92DZV+smljm7w/g==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/replay/-/replay-9.30.0.tgz",
|
||||
"integrity": "sha512-+6wkqQGLJuFUzvGRzbh3iIhFGyxQx/Oxc0ODDKmz9ag2xYRjCYb3UUQXmQX9navAF0HXUsq8ajoJPm2L1ZyWVg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry-internal/browser-utils": "9.28.1",
|
||||
"@sentry/core": "9.28.1"
|
||||
"@sentry-internal/browser-utils": "9.30.0",
|
||||
"@sentry/core": "9.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry-internal/replay-canvas": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.28.1.tgz",
|
||||
"integrity": "sha512-RtkogfcIpXLFCyV8CTnXmVTH2QauT/KwmUAXBbeOz3rRWsM19yjN1moHrsjxn7OdjTv+D4qWSCA8Ka1aKSpr7g==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry-internal/replay-canvas/-/replay-canvas-9.30.0.tgz",
|
||||
"integrity": "sha512-I4MxS27rfV7vnOU29L80y4baZ4I1XqpnYvC/yLN7C17nA8eDCufQ8WVomli41y8JETnfcxlm68z7CS0sO4RCSA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry-internal/replay": "9.28.1",
|
||||
"@sentry/core": "9.28.1"
|
||||
"@sentry-internal/replay": "9.30.0",
|
||||
"@sentry/core": "9.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
@@ -4528,16 +4525,16 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/browser": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.28.1.tgz",
|
||||
"integrity": "sha512-XAS46iQSq8lXTnv9udQP025JTf3PwSVRE9ePJVQhx25QBWxedqGhEOv5qqX9b1Ijf8KiZYXXhBWMQxBBXVzUaw==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/browser/-/browser-9.30.0.tgz",
|
||||
"integrity": "sha512-sRyW6A9nIieTTI26MYXk1DmWEhmphTjZevusNWla+vvUigCmSjuH+xZw19w43OyvF3bu261Skypnm/mAalOTwg==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry-internal/browser-utils": "9.28.1",
|
||||
"@sentry-internal/feedback": "9.28.1",
|
||||
"@sentry-internal/replay": "9.28.1",
|
||||
"@sentry-internal/replay-canvas": "9.28.1",
|
||||
"@sentry/core": "9.28.1"
|
||||
"@sentry-internal/browser-utils": "9.30.0",
|
||||
"@sentry-internal/feedback": "9.30.0",
|
||||
"@sentry-internal/replay": "9.30.0",
|
||||
"@sentry-internal/replay-canvas": "9.30.0",
|
||||
"@sentry/core": "9.30.0"
|
||||
},
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
@@ -4914,22 +4911,22 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/core": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.28.1.tgz",
|
||||
"integrity": "sha512-6q59r/71MeE+4StkvwdKAAyhBBNpWcii0HeiWBZ3l1gaFYQlb6bChjZJRZmxSzF5dnvkdF4duQbAC3JmjeIbPA==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/core/-/core-9.30.0.tgz",
|
||||
"integrity": "sha512-JfEpeQ8a1qVJEb9DxpFTFy1J1gkNdlgKAPiqYGNnm4yQbnfl2Kb/iEo1if70FkiHc52H8fJwISEF90pzMm6lPg==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=18"
|
||||
}
|
||||
},
|
||||
"node_modules/@sentry/react": {
|
||||
"version": "9.28.1",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.28.1.tgz",
|
||||
"integrity": "sha512-XnEURhb2wG7FFCGMuW/IJc8YeDMb9LM7cZSBwBDcplR11mCRsLpf4AGm6K1nWmAn5ZvWrXRO/TBAf9DNRAfnfg==",
|
||||
"version": "9.30.0",
|
||||
"resolved": "https://registry.npmjs.org/@sentry/react/-/react-9.30.0.tgz",
|
||||
"integrity": "sha512-asA49AkZ/g9CCeW0eA0Ent0DF60S4k2IHxbu+Q1mqgbRRmbn859oL2Bgsu/EvzWf5edeQtuUml8LIo4YoFwfMA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@sentry/browser": "9.28.1",
|
||||
"@sentry/core": "9.28.1",
|
||||
"@sentry/browser": "9.30.0",
|
||||
"@sentry/core": "9.30.0",
|
||||
"hoist-non-react-statics": "^3.3.2"
|
||||
},
|
||||
"engines": {
|
||||
@@ -6123,9 +6120,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/antd": {
|
||||
"version": "5.26.0",
|
||||
"resolved": "https://registry.npmjs.org/antd/-/antd-5.26.0.tgz",
|
||||
"integrity": "sha512-iMPYKFTo2HvIRGutUOuN5AG+Uf+B2QaqcGQbdPp/100fqV3FAil6vFZLVuV3C4XEUOlDNkkUlJKhLR9V5rzIEg==",
|
||||
"version": "5.26.1",
|
||||
"resolved": "https://registry.npmjs.org/antd/-/antd-5.26.1.tgz",
|
||||
"integrity": "sha512-CiLGZ2Ftld+fuoj+U3OL8uouuqUppqFJnW4O/4bOgSWzM9XsJGibpNtUa9QArhrZ5ndfnzlPP/4RVXUK/xfSvQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@ant-design/colors": "^7.2.1",
|
||||
@@ -6585,9 +6582,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
|
||||
"integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz",
|
||||
"integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
@@ -13299,9 +13296,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/phone": {
|
||||
"version": "3.1.59",
|
||||
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.59.tgz",
|
||||
"integrity": "sha512-CUv22jw0Zgrb/h7v3sEd262zJXS/66h7zyCCRIynx+2FswAJuuFsXsJkIxMUT4UcosKxDx1bJwdZeGnDELLsCw==",
|
||||
"version": "3.1.62",
|
||||
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.62.tgz",
|
||||
"integrity": "sha512-mxUdq2nULKg6ukgVr4GSF9/sQiAa6e3AJy2HNE3UJA+lqdEF+Cko2RhKHhZRHtFaLKuBLPptitIwjv0uHG+vhw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
@@ -13613,9 +13610,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/query-string": {
|
||||
"version": "9.2.0",
|
||||
"resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.0.tgz",
|
||||
"integrity": "sha512-YIRhrHujoQxhexwRLxfy3VSjOXmvZRd2nyw1PwL1UUqZ/ys1dEZd1+NSgXkne2l/4X/7OXkigEAuhTX0g/ivJQ==",
|
||||
"version": "9.2.1",
|
||||
"resolved": "https://registry.npmjs.org/query-string/-/query-string-9.2.1.tgz",
|
||||
"integrity": "sha512-3jTGGLRzlhu/1ws2zlr4Q+GVMLCQTLFOj8CMX5x44cdZG9FQE07x2mQhaNxaKVPNmIDu0mvJ/cEwtY7Pim7hqA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"decode-uri-component": "^0.4.1",
|
||||
@@ -14314,9 +14311,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-big-calendar": {
|
||||
"version": "1.19.3",
|
||||
"resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.19.3.tgz",
|
||||
"integrity": "sha512-+P/9X54QxvBcbJhtyxSBoXEj3enSXSxJw76RWlP8IUhHUQQREpwdzld0dcJpfDTvp8c/aFzzKx7KZjZtiOusdA==",
|
||||
"version": "1.19.4",
|
||||
"resolved": "https://registry.npmjs.org/react-big-calendar/-/react-big-calendar-1.19.4.tgz",
|
||||
"integrity": "sha512-FrvbDx2LF6JAWFD96LU1jjloppC5OgIvMYUYIPzAw5Aq+ArYFPxAjLqXc4DyxfsQDN0TJTMuS/BIbcSB7Pg0YA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.20.7",
|
||||
@@ -14444,12 +14441,12 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-i18next": {
|
||||
"version": "15.5.2",
|
||||
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.5.2.tgz",
|
||||
"integrity": "sha512-ePODyXgmZQAOYTbZXQn5rRsSBu3Gszo69jxW6aKmlSgxKAI1fOhDwSu6bT4EKHciWPKQ7v7lPrjeiadR6Gi+1A==",
|
||||
"version": "15.5.3",
|
||||
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-15.5.3.tgz",
|
||||
"integrity": "sha512-ypYmOKOnjqPEJZO4m1BI0kS8kWqkBNsKYyhVUfij0gvjy9xJNoG/VcGkxq5dRlVwzmrmY1BQMAmpbbUBLwC4Kw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@babel/runtime": "^7.25.0",
|
||||
"@babel/runtime": "^7.27.6",
|
||||
"html-parse-stringify": "^3.0.1"
|
||||
},
|
||||
"peerDependencies": {
|
||||
@@ -14742,9 +14739,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/react-virtuoso": {
|
||||
"version": "4.12.8",
|
||||
"resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.12.8.tgz",
|
||||
"integrity": "sha512-NMMKfDBr/+xZZqCQF3tN1SZsh6FwOJkYgThlfnsPLkaEhdyQo0EuWUzu3ix6qjnI7rYwJhMwRGoJBi+aiDfGsA==",
|
||||
"version": "4.13.0",
|
||||
"resolved": "https://registry.npmjs.org/react-virtuoso/-/react-virtuoso-4.13.0.tgz",
|
||||
"integrity": "sha512-XHv2Fglpx80yFPdjZkV9d1baACKghg/ucpDFEXwaix7z0AfVQj+mF6lM+YQR6UC/TwzXG2rJKydRMb3+7iV3PA==",
|
||||
"license": "MIT",
|
||||
"peerDependencies": {
|
||||
"react": ">=16 || >=17 || >= 18 || >= 19",
|
||||
@@ -14981,12 +14978,6 @@
|
||||
"node": ">=4"
|
||||
}
|
||||
},
|
||||
"node_modules/regenerator-runtime": {
|
||||
"version": "0.14.1",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz",
|
||||
"integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==",
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/regenerator-transform": {
|
||||
"version": "0.15.2",
|
||||
"resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.2.tgz",
|
||||
@@ -16339,9 +16330,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/styled-components": {
|
||||
"version": "6.1.18",
|
||||
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.18.tgz",
|
||||
"integrity": "sha512-Mvf3gJFzZCkhjY2Y/Fx9z1m3dxbza0uI9H1CbNZm/jSHCojzJhQ0R7bByrlFJINnMzz/gPulpoFFGymNwrsMcw==",
|
||||
"version": "6.1.19",
|
||||
"resolved": "https://registry.npmjs.org/styled-components/-/styled-components-6.1.19.tgz",
|
||||
"integrity": "sha512-1v/e3Dl1BknC37cXMhwGomhO8AkYmN41CqyX9xhUDxry1ns3BFQy2lLDRQXJRdVVWB9OHemv/53xaStimvWyuA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@emotion/is-prop-valid": "1.2.2",
|
||||
|
||||
@@ -20,15 +20,15 @@
|
||||
"@jsreport/browser-client": "^3.1.0",
|
||||
"@reduxjs/toolkit": "^2.8.2",
|
||||
"@sentry/cli": "^2.46.0",
|
||||
"@sentry/react": "^9.28.1",
|
||||
"@sentry/react": "^9.30.0",
|
||||
"@sentry/vite-plugin": "^3.5.0",
|
||||
"@splitsoftware/splitio-react": "^2.3.1",
|
||||
"@tanem/react-nprogress": "^5.0.53",
|
||||
"antd": "^5.26.0",
|
||||
"antd": "^5.26.1",
|
||||
"apollo-link-logger": "^2.0.1",
|
||||
"apollo-link-sentry": "^4.3.0",
|
||||
"autosize": "^6.0.1",
|
||||
"axios": "^1.8.4",
|
||||
"axios": "^1.10.0",
|
||||
"classnames": "^2.5.1",
|
||||
"css-box-model": "^1.2.1",
|
||||
"dayjs": "^1.11.13",
|
||||
@@ -47,19 +47,19 @@
|
||||
"memoize-one": "^6.0.0",
|
||||
"normalize-url": "^8.0.2",
|
||||
"object-hash": "^3.0.0",
|
||||
"phone": "^3.1.59",
|
||||
"phone": "^3.1.62",
|
||||
"prop-types": "^15.8.1",
|
||||
"query-string": "^9.2.0",
|
||||
"query-string": "^9.2.1",
|
||||
"raf-schd": "^4.0.3",
|
||||
"react": "^18.3.1",
|
||||
"react-big-calendar": "^1.19.3",
|
||||
"react-big-calendar": "^1.19.4",
|
||||
"react-color": "^2.19.3",
|
||||
"react-cookie": "^8.0.1",
|
||||
"react-dom": "^18.3.1",
|
||||
"react-drag-listview": "^2.0.0",
|
||||
"react-grid-gallery": "^1.0.1",
|
||||
"react-grid-layout": "1.3.4",
|
||||
"react-i18next": "^15.5.2",
|
||||
"react-i18next": "^15.5.3",
|
||||
"react-icons": "^5.5.0",
|
||||
"react-image-lightbox": "^5.1.4",
|
||||
"react-markdown": "^10.1.0",
|
||||
@@ -70,7 +70,7 @@
|
||||
"react-resizable": "^3.0.5",
|
||||
"react-router-dom": "^6.30.0",
|
||||
"react-sticky": "^6.0.3",
|
||||
"react-virtuoso": "^4.12.8",
|
||||
"react-virtuoso": "^4.13.0",
|
||||
"recharts": "^2.15.2",
|
||||
"redux": "^5.0.1",
|
||||
"redux-actions": "^3.0.3",
|
||||
@@ -80,7 +80,7 @@
|
||||
"reselect": "^5.1.1",
|
||||
"sass": "^1.89.2",
|
||||
"socket.io-client": "^4.8.1",
|
||||
"styled-components": "^6.1.18",
|
||||
"styled-components": "^6.1.19",
|
||||
"subscriptions-transport-ws": "^0.11.0",
|
||||
"use-memo-one": "^1.1.3",
|
||||
"vite-plugin-ejs": "^1.7.0",
|
||||
@@ -134,7 +134,7 @@
|
||||
"@dotenvx/dotenvx": "^1.44.2",
|
||||
"@emotion/babel-plugin": "^11.13.5",
|
||||
"@emotion/react": "^11.14.0",
|
||||
"@eslint/js": "^9.28.0",
|
||||
"@eslint/js": "^9.29.0",
|
||||
"@playwright/test": "^1.53.0",
|
||||
"@sentry/webpack-plugin": "^3.5.0",
|
||||
"@testing-library/dom": "^10.4.0",
|
||||
|
||||
@@ -2,8 +2,6 @@ import { BarsOutlined, PrinterFilled, SyncOutlined, ToolFilled } from "@ant-desi
|
||||
import { PageHeader } from "@ant-design/pro-layout";
|
||||
import { useQuery } from "@apollo/client";
|
||||
import { Button, Divider, Form, Space, Tabs } from "antd";
|
||||
import Axios from "axios";
|
||||
import _ from "lodash";
|
||||
import queryString from "query-string";
|
||||
import { useEffect, useState } from "react";
|
||||
import { useTranslation } from "react-i18next";
|
||||
@@ -25,11 +23,6 @@ import { insertAuditTrail } from "../../redux/application/application.actions.js
|
||||
import { selectJobReadOnly } from "../../redux/application/application.selectors.js";
|
||||
import { setModalContext } from "../../redux/modals/modals.actions.js";
|
||||
import { selectBodyshop } from "../../redux/user/user.selectors.js";
|
||||
import AuditTrailMapping from "../../utils/AuditTrailMappings.js";
|
||||
import { DateTimeFormat } from "../../utils/DateFormatter.jsx";
|
||||
import dayjs from "../../utils/day.js";
|
||||
import UndefinedToNull from "../../utils/undefinedtonull.js";
|
||||
import { transformJobToForm } from "../jobs-detail/jobs-detail.page.component.jsx";
|
||||
|
||||
const mapStateToProps = createStructuredSelector({
|
||||
bodyshop: selectBodyshop,
|
||||
|
||||
@@ -9,7 +9,6 @@ import { createStructuredSelector } from "reselect";
|
||||
import BreadCrumbs from "../../components/breadcrumbs/breadcrumbs.component.jsx";
|
||||
import ConflictComponent from "../../components/conflict/conflict.component.jsx";
|
||||
import ErrorBoundary from "../../components/error-boundary/error-boundary.component.jsx";
|
||||
import HeaderContainer from "../../components/header/header.container.jsx";
|
||||
import LoadingSpinner from "../../components/loading-spinner/loading-spinner.component.jsx";
|
||||
import PrintCenterModalContainer from "../../components/print-center-modal/print-center-modal.container.jsx";
|
||||
import ShopSubStatusComponent from "../../components/shop-sub-status/shop-sub-status.component.jsx";
|
||||
@@ -208,7 +207,6 @@ export function SimplifiedPartsPage({ conflict, bodyshop, alerts, setAlerts }) {
|
||||
};
|
||||
|
||||
return (
|
||||
<>
|
||||
<Layout style={{ minHeight: "100vh" }} className="layout-container">
|
||||
<UpdateAlert />
|
||||
{/* <HeaderContainer /> */}
|
||||
@@ -251,7 +249,6 @@ export function SimplifiedPartsPage({ conflict, bodyshop, alerts, setAlerts }) {
|
||||
</div>
|
||||
</Footer>
|
||||
</Layout>
|
||||
</>
|
||||
);
|
||||
}
|
||||
|
||||
|
||||
232
package-lock.json
generated
232
package-lock.json
generated
@@ -9,23 +9,23 @@
|
||||
"version": "0.2.0",
|
||||
"license": "UNLICENSED",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-cloudwatch-logs": "^3.828.0",
|
||||
"@aws-sdk/client-elasticache": "^3.828.0",
|
||||
"@aws-sdk/client-s3": "^3.828.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.828.0",
|
||||
"@aws-sdk/client-ses": "^3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "^3.828.0",
|
||||
"@aws-sdk/lib-storage": "^3.828.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.828.0",
|
||||
"@aws-sdk/client-cloudwatch-logs": "^3.830.0",
|
||||
"@aws-sdk/client-elasticache": "^3.830.0",
|
||||
"@aws-sdk/client-s3": "^3.830.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.830.0",
|
||||
"@aws-sdk/client-ses": "^3.830.0",
|
||||
"@aws-sdk/credential-provider-node": "^3.830.0",
|
||||
"@aws-sdk/lib-storage": "^3.830.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.830.0",
|
||||
"@opensearch-project/opensearch": "^2.13.0",
|
||||
"@socket.io/admin-ui": "^0.5.1",
|
||||
"@socket.io/redis-adapter": "^8.3.0",
|
||||
"archiver": "^7.0.1",
|
||||
"aws4": "^1.13.2",
|
||||
"axios": "^1.8.4",
|
||||
"axios": "^1.10.0",
|
||||
"better-queue": "^3.8.12",
|
||||
"bullmq": "^5.53.2",
|
||||
"chart.js": "^4.4.8",
|
||||
"bullmq": "^5.54.2",
|
||||
"chart.js": "^4.5.0",
|
||||
"cloudinary": "^2.6.1",
|
||||
"compression": "^1.8.0",
|
||||
"cookie-parser": "^1.4.7",
|
||||
@@ -49,7 +49,7 @@
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"node-persist": "^4.0.4",
|
||||
"nodemailer": "^6.10.0",
|
||||
"phone": "^3.1.58",
|
||||
"phone": "^3.1.62",
|
||||
"query-string": "7.1.3",
|
||||
"recursive-diff": "^1.0.9",
|
||||
"rimraf": "^6.0.1",
|
||||
@@ -66,8 +66,8 @@
|
||||
"xmlbuilder2": "^3.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.28.0",
|
||||
"eslint": "^9.28.0",
|
||||
"@eslint/js": "^9.29.0",
|
||||
"eslint": "^9.29.0",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"globals": "^15.15.0",
|
||||
"mock-require": "^3.0.3",
|
||||
@@ -284,15 +284,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-cloudwatch-logs": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.828.0.tgz",
|
||||
"integrity": "sha512-EeDYXwwWv+1Xk5lVehpf+9SH0N2xMU1ypJ9o7ifYL/G4dXI0us7k23Ds0UHescziQMFJKGJ9yAmCTY791QAsyw==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudwatch-logs/-/client-cloudwatch-logs-3.830.0.tgz",
|
||||
"integrity": "sha512-jg4kpECjBcNemGtVr5IK3ZMKRZzrmG4VbxhgECHgxqNPgb+HeAcSOMa3ZsgStRnpwDEazfgYTJyBktZIC/XuuA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-js": "5.2.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-node": "3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "3.830.0",
|
||||
"@aws-sdk/middleware-host-header": "3.821.0",
|
||||
"@aws-sdk/middleware-logger": "3.821.0",
|
||||
"@aws-sdk/middleware-recursion-detection": "3.821.0",
|
||||
@@ -352,15 +352,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-elasticache": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.828.0.tgz",
|
||||
"integrity": "sha512-N9mJwke+ax96Oc50fnrH2jiQrqMAJkTi7iK+eJiiN3Pu1eXvCYAvtz2Vf66/55Me7lfjV0xyrXSIhF9YgcI0uw==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-elasticache/-/client-elasticache-3.830.0.tgz",
|
||||
"integrity": "sha512-ln7OISYRUasEL54B0+UEeJLISd3vG2zkdRCCIEVUzh7SOGiHADgCaQAk6WFiGAy4F9uGUWiI5qDkvddTBZT3tw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-js": "5.2.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-node": "3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "3.830.0",
|
||||
"@aws-sdk/middleware-host-header": "3.821.0",
|
||||
"@aws-sdk/middleware-logger": "3.821.0",
|
||||
"@aws-sdk/middleware-recursion-detection": "3.821.0",
|
||||
@@ -403,17 +403,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-s3": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.828.0.tgz",
|
||||
"integrity": "sha512-TvFyrEfJkf9NN3cq5mXCgFv/sPaA8Rm5tEPgV5emuLedeGsORlWmVpdSKqfZ4lSoED1tMfNM6LY4uA9D8/RS5g==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.830.0.tgz",
|
||||
"integrity": "sha512-Cti+zj1lqvQIScXFQv8/t1xo3pvcvk/ObmGIbyLzfgcYpKMHaIWhzhi6aN+z4dYEv1EwrukC9tNoqScyShc5tw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha1-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-js": "5.2.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-node": "3.828.0",
|
||||
"@aws-sdk/middleware-bucket-endpoint": "3.821.0",
|
||||
"@aws-sdk/credential-provider-node": "3.830.0",
|
||||
"@aws-sdk/middleware-bucket-endpoint": "3.830.0",
|
||||
"@aws-sdk/middleware-expect-continue": "3.821.0",
|
||||
"@aws-sdk/middleware-flexible-checksums": "3.826.0",
|
||||
"@aws-sdk/middleware-host-header": "3.821.0",
|
||||
@@ -470,15 +470,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-secrets-manager": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.828.0.tgz",
|
||||
"integrity": "sha512-q6PO03nzWn4DCaZjwobB9GPjhaF2C0PUeCsmqymNbSjMPn1rVgpi1fbeCE6ZnS2jmv1lOF6FTAXfG0cGF+iT4Q==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-secrets-manager/-/client-secrets-manager-3.830.0.tgz",
|
||||
"integrity": "sha512-St2EK5i91vwv9LmDUmWevZYl+Y/TYRP/AHm7gxZm1LkEf1VEjkSizUMm91JOnH6y+0Clok9mqe6jZ/XossMXlw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-js": "5.2.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-node": "3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "3.830.0",
|
||||
"@aws-sdk/middleware-host-header": "3.821.0",
|
||||
"@aws-sdk/middleware-logger": "3.821.0",
|
||||
"@aws-sdk/middleware-recursion-detection": "3.821.0",
|
||||
@@ -535,15 +535,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-ses": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.828.0.tgz",
|
||||
"integrity": "sha512-j2w9HugNIJUA202o9YKGuN84GY+swNIjHch6vSrpARYISkzUr+zIYp7u/ygmUjeBtsnjM6RsmGU7miGs9Xt7bA==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-ses/-/client-ses-3.830.0.tgz",
|
||||
"integrity": "sha512-Y2XaJkqHJ7qM4cpCw3YS96fMZgT44mP3HLP+9dU0ct29L+iwf3zhigJGQzakieMdJfuTFZe7Vi6s1RbcWv5v5w==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
"@aws-crypto/sha256-js": "5.2.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-node": "3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "3.830.0",
|
||||
"@aws-sdk/middleware-host-header": "3.821.0",
|
||||
"@aws-sdk/middleware-logger": "3.821.0",
|
||||
"@aws-sdk/middleware-recursion-detection": "3.821.0",
|
||||
@@ -586,9 +586,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/client-sso": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.828.0.tgz",
|
||||
"integrity": "sha512-qxw8JcPTaFaBwTBUr4YmLajaMh3En65SuBWAKEtjctbITRRekzR7tvr/TkwoyVOh+XoAtkwOn+BQeQbX+/wgHw==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.830.0.tgz",
|
||||
"integrity": "sha512-5zCEpfI+zwX2SIa258L+TItNbBoAvQQ6w74qdFM6YJufQ1F9tvwjTX8T+eSTT9nsFIvfYnUaGalWwJVfmJUgVQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
@@ -698,18 +698,18 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/credential-provider-ini": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.828.0.tgz",
|
||||
"integrity": "sha512-T3DJMo2/j7gCPpFg2+xEHWgua05t8WP89ye7PaZxA2Fc6CgScHkZsJZTri1QQIU2h+eOZ75EZWkeFLIPgN0kRQ==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.830.0.tgz",
|
||||
"integrity": "sha512-zeQenzvh8JRY5nULd8izdjVGoCM1tgsVVsrLSwDkHxZTTW0hW/bmOmXfvdaE0wDdomXW7m2CkQDSmP7XdvNXZg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/credential-provider-env": "3.826.0",
|
||||
"@aws-sdk/credential-provider-http": "3.826.0",
|
||||
"@aws-sdk/credential-provider-process": "3.826.0",
|
||||
"@aws-sdk/credential-provider-sso": "3.828.0",
|
||||
"@aws-sdk/credential-provider-web-identity": "3.828.0",
|
||||
"@aws-sdk/nested-clients": "3.828.0",
|
||||
"@aws-sdk/credential-provider-sso": "3.830.0",
|
||||
"@aws-sdk/credential-provider-web-identity": "3.830.0",
|
||||
"@aws-sdk/nested-clients": "3.830.0",
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
"@smithy/credential-provider-imds": "^4.0.6",
|
||||
"@smithy/property-provider": "^4.0.4",
|
||||
@@ -722,17 +722,17 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/credential-provider-node": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.828.0.tgz",
|
||||
"integrity": "sha512-9z3iPwVYOQYNzVZj8qycZaS/BOSKRXWA+QVNQlfEnQ4sA4sOcKR4kmV2h+rJcuBsSFfmOF62ZDxyIBGvvM4t/w==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.830.0.tgz",
|
||||
"integrity": "sha512-X/2LrTgwtK1pkWrvofxQBI8VTi6QVLtSMpsKKPPnJQ0vgqC0e4czSIs3ZxiEsOkCBaQ2usXSiKyh0ccsQ6k2OA==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/credential-provider-env": "3.826.0",
|
||||
"@aws-sdk/credential-provider-http": "3.826.0",
|
||||
"@aws-sdk/credential-provider-ini": "3.828.0",
|
||||
"@aws-sdk/credential-provider-ini": "3.830.0",
|
||||
"@aws-sdk/credential-provider-process": "3.826.0",
|
||||
"@aws-sdk/credential-provider-sso": "3.828.0",
|
||||
"@aws-sdk/credential-provider-web-identity": "3.828.0",
|
||||
"@aws-sdk/credential-provider-sso": "3.830.0",
|
||||
"@aws-sdk/credential-provider-web-identity": "3.830.0",
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
"@smithy/credential-provider-imds": "^4.0.6",
|
||||
"@smithy/property-provider": "^4.0.4",
|
||||
@@ -762,14 +762,14 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/credential-provider-sso": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.828.0.tgz",
|
||||
"integrity": "sha512-9CEAXzUDSzOjOCb3XfM15TZhTaM+l07kumZyx2z8NC6T2U4qbCJqn4h8mFlRvYrs6cBj2SN40sD3r5Wp0Cq2Kw==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.830.0.tgz",
|
||||
"integrity": "sha512-+VdRpZmfekzpySqZikAKx6l5ndnLGluioIgUG4ZznrButgFD/iogzFtGmBDFB3ZLViX1l4pMXru0zFwJEZT21Q==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-sso": "3.828.0",
|
||||
"@aws-sdk/client-sso": "3.830.0",
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/token-providers": "3.828.0",
|
||||
"@aws-sdk/token-providers": "3.830.0",
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
"@smithy/property-provider": "^4.0.4",
|
||||
"@smithy/shared-ini-file-loader": "^4.0.4",
|
||||
@@ -781,13 +781,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/credential-provider-web-identity": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.828.0.tgz",
|
||||
"integrity": "sha512-MguDhGHlQBeK9CQ/P4NOY0whAJ4HJU4x+f1dphg3I1sGlccFqfB8Moor2vXNKu0Th2kvAwkn9pr7gGb/+NGR9g==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.830.0.tgz",
|
||||
"integrity": "sha512-hPYrKsZeeOdLROJ59T6Y8yZ0iwC/60L3qhZXjapBFjbqBtMaQiMTI645K6xVXBioA6vxXq7B4aLOhYqk6Fy/Ww==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/nested-clients": "3.828.0",
|
||||
"@aws-sdk/nested-clients": "3.830.0",
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
"@smithy/property-provider": "^4.0.4",
|
||||
"@smithy/types": "^4.3.1",
|
||||
@@ -798,9 +798,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/lib-storage": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.828.0.tgz",
|
||||
"integrity": "sha512-nBJmRzveYtdqL0u76tv62JGtkUfvyyZhAKNHFlzO8lCO7lxa0muRTG/ptUSS0ruFHq1K2MXHnDtLX90xiErIsQ==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.830.0.tgz",
|
||||
"integrity": "sha512-jHNM1HhOmwMB5sguttXozL1HiDPf0yovu2o2L3ijMvexSUlrtqE2b2JjevMfVq7xZ5RYhBnQ+T8Q4MUclI8GnQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@smithy/abort-controller": "^4.0.4",
|
||||
@@ -815,13 +815,13 @@
|
||||
"node": ">=18.0.0"
|
||||
},
|
||||
"peerDependencies": {
|
||||
"@aws-sdk/client-s3": "^3.828.0"
|
||||
"@aws-sdk/client-s3": "^3.830.0"
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/middleware-bucket-endpoint": {
|
||||
"version": "3.821.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.821.0.tgz",
|
||||
"integrity": "sha512-cebgeytKlWOgGczLo3BPvNY9XlzAzGZQANSysgJ2/8PSldmUpXRIF+GKPXDVhXeInWYHIfB8zZi3RqrPoXcNYQ==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.830.0.tgz",
|
||||
"integrity": "sha512-ElVeCReZSH5Ds+/pkL5ebneJjuo8f49e9JXV1cYizuH0OAOQfYaBU9+M+7+rn61pTttOFE8W//qKzrXBBJhfMg==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
@@ -991,9 +991,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/nested-clients": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.828.0.tgz",
|
||||
"integrity": "sha512-xmeOILiR9LvfC8MctgeRXXN8nQTwbOvO4wHvgE8tDRsjnBpyyO0j50R4+viHXdMUGtgGkHEXRv8fFNBq54RgnA==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.830.0.tgz",
|
||||
"integrity": "sha512-5N5YTlBr1vtxf7+t+UaIQ625KEAmm7fY9o1e3MgGOi/paBoI0+axr3ud24qLIy0NSzFlAHEaxUSWxcERNjIoZw==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-crypto/sha256-browser": "5.2.0",
|
||||
@@ -1057,9 +1057,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/s3-request-presigner": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.828.0.tgz",
|
||||
"integrity": "sha512-6817h11Xi6LqnmTnHIwZf4PQB0rIMaRFwkq8/mfR9oOn+hsahxBVDbpgu+q4xzP5q+W3m5Y/din0cJPVrnP6yQ==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.830.0.tgz",
|
||||
"integrity": "sha512-IEiSJfuf/hcf9WvCmvV35ci1yGcV3IYKS0e6l5xPRLYDNBrAWao9j8mrp0N4WCD3Nr+3xZRY5JglEFAH6CN3OQ==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/signature-v4-multi-region": "3.826.0",
|
||||
@@ -1093,13 +1093,13 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@aws-sdk/token-providers": {
|
||||
"version": "3.828.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.828.0.tgz",
|
||||
"integrity": "sha512-JdOjI/TxkfQpY/bWbdGMdCiePESXTbtl6MfnJxz35zZ3tfHvBnxAWCoYJirdmjzY/j/dFo5oEyS6mQuXAG9w2w==",
|
||||
"version": "3.830.0",
|
||||
"resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.830.0.tgz",
|
||||
"integrity": "sha512-aJ4guFwj92nV9D+EgJPaCFKK0I3y2uMchiDfh69Zqnmwfxxxfxat6F79VA7PS0BdbjRfhLbn+Ghjftnomu2c1g==",
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
"@aws-sdk/core": "3.826.0",
|
||||
"@aws-sdk/nested-clients": "3.828.0",
|
||||
"@aws-sdk/nested-clients": "3.830.0",
|
||||
"@aws-sdk/types": "3.821.0",
|
||||
"@smithy/property-provider": "^4.0.4",
|
||||
"@smithy/shared-ini-file-loader": "^4.0.4",
|
||||
@@ -1806,9 +1806,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/config-array": {
|
||||
"version": "0.20.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.0.tgz",
|
||||
"integrity": "sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==",
|
||||
"version": "0.20.1",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.20.1.tgz",
|
||||
"integrity": "sha512-OL0RJzC/CBzli0DrrR31qzj6d6i6Mm3HByuhflhl4LOBiWxN+3i6/t/ZQQNii4tjksXi8r2CRW1wMpWA2ULUEw==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"dependencies": {
|
||||
@@ -1881,9 +1881,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/@eslint/js": {
|
||||
"version": "9.28.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.28.0.tgz",
|
||||
"integrity": "sha512-fnqSjGWd/CoIp4EXIxWVK/sHA6DOHN4+8Ix2cX5ycOY7LG0UY8nHCU5pIp2eaE1Mc7Qd8kHspYNzYXT2ojPLzg==",
|
||||
"version": "9.29.0",
|
||||
"resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.29.0.tgz",
|
||||
"integrity": "sha512-3PIF4cBw/y+1u2EazflInpV+lYsSG0aByVIQzAgb1m1MhHFSbqTyNqtBKHgWf/9Ykud+DhILS9EGkmekVhbKoQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
@@ -4054,9 +4054,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/acorn": {
|
||||
"version": "8.14.1",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz",
|
||||
"integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==",
|
||||
"version": "8.15.0",
|
||||
"resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz",
|
||||
"integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==",
|
||||
"license": "MIT",
|
||||
"bin": {
|
||||
"acorn": "bin/acorn"
|
||||
@@ -4472,9 +4472,9 @@
|
||||
"license": "MIT"
|
||||
},
|
||||
"node_modules/axios": {
|
||||
"version": "1.9.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.9.0.tgz",
|
||||
"integrity": "sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg==",
|
||||
"version": "1.10.0",
|
||||
"resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz",
|
||||
"integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"follow-redirects": "^1.15.6",
|
||||
@@ -4659,9 +4659,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/bullmq": {
|
||||
"version": "5.53.2",
|
||||
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.53.2.tgz",
|
||||
"integrity": "sha512-xHgxrP/yNJHD7VCw1h+eRBh+2TCPBCM39uC9gCyksYc6ufcJP+HTZ/A2lzB2x7qMFWrvsX7tM40AT2BmdkYL/Q==",
|
||||
"version": "5.54.2",
|
||||
"resolved": "https://registry.npmjs.org/bullmq/-/bullmq-5.54.2.tgz",
|
||||
"integrity": "sha512-Qm75wtgKLP1FH92N+l01D1AErX+uLdMlfadvY2XMBmE4gx5qeTbat4b2Zil1U82Ipqn5Vz7kpNE0cgw/hznAGA==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"cron-parser": "^4.9.0",
|
||||
@@ -4817,9 +4817,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/chart.js": {
|
||||
"version": "4.4.9",
|
||||
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.4.9.tgz",
|
||||
"integrity": "sha512-EyZ9wWKgpAU0fLJ43YAEIF8sr5F2W3LqbS40ZJyHIner2lY14ufqv2VMp69MAiZ2rpwxEUxEhIH/0U3xyRynxg==",
|
||||
"version": "4.5.0",
|
||||
"resolved": "https://registry.npmjs.org/chart.js/-/chart.js-4.5.0.tgz",
|
||||
"integrity": "sha512-aYeC/jDgSEx8SHWZvANYMioYMZ2KX02W6f6uVfyteuCGcadDLcYVHdfdygsTQkQ4TKn5lghoojAsPj5pu0SnvQ==",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@kurkle/color": "^0.3.0"
|
||||
@@ -6273,19 +6273,19 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint": {
|
||||
"version": "9.28.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.28.0.tgz",
|
||||
"integrity": "sha512-ocgh41VhRlf9+fVpe7QKzwLj9c92fDiqOj8Y3Sd4/ZmVA4Btx4PlUYPq4pp9JDyupkf1upbEXecxL2mwNV7jPQ==",
|
||||
"version": "9.29.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint/-/eslint-9.29.0.tgz",
|
||||
"integrity": "sha512-GsGizj2Y1rCWDu6XoEekL3RLilp0voSePurjZIkxL3wlm5o5EC9VpgaP7lrCvjnkuLvzFBQWB3vWB3K5KQTveQ==",
|
||||
"dev": true,
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@eslint-community/eslint-utils": "^4.2.0",
|
||||
"@eslint-community/regexpp": "^4.12.1",
|
||||
"@eslint/config-array": "^0.20.0",
|
||||
"@eslint/config-array": "^0.20.1",
|
||||
"@eslint/config-helpers": "^0.2.1",
|
||||
"@eslint/core": "^0.14.0",
|
||||
"@eslint/eslintrc": "^3.3.1",
|
||||
"@eslint/js": "9.28.0",
|
||||
"@eslint/js": "9.29.0",
|
||||
"@eslint/plugin-kit": "^0.3.1",
|
||||
"@humanfs/node": "^0.16.6",
|
||||
"@humanwhocodes/module-importer": "^1.0.1",
|
||||
@@ -6297,9 +6297,9 @@
|
||||
"cross-spawn": "^7.0.6",
|
||||
"debug": "^4.3.2",
|
||||
"escape-string-regexp": "^4.0.0",
|
||||
"eslint-scope": "^8.3.0",
|
||||
"eslint-visitor-keys": "^4.2.0",
|
||||
"espree": "^10.3.0",
|
||||
"eslint-scope": "^8.4.0",
|
||||
"eslint-visitor-keys": "^4.2.1",
|
||||
"espree": "^10.4.0",
|
||||
"esquery": "^1.5.0",
|
||||
"esutils": "^2.0.2",
|
||||
"fast-deep-equal": "^3.1.3",
|
||||
@@ -6377,9 +6377,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-scope": {
|
||||
"version": "8.3.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz",
|
||||
"integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==",
|
||||
"version": "8.4.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.4.0.tgz",
|
||||
"integrity": "sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
@@ -6394,9 +6394,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/eslint-visitor-keys": {
|
||||
"version": "4.2.0",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz",
|
||||
"integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==",
|
||||
"version": "4.2.1",
|
||||
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.1.tgz",
|
||||
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==",
|
||||
"dev": true,
|
||||
"license": "Apache-2.0",
|
||||
"engines": {
|
||||
@@ -6407,15 +6407,15 @@
|
||||
}
|
||||
},
|
||||
"node_modules/espree": {
|
||||
"version": "10.3.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz",
|
||||
"integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==",
|
||||
"version": "10.4.0",
|
||||
"resolved": "https://registry.npmjs.org/espree/-/espree-10.4.0.tgz",
|
||||
"integrity": "sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==",
|
||||
"dev": true,
|
||||
"license": "BSD-2-Clause",
|
||||
"dependencies": {
|
||||
"acorn": "^8.14.0",
|
||||
"acorn": "^8.15.0",
|
||||
"acorn-jsx": "^5.3.2",
|
||||
"eslint-visitor-keys": "^4.2.0"
|
||||
"eslint-visitor-keys": "^4.2.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^18.18.0 || ^20.9.0 || >=21.1.0"
|
||||
@@ -9726,9 +9726,9 @@
|
||||
}
|
||||
},
|
||||
"node_modules/phone": {
|
||||
"version": "3.1.59",
|
||||
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.59.tgz",
|
||||
"integrity": "sha512-CUv22jw0Zgrb/h7v3sEd262zJXS/66h7zyCCRIynx+2FswAJuuFsXsJkIxMUT4UcosKxDx1bJwdZeGnDELLsCw==",
|
||||
"version": "3.1.62",
|
||||
"resolved": "https://registry.npmjs.org/phone/-/phone-3.1.62.tgz",
|
||||
"integrity": "sha512-mxUdq2nULKg6ukgVr4GSF9/sQiAa6e3AJy2HNE3UJA+lqdEF+Cko2RhKHhZRHtFaLKuBLPptitIwjv0uHG+vhw==",
|
||||
"license": "MIT",
|
||||
"engines": {
|
||||
"node": ">=12"
|
||||
|
||||
28
package.json
28
package.json
@@ -16,23 +16,23 @@
|
||||
"job-totals-fixtures:local": "docker exec node-app /usr/bin/node /app/download-job-totals-fixtures.js"
|
||||
},
|
||||
"dependencies": {
|
||||
"@aws-sdk/client-cloudwatch-logs": "^3.828.0",
|
||||
"@aws-sdk/client-elasticache": "^3.828.0",
|
||||
"@aws-sdk/client-s3": "^3.828.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.828.0",
|
||||
"@aws-sdk/client-ses": "^3.828.0",
|
||||
"@aws-sdk/credential-provider-node": "^3.828.0",
|
||||
"@aws-sdk/lib-storage": "^3.828.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.828.0",
|
||||
"@aws-sdk/client-cloudwatch-logs": "^3.830.0",
|
||||
"@aws-sdk/client-elasticache": "^3.830.0",
|
||||
"@aws-sdk/client-s3": "^3.830.0",
|
||||
"@aws-sdk/client-secrets-manager": "^3.830.0",
|
||||
"@aws-sdk/client-ses": "^3.830.0",
|
||||
"@aws-sdk/credential-provider-node": "^3.830.0",
|
||||
"@aws-sdk/lib-storage": "^3.830.0",
|
||||
"@aws-sdk/s3-request-presigner": "^3.830.0",
|
||||
"@opensearch-project/opensearch": "^2.13.0",
|
||||
"@socket.io/admin-ui": "^0.5.1",
|
||||
"@socket.io/redis-adapter": "^8.3.0",
|
||||
"archiver": "^7.0.1",
|
||||
"aws4": "^1.13.2",
|
||||
"axios": "^1.8.4",
|
||||
"axios": "^1.10.0",
|
||||
"better-queue": "^3.8.12",
|
||||
"bullmq": "^5.53.2",
|
||||
"chart.js": "^4.4.8",
|
||||
"bullmq": "^5.54.2",
|
||||
"chart.js": "^4.5.0",
|
||||
"cloudinary": "^2.6.1",
|
||||
"compression": "^1.8.0",
|
||||
"cookie-parser": "^1.4.7",
|
||||
@@ -56,7 +56,7 @@
|
||||
"multer": "^1.4.5-lts.1",
|
||||
"node-persist": "^4.0.4",
|
||||
"nodemailer": "^6.10.0",
|
||||
"phone": "^3.1.58",
|
||||
"phone": "^3.1.62",
|
||||
"query-string": "7.1.3",
|
||||
"recursive-diff": "^1.0.9",
|
||||
"rimraf": "^6.0.1",
|
||||
@@ -73,8 +73,8 @@
|
||||
"xmlbuilder2": "^3.1.1"
|
||||
},
|
||||
"devDependencies": {
|
||||
"@eslint/js": "^9.28.0",
|
||||
"eslint": "^9.28.0",
|
||||
"@eslint/js": "^9.29.0",
|
||||
"eslint": "^9.29.0",
|
||||
"eslint-plugin-react": "^7.37.5",
|
||||
"globals": "^15.15.0",
|
||||
"mock-require": "^3.0.3",
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
const crypto = require("crypto");
|
||||
const admin = require("firebase-admin");
|
||||
const client = require("../../graphql-client/graphql-client").client;
|
||||
const DefaultNewShop = require("./defaultNewShop.json");
|
||||
@@ -243,11 +242,17 @@ const partsManagementProvisioning = async (req, res) => {
|
||||
|
||||
// Cleanup on failure
|
||||
if (err.userRecord) {
|
||||
await deleteFirebaseUser(err.userRecord.uid).catch(() => {});
|
||||
await deleteFirebaseUser(err.userRecord.uid).catch(() => {
|
||||
// Ignore errors during user deletion cleanup
|
||||
});
|
||||
}
|
||||
if (err.newShopId) {
|
||||
await deleteVendorsByShop(err.newShopId).catch(() => {});
|
||||
await deleteBodyshop(err.newShopId).catch(() => {});
|
||||
await deleteVendorsByShop(err.newShopId).catch(() => {
|
||||
// Ignore errors during vendor deletion cleanup
|
||||
});
|
||||
await deleteBodyshop(err.newShopId).catch(() => {
|
||||
// Ignore errors during shop deletion cleanup
|
||||
});
|
||||
}
|
||||
|
||||
return res.status(err.status || 500).json({ error: err.message || "Internal server error" });
|
||||
|
||||
@@ -0,0 +1,356 @@
|
||||
const xml2js = require("xml2js");
|
||||
const client = require("../../graphql-client/graphql-client").client;
|
||||
|
||||
// GraphQL statements
|
||||
const INSERT_JOB_WITH_LINES = `
|
||||
mutation InsertJob($job: jobs_insert_input!) {
|
||||
insert_jobs_one(object: $job) {
|
||||
id
|
||||
joblines { id unq_seq }
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
const INSERT_PARTS_ORDERS = `
|
||||
mutation InsertPartsOrders($po: [parts_orders_insert_input!]!) {
|
||||
insert_parts_orders(objects: $po) {
|
||||
returning { id order_number }
|
||||
}
|
||||
}
|
||||
`;
|
||||
|
||||
/**
|
||||
* Handles incoming VehicleDamageEstimateAddRq XML,
|
||||
* parses every known field, inserts a Job + nested JobLines,
|
||||
* then any PartsOrders (grouped per SupplierRefNum).
|
||||
*/
|
||||
const partsManagementVehicleDamageEstimateAddRq = async (req, res) => {
|
||||
const { logger } = req;
|
||||
const xml = req.body;
|
||||
|
||||
let payload;
|
||||
try {
|
||||
payload = await xml2js.parseStringPromise(xml, {
|
||||
explicitArray: false,
|
||||
tagNameProcessors: [xml2js.processors.stripPrefix]
|
||||
});
|
||||
logger.log("parts-xml-parse", "debug", null, null, { success: true });
|
||||
} catch (err) {
|
||||
logger.log("parts-xml-parse-error", "error", null, null, { error: err });
|
||||
return res.status(400).send("Invalid XML");
|
||||
}
|
||||
|
||||
const rq = payload.VehicleDamageEstimateAddRq;
|
||||
if (!rq) {
|
||||
logger.log("parts-missing-root", "error");
|
||||
return res.status(400).send("Missing <VehicleDamageEstimateAddRq>");
|
||||
}
|
||||
|
||||
try {
|
||||
//
|
||||
// ── SHOP ID ───────────────────────────────────────────────────────────────────
|
||||
//
|
||||
// pulled directly from <ShopID> in your XML
|
||||
//
|
||||
const shopId = rq.ShopID || rq.shopId;
|
||||
if (!shopId) {
|
||||
throw { status: 400, message: "Missing <ShopID> in XML" };
|
||||
}
|
||||
|
||||
//
|
||||
// ── DOCUMENT INFO ─────────────────────────────────────────────────────────────
|
||||
//
|
||||
const { RqUID, RefClaimNum } = rq;
|
||||
const doc = rq.DocumentInfo || {};
|
||||
const comment = doc.Comment || null;
|
||||
const transmitDate = doc.TransmitDateTime || null;
|
||||
|
||||
// capture all <DocumentVer> entries
|
||||
const docVers = doc.DocumentVer ? (Array.isArray(doc.DocumentVer) ? doc.DocumentVer : [doc.DocumentVer]) : [];
|
||||
const documentVersions = docVers.map((dv) => ({
|
||||
code: dv.DocumentVerCode,
|
||||
num: dv.DocumentVerNum
|
||||
}));
|
||||
|
||||
// pull out any OtherReferenceInfo (RO Number + Job UUID)
|
||||
const otherRefs = doc.ReferenceInfo?.OtherReferenceInfo
|
||||
? Array.isArray(doc.ReferenceInfo.OtherReferenceInfo)
|
||||
? doc.ReferenceInfo.OtherReferenceInfo
|
||||
: [doc.ReferenceInfo.OtherReferenceInfo]
|
||||
: [];
|
||||
const originalRoNumber = otherRefs.find((r) => r.OtherReferenceName === "RO Number")?.OtherRefNum;
|
||||
const originalJobUuid = otherRefs.find((r) => r.OtherReferenceName === "Job UUID")?.OtherRefNum;
|
||||
|
||||
//
|
||||
// ── EVENT INFO ────────────────────────────────────────────────────────────────
|
||||
//
|
||||
const ev = rq.EventInfo || {};
|
||||
const assignEv = ev.AssignmentEvent || {};
|
||||
const assignmentEvent = {
|
||||
number: assignEv.AssignmentNumber,
|
||||
type: assignEv.AssignmentType,
|
||||
date: assignEv.AssignmentDate,
|
||||
createdAt: assignEv.CreateDateTime
|
||||
};
|
||||
const repairEv = ev.RepairEvent || {};
|
||||
const scheduled_completion = repairEv.TargetCompletionDateTime || null;
|
||||
const scheduled_in = repairEv.RequestedPickUpDateTime || null;
|
||||
|
||||
//
|
||||
// ── CLAIM INFO ────────────────────────────────────────────────────────────────
|
||||
//
|
||||
const ci = rq.ClaimInfo || {};
|
||||
const clm_no = ci.ClaimNum;
|
||||
const ClaimStatus = ci.ClaimStatus || null;
|
||||
const policy_no = ci.PolicyInfo?.PolicyNum || null;
|
||||
const ded_amt = parseFloat(ci.PolicyInfo?.CoverageInfo?.Coverage?.DeductibleInfo?.DeductibleAmt || 0);
|
||||
// if your XML ever has a `<Cieca_ttl>` you'd parse it here
|
||||
const clm_total = parseFloat(ci.Cieca_ttl || 0);
|
||||
|
||||
//
|
||||
// ── OWNER ─────────────────────────────────────────────────────────────────────
|
||||
//
|
||||
const ownerParty = rq.AdminInfo?.Owner?.Party || {};
|
||||
const ownerName = ownerParty.PersonInfo?.PersonName || {};
|
||||
const ownerOrg = ownerParty.OrgInfo || {};
|
||||
const ownerAddr = ownerParty.PersonInfo?.Communications?.Address || {};
|
||||
const ownerComms = ownerParty.ContactInfo?.Communications
|
||||
? Array.isArray(ownerParty.ContactInfo.Communications)
|
||||
? ownerParty.ContactInfo.Communications
|
||||
: [ownerParty.ContactInfo.Communications]
|
||||
: [];
|
||||
let ownerPhone = null,
|
||||
ownerEmail = null;
|
||||
ownerComms.forEach((c) => {
|
||||
if (c.CommQualifier === "CP") ownerPhone = c.CommPhone;
|
||||
if (c.CommQualifier === "EM") ownerEmail = c.CommEmail;
|
||||
});
|
||||
const ownerPrefContact = ownerParty.PreferredContactMethod || null;
|
||||
|
||||
//
|
||||
// ── VEHICLE INFO ──────────────────────────────────────────────────────────────
|
||||
//
|
||||
const vin = rq.VehicleInfo?.VINInfo?.VINNum || null;
|
||||
const plate_no = rq.VehicleInfo?.License?.LicensePlateNum || null;
|
||||
const plate_st = rq.VehicleInfo?.License?.LicensePlateStateProvince || null;
|
||||
const desc = rq.VehicleInfo?.VehicleDesc || {};
|
||||
const v_model_yr = desc.ModelYear || null;
|
||||
const v_make_desc = desc.MakeDesc || null;
|
||||
const v_model_desc = desc.ModelName || null;
|
||||
const body_style = desc.BodyStyle || null;
|
||||
const engine_desc = desc.EngineDesc || null;
|
||||
const production_date = desc.ProductionDate || null;
|
||||
const sub_model_desc = desc.SubModelDesc || null;
|
||||
const fuel_type = desc.FuelType || null;
|
||||
const v_color = rq.VehicleInfo?.Paint?.Exterior?.ColorName || null;
|
||||
const drivable = rq.VehicleInfo?.Condition?.DrivableInd === "Y";
|
||||
|
||||
//
|
||||
// ── PROFILE & RATES ───────────────────────────────────────────────────────────
|
||||
//
|
||||
const rateInfos = rq.ProfileInfo?.RateInfo
|
||||
? Array.isArray(rq.ProfileInfo.RateInfo)
|
||||
? rq.ProfileInfo.RateInfo
|
||||
: [rq.ProfileInfo.RateInfo]
|
||||
: [];
|
||||
const rates = {}; // main { rate_lab, rate_laf, … }
|
||||
const rateTier = {}; // e.g. { MA2S: [ {tier, pct}, … ] }
|
||||
const materialCalc = {}; // e.g. { LAR: { CalcMethodCode, CalcMaxHours }, … }
|
||||
|
||||
rateInfos.forEach((r) => {
|
||||
if (!r || !r.RateType) return;
|
||||
const t = r.RateType;
|
||||
// main per‐unit rate
|
||||
if (r.Rate) rates[`rate_${t.toLowerCase()}`] = parseFloat(r.Rate) || 0;
|
||||
// any tier settings
|
||||
if (r.RateTierInfo) {
|
||||
const tiers = Array.isArray(r.RateTierInfo) ? r.RateTierInfo : [r.RateTierInfo];
|
||||
rateTier[t] = tiers.map((ti) => ({
|
||||
tier: ti.TierNum,
|
||||
pct: parseFloat(ti.Percentage) || 0
|
||||
}));
|
||||
}
|
||||
// any material‐calc limits
|
||||
if (r.MaterialCalcSettings) {
|
||||
materialCalc[t] = r.MaterialCalcSettings;
|
||||
}
|
||||
});
|
||||
|
||||
//
|
||||
// ── DAMAGE LINES → joblinesData ─────────────────────────────────────────────
|
||||
//
|
||||
const damageLines = Array.isArray(rq.DamageLineInfo) ? rq.DamageLineInfo : [rq.DamageLineInfo];
|
||||
const joblinesData = damageLines.map((line) => ({
|
||||
line_no: parseInt(line.LineNum, 10),
|
||||
unq_seq: parseInt(line.UniqueSequenceNum, 10),
|
||||
manual_line: line.ManualLineInd === "1",
|
||||
automated_entry: line.AutomatedEntry === "1",
|
||||
desc_judgment_ind: line.DescJudgmentInd === "1",
|
||||
status: line.LineStatusCode || null,
|
||||
line_desc: line.LineDesc || null,
|
||||
|
||||
// parts
|
||||
part_type: line.PartInfo.PartType || null,
|
||||
part_qty: parseInt(line.PartInfo.Quantity || 0, 10),
|
||||
db_price: parseFloat(line.PartInfo.PartPrice || 0),
|
||||
act_price: parseFloat(line.PartInfo.PartPrice || 0),
|
||||
oem_partno: line.PartInfo.OEMPartNum || null,
|
||||
|
||||
// non-OEM block
|
||||
non_oem_part_num: line.PartInfo?.NonOEM?.NonOEMPartNum || null,
|
||||
non_oem_part_price: parseFloat(line.PartInfo?.NonOEM?.NonOEMPartPrice || 0),
|
||||
supplier_ref_num: line.PartInfo?.NonOEM?.SupplierRefNum || null,
|
||||
part_selected_ind: line.PartInfo?.NonOEM?.PartSelectedInd === "1",
|
||||
|
||||
after_market_usage: line.PartInfo.AfterMarketUsage || null,
|
||||
certification_type: line.PartInfo.CertificationType || null,
|
||||
tax_part: line.PartInfo.TaxableInd === "1",
|
||||
glass_flag: line.PartInfo.GlassPartInd === "1",
|
||||
price_j: line.PriceJudgmentInd === "1",
|
||||
price_inc: line.PriceInclInd === "1",
|
||||
order_by_application_ind: String(line.PartInfo.OrderByApplicationInd).toLowerCase() === "true",
|
||||
|
||||
// labor
|
||||
mod_lbr_ty: line.LaborInfo?.LaborType || null,
|
||||
mod_lb_hrs: parseFloat(line.LaborInfo?.LaborHours || 0),
|
||||
lbr_op: line.LaborInfo?.LaborOperation || null,
|
||||
lbr_amt: parseFloat(line.LaborInfo?.LaborAmt || 0),
|
||||
|
||||
// linkage & memo
|
||||
parent_line_no: line.ParentLineNum ? parseInt(line.ParentLineNum, 10) : null,
|
||||
notes: line.LineMemo || null
|
||||
}));
|
||||
|
||||
//
|
||||
// ── BUILD & INSERT THE JOB ───────────────────────────────────────────────────
|
||||
//
|
||||
const jobInput = {
|
||||
shopid: shopId,
|
||||
|
||||
// identifiers
|
||||
ro_number: RefClaimNum,
|
||||
original_ro_number: originalRoNumber,
|
||||
original_job_uuid: originalJobUuid,
|
||||
|
||||
// claim & policy
|
||||
clm_no,
|
||||
status: ClaimStatus,
|
||||
clm_total,
|
||||
policy_no,
|
||||
ded_amt,
|
||||
|
||||
// timestamps & comments
|
||||
comment,
|
||||
date_exported: transmitDate,
|
||||
|
||||
// owner
|
||||
ownr_fn: ownerName.FirstName || null,
|
||||
ownr_ln: ownerName.LastName || null,
|
||||
ownr_co_nm: ownerOrg.CompanyName || null,
|
||||
ownr_addr1: ownerAddr.Address1 || null,
|
||||
ownr_city: ownerAddr.City || null,
|
||||
ownr_st: ownerAddr.StateProvince || null,
|
||||
ownr_zip: ownerAddr.PostalCode || null,
|
||||
ownr_country: ownerAddr.Country || null,
|
||||
ownr_ph1: ownerPhone,
|
||||
ownr_ea: ownerEmail,
|
||||
ownr_pref_contact: ownerPrefContact,
|
||||
|
||||
// vehicle
|
||||
v_vin: vin,
|
||||
plate_no,
|
||||
plate_st,
|
||||
v_model_yr,
|
||||
v_make_desc,
|
||||
v_model_desc,
|
||||
v_color,
|
||||
body_style,
|
||||
engine_desc,
|
||||
production_date,
|
||||
sub_model_desc,
|
||||
fuel_type,
|
||||
drivable,
|
||||
|
||||
// labor & material rates
|
||||
...rates,
|
||||
|
||||
// everything extra in one JSON column
|
||||
production_vars: {
|
||||
rqUid: RqUID,
|
||||
documentVersions,
|
||||
assignmentEvent,
|
||||
scheduled_completion,
|
||||
scheduled_in,
|
||||
rateTier,
|
||||
materialCalc
|
||||
},
|
||||
|
||||
// nested joblines
|
||||
joblines: { data: joblinesData }
|
||||
};
|
||||
|
||||
logger.log("parts-insert-job", "debug", null, null, { jobInput });
|
||||
const jobResp = await client.request(INSERT_JOB_WITH_LINES, {
|
||||
job: jobInput
|
||||
});
|
||||
const newJob = jobResp.insert_jobs_one;
|
||||
const jobId = newJob.id;
|
||||
logger.log("parts-job-created", "info", jobId, null);
|
||||
|
||||
//
|
||||
// ── BUILD & INSERT PARTS ORDERS ────────────────────────────────────────────
|
||||
//
|
||||
// group lines by their SupplierRefNum
|
||||
const insertedMap = newJob.joblines.reduce((m, ln) => {
|
||||
m[ln.unq_seq] = ln.id;
|
||||
return m;
|
||||
}, {});
|
||||
const poGroups = {};
|
||||
damageLines.forEach((line) => {
|
||||
const pt = line.PartInfo.PartType;
|
||||
const qty = parseInt(line.PartInfo.Quantity || 0, 10);
|
||||
if (["PAN", "PAC", "PAM", "PAA"].includes(pt) && qty > 0) {
|
||||
const vendorid = line.PartInfo?.NonOEM?.SupplierRefNum || process.env.DEFAULT_VENDOR_ID;
|
||||
if (!poGroups[vendorid]) poGroups[vendorid] = [];
|
||||
poGroups[vendorid].push({
|
||||
line,
|
||||
unq_seq: parseInt(line.UniqueSequenceNum, 10)
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
const partsOrders = Object.entries(poGroups).map(([vendorid, entries]) => ({
|
||||
jobid: jobId,
|
||||
vendorid,
|
||||
order_number: `${clm_no}-${entries[0].line.LineNum}`,
|
||||
parts_order_lines: {
|
||||
data: entries.map(({ line, unq_seq }) => ({
|
||||
job_line_id: insertedMap[unq_seq],
|
||||
part_type: line.PartInfo.PartType,
|
||||
quantity: parseInt(line.PartInfo.Quantity || 0, 10),
|
||||
act_price: parseFloat(line.PartInfo.PartPrice || 0),
|
||||
db_price: parseFloat(line.PartInfo.PartPrice || 0),
|
||||
line_desc: line.LineDesc,
|
||||
non_oem_part_num: line.PartInfo?.NonOEM?.NonOEMPartNum || null,
|
||||
non_oem_part_price: parseFloat(line.PartInfo?.NonOEM?.NonOEMPartPrice || 0),
|
||||
part_selected_ind: line.PartInfo?.NonOEM?.PartSelectedInd === "1"
|
||||
}))
|
||||
}
|
||||
}));
|
||||
|
||||
if (partsOrders.length) {
|
||||
logger.log("parts-insert-orders", "debug", null, null, {
|
||||
partsOrders
|
||||
});
|
||||
await client.request(INSERT_PARTS_ORDERS, { po: partsOrders });
|
||||
logger.log("parts-orders-created", "info", jobId, null);
|
||||
}
|
||||
|
||||
return res.status(200).json({ success: true, jobId });
|
||||
} catch (err) {
|
||||
logger.log("parts-route-error", "error", null, null, { error: err });
|
||||
return res.status(err.status || 500).json({ error: err.message || "Internal error" });
|
||||
}
|
||||
};
|
||||
|
||||
module.exports = partsManagementVehicleDamageEstimateAddRq;
|
||||
@@ -18,8 +18,14 @@ if (typeof VSSTA_INTEGRATION_SECRET === "string" && VSSTA_INTEGRATION_SECRET.len
|
||||
if (typeof PARTS_MANAGEMENT_INTEGRATION_SECRET === "string" && PARTS_MANAGEMENT_INTEGRATION_SECRET.length > 0) {
|
||||
const partsManagementProvisioning = require("../integrations/partsManagement/partsManagementProvisioning");
|
||||
const partsManagementIntegrationMiddleware = require("../middleware/partsManagementIntegrationMiddleware");
|
||||
const partsManagementVehicleDamageEstimateAddRq = require("../integrations/partsManagement/partsManagementVehicleDamageEstimateAddRq");
|
||||
|
||||
router.post("/parts-management/provision", partsManagementIntegrationMiddleware, partsManagementProvisioning);
|
||||
router.post(
|
||||
"/parts-management/VehicleDamageEstimateAddRq",
|
||||
partsManagementIntegrationMiddleware,
|
||||
partsManagementVehicleDamageEstimateAddRq
|
||||
);
|
||||
} else {
|
||||
console.warn("PARTS_MANAGEMENT_INTEGRATION_SECRET is not set — skipping /parts-management/provision route");
|
||||
}
|
||||
|
||||
10
static-analysis.datadog.yml
Normal file
10
static-analysis.datadog.yml
Normal file
@@ -0,0 +1,10 @@
|
||||
schema-version: v1
|
||||
rulesets:
|
||||
- javascript-best-practices
|
||||
- javascript-browser-security
|
||||
- javascript-code-style
|
||||
- javascript-common-security
|
||||
- javascript-express
|
||||
- javascript-inclusive
|
||||
- javascript-node-security
|
||||
- jsx-react
|
||||
Reference in New Issue
Block a user