diff --git a/mail-vue/index.html b/mail-vue/index.html
index b809f6a..7a750f0 100644
--- a/mail-vue/index.html
+++ b/mail-vue/index.html
@@ -5,7 +5,7 @@
-
+
@@ -1492,6 +1538,16 @@ function editSetting(settingForm, refreshStatus = true) {
width: fit-content !important;
}
+.s3-button {
+ display: grid;
+ grid-template-columns: 80px 1fr;
+ gap: 15px;
+
+ .el-button {
+ margin-left: 0;
+ }
+}
+
.r2domain {
display: grid;
grid-template-columns: 1fr auto;
@@ -1523,6 +1579,10 @@ function editSetting(settingForm, refreshStatus = true) {
}
}
+.dialog-input {
+ margin-bottom: 15px;
+}
+
.concerning-item {
display: flex;
align-items: center;
diff --git a/mail-vue/vite.config.js b/mail-vue/vite.config.js
index f33dc16..8363737 100644
--- a/mail-vue/vite.config.js
+++ b/mail-vue/vite.config.js
@@ -17,8 +17,9 @@ export default defineConfig(({mode}) => {
base: env.VITE_STATIC_URL || '/',
plugins: [vue(),
VitePWA({
- registerType: 'autoUpdate', // 配置 service worker 的注册方式
- includeAssets: ['favicon.svg', 'robots.txt'], // 指定需要包含的静态资源
+ registerType: 'autoUpdate',
+
+ includeAssets: ['favicon.svg', 'robots.txt'],
manifest: {
name: 'Cloud Mail',
short_name: 'Cloud Mail',
@@ -26,14 +27,26 @@ export default defineConfig(({mode}) => {
theme_color: '#FFFFFF',
icons: [
{
- src: 'mail-192.png',//像素尺寸一定要对应
+ src: 'mail-192.png',
sizes: '192x192',
type: 'image/png',
},
+ {
+ src: 'mail-512.png',
+ sizes: '512x512',
+ type: 'image/png'
+ },
{
src: 'mail-512.png',
sizes: '512x512',
type: 'image/png',
+ purpose: 'any'
+ },
+ {
+ src: 'mail-512.png',
+ sizes: '512x512',
+ type: 'image/png',
+ purpose: 'maskable'
},
],
},
diff --git a/mail-worker/package-lock.json b/mail-worker/package-lock.json
index 9ea1061..e8c6701 100644
--- a/mail-worker/package-lock.json
+++ b/mail-worker/package-lock.json
@@ -8,6 +8,7 @@
"name": "mail-worker",
"version": "0.0.0",
"dependencies": {
+ "@aws-sdk/client-s3": "^3.879.0",
"@cloudflare/vite-plugin": "1.6.0",
"dayjs": "^1.11.13",
"drizzle-orm": "^0.42.0",
@@ -25,6 +26,877 @@
"wrangler": "^4.7.0"
}
},
+ "node_modules/@aws-crypto/crc32": {
+ "version": "5.2.0",
+ "resolved": "https://registry.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.npmmirror.com/@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.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/client-s3/-/client-s3-3.879.0.tgz",
+ "integrity": "sha512-1bD2Do/OdCIzl72ncHKYamDhPijUErLYpuLvciyYD4Ywt4cVLHjWtVIqb22XOOHYYHE3NqHMd4uRhvXMlsBRoQ==",
+ "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.879.0",
+ "@aws-sdk/credential-provider-node": "3.879.0",
+ "@aws-sdk/middleware-bucket-endpoint": "3.873.0",
+ "@aws-sdk/middleware-expect-continue": "3.873.0",
+ "@aws-sdk/middleware-flexible-checksums": "3.879.0",
+ "@aws-sdk/middleware-host-header": "3.873.0",
+ "@aws-sdk/middleware-location-constraint": "3.873.0",
+ "@aws-sdk/middleware-logger": "3.876.0",
+ "@aws-sdk/middleware-recursion-detection": "3.873.0",
+ "@aws-sdk/middleware-sdk-s3": "3.879.0",
+ "@aws-sdk/middleware-ssec": "3.873.0",
+ "@aws-sdk/middleware-user-agent": "3.879.0",
+ "@aws-sdk/region-config-resolver": "3.873.0",
+ "@aws-sdk/signature-v4-multi-region": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-endpoints": "3.879.0",
+ "@aws-sdk/util-user-agent-browser": "3.873.0",
+ "@aws-sdk/util-user-agent-node": "3.879.0",
+ "@aws-sdk/xml-builder": "3.873.0",
+ "@smithy/config-resolver": "^4.1.5",
+ "@smithy/core": "^3.9.0",
+ "@smithy/eventstream-serde-browser": "^4.0.5",
+ "@smithy/eventstream-serde-config-resolver": "^4.1.3",
+ "@smithy/eventstream-serde-node": "^4.0.5",
+ "@smithy/fetch-http-handler": "^5.1.1",
+ "@smithy/hash-blob-browser": "^4.0.5",
+ "@smithy/hash-node": "^4.0.5",
+ "@smithy/hash-stream-node": "^4.0.5",
+ "@smithy/invalid-dependency": "^4.0.5",
+ "@smithy/md5-js": "^4.0.5",
+ "@smithy/middleware-content-length": "^4.0.5",
+ "@smithy/middleware-endpoint": "^4.1.19",
+ "@smithy/middleware-retry": "^4.1.20",
+ "@smithy/middleware-serde": "^4.0.9",
+ "@smithy/middleware-stack": "^4.0.5",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/node-http-handler": "^4.1.1",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.27",
+ "@smithy/util-defaults-mode-node": "^4.0.27",
+ "@smithy/util-endpoints": "^3.0.7",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-retry": "^4.0.7",
+ "@smithy/util-stream": "^4.2.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "@smithy/util-waiter": "^4.0.7",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-s3/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/client-sso/-/client-sso-3.879.0.tgz",
+ "integrity": "sha512-+Pc3OYFpRYpKLKRreovPM63FPPud1/SF9vemwIJfz6KwsBCJdvg7vYD1xLSIp5DVZLeetgf4reCyAA5ImBfZuw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/middleware-host-header": "3.873.0",
+ "@aws-sdk/middleware-logger": "3.876.0",
+ "@aws-sdk/middleware-recursion-detection": "3.873.0",
+ "@aws-sdk/middleware-user-agent": "3.879.0",
+ "@aws-sdk/region-config-resolver": "3.873.0",
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-endpoints": "3.879.0",
+ "@aws-sdk/util-user-agent-browser": "3.873.0",
+ "@aws-sdk/util-user-agent-node": "3.879.0",
+ "@smithy/config-resolver": "^4.1.5",
+ "@smithy/core": "^3.9.0",
+ "@smithy/fetch-http-handler": "^5.1.1",
+ "@smithy/hash-node": "^4.0.5",
+ "@smithy/invalid-dependency": "^4.0.5",
+ "@smithy/middleware-content-length": "^4.0.5",
+ "@smithy/middleware-endpoint": "^4.1.19",
+ "@smithy/middleware-retry": "^4.1.20",
+ "@smithy/middleware-serde": "^4.0.9",
+ "@smithy/middleware-stack": "^4.0.5",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/node-http-handler": "^4.1.1",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.27",
+ "@smithy/util-defaults-mode-node": "^4.0.27",
+ "@smithy/util-endpoints": "^3.0.7",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-retry": "^4.0.7",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/core": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/core/-/core-3.879.0.tgz",
+ "integrity": "sha512-AhNmLCrx980LsK+SfPXGh7YqTyZxsK0Qmy18mWmkfY0TSq7WLaSDB5zdQbgbnQCACCHy8DUYXbi4KsjlIhv3PA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/xml-builder": "3.873.0",
+ "@smithy/core": "^3.9.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/signature-v4": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-utf8": "^4.0.0",
+ "fast-xml-parser": "5.2.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-env/-/credential-provider-env-3.879.0.tgz",
+ "integrity": "sha512-JgG7A8SSbr5IiCYL8kk39Y9chdSB5GPwBorDW8V8mr19G9L+qd6ohED4fAocoNFaDnYJ5wGAHhCfSJjzcsPBVQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-http": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-http/-/credential-provider-http-3.879.0.tgz",
+ "integrity": "sha512-2hM5ByLpyK+qORUexjtYyDZsgxVCCUiJQZRMGkNXFEGz6zTpbjfTIWoh3zRgWHEBiqyPIyfEy50eIF69WshcuA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/fetch-http-handler": "^5.1.1",
+ "@smithy/node-http-handler": "^4.1.1",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-stream": "^4.2.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.879.0.tgz",
+ "integrity": "sha512-07M8zfb73KmMBqVO5/V3Ea9kqDspMX0fO0kaI1bsjWI6ngnMye8jCE0/sIhmkVAI0aU709VA0g+Bzlopnw9EoQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/credential-provider-env": "3.879.0",
+ "@aws-sdk/credential-provider-http": "3.879.0",
+ "@aws-sdk/credential-provider-process": "3.879.0",
+ "@aws-sdk/credential-provider-sso": "3.879.0",
+ "@aws-sdk/credential-provider-web-identity": "3.879.0",
+ "@aws-sdk/nested-clients": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/credential-provider-imds": "^4.0.7",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-node/-/credential-provider-node-3.879.0.tgz",
+ "integrity": "sha512-FYaAqJbnSTrVL2iZkNDj2hj5087yMv2RN2GA8DJhe7iOJjzhzRojrtlfpWeJg6IhK0sBKDH+YXbdeexCzUJvtA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.879.0",
+ "@aws-sdk/credential-provider-http": "3.879.0",
+ "@aws-sdk/credential-provider-ini": "3.879.0",
+ "@aws-sdk/credential-provider-process": "3.879.0",
+ "@aws-sdk/credential-provider-sso": "3.879.0",
+ "@aws-sdk/credential-provider-web-identity": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/credential-provider-imds": "^4.0.7",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-process/-/credential-provider-process-3.879.0.tgz",
+ "integrity": "sha512-7r360x1VyEt35Sm1JFOzww2WpnfJNBbvvnzoyLt7WRfK0S/AfsuWhu5ltJ80QvJ0R3AiSNbG+q/btG2IHhDYPQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.879.0.tgz",
+ "integrity": "sha512-gd27B0NsgtKlaPNARj4IX7F7US5NuU691rGm0EUSkDsM7TctvJULighKoHzPxDQlrDbVI11PW4WtKS/Zg5zPlQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.879.0",
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/token-providers": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.879.0.tgz",
+ "integrity": "sha512-Jy4uPFfGzHk1Mxy+/Wr43vuw9yXsE2yiF4e4598vc3aJfO0YtA2nSfbKD3PNKRORwXbeKqWPfph9SCKQpWoxEg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/nested-clients": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-bucket-endpoint": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.873.0.tgz",
+ "integrity": "sha512-b4bvr0QdADeTUs+lPc9Z48kXzbKHXQKgTvxx/jXDgSW9tv4KmYPO1gIj6Z9dcrBkRWQuUtSW3Tu2S5n6pe+zeg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-arn-parser": "3.873.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-config-provider": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-expect-continue": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.873.0.tgz",
+ "integrity": "sha512-GIqoc8WgRcf/opBOZXFLmplJQKwOMjiOMmDz9gQkaJ8FiVJoAp8EGVmK2TOWZMQUYsavvHYsHaor5R2xwPoGVg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-flexible-checksums": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.879.0.tgz",
+ "integrity": "sha512-U1rcWToy2rlQPQLsx5h73uTC1XYo/JpnlJGCc3Iw7b1qrK8Mke4+rgMPKCfnXELD5TTazGrbT03frxH4Y1Ycvw==",
+ "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.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/is-array-buffer": "^4.0.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-stream": "^4.2.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-host-header/-/middleware-host-header-3.873.0.tgz",
+ "integrity": "sha512-KZ/W1uruWtMOs7D5j3KquOxzCnV79KQW9MjJFZM/M0l6KI8J6V3718MXxFHsTjUE4fpdV6SeCNLV1lwGygsjJA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-location-constraint": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.873.0.tgz",
+ "integrity": "sha512-r+hIaORsW/8rq6wieDordXnA/eAu7xAPLue2InhoEX6ML7irP52BgiibHLpt9R0psiCzIHhju8qqKa4pJOrmiw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.876.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-logger/-/middleware-logger-3.876.0.tgz",
+ "integrity": "sha512-cpWJhOuMSyz9oV25Z/CMHCBTgafDCbv7fHR80nlRrPdPZ8ETNsahwRgltXP1QJJ8r3X/c1kwpOR7tc+RabVzNA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.873.0.tgz",
+ "integrity": "sha512-OtgY8EXOzRdEWR//WfPkA/fXl0+WwE8hq0y9iw2caNyKPtca85dzrrZWnPqyBK/cpImosrpR1iKMYr41XshsCg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-sdk-s3": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.879.0.tgz",
+ "integrity": "sha512-ZTpLr2AbZcCsEzu18YCtB8Tp8tjAWHT0ccfwy3HiL6g9ncuSMW+7BVi1hDYmBidFwpPbnnIMtM0db3pDMR6/WA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-arn-parser": "3.873.0",
+ "@smithy/core": "^3.9.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/signature-v4": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-stream": "^4.2.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-ssec": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-ssec/-/middleware-ssec-3.873.0.tgz",
+ "integrity": "sha512-AF55J94BoiuzN7g3hahy0dXTVZahVi8XxRBLgzNp6yQf0KTng+hb/V9UQZVYY1GZaDczvvvnqC54RGe9OZZ9zQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.879.0.tgz",
+ "integrity": "sha512-DDSV8228lQxeMAFKnigkd0fHzzn5aauZMYC3CSj6e5/qE7+9OwpkUcjHfb7HZ9KWG6L2/70aKZXHqiJ4xKhOZw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-endpoints": "3.879.0",
+ "@smithy/core": "^3.9.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/nested-clients": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/nested-clients/-/nested-clients-3.879.0.tgz",
+ "integrity": "sha512-7+n9NpIz9QtKYnxmw1fHi9C8o0GrX8LbBR4D50c7bH6Iq5+XdSuL5AFOWWQ5cMD0JhqYYJhK/fJsVau3nUtC4g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "5.2.0",
+ "@aws-crypto/sha256-js": "5.2.0",
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/middleware-host-header": "3.873.0",
+ "@aws-sdk/middleware-logger": "3.876.0",
+ "@aws-sdk/middleware-recursion-detection": "3.873.0",
+ "@aws-sdk/middleware-user-agent": "3.879.0",
+ "@aws-sdk/region-config-resolver": "3.873.0",
+ "@aws-sdk/types": "3.862.0",
+ "@aws-sdk/util-endpoints": "3.879.0",
+ "@aws-sdk/util-user-agent-browser": "3.873.0",
+ "@aws-sdk/util-user-agent-node": "3.879.0",
+ "@smithy/config-resolver": "^4.1.5",
+ "@smithy/core": "^3.9.0",
+ "@smithy/fetch-http-handler": "^5.1.1",
+ "@smithy/hash-node": "^4.0.5",
+ "@smithy/invalid-dependency": "^4.0.5",
+ "@smithy/middleware-content-length": "^4.0.5",
+ "@smithy/middleware-endpoint": "^4.1.19",
+ "@smithy/middleware-retry": "^4.1.20",
+ "@smithy/middleware-serde": "^4.0.9",
+ "@smithy/middleware-stack": "^4.0.5",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/node-http-handler": "^4.1.1",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-body-length-node": "^4.0.0",
+ "@smithy/util-defaults-mode-browser": "^4.0.27",
+ "@smithy/util-defaults-mode-node": "^4.0.27",
+ "@smithy/util-endpoints": "^3.0.7",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-retry": "^4.0.7",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/region-config-resolver": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/region-config-resolver/-/region-config-resolver-3.873.0.tgz",
+ "integrity": "sha512-q9sPoef+BBG6PJnc4x60vK/bfVwvRWsPgcoQyIra057S/QGjq5VkjvNk6H8xedf6vnKlXNBwq9BaANBXnldUJg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/signature-v4-multi-region": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.879.0.tgz",
+ "integrity": "sha512-MDsw0EWOHyKac75X3gD8tLWtmPuRliS/s4IhWRhsdDCU13wewHIs5IlA5B65kT6ISf49yEIalEH3FHUSVqdmIQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-sdk-s3": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/signature-v4": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/token-providers/-/token-providers-3.879.0.tgz",
+ "integrity": "sha512-47J7sCwXdnw9plRZNAGVkNEOlSiLb/kR2slnDIHRK9NB/ECKsoqgz5OZQJ9E2f0yqOs8zSNJjn3T01KxpgW8Qw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/core": "3.879.0",
+ "@aws-sdk/nested-clients": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/types": {
+ "version": "3.862.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/types/-/types-3.862.0.tgz",
+ "integrity": "sha512-Bei+RL0cDxxV+lW2UezLbCYYNeJm6Nzee0TpW0FfyTRBhH9C1XQh4+x+IClriXvgBnRquTMMYsmJfvx8iyLKrg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-arn-parser": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/util-arn-parser/-/util-arn-parser-3.873.0.tgz",
+ "integrity": "sha512-qag+VTqnJWDn8zTAXX4wiVioa0hZDQMtbZcGRERVnLar4/3/VIKBhxX2XibNQXFu1ufgcRn4YntT/XEPecFWcg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/util-endpoints/-/util-endpoints-3.879.0.tgz",
+ "integrity": "sha512-aVAJwGecYoEmbEFju3127TyJDF9qJsKDUUTRMDuS8tGn+QiWQFnfInmbt+el9GU1gEJupNTXV+E3e74y51fb7A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "@smithy/util-endpoints": "^3.0.7",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-locate-window": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/util-locate-window/-/util-locate-window-3.873.0.tgz",
+ "integrity": "sha512-xcVhZF6svjM5Rj89T1WzkjQmrTF6dpR2UvIHPMTnSZoNe6CixejPZ6f0JJ2kAhO8H+dUHwNBlsUgOTIKiK/Syg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.873.0.tgz",
+ "integrity": "sha512-AcRdbK6o19yehEcywI43blIBhOCSo6UgyWcuOJX5CFF8k39xm1ILCjQlRRjchLAxWrm0lU0Q7XV90RiMMFMZtA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/types": "^4.3.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.879.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.879.0.tgz",
+ "integrity": "sha512-A5KGc1S+CJRzYnuxJQQmH1BtGsz46AgyHkqReKfGiNQA8ET/9y9LQ5t2ABqnSBHHIh3+MiCcQSkUZ0S3rTodrQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-sdk/middleware-user-agent": "3.879.0",
+ "@aws-sdk/types": "3.862.0",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/types": "^4.3.2",
+ "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.873.0",
+ "resolved": "https://registry.npmmirror.com/@aws-sdk/xml-builder/-/xml-builder-3.873.0.tgz",
+ "integrity": "sha512-kLO7k7cGJ6KaHiExSJWojZurF7SnGMDHXRuQunFnEoD0n1yB6Lqy/S/zHiQ7oJnBhPr9q0TW9qFkrsZb1Uc54w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/@babel/runtime": {
"version": "7.27.6",
"resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.27.6.tgz",
@@ -100,91 +972,6 @@
}
}
},
- "node_modules/@cloudflare/vite-plugin/node_modules/@cloudflare/workerd-darwin-64": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-darwin-64/-/workerd-darwin-64-1.20250722.0.tgz",
- "integrity": "sha512-FRCR39OBEXoNAExk0PjrNpnPXROzttVqDJhIt2OSkbMCDaLV9dKTKTse64600l6a6IoSISwUpZrQx8ANNr2ojA==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "peer": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/vite-plugin/node_modules/@cloudflare/workerd-darwin-arm64": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-darwin-arm64/-/workerd-darwin-arm64-1.20250722.0.tgz",
- "integrity": "sha512-ejUEIYTIDsbXPUS+hwh5W/HAJZZZyfvDG8d/IHEtMr0/u80+77QlcdnZcpGGuw9g8O8BiFb2+hBYIYcPSDqxhw==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "darwin"
- ],
- "peer": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/vite-plugin/node_modules/@cloudflare/workerd-linux-64": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-linux-64/-/workerd-linux-64-1.20250722.0.tgz",
- "integrity": "sha512-K+pPolaQGero4SpXq24HB5N+cC5/pVW1KlIVuNgl4Y3Yk7DRrSdGGrcPmrSbGecCD8atVPDfZZSrkg8J9+qJhQ==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "peer": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/vite-plugin/node_modules/@cloudflare/workerd-linux-arm64": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-linux-arm64/-/workerd-linux-arm64-1.20250722.0.tgz",
- "integrity": "sha512-3IT39Xp3SJVuZgMZx2A9fmlCWJt5dNqkYmvOCrTVgADPBhUlqQF9Xil4jnC2eCmxlTvjFaul4AWe9FFwWMuHEg==",
- "cpu": [
- "arm64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "linux"
- ],
- "peer": true,
- "engines": {
- "node": ">=16"
- }
- },
- "node_modules/@cloudflare/vite-plugin/node_modules/@cloudflare/workerd-windows-64": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/@cloudflare/workerd-windows-64/-/workerd-windows-64-1.20250722.0.tgz",
- "integrity": "sha512-uLHafix+pRwfRkn2bznuSB8LrFZS5XAmyAazsr9sftji8kxJegAhdmeT8CvR/TZICh8xCYpyUea86n5ZWaN+7A==",
- "cpu": [
- "x64"
- ],
- "license": "Apache-2.0",
- "optional": true,
- "os": [
- "win32"
- ],
- "peer": true,
- "engines": {
- "node": ">=16"
- }
- },
"node_modules/@cloudflare/vite-plugin/node_modules/cookie": {
"version": "0.7.2",
"resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.7.2.tgz",
@@ -333,28 +1120,6 @@
"ufo": "^1.6.1"
}
},
- "node_modules/@cloudflare/vite-plugin/node_modules/workerd": {
- "version": "1.20250722.0",
- "resolved": "https://registry.npmmirror.com/workerd/-/workerd-1.20250722.0.tgz",
- "integrity": "sha512-qw5mh14GhmLqQ5mIJBwfv2ZI3TLXNTxfw3Mr0Q6z5KcopOLMiq9IijS/NPwTjl0RaRBMPoEAtRvlLsg3RyUgqQ==",
- "hasInstallScript": true,
- "license": "Apache-2.0",
- "optional": true,
- "peer": true,
- "bin": {
- "workerd": "bin/workerd"
- },
- "engines": {
- "node": ">=16"
- },
- "optionalDependencies": {
- "@cloudflare/workerd-darwin-64": "1.20250722.0",
- "@cloudflare/workerd-darwin-arm64": "1.20250722.0",
- "@cloudflare/workerd-linux-64": "1.20250722.0",
- "@cloudflare/workerd-linux-arm64": "1.20250722.0",
- "@cloudflare/workerd-windows-64": "1.20250722.0"
- }
- },
"node_modules/@cloudflare/vite-plugin/node_modules/youch": {
"version": "3.3.4",
"resolved": "https://registry.npmmirror.com/youch/-/youch-3.3.4.tgz",
@@ -1729,6 +2494,754 @@
"url": "https://ko-fi.com/killymxi"
}
},
+ "node_modules/@smithy/abort-controller": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/abort-controller/-/abort-controller-4.0.5.tgz",
+ "integrity": "sha512-jcrqdTQurIrBbUm4W2YdLVMQDoL0sA9DTxYd2s+R/y+2U9NLOP7Xf/YqfSg1FZhlZIYEnvk2mwbyvIfdLEPo8g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/chunked-blob-reader": {
+ "version": "5.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz",
+ "integrity": "sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/chunked-blob-reader-native": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz",
+ "integrity": "sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-base64": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/config-resolver": {
+ "version": "4.1.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/config-resolver/-/config-resolver-4.1.5.tgz",
+ "integrity": "sha512-viuHMxBAqydkB0AfWwHIdwf/PRH2z5KHGUzqyRtS/Wv+n3IHI993Sk76VCA7dD/+GzgGOmlJDITfPcJC1nIVIw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-config-provider": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/core": {
+ "version": "3.9.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/core/-/core-3.9.0.tgz",
+ "integrity": "sha512-B/GknvCfS3llXd/b++hcrwIuqnEozQDnRL4sBmOac5/z/dr0/yG1PURNPOyU4Lsiy1IyTj8scPxVqRs5dYWf6A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/middleware-serde": "^4.0.9",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-body-length-browser": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-stream": "^4.2.4",
+ "@smithy/util-utf8": "^4.0.0",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/core/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@smithy/credential-provider-imds": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmmirror.com/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.7.tgz",
+ "integrity": "sha512-dDzrMXA8d8riFNiPvytxn0mNwR4B3h8lgrQ5UjAGu6T9z/kRg/Xncf4tEQHE/+t25sY8IH3CowcmWi+1U5B1Gw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-codec": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/eventstream-codec/-/eventstream-codec-4.0.5.tgz",
+ "integrity": "sha512-miEUN+nz2UTNoRYRhRqVTJCx7jMeILdAurStT2XoS+mhokkmz1xAPp95DFW9Gxt4iF2VBqpeF9HbTQ3kY1viOA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@aws-crypto/crc32": "5.2.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-hex-encoding": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-browser": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.5.tgz",
+ "integrity": "sha512-LCUQUVTbM6HFKzImYlSB9w4xafZmpdmZsOh9rIl7riPC3osCgGFVP+wwvYVw6pXda9PPT9TcEZxaq3XE81EdJQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-serde-universal": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-config-resolver": {
+ "version": "4.1.3",
+ "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.3.tgz",
+ "integrity": "sha512-yTTzw2jZjn/MbHu1pURbHdpjGbCuMHWncNBpJnQAPxOVnFUAbSIUSwafiphVDjNV93TdBJWmeVAds7yl5QCkcA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-node": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.5.tgz",
+ "integrity": "sha512-lGS10urI4CNzz6YlTe5EYG0YOpsSp3ra8MXyco4aqSkQDuyZPIw2hcaxDU82OUVtK7UY9hrSvgWtpsW5D4rb4g==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-serde-universal": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-serde-universal": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.5.tgz",
+ "integrity": "sha512-JFnmu4SU36YYw3DIBVao3FsJh4Uw65vVDIqlWT4LzR6gXA0F3KP0IXFKKJrhaVzCBhAuMsrUUaT5I+/4ZhF7aw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/eventstream-codec": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/fetch-http-handler": {
+ "version": "5.1.1",
+ "resolved": "https://registry.npmmirror.com/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.1.tgz",
+ "integrity": "sha512-61WjM0PWmZJR+SnmzaKI7t7G0UkkNFboDpzIdzSoy7TByUzlxo18Qlh9s71qug4AY4hlH/CwXdubMtkcNEb/sQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/querystring-builder": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-base64": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-blob-browser": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.5.tgz",
+ "integrity": "sha512-F7MmCd3FH/Q2edhcKd+qulWkwfChHbc9nhguBlVjSUE6hVHhec3q6uPQ+0u69S6ppvLtR3eStfCuEKMXBXhvvA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/chunked-blob-reader": "^5.0.0",
+ "@smithy/chunked-blob-reader-native": "^4.0.0",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-node": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/hash-node/-/hash-node-4.0.5.tgz",
+ "integrity": "sha512-cv1HHkKhpyRb6ahD8Vcfb2Hgz67vNIXEp2vnhzfxLFGRukLCNEA5QdsorbUEzXma1Rco0u3rx5VTqbM06GcZqQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-stream-node": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/hash-stream-node/-/hash-stream-node-4.0.5.tgz",
+ "integrity": "sha512-IJuDS3+VfWB67UC0GU0uYBG/TA30w+PlOaSo0GPm9UHS88A6rCP6uZxNjNYiyRtOcjv7TXn/60cW8ox1yuZsLg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/invalid-dependency": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/invalid-dependency/-/invalid-dependency-4.0.5.tgz",
+ "integrity": "sha512-IVnb78Qtf7EJpoEVo7qJ8BEXQwgC4n3igeJNNKEj/MLYtapnx8A67Zt/J3RXAj2xSO1910zk0LdFiygSemuLow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/is-array-buffer": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz",
+ "integrity": "sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/md5-js": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/md5-js/-/md5-js-4.0.5.tgz",
+ "integrity": "sha512-8n2XCwdUbGr8W/XhMTaxILkVlw2QebkVTn5tm3HOcbPbOpWg89zr6dPXsH8xbeTsbTXlJvlJNTQsKAIoqQGbdA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-content-length": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/middleware-content-length/-/middleware-content-length-4.0.5.tgz",
+ "integrity": "sha512-l1jlNZoYzoCC7p0zCtBDE5OBXZ95yMKlRlftooE5jPWQn4YBPLgsp+oeHp7iMHaTGoUdFqmHOPa8c9G3gBsRpQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-endpoint": {
+ "version": "4.1.19",
+ "resolved": "https://registry.npmmirror.com/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.19.tgz",
+ "integrity": "sha512-EAlEPncqo03siNZJ9Tm6adKCQ+sw5fNU8ncxWwaH0zTCwMPsgmERTi6CEKaermZdgJb+4Yvh0NFm36HeO4PGgQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.9.0",
+ "@smithy/middleware-serde": "^4.0.9",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "@smithy/url-parser": "^4.0.5",
+ "@smithy/util-middleware": "^4.0.5",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-retry": {
+ "version": "4.1.20",
+ "resolved": "https://registry.npmmirror.com/@smithy/middleware-retry/-/middleware-retry-4.1.20.tgz",
+ "integrity": "sha512-T3maNEm3Masae99eFdx1Q7PIqBBEVOvRd5hralqKZNeIivnoGNx5OFtI3DiZ5gCjUkl0mNondlzSXeVxkinh7Q==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/service-error-classification": "^4.0.7",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-retry": "^4.0.7",
+ "@types/uuid": "^9.0.1",
+ "tslib": "^2.6.2",
+ "uuid": "^9.0.1"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-retry/node_modules/uuid": {
+ "version": "9.0.1",
+ "resolved": "https://registry.npmmirror.com/uuid/-/uuid-9.0.1.tgz",
+ "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==",
+ "funding": [
+ "https://github.com/sponsors/broofa",
+ "https://github.com/sponsors/ctavan"
+ ],
+ "license": "MIT",
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
+ "node_modules/@smithy/middleware-serde": {
+ "version": "4.0.9",
+ "resolved": "https://registry.npmmirror.com/@smithy/middleware-serde/-/middleware-serde-4.0.9.tgz",
+ "integrity": "sha512-uAFFR4dpeoJPGz8x9mhxp+RPjo5wW0QEEIPPPbLXiRRWeCATf/Km3gKIVR5vaP8bN1kgsPhcEeh+IZvUlBv6Xg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-stack": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/middleware-stack/-/middleware-stack-4.0.5.tgz",
+ "integrity": "sha512-/yoHDXZPh3ocRVyeWQFvC44u8seu3eYzZRveCMfgMOBcNKnAmOvjbL9+Cp5XKSIi9iYA9PECUuW2teDAk8T+OQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-config-provider": {
+ "version": "4.1.4",
+ "resolved": "https://registry.npmmirror.com/@smithy/node-config-provider/-/node-config-provider-4.1.4.tgz",
+ "integrity": "sha512-+UDQV/k42jLEPPHSn39l0Bmc4sB1xtdI9Gd47fzo/0PbXzJ7ylgaOByVjF5EeQIumkepnrJyfx86dPa9p47Y+w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/shared-ini-file-loader": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/node-http-handler": {
+ "version": "4.1.1",
+ "resolved": "https://registry.npmmirror.com/@smithy/node-http-handler/-/node-http-handler-4.1.1.tgz",
+ "integrity": "sha512-RHnlHqFpoVdjSPPiYy/t40Zovf3BBHc2oemgD7VsVTFFZrU5erFFe0n52OANZZ/5sbshgD93sOh5r6I35Xmpaw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.0.5",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/querystring-builder": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/property-provider": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/property-provider/-/property-provider-4.0.5.tgz",
+ "integrity": "sha512-R/bswf59T/n9ZgfgUICAZoWYKBHcsVDurAGX88zsiUtOTA/xUAPyiT+qkNCPwFn43pZqN84M4MiUsbSGQmgFIQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/protocol-http": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmmirror.com/@smithy/protocol-http/-/protocol-http-5.1.3.tgz",
+ "integrity": "sha512-fCJd2ZR7D22XhDY0l+92pUag/7je2BztPRQ01gU5bMChcyI0rlly7QFibnYHzcxDvccMjlpM/Q1ev8ceRIb48w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-builder": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/querystring-builder/-/querystring-builder-4.0.5.tgz",
+ "integrity": "sha512-NJeSCU57piZ56c+/wY+AbAw6rxCCAOZLCIniRE7wqvndqxcKKDOXzwWjrY7wGKEISfhL9gBbAaWWgHsUGedk+A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-uri-escape": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-parser": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/querystring-parser/-/querystring-parser-4.0.5.tgz",
+ "integrity": "sha512-6SV7md2CzNG/WUeTjVe6Dj8noH32r4MnUeFKZrnVYsQxpGSIcphAanQMayi8jJLZAWm6pdM9ZXvKCpWOsIGg0w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/service-error-classification": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmmirror.com/@smithy/service-error-classification/-/service-error-classification-4.0.7.tgz",
+ "integrity": "sha512-XvRHOipqpwNhEjDf2L5gJowZEm5nsxC16pAZOeEcsygdjv9A2jdOh3YoDQvOXBGTsaJk6mNWtzWalOB9976Wlg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.5.tgz",
+ "integrity": "sha512-YVVwehRDuehgoXdEL4r1tAAzdaDgaC9EQvhK0lEbfnbrd0bd5+CTQumbdPryX3J2shT7ZqQE+jPW4lmNBAB8JQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/signature-v4": {
+ "version": "5.1.3",
+ "resolved": "https://registry.npmmirror.com/@smithy/signature-v4/-/signature-v4-5.1.3.tgz",
+ "integrity": "sha512-mARDSXSEgllNzMw6N+mC+r1AQlEBO3meEAkR/UlfAgnMzJUB3goRBWgip1EAMG99wh36MDqzo86SfIX5Y+VEaw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.0.0",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-hex-encoding": "^4.0.0",
+ "@smithy/util-middleware": "^4.0.5",
+ "@smithy/util-uri-escape": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/smithy-client": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/smithy-client/-/smithy-client-4.5.0.tgz",
+ "integrity": "sha512-ZSdE3vl0MuVbEwJBxSftm0J5nL/gw76xp5WF13zW9cN18MFuFXD5/LV0QD8P+sCU5bSWGyy6CTgUupE1HhOo1A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/core": "^3.9.0",
+ "@smithy/middleware-endpoint": "^4.1.19",
+ "@smithy/middleware-stack": "^4.0.5",
+ "@smithy/protocol-http": "^5.1.3",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-stream": "^4.2.4",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/types": {
+ "version": "4.3.2",
+ "resolved": "https://registry.npmmirror.com/@smithy/types/-/types-4.3.2.tgz",
+ "integrity": "sha512-QO4zghLxiQ5W9UZmX2Lo0nta2PuE1sSrXUYDoaB6HMR762C0P7v/HEPHf6ZdglTVssJG1bsrSBxdc3quvDSihw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/url-parser": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/url-parser/-/url-parser-4.0.5.tgz",
+ "integrity": "sha512-j+733Um7f1/DXjYhCbvNXABV53NyCRRA54C7bNEIxNPs0YjfRxeMKjjgm2jvTYrciZyCjsicHwQ6Q0ylo+NAUw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/querystring-parser": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-base64": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-base64/-/util-base64-4.0.0.tgz",
+ "integrity": "sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-browser": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz",
+ "integrity": "sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-node": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz",
+ "integrity": "sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-buffer-from": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz",
+ "integrity": "sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/is-array-buffer": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-config-provider": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz",
+ "integrity": "sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "4.0.27",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.27.tgz",
+ "integrity": "sha512-i/Fu6AFT5014VJNgWxKomBJP/GB5uuOsM4iHdcmplLm8B1eAqnRItw4lT2qpdO+mf+6TFmf6dGcggGLAVMZJsQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-node": {
+ "version": "4.0.27",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.27.tgz",
+ "integrity": "sha512-3W0qClMyxl/ELqTA39aNw1N+pN0IjpXT7lPFvZ8zTxqVFP7XCpACB9QufmN4FQtd39xbgS7/Lekn7LmDa63I5w==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/config-resolver": "^4.1.5",
+ "@smithy/credential-provider-imds": "^4.0.7",
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/property-provider": "^4.0.5",
+ "@smithy/smithy-client": "^4.5.0",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-endpoints": {
+ "version": "3.0.7",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-endpoints/-/util-endpoints-3.0.7.tgz",
+ "integrity": "sha512-klGBP+RpBp6V5JbrY2C/VKnHXn3d5V2YrifZbmMY8os7M6m8wdYFoO6w/fe5VkP+YVwrEktW3IWYaSQVNZJ8oQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/node-config-provider": "^4.1.4",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-hex-encoding": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz",
+ "integrity": "sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-middleware": {
+ "version": "4.0.5",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-middleware/-/util-middleware-4.0.5.tgz",
+ "integrity": "sha512-N40PfqsZHRSsByGB81HhSo+uvMxEHT+9e255S53pfBw/wI6WKDI7Jw9oyu5tJTLwZzV5DsMha3ji8jk9dsHmQQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-retry": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-retry/-/util-retry-4.0.7.tgz",
+ "integrity": "sha512-TTO6rt0ppK70alZpkjwy+3nQlTiqNfoXja+qwuAchIEAIoSZW8Qyd76dvBv3I5bCpE38APafG23Y/u270NspiQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/service-error-classification": "^4.0.7",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-stream": {
+ "version": "4.2.4",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-stream/-/util-stream-4.2.4.tgz",
+ "integrity": "sha512-vSKnvNZX2BXzl0U2RgCLOwWaAP9x/ddd/XobPK02pCbzRm5s55M53uwb1rl/Ts7RXZvdJZerPkA+en2FDghLuQ==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^5.1.1",
+ "@smithy/node-http-handler": "^4.1.1",
+ "@smithy/types": "^4.3.2",
+ "@smithy/util-base64": "^4.0.0",
+ "@smithy/util-buffer-from": "^4.0.0",
+ "@smithy/util-hex-encoding": "^4.0.0",
+ "@smithy/util-utf8": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-uri-escape": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz",
+ "integrity": "sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-utf8": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-utf8/-/util-utf8-4.0.0.tgz",
+ "integrity": "sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/util-buffer-from": "^4.0.0",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
+ "node_modules/@smithy/util-waiter": {
+ "version": "4.0.7",
+ "resolved": "https://registry.npmmirror.com/@smithy/util-waiter/-/util-waiter-4.0.7.tgz",
+ "integrity": "sha512-mYqtQXPmrwvUljaHyGxYUIIRI3qjBTEb/f5QFi3A6VlxhpmZd5mWXn9W+qUkf2pVE1Hv3SqxefiZOPGdxmO64A==",
+ "license": "Apache-2.0",
+ "dependencies": {
+ "@smithy/abort-controller": "^4.0.5",
+ "@smithy/types": "^4.3.2",
+ "tslib": "^2.6.2"
+ },
+ "engines": {
+ "node": ">=18.0.0"
+ }
+ },
"node_modules/@types/estree": {
"version": "1.0.7",
"resolved": "https://registry.npmmirror.com/@types/estree/-/estree-1.0.7.tgz",
@@ -1754,6 +3267,12 @@
"form-data": "^4.0.0"
}
},
+ "node_modules/@types/uuid": {
+ "version": "9.0.8",
+ "resolved": "https://registry.npmmirror.com/@types/uuid/-/uuid-9.0.8.tgz",
+ "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==",
+ "license": "MIT"
+ },
"node_modules/@vitest/expect": {
"version": "3.0.9",
"resolved": "https://registry.npmmirror.com/@vitest/expect/-/expect-3.0.9.tgz",
@@ -1961,6 +3480,12 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"license": "ISC"
},
+ "node_modules/bowser": {
+ "version": "2.12.1",
+ "resolved": "https://registry.npmmirror.com/bowser/-/bowser-2.12.1.tgz",
+ "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==",
+ "license": "MIT"
+ },
"node_modules/cac": {
"version": "6.7.14",
"resolved": "https://registry.npmmirror.com/cac/-/cac-6.7.14.tgz",
@@ -2564,6 +4089,24 @@
"integrity": "sha512-bCK/2Z4zLidyB4ReuIsvALH6w31YfAQDmXMqMx6FyfHqvBxtjC0eRumeSu4Bs3XtXwpyIywtSTrVT99BxY1f9w==",
"license": "MIT"
},
+ "node_modules/fast-xml-parser": {
+ "version": "5.2.5",
+ "resolved": "https://registry.npmmirror.com/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/fdir": {
"version": "6.4.3",
"resolved": "https://registry.npmmirror.com/fdir/-/fdir-6.4.3.tgz",
@@ -3461,6 +5004,18 @@
"npm": ">=6"
}
},
+ "node_modules/strnum": {
+ "version": "2.1.1",
+ "resolved": "https://registry.npmmirror.com/strnum/-/strnum-2.1.1.tgz",
+ "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==",
+ "funding": [
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "license": "MIT"
+ },
"node_modules/tinybench": {
"version": "2.9.0",
"resolved": "https://registry.npmmirror.com/tinybench/-/tinybench-2.9.0.tgz",
@@ -3531,8 +5086,7 @@
"version": "2.8.1",
"resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.8.1.tgz",
"integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==",
- "license": "0BSD",
- "optional": true
+ "license": "0BSD"
},
"node_modules/ua-is-frozen": {
"version": "0.1.2",
diff --git a/mail-worker/package.json b/mail-worker/package.json
index cc09f8b..7b7e7b3 100644
--- a/mail-worker/package.json
+++ b/mail-worker/package.json
@@ -5,8 +5,9 @@
"scripts": {
"dev": "wrangler dev --config wrangler-dev.toml",
"test": "wrangler deploy --config wrangler-test.toml",
- "deploy": "wrangler deploy",
- "start": "wrangler dev"
+ "deploy": "npm --prefix ../mail-vue run build && wrangler deploy",
+ "start": "wrangler dev",
+ "build": "npm --prefix ../mail-vue run build"
},
"devDependencies": {
"@cloudflare/vitest-pool-workers": "^0.7.5",
@@ -14,6 +15,7 @@
"wrangler": "^4.7.0"
},
"dependencies": {
+ "@aws-sdk/client-s3": "^3.879.0",
"@cloudflare/vite-plugin": "1.6.0",
"dayjs": "^1.11.13",
"drizzle-orm": "^0.42.0",
diff --git a/mail-worker/src/api/setting-api.js b/mail-worker/src/api/setting-api.js
index ec5d8d4..16409ac 100644
--- a/mail-worker/src/api/setting-api.js
+++ b/mail-worker/src/api/setting-api.js
@@ -21,8 +21,3 @@ app.put('/setting/setBackground', async (c) => {
const key = await settingService.setBackground(c, await c.req.json());
return c.json(result.ok(key));
});
-
-app.delete('/setting/physicsDeleteAll', async (c) => {
- await settingService.physicsDeleteAll(c);
- return c.json(result.ok());
-});
diff --git a/mail-worker/src/api/test-api.js b/mail-worker/src/api/test-api.js
index 9956d46..8b13789 100644
--- a/mail-worker/src/api/test-api.js
+++ b/mail-worker/src/api/test-api.js
@@ -1,2 +1 @@
-import app from '../hono/hono';
-import result from '../model/result';
+
diff --git a/mail-worker/src/entity/setting.js b/mail-worker/src/entity/setting.js
index a738e84..649806f 100644
--- a/mail-worker/src/entity/setting.js
+++ b/mail-worker/src/entity/setting.js
@@ -34,6 +34,11 @@ export const setting = sqliteTable('setting', {
noticeWidth: integer('notice_width').default(400).notNull(),
notice: integer('notice').default(0).notNull(),
noRecipient: integer('no_recipient').default(1).notNull(),
- loginDomain: integer('login_domain').default(0).notNull()
+ loginDomain: integer('login_domain').default(0).notNull(),
+ bucket: text('bucket').default('').notNull(),
+ region: text('region').default('').notNull(),
+ endpoint: text('endpoint').default('').notNull(),
+ s3AccessKey: text('s3_access_key').default('').notNull(),
+ s3SecretKey: text('s3_secret_key').default('').notNull()
});
export default setting
diff --git a/mail-worker/src/i18n/en.js b/mail-worker/src/i18n/en.js
index 48f157a..02441bf 100644
--- a/mail-worker/src/i18n/en.js
+++ b/mail-worker/src/i18n/en.js
@@ -11,10 +11,10 @@ const en = {
delMyAccount: 'Cannot delete your own account',
noUserAccount: 'This email does not belong to the current user',
usernameLengthLimit: 'Username length exceeds the limit',
- noOsDomainSendPic: 'Cannot send body images: R2 domain not configured',
- noOsSendPic: 'Cannot send body images: R2 object storage not configured',
- noOsDomainSendAtt: 'Cannot send attachments: R2 domain not configured',
- noOsSendAtt: 'Cannot send attachments: R2 object storage not configured',
+ noOsDomainSendPic: 'Cannot send body images: object storage domain not configured',
+ noOsSendPic: 'Cannot send body images: object storage not configured',
+ noOsDomainSendAtt: 'Cannot send attachments: object storage domain not configured',
+ noOsSendAtt: 'Cannot send attachments: object storage not configured',
disabledSend: 'Email sending feature is disabled',
noSeparateSend: 'Attachments are not supported in separate sending',
daySendLimit: 'Daily send limit reached',
@@ -46,8 +46,8 @@ const en = {
delDefRole: 'Default role cannot be deleted',
notJsonDomain: 'Environment variable "domain" must be in JSON format',
noDomainVariable: 'Environment variable domain cannot be empty',
- noOsUpBack: 'Cannot upload background: R2 object storage not configured',
- noOsDomainUpBack: 'Cannot upload background: R2 domain not configured',
+ noOsUpBack: 'Cannot upload background: object storage not configured',
+ noOsDomainUpBack: 'Cannot upload background: object storage domain not configured',
starNotExistEmail: 'Starred email does not exist',
emptyBotToken: 'Please verify that you are human',
botVerifyFail: 'Bot verification failed, please try again',
diff --git a/mail-worker/src/i18n/zh.js b/mail-worker/src/i18n/zh.js
index 9924dc4..9ceadd4 100644
--- a/mail-worker/src/i18n/zh.js
+++ b/mail-worker/src/i18n/zh.js
@@ -11,10 +11,10 @@ const zh = {
delMyAccount: '不可以删除自己的邮箱',
noUserAccount: '该邮箱不属于当前用户',
usernameLengthLimit: '用户名长度超出限制',
- noOsDomainSendPic: 'r2域名未配置不能发送正文图片',
- noOsSendPic: 'r2对象存储未配置不能发送正文图片',
- noOsDomainSendAtt: 'r2域名未配置不能发送附件',
- noOsSendAtt: 'r2对象存储未配置不能发送附件',
+ noOsDomainSendPic: '对象存储域名未配置不能发送正文图片',
+ noOsSendPic: '对象存储未配置不能发送正文图片',
+ noOsDomainSendAtt: '域名未配置不能发送附件',
+ noOsSendAtt: '对象存储未配置不能发送附件',
disabledSend: '邮件发送功能已停用',
noSeparateSend: '分别发送暂时不支持附件',
daySendLimit: '发送次数已到达每日限制',
@@ -46,8 +46,8 @@ const zh = {
delDefRole: '默认身份不能删除',
notJsonDomain: '环境变量domain必须是JSON类型',
noDomainVariable: '环境变量domain不能为空',
- noOsUpBack: 'r2对象存储未配置不能上传背景',
- noOsDomainUpBack: 'r2域名未配置不能上传背景',
+ noOsUpBack: '对象存储未配置不能上传背景',
+ noOsDomainUpBack: '对象存储域名未配置不能上传背景',
starNotExistEmail: '星标的邮件不存在',
emptyBotToken: '需要进行人机验证',
botVerifyFail: '人机验证失败,请重试',
diff --git a/mail-worker/src/init/init.js b/mail-worker/src/init/init.js
index 6190e2d..42e3809 100644
--- a/mail-worker/src/init/init.js
+++ b/mail-worker/src/init/init.js
@@ -21,10 +21,26 @@ const init = {
await this.v1_5DB(c);
await this.v1_6DB(c);
await this.v1_7DB(c);
+ await this.v1_7DB(c);
+ await this.v2DB(c);
await settingService.refresh(c);
return c.text(t('initSuccess'));
},
+ async v2DB(c) {
+ try {
+ await c.env.db.batch([
+ c.env.db.prepare(`ALTER TABLE setting ADD COLUMN bucket TEXT NOT NULL DEFAULT '';`),
+ c.env.db.prepare(`ALTER TABLE setting ADD COLUMN region TEXT NOT NULL DEFAULT '';`),
+ c.env.db.prepare(`ALTER TABLE setting ADD COLUMN endpoint TEXT NOT NULL DEFAULT '';`),
+ c.env.db.prepare(`ALTER TABLE setting ADD COLUMN s3_access_key TEXT NOT NULL DEFAULT '';`),
+ c.env.db.prepare(`ALTER TABLE setting ADD COLUMN s3_secret_key TEXT NOT NULL DEFAULT '';`)
+ ]);
+ } catch (e) {
+ console.error(e.message)
+ }
+ },
+
async v1_7DB(c) {
try {
await c.env.db.prepare(`ALTER TABLE setting ADD COLUMN login_domain INTEGER NOT NULL DEFAULT 0;`).run();
@@ -308,7 +324,6 @@ const init = {
(17, '系统设置', '', 0, 1, 6),
(18, '设置查看', 'setting:query', 17, 2, 0),
(19, '设置修改', 'setting:set', 17, 2, 1),
- (20, '物理清空', 'setting:clean', 17, 2, 2),
(21, '邮箱侧栏', '', 0, 0, 1),
(22, '邮箱查看', 'account:query', 21, 2, 0),
(23, '邮箱添加', 'account:add', 21, 2, 1),
diff --git a/mail-worker/src/security/security.js b/mail-worker/src/security/security.js
index b70cb6a..cbde3cc 100644
--- a/mail-worker/src/security/security.js
+++ b/mail-worker/src/security/security.js
@@ -33,7 +33,6 @@ const requirePerms = [
'/role/setDefault',
'/allEmail/list',
'/allEmail/delete',
- '/setting/physicsDeleteAll',
'/setting/setBackground',
'/setting/set',
'/setting/query',
@@ -73,7 +72,6 @@ const premKey = {
'all-email:delete': ['/allEmail/delete','/allEmail/batchDelete'],
'setting:query': ['/setting/query'],
'setting:set': ['/setting/set', '/setting/setBackground'],
- 'setting:clean': ['/setting/physicsDeleteAll'],
'analysis:query': ['/analysis/echarts'],
'reg-key:add': ['/regKey/add'],
'reg-key:query': ['/regKey/list','/regKey/history'],
diff --git a/mail-worker/src/service/account-service.js b/mail-worker/src/service/account-service.js
index d28ce3e..87528b3 100644
--- a/mail-worker/src/service/account-service.js
+++ b/mail-worker/src/service/account-service.js
@@ -156,19 +156,6 @@ const accountService = {
await orm(c).insert(account).values(list).run();
},
- async physicsDeleteAll(c) {
- const accountIdsRow = await orm(c).select({accountId: account.accountId}).from(account).where(eq(account.isDel,isDel.DELETE)).limit(99);
- if (accountIdsRow.length === 0) {
- return;
- }
- const accountIds = accountIdsRow.map(item => item.accountId)
- await emailService.physicsDeleteAccountIds(c, accountIds);
- await orm(c).delete(account).where(inArray(account.accountId,accountIds)).run();
- if (accountIdsRow.length === 99) {
- await this.physicsDeleteAll(c)
- }
- },
-
async physicsDeleteByUserIds(c, userIds) {
await emailService.physicsDeleteUserIds(c, userIds);
await orm(c).delete(account).where(inArray(account.userId,userIds)).run();
diff --git a/mail-worker/src/service/att-service.js b/mail-worker/src/service/att-service.js
index a4c6e3a..1ced12c 100644
--- a/mail-worker/src/service/att-service.js
+++ b/mail-worker/src/service/att-service.js
@@ -117,63 +117,45 @@ const attService = {
},
async removeByUserIds(c, userIds) {
- await this.removeAttByField(c, att.userId, userIds);
+ await this.removeAttByField(c, 'user_id', userIds);
},
async removeByEmailIds(c, emailIds) {
- await this.removeAttByField(c, att.emailId, emailIds);
- },
-
- async removeByAccountIds(c, accountIds) {
- await this.removeAttByField(c, att.accountId, accountIds);
- },
-
- async removeAttByField(c, fieldName, fieldValues) {
-
- const condition = inArray(fieldName, fieldValues);
- const attList = await orm(c).select().from(att).where(condition).limit(99);
-
- if (attList.length === 0) {
- return;
- }
-
- const attIds = attList.map(attRow => attRow.attId);
- const keys = attList.map(attRow => attRow.key);
- await orm(c).delete(att).where(inArray(att.attId, attIds)).run();
-
- const existAttRows = await orm(c).select().from(att).where(inArray(att.key, keys)).all();
- const existKeys = existAttRows.map(attRow => attRow.key);
- const delKeyList = keys.filter(key => !existKeys.includes(key));
- if (delKeyList.length > 0) {
- await c.env.r2.delete(delKeyList);
- }
-
- if (attList.length >= 99) {
- await this.removeAttByField(c, fieldName, fieldValues);
- }
+ await this.removeAttByField(c, 'email_id', emailIds);
},
selectByEmailIds(c, emailIds) {
return orm(c).select().from(att).where(
and(
- inArray(att.emailId,emailIds),
+ inArray(att.emailId, emailIds),
eq(att.type, attConst.type.ATT)
))
.all();
},
- async deleteByEmailIds(c, emailIds) {
+ async removeAttByField(c, fieldName, fieldValues) {
+
+ const queryAttSql = fieldValues.map(value =>
+ c.env.db.prepare(`SELECT a.key, a.att_id
+ FROM attachments a
+ JOIN (SELECT key
+ FROM attachments
+ GROUP BY key
+ HAVING COUNT (*) = 1) t
+ ON a.key = t.key
+ WHERE a.${fieldName} = ?;`).bind(value));
- const queryAttSql = emailIds.map(emailId => c.env.db.prepare(`SELECT key,att_id FROM attachments WHERE email_id = ${emailId} GROUP BY key HAVING COUNT(*) = 1;`))
const attListResult = await c.env.db.batch(queryAttSql);
const delKeyList = attListResult.flatMap(r => r.results.map(row => row.key));
if (delKeyList.length > 0) {
- await this.batchDelete(c, delKeyList)
+ await this.batchDelete(c, delKeyList);
}
- const delAttSql = emailIds.map(emailId => c.env.db.prepare(`DELETE FROM attachments WHERE email_id = ${emailId}`))
+ const delAttSql = fieldValues.map(value => c.env.db.prepare(`DELETE
+ FROM attachments
+ WHERE ${fieldName} = ?`).bind(value));
await c.env.db.batch(delAttSql);
},
diff --git a/mail-worker/src/service/email-service.js b/mail-worker/src/service/email-service.js
index 004872b..c37d80a 100644
--- a/mail-worker/src/service/email-service.js
+++ b/mail-worker/src/service/email-service.js
@@ -17,6 +17,7 @@ import starService from './star-service';
import dayjs from 'dayjs';
import kvConst from '../const/kv-const';
import { t } from '../i18n/i18n'
+import r2Service from './r2-service';
const emailService = {
@@ -128,7 +129,18 @@ const emailService = {
async send(c, params, userId) {
- let { accountId, name, sendType, emailId, receiveEmail, manyType, text, content, subject, attachments } = params;
+ let {
+ accountId,
+ name,
+ sendType,
+ emailId,
+ receiveEmail,
+ manyType,
+ text,
+ content,
+ subject,
+ attachments
+ } = params;
const { resendTokens, r2Domain, send } = await settingService.query(c);
@@ -164,7 +176,7 @@ const emailService = {
throw new BizError(t('noOsDomainSendPic'));
}
- if (attDataList.length > 0 && !c.env.r2) {
+ if (attDataList.length > 0 && !await r2Service.hasOSS(c)) {
throw new BizError(t('noOsSendPic'));
}
@@ -172,7 +184,7 @@ const emailService = {
throw new BizError(t('noOsDomainSendAtt'));
}
- if (attachments.length > 0 && !c.env.r2) {
+ if (attachments.length > 0 && !await r2Service.hasOSS(c)) {
throw new BizError(t('noOsSendAtt'));
}
@@ -342,7 +354,7 @@ const emailService = {
await attService.saveArticleAtt(c, attDataList, userId, accountId, emailRow.emailId);
}
- if (attachments?.length > 0 && c.env.r2) {
+ if (attachments?.length > 0 && await r2Service.hasOSS(c)) {
await attService.saveSendAtt(c, attachments, userId, accountId, emailRow.emailId);
}
@@ -443,21 +455,6 @@ const emailService = {
return list;
},
-
- async physicsDeleteAll(c) {
- const emailIdsRow = await orm(c).select({ emailId: email.emailId }).from(email).where(eq(email.isDel, isDel.DELETE)).limit(99);
- if (emailIdsRow.length === 0) {
- return;
- }
- const emailIds = emailIdsRow.map(row => row.emailId);
- await attService.removeByEmailIds(c, emailIds);
- await starService.removeByEmailIds(c, emailIds);
- await orm(c).delete(email).where(inArray(email.emailId, emailIds)).run();
- if (emailIdsRow.length === 99) {
- await this.physicsDeleteAll(c);
- }
- },
-
async physicsDelete(c, params) {
let { emailIds } = params;
emailIds = emailIds.split(',').map(Number);
@@ -466,11 +463,6 @@ const emailService = {
await orm(c).delete(email).where(inArray(email.emailId, emailIds)).run();
},
- async physicsDeleteAccountIds(c, accountIds) {
- await attService.removeByAccountIds(c, accountIds);
- await orm(c).delete(email).where(inArray(email.accountId, accountIds)).run();
- },
-
async physicsDeleteUserIds(c, userIds) {
await attService.removeByUserIds(c, userIds);
await orm(c).delete(email).where(inArray(email.userId, userIds)).run();
@@ -657,7 +649,7 @@ const emailService = {
return;
}
- await attService.deleteByEmailIds(c, emailIds);
+ await attService.removeByEmailIds(c, emailIds);
await orm(c).delete(email).where(conditions.length > 1 ? and(...conditions) : conditions[0]).run();
}
diff --git a/mail-worker/src/service/r2-service.js b/mail-worker/src/service/r2-service.js
index c527e6e..40cd95f 100644
--- a/mail-worker/src/service/r2-service.js
+++ b/mail-worker/src/service/r2-service.js
@@ -1,8 +1,34 @@
+import s3Service from './s3-service';
+import settingService from './setting-service';
+
const r2Service = {
+
+ async hasOSS(c) {
+
+ if (c.env.r2) {
+ return true;
+ }
+
+ const setting = await settingService.query(c);
+ const { bucket, region, endpoint, s3AccessKey, s3SecretKey } = setting;
+
+ return !!(bucket && region && endpoint && s3AccessKey && s3SecretKey);
+ },
+
async putObj(c, key, content, metadata) {
- await c.env.r2.put(key, content, {
- httpMetadata: {...metadata}
- });
+
+ if (c.env.r2) {
+
+ await c.env.r2.put(key, content, {
+ httpMetadata: { ...metadata }
+ });
+
+ } else {
+
+ await s3Service.putObj(c, key, content, metadata);
+
+ }
+
},
async getObj(c, key) {
@@ -10,7 +36,17 @@ const r2Service = {
},
async delete(c, key) {
- await c.env.r2.delete(key);
+
+ if (c.env.r2) {
+
+ await c.env.r2.delete(key);
+
+ } else {
+
+ await s3Service.deleteObj(c, key);
+
+ }
+
}
};
diff --git a/mail-worker/src/service/s3-service.js b/mail-worker/src/service/s3-service.js
new file mode 100644
index 0000000..b7aa90a
--- /dev/null
+++ b/mail-worker/src/service/s3-service.js
@@ -0,0 +1,54 @@
+import { S3Client, PutObjectCommand, DeleteObjectsCommand } from "@aws-sdk/client-s3";
+import settingService from './setting-service';
+import domainUtils from '../utils/domain-uitls';
+const s3Service = {
+
+ async putObj(c, key, content, metadata) {
+
+ const client = await this.client(c);
+
+ const { bucket } = await settingService.query(c);
+
+ await client.send(
+ new PutObjectCommand({ Bucket: bucket, Key: key, Body: content, ...metadata })
+ )
+ },
+
+ async deleteObj(c,keys) {
+
+ if (typeof keys === 'string') {
+ keys = [keys]
+ }
+
+ if (keys.length === 0) {
+ return
+ }
+
+ const client = await this.client(c)
+
+ const { bucket } = await settingService.query(c);
+
+ await client.send(
+ new DeleteObjectsCommand({
+ Bucket: bucket,
+ Delete: {
+ Objects: keys.map(key => ({Key: key}))
+ }
+ })
+ )
+ },
+
+ async client(c) {
+ const { region, endpoint, s3AccessKey, s3SecretKey } = await settingService.query(c);
+ return new S3Client({
+ region: region,
+ endpoint: domainUtils.toOssDomain(endpoint),
+ credentials: {
+ accessKeyId: s3AccessKey,
+ secretAccessKey: s3SecretKey,
+ },
+ });
+ }
+}
+
+export default s3Service
diff --git a/mail-worker/src/service/setting-service.js b/mail-worker/src/service/setting-service.js
index c4fb661..b273891 100644
--- a/mail-worker/src/service/setting-service.js
+++ b/mail-worker/src/service/setting-service.js
@@ -17,12 +17,18 @@ const settingService = {
async refresh(c) {
const settingRow = await orm(c).select().from(setting).get();
settingRow.resendTokens = JSON.parse(settingRow.resendTokens);
+ c.set('setting', settingRow);
await c.env.kv.put(KvConst.SETTING, JSON.stringify(settingRow));
},
async query(c) {
+ if (c.get('setting')) {
+ return c.get('setting')
+ }
+
const setting = await c.env.kv.get(KvConst.SETTING, { type: 'json' });
+
let domainList = c.env.domain;
if (typeof domainList === 'string') {
@@ -39,6 +45,7 @@ const settingService = {
domainList = domainList.map(item => '@' + item);
setting.domainList = domainList;
+ c.set('setting', setting);
return setting;
},
@@ -49,11 +56,17 @@ const settingService = {
verifyRecordService.selectListByIP(c)
]);
+ settingRow.siteKey = settingRow.siteKey ? `${settingRow.siteKey.slice(0, 12)}******` : null;
settingRow.secretKey = settingRow.secretKey ? `${settingRow.secretKey.slice(0, 12)}******` : null;
+
Object.keys(settingRow.resendTokens).forEach(key => {
settingRow.resendTokens[key] = `${settingRow.resendTokens[key].slice(0, 12)}******`;
});
+ settingRow.s3AccessKey = settingRow.s3AccessKey ? `${settingRow.s3AccessKey.slice(0, 12)}******` : null;
+ settingRow.s3SecretKey = settingRow.s3SecretKey ? `${settingRow.s3SecretKey.slice(0, 12)}******` : null;
+ settingRow.hasR2 = !!c.env.r2
+
let regVerifyOpen = false
let addVerifyOpen = false
@@ -91,7 +104,7 @@ const settingService = {
if (background && !background.startsWith('http')) {
- if (!c.env.r2) {
+ if (!await r2Service.hasOSS(c)) {
throw new BizError(t('noOsUpBack'));
}
@@ -124,12 +137,6 @@ const settingService = {
return background;
},
- async physicsDeleteAll(c) {
- await emailService.physicsDeleteAll(c);
- await accountService.physicsDeleteAll(c);
- await userService.physicsDeleteAll(c);
- },
-
async websiteConfig(c) {
const settingRow = await this.get(c)
diff --git a/mail-worker/src/service/user-service.js b/mail-worker/src/service/user-service.js
index 627baec..62da669 100644
--- a/mail-worker/src/service/user-service.js
+++ b/mail-worker/src/service/user-service.js
@@ -87,20 +87,6 @@ const userService = {
await c.env.kv.delete(kvConst.AUTH_INFO + userId)
},
-
- async physicsDeleteAll(c) {
- const userIdsRow = await orm(c).select().from(user).where(eq(user.isDel, isDel.DELETE)).limit(99);
- if (userIdsRow.length === 0) {
- return;
- }
- const userIds = userIdsRow.map(item => item.userId);
- await accountService.physicsDeleteByUserIds(c, userIds);
- await orm(c).delete(user).where(inArray(user.userId, userIds)).run();
- if (userIdsRow.length === 99) {
- await this.physicsDeleteAll(c);
- }
- },
-
async physicsDelete(c, params) {
const { userId } = params
await accountService.physicsDeleteByUserIds(c, [userId])
diff --git a/mail-worker/src/utils/domain-uitls.js b/mail-worker/src/utils/domain-uitls.js
new file mode 100644
index 0000000..ec4f8e6
--- /dev/null
+++ b/mail-worker/src/utils/domain-uitls.js
@@ -0,0 +1,20 @@
+const domainUtils = {
+ toOssDomain(domain) {
+
+ if (!domain) {
+ return null
+ }
+
+ if (!domain.startsWith('http')) {
+ return 'https://' + domain
+ }
+
+ if (domain.endsWith("/")) {
+ domain = domain.slice(0, -1);
+ }
+
+ return domain
+ }
+}
+
+export default domainUtils