From 3a8733c740e7e5b7f1bcec0efba9fd3cc09aa478 Mon Sep 17 00:00:00 2001 From: ingalls Date: Fri, 20 Sep 2024 18:53:40 -0600 Subject: [PATCH] Rewrite Proxy --- api/lib/control/tilejson.ts | 3 - api/package-lock.json | 101 +++++++++--------- api/package.json | 1 + api/routes/basemap.ts | 47 ++++----- api/web/package-lock.json | 12 +-- api/web/src/stores/overlays/base.ts | 1 - package-lock.json | 152 ++++++++++++++-------------- 7 files changed, 153 insertions(+), 164 deletions(-) diff --git a/api/lib/control/tilejson.ts b/api/lib/control/tilejson.ts index 016a2f8b0..d38db43c2 100644 --- a/api/lib/control/tilejson.ts +++ b/api/lib/control/tilejson.ts @@ -1,9 +1,6 @@ import undici from 'undici'; -import { Readable } from 'node:stream'; import type { BBox } from 'geojson'; import type { Response } from 'express'; -import { pipeline, Writable, PassThrough } from 'node:stream'; -import { pipeline as promisePipeline } from 'node:stream/promises'; import { pointOnFeature } from '@turf/point-on-feature'; import { bboxPolygon } from '@turf/bbox-polygon'; import { Static, Type } from '@sinclair/typebox' diff --git a/api/package-lock.json b/api/package-lock.json index eeb6d9389..420cf90d5 100644 --- a/api/package-lock.json +++ b/api/package-lock.json @@ -33,6 +33,7 @@ "@sinclair/typebox": "^0.33.0", "@tak-ps/node-cot": "^12.0.0", "@tak-ps/node-tak": "^8.0.0", + "@turf/bbox": "^7.1.0", "@turf/bbox-polygon": "^7.1.0", "@turf/meta": "^7.0.0", "@turf/point-on-feature": "^7.1.0", @@ -524,9 +525,9 @@ } }, "node_modules/@aws-sdk/client-dynamodb": { - "version": "3.654.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.654.0.tgz", - "integrity": "sha512-QG7n2WJ4ZycoYnq04K7bYgai11in93XJgGJXeQM2jAszbMxrlFfczwhWDciHDz7hXWMhNvpKWuhvrXyxj9Irlg==", + "version": "3.656.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-dynamodb/-/client-dynamodb-3.656.0.tgz", + "integrity": "sha512-a7nzK4tGZHlg1IY63aGmdSlVLYpdYFwjIDFx3vQwNAzStwh8pbb7Fv8jLFTAi33ZNHM7H4mASwvgFbu8ZfbMVA==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -795,9 +796,9 @@ } }, "node_modules/@aws-sdk/client-lambda": { - "version": "3.655.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.655.0.tgz", - "integrity": "sha512-/XB9oLcwZUeUxxS9WPHrmPkfFTE6dlBcAuMKdKZnfGfzGbU1EKDsFW0QH50fhjGCO3fk4xw8ZmHyNsk5uhqFRQ==", + "version": "3.656.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-lambda/-/client-lambda-3.656.0.tgz", + "integrity": "sha512-tpJDNpMa4G3TTjBEimBkczM/obxWwrYo88BD5/iwmxQ9LUpBLrGfbH3e1YU5vxhEvGWzNUvP7IGbIif7EvaqpQ==", "license": "Apache-2.0", "dependencies": { "@aws-crypto/sha256-browser": "5.2.0", @@ -1372,12 +1373,12 @@ } }, "node_modules/@aws-sdk/lib-dynamodb": { - "version": "3.654.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.654.0.tgz", - "integrity": "sha512-/mi11SFhw3LQN+MUOtn3Dsu3gUd3oX1viSx37E/yU9oh6debP+zQSBC2RX4crDuJ5dNpdsvmTSMbbvkbZQ88hA==", + "version": "3.656.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/lib-dynamodb/-/lib-dynamodb-3.656.0.tgz", + "integrity": "sha512-UgT+jSMZGckYuXXGpj+agCv0N8zuK/jCgw7nTQH9g02ZQHTI7dedHUnsgfBN5Jts7fm21Mxkwnd5Mj8xK5DeOQ==", "license": "Apache-2.0", "dependencies": { - "@aws-sdk/util-dynamodb": "3.654.0", + "@aws-sdk/util-dynamodb": "3.656.0", "@smithy/core": "^2.4.3", "@smithy/smithy-client": "^3.3.2", "@smithy/types": "^3.4.2", @@ -1387,7 +1388,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.654.0" + "@aws-sdk/client-dynamodb": "^3.656.0" } }, "node_modules/@aws-sdk/lib-storage": { @@ -1710,9 +1711,9 @@ } }, "node_modules/@aws-sdk/util-dynamodb": { - "version": "3.654.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.654.0.tgz", - "integrity": "sha512-Jzl/1TR41VwtlBOBv3xfMHUErK6oLxkhTPmlUpwK0uY5XhKi17mr/JimYMjhOce3z3KNlkEpFLDmxUElw04p+w==", + "version": "3.656.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-dynamodb/-/util-dynamodb-3.656.0.tgz", + "integrity": "sha512-vavQ0AZ4t7US3zWCv8mSS9wH6O2nB2lW4yFMO5pkd1Y8YFE3DDFSbzl0zI2A2YSrU1n4fqFbCfXhQhK6sRYoNA==", "license": "Apache-2.0", "dependencies": { "tslib": "^2.6.2" @@ -1721,7 +1722,7 @@ "node": ">=16.0.0" }, "peerDependencies": { - "@aws-sdk/client-dynamodb": "^3.654.0" + "@aws-sdk/client-dynamodb": "^3.656.0" } }, "node_modules/@aws-sdk/util-endpoints": { @@ -3596,16 +3597,16 @@ } }, "node_modules/@smithy/core": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.3.tgz", - "integrity": "sha512-4LTusLqFMRVQUfC3RNuTg6IzYTeJNpydRdTKq7J5wdEyIRQSu3rGIa3s80mgG2hhe6WOZl9IqTSo1pgbn6EHhA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.5.tgz", + "integrity": "sha512-Z0qlPXgZ0pouYgnu/cZTEYeRAvniiKZmVl4wIbZHX/nEMHkMDV9ao6KFArsU9KndE0TuhL149xcRx45wfw1YCA==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", + "@smithy/middleware-retry": "^3.0.20", "@smithy/middleware-serde": "^3.0.6", "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-middleware": "^3.0.6", @@ -3700,9 +3701,9 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.7.tgz", - "integrity": "sha512-Ra6IPI1spYLO+t62/3jQbodjOwAbto9wlpJdHZwkycm0Kit+GVpzHW/NMmSgY4rK1bjJ4qLAmCnaBzePO5Nkkg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz", + "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.3", @@ -3839,15 +3840,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.18.tgz", - "integrity": "sha512-YU1o/vYob6vlqZdd97MN8cSXRToknLXhFBL3r+c9CZcnxkO/rgNZ++CfgX2vsmnEKvlqdi26+SRtSzlVp5z6Mg==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.20.tgz", + "integrity": "sha512-HELCOVwYw5hFDBm69d+LmmGjBCjWnwp/t7SJiHmp+c4u9vgfIaCjdSeIdnlOsLrr5ic5jGTJXvJFUQnd987b/g==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.7", "@smithy/protocol-http": "^4.1.3", "@smithy/service-error-classification": "^3.0.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "@smithy/util-middleware": "^3.0.6", "@smithy/util-retry": "^3.0.6", @@ -3900,9 +3901,9 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.2.tgz", - "integrity": "sha512-42Cy4/oT2O+00aiG1iQ7Kd7rE6q8j7vI0gFfnMlUiATvyo8vefJkhb7O10qZY0jAqo5WZdUzfl9IV6wQ3iMBCg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz", + "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.4", @@ -3994,9 +3995,9 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.3.tgz", - "integrity": "sha512-YD2KYSCEEeFHcWZ1E3mLdAaHl8T/TANh6XwmocQ6nPcTdBfh4N5fusgnblnWDlnlU1/cUqEq3PiGi22GmT2Lkg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.4.tgz", + "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -4013,16 +4014,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.2.tgz", - "integrity": "sha512-RKDfhF2MTwXl7jan5d7QfS9eCC6XJbO3H+EZAvLQN8A5in4ib2Ml4zoeLo57w9QrqFekBPcsoC2hW3Ekw4vQ9Q==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.4.tgz", + "integrity": "sha512-NKw/2XxOW/Rg3rzB90HxsmGok5oS6vRzJgMh/JN4BHaOQQ4q5OuX999GmOGxEp730wbpIXIowfKZmIMXkG4v0Q==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.3", "@smithy/middleware-stack": "^3.0.6", "@smithy/protocol-http": "^4.1.3", "@smithy/types": "^3.4.2", - "@smithy/util-stream": "^3.1.6", + "@smithy/util-stream": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -4113,13 +4114,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.18.tgz", - "integrity": "sha512-/eveCzU6Z6Yw8dlYQLA4rcK30XY0E4L3lD3QFHm59mzDaWYelrXE1rlynuT3J6qxv+5yNy3a1JuzhG5hk5hcmw==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.20.tgz", + "integrity": "sha512-HpYmCpEThQJpCKzwzrGrklhdegRfuXI9keHRrHidbyEMliCdgic6t38MikJeZEkdIcEMhO1g95HIYMzjUzB+xg==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -4129,16 +4130,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.18.tgz", - "integrity": "sha512-9cfzRjArtOFPlTYRREJk00suUxVXTgbrzVncOyMRTUeMKnecG/YentLF3cORa+R6mUOMSrMSnT18jos1PKqK6Q==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.20.tgz", + "integrity": "sha512-atdsHNtAX0rwTvRRGsrONU0C0XzapH6tI8T1y/OReOvWN7uBwXqqWRft6m8egU2DgeReU0xqT3PHdGCe5VRaaQ==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^3.0.8", "@smithy/credential-provider-imds": "^3.2.3", "@smithy/node-config-provider": "^3.1.7", "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, @@ -4200,13 +4201,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.6.tgz", - "integrity": "sha512-lQEUfTx1ht5CRdvIjdAN/gUL6vQt2wSARGGLaBHNe+iJSkRHlWzY+DOn0mFTmTgyU3jcI5n9DkT5gTzYuSOo6A==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.8.tgz", + "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/node-http-handler": "^3.2.2", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", "@smithy/types": "^3.4.2", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", diff --git a/api/package.json b/api/package.json index 33f4ca862..d92f32fda 100644 --- a/api/package.json +++ b/api/package.json @@ -45,6 +45,7 @@ "@sinclair/typebox": "^0.33.0", "@tak-ps/node-cot": "^12.0.0", "@tak-ps/node-tak": "^8.0.0", + "@turf/bbox": "^7.1.0", "@turf/bbox-polygon": "^7.1.0", "@turf/meta": "^7.0.0", "@turf/point-on-feature": "^7.1.0", diff --git a/api/routes/basemap.ts b/api/routes/basemap.ts index 511e34116..b7585f7f5 100644 --- a/api/routes/basemap.ts +++ b/api/routes/basemap.ts @@ -1,12 +1,13 @@ import path from 'node:path'; +import { bbox } from '@turf/bbox'; import Err from '@openaddresses/batch-error'; +import TileJSON, { TileJSONType } from '../lib/control/tilejson.js'; import Auth, { AuthUserAccess, ResourceCreationScope } from '../lib/auth.js'; import Cacher from '../lib/cacher.js'; import busboy from 'busboy'; import Config from '../lib/config.js'; import { Response } from 'express'; import xml2js from 'xml2js'; -import { Readable } from 'node:stream'; import stream2buffer from '../lib/stream.js'; import bboxPolygon from '@turf/bbox-polygon'; import { Param } from '@openaddresses/batch-generic' @@ -338,7 +339,8 @@ export default async function router(schema: Schema, config: Config) { }), query: Type.Object({ token: Type.Optional(Type.String()), - }) + }), + res: TileJSONType }, async (req, res) => { try { const user = await Auth.as_user(config, req, { token: true }); @@ -354,14 +356,16 @@ export default async function router(schema: Schema, config: Config) { let url = config.API_URL + `/api/basemap/${basemap.id}/tiles/{z}/{x}/{y}`; if (req.query.token) url = url + `?token=${req.query.token}`; - return res.json({ - tilejson: "2.2.0", - name: basemap.name, - minzoom: basemap.minzoom, - maxzoom: basemap.maxzoom, - format: basemap.format, - tiles: [ String(url) ] + const json = TileJSON.json({ + ...basemap, + bounds: basemap.bounds ? bbox(basemap.bounds) : undefined, + center: basemap.center ? basemap.center.coordinates : undefined, + url }); + + console.error(json); + + return res.json(json); } catch (err) { return Err.respond(err, res); } @@ -392,26 +396,13 @@ export default async function router(schema: Schema, config: Config) { throw new Err(400, null, 'You don\'t have permission to access this resource'); } - const url = new URL(basemap.url - .replace('{$z}', req.params.z) - .replace('{$x}', req.params.x) - .replace('{$y}', req.params.y) + return TileJSON.tile( + basemap, + req.params.z, + req.params.x, + req.params.y, + res ); - - const proxy = await fetch(url) - - res.status(proxy.status); - for (const h of [ - 'content-type', - 'content-length', - 'content-encoding' - ]) { - const ph = proxy.headers.get(h); - if (ph) res.append(h, ph); - } - - // @ts-expect-error Doesnt meet TS def - return Readable.fromWeb(proxy.body).pipe(res); } catch (err) { return Err.respond(err, res); } diff --git a/api/web/package-lock.json b/api/web/package-lock.json index abc7bed95..5b4c1fdd6 100644 --- a/api/web/package-lock.json +++ b/api/web/package-lock.json @@ -4923,9 +4923,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.26", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.26.tgz", - "integrity": "sha512-Z+OMe9M/V6Ep9n/52+b7lkvYEps26z4Yz3vjWL1V61W0q+VLF1pOHhMY17sa4roz4AWmULSI8E6SAojZA5L0YQ==", + "version": "1.5.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", + "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", "dev": true, "license": "ISC" }, @@ -8152,9 +8152,9 @@ } }, "node_modules/sass": { - "version": "1.79.2", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.2.tgz", - "integrity": "sha512-YmT1aoF1MwHsZEu/eXhbAJNsPGAhNP4UixW9ckEwWCvPcVdVF0/C104OGDVEqtoctKq0N+wM20O/rj+sSPsWeg==", + "version": "1.79.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.79.3.tgz", + "integrity": "sha512-m7dZxh0W9EZ3cw50Me5GOuYm/tVAJAn91SUnohLRo9cXBixGUOdvmryN+dXpwR831bhoY3Zv7rEFt85PUwTmzA==", "license": "MIT", "dependencies": { "chokidar": "^4.0.0", diff --git a/api/web/src/stores/overlays/base.ts b/api/web/src/stores/overlays/base.ts index 323d1486d..d7b747ebb 100644 --- a/api/web/src/stores/overlays/base.ts +++ b/api/web/src/stores/overlays/base.ts @@ -215,7 +215,6 @@ export default class Overlay { } for (const l of this.styles) { - console.error(this.name, l) if (opts.before) { this._map.addLayer(l, opts.before); } else { diff --git a/package-lock.json b/package-lock.json index 8664211f5..5f66911ad 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1774,9 +1774,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.10.0.tgz", - "integrity": "sha512-fuXtbiP5GWIn8Fz+LWoOMVf/Jxm+aajZYkhi6CuEm4SxymFM+eUWzbO9qXT+L0iCkL5+KGYMCSGxo686H19S1g==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.11.0.tgz", + "integrity": "sha512-LPkkenkDqyzTFauZLLAPhIb48fj6drrfMvRGSL9tS3AcZBSVTllemLSNyCvHNNL2t797S/6DJNSIwRwXgMO/eQ==", "dev": true, "license": "MIT", "engines": { @@ -1794,9 +1794,9 @@ } }, "node_modules/@eslint/plugin-kit": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.1.0.tgz", - "integrity": "sha512-autAXT203ixhqei9xt+qkYOvY8l6LAFIdT2UXc/RPNeUVfqRF1BV94GTJyVPFKT8nFM6MyVJhjLj9E8JWvf5zQ==", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.0.tgz", + "integrity": "sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -2090,16 +2090,16 @@ } }, "node_modules/@smithy/core": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.3.tgz", - "integrity": "sha512-4LTusLqFMRVQUfC3RNuTg6IzYTeJNpydRdTKq7J5wdEyIRQSu3rGIa3s80mgG2hhe6WOZl9IqTSo1pgbn6EHhA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-2.4.5.tgz", + "integrity": "sha512-Z0qlPXgZ0pouYgnu/cZTEYeRAvniiKZmVl4wIbZHX/nEMHkMDV9ao6KFArsU9KndE0TuhL149xcRx45wfw1YCA==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.3", - "@smithy/middleware-retry": "^3.0.18", + "@smithy/middleware-retry": "^3.0.20", "@smithy/middleware-serde": "^3.0.6", "@smithy/protocol-http": "^4.1.3", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "@smithy/util-body-length-browser": "^3.0.0", "@smithy/util-middleware": "^3.0.6", @@ -2194,9 +2194,9 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.7.tgz", - "integrity": "sha512-Ra6IPI1spYLO+t62/3jQbodjOwAbto9wlpJdHZwkycm0Kit+GVpzHW/NMmSgY4rK1bjJ4qLAmCnaBzePO5Nkkg==", + "version": "3.2.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-3.2.8.tgz", + "integrity": "sha512-Lqe0B8F5RM7zkw//6avq1SJ8AfaRd3ubFUS1eVp5WszV7p6Ne5hQ4dSuMHDpNRPhgTvj4va9Kd/pcVigHEHRow==", "license": "Apache-2.0", "dependencies": { "@smithy/protocol-http": "^4.1.3", @@ -2313,15 +2313,15 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.18.tgz", - "integrity": "sha512-YU1o/vYob6vlqZdd97MN8cSXRToknLXhFBL3r+c9CZcnxkO/rgNZ++CfgX2vsmnEKvlqdi26+SRtSzlVp5z6Mg==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-3.0.20.tgz", + "integrity": "sha512-HELCOVwYw5hFDBm69d+LmmGjBCjWnwp/t7SJiHmp+c4u9vgfIaCjdSeIdnlOsLrr5ic5jGTJXvJFUQnd987b/g==", "license": "Apache-2.0", "dependencies": { "@smithy/node-config-provider": "^3.1.7", "@smithy/protocol-http": "^4.1.3", "@smithy/service-error-classification": "^3.0.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "@smithy/util-middleware": "^3.0.6", "@smithy/util-retry": "^3.0.6", @@ -2374,9 +2374,9 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.2.tgz", - "integrity": "sha512-42Cy4/oT2O+00aiG1iQ7Kd7rE6q8j7vI0gFfnMlUiATvyo8vefJkhb7O10qZY0jAqo5WZdUzfl9IV6wQ3iMBCg==", + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-3.2.3.tgz", + "integrity": "sha512-/gcm5DJ3k1b1zEInzBGAZC8ntJ+jwrz1NcSIu+9dSXd1FfG0G6QgkDI40tt8/WYUbHtLyo8fEqtm2v29koWo/w==", "license": "Apache-2.0", "dependencies": { "@smithy/abort-controller": "^3.1.4", @@ -2468,9 +2468,9 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.3.tgz", - "integrity": "sha512-YD2KYSCEEeFHcWZ1E3mLdAaHl8T/TANh6XwmocQ6nPcTdBfh4N5fusgnblnWDlnlU1/cUqEq3PiGi22GmT2Lkg==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-4.1.4.tgz", + "integrity": "sha512-72MiK7xYukNsnLJI9NqvUHqTu0ziEsfMsYNlWpiJfuGQnCTFKpckThlEatirvcA/LmT1h7rRO+pJD06PYsPu9Q==", "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^3.0.0", @@ -2487,16 +2487,16 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.2.tgz", - "integrity": "sha512-RKDfhF2MTwXl7jan5d7QfS9eCC6XJbO3H+EZAvLQN8A5in4ib2Ml4zoeLo57w9QrqFekBPcsoC2hW3Ekw4vQ9Q==", + "version": "3.3.4", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-3.3.4.tgz", + "integrity": "sha512-NKw/2XxOW/Rg3rzB90HxsmGok5oS6vRzJgMh/JN4BHaOQQ4q5OuX999GmOGxEp730wbpIXIowfKZmIMXkG4v0Q==", "license": "Apache-2.0", "dependencies": { "@smithy/middleware-endpoint": "^3.1.3", "@smithy/middleware-stack": "^3.0.6", "@smithy/protocol-http": "^4.1.3", "@smithy/types": "^3.4.2", - "@smithy/util-stream": "^3.1.6", + "@smithy/util-stream": "^3.1.8", "tslib": "^2.6.2" }, "engines": { @@ -2587,13 +2587,13 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.18.tgz", - "integrity": "sha512-/eveCzU6Z6Yw8dlYQLA4rcK30XY0E4L3lD3QFHm59mzDaWYelrXE1rlynuT3J6qxv+5yNy3a1JuzhG5hk5hcmw==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-3.0.20.tgz", + "integrity": "sha512-HpYmCpEThQJpCKzwzrGrklhdegRfuXI9keHRrHidbyEMliCdgic6t38MikJeZEkdIcEMhO1g95HIYMzjUzB+xg==", "license": "Apache-2.0", "dependencies": { "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "bowser": "^2.11.0", "tslib": "^2.6.2" @@ -2603,16 +2603,16 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "3.0.18", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.18.tgz", - "integrity": "sha512-9cfzRjArtOFPlTYRREJk00suUxVXTgbrzVncOyMRTUeMKnecG/YentLF3cORa+R6mUOMSrMSnT18jos1PKqK6Q==", + "version": "3.0.20", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-3.0.20.tgz", + "integrity": "sha512-atdsHNtAX0rwTvRRGsrONU0C0XzapH6tI8T1y/OReOvWN7uBwXqqWRft6m8egU2DgeReU0xqT3PHdGCe5VRaaQ==", "license": "Apache-2.0", "dependencies": { "@smithy/config-resolver": "^3.0.8", "@smithy/credential-provider-imds": "^3.2.3", "@smithy/node-config-provider": "^3.1.7", "@smithy/property-provider": "^3.1.6", - "@smithy/smithy-client": "^3.3.2", + "@smithy/smithy-client": "^3.3.4", "@smithy/types": "^3.4.2", "tslib": "^2.6.2" }, @@ -2674,13 +2674,13 @@ } }, "node_modules/@smithy/util-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.6.tgz", - "integrity": "sha512-lQEUfTx1ht5CRdvIjdAN/gUL6vQt2wSARGGLaBHNe+iJSkRHlWzY+DOn0mFTmTgyU3jcI5n9DkT5gTzYuSOo6A==", + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-3.1.8.tgz", + "integrity": "sha512-hoKOqSmb8FD3WLObuB5hwbM7bNIWgcnvkThokTvVq7J5PKjlLUK5qQQcB9zWLHIoSaIlf3VIv2OxZY2wtQjcRQ==", "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^3.2.7", - "@smithy/node-http-handler": "^3.2.2", + "@smithy/fetch-http-handler": "^3.2.8", + "@smithy/node-http-handler": "^3.2.3", "@smithy/types": "^3.4.2", "@smithy/util-base64": "^3.0.0", "@smithy/util-buffer-from": "^3.0.0", @@ -2815,42 +2815,42 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.6.tgz", - "integrity": "sha512-r+gNu6K4lrvaQLQGmf+1gc41p3FO2OUJyWmNqaIITaJU6YFiV5PtQSFZt8jfztYyARwqhoCayjprC7KMvT3nRA==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.7.tgz", + "integrity": "sha512-A0gay3lK71MddsSnGlBxRPOugIVdACze9L/rCo5X5srCyjQfZOfYtSFMJc3aOZCM+xN55EQpb4R97rYn/iEbSw==", "license": "MIT", "optional": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/shared": "3.5.6", + "@vue/shared": "3.5.7", "entities": "^4.5.0", "estree-walker": "^2.0.2", "source-map-js": "^1.2.0" } }, "node_modules/@vue/compiler-dom": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.6.tgz", - "integrity": "sha512-xRXqxDrIqK8v8sSScpistyYH0qYqxakpsIvqMD2e5sV/PXQ1mTwtXp4k42yHK06KXxKSmitop9e45Ui/3BrTEw==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.7.tgz", + "integrity": "sha512-GYWl3+gO8/g0ZdYaJ18fYHdI/WVic2VuuUd1NsPp60DWXKy+XjdhFsDW7FbUto8siYYZcosBGn9yVBkjhq1M8Q==", "license": "MIT", "optional": true, "dependencies": { - "@vue/compiler-core": "3.5.6", - "@vue/shared": "3.5.6" + "@vue/compiler-core": "3.5.7", + "@vue/shared": "3.5.7" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.6.tgz", - "integrity": "sha512-pjWJ8Kj9TDHlbF5LywjVso+BIxCY5wVOLhkEXRhuCHDxPFIeX1zaFefKs8RYoHvkSMqRWt93a0f2gNJVJixHwg==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.7.tgz", + "integrity": "sha512-EjOJtCWJrC7HqoCEzOwpIYHm+JH7YmkxC1hG6VkqIukYRqj8KFUlTLK6hcT4nGgtVov2+ZfrdrRlcaqS78HnBA==", "license": "MIT", "optional": true, "dependencies": { "@babel/parser": "^7.25.3", - "@vue/compiler-core": "3.5.6", - "@vue/compiler-dom": "3.5.6", - "@vue/compiler-ssr": "3.5.6", - "@vue/shared": "3.5.6", + "@vue/compiler-core": "3.5.7", + "@vue/compiler-dom": "3.5.7", + "@vue/compiler-ssr": "3.5.7", + "@vue/shared": "3.5.7", "estree-walker": "^2.0.2", "magic-string": "^0.30.11", "postcss": "^8.4.47", @@ -2858,20 +2858,20 @@ } }, "node_modules/@vue/compiler-ssr": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.6.tgz", - "integrity": "sha512-VpWbaZrEOCqnmqjE83xdwegtr5qO/2OPUC6veWgvNqTJ3bYysz6vY3VqMuOijubuUYPRpG3OOKIh9TD0Stxb9A==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.7.tgz", + "integrity": "sha512-oZx+jXP2k5arV/8Ly3TpQbfFyimMw2ANrRqvHJoKjPqtEzazxQGZjCLOfq8TnZ3wy2TOXdqfmVp4q7FyYeHV4g==", "license": "MIT", "optional": true, "dependencies": { - "@vue/compiler-dom": "3.5.6", - "@vue/shared": "3.5.6" + "@vue/compiler-dom": "3.5.7", + "@vue/shared": "3.5.7" } }, "node_modules/@vue/shared": { - "version": "3.5.6", - "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.6.tgz", - "integrity": "sha512-eidH0HInnL39z6wAt6SFIwBrvGOpDWsDxlw3rCgo1B+CQ1781WzQUSU3YjxgdkcJo9Q8S6LmXTkvI+cLHGkQfA==", + "version": "3.5.7", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.7.tgz", + "integrity": "sha512-NBE1PBIvzIedxIc2RZiKXvGbJkrZ2/hLf3h8GlS4/sP9xcXEZMFWOazFkNd6aGeUCMaproe5MHVYB3/4AW9q9g==", "license": "MIT", "optional": true }, @@ -3223,9 +3223,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001660", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001660.tgz", - "integrity": "sha512-GacvNTTuATm26qC74pt+ad1fW15mlQ/zuTzzY1ZoIzECTP8HURDfF43kNxPgf7H1jmelCBQTTbBNxdSXOA7Bqg==", + "version": "1.0.30001662", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001662.tgz", + "integrity": "sha512-sgMUVwLmGseH8ZIrm1d51UbrhqMCH3jvS7gF/M6byuHOnKyLOBL7W8yz5V02OHwgLGA36o/AFhWzzh4uc5aqTA==", "funding": [ { "type": "opencollective", @@ -3798,9 +3798,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.25", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.25.tgz", - "integrity": "sha512-kMb204zvK3PsSlgvvwzI3wBIcAw15tRkYk+NQdsjdDtcQWTp2RABbMQ9rUBy8KNEOM+/E6ep+XC3AykiWZld4g==", + "version": "1.5.27", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.27.tgz", + "integrity": "sha512-o37j1vZqCoEgBuWWXLHQgTN/KDKe7zwpiY5CPeq2RvUqOyJw9xnrULzZAEVQ5p4h+zjMk7hgtOoPdnLxr7m/jw==", "license": "ISC" }, "node_modules/emoji-regex": { @@ -4012,9 +4012,9 @@ } }, "node_modules/eslint": { - "version": "9.10.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.10.0.tgz", - "integrity": "sha512-Y4D0IgtBZfOcOUAIQTSXBKoNGfY0REGqHJG6+Q81vNippW5YlKjHFj4soMxamKK1NXHUWuBZTLdU3Km+L/pcHw==", + "version": "9.11.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.11.0.tgz", + "integrity": "sha512-yVS6XODx+tMFMDFcG4+Hlh+qG7RM6cCJXtQhCKLSsr3XkLvWggHjCqjfh0XsPPnt1c56oaT6PMgW9XWQQjdHXA==", "dev": true, "license": "MIT", "dependencies": { @@ -4022,8 +4022,8 @@ "@eslint-community/regexpp": "^4.11.0", "@eslint/config-array": "^0.18.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.10.0", - "@eslint/plugin-kit": "^0.1.0", + "@eslint/js": "9.11.0", + "@eslint/plugin-kit": "^0.2.0", "@humanwhocodes/module-importer": "^1.0.1", "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8",