From 1650a9b6f95d414045f8eb9d3bd09fb491ad8ba8 Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Thu, 8 Jan 2026 15:21:39 -0800 Subject: [PATCH] Add lambda scrub functionality and remove vehicle lookup. --- .prettierignore | 10 + electron-builder.yml | 1 + eslint.config.mjs | 13 +- serverless/.prettierrc.json | 7 + serverless/package-lock.json | 2004 +++++++++++++++++ serverless/package.json | 8 +- serverless/serverless.yml | 45 +- serverless/src/handlers/emsupload.js | 95 +- serverless/src/handlers/scrub.js | 65 +- serverless/src/handlers/vehicleType.js | 55 + .../src/lib/vehicleTypes/cargovans.json | 126 ++ .../src/lib/vehicleTypes/passengervans.json | 33 + serverless/src/lib/vehicleTypes/suvs.json | 485 ++++ serverless/src/lib/vehicleTypes/trucks.json | 567 +++++ .../src/lib/vehicleTypes/vehicleType.js | 18 + src/main/estimate-scrubber/es-transformer.ts | 27 +- .../estimate-scrubber/estimate-scrubber.ts | 42 +- 17 files changed, 3534 insertions(+), 67 deletions(-) create mode 100644 .prettierignore create mode 100644 serverless/.prettierrc.json create mode 100644 serverless/package-lock.json create mode 100644 serverless/src/handlers/vehicleType.js create mode 100644 serverless/src/lib/vehicleTypes/cargovans.json create mode 100644 serverless/src/lib/vehicleTypes/passengervans.json create mode 100644 serverless/src/lib/vehicleTypes/suvs.json create mode 100644 serverless/src/lib/vehicleTypes/trucks.json create mode 100644 serverless/src/lib/vehicleTypes/vehicleType.js diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..fb54f00 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,10 @@ +# Dependencies +node_modules + +# Build outputs +dist +out +.serverless + +# Serverless folder (has its own config) +serverless/ diff --git a/electron-builder.yml b/electron-builder.yml index 9144333..ce504e9 100644 --- a/electron-builder.yml +++ b/electron-builder.yml @@ -9,6 +9,7 @@ files: - "!**/.vscode/*" - "!**/.idea/*" - "!src/*" + - "!serverless/**" - "!electron.vite.config.{js,ts,mjs,cjs}" - "!{.eslintignore,.eslintrc.cjs,.prettierignore,.prettierrc.yaml,dev-app-update.yml,CHANGELOG.md,README.md}" - "!{.env,.env.*,.npmrc,pnpm-lock.yaml}" diff --git a/eslint.config.mjs b/eslint.config.mjs index c117921..5ca7adc 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -5,8 +5,11 @@ import eslintPluginReactHooks from "eslint-plugin-react-hooks"; import eslintPluginReactRefresh from "eslint-plugin-react-refresh"; export default tseslint.config( - { ignores: ["**/node_modules", "**/dist", "**/out"] }, - tseslint.configs.recommended, + { ignores: ["**/node_modules", "**/dist", "**/out", "**/.serverless"] }, + { + files: ["**/*.{ts,tsx}"], + extends: [tseslint.configs.recommended], + }, eslintPluginReact.configs.flat.recommended, eslintPluginReact.configs.flat["jsx-runtime"], { @@ -28,6 +31,12 @@ export default tseslint.config( }, }, + { + files: ["serverless/**/*.js"], + rules: { + "no-unused-vars": ["error", { "argsIgnorePattern": "^_" }], + }, + }, { files: ["**/*.{js,mjs,ts,tsx,jsx,tsx}"], rules: { diff --git a/serverless/.prettierrc.json b/serverless/.prettierrc.json new file mode 100644 index 0000000..abef9bf --- /dev/null +++ b/serverless/.prettierrc.json @@ -0,0 +1,7 @@ +{ + "singleQuote": true, + "trailingComma": "es5", + "tabWidth": 4, + "semi": true, + "printWidth": 100 +} diff --git a/serverless/package-lock.json b/serverless/package-lock.json new file mode 100644 index 0000000..6ebe10d --- /dev/null +++ b/serverless/package-lock.json @@ -0,0 +1,2004 @@ +{ + "name": "serverless", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "serverless", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "@aws-sdk/client-s3": "^3.965.0", + "@aws-sdk/s3-request-presigner": "^3.965.0", + "axios": "^1.13.2", + "form-data": "^4.0.1" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.965.0.tgz", + "integrity": "sha512-BTeaaU1iK0BfatTCrtYjNkIHCoZH256qOI18l9bK4z6mVOgpHkYN4RvOu+NnKgyX58n+HWfOuhtKUD4OE33Vdw==", + "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.965.0", + "@aws-sdk/credential-provider-node": "3.965.0", + "@aws-sdk/middleware-bucket-endpoint": "3.965.0", + "@aws-sdk/middleware-expect-continue": "3.965.0", + "@aws-sdk/middleware-flexible-checksums": "3.965.0", + "@aws-sdk/middleware-host-header": "3.965.0", + "@aws-sdk/middleware-location-constraint": "3.965.0", + "@aws-sdk/middleware-logger": "3.965.0", + "@aws-sdk/middleware-recursion-detection": "3.965.0", + "@aws-sdk/middleware-sdk-s3": "3.965.0", + "@aws-sdk/middleware-ssec": "3.965.0", + "@aws-sdk/middleware-user-agent": "3.965.0", + "@aws-sdk/region-config-resolver": "3.965.0", + "@aws-sdk/signature-v4-multi-region": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-endpoints": "3.965.0", + "@aws-sdk/util-user-agent-browser": "3.965.0", + "@aws-sdk/util-user-agent-node": "3.965.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/eventstream-serde-browser": "^4.2.7", + "@smithy/eventstream-serde-config-resolver": "^4.3.7", + "@smithy/eventstream-serde-node": "^4.2.7", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-blob-browser": "^4.2.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/hash-stream-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/md5-js": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/util-waiter": "^4.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.965.0.tgz", + "integrity": "sha512-iv2tr+n4aZ+nPUFFvG00hISPuEd4DU+1/Q8rPAYKXsM+vEPJ2nAnP5duUOa2fbOLIUCRxX3dcQaQaghVHDHzQw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.965.0", + "@aws-sdk/middleware-host-header": "3.965.0", + "@aws-sdk/middleware-logger": "3.965.0", + "@aws-sdk/middleware-recursion-detection": "3.965.0", + "@aws-sdk/middleware-user-agent": "3.965.0", + "@aws-sdk/region-config-resolver": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-endpoints": "3.965.0", + "@aws-sdk/util-user-agent-browser": "3.965.0", + "@aws-sdk/util-user-agent-node": "3.965.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.965.0.tgz", + "integrity": "sha512-aq9BhQxdHit8UUJ9C0im9TtuKeK0pT6NXmNJxMTCFeStI7GG7ImIsSislg3BZTIifVg1P6VLdzMyz9de85iutQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@aws-sdk/xml-builder": "3.965.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/crc64-nvme": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/crc64-nvme/-/crc64-nvme-3.965.0.tgz", + "integrity": "sha512-9FbIyJ/Zz1AdEIrb0+Pn7wRi+F/0Y566ooepg0hDyHUzRV3ZXKjOlu3wJH3YwTz2UkdwQmldfUos2yDJps7RyA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.965.0.tgz", + "integrity": "sha512-mdGnaIjMxTIjsb70dEj3VsWPWpoq1V5MWzBSfJq2H8zgMBXjn6d5/qHP8HMf53l9PrsgqzMpXGv3Av549A2x1g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.965.0.tgz", + "integrity": "sha512-YuGQel9EgA/z25oeLM+GYYQS750+8AESvr7ZEmVnRPL0sg+K3DmGqdv+9gFjFd0UkLjTlC/jtbP2cuY6UcPiHQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.965.0.tgz", + "integrity": "sha512-xRo72Prer5s0xYVSCxCymVIRSqrVlevK5cmU0GWq9yJtaBNpnx02jwdJg80t/Ni7pgbkQyFWRMcq38c1tc6M/w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/credential-provider-env": "3.965.0", + "@aws-sdk/credential-provider-http": "3.965.0", + "@aws-sdk/credential-provider-login": "3.965.0", + "@aws-sdk/credential-provider-process": "3.965.0", + "@aws-sdk/credential-provider-sso": "3.965.0", + "@aws-sdk/credential-provider-web-identity": "3.965.0", + "@aws-sdk/nested-clients": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.965.0.tgz", + "integrity": "sha512-43/H8Qku8LHyugbhLo8kjD+eauhybCeVkmrnvWl8bXNHJP7xi1jCdtBQJKKJqiIHZws4MOEwkji8kFdAVRCe6g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/nested-clients": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.965.0.tgz", + "integrity": "sha512-cRxmMHF+Zh2lkkkEVduKl+8OQdtg/DhYA69+/7SPSQURlgyjFQGlRQ58B7q8abuNlrGT3sV+UzeOylZpJbV61Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.965.0", + "@aws-sdk/credential-provider-http": "3.965.0", + "@aws-sdk/credential-provider-ini": "3.965.0", + "@aws-sdk/credential-provider-process": "3.965.0", + "@aws-sdk/credential-provider-sso": "3.965.0", + "@aws-sdk/credential-provider-web-identity": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.965.0.tgz", + "integrity": "sha512-gmkPmdiR0yxnTzLPDb7rwrDhGuCUjtgnj8qWP+m0gSz/W43rR4jRPVEf6DUX2iC+ImQhxo3NFhuB3V42Kzo3TQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.965.0.tgz", + "integrity": "sha512-N01AYvtCqG3Wo/s/LvYt19ity18/FqggiXT+elAs3X9Om/Wfx+hw9G+i7jaDmy+/xewmv8AdQ2SK5Q30dXw/Fw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.965.0", + "@aws-sdk/core": "3.965.0", + "@aws-sdk/token-providers": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.965.0.tgz", + "integrity": "sha512-T4gMZ2JzXnfxe1oTD+EDGLSxFfk1+WkLZdiHXEMZp8bFI1swP/3YyDFXI+Ib9Uq1JhnAmrCXtOnkicKEhDkdhQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/nested-clients": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.965.0.tgz", + "integrity": "sha512-gbdv3Dl8l8xmg4oH60fXvfDyTxfx28w5/Hxdymx3vurM07tAyd4qld8zEXejnSpraTo45QcHRtk5auELIMfeag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-arn-parser": "3.965.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.965.0.tgz", + "integrity": "sha512-UBxVytsmhEmFwkBnt+aV0eAJ7uc+ouNokCqMBrQ7Oc5A77qhlcHfOgXIKz2SxqsiYTsDq+a0lWFM/XpyRWraqA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.965.0.tgz", + "integrity": "sha512-5rzEW08trcpHMe6jkQyYc4PL1KG/H7BbnySFSzhih+r/gktQEiE36sb1BNf7av9I0Vk2Ccmt7wocB5PIT7GDkQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.965.0", + "@aws-sdk/crc64-nvme": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.965.0.tgz", + "integrity": "sha512-SfpSYqoPOAmdb3DBsnNsZ0vix+1VAtkUkzXM79JL3R5IfacpyKE2zytOgVAQx/FjhhlpSTwuXd+LRhUEVb3MaA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.965.0.tgz", + "integrity": "sha512-07T1rwAarQs33mVg5U28AsSdLB5JUXu9yBTBmspFGajKVsEahIyntf53j9mAXF1N2KR0bNdP0J4A0kst4t43UQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.965.0.tgz", + "integrity": "sha512-gjUvJRZT1bUABKewnvkj51LAynFrfz2h5DYAg5/2F4Utx6UOGByTSr9Rq8JCLbURvvzAbCtcMkkIJRxw+8Zuzw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.965.0.tgz", + "integrity": "sha512-6dvD+18Ni14KCRu+tfEoNxq1sIGVp9tvoZDZ7aMvpnA7mDXuRLrOjRQ/TAZqXwr9ENKVGyxcPl0cRK8jk1YWjA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.965.0.tgz", + "integrity": "sha512-dXEgnojaaVRl+OlOx35mg3rYEbfffIN4X6tLmIfDnaKz0hMaDMvsE9jJXb/vBvokbdO1sVB27/2FEM4ttLSLnw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-arn-parser": "3.965.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.965.0.tgz", + "integrity": "sha512-dke++CTw26y+a2D1DdVuZ4+2TkgItdx6TeuE0zOl4lsqXGvTBUG4eaIZalt7ZOAW5ys2pbDOk1bPuh4opoD3pQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.965.0.tgz", + "integrity": "sha512-RBEYVGgu/WeAt+H/qLrGc+t8LqAUkbyvh3wBfTiuAD+uBcWsKnvnB1iSBX75FearC0fmoxzXRUc0PMxMdqpjJQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-endpoints": "3.965.0", + "@smithy/core": "^3.20.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.965.0.tgz", + "integrity": "sha512-muNVUjUEU+/KLFrLzQ8PMXyw4+a/MP6t4GIvwLtyx/kH0rpSy5s0YmqacMXheuIe6F/5QT8uksXGNAQenitkGQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.965.0", + "@aws-sdk/middleware-host-header": "3.965.0", + "@aws-sdk/middleware-logger": "3.965.0", + "@aws-sdk/middleware-recursion-detection": "3.965.0", + "@aws-sdk/middleware-user-agent": "3.965.0", + "@aws-sdk/region-config-resolver": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-endpoints": "3.965.0", + "@aws-sdk/util-user-agent-browser": "3.965.0", + "@aws-sdk/util-user-agent-node": "3.965.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-body-length-node": "^4.2.1", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.965.0.tgz", + "integrity": "sha512-RoMhu9ly2B0coxn8ctXosPP2WmDD0MkQlZGLjoYHQUOCBmty5qmCxOqBmBDa6wbWbB8xKtMQ/4VXloQOgzjHXg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.965.0.tgz", + "integrity": "sha512-aQ9vvXjeoQsAaRHS18l8doY+E/6mmNMSDMU6eJsSUDgvgGRMHhsKjiVh7DJGbZRRogdrES4KAfx6raIB4kBz5Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@aws-sdk/util-format-url": "3.965.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.965.0.tgz", + "integrity": "sha512-hgbAThbsUrWtNpFBQxzXevIfd5Qgr4TLbXY1AIbmpSX9fPVC114pdieRMpopJ0fYaJ7v5/blTiS6wzVdXleZ/w==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.965.0.tgz", + "integrity": "sha512-aR0qxg0b8flkXJVE+CM1gzo7uJ57md50z2eyCwofC0QIz5Y0P7/7vvb9/dmUQt6eT9XRN5iRcUqq2IVxVDvJOw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.965.0", + "@aws-sdk/nested-clients": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.965.0.tgz", + "integrity": "sha512-jvodoJdMavvg8faN7co58vVJRO5MVep4JFPRzUNCzpJ98BDqWDk/ad045aMJcmxkLzYLS2UAnUmqjJ/tUPNlzQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.965.0.tgz", + "integrity": "sha512-bNGKr5Tct28jGLkL8xIkGu7swpDgBpkTVbGaofhzr/X80iclbOv656RGxhMpDvmc4S9UuQnqLRXyceNFNF2V7Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.965.0.tgz", + "integrity": "sha512-WqSCB0XIsGUwZWvrYkuoofi2vzoVHqyeJ2kN+WyoOsxPLTiQSBIoqm/01R/qJvoxwK/gOOF7su9i84Vw2NQQpQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-endpoints": "^3.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.965.0.tgz", + "integrity": "sha512-KiplV4xYGXdNCcz5eRP8WfAejT5EkE2gQxC4IY6WsuxYprzQKsnGaAzEQ+giR5GgQLIRBkPaWT0xHEYkMiCQ1Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.0.tgz", + "integrity": "sha512-9LJFand4bIoOjOF4x3wx0UZYiFZRo4oUauxQSiEX2dVg+5qeBOJSjp2SeWykIE6+6frCZ5wvWm2fGLK8D32aJw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.965.0.tgz", + "integrity": "sha512-Xiza/zMntQGpkd2dETQeAK8So1pg5+STTzpcdGWxj5q0jGO5ayjqT/q1Q7BrsX5KIr6PvRkl9/V7lLCv04wGjQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.965.0", + "@smithy/types": "^4.11.0", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.965.0.tgz", + "integrity": "sha512-kokIHUfNT3/P55E4fUJJrFHuuA9BbjFKUIxoLrd3UaRfdafT0ScRfg2eaZie6arf60EuhlUIZH0yALxttMEjxQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.965.0", + "@aws-sdk/types": "3.965.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.965.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.965.0.tgz", + "integrity": "sha512-Tcod25/BTupraQwtb+Q+GX8bmEZfxIFjjJ/AvkhUZsZlkPeVluzq1uu3Oeqf145DCdMjzLIN6vab5MrykbDP+g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/abort-controller": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.0.tgz", + "integrity": "sha512-WmU0TnhEAJLWvfSeMxBNe5xtbselEO8+4wG0NtZeL8oR21WgH1xiO37El+/Y+H/Ie4SCwBy3MxYWmOYaGgZueA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.1.tgz", + "integrity": "sha512-lX9Ay+6LisTfpLid2zZtIhSEjHMZoAR5hHCR4H7tBz/Zkfr5ea8RcQ7Tk4mi0P76p4cN+Btz16Ffno7YHpKXnQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-config-provider": "^4.2.0", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.20.1", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.1.tgz", + "integrity": "sha512-wOboSEdQ85dbKAJ0zL+wQ6b0HTSBRhtGa0PYKysQXkRg+vK0tdCRRVruiFM2QMprkOQwSYOnwF4og96PAaEGag==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-body-length-browser": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", + "@smithy/util-utf8": "^4.2.0", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", + "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", + "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", + "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", + "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", + "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.8.tgz", + "integrity": "sha512-07InZontqsM1ggTCPSRgI7d8DirqRrnpL7nIACT4PW0AWrgDiHhjGZzbAE5UtRSiU0NISGUYe7/rri9ZeWyDpw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.2.0", + "@smithy/chunked-blob-reader-native": "^4.2.1", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.7.tgz", + "integrity": "sha512-ZQVoAwNYnFMIbd4DUc517HuwNelJUY6YOzwqrbcAgCnVn+79/OK7UjwA93SPpdTOpKDVkLIzavWm/Ck7SmnDPQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.0.tgz", + "integrity": "sha512-DZZZBvC7sjcYh4MazJSGiWMI2L7E0oCiRHREDzIxi/M2LY79/21iXt6aPLHge82wi5LsuRF5A06Ds3+0mlh6CQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.7.tgz", + "integrity": "sha512-Wv6JcUxtOLTnxvNjDnAiATUsk8gvA6EeS8zzHig07dotpByYsLot+m0AaQEniUBjx97AC41MQR4hW0baraD1Xw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.2.tgz", + "integrity": "sha512-mqpAdux0BNmZu/SqkFhQEnod4fX23xxTvU2LUpmKp0JpSI+kPYCiHJMmzREr8yxbNxKL2/DU1UZm9i++ayU+2g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.20.1", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.18", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.18.tgz", + "integrity": "sha512-E5hulijA59nBk/zvcwVMaS7FG7Y4l6hWA9vrW018r+8kiZef4/ETQaPI4oY+3zsy9f6KqDv3c4VKtO4DwwgpCg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.3", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/uuid": "^1.1.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "@smithy/util-uri-escape": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-uri-escape": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.10.3", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.3.tgz", + "integrity": "sha512-EfECiO/0fAfb590LBnUe7rI5ux7XfquQ8LBzTe7gxw0j9QW/q8UT/EHWHlxV/+jhQ3+Ssga9uUYXCQgImGMbNg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.20.1", + "@smithy/middleware-endpoint": "^4.4.2", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.0.tgz", + "integrity": "sha512-GkXZ59JfyxsIwNTWFnjmFEI8kZpRNIBfxKjv09+nkAWPt/4aGaEWMM04m4sxgNVWkbt2MdSvE3KF/PfX4nFedQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.0.tgz", + "integrity": "sha512-Fkoh/I76szMKJnBXWPdFkQJl2r9SjPt3cMzLdOB6eJ4Pnpas8hVoWPYemX/peO0yrrvldgCUVJqOAjUrOLjbxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.1.tgz", + "integrity": "sha512-h53dz/pISVrVrfxV1iqXlx5pRg3V2YWFcSQyPyXZRrZoZj4R4DeWRDo1a7dd3CPTcFi3kE+98tuNyD2axyZReA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.0.tgz", + "integrity": "sha512-kAY9hTKulTNevM2nlRtxAG2FQ3B2OR6QIrPY3zE5LqJy1oxzmgBGsHLWTcNhWXKchgA0WHW+mZkQrng/pgcCew==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.0.tgz", + "integrity": "sha512-YEjpl6XJ36FTKmD+kRJJWYvrHeUvm5ykaUS5xK+6oXffQPHeEM4/nXlZPe+Wu0lsgRUcNZiliYNh/y7q9c2y6Q==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.17", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.17.tgz", + "integrity": "sha512-dwN4GmivYF1QphnP3xJESXKtHvkkvKHSZI8GrSKMVoENVSKW2cFPRYC4ZgstYjUHdR3zwaDkIaTDIp26JuY7Cw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.3", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.20.tgz", + "integrity": "sha512-VD/I4AEhF1lpB3B//pmOIMBNLMrtdMXwy9yCOfa2QkJGDr63vH3RqPbSAKzoGMov3iryCxTXCxSsyGmEB8PDpg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.3", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.0.tgz", + "integrity": "sha512-CCQBwJIvXMLKxVbO88IukazJD9a4kQ9ZN7/UMGBjBcJYvatpWk+9g870El4cB8/EJxfe+k+y0GmR9CAzkF+Nbw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.0", + "@smithy/util-base64": "^4.3.0", + "@smithy/util-buffer-from": "^4.2.0", + "@smithy/util-hex-encoding": "^4.2.0", + "@smithy/util-utf8": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.0.tgz", + "integrity": "sha512-igZpCKV9+E/Mzrpq6YacdTQ0qTiLm85gD6N/IrmyDvQFA4UnU3d5g3m8tMT/6zG/vVkWSU+VxeUyGonL62DuxA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.0.tgz", + "integrity": "sha512-zBPfuzoI8xyBtR2P6WQj63Rz8i3AmfAaJLuNG8dWsfvPe8lO4aCPYLn879mEgHndZH1zQ2oXmG8O1GGzzaoZiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", + "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/abort-controller": "^4.2.7", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.0.tgz", + "integrity": "sha512-4aUIteuyxtBUhVdiQqcDhKFitwfd9hqoSDYY2KRXiWtgoWJ9Bmise+KfEPDiVHWeJepvF8xJO9/9+WDIciMFFw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/axios": { + "version": "1.13.2", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.13.2.tgz", + "integrity": "sha512-VPk9ebNqPcy5lRGuSlKx752IlDatOjT9paPlm8A7yOuW2Fbvp4X3JznJtT4f0GzGLLiWE9W8onz51SqLYwzGaA==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.4", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/bowser": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", + "license": "MIT" + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/strnum": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + } + } +} diff --git a/serverless/package.json b/serverless/package.json index 5c27e38..5638753 100644 --- a/serverless/package.json +++ b/serverless/package.json @@ -9,5 +9,11 @@ "keywords": [], "author": "", "license": "ISC", - "type": "commonjs" + "type": "commonjs", + "dependencies": { + "@aws-sdk/client-s3": "^3.965.0", + "@aws-sdk/s3-request-presigner": "^3.965.0", + "axios": "^1.13.2", + "form-data": "^4.0.1" + } } diff --git a/serverless/serverless.yml b/serverless/serverless.yml index bdc5e30..f9e1a75 100644 --- a/serverless/serverless.yml +++ b/serverless/serverless.yml @@ -11,6 +11,8 @@ stages: params: es_endpoint: https://insurtechtoolkit.com domain: es.imex.online + es_user: Imex2 + es_password: Patrick beta: # Enables observability in the prod stage observability: false @@ -19,6 +21,8 @@ stages: params: es_endpoint: https://4284-79073.el-alt.com domain: beta.es.imex.online + es_user: Imex2 + es_password: Patrick alpha: # Enables observability in the prod stage observability: false @@ -26,13 +30,17 @@ stages: params: es_endpoint: https://4284-79287.el-alt.com domain: alpha.es.imex.online + es_user: Imex2 + es_password: Patrick dev: # Enables observability in the prod stage observability: false # Sepcify parameter values to be used in the prod stage params: es_endpoint: https://4284-79287.el-alt.com - domain: alpha.es.imex.online + domain: dev.es.imex.online + es_user: Imex2 + es_password: Patrick # params: # dev: @@ -53,21 +61,52 @@ provider: cors: true # Automatically configures CORS functions: - # Route 1: POST /scrub + vehicleType: + handler: src/handlers/vehicleTypes.handler + events: + - httpApi: + path: /vehicleType + method: post scrub: handler: src/handlers/scrub.handler environment: ES_ENDPOINT: ${param:es_endpoint} + ES_USER: ${param:es_user} + ES_PASSWORD: ${param:es_password} events: - httpApi: path: /scrub method: post - # Route 1: POST /scrub emsupload: handler: src/handlers/emsupload.handler environment: ES_ENDPOINT: ${param:es_endpoint} + UPLOAD_BUCKET_NAME: ${self:service}-uploads-${sls:stage} + iamRoleStatements: + - Effect: Allow + Action: + - s3:PutObject + - s3:PutObjectAcl + - s3:GetObject + Resource: + - arn:aws:s3:::${self:service}-uploads-${sls:stage}/* events: - httpApi: path: /emsupload method: post + +resources: + Resources: + UploadBucket: + Type: AWS::S3::Bucket + Properties: + BucketName: ${self:service}-uploads-${sls:stage} + CorsConfiguration: + CorsRules: + - AllowedOrigins: + - "*" + AllowedMethods: + - PUT + - POST + AllowedHeaders: + - "*" diff --git a/serverless/src/handlers/emsupload.js b/serverless/src/handlers/emsupload.js index e5a7bcf..fbf3858 100644 --- a/serverless/src/handlers/emsupload.js +++ b/serverless/src/handlers/emsupload.js @@ -1,15 +1,90 @@ -// You can require shared code from the lib folder -// const { dbConnect } = require('../lib/db'); +const { S3Client, PutObjectCommand } = require('@aws-sdk/client-s3'); +const { getSignedUrl } = require('@aws-sdk/s3-request-presigner'); +const { randomUUID } = require('crypto'); +const s3Client = new S3Client({ region: process.env.AWS_REGION || 'ca-central-1' }); +const BUCKET_NAME = process.env.UPLOAD_BUCKET_NAME; + +/** + * Validates the EMS Upload ID + * @param {string} emsUploadId - The EMS Upload ID to validate + * @returns {boolean} - Always returns true for now (placeholder) + */ +function validateEmsUploadId(esApiKey) { + // Placeholder validation - always returns true + // TODO: Implement actual validation logic + return true; +} + +/** + * Lambda handler for EMS Upload + * Expects a JSON body with: { emsUploadId: string, fileName?: string } + */ exports.handler = async (event) => { - // Path parameters are automatically parsed for you - const userId = event.pathParameters.id; + try { + // Parse the request body + const body = JSON.parse(event.body || '{}'); + const { esApiKey, ciecaid, clm_no, ownr_ln } = body; - return { - statusCode: 200, - body: JSON.stringify({ - message: `EMS Upload Path`, + // Validate required fields + if (!esApiKey) { + return { + statusCode: 400, + body: JSON.stringify({ + error: 'Missing required field: esApiKey' + }), + }; + } - }) - }; + // Validate the EMS Upload ID + const isValid = validateEmsUploadId(esApiKey); + if (!isValid) { + return { + statusCode: 401, + body: JSON.stringify({ + error: 'Invalid ES API Key' + }) + }; + } + + // Generate a unique key for the upload + + const key = `esdpuploads/${esApiKey}/${ciecaid}-${clm_no}-${ownr_ln}-${new Date().toISOString().replace(/T/, '--').replace(/\..+/, '').replace(/:/g, '-')}.zip`; + + // Create the presigned URL for upload (valid for 15 minutes) + const command = new PutObjectCommand({ + Bucket: BUCKET_NAME, + Key: key, + StorageClass: "INTELLIGENT_TIERING" + }); + + const presignedUrl = await getSignedUrl(s3Client, command, { + expiresIn: 900 // 15 minutes + }); + + // Return success response with presigned URL and key + return { + statusCode: 200, + headers: { + 'Content-Type': 'application/json' + }, + body: JSON.stringify({ + success: true, + presignedUrl, + key, + bucket: BUCKET_NAME, + expiresIn: 900 + }) + }; + + } catch (error) { + console.error('Error generating presigned URL:', error); + return { + statusCode: 500, + body: JSON.stringify({ + error: 'Internal server error', + message: error.message + }) + }; + } }; \ No newline at end of file diff --git a/serverless/src/handlers/scrub.js b/serverless/src/handlers/scrub.js index a577de4..78c3baf 100644 --- a/serverless/src/handlers/scrub.js +++ b/serverless/src/handlers/scrub.js @@ -1,15 +1,62 @@ -// You can require shared code from the lib folder -// const { dbConnect } = require('../lib/db'); +const axios = require('axios'); +const FormData = require('form-data'); +const ES_USER = process.env.ES_USER; +const ES_PASSWORD = process.env.ES_PASSWORD; +const ES_ENDPOINT = process.env.ES_ENDPOINT; +const getVehicleType = require("../lib/vehicleTypes/vehicleType").getVehicleType; exports.handler = async (event) => { // Path parameters are automatically parsed for you + //Take the estimate details, add them to the database, scrub it, and then retrun the result and add the scrubbed results to database. + try { + const { esApiKey, estimate } = event.body ? JSON.parse(event.body) : {}; + //TODO: Replace the previous vehicle logic with just getting it here. + estimate.v_type = getVehicleType(estimate.v_model).type; + estimate.sendingEntityId = "87330f61-412b-4251-baaa-d026565b23c5"; - return { - statusCode: 200, - body: JSON.stringify({ - message: `Scrub Path`, - data: { id: 1, name: "Alice" } - }) - }; + console.log("Updated type", estimate.v_type); + + const fileName = `${esApiKey}-${estimate.clm_no}-${Date.now()}`; + const formData = new FormData(); + const jsonString = JSON.stringify(estimate); + formData.append( + "file", + Buffer.from(jsonString), + { + filename: `${fileName}.json`, + contentType: 'application/json' + } + ); + const result = await axios.post( + `${ES_ENDPOINT}/api/sendems`, + formData, + { + auth: { + username: ES_USER, + password: ES_PASSWORD, + }, + headers: { + APIkey: esApiKey, + }, + }, + ); + + const resultPDFUrl = result?.data?.report_link; + const reportIssueUrl = `https://insurtechtoolkit.com/pcontactUs.aspx?apiKey=${esApiKey}&file=${fileName}.json`; + + return { + resultPDFUrl, reportIssueUrl + } + } + catch (error) { + + return { + statusCode: 400, + body: JSON.stringify({ + message: `Error scrubbing estimate.`, + error: error.response.data || error.message || 'Unknown error', + }) + }; + } }; \ No newline at end of file diff --git a/serverless/src/handlers/vehicleType.js b/serverless/src/handlers/vehicleType.js new file mode 100644 index 0000000..5ab2b19 --- /dev/null +++ b/serverless/src/handlers/vehicleType.js @@ -0,0 +1,55 @@ +// You can require shared code from the lib folder +// const { dbConnect } = require('../lib/db'); +const TrucksList = require("../lib/vehicleTypes/trucks.json"); +const CargoVanList = require("../lib/vehicleTypes/cargovans.json"); +const PassengerVanList = require("../lib/vehicleTypes/passengervans.json"); +const SuvList = require("../lib/vehicleTypes/suvs.json"); + +exports.handler = async (event) => { + + try { + const { model } = JSON.parse(event.body || '{}'); + if (!model || model.trim() === "") { + + return { + statusCode: 400, + body: JSON.stringify({ + success: false, + error: "Please provide a model" + }) + } + } else { + vehicle + const type = getVehicleType(model.trim()) + return { + statusCode: 200, + body: JSON.stringify({ + success: true, ...type + }) + } + } + } catch (error) { + + return { + statusCode: 500, + body: JSON.stringify({ + success: false, + error: error.message, + }) + }; + }; +} + + +function getVehicleType(model) { + const inTrucks = TrucksList.includes(model.toUpperCase()); + const inPV = PassengerVanList.includes(model.toUpperCase()); + const inSuv = SuvList.includes(model.toUpperCase()); + const inCv = CargoVanList.includes(model.toUpperCase()); + + if (inTrucks) return { type: "TK", match: true }; + else if (inPV) return { type: "PC", match: true }; + else if (inSuv) return { type: "SUV", match: true }; + else if (inCv) return { type: "VN", match: true }; + else return { type: "PC", match: false }; +} \ No newline at end of file diff --git a/serverless/src/lib/vehicleTypes/cargovans.json b/serverless/src/lib/vehicleTypes/cargovans.json new file mode 100644 index 0000000..aba654d --- /dev/null +++ b/serverless/src/lib/vehicleTypes/cargovans.json @@ -0,0 +1,126 @@ +[ + "PROMASTER 1500", + "PROMASTER 2500", + "PROMASTER CITY", + "NV 1500", + "NV 200", + "NV 2500", + "NV 3500", + "NV1500", + "NV200", + "NV2500", + "NV3500", + "SPRINTER", + "E150 ECONOLINE CARGO VAN", + "E150 ECONOLINE XL", + "E250 ECONOLINE CARGO", + "E250 ECONOLINE CARGO (AMALGAM)", + "E250 ECONOLINE CARGO (INSPECT)", + "E250 ECONOLINE CARGO VAN EXT", + "E250 ECONOLINE SUPER CARGO VAN", + "E350 CUTAWAY VAN", + "E350 ECONO SD CARGO VAN EXT", + "E350 ECONOLINE CARGO VAN", + "E350 ECONOLINE CUTAWAY", + "E350 ECONOLINE SD CARGO VAN", + "E350 ECONOLINE SD XL", + "E350 ECONOLINE SD XL EXT", + "E350 ECONOLINE SD XLT", + "E350 ECONOLINE SD XLT EXT", + "E350 SD CUTAWAY", + "E450", + "E450 ECONOLINE", + "E450 ECONOLINE SD", + "E450 ECONOLINE SD CUTAWAY", + "TRANSIT 150 WB 130 CARGO VAN", + "TRANSIT 150 WB 130 XLT", + "TRANSIT 150 WB 148 CARGO VAN", + "TRANSIT 250 WB 130 CARGO VAN", + "TRANSIT 250 WB 148 CARGO VAN", + "TRANSIT 250 WB 148 EL CARGO", + "TRANSIT 350 WB 148 CARGO VAN", + "TRANSIT 350 WB 148 EL CARGO", + "TRANSIT CONNECT XL CARGO VAN", + "TRANSIT CONNECT XLT CARGO VAN", + "250 TRANSIT", + "CITY EXPRESS LS CARGO VAN", + "CITY EXPRESS LT CARGO VAN", + "EXPRESS 1500", + "EXPRESS 1500 CARGO VAN", + "EXPRESS 1500 LS", + "EXPRESS 1500 LT", + "EXPRESS 2500 CARGO VAN", + "EXPRESS 2500 CARGO VAN EXT", + "EXPRESS 2500 LS", + "EXPRESS 2500 LT", + "EXPRESS 3500", + "EXPRESS 3500 CARGO VAN", + "EXPRESS 3500 CARGO VAN EXT", + "EXPRESS 3500 EXT", + "EXPRESS 3500 LS", + "EXPRESS 3500 LS EXT", + "EXPRESS 3500 LT", + "EXPRESS 3500 LT EXT", + "G3500 EXPRESS CUTAWAY", + "SAVANA 1500 CARGO VAN", + "SAVANA 1500 SL", + "SAVANA 1500 SLE", + "SAVANA 2500", + "2500 SAVANA", + "SAVANA 2500 CARGO VAN", + "SAVANA 2500 CARGO VAN EXT", + "SAVANA 2500 LT", + "SAVANA 2500 SLE", + "SAVANA 3500", + "SAVANA 3500 CARGO VAN", + "SAVANA 3500 CARGO VAN EXT", + "SAVANA 3500 EXT", + "SAVANA 3500 LT EXT", + "SAVANA 3500 SLE EXT", + "SAVANA G3500 CUTAWAY", + "SAVANA G4500 CUTAWAY", + "EXPRESS 1500 LS CARGO VAN", + "G20 SPORTVAN", + "NV 3500 S V8 CARGO VAN", + "E-150", + "E-250", + "E-350", + "E-450", + "E150", + "E250", + "E350", + "TRANSIT", + "CITY", + "CITY EXPRESS", + "EXPRESS", + "EXPRESS 2500", + "G3500", + "SAVANA", + "SAVANA 1500", + "CHEVY EXPRESS G2500", + "CLUBWAGON E350", + "TRANSIT CONNECT", + "SPRINTER 2500", + "TRANSIT 150", + "ECONOLINE E250", + "TRANSIT 250", + "ECONOLINE E350", + "NV3500 HD", + "TRANSIT 350HD", + "ECONOLINE E150", + "E250 ECONOLINE", + "C/V", + "E350 CHSCAB", + "G1500 CHEVY EXPRESS", + "2500 SPRINTER", + "E150 ECONOLINE", + "350 TRANSIT", + "E450 CUTAWAY", + "PROMASTER 3500", + "CHEVY EXPRESS G3500", + "SAVANA G3500", + "1500 PROMASTER", + "2500 EXPRESS", + "3500 EXPRESS", + "3500 SPRINTER" +] diff --git a/serverless/src/lib/vehicleTypes/passengervans.json b/serverless/src/lib/vehicleTypes/passengervans.json new file mode 100644 index 0000000..7f488fd --- /dev/null +++ b/serverless/src/lib/vehicleTypes/passengervans.json @@ -0,0 +1,33 @@ +[ + "GRAND CARAVAN", + "GRANDCARAVAN", + "GRAND CARAVAN CREW", + "GRAND CARAVAN CV", + "GRAND CARAVAN CVP", + "GRAND CARAVAN SE", + "GRAND CARAVAN SXT", + "CARAVAN CV", + "SIENNA CE V6", + "SIENNA LE V6", + "SIENNA XLE V6", + "SIENNA", + "ODYSSEY", + "SEDONA", + "PACIFICA (NEW)", + "QUEST", + "CARAVAN", + "MONTANA SV6", + "FREESTAR", + "UPLANDER", + "MONTANA", + "VOYAGER", + "ENTOURAGE", + "PACIFICA", + "CARNIVAL", + "VENTURE", + "SAFARI", + "VANAGON", + "WINDSTAR", + "TOWN&COUNTRY", + "ROUTAN" +] diff --git a/serverless/src/lib/vehicleTypes/suvs.json b/serverless/src/lib/vehicleTypes/suvs.json new file mode 100644 index 0000000..a8976a3 --- /dev/null +++ b/serverless/src/lib/vehicleTypes/suvs.json @@ -0,0 +1,485 @@ +[ + "EDGE SEL", + "ESCAPE", + "ESCAPE SE", + "ESCAPE SEL", + "ESCAPE XLT V6", + "EXPEDITION", + "EXPEDITION LIMITED", + "EXPEDITION MAX", + "EXPEDITION MAX LIMITED", + "EXPLORER", + "EXCURSION", + "EXPLORER LIMITED", + "EXPLORER PLATINUM ECOBOOST", + "EXPLORER XLT", + "FLEX", + "FLEX SE", + "ECOSPORT", + "ESCAPE HYBRID", + "MUSTANG MACH-E", + "BRONCO", + "BRONCO SPORT", + "TRAILBLAZER", + "BLAZER LT", + "CHEROKEE", + "CHEROKEE CLASSIC", + "CHEROKEE COUNTRY", + "CHEROKEE LIMITED", + "CHEROKEE NORTH", + "CHEROKEE OVERLAND", + "CHEROKEE SPORT", + "CHEROKEE TRAILHAWK", + "CJ", + "CJ7", + "CJ7 RENEGADE", + "COMMANDER", + "COMMANDER LIMITED", + "COMMANDER SPORT", + "COMPASS", + "COMPASS HIGH ALTITUDE", + "COMPASS LATITUDE", + "COMPASS LIMITED", + "COMPASS NORTH", + "COMPASS SPORT", + "COMPASS TRAILHAWK", + "GLADIATOR OVERLAND", + "GLADIATOR RUBICON", + "GRAND CHEROKEE LAREDO", + "GRAND CHEROKEE LIMITED", + "GRAND CHEROKEE OVERLAND", + "GRAND CHEROKEE SE", + "GRAND CHEROKEE SRT", + "GRAND CHEROKEE SRT8", + "GRAND CHEROKEE SUMMIT", + "GRAND CHEROKEE TRACKHAWK", + "GRAND CHEROKEE TRAILHAWK", + "GRAND CHEROKEE", + "GRANDCHEROKEE", + "LIBERTY LIMITED", + "LIBERTY RENEGADE", + "LIBERTY SPORT", + "LIBERTY", + "PATRIOT", + "PATRIOT HIGH ALTITUDE", + "PATRIOT LATITUDE", + "PATRIOT LIMITED", + "PATRIOT NORTH", + "PATRIOT SPORT", + "RENEGADE LIMITED", + "RENEGADE NORTH", + "RENEGADE SPORT", + "RENEGADE TRAILHAWK", + "TJ", + "TJ RUBICON", + "TJ SAHARA", + "TJ SPORT", + "TJ UNLIMITED", + "WRANGLER", + "WRANGLER RUBICON", + "WRANGLER SAHARA", + "WRANGLER SPORT", + "WRANGLER UNLIMITED", + "WRANGLER UNLIMITED 70TH ANNIV", + "WRANGLER UNLIMITED RUBICON", + "WRANGLER UNLIMITED SAHARA", + "WRANGLER UNLIMITED SPORT", + "WRANGLER UNLIMITED X", + "WRANGLER X", + "YJ WRANGLER", + "AVIATOR", + "AVIATOR RESERVE", + "MKC", + "MKC RESERVE", + "MKC SELECT", + "MKT", + "MKT ECOBOOST", + "MKX", + "MKX RESERVE", + "NAUTILUS RESERVE", + "NAUTILUS RESERVE V6", + "NAVIGATOR", + "NAVIGATOR L", + "NAVIGATOR L RESERVE", + "NAVIGATOR L SELECT", + "NAVIGATOR RESERVE", + "PILOT", + "PILOT BLACK EDITION", + "PILOT ELITE", + "PILOT EX", + "PILOT EX-L", + "PILOT GRANITE", + "PILOT LX", + "PILOT SE", + "PILOT SE-L", + "PILOT TOURING", + "DURANGO R/T", + "DURANGO SLT PLUS", + "DURANGO SRT", + "DURANGO", + "JOURNEY", + "JOURNEY CROSSROAD", + "JOURNEY CVP", + "JOURNEY LIMITED", + "JOURNEY R/T", + "JOURNEY SXT", + "NITRO SE", + "NITRO", + "K1500 SUBURBAN", + "SUBURBAN 1500 LT", + "SUBURBAN 1500 LTZ", + "SUBURBAN 1500 PREMIER", + "SUBURBAN 2500 LS", + "TAHOE LT", + "TRAVERSE LS", + "TRAVERSE LT", + "TRAVERSE PREMIER", + "TRAX LT", + "TRAX PREMIER", + "UPLANDER LT EXT", + "SUBURBAN", + "TAHOE", + "TRAVERSE", + "TRAX", + "UPLANDER", + "YUKON", + "YUKON DENALI", + "YUKON XL", + "YUKON XL DENALI", + "EQUINOX LS", + "EQUINOX LT", + "EQUINOX PREMIER", + "EQUINOX", + "RAV4 LE", + "RAV4 XLE", + "HIGHLANDER SPORT V6", + "4RUNNER SR5 V6", + "RAV4", + "RAV4 HYBRID", + "RAV4 XLE HYBRID", + "HIGHLANDER", + "4RUNNER", + "SEQUOIA", + "PATHFINDER SE", + "PATHFINDER SL", + "PATHFINDER", + "MURANO PLATINUM", + "MURANO SV", + "MURANO", + "TUCSON", + "TERRAIN", + "SORENTO", + "EDGE", + "KICKS", + "QASHQAI", + "SANTA FE", + "ARMADA", + "TELLURIDE", + "PALISADE", + "SELTOS", + "TORRENT", + "C-HR", + "SPORTAGE", + "VENZA", + "ACADIA", + "CR-V", + "HR-V", + "CX-5", + "CX-50", + "CX-7", + "CX-9", + "CX-3", + "Q3", + "Q5", + "Q7", + "Q8", + "JUKE SV", + "JUKE", + "ROGUE", + "ROGUE SV", + "XTERRA", + "COROLLA CROSS", + "ACADIA DENALI", + "TAURUS X", + "MACAN", + "FJ CRUISER", + "BRONCO SPORT BADLANDS", + "ESCALADE", + "RX 350", + "KONA", + "MDX", + "RDX", + "COOPER COUNTRYMAN", + "V70", + "OUTLANDER", + "RIO5", + "GLC300 COUPE", + "ENCORE", + "SRX", + "SANTA FE SPORT", + "NX 300", + "WRANGLER UNLIMITE", + "WRANGLER JK UNLIM", + "RANGEROVER EVOQUE", + "CROSSTREK", + "FORESTER", + "TIGUAN", + "XV CROSSTREK", + "ENDEAVOR", + "RX 330", + "ATLAS", + "XC90", + "TOUAREG", + "STELVIO", + "RANGE ROVER SPORT", + "GLE350D", + "EX35", + "RVR", + "MONTERO", + "X-TRAIL", + "GRAND VITARA", + "TRIBUTE", + "X3", + "XC60", + "GLK250 BLUETEC", + "ENVOY", + "ML350 BLUETEC", + "ENVISION", + "FX35", + "X1", + "VENUE", + "TAOS", + "KONA ELECTRIC", + "OUTLANDER PHEV", + "PASSPORT", + "H3", + "EXPLORERSPORTTRAC", + "F-PACE", + "ML320 BLUETEC", + "REGAL SPORTBACK", + "DISCOVERY SPORT", + "RENDEZVOUS", + "XC70", + "COMPASS (NEW)", + "CUBE", + "V60 CROSS COUNTRY", + "QX70", + "X6", + "ELEMENT", + "RX 400H", + "VUE", + "RANGE ROVER VELAR", + "E-PACE", + "RAV4 PRIME", + "LX 570", + "GX 470", + "EX37", + "GLE43", + "NAUTILUS", + "XT6", + "RX 450H", + "ESCALADE ESV", + "OUTLOOK", + "CAYENNE", + "XC90 PLUG-IN", + "MODEL X", + "MODEL Y", + "GLC300", + "SANTA FE HYBRID", + "G63", + "XV CROSSTREK HYBR", + "JX35", + "JIMMY", + "TUCSON HYBRID", + "XC40 ELECTRIC", + "RX 300", + "ML320", + "WRANGLER JK UNLIMITED", + "POLICE INTERCEPTOR UTILITY", + "WRANGLER JK", + "TRIBECA", + "E-TRON SPORTBACK", + "500X", + "RX 350H", + "GL350 BLUETEC", + "WRANGLER UNLIMITED 4XE", + "GV80", + "GL550", + "Q5 E", + "H2 SUV", + "Q5 HYBRID", + "IONIQ 5", + "SQ5 SPORTBACK", + "LEVANTE", + "TONALE", + "GLE43 COUPE", + "GRAND CHEROKEE WK", + "DEFENDER", + "NX 450H+", + "ML400", + "LX 600", + "RX 450HL", + "SORENTO HYBRID", + "NX 350", + "TRACKER", + "GLE450", + "Q5 SPORTBACK", + "CR-V HYBRID", + "LX 470", + "EQS580 SUV", + "H2", + "EV9", + "SORENTO PLUG-IN", + "LYRIQ", + "GLE550", + "RX 500H", + "X1 SAV", + "E-TRON S SPORTBACK", + "ML500", + "GRAND HIGHLANDER HYBRID", + "RS Q8", + "GLS550", + "GLS580", + "IX", + "CAYENNE COUPE", + "SOLTERRA", + "PATHFINDER HYBRID", + "Q8 E-TRON", + "TX 350", + "TX 500H", + "EQUINOX EV", + "NAUTILUS HYBRID", + "TRAVERSE LIMITED", + "CX-70", + "SANTA FE XL", + "RENEGADE", + "QX50", + "ECLIPSE CROSS", + "QX80", + "X5", + "X3", + "X1", + "X4", + "ENCLAVE", + "ENCORE GX", + "CAYENNE HYBRID", + "SOUL", + "GX 460", + "UX 250H", + "XT5", + "GLE53", + "XT4", + "SQ7", + "NX 350H", + "GLK350", + "GLE350", + "NX 300H", + "NX 200T", + "RANGE ROVER EVOQUE", + "GLS450", + "TERRAIN DENALI", + "GRAND CHEROKEE L", + "GLE400", + "TUCSON PLUG-IN", + "BLAZER", + "ASCENT", + "HIGHLANDER HYBRID", + "ATLAS CROSS SPORT", + "XC40", + "VENZA HYBRID", + "GLA45", + "GLB250", + "GRAND HIGHLANDER", + "GV70", + "NIRO", + "NIRO EV", + "GLA250", + "ESCAPE PLUG-IN", + "WAGONEER", + "CX-30", + "QX60", + "GRAND CHEROKEE 4XE", + "SPORTAGE HYBRID", + "EV6", + "TONALE PLUG-IN", + "GLC43 COUPE", + "X2", + "RX 350L", + "HORNET", + "ENVISTA", + "LEVANTE S", + "SPORTAGE PLUG-IN", + "ORLANDO", + "X5 M", + "EXPLORER HYBRID", + "FREESTYLE", + "CORSAIR", + "K1500 YUKON XL", + "RANGE ROVER", + "SUV W/O LABOR", + "ID.4", + "CX-90", + "X7", + "CORSAIR PLUG-IN", + "ESCALADE EXT", + "QX55", + "DISCOVERY", + "BOLT EUV", + "C40 ELECTRIC", + "LR4", + "GRAND WAGONEER", + "XC60 PLUG-IN", + "LR2", + "EQE350 SUV", + "COROLLA CROSS HYBRID", + "SOUL EV", + "GRECALE", + "SUV W/O LABOR", + "QX30", + "SQ5", + "NIRO PLUG-IN", + "BORREGO", + "CX-90 PLUG-IN", + "XL-7", + "SUV W/O LABOR", + "SUV W/O LABOR", + "I-PACE", + "HORNET PLUG-IN", + "UX 300H", + "ML320 CDI", + "VERACRUZ", + "SQ8", + "GLE53 COUPE", + "ZDX", + "9-7X", + "ARIYA", + "ASPEN", + "AVIATOR PLUG-IN", + "B9 TRIBECA", + "BRAVADA", + "ENVOY XL", + "EQB350", + "EQB350 SUV", + "ESCALADE-V", + "E-TRON", + "FX37", + "GL320 CDI", + "GLADIATOR", + "GLC43", + "GLE450 COUPE", + "GLE63", + "GV60", + "MKT TOWN CAR", + "ML350", + "ML550", + "ML63", + "NX 250", + "Q4 E-TRON", + "Q8 E-TRON SPORTBACK", + "QX4", + "QX56", + "SANTA FE PLUG-IN", + "UX 200", + "WAGONEER L", + "XB" +] diff --git a/serverless/src/lib/vehicleTypes/trucks.json b/serverless/src/lib/vehicleTypes/trucks.json new file mode 100644 index 0000000..f8e235e --- /dev/null +++ b/serverless/src/lib/vehicleTypes/trucks.json @@ -0,0 +1,567 @@ +[ + "MARK LT", + + "F-150", + "F-250", + "F-350", + "F-450", + "F-550", + "F-650", + "F100 PICKUP", + "F150 FX2 SUPERCAB", + "F150 FX4 PICKUP", + "F150 FX4 SUPERCAB", + "F150 FX4 SUPERCREW", + "F150 HARLEY DAVIDSON SUPERCAB", + "F150 HARLEY DAVIDSON SUPERCREW", + "F150 KING RANCH SUPERCREW", + "F150 LARIAT FX4 SUPERCREW", + "F150 LARIAT HARLEY DAVIDSON SC", + "F150 LARIAT KING RANCH SUPCREW", + "F150 LARIAT LIMITED SUPERCREW", + "F150 LARIAT PICKUP", + "F150 LARIAT SUPERCAB", + "F150 LARIAT SUPERCAB (AMALGAM)", + "F150 LARIAT SUPERCREW", + "F150 LARIAT SUPERCREW (AMALGA)", + "F150 LIMITED SUPERCREW", + "F150 PICKUP", + "F150 PLATINUM SUPERCREW", + "F150 RAPTOR SUPERCAB", + "F150 RAPTOR SUPERCREW", + "F150 STX PICKUP", + "F150 STX SUPERCAB", + "F150 SUPERCAB", + "F150 SUPERCREW", + "F150 SUPERCREW (AMALGAMATED)", + "F150 SVT RAPTOR SUPERCAB", + "F150 XL PICKUP", + "F150 XL SUPERCAB", + "F150 XL SUPERCREW", + "F150 XLT LARIAT SUPERCAB", + "F150 XLT PICKUP", + "F150 XLT SUPERCAB", + "F150 XLT SUPERCREW", + "F150 XLT SUPERCREW (AMALGAMAT)", + "F150 XTR SUPERCAB", + "F250 PICKUP", + "F250 SD CREW CAB", + "F250 SD FX4 CREW CAB", + "F250 SD FX4 SUPERCAB", + "F250 SD KING RANCH CREW CAB", + "F250 SD LARIAT CREW CAB", + "F250 SD LARIAT CREW CAB (AMAL)", + "F250 SD LARIAT PICKUP", + "F250 SD LARIAT SUPERCAB", + "F250 SD LIMITED CREW CAB", + "F250 SD PLATINUM CREW CAB", + "F250 SD SUPERCAB", + "F250 SD XL CREW CAB", + "F250 SD XL PICKUP", + "F250 SD XL SUPERCAB", + "F250 SD XLT CREW CAB", + "F250 SD XLT PICKUP", + "F250 SD XLT SUPERCAB", + "F250 SUPERCAB", + "F250 XL CREW CAB", + "F350 CREW CAB", + "F350 PICKUP", + "F350 PICKUP 2WD", + "F350 SD CABELAS CREW CAB", + "F350 SD CREW CAB", + "F350 SD FX4 CREW CAB", + "F350 SD FX4 SUPERCAB", + "F350 SD HARLEY DAVIDSON", + "F350 SD KING RANCH CREW CAB", + "F350 SD LARIAT CREW CAB", + "F350 SD LARIAT CREW CAB (AMAL)", + "F350 SD LARIAT KING RANCH", + "F350 SD LARIAT SUPERCAB", + "F350 SD LIMITED CREW CAB", + "F350 SD PICKUP", + "F350 SD PLATINUM CREW CAB", + "F350 SD SUPERCAB", + "F350 SD XL CREW CAB", + "F350 SD XL PICKUP", + "F350 SD XL SUPERCAB", + "F350 SD XLT CREW CAB", + "F350 SD XLT SUPERCAB", + "F350 SUPER DUTY", + "F350 SUPER DUTY XL", + "F350 XL PICKUP", + "F450", + "F450 Pickup", + "F450 SD KING RANCH CREW CAB", + "F450 SD LARIAT CREW CAB", + "F450 SD PICKUP", + "F450 SD PLATINUM CREW CAB", + "F450 SD XL", + "F450 SD XL CREW CAB", + "F450 SD XL PICKUP", + "F450 SD XLT CREW CAB", + "F450 SUPER DUTY XLT", + "F550", + "F550 SD", + "F550 SD XL", + "F550 SD XL PICKUP", + "F550 SD XLT CREW CAB", + "F550 SD XLT SUPERCAB", + "F550 SUPER DUTY", + "F550 SUPER DUTY XL", + "F550 SUPER DUTY XLT", + "F550 SUPER DUTY XLT CREW CAB", + "F550 XL", + "F650 SD XLT SUPERCAB", + "F68", + "F750 XL", + + "RANGER", + "RANGER EDGE SUPERCAB", + "RANGER FX4 SUPERCAB", + "RANGER LARIAT SUPERCREW", + "RANGER SPORT SUPERCAB", + "RANGER STX SUPERCAB", + "RANGER SUPERCAB", + "RANGER XL", + "RANGER XL SUPERCAB", + "RANGER XLT", + "RANGER XLT SUPERCAB", + "RANGER XLT SUPERCREW", + + "FRONTIER LE CREW CAB V6", + "FRONTIER NISMO CREW CAB V6", + "FRONTIER NISMO KING CAB V6", + "FRONTIER PRO-4X CREW CAB V6", + "FRONTIER PRO-4X KING CAB V6", + "FRONTIER S KING CAB", + "FRONTIER SC CREW CAB V6", + "FRONTIER SC V6", + "FRONTIER SE CREW CAB V6", + "FRONTIER SE KING CAB V6", + "FRONTIER SL CREW CAB V6", + "FRONTIER SV CREW CAB V6", + "FRONTIER SV KING CAB V6", + "FRONTIER XE KING CAB", + "FRONTIER XE KING CAB V6", + "KING CAB", + + "TITAN 5.6 LE CREW CAB", + "TITAN 5.6 LE KING CAB", + "TITAN 5.6 MIDNIGHT CREW CAB", + "TITAN 5.6 PLATINUM RESERVE CC", + "TITAN 5.6 PRO-4X CREW CAB", + "TITAN 5.6 PRO-4X KING CAB", + "TITAN 5.6 S CREW CAB", + "TITAN 5.6 SE CREW CAB", + "TITAN 5.6 SE KING CAB", + "TITAN 5.6 SL CREW CAB", + "TITAN 5.6 SV CREW CAB", + "TITAN 5.6 SV KING CAB", + "TITAN 5.6 XE CREW CAB", + "TITAN 5.6 XE KING CAB", + "TITAN XD PLATINUM CREW CAB", + "TITAN XD PRO-4X CREW CAB", + "TITAN XD S CREW CAB", + "TITAN XD SL CREW CAB", + "TITAN XD SV CREW CAB", + + "PICKUP SR5", + + "TACOMA", + "TACOMA ACCESS CAB", + "TACOMA DOUBLE CAB V6", + "TACOMA LIMITED DOUBLE CAB V6", + "TACOMA PRERUNNER DOUBLE CAB V6", + "TACOMA PRERUNNER V6 ACCESS CAB", + "TACOMA PRERUNNER XTRACAB", + "TACOMA PRERUNNER XTRACAB V6", + "TACOMA SR5 DOUBLE CAB V6", + "TACOMA SR5 V6 ACCESS CAB", + "TACOMA SR5 V6 XTRACAB", + "TACOMA V6 ACCESS CAB", + "TACOMA XTRACAB", + "TACOMA XTRACAB V6", + "TUNDRA ACCESS CAB V8", + "TUNDRA DOUBLE CAB V8", + "TUNDRA LIMITED ACCESS CAB V8", + "TUNDRA LIMITED SR5 DBLCAB V8", + "TUNDRA LIMITED V8", + "TUNDRA LIMITED V8 CREWMAX", + "TUNDRA LIMITED V8 DOUBLE CAB", + "TUNDRA PLATINUM V8 CREWMAX", + "TUNDRA SR DOUBLE CAB V8", + "TUNDRA SR V8", + "TUNDRA SR5 DOUBLE CAB V8", + "TUNDRA SR5 TRD DOUBLE CAB V8", + "TUNDRA SR5 V8 CREWMAX", + "TUNDRA V8", + "TUNDRA V8 CREWMAX", + "XTRACAB LONG BOX", + + "AVALANCHE 1500", + "AVALANCHE 1500 LS", + "AVALANCHE 1500 LS Z71", + "AVALANCHE 1500 LT", + "AVALANCHE 1500 LT Z71", + "AVALANCHE 1500 LTZ", + "C/R 10/1500 4+CAB", + "C/R 10/1500 PICKUP", + "C/R 20/2500 4+CAB", + "C/R 20/2500 PICKUP", + "C3500", + + "COLORADO", + "COLORADO EXT CAB", + "COLORADO LS", + "COLORADO LS CREW CAB", + "COLORADO LS EXT CAB", + "COLORADO LT", + "COLORADO LT CREW CAB", + "COLORADO LT EXT CAB", + "COLORADO WT CREW CAB", + "COLORADO WT EXT CAB", + "COLORADO Z71 CREW CAB", + "COLORADO Z71 EXT CAB", + "COLORADO ZR2 CREW CAB", + "COLORADO ZR2 EXT CAB", + + "HHR LS PANEL", + "K/V 10/1500 4+CAB", + "K/V 10/1500 PICKUP", + "K/V 20/2500 4+CAB", + "K/V 20/2500 PICKUP", + "K/V 30/3500 4+CAB", + "Pickup K3500", + "Pickup Silverado C2500 HD", + "S10 4+CAB", + "S10 LS 4+CAB", + "SILVERADO 1500", + "SILVERADO 1500 CHEYENNE CREW", + "SILVERADO 1500 CREW CAB", + "SILVERADO 1500 CREW CAB (AMAL)", + "SILVERADO 1500 CUST TRAIL DC", + "SILVERADO 1500 CUSTOM CREW CAB", + "SILVERADO 1500 CUSTOM DC", + "SILVERADO 1500 CUSTOM TRAIL CC", + "SILVERADO 1500 DOUBLE (AMALGA)", + "SILVERADO 1500 EXT CAB", + "SILVERADO 1500 HD LS CREW CAB", + "SILVERADO 1500 HD LT CREW CAB", + "SILVERADO 1500 HIGH COUNTRY CC", + "SILVERADO 1500 HYBRID CREW CAB", + "SILVERADO 1500 LS", + "SILVERADO 1500 LS CREW CAB", + "SILVERADO 1500 LS DOUBLE CAB", + "SILVERADO 1500 LS EXT CAB", + "SILVERADO 1500 LT", + "SILVERADO 1500 LT CC (AMALGAM)", + "SILVERADO 1500 LT CREW CAB", + "SILVERADO 1500 LT DOUBLE CAB", + "SILVERADO 1500 LT EXT CAB", + "SILVERADO 1500 LT TRAIL CC", + "SILVERADO 1500 LT TRAIL DC", + "SILVERADO 1500 LTZ CREW CAB", + "SILVERADO 1500 LTZ DOUBLE CAB", + "SILVERADO 1500 LTZ EXT CAB", + "SILVERADO 1500 RST CREW CAB", + "SILVERADO 1500 RST DOUBLE CAB", + "SILVERADO 1500 SS EXT CAB", + "SILVERADO 1500 WT", + "SILVERADO 1500 WT CREW CAB", + "SILVERADO 1500 WT DOUBLE CAB", + "SILVERADO 1500 WT EXT CAB", + "SILVERADO 2500 EXT CAB", + "SILVERADO 2500 HD", + "SILVERADO 2500 HD CREW CAB", + "SILVERADO 2500 HD EXT CAB", + "SILVERADO 2500 HD HC CREW CAB", + "SILVERADO 2500 HD LS CREW CAB", + "SILVERADO 2500 HD LS EXT CAB", + "SILVERADO 2500 HD LT", + "SILVERADO 2500 HD LT CREW CAB", + "SILVERADO 2500 HD LT DBL CAB", + "SILVERADO 2500 HD LT EXT CAB", + "SILVERADO 2500 HD LTZ CREW CAB", + "SILVERADO 2500 HD LTZ DBL CAB", + "SILVERADO 2500 HD LTZ EXT CAB", + "SILVERADO 2500 HD WT", + "SILVERADO 2500 HD WT CREW CAB", + "SILVERADO 2500 HD WT DBL CAB", + "SILVERADO 2500 HD WT EXT CAB", + "SILVERADO 3500", + "SILVERADO 3500 CREW CAB", + "SILVERADO 3500 CREW CAB (AMAL)", + "SILVERADO 3500 EXT CAB", + "SILVERADO 3500 HC CREW CAB", + "SILVERADO 3500 HD (AMALGAMATE)", + "SILVERADO 3500 LS", + "SILVERADO 3500 LS CREW CAB", + "SILVERADO 3500 LS EXT CAB", + "SILVERADO 3500 LT CREW CAB", + "SILVERADO 3500 LT DOUBLE CAB", + "SILVERADO 3500 LT EXT CAB", + "SILVERADO 3500 LTZ CREW CAB", + "SILVERADO 3500 LTZ EXT CAB", + "SILVERADO 3500 WT CREW CAB", + "Silverado 3500HD", + + "B250 SPORTSMAN", + + "DAKOTA CLUB CAB", + "DAKOTA LARAMIE V8 CLUB CAB", + "DAKOTA LARAMIE V8 QUAD CAB", + "DAKOTA QUAD CAB", + "DAKOTA SLT CREW CAB", + "DAKOTA SLT EXT CAB", + "DAKOTA SLT PLUS QUAD CAB", + "DAKOTA SLT PLUS V8 CLUB CAB", + "DAKOTA SLT PLUS V8 QUAD CAB", + "DAKOTA SLT QUAD CAB", + "DAKOTA SLT V8 CLUB CAB", + "DAKOTA SLT V8 CREW CAB", + "DAKOTA SLT V8 EXT CAB", + "DAKOTA SLT V8 QUAD CAB", + "DAKOTA SPORT V8", + "DAKOTA SPORT V8 CLUB CAB", + "DAKOTA SPORT V8 QUAD CAB", + "DAKOTA ST CLUB CAB", + "DAKOTA ST QUAD CAB", + "DAKOTA ST V8 QUAD CAB", + "DAKOTA SXT CREW CAB", + "DAKOTA SXT EXT CAB", + "DAKOTA SXT V8 CREW CAB", + "DAKOTA SXT V8 EXT CAB", + "DAKOTA V8 CLUB CAB", + "DAKOTA V8 QUAD CAB", + + "RAM 1500", + "RAM 1500 BIG HORN CREW CAB", + "RAM 1500 BIG HORN QUAD CAB", + "RAM 1500 CLUB CAB", + "RAM 1500 CREW CAB (AMALGAMATE)", + "RAM 1500 EXPRESS", + "RAM 1500 LARAMIE CREW (AMALGA)", + "RAM 1500 LARAMIE CREW CAB", + "RAM 1500 LARAMIE LONGHORN CREW", + "RAM 1500 LARAMIE MEGA CAB", + "RAM 1500 LARAMIE QUAD CAB", + "RAM 1500 LARAMIE SLT QUAD CAB", + "RAM 1500 LIMITED CREW CAB", + "RAM 1500 LONGHORN CREW CAB", + "RAM 1500 OUTDOORSMAN CREW CAB", + "RAM 1500 OUTDOORSMAN QC (AMAL)", + "RAM 1500 OUTDOORSMAN QUAD CAB", + "RAM 1500 QUAD CAB", + "RAM 1500 R/T", + "RAM 1500 REBEL CREW CAB", + "RAM 1500 REBEL QUAD CAB", + "RAM 1500 SLT", + "RAM 1500 SLT CREW (AMALGAMATE)", + "RAM 1500 SLT CREW CAB", + "RAM 1500 SLT MEGA CAB", + "RAM 1500 SLT QUAD (AMALGAMATE)", + "RAM 1500 SLT QUAD CAB", + "RAM 1500 SPORT", + "RAM 1500 SPORT CLUB CAB", + "RAM 1500 SPORT CREW CAB", + "RAM 1500 SPORT CREW CAB (AMAL)", + "RAM 1500 SPORT QUAD CAB", + "RAM 1500 ST", + "RAM 1500 ST CREW CAB", + "RAM 1500 ST QUAD CAB", + "RAM 1500 SXT CREW CAB", + "RAM 1500 SXT QUAD CAB", + "RAM 1500 TRADESMAN CREW CAB", + "RAM 1500 TRADESMAN QUAD CAB", + "RAM 1500 TRX QUAD CAB", + "RAM 2500", + "RAM 2500 BIG HORN CREW CAB", + "RAM 2500 BIG HORN MEGA CAB", + "RAM 2500 CLUB CAB", + "RAM 2500 LARAMIE CREW CAB", + "RAM 2500 LARAMIE LONGHORN CREW", + "RAM 2500 LARAMIE LONGHORN MEGA", + "RAM 2500 LARAMIE MEGA CAB", + "RAM 2500 LARAMIE QUAD CAB", + "RAM 2500 LARAMIE SLT", + "RAM 2500 LARAMIE SLT QUAD CAB", + "RAM 2500 LIMITED CREW CAB", + "RAM 2500 OUTDOORSMAN CREW CAB", + "RAM 2500 POWER WAGON CREW CAB", + "RAM 2500 QUAD CAB", + "RAM 2500 SLT", + "RAM 2500 SLT CREW CAB", + "RAM 2500 SLT MEGA CAB", + "RAM 2500 SLT QUAD CAB", + "RAM 2500 SLT QUAD CAB (AMALGA)", + "RAM 2500 SPORT QUAD CAB", + "RAM 2500 ST", + "RAM 2500 ST CREW CAB", + "RAM 2500 ST QUAD CAB", + "RAM 2500 SXT QUAD CAB", + "RAM 2500 TRADESMAN", + "RAM 2500 TRADESMAN CREW CAB", + "RAM 2500 TRX CREW CAB", + "RAM 2500 TRX QUAD CAB", + "RAM 3500", + "RAM 3500 4WD", + "RAM 3500 BIG HORN CREW CAB", + "RAM 3500 CREW CAB", + "RAM 3500 CREW CAB (AMALGAMATE)", + "RAM 3500 LARAMIE CREW CAB", + "RAM 3500 LARAMIE LONGHORN CREW", + "RAM 3500 LARAMIE LONGHORN MEGA", + "RAM 3500 LARAMIE MEGA CAB", + "RAM 3500 LARAMIE QUAD CAB", + "RAM 3500 LARAMIE SLT", + "RAM 3500 LARAMIE SLT QUAD CAB", + "RAM 3500 LIMITED MEGA CAB", + "RAM 3500 LONGHORN CREW CAB", + "RAM 3500 QUAD CAB", + "RAM 3500 SLT", + "RAM 3500 SLT CREW CAB", + "RAM 3500 SLT MEGA CAB", + "RAM 3500 SLT QUAD CAB", + "RAM 3500 SPORT QUAD CAB", + "RAM 3500 ST", + "RAM 3500 ST CREW CAB", + "RAM 3500 ST QUAD CAB", + "RAM 3500 TRX QUAD CAB", + "RAM 4500", + "RAM 4500 CREW CAB", + "RAM 5500", + "RAM 5500 CREW CAB", + "W250 TURBO DIESEL", + + "C Series 5500", + "C/R 1500 4+CAB", + "C/R 1500 PICKUP", + "C/R 1500 SIERRA SL EXT CAB", + "C/R 3500", + "C/R 3500 PICKUP", + "CANYON ALL TERRAIN CREW CAB", + "CANYON CREW CAB", + "CANYON DENALI CREW CAB", + "CANYON EXT CAB", + "CANYON SL", + "CANYON SL EXT CAB", + "CANYON SLE", + "CANYON SLE CREW CAB", + "CANYON SLE EXT CAB", + "CANYON SLT CREW CAB", + "CANYON SLT CREW CAB (AMALGAMA)", + "K/V 1500 4+CAB", + "K/V 1500 PICKUP", + "K/V 2500 4+CAB", + "K/V 2500 PICKUP", + "K/V 3500 SIERRA SL CREW CAB", + "K/V 3500 SIERRA SLE CREW CAB", + "SIERRA 1500 AT4 CREW CAB", + "SIERRA 1500 AT4 DOUBLE CAB", + "SIERRA 1500 CREW CAB", + "SIERRA 1500 CREW CAB (AMALGAM)", + "SIERRA 1500 DENALI CREW CAB", + "SIERRA 1500 DENALI EXT CAB", + "SIERRA 1500 DOUBLE CAB", + "SIERRA 1500 ELEVATION CREW CAB", + "SIERRA 1500 ELEVATION DC", + "SIERRA 1500 EXT CAB", + "SIERRA 1500 HD CREW CAB", + "SIERRA 1500 HD SLE CREW CAB", + "SIERRA 1500 HD SLT CREW CAB", + "SIERRA 1500 NEVADA EDITION", + "SIERRA 1500 PICKUP", + "SIERRA 1500 SL CREW CAB", + "SIERRA 1500 SL EXT CAB", + "SIERRA 1500 SL PICKUP", + "SIERRA 1500 SLE CREW CAB", + "SIERRA 1500 SLE DC (AMALGAMAT)", + "SIERRA 1500 SLE DOUBLE CAB", + "SIERRA 1500 SLE EXT CAB", + "SIERRA 1500 SLE EXT CAB (AMAL)", + "SIERRA 1500 SLE PICKUP", + "SIERRA 1500 SLT CREW (AMALGAM)", + "SIERRA 1500 SLT CREW CAB", + "SIERRA 1500 SLT DOUBLE CAB", + "SIERRA 1500 SLT EXT CAB", + "SIERRA 1500 WT CREW CAB", + "SIERRA 1500 WT EXT CAB", + "SIERRA 1500 WT PICKUP", + "SIERRA 2500 EXT CAB", + "SIERRA 2500 HD AT4 CREW CAB", + "SIERRA 2500 HD CREW CAB", + "SIERRA 2500 HD DENALI CREW CAB", + "SIERRA 2500 HD DOUBLE CAB", + "SIERRA 2500 HD EXT CAB", + "SIERRA 2500 HD PICKUP", + "SIERRA 2500 HD SL EXT CAB", + "SIERRA 2500 HD SL PICKUP", + "SIERRA 2500 HD SLE CREW CAB", + "SIERRA 2500 HD SLE DOUBLE CAB", + "SIERRA 2500 HD SLE EXT CAB", + "SIERRA 2500 HD SLE PICKUP", + "SIERRA 2500 HD SLT CREW CAB", + "SIERRA 2500 HD SLT DOUBLE CAB", + "SIERRA 2500 HD SLT EXT CAB", + "SIERRA 2500 HD WT CREW CAB", + "SIERRA 2500 HD WT DOUBLE CAB", + "SIERRA 2500 HD WT EXT CAB", + "SIERRA 2500 HD WT PICKUP", + "SIERRA 2500 SLE EXT CAB", + "SIERRA 3500 AT4 CREW CAB", + "SIERRA 3500 CREW CAB", + "SIERRA 3500 DENALI CREW CAB", + "SIERRA 3500 EXT CAB", + "SIERRA 3500 PICKUP", + "SIERRA 3500 SL CREW CAB", + "SIERRA 3500 SLE", + "SIERRA 3500 SLE CREW CAB", + "SIERRA 3500 SLE EXT CAB", + "SIERRA 3500 SLT CREW CAB", + "SIERRA 3500 WT CREW CAB", + "SONOMA", + "SONOMA CREW CAB", + "SONOMA EXT CAB", + + "1500", + "1500 Classic", + "Pickup 1500", + "Pickup 3500", + "ProMaster 1500", + + "RIDGELINE", + "RIDGELINE BLACK EDITION", + "RIDGELINE DX", + "RIDGELINE EX-L", + "RIDGELINE LX", + "RIDGELINE RT", + "RIDGELINE RTL", + "RIDGELINE RTS", + "RIDGELINE RTX", + "RIDGELINE SE", + "RIDGELINE SPORT", + "RIDGELINE TOURING", + "RIDGELINE VP", + + "TITAN", + "TACOMA", + "TUNDRA", + "AVALANCE", + "COLORADO", + "SILVERADO", + "SILVERADO 1500", + "SILVERADO 2500", + "SILVERADO 3500", + "DAKOTA", + "RAM 1500", + "RAM 2500", + "RAM 3500", + "RAM 4500", + "RAM 5500", + "CANYON", + "SIERRA 1500", + "SIERRA 2500", + "SIERRA 3500", + "SONOMA", + "1500" +] diff --git a/serverless/src/lib/vehicleTypes/vehicleType.js b/serverless/src/lib/vehicleTypes/vehicleType.js new file mode 100644 index 0000000..dde4317 --- /dev/null +++ b/serverless/src/lib/vehicleTypes/vehicleType.js @@ -0,0 +1,18 @@ +const TrucksList = require("./trucks.json"); +const CargoVanList = require("./cargovans.json"); +const PassengerVanList = require("./passengervans.json"); +const SuvList = require("./suvs.json"); + +function getVehicleType(model) { + const inTrucks = TrucksList.includes(model.toUpperCase()); + const inPV = PassengerVanList.includes(model.toUpperCase()); + const inSuv = SuvList.includes(model.toUpperCase()); + const inCv = CargoVanList.includes(model.toUpperCase()); + + if (inTrucks) return { type: "TK", match: true }; + else if (inPV) return { type: "PC", match: true }; + else if (inSuv) return { type: "SUV", match: true }; + else if (inCv) return { type: "VN", match: true }; + else return { type: "PC", match: false }; +} +exports.getVehicleType = getVehicleType; \ No newline at end of file diff --git a/src/main/estimate-scrubber/es-transformer.ts b/src/main/estimate-scrubber/es-transformer.ts index 0c1d493..f48440e 100644 --- a/src/main/estimate-scrubber/es-transformer.ts +++ b/src/main/estimate-scrubber/es-transformer.ts @@ -1,10 +1,7 @@ +import dayjs from "dayjs"; +import _ from "lodash"; import { RawJobDataObject } from "../decoder/decoder"; import { ESJobObject } from "./es-job-object.interface"; -import _ from "lodash"; -import dayjas from "dayjs"; -import dayjs from "dayjs"; -import axios from "axios"; -const sendingEntityId = "87330f61-412b-4251-baaa-d026565b23c5"; async function TransformJobForEstimateScrubber( job: RawJobDataObject, @@ -194,11 +191,11 @@ async function TransformJobForEstimateScrubber( //Add the ES Objects. - const vehType: string = ( - await axios.post(`https://api.test.imex.online/es/vehicletype`, { - model: job.v_model_desc, - }) - ).data?.type; + // const vehType: string = ( + // await axios.post(`https://api.test.imex.online/es/vehicletype`, { + // model: job.v_model_desc, + // }) + // ).data?.type; return { //TODO: Remove hard coded values @@ -207,12 +204,12 @@ async function TransformJobForEstimateScrubber( impact_2: job.area_of_damage?.impact2, close_date: null, created_at: dayjs().toISOString(), - id: "c478593b-58a2-4bab-b7c7-2df19a257b2b", + id: "00000000-0000-0000-0000-000000000000", //Placeholder ID // group: "Group 10", // group_verified: false, updated_at: dayjs().toISOString(), - v_age: 20, //Needed? RPS calc. - v_type: "PC", // need to get from API. + v_age: -1, //Needed? RPS calc. + v_type: "TBD", // need to get from API. v_makedesc: job.v_make_desc, v_model: job.v_model_desc, rates, @@ -221,13 +218,13 @@ async function TransformJobForEstimateScrubber( ro_number: null, requires_reimport: false, v_mileage: job.kmin?.toString() || "", - sending_entity_id: sendingEntityId, + sending_entity_id: "", sending_entity_accept_terms_of_use: true, association_switch: "ATAM", //TODO: This needs to be updated , rf_ph1: "2043792253", //TODO - is this needed anymore? rf_zip: "R0G 1Z0", //TODO - is this needed anymore? g_ttl_amt: job.clm_total, - source_system: job.est_system || "M", //TODO - pull this. + source_system: job.est_system || "M", joblines: job.joblines?.data?.map((line) => ({ ..._.omit(line, [ "lbr_tax", diff --git a/src/main/estimate-scrubber/estimate-scrubber.ts b/src/main/estimate-scrubber/estimate-scrubber.ts index 28ac2d3..422fea5 100644 --- a/src/main/estimate-scrubber/estimate-scrubber.ts +++ b/src/main/estimate-scrubber/estimate-scrubber.ts @@ -48,19 +48,23 @@ async function ScrubEstimate({ //Scrub Estimate Transformer. Original schema kept to keep data in line with ImEX standards. const transformedJob = await TransformJobForEstimateScrubber(job); - const basicAuthUser = "Imex2"; - const basicAuthpassword = "Patrick"; + const currentChannel = autoUpdater.channel; let estimateScrubberUrl: string; switch (currentChannel) { + case null: + case "dev": + estimateScrubberUrl = "https://dev.es.imex.online/scrub"; //dev specific URL. + break; case "alpha": - estimateScrubberUrl = "https://4284-79287.el-alt.com"; //dev specific URL. + estimateScrubberUrl = "https://alpha.es.imex.online/scrub"; //dev specific URL. break; case "beta": - estimateScrubberUrl = "https://4284-79073.el-alt.com"; //Beta specific URL. + estimateScrubberUrl = "https://beta.es.imex.online/scrub"; //Beta specific URL. break; + case "latest": default: - estimateScrubberUrl = "https://insurtechtoolkit.com"; //Production route. + estimateScrubberUrl = "https://es.imex.online/scrub"; //Production route. break; } @@ -84,30 +88,14 @@ async function ScrubEstimate({ // Continue with the rest of the function even if this fails } - const formData = new FormData(); - const jsonString = JSON.stringify(transformedJob); - formData.append( - "file", - new Blob([jsonString], { type: "application/json" }), - `${fileName}.json`, - ); + const result = await axios.post(estimateScrubberUrl, { + esApiKey, + estimate: transformedJob, + fileName, + }); - const result = await axios.post( - `${estimateScrubberUrl}/api/sendems`, - formData, - { - auth: { - username: basicAuthUser, - password: basicAuthpassword, - }, - headers: { - APIkey: esApiKey, - }, - }, - ); + const { resultPDFUrl, reportIssueUrl } = result?.data ?? {}; - const resultPDFUrl = result?.data?.report_link; - const reportIssueUrl = `https://insurtechtoolkit.com/pcontactUs.aspx?apiKey=${esApiKey}&file=${fileName}.json`; // log.log("Estimate Scrubber Result:", result.data, resultPDFUrl); // const b = BrowserWindow.getAllWindows()[0]; // b.webContents.send(ipcTypes.app.toRenderer.scrubResults, {