diff --git a/build/build.ts b/build/build.ts
index 1f77e83..1932f5b 100644
--- a/build/build.ts
+++ b/build/build.ts
@@ -61,6 +61,7 @@ const builtins = [
"url",
"readline",
"stream",
+ "bson", // not a built-in but not a direct dependency either
];
function rmDirSync(dirPath): void {
diff --git a/lib/api-functions.ts b/lib/api-functions.ts
index adf5f97..4c2922d 100644
--- a/lib/api-functions.ts
+++ b/lib/api-functions.ts
@@ -17,7 +17,7 @@
* along with GenieACS. If not, see .
*/
-import * as db from "./db";
+import { collections } from "./db";
import * as common from "./common";
import * as cache from "./cache";
import {
@@ -38,7 +38,7 @@ export async function connectionRequest(
device?: Record
): Promise {
if (!device) {
- const res = await db.devicesCollection.findOne({ _id: deviceId });
+ const res = await collections.devices.findOne({ _id: deviceId });
if (!res) throw new Error("No such device");
device = flattenDevice(res);
}
@@ -184,7 +184,7 @@ export async function awaitSessionStart(
timeout: number
): Promise {
const now = Date.now();
- const device = await db.devicesCollection.findOne(
+ const device = await collections.devices.findOne(
{ _id: deviceId },
{ projection: { _lastInform: 1 } }
);
@@ -322,26 +322,27 @@ export async function insertTasks(tasks: any[]): Promise {
for (const task of tasks) {
sanitizeTask(task);
if (task.uniqueKey) {
- await db.tasksCollection.deleteOne({
+ await collections.tasks.deleteOne({
device: task.device,
uniqueKey: task.uniqueKey,
});
}
}
- await db.tasksCollection.insertMany(tasks);
+ await collections.tasks.insertMany(tasks);
+ for (const task of tasks) task._id = task._id.toString();
return tasks;
}
export async function deleteDevice(deviceId: string): Promise {
await Promise.all([
- db.tasksCollection.deleteMany({ device: deviceId }),
- db.devicesCollection.deleteOne({ _id: deviceId }),
- db.faultsCollection.deleteMany({
+ collections.tasks.deleteMany({ device: deviceId }),
+ collections.devices.deleteOne({ _id: deviceId }),
+ collections.faults.deleteMany({
_id: {
$regex: `^${common.escapeRegExp(deviceId)}\\:`,
},
}),
- db.operationsCollection.deleteMany({
+ collections.operations.deleteMany({
_id: {
$regex: `^${common.escapeRegExp(deviceId)}\\:`,
},
diff --git a/lib/cwmp.ts b/lib/cwmp.ts
index 70f2591..47ab7a5 100644
--- a/lib/cwmp.ts
+++ b/lib/cwmp.ts
@@ -1473,10 +1473,15 @@ async function listenerAsync(
const chunks: Buffer[] = [];
try {
+ let readableEnded = false;
+ stream.on("end", () => {
+ readableEnded = true;
+ });
for await (const chunk of stream) chunks.push(chunk);
// In Node versions prior to 15, the stream will not emit an error if the
// connection is closed before the stream is finished.
- if (!stream.readableEnded) throw new Error("Connection closed");
+ // For Node 12.9+ we can just use stream.readableEnded
+ if (!readableEnded) throw new Error("Connection closed");
} catch (err) {
return;
}
diff --git a/lib/db.ts b/lib/db.ts
index 4f9ad16..94d7959 100644
--- a/lib/db.ts
+++ b/lib/db.ts
@@ -32,18 +32,20 @@ import {
import Path from "./common/path";
import * as MongoTypes from "./mongodb-types";
-export let tasksCollection: Collection,
- devicesCollection: Collection,
- presetsCollection: Collection,
- objectsCollection: Collection,
- provisionsCollection: Collection,
- virtualParametersCollection: Collection,
- faultsCollection: Collection,
- filesCollection: Collection,
- operationsCollection: Collection,
- permissionsCollection: Collection,
- usersCollection: Collection,
- configCollection: Collection;
+export const collections = {
+ devices: null as Collection,
+ presets: null as Collection,
+ objects: null as Collection,
+ provisions: null as Collection,
+ virtualParameters: null as Collection,
+ faults: null as Collection,
+ tasks: null as Collection,
+ files: null as Collection,
+ operations: null as Collection,
+ permissions: null as Collection,
+ users: null as Collection,
+ config: null as Collection,
+};
let clientPromise: Promise;
@@ -70,20 +72,20 @@ export async function connect(): Promise {
}
onConnect(async (db) => {
- tasksCollection = db.collection("tasks");
- await tasksCollection.createIndex({ device: 1, timestamp: 1 });
+ collections.tasks = db.collection("tasks");
+ await collections.tasks.createIndex({ device: 1, timestamp: 1 });
- devicesCollection = db.collection("devices");
- presetsCollection = db.collection("presets");
- objectsCollection = db.collection("objects");
- filesCollection = db.collection("fs.files");
- provisionsCollection = db.collection("provisions");
- virtualParametersCollection = db.collection("virtualParameters");
- faultsCollection = db.collection("faults");
- operationsCollection = db.collection("operations");
- permissionsCollection = db.collection("permissions");
- usersCollection = db.collection("users");
- configCollection = db.collection("config");
+ collections.devices = db.collection("devices");
+ collections.presets = db.collection("presets");
+ collections.objects = db.collection("objects");
+ collections.files = db.collection("fs.files");
+ collections.provisions = db.collection("provisions");
+ collections.virtualParameters = db.collection("virtualParameters");
+ collections.faults = db.collection("faults");
+ collections.operations = db.collection("operations");
+ collections.permissions = db.collection("permissions");
+ collections.users = db.collection("users");
+ collections.config = db.collection("config");
});
export async function disconnect(): Promise {
@@ -130,7 +132,7 @@ export async function fetchDevice(
],
];
- const device = await devicesCollection.findOne({ _id: id });
+ const device = await collections.devices.findOne({ _id: id });
if (!device) return null;
function storeParams(
@@ -194,7 +196,7 @@ export async function fetchDevice(
res.push([Path.parse(path + ".*"), obj["_timestamp"]]);
}
- const ts: number = device["_timestamp"] || 0;
+ const ts: number = +device["_timestamp"] || 0;
if (ts) res.push([Path.parse("*"), ts]);
for (const [k, v] of Object.entries(device)) {
@@ -621,15 +623,19 @@ export async function saveDevice(
delete update["$pull"];
}
- const result = await devicesCollection.updateOne({ _id: deviceId }, update, {
- upsert: isNew,
- });
+ const result = await collections.devices.updateOne(
+ { _id: deviceId },
+ update,
+ {
+ upsert: isNew,
+ }
+ );
if (!result.matchedCount && !result.upsertedCount)
throw new Error(`Device ${deviceId} not found in database`);
if (update2) {
- await devicesCollection.updateOne({ _id: deviceId }, update2);
+ await collections.devices.updateOne({ _id: deviceId }, update2);
return;
}
}
@@ -637,7 +643,7 @@ export async function saveDevice(
export async function getFaults(
deviceId: string
): Promise<{ [channel: string]: SessionFault }> {
- const res = await faultsCollection
+ const res = await collections.faults
.find({ _id: { $regex: `^${escapeRegExp(deviceId)}\\:` } })
.toArray();
@@ -677,21 +683,23 @@ export async function saveFault(
...(fault.expiry && { expiry: new Date(fault.expiry) }),
provisions: JSON.stringify(fault.provisions),
};
- await faultsCollection.replaceOne({ _id: id }, f, { upsert: true });
+ await collections.faults.replaceOne({ _id: id }, f, { upsert: true });
}
export async function deleteFault(
deviceId: string,
channel: string
): Promise {
- await faultsCollection.deleteOne({ _id: `${deviceId}:${channel}` });
+ await collections.faults.deleteOne({ _id: `${deviceId}:${channel}` });
}
export async function getDueTasks(
deviceId: string,
timestamp: number
): Promise<[Task[], number]> {
- const cur = tasksCollection.find({ device: deviceId }).sort({ timestamp: 1 });
+ const cur = collections.tasks
+ .find({ device: deviceId })
+ .sort({ timestamp: 1 });
const tasks = [] as Task[];
for await (const t of cur) {
@@ -736,7 +744,7 @@ export async function getDueTasks(
q = { _id: { $in: [t["file"], new ObjectId(t["file"])] } };
else q = { _id: t["file"] };
- const res = await filesCollection.find(q).toArray();
+ const res = await collections.files.find(q).toArray();
if (res[0]) {
if (!task.fileType) task.fileType = res[0].metadata.fileType;
@@ -753,7 +761,7 @@ export async function clearTasks(
deviceId: string,
taskIds: string[]
): Promise {
- await tasksCollection.deleteMany({
+ await collections.tasks.deleteMany({
_id: { $in: taskIds.map((id) => new ObjectId(id)) },
});
}
@@ -761,7 +769,7 @@ export async function clearTasks(
export async function getOperations(
deviceId: string
): Promise<{ [commandKey: string]: Operation }> {
- const res = await operationsCollection
+ const res = await collections.operations
.find({ _id: { $regex: `^${escapeRegExp(deviceId)}\\:` } })
.toArray();
@@ -803,7 +811,7 @@ export async function saveOperation(
retries: JSON.stringify(operation.retries),
args: JSON.stringify(operation.args),
};
- await operationsCollection.replaceOne({ _id: id }, o, {
+ await collections.operations.replaceOne({ _id: id }, o, {
upsert: true,
});
}
@@ -812,33 +820,33 @@ export async function deleteOperation(
deviceId: string,
commandKey: string
): Promise {
- await operationsCollection.deleteOne({ _id: `${deviceId}:${commandKey}` });
+ await collections.operations.deleteOne({ _id: `${deviceId}:${commandKey}` });
}
export async function getPresets(): Promise[]> {
- return presetsCollection.find().toArray();
+ return collections.presets.find().toArray();
}
export async function getObjects(): Promise[]> {
- return objectsCollection.find().toArray();
+ return collections.objects.find().toArray();
}
export async function getProvisions(): Promise[]> {
- return provisionsCollection.find().toArray();
+ return collections.provisions.find().toArray();
}
export async function getVirtualParameters(): Promise[]> {
- return virtualParametersCollection.find().toArray();
+ return collections.virtualParameters.find().toArray();
}
export function getFiles(): Promise[]> {
- return filesCollection.find().toArray();
+ return collections.files.find().toArray();
}
export async function getConfig(): Promise<
{ id: string; value: Expression }[]
> {
- const res = await configCollection.find().toArray();
+ const res = await collections.config.find().toArray();
return res.map((c) => ({
id: c["_id"],
value: parse(c["value"]),
@@ -854,7 +862,7 @@ interface Permission {
}
export async function getPermissions(): Promise {
- return permissionsCollection.find().toArray() as unknown as Permission[];
+ return collections.permissions.find().toArray() as unknown as Permission[];
}
interface User {
@@ -865,5 +873,5 @@ interface User {
}
export async function getUsers(): Promise {
- return usersCollection.find().toArray() as unknown as User[];
+ return collections.users.find().toArray() as unknown as User[];
}
diff --git a/lib/fs.ts b/lib/fs.ts
index e1cc5a1..3d44868 100644
--- a/lib/fs.ts
+++ b/lib/fs.ts
@@ -20,17 +20,15 @@
import * as url from "url";
import { IncomingMessage, ServerResponse } from "http";
import { PassThrough, pipeline, Readable } from "stream";
-import { Collection, GridFSBucket } from "mongodb";
-import { onConnect } from "./db";
+import { GridFSBucket } from "mongodb";
+import { onConnect, collections } from "./db";
import * as logger from "./logger";
import { getRequestOrigin } from "./forwarded";
import memoize from "./common/memoize";
-let filesCollection: Collection;
let filesBucket: GridFSBucket;
onConnect(async (db) => {
- filesCollection = db.collection("fs.files");
filesBucket = new GridFSBucket(db);
});
@@ -79,7 +77,7 @@ export async function listener(
remoteAddress: getRequestOrigin(request).remoteAddress,
};
- const file = await filesCollection.findOne({ _id: filename });
+ const file = await collections.files.findOne({ _id: filename });
if (!file) {
response.writeHead(404);
diff --git a/lib/mongodb-types.ts b/lib/mongodb-types.ts
index 64c166a..7b512f5 100644
--- a/lib/mongodb-types.ts
+++ b/lib/mongodb-types.ts
@@ -25,6 +25,7 @@ interface TaskBase {
timestamp?: Date;
expiry?: Date;
name: string;
+ device: string;
}
interface TaskGetParameterValues extends TaskBase {
@@ -105,3 +106,61 @@ export interface Cache {
timestamp: Date;
expire: Date;
}
+
+export interface Device {
+ _id: string;
+ _lastInform: Date;
+ _registered: Date;
+ _tags?: string[];
+ _timestamp?: Date;
+}
+
+export interface Preset {
+ _id: string;
+ weight: number;
+ channels: string;
+ provisions: string;
+ events: Record;
+ configurations: { type: string; name: string; args: Expression[] }[];
+}
+
+export interface Object {
+ _id: string;
+}
+
+export interface Provision {
+ _id: string;
+ script: string;
+}
+
+export interface VirtualParameter {
+ _id: string;
+ script: string;
+}
+
+export interface File {
+ _id: string;
+ length: number;
+ filename: string;
+ metadata?: {
+ fileType?: string;
+ oui?: string;
+ productClass?: string;
+ version?: string;
+ };
+}
+
+export interface Permission {
+ _id: string;
+ role: string;
+ resource: string;
+ access: 1 | 2 | 3;
+ validate: string;
+}
+
+export interface User {
+ _id: string;
+ password: string;
+ roles: string;
+ salt: string;
+}
diff --git a/lib/nbi.ts b/lib/nbi.ts
index 1deec0b..c4cfe37 100644
--- a/lib/nbi.ts
+++ b/lib/nbi.ts
@@ -17,11 +17,10 @@
* along with GenieACS. If not, see .
*/
-import * as url from "url";
import { Collection, GridFSBucket, ObjectId } from "mongodb";
import * as vm from "vm";
import * as config from "./config";
-import { onConnect, optimizeProjection } from "./db";
+import { onConnect, optimizeProjection, collections } from "./db";
import * as query from "./query";
import * as apiFunctions from "./api-functions";
import { IncomingMessage, ServerResponse } from "http";
@@ -30,7 +29,7 @@ import { version as VERSION } from "../package.json";
import { ping } from "./ping";
import * as logger from "./logger";
import { flattenDevice } from "./mongodb-functions";
-import { getSocketEndpoints } from "./server";
+import { getRequestOrigin } from "./forwarded";
const DEVICE_TASKS_REGEX = /^\/devices\/([a-zA-Z0-9\-_%]+)\/tasks\/?$/;
const TASKS_REGEX = /^\/tasks\/([a-zA-Z0-9\-_%]+)(\/[a-zA-Z_]*)?$/;
@@ -47,681 +46,504 @@ const VIRTUAL_PARAMETERS_REGEX =
/^\/virtual_parameters\/([a-zA-Z0-9\-_%]+)\/?$/;
const FAULTS_REGEX = /^\/faults\/([a-zA-Z0-9\-_%:]+)\/?$/;
-const collections: Record = {
- tasks: null as Collection,
- devices: null as Collection,
- presets: null as Collection,
- objects: null as Collection,
- files: null as Collection,
- provisions: null as Collection,
- virtualParameters: null as Collection,
- faults: null as Collection,
-};
let filesBucket: GridFSBucket;
onConnect(async (db) => {
- for (const k of Object.keys(collections)) {
- if (k === "files") collections[k] = db.collection("fs.files");
- else collections[k] = db.collection(k);
- }
filesBucket = new GridFSBucket(db);
});
-function throwError(err: Error, httpResponse?: ServerResponse): never {
- if (httpResponse) {
- httpResponse.writeHead(500, { Connection: "close" });
- httpResponse.end(`${err.name}: ${err.message}`);
- }
- throw err;
+async function getBody(request: IncomingMessage): Promise {
+ const chunks: Buffer[] = [];
+ let readableEnded = false;
+ request.on("end", () => {
+ readableEnded = true;
+ });
+ for await (const chunk of request) chunks.push(chunk);
+ // In Node versions prior to 15, the stream will not emit an error if the
+ // connection is closed before the stream is finished.
+ // For Node 12.9+ we can just use stream.readableEnded
+ if (!readableEnded) throw new Error("Connection closed");
+ return Buffer.concat(chunks);
}
export function listener(
request: IncomingMessage,
response: ServerResponse
): void {
- const chunks = [];
- let bytes = 0;
response.setHeader("GenieACS-Version", VERSION);
- request.addListener("data", (chunk): void => {
- chunks.push(chunk);
- bytes += chunk.length;
+ const origin = getRequestOrigin(request);
+ const url = new URL(
+ request.url,
+ (origin.encrypted ? "https://" : "http://") + origin.host
+ );
+
+ let readableEnded = false;
+ // For Node 12.9+ we can just use stream.readableEnded
+ request.on("end", () => {
+ readableEnded = true;
});
- function getBody(): Buffer {
- // Write all chunks into a Buffer
- const body = Buffer.allocUnsafe(bytes);
- let offset = 0;
- for (const chunk of chunks) {
- chunk.copy(body, offset, 0, chunk.length);
- offset += chunk.length;
+ getBody(request)
+ .then((body) => {
+ logger.accessInfo(
+ Object.assign({}, Object.fromEntries(url.searchParams), {
+ remoteAddress: origin.remoteAddress,
+ message: `${request.method} ${url.pathname}`,
+ })
+ );
+ return handler(request, response, url, body);
+ })
+ .catch((err) => {
+ // Ignore incomplete requests
+ if (!readableEnded) return;
+
+ if (!response.headersSent) {
+ response.writeHead(500, { Connection: "close" });
+ response.end(`${err.name}: ${err.message}`);
+ }
+ throw err;
+ });
+}
+
+async function handler(
+ request: IncomingMessage,
+ response: ServerResponse,
+ url: URL,
+ body: Buffer
+): Promise {
+ if (PRESETS_REGEX.test(url.pathname)) {
+ const presetName = decodeURIComponent(PRESETS_REGEX.exec(url.pathname)[1]);
+ if (request.method === "PUT") {
+ let preset;
+ try {
+ preset = JSON.parse(body.toString());
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+ preset._id = presetName;
+ await collections.presets.replaceOne({ _id: presetName }, preset, {
+ upsert: true,
+ });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else if (request.method === "DELETE") {
+ await collections.presets.deleteOne({ _id: presetName });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT, DELETE" });
+ response.end("405 Method Not Allowed");
}
- return body;
- }
-
- request.addListener("end", () => {
- const body = getBody();
- const urlParts = url.parse(request.url, true);
- const socketEndpoints = getSocketEndpoints(request.socket);
-
- logger.accessInfo(
- Object.assign({}, urlParts.query, {
- remoteAddress: socketEndpoints.remoteAddress,
- message: `${request.method} ${urlParts.pathname}`,
- })
+ } else if (OBJECTS_REGEX.test(url.pathname)) {
+ const objectName = decodeURIComponent(OBJECTS_REGEX.exec(url.pathname)[1]);
+ if (request.method === "PUT") {
+ let object;
+ try {
+ object = JSON.parse(body.toString());
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+ object._id = objectName;
+ await collections.objects.replaceOne({ _id: objectName }, object, {
+ upsert: true,
+ });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else if (request.method === "DELETE") {
+ await collections.objects.deleteOne({ _id: objectName });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT, DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (PROVISIONS_REGEX.test(url.pathname)) {
+ const provisionName = decodeURIComponent(
+ PROVISIONS_REGEX.exec(url.pathname)[1]
);
+ if (request.method === "PUT") {
+ const object = {
+ _id: provisionName,
+ script: body.toString(),
+ };
- if (PRESETS_REGEX.test(urlParts.pathname)) {
- const presetName = decodeURIComponent(
- PRESETS_REGEX.exec(urlParts.pathname)[1]
+ try {
+ new vm.Script(`"use strict";(function(){\n${object.script}\n})();`);
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+
+ await collections.provisions.replaceOne({ _id: provisionName }, object, {
+ upsert: true,
+ });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else if (request.method === "DELETE") {
+ await collections.provisions.deleteOne({ _id: provisionName });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT, DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (VIRTUAL_PARAMETERS_REGEX.test(url.pathname)) {
+ const virtualParameterName = decodeURIComponent(
+ VIRTUAL_PARAMETERS_REGEX.exec(url.pathname)[1]
+ );
+ if (request.method === "PUT") {
+ const object = {
+ _id: virtualParameterName,
+ script: body.toString(),
+ };
+
+ try {
+ new vm.Script(`"use strict";(function(){\n${object.script}\n})();`);
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+
+ await collections.virtualParameters.replaceOne(
+ { _id: virtualParameterName },
+ object,
+ { upsert: true }
);
- if (request.method === "PUT") {
- let preset;
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else if (request.method === "DELETE") {
+ await collections.virtualParameters.deleteOne({
+ _id: virtualParameterName,
+ });
+ await cache.del("presets_hash");
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT, DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (TAGS_REGEX.test(url.pathname)) {
+ const r = TAGS_REGEX.exec(url.pathname);
+ const deviceId = decodeURIComponent(r[1]);
+ const tag = decodeURIComponent(r[2]);
+ if (request.method === "POST") {
+ await collections.devices.updateOne(
+ { _id: deviceId },
+ { $addToSet: { _tags: tag } }
+ );
+ response.writeHead(200);
+ response.end();
+ } else if (request.method === "DELETE") {
+ await collections.devices.updateOne(
+ { _id: deviceId },
+ { $pull: { _tags: tag } }
+ );
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "POST, DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (FAULTS_REGEX.test(url.pathname)) {
+ if (request.method === "DELETE") {
+ const faultId = decodeURIComponent(FAULTS_REGEX.exec(url.pathname)[1]);
+ const deviceId = faultId.split(":", 1)[0];
+ const channel = faultId.slice(deviceId.length + 1);
+ await collections.faults.deleteOne({ _id: faultId });
+ if (channel.startsWith("task_")) {
+ const objId = new ObjectId(channel.slice(5));
+ await collections.tasks.deleteOne({ _id: objId });
+ await cache.del(`${deviceId}_tasks_faults_operations`);
+ response.writeHead(200);
+ response.end();
+ return;
+ }
+
+ await cache.del(`${deviceId}_tasks_faults_operations`);
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (DEVICE_TASKS_REGEX.test(url.pathname)) {
+ if (request.method === "POST") {
+ const deviceId = decodeURIComponent(
+ DEVICE_TASKS_REGEX.exec(url.pathname)[1]
+ );
+ if (body.length) {
+ let task;
try {
- preset = JSON.parse(body.toString());
+ task = JSON.parse(body.toString());
} catch (err) {
response.writeHead(400);
response.end(`${err.name}: ${err.message}`);
return;
}
- preset._id = presetName;
- collections.presets.replaceOne(
- { _id: presetName },
- preset,
- { upsert: true },
- (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
- );
- } else if (request.method === "DELETE") {
- collections.presets.deleteOne({ _id: presetName }, (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
+ task.device = deviceId;
+ const dev = await collections.devices.findOne({
+ _id: deviceId,
});
- } else {
- response.writeHead(405, { Allow: "PUT, DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (OBJECTS_REGEX.test(urlParts.pathname)) {
- const objectName = decodeURIComponent(
- OBJECTS_REGEX.exec(urlParts.pathname)[1]
- );
- if (request.method === "PUT") {
- let object;
- try {
- object = JSON.parse(body.toString());
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
- return;
- }
- object._id = objectName;
- collections.objects.replaceOne(
- { _id: objectName },
- object,
- { upsert: true },
- (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
- );
- } else if (request.method === "DELETE") {
- collections.objects.deleteOne({ _id: objectName }, (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- });
- } else {
- response.writeHead(405, { Allow: "PUT, DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (PROVISIONS_REGEX.test(urlParts.pathname)) {
- const provisionName = decodeURIComponent(
- PROVISIONS_REGEX.exec(urlParts.pathname)[1]
- );
- if (request.method === "PUT") {
- const object = {
- _id: provisionName,
- script: body.toString(),
- };
-
- try {
- new vm.Script(`"use strict";(function(){\n${object.script}\n})();`);
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
+ if (!dev) {
+ response.writeHead(404);
+ response.end("No such device");
return;
}
- collections.provisions.replaceOne(
- { _id: provisionName },
- object,
- { upsert: true },
- (err) => {
- if (err) return void throwError(err, response);
+ const device = flattenDevice(dev);
+ await apiFunctions.insertTasks(task);
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
+ const lastInform = Date.now();
+
+ const socketTimeout: number = request.socket["timeout"];
+
+ // Disable socket timeout while waiting for session
+ if (socketTimeout) request.socket.setTimeout(0);
+
+ const notInSession = await apiFunctions.awaitSessionEnd(
+ deviceId,
+ 30000
);
- } else if (request.method === "DELETE") {
- collections.provisions.deleteOne({ _id: provisionName }, (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- });
- } else {
- response.writeHead(405, { Allow: "PUT, DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (VIRTUAL_PARAMETERS_REGEX.test(urlParts.pathname)) {
- const virtualParameterName = decodeURIComponent(
- VIRTUAL_PARAMETERS_REGEX.exec(urlParts.pathname)[1]
- );
- if (request.method === "PUT") {
- const object = {
- _id: virtualParameterName,
- script: body.toString(),
- };
-
- try {
- new vm.Script(`"use strict";(function(){\n${object.script}\n})();`);
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
+ await cache.del(`${deviceId}_tasks_faults_operations`);
+ if (url.searchParams.has("connection_request")) {
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
+ response.writeHead(202, {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
return;
}
- collections.virtualParameters.replaceOne(
- { _id: virtualParameterName },
- object,
- { upsert: true },
- (err) => {
- if (err) return void throwError(err, response);
+ if (!notInSession) {
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
+ response.writeHead(202, "Task queued but not processed", {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
+ return;
+ }
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
+ const status = await apiFunctions.connectionRequest(deviceId, device);
+
+ if (status) {
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
+ response.writeHead(202, status, {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
+ return;
+ }
+
+ const onlineThreshold =
+ (url.searchParams.has("timeout") &&
+ parseInt(url.searchParams.get("timeout"))) ||
+ (config.get("DEVICE_ONLINE_THRESHOLD", deviceId) as number);
+
+ const sessionStarted = await apiFunctions.awaitSessionStart(
+ deviceId,
+ lastInform,
+ onlineThreshold
+ );
+ if (!sessionStarted) {
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
+ response.writeHead(202, "Task queued but not processed", {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
+ return;
+ }
+
+ const sessionEnded = await apiFunctions.awaitSessionEnd(
+ deviceId,
+ 120000
+ );
+ if (!sessionEnded) {
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
+ response.writeHead(202, "Task queued but not processed", {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
+ return;
+ }
+
+ const prom1 = collections.tasks.findOne(
+ { _id: task._id },
+ { projection: { _id: 1 } }
+ );
+ const prom2 = collections.faults.findOne(
+ { _id: `${deviceId}:task_${task._id}` },
+ {
+ projection: { _id: 1 },
}
);
- } else if (request.method === "DELETE") {
- collections.virtualParameters.deleteOne(
- { _id: virtualParameterName },
- (err) => {
- if (err) return void throwError(err, response);
- cache
- .del("presets_hash")
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
- );
- } else {
- response.writeHead(405, { Allow: "PUT, DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (TAGS_REGEX.test(urlParts.pathname)) {
- const r = TAGS_REGEX.exec(urlParts.pathname);
- const deviceId = decodeURIComponent(r[1]);
- const tag = decodeURIComponent(r[2]);
- if (request.method === "POST") {
- collections.devices.updateOne(
- { _id: deviceId },
- { $addToSet: { _tags: tag } },
- (err) => {
- if (err) return void throwError(err, response);
- response.writeHead(200);
- response.end();
- }
- );
- } else if (request.method === "DELETE") {
- collections.devices.updateOne(
- { _id: deviceId },
- { $pull: { _tags: tag } },
- (err) => {
- if (err) return void throwError(err, response);
+ const [t, f] = await Promise.all([prom1, prom2]);
- response.writeHead(200);
- response.end();
- }
- );
- } else {
- response.writeHead(405, { Allow: "POST, DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (FAULTS_REGEX.test(urlParts.pathname)) {
- if (request.method === "DELETE") {
- const faultId = decodeURIComponent(
- FAULTS_REGEX.exec(urlParts.pathname)[1]
- );
- const deviceId = faultId.split(":", 1)[0];
- const channel = faultId.slice(deviceId.length + 1);
- collections.faults.deleteOne({ _id: faultId }, (err) => {
- if (err) return void throwError(err, response);
+ // Restore socket timeout
+ if (socketTimeout) request.socket.setTimeout(socketTimeout);
- if (channel.startsWith("task_")) {
- const objId = new ObjectId(channel.slice(5));
- return void collections.tasks.deleteOne({ _id: objId }, (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del(`${deviceId}_tasks_faults_operations`)
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- });
- }
-
- cache
- .del(`${deviceId}_tasks_faults_operations`)
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- });
- } else {
- response.writeHead(405, { Allow: "DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (DEVICE_TASKS_REGEX.test(urlParts.pathname)) {
- if (request.method === "POST") {
- const deviceId = decodeURIComponent(
- DEVICE_TASKS_REGEX.exec(urlParts.pathname)[1]
- );
- if (body.length) {
- let task;
- try {
- task = JSON.parse(body.toString());
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
- return;
- }
- task.device = deviceId;
- collections.devices
- .findOne({ _id: deviceId })
- .then(async (dev) => {
- if (!dev) {
- response.writeHead(404);
- response.end("No such device");
- return;
- }
-
- const device = flattenDevice(dev);
- await apiFunctions.insertTasks(task);
-
- const lastInform = Date.now();
-
- const socketTimeout: number = request.socket["timeout"];
-
- // Disable socket timeout while waiting for session
- if (socketTimeout) request.socket.setTimeout(0);
-
- const notInSession = await apiFunctions.awaitSessionEnd(
- deviceId,
- 30000
- );
- await cache.del(`${deviceId}_tasks_faults_operations`);
- if (urlParts.query.connection_request == null) {
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
- response.writeHead(202, {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- return;
- }
-
- if (!notInSession) {
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
- response.writeHead(202, "Task queued but not processed", {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- return;
- }
-
- const status = await apiFunctions.connectionRequest(
- deviceId,
- device
- );
-
- if (status) {
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
- response.writeHead(202, status, {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- return;
- }
-
- const onlineThreshold =
- (urlParts.query.timeout &&
- parseInt(urlParts.query.timeout as string)) ||
- (config.get("DEVICE_ONLINE_THRESHOLD", deviceId) as number);
-
- const sessionStarted = await apiFunctions.awaitSessionStart(
- deviceId,
- lastInform,
- onlineThreshold
- );
- if (!sessionStarted) {
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
- response.writeHead(202, "Task queued but not processed", {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- return;
- }
-
- const sessionEnded = await apiFunctions.awaitSessionEnd(
- deviceId,
- 120000
- );
- if (!sessionEnded) {
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
- response.writeHead(202, "Task queued but not processed", {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- return;
- }
-
- const prom1 = collections.tasks.findOne(
- { _id: task._id },
- { projection: { _id: 1 } }
- );
- const prom2 = collections.faults.findOne(
- { _id: `${deviceId}:task_${task._id}` },
- {
- projection: { _id: 1 },
- }
- );
-
- const [t, f] = await Promise.all([prom1, prom2]);
-
- // Restore socket timeout
- if (socketTimeout) request.socket.setTimeout(socketTimeout);
-
- if (f) {
- response.writeHead(202, "Task faulted", {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(t || task));
- } else if (t) {
- response.writeHead(202, "Task queued but not processed", {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(t));
- } else {
- response.writeHead(200, {
- "Content-Type": "application/json",
- });
- response.end(JSON.stringify(task));
- }
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- } else if (urlParts.query.connection_request != null) {
- // No task, send connection request only
- collections.devices
- .findOne({ _id: deviceId })
- .then(async (dev) => {
- if (!dev) {
- response.writeHead(404);
- response.end("No such device");
- return;
- }
- return apiFunctions.connectionRequest(deviceId).then((status) => {
- if (status) {
- response.writeHead(504, status);
- response.end(status);
- return;
- }
- response.writeHead(200);
- response.end();
- });
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
+ if (f) {
+ response.writeHead(202, "Task faulted", {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(t || task));
+ } else if (t) {
+ response.writeHead(202, "Task queued but not processed", {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(t));
} else {
- response.writeHead(400);
- response.end();
+ response.writeHead(200, {
+ "Content-Type": "application/json",
+ });
+ response.end(JSON.stringify(task));
}
+ } else if (url.searchParams.has("connection_request")) {
+ // No task, send connection request only
+ const dev = await collections.devices.findOne({
+ _id: deviceId,
+ });
+ if (!dev) {
+ response.writeHead(404);
+ response.end("No such device");
+ return;
+ }
+ const status = await apiFunctions.connectionRequest(deviceId);
+ if (status) {
+ response.writeHead(504, status);
+ response.end(status);
+ return;
+ }
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(400);
+ response.end();
+ }
+ } else {
+ response.writeHead(405, { Allow: "POST" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (TASKS_REGEX.test(url.pathname)) {
+ const r = TASKS_REGEX.exec(url.pathname);
+ const taskId = decodeURIComponent(r[1]);
+ const action = r[2];
+ if (!action || action === "/") {
+ if (request.method === "DELETE") {
+ const task = await collections.tasks.findOne(
+ { _id: new ObjectId(taskId) },
+ { projection: { device: 1 } }
+ );
+
+ if (!task) {
+ response.writeHead(404);
+ response.end("Task not found");
+ return;
+ }
+
+ const deviceId = task.device;
+ await collections.tasks.deleteOne({ _id: new ObjectId(taskId) });
+
+ await collections.faults.deleteOne({
+ _id: `${deviceId}:task_${taskId}`,
+ });
+
+ await cache.del(`${deviceId}_tasks_faults_operations`);
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (action === "/retry") {
+ if (request.method === "POST") {
+ const task = await collections.tasks.findOne(
+ { _id: new ObjectId(taskId) },
+ { projection: { device: 1 } }
+ );
+
+ const deviceId = task.device;
+ await collections.faults.deleteOne({
+ _id: `${deviceId}:task_${taskId}`,
+ });
+
+ await cache.del(`${deviceId}_tasks_faults_operations`);
+ response.writeHead(200);
+ response.end();
} else {
response.writeHead(405, { Allow: "POST" });
response.end("405 Method Not Allowed");
}
- } else if (TASKS_REGEX.test(urlParts.pathname)) {
- const r = TASKS_REGEX.exec(urlParts.pathname);
- const taskId = decodeURIComponent(r[1]);
- const action = r[2];
- if (!action || action === "/") {
- if (request.method === "DELETE") {
- collections.tasks.findOne(
- { _id: new ObjectId(taskId) },
- { projection: { device: 1 } },
- (err, task) => {
- if (err) return void throwError(err, response);
-
- if (!task) {
- response.writeHead(404);
- response.end("Task not found");
- return;
- }
-
- const deviceId = task.device;
- collections.tasks.deleteOne(
- { _id: new ObjectId(taskId) },
- (err) => {
- if (err) return void throwError(err, response);
-
- collections.faults.deleteOne(
- { _id: `${deviceId}:task_${taskId}` },
- (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del(`${deviceId}_tasks_faults_operations`)
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
- );
- }
- );
- }
- );
- } else {
- response.writeHead(405, { Allow: "PUT DELETE" });
- response.end("405 Method Not Allowed");
- }
- } else if (action === "/retry") {
- if (request.method === "POST") {
- collections.tasks.findOne(
- { _id: new ObjectId(taskId) },
- { projection: { device: 1 } },
- (err, task) => {
- if (err) return void throwError(err, response);
-
- const deviceId = task.device;
- collections.faults.deleteOne(
- { _id: `${deviceId}:task_${taskId}` },
- (err) => {
- if (err) return void throwError(err, response);
-
- cache
- .del(`${deviceId}_tasks_faults_operations`)
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- }
- );
- }
- );
- } else {
- response.writeHead(405, { Allow: "POST" });
- response.end("405 Method Not Allowed");
- }
- } else {
- response.writeHead(404);
- response.end();
+ } else {
+ response.writeHead(404);
+ response.end();
+ }
+ } else if (FILES_REGEX.test(url.pathname)) {
+ const filename = decodeURIComponent(FILES_REGEX.exec(url.pathname)[1]);
+ if (request.method === "PUT") {
+ const metadata = {
+ fileType: request.headers.filetype,
+ oui: request.headers.oui,
+ productClass: request.headers.productclass,
+ version: request.headers.version,
+ };
+ try {
+ await filesBucket.delete(filename as unknown as ObjectId);
+ } catch (err) {
+ // Ignore error if file doesn't exist
}
- } else if (FILES_REGEX.test(urlParts.pathname)) {
- const filename = decodeURIComponent(
- FILES_REGEX.exec(urlParts.pathname)[1]
- );
- if (request.method === "PUT") {
- const metadata = {
- fileType: request.headers.filetype,
- oui: request.headers.oui,
- productClass: request.headers.productclass,
- version: request.headers.version,
- };
- filesBucket.delete(filename as unknown as ObjectId, () => {
- const uploadStream = filesBucket.openUploadStreamWithId(
- filename as unknown as ObjectId,
- filename,
- {
- metadata: metadata,
- }
- );
- uploadStream.on("error", (err) => {
- throwError(err, response);
- });
-
- uploadStream.end(body, () => {
- response.writeHead(201);
- response.end();
- });
- });
- } else if (request.method === "DELETE") {
- filesBucket.delete(filename as unknown as ObjectId, (err) => {
- if (err) {
- if (err.message.startsWith("FileNotFound")) {
- response.writeHead(404);
- response.end("404 Not Found");
- return;
- }
- return void throwError(err, response);
+ return new Promise((resolve, reject) => {
+ const uploadStream = filesBucket.openUploadStreamWithId(
+ filename as unknown as ObjectId,
+ filename,
+ {
+ metadata: metadata,
}
+ );
- response.writeHead(200);
+ uploadStream.on("error", reject);
+
+ uploadStream.end(body, () => {
+ response.writeHead(201);
response.end();
+ resolve();
});
- } else {
- response.writeHead(405, { Allow: "PUT, DELETE" });
- response.end("405 Method Not Allowed");
+ });
+ } else if (request.method === "DELETE") {
+ try {
+ await filesBucket.delete(filename as unknown as ObjectId);
+ } catch (err) {
+ if (err.message.startsWith("FileNotFound")) {
+ response.writeHead(404);
+ response.end("404 Not Found");
+ return;
+ }
+ throw err;
}
- } else if (PING_REGEX.test(urlParts.pathname)) {
- const host = decodeURIComponent(PING_REGEX.exec(urlParts.pathname)[1]);
+ response.writeHead(200);
+ response.end();
+ } else {
+ response.writeHead(405, { Allow: "PUT, DELETE" });
+ response.end("405 Method Not Allowed");
+ }
+ } else if (PING_REGEX.test(url.pathname)) {
+ const host = decodeURIComponent(PING_REGEX.exec(url.pathname)[1]);
+ return new Promise((resolve) => {
ping(host, (err, res, stdout) => {
if (err) {
if (!res) {
@@ -739,147 +561,133 @@ export function listener(
"Cache-Control": "no-cache",
});
response.end(stdout);
+ resolve();
});
- } else if (DELETE_DEVICE_REGEX.test(urlParts.pathname)) {
- if (request.method !== "DELETE") {
- response.writeHead(405, { Allow: "DELETE" });
- response.end("405 Method Not Allowed");
- return;
- }
+ });
+ } else if (DELETE_DEVICE_REGEX.test(url.pathname)) {
+ if (request.method !== "DELETE") {
+ response.writeHead(405, { Allow: "DELETE" });
+ response.end("405 Method Not Allowed");
+ return;
+ }
- const deviceId = decodeURIComponent(
- DELETE_DEVICE_REGEX.exec(urlParts.pathname)[1]
- );
- apiFunctions
- .deleteDevice(deviceId)
- .then(() => {
- response.writeHead(200);
- response.end();
- })
- .catch((err) => {
- setTimeout(() => {
- throwError(err, response);
- });
- });
- } else if (QUERY_REGEX.test(urlParts.pathname)) {
- let collectionName = QUERY_REGEX.exec(urlParts.pathname)[1];
+ const deviceId = decodeURIComponent(
+ DELETE_DEVICE_REGEX.exec(url.pathname)[1]
+ );
+ await apiFunctions.deleteDevice(deviceId);
+ response.writeHead(200);
+ response.end();
+ } else if (QUERY_REGEX.test(url.pathname)) {
+ let collectionName = QUERY_REGEX.exec(url.pathname)[1];
- // Convert to camel case
- let i = collectionName.indexOf("_");
- while (i++ >= 0) {
- const up =
- i < collectionName.length ? collectionName[i].toUpperCase() : "";
- collectionName =
- collectionName.slice(0, i - 1) + up + collectionName.slice(i + 1);
- i = collectionName.indexOf("_", i);
- }
+ // Convert to camel case
+ let i = collectionName.indexOf("_");
+ while (i++ >= 0) {
+ const up =
+ i < collectionName.length ? collectionName[i].toUpperCase() : "";
+ collectionName =
+ collectionName.slice(0, i - 1) + up + collectionName.slice(i + 1);
+ i = collectionName.indexOf("_", i);
+ }
- if (request.method !== "GET" && request.method !== "HEAD") {
- response.writeHead(405, { Allow: "GET, HEAD" });
- response.end("405 Method Not Allowed");
- return;
- }
+ if (request.method !== "GET" && request.method !== "HEAD") {
+ response.writeHead(405, { Allow: "GET, HEAD" });
+ response.end("405 Method Not Allowed");
+ return;
+ }
- const collection = collections[collectionName];
- if (!collection) {
- response.writeHead(404);
- response.end("404 Not Found");
- return;
- }
-
- let q = {};
- if (urlParts.query.query) {
- try {
- q = JSON.parse(urlParts.query.query as string);
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
- return;
- }
- }
-
- switch (collectionName) {
- case "devices":
- q = query.expand(q);
- break;
- case "tasks":
- q = query.sanitizeQueryTypes(q, {
- _id: (v) => new ObjectId(v as string),
- timestamp: (v) => new Date(v as number),
- retries: Number,
- });
- break;
- case "faults":
- q = query.sanitizeQueryTypes(q, {
- timestamp: (v) => new Date(v as number),
- retries: Number,
- });
- }
-
- let projection = null;
- if (urlParts.query.projection) {
- projection = {};
- for (const p of (urlParts.query.projection as string).split(","))
- projection[p.trim()] = 1;
- projection = optimizeProjection(projection);
- }
-
- const cur = collection.find(q, { projection: projection });
-
- if (urlParts.query.sort) {
- let s;
- try {
- s = JSON.parse(urlParts.query.sort as string);
- } catch (err) {
- response.writeHead(400);
- response.end(`${err.name}: ${err.message}`);
- return;
- }
- const sort = {};
- for (const [k, v] of Object.entries(s)) {
- if (k[k.lastIndexOf(".") + 1] !== "_" && collectionName === "devices")
- sort[`${k}._value`] = v;
- else sort[k] = v;
- }
-
- cur.sort(sort);
- }
-
- collection.countDocuments(q, (err, total) => {
- if (err) return void throwError(err);
-
- response.writeHead(200, {
- "Content-Type": "application/json",
- total: total,
- });
-
- if (request.method === "HEAD") {
- response.end();
- return;
- }
-
- if (urlParts.query.skip)
- cur.skip(parseInt(urlParts.query.skip as string));
-
- if (urlParts.query.limit)
- cur.limit(parseInt(urlParts.query.limit as string));
-
- response.write("[\n");
- i = 0;
- cur.forEach(
- (item) => {
- if (i++) response.write(",\n");
- response.write(JSON.stringify(item));
- },
- (err) => {
- if (err) return void throwError(err);
- response.end("\n]");
- }
- );
- });
- } else {
+ const collection = collections[collectionName] as Collection;
+ if (!collection) {
response.writeHead(404);
response.end("404 Not Found");
+ return;
}
- });
+
+ let q = {};
+ if (url.searchParams.has("query")) {
+ try {
+ q = JSON.parse(url.searchParams.get("query") as string);
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+ }
+
+ switch (collectionName) {
+ case "devices":
+ q = query.expand(q);
+ break;
+ case "tasks":
+ q = query.sanitizeQueryTypes(q, {
+ _id: (v) => new ObjectId(v as string),
+ timestamp: (v) => new Date(v as number),
+ retries: Number,
+ });
+ break;
+ case "faults":
+ q = query.sanitizeQueryTypes(q, {
+ timestamp: (v) => new Date(v as number),
+ retries: Number,
+ });
+ }
+
+ let projection = null;
+ if (url.searchParams.has("projection")) {
+ projection = {};
+ for (const p of (url.searchParams.get("projection") as string).split(","))
+ projection[p.trim()] = 1;
+ projection = optimizeProjection(projection);
+ }
+
+ const cur = collection.find(q, { projection: projection });
+
+ if (url.searchParams.has("sort")) {
+ let s;
+ try {
+ s = JSON.parse(url.searchParams.get("sort") as string);
+ } catch (err) {
+ response.writeHead(400);
+ response.end(`${err.name}: ${err.message}`);
+ return;
+ }
+ const sort = {};
+ for (const [k, v] of Object.entries(s)) {
+ if (k[k.lastIndexOf(".") + 1] !== "_" && collectionName === "devices")
+ sort[`${k}._value`] = v;
+ else sort[k] = v;
+ }
+
+ cur.sort(sort);
+ }
+
+ const total = await collection.countDocuments(q);
+
+ response.writeHead(200, {
+ "Content-Type": "application/json",
+ total: total,
+ });
+
+ if (request.method === "HEAD") {
+ response.end();
+ return;
+ }
+
+ if (url.searchParams.has("skip"))
+ cur.skip(parseInt(url.searchParams.get("skip") as string));
+
+ if (url.searchParams.has("limit"))
+ cur.limit(parseInt(url.searchParams.get("limit") as string));
+
+ response.write("[\n");
+ i = 0;
+ for await (const item of cur) {
+ if (i++) response.write(",\n");
+ response.write(JSON.stringify(item));
+ }
+ response.end("\n]");
+ } else {
+ response.writeHead(404);
+ response.end("404 Not Found");
+ }
}
diff --git a/lib/ui/api-functions.ts b/lib/ui/api-functions.ts
index c128a34..140732b 100644
--- a/lib/ui/api-functions.ts
+++ b/lib/ui/api-functions.ts
@@ -145,19 +145,19 @@ export async function postTasks(
};
}
- const promises = [];
+ const promises: Promise[] = [];
for (const s of statuses) {
- promises.push(db.query("tasks", ["=", ["PARAM", "_id"], s._id]));
+ promises.push(db.count("tasks", ["=", ["PARAM", "_id"], s._id]));
promises.push(
- db.query("faults", ["=", ["PARAM", "_id"], `${deviceId}:task_${s._id}`])
+ db.count("faults", ["=", ["PARAM", "_id"], `${deviceId}:task_${s._id}`])
);
}
const res = await Promise.all(promises);
for (const [i, r] of statuses.entries()) {
- if (res[i * 2].length === 0) {
+ if (!res[i * 2]) {
r.status = "done";
- } else if (res[i * 2 + 1].length === 1) {
+ } else if (res[i * 2 + 1]) {
r.status = "fault";
r["fault"] = res[i * 2 + 1][0];
}
diff --git a/lib/ui/api.ts b/lib/ui/api.ts
index c21919e..bc7d8aa 100644
--- a/lib/ui/api.ts
+++ b/lib/ui/api.ts
@@ -221,16 +221,11 @@ for (const [resource, flags] of Object.entries(resources)) {
let c = 0;
ctx.body.write("[\n");
- db.query(resource, filter, options, (obj) => {
+ for await (const obj of db.query(resource, filter, options))
ctx.body.write((c++ ? "," : "") + JSON.stringify(obj) + "\n");
- })
- .then(() => {
- ctx.body.end("]");
- logger.accessInfo(log);
- })
- .catch((err) => {
- ctx.body.emit("error", err);
- });
+
+ ctx.body.end("]");
+ logger.accessInfo(log);
});
// CSV download
@@ -289,7 +284,7 @@ for (const [resource, flags] of Object.entries(resources)) {
ctx.body.write(
Object.keys(columns).map((k) => `"${k.replace(/"/, '""')}"`) + "\n"
);
- db.query(resource, filter, options, (obj) => {
+ for await (const obj of db.query(resource, filter, options)) {
const arr = Object.values(columns).map((exp) => {
const v = evaluate(exp, obj, null, (e) => {
if (Array.isArray(e)) {
@@ -331,14 +326,9 @@ for (const [resource, flags] of Object.entries(resources)) {
return v;
});
ctx.body.write(arr.join(",") + "\n");
- })
- .then(() => {
- ctx.body.end();
- logger.accessInfo(log);
- })
- .catch((err) => {
- ctx.body.emit("error", err);
- });
+ }
+ ctx.body.end();
+ logger.accessInfo(log);
});
router.head(`/${resource}/:id`, async (ctx) => {
@@ -359,9 +349,9 @@ for (const [resource, flags] of Object.entries(resources)) {
return void (ctx.status = 403);
}
- const res = await db.query(resource, filter);
+ const count = await db.count(resource, filter);
- if (!res.length) return void (ctx.status = 404);
+ if (!count) return void (ctx.status = 404);
logger.accessInfo(log);
ctx.body = "";
@@ -385,12 +375,12 @@ for (const [resource, flags] of Object.entries(resources)) {
return void (ctx.status = 403);
}
- const res = await db.query(resource, filter);
+ const { value: res } = await db.query(resource, filter).next();
- if (!res.length) return void (ctx.status = 404);
+ if (!res) return void (ctx.status = 404);
logger.accessInfo(log);
- ctx.body = res[0];
+ ctx.body = res;
});
if (flags & RESOURCE_DELETE) {
@@ -411,10 +401,10 @@ for (const [resource, flags] of Object.entries(resources)) {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
}
- const res = await db.query(resource, filter);
- if (!res.length) return void (ctx.status = 404);
+ const { value: res } = await db.query(resource, filter).next();
+ if (!res) return void (ctx.status = 404);
- const validate = authorizer.getValidator(resource, res[0]);
+ const validate = authorizer.getValidator(resource, res);
if (!validate("delete")) {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
@@ -560,9 +550,8 @@ router.post("/devices/:id/tasks", async (ctx) => {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
}
- const devices = await db.query("devices", filter);
- if (!devices.length) return void (ctx.status = 404);
- const device = devices[0];
+ const { value: device } = await db.query("devices", filter).next();
+ if (!device) return void (ctx.status = 404);
const validate = authorizer.getValidator("devices", device);
for (const t of ctx.request.body) {
@@ -636,10 +625,10 @@ router.post("/devices/:id/tags", async (ctx) => {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
}
- const res = await db.query("devices", filter);
- if (!res.length) return void (ctx.status = 404);
+ const { value: res } = await db.query("devices", filter).next();
+ if (!res) return void (ctx.status = 404);
- const validate = authorizer.getValidator("devices", res[0]);
+ const validate = authorizer.getValidator("devices", res);
if (!validate("tags", ctx.request.body)) {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
@@ -707,12 +696,12 @@ router.put("/users/:id/password", async (ctx) => {
["PARAM", RESOURCE_IDS.users],
username,
]);
- const res = await db.query("users", filter);
- if (!res.length) return void (ctx.status = 404);
+ const { value: res } = await db.query("users", filter).next();
+ if (!res) return void (ctx.status = 404);
const newPassword = ctx.request.body.newPassword;
if (ctx.state.user) {
- const validate = authorizer.getValidator("users", res[0]);
+ const validate = authorizer.getValidator("users", res);
if (!validate("password", { password: newPassword })) {
logUnauthorizedWarning(log);
return void (ctx.status = 403);
diff --git a/lib/ui/db.ts b/lib/ui/db.ts
index 13a1159..e960b6c 100644
--- a/lib/ui/db.ts
+++ b/lib/ui/db.ts
@@ -17,121 +17,73 @@
* along with GenieACS. If not, see .
*/
-import { Db, GridFSBucket, ObjectId } from "mongodb";
+import { Collection, GridFSBucket, ObjectId } from "mongodb";
import { Script } from "vm";
-import { onConnect, optimizeProjection } from "../db";
+import { collections, onConnect, optimizeProjection } from "../db";
import * as mongodbFunctions from "../mongodb-functions";
import { evaluate } from "../common/expression/util";
import { QueryOptions, Expression } from "../types";
import { Readable } from "stream";
-const RESOURCE_COLLECTION = {
- files: "fs.files",
-};
+let filesBucket: GridFSBucket;
-let db: Db;
-
-onConnect(async (_db) => {
- db = _db;
+onConnect(async (db) => {
+ filesBucket = new GridFSBucket(db);
});
-export function query(
+export async function* query(
resource: string,
filter: Expression,
options?: QueryOptions
-): Promise;
-export function query(
- resource: string,
- filter: Expression,
- options: QueryOptions,
- callback: (doc: any) => void
-): Promise;
-export function query(
- resource: string,
- filter: Expression,
- options?: QueryOptions,
- callback?: (doc: any) => void
-): Promise {
+): AsyncGenerator {
options = options || {};
filter = evaluate(filter, null, Date.now());
const q = mongodbFunctions.toMongoQuery(filter, resource);
- if (!q) return Promise.resolve([]);
+ if (!q) return;
- return new Promise((resolve, reject) => {
- const collection = db.collection(RESOURCE_COLLECTION[resource] || resource);
- const cursor = collection.find(q);
- if (options.projection) {
- let projection = options.projection;
- if (resource === "devices") {
- projection = mongodbFunctions.processDeviceProjection(
- options.projection
- );
- }
+ const collection = collections[resource] as Collection;
+ const cursor = collection.find(q);
+ if (options.projection) {
+ let projection = options.projection;
+ if (resource === "devices")
+ projection = mongodbFunctions.processDeviceProjection(options.projection);
- if (resource === "presets") projection.configurations = 1;
- projection = optimizeProjection(projection);
- cursor.project(projection);
- }
+ if (resource === "presets") projection.configurations = 1;
+ projection = optimizeProjection(projection);
+ cursor.project(projection);
+ }
- if (resource === "users") cursor.project({ password: 0, salt: 0 });
+ if (resource === "users") cursor.project({ password: 0, salt: 0 });
- if (options.skip) cursor.skip(options.skip);
- if (options.limit) cursor.limit(options.limit);
+ if (options.skip) cursor.skip(options.skip);
+ if (options.limit) cursor.limit(options.limit);
- if (options.sort) {
- let s = Object.entries(options.sort)
- .sort((a, b) => Math.abs(b[1]) - Math.abs(a[1]))
- .reduce(
- (obj, [k, v]) =>
- Object.assign(obj, { [k]: Math.min(Math.max(v, -1), 1) }),
- {}
- );
-
- if (resource === "devices") s = mongodbFunctions.processDeviceSort(s);
- cursor.sort(s);
- }
-
- if (!callback) {
- cursor.toArray((err, docs) => {
- if (err) return reject(err);
- if (resource === "devices")
- return resolve(docs.map((d) => mongodbFunctions.flattenDevice(d)));
- else if (resource === "faults")
- return resolve(docs.map((d) => mongodbFunctions.flattenFault(d)));
- else if (resource === "tasks")
- return resolve(docs.map((d) => mongodbFunctions.flattenTask(d)));
- else if (resource === "presets")
- return resolve(docs.map((d) => mongodbFunctions.flattenPreset(d)));
- else if (resource === "files")
- return resolve(docs.map((d) => mongodbFunctions.flattenFile(d)));
- return resolve(docs);
- });
- } else {
- cursor.forEach(
- (doc) => {
- if (resource === "devices")
- callback(mongodbFunctions.flattenDevice(doc));
- else if (resource === "faults")
- callback(mongodbFunctions.flattenFault(doc));
- else if (resource === "tasks")
- callback(mongodbFunctions.flattenTask(doc));
- else if (resource === "presets")
- callback(mongodbFunctions.flattenPreset(doc));
- else if (resource === "files")
- callback(mongodbFunctions.flattenFile(doc));
- else callback(doc);
- },
- (err) => {
- if (err) reject(err);
- else resolve();
- }
+ if (options.sort) {
+ let s = Object.entries(options.sort)
+ .sort((a, b) => Math.abs(b[1]) - Math.abs(a[1]))
+ .reduce(
+ (obj, [k, v]) =>
+ Object.assign(obj, { [k]: Math.min(Math.max(v, -1), 1) }),
+ {}
);
- }
- });
+
+ if (resource === "devices") s = mongodbFunctions.processDeviceSort(s);
+ cursor.sort(s);
+ }
+
+ for await (let doc of cursor) {
+ if (resource === "devices") doc = mongodbFunctions.flattenDevice(doc);
+ else if (resource === "faults") doc = mongodbFunctions.flattenFault(doc);
+ else if (resource === "tasks") doc = mongodbFunctions.flattenTask(doc);
+ else if (resource === "presets") doc = mongodbFunctions.flattenPreset(doc);
+ else if (resource === "files") doc = mongodbFunctions.flattenFile(doc);
+
+ yield doc;
+ }
}
export function count(resource: string, filter: Expression): Promise {
- const collection = db.collection(RESOURCE_COLLECTION[resource] || resource);
+ const collection = collections[resource] as Collection;
filter = evaluate(filter, null, Date.now());
const q = mongodbFunctions.toMongoQuery(filter, resource);
if (!q) return Promise.resolve(0);
@@ -150,37 +102,25 @@ export async function updateDeviceTags(
if (onOff) add.push(tag);
else pull.push(tag);
}
-
- const collection = db.collection("devices");
const object = {};
if (add?.length) object["$addToSet"] = { _tags: { $each: add } };
if (pull?.length) object["$pullAll"] = { _tags: pull };
- await collection.updateOne({ _id: deviceId }, object);
+ await collections.devices.updateOne({ _id: deviceId }, object);
}
-function putResource(resource, id, object): Promise {
- return new Promise((resolve, reject) => {
- const collection = db.collection(RESOURCE_COLLECTION[resource] || resource);
- collection.replaceOne({ _id: id }, object, { upsert: true }, (err) => {
- if (err) return void reject(err);
- resolve();
- });
- });
+async function putResource(resource, id, object): Promise {
+ const collection = collections[resource] as Collection;
+ await collection.replaceOne({ _id: id }, object, { upsert: true });
}
-function deleteResource(
+async function deleteResource(
resource: string,
id: string | ObjectId
): Promise {
- return new Promise((resolve, reject) => {
- const collection = db.collection(RESOURCE_COLLECTION[resource] || resource);
- collection.deleteOne({ _id: id }, (err) => {
- if (err) return void reject(err);
- resolve();
- });
- });
+ const collection = collections[resource] as Collection;
+ await collection.deleteOne({ _id: id });
}
export function putPreset(
@@ -267,23 +207,16 @@ export function deletePermission(id: string): Promise {
return deleteResource("permissions", id);
}
-export function putUser(
+export async function putUser(
id: string,
object: Record
): Promise {
- return new Promise((resolve, reject) => {
- const collection = db.collection("users");
- // update instead of replace to keep the password if not set by user
- collection.updateOne(
- { _id: id },
- { $set: object },
- { upsert: true },
- (err) => {
- if (err) return void reject(err);
- resolve();
- }
- );
- });
+ // update instead of replace to keep the password if not set by user
+ await collections.users.updateOne(
+ { _id: id },
+ { $set: object },
+ { upsert: true }
+ );
}
export function deleteUser(id: string): Promise {
@@ -291,8 +224,7 @@ export function deleteUser(id: string): Promise {
}
export function downloadFile(filename: string): Readable {
- const bucket = new GridFSBucket(db);
- return bucket.openDownloadStreamByName(filename);
+ return filesBucket.openDownloadStreamByName(filename);
}
export function putFile(
@@ -301,8 +233,7 @@ export function putFile(
contentStream: Readable
): Promise {
return new Promise((resolve, reject) => {
- const bucket = new GridFSBucket(db);
- const uploadStream = bucket.openUploadStreamWithId(
+ const uploadStream = filesBucket.openUploadStreamWithId(
filename as unknown as ObjectId,
filename,
{
@@ -310,8 +241,15 @@ export function putFile(
}
);
+ let readableEnded = false;
+ contentStream.on("end", () => {
+ readableEnded = true;
+ });
contentStream.on("close", () => {
- if (!contentStream.readableEnded)
+ // In Node versions prior to 15, the stream will not emit an error if the
+ // connection is closed before the stream is finished.
+ // For Node 12.9+ we can just use stream.readableEnded
+ if (!readableEnded)
uploadStream.destroy(new Error("Stream closed prematurely"));
});
@@ -325,14 +263,8 @@ export function putFile(
});
}
-export function deleteFile(filename: string): Promise {
- return new Promise((resolve, reject) => {
- const bucket = new GridFSBucket(db);
- bucket.delete(filename as any, (err) => {
- if (err) return void reject(err);
- resolve();
- });
- });
+export async function deleteFile(filename: string): Promise {
+ await filesBucket.delete(filename as any);
}
export function deleteFault(id: string): Promise {
diff --git a/npm-shrinkwrap.json b/npm-shrinkwrap.json
index 9541d3d..3aa8d96 100644
--- a/npm-shrinkwrap.json
+++ b/npm-shrinkwrap.json
@@ -20,7 +20,7 @@
"koa-jwt": "^4.0.3",
"koa-router": "^12.0.0",
"koa-static": "^5.0.0",
- "mongodb": "^4.9.0",
+ "mongodb": "^4.16.0",
"parsimmon": "^1.18.1",
"seedrandom": "^3.0.5"
},
@@ -72,6 +72,747 @@
"node": ">=12.13.0"
}
},
+ "node_modules/@aws-crypto/crc32": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
+ "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-crypto/ie11-detection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
+ "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-browser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
+ "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/ie11-detection": "^3.0.0",
+ "@aws-crypto/sha256-js": "^3.0.0",
+ "@aws-crypto/supports-web-crypto": "^3.0.0",
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-locate-window": "^3.0.0",
+ "@aws-sdk/util-utf8-browser": "^3.0.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-crypto/sha256-js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
+ "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-crypto/supports-web-crypto": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
+ "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-crypto/util": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
+ "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-utf8-browser": "^3.0.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.379.1.tgz",
+ "integrity": "sha512-aONC8IyC54OMcdoRCqI+Fw4VIIlonWmFdLDyZPfGoqwYpe/Vqz7DPF7s/ohqiZBSpEt2SzZeKHEpmkBPR8fpkw==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.379.1",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-cognito-identity/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/client-sso": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.379.1.tgz",
+ "integrity": "sha512-2N16TPnRcq+seNP8VY/Zq7kfnrUOrJMbVNpyDZWGe5Qglua3n8v/FzxmXFNI87MiSODq8IHtiXhggWhefCd+TA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso-oidc": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.379.1.tgz",
+ "integrity": "sha512-B6hZ2ysPyvafCMf6gls1jHI/IUviVZ4+TURpNfUBqThg/hZ1IMxc4BLkXca6VlgzYR+bWU8GKiClS9fFH6mu0g==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sso-oidc/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/client-sso/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/client-sts": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.379.1.tgz",
+ "integrity": "sha512-gEnKuk9bYjThvmxCgOgCn1qa+rRX8IgIRE2+xhbWhlpDanozhkDq9aMB5moX4tBNYQEmi1LtGD+JOvOoZRnToQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-sdk-sts": "3.379.1",
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "fast-xml-parser": "4.2.5",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/client-sts/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.379.1.tgz",
+ "integrity": "sha512-29X4nxo+47TeENgCpaTeMaK66cn7Uv7Fo4HPvGoevtWljqMqlSSNwQgmvpvqkQWGNtG6Ma/7GXkPMBuoqpwC8g==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-cognito-identity/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-env": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.378.0.tgz",
+ "integrity": "sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-env/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-ini": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.379.1.tgz",
+ "integrity": "sha512-YhEsJIskzCFwIIKiMN9GSHQkgWwj/b7rq0ofhsXsCRimFtdVkmMlB9veE6vtFAuXpX/WOGWdlWek1az0V22uuw==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-ini/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-node": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.379.1.tgz",
+ "integrity": "sha512-39Y4OHKn6a8lY8YJhSLLw08aZytWxfvSjM4ObIEnE6hjLl8gsL9vROKKITsh3q6iGQ1EDSWMWZL50aOh3LJUIg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-ini": "3.379.1",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-node/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-process": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.378.0.tgz",
+ "integrity": "sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-process/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-sso": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.379.1.tgz",
+ "integrity": "sha512-PhGtu1+JbUntYP/5CSfazQhWsjUBiksEuhg9fLhYl5OAgZVjVygbgoNVUz/gM7gZJSEMsasTazkn7yZVzO/k7w==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/client-sso": "3.379.1",
+ "@aws-sdk/token-providers": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-sso/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.378.0.tgz",
+ "integrity": "sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-provider-web-identity/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/credential-providers": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.379.1.tgz",
+ "integrity": "sha512-srPdRQmavvWAwtrlYqo5GaIhIH0bhMl0knzxIDUf81aBfitNKACWwnbML7TpL/dWSPH2b7ciOBWneK1o1GKNLg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/client-cognito-identity": "3.379.1",
+ "@aws-sdk/client-sso": "3.379.1",
+ "@aws-sdk/client-sts": "3.379.1",
+ "@aws-sdk/credential-provider-cognito-identity": "3.379.1",
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-ini": "3.379.1",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/credential-providers/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-host-header": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.379.1.tgz",
+ "integrity": "sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-host-header/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-logger": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.378.0.tgz",
+ "integrity": "sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-logger/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.378.0.tgz",
+ "integrity": "sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-recursion-detection/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-sdk-sts": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz",
+ "integrity": "sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-sdk-sts/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-signing": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.379.1.tgz",
+ "integrity": "sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/signature-v4": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-signing/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/middleware-user-agent": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.379.1.tgz",
+ "integrity": "sha512-4zIGeAIuutcRieAvovs82uBNhJBHuxfxaAUqrKiw49xUBG7xeNVUl+DYPSpbALbEIy4ujfwWCBOOWVCt6dyUZg==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/middleware-user-agent/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/token-providers": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.379.1.tgz",
+ "integrity": "sha512-NlYPkArJ7A/txCrjqqkje+4hsv7pSOqm+Qdx3BUIOc7PRYrBVs/XwThxUkGceSntVXoNlO8g9DFL0NY53/wb8Q==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/client-sso-oidc": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/token-providers/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/types": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.378.0.tgz",
+ "integrity": "sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/types/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/util-endpoints": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.378.0.tgz",
+ "integrity": "sha512-NU5C2l2xAXxpyB5nT0fIhahLPlJoJdzHWw4uC53KH9b4PrjHtgvgCN8beIsD3QxyfgeoM4A5J9Auo6WurfRnLw==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-endpoints/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/util-locate-window": {
+ "version": "3.310.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
+ "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-locate-window/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.378.0.tgz",
+ "integrity": "sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-browser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/util-user-agent-node": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.378.0.tgz",
+ "integrity": "sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A==",
+ "optional": true,
+ "dependencies": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ },
+ "peerDependencies": {
+ "aws-crt": ">=1.0.0"
+ },
+ "peerDependenciesMeta": {
+ "aws-crt": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/@aws-sdk/util-user-agent-node/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@aws-sdk/util-utf8-browser": {
+ "version": "3.259.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
+ "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.3.1"
+ }
+ },
+ "node_modules/@aws-sdk/util-utf8-browser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
"node_modules/@babel/code-frame": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
@@ -755,6 +1496,742 @@
"node": ">=6"
}
},
+ "node_modules/@smithy/abort-controller": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.1.tgz",
+ "integrity": "sha512-0s7XjIbsTwZyUW9OwXQ8J6x1UiA1TNCh60Vaw56nHahL7kUZsLhmTlWiaxfLkFtO2Utkj8YewcpHTYpxaTzO+w==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/abort-controller/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/config-resolver": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.1.tgz",
+ "integrity": "sha512-l83Pm7hV+8CBQOCmBRopWDtF+CURUJol7NsuPYvimiDhkC2F8Ba9T1imSFE+pD1UIJ9jlsDPAnZfPJT5cjnuEw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/config-resolver/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/credential-provider-imds": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz",
+ "integrity": "sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/credential-provider-imds/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/eventstream-codec": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.1.tgz",
+ "integrity": "sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ==",
+ "optional": true,
+ "dependencies": {
+ "@aws-crypto/crc32": "3.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@smithy/eventstream-codec/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/fetch-http-handler": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.1.tgz",
+ "integrity": "sha512-/SoU/ClazgcdOxgE4zA7RX8euiELwpsrKCSvulVQvu9zpmqJRyEJn8ZTWYFV17/eHOBdHTs9kqodhNhsNT+cUw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/querystring-builder": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@smithy/fetch-http-handler/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/hash-node": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.1.tgz",
+ "integrity": "sha512-oTKYimQdF4psX54ZonpcIE+MXjMUWFxLCNosjPkJPFQ9whRX0K/PFX/+JZGRQh3zO9RlEOEUIbhy9NO+Wha6hw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/hash-node/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/invalid-dependency": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.1.tgz",
+ "integrity": "sha512-2q/Eb0AE662zwyMV+z+TL7deBwcHCgaZZGc0RItamBE8kak3MzCi/EZCNoFWoBfxgQ4jfR12wm8KKsSXhJzJtQ==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@smithy/invalid-dependency/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz",
+ "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/is-array-buffer/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/middleware-content-length": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.1.tgz",
+ "integrity": "sha512-IZhRSk5GkVBcrKaqPXddBS2uKhaqwBgaSgbBb1OJyGsKe7SxRFbclWS0LqOR9fKUkDl+3lL8E2ffpo6EQg0igw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-content-length/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/middleware-endpoint": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.1.tgz",
+ "integrity": "sha512-uz/KI1MBd9WHrrkVFZO4L4Wyv24raf0oR4EsOYEeG5jPJO5U+C7MZGLcMxX8gWERDn1sycBDqmGv8fjUMLxT6w==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-endpoint/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/middleware-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz",
+ "integrity": "sha512-NKHF4i0gjSyjO6C0ZyjEpNqzGgIu7s8HOK6oT/1Jqws2Q1GynR1xV8XTUs1gKXeaNRzbzKQRewHHmfPwZjOtHA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/service-error-classification": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.0",
+ "@smithy/util-retry": "^2.0.0",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-retry/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/middleware-serde": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.1.tgz",
+ "integrity": "sha512-uKxPaC6ItH9ZXdpdqNtf8sda7GcU4SPMp0tomq/5lUg9oiMa/Q7+kD35MUrpKaX3IVXVrwEtkjCU9dogZ/RAUA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-serde/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/middleware-stack": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz",
+ "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/middleware-stack/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/node-config-provider": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.1.tgz",
+ "integrity": "sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/shared-ini-file-loader": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/node-config-provider/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/node-http-handler": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.1.tgz",
+ "integrity": "sha512-Zv3fxk3p9tsmPT2CKMsbuwbbxnq2gzLDIulxv+yI6aE+02WPYorObbbe9gh7SW3weadMODL1vTfOoJ9yFypDzg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/abort-controller": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/querystring-builder": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/node-http-handler/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/property-provider": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.1.tgz",
+ "integrity": "sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/property-provider/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/protocol-http": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.1.tgz",
+ "integrity": "sha512-mrkMAp0wtaDEIkgRObWYxI1Kun1tm6Iu6rK+X4utb6Ah7Uc3Kk4VIWwK/rBHdYGReiLIrxFCB1rq4a2gyZnSgg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/protocol-http/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/querystring-builder": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz",
+ "integrity": "sha512-bp+93WFzx1FojVEIeFPtG0A1pKsFdCUcZvVdZdRlmNooOUrz9Mm9bneRd8hDwAQ37pxiZkCOxopSXXRQN10mYw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-builder/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/querystring-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.1.tgz",
+ "integrity": "sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/querystring-parser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/service-error-classification": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz",
+ "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==",
+ "optional": true,
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.1.tgz",
+ "integrity": "sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/shared-ini-file-loader/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/signature-v4": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.1.tgz",
+ "integrity": "sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/eventstream-codec": "^2.0.1",
+ "@smithy/is-array-buffer": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.0",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/signature-v4/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/smithy-client": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.1.tgz",
+ "integrity": "sha512-LHC5m6tYpEu1iNbONfvMbwtErboyTZJfEIPoD78Ei5MVr36vZQCaCla5mvo36+q/a2NAk2//fA5Rx3I1Kf7+lQ==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-stream": "^2.0.1",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/smithy-client/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.0.2.tgz",
+ "integrity": "sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/types/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/url-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.1.tgz",
+ "integrity": "sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/querystring-parser": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@smithy/url-parser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-base64": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz",
+ "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-base64/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz",
+ "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-browser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-body-length-node": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz",
+ "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-body-length-node/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz",
+ "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-buffer-from/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz",
+ "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-config-provider/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-defaults-mode-browser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.1.tgz",
+ "integrity": "sha512-w72Qwsb+IaEYEFtYICn0Do42eFju78hTaBzzJfT107lFOPdbjWjKnFutV+6GL/nZd5HWXY7ccAKka++C3NrjHw==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-browser/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-defaults-mode-node": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.1.tgz",
+ "integrity": "sha512-dNF45caelEBambo0SgkzQ0v76m4YM+aFKZNTtSafy7P5dVF8TbjZuR2UX1A5gJABD9XK6lzN+v/9Yfzj/EDgGg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/credential-provider-imds": "^2.0.1",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 10.0.0"
+ }
+ },
+ "node_modules/@smithy/util-defaults-mode-node/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
+ "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-hex-encoding/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-middleware": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz",
+ "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-middleware/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-retry": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz",
+ "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/service-error-classification": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">= 14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-retry/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.1.tgz",
+ "integrity": "sha512-2a0IOtwIKC46EEo7E7cxDN8u2jwOiYYJqcFKA6rd5rdXqKakHT2Gc+AqHWngr0IEHUfW92zX12wRQKwyoqZf2Q==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-stream/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz",
+ "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==",
+ "optional": true,
+ "dependencies": {
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-uri-escape/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
+ "node_modules/@smithy/util-utf8": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
+ "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
+ "optional": true,
+ "dependencies": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "engines": {
+ "node": ">=14.0.0"
+ }
+ },
+ "node_modules/@smithy/util-utf8/node_modules/tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ },
"node_modules/@szmarczak/http-timer": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
@@ -1056,9 +2533,9 @@
}
},
"node_modules/@types/webidl-conversions": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
- "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
},
"node_modules/@types/whatwg-url": {
"version": "8.2.2",
@@ -1583,6 +3060,12 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
+ "node_modules/bowser": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
+ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
+ "optional": true
+ },
"node_modules/boxen": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -1656,9 +3139,9 @@
}
},
"node_modules/bson": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz",
- "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==",
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
+ "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
"dependencies": {
"buffer": "^5.6.0"
},
@@ -2616,14 +4099,6 @@
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
},
- "node_modules/denque": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
- "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==",
- "engines": {
- "node": ">=0.10"
- }
- },
"node_modules/depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -3164,6 +4639,28 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "node_modules/fast-xml-parser": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
+ "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+ "funding": [
+ {
+ "type": "paypal",
+ "url": "https://paypal.me/naturalintelligence"
+ },
+ {
+ "type": "github",
+ "url": "https://github.com/sponsors/NaturalIntelligence"
+ }
+ ],
+ "optional": true,
+ "dependencies": {
+ "strnum": "^1.0.5"
+ },
+ "bin": {
+ "fxparser": "src/cli/cli.js"
+ }
+ },
"node_modules/fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -4692,26 +6189,26 @@
}
},
"node_modules/mongodb": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.9.0.tgz",
- "integrity": "sha512-tJJEFJz7OQTQPZeVHZJIeSOjMRqc5eSyXTt86vSQENEErpkiG7279tM/GT5AVZ7TgXNh9HQxoa2ZkbrANz5GQw==",
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz",
+ "integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==",
"dependencies": {
- "bson": "^4.7.0",
- "denque": "^2.1.0",
- "mongodb-connection-string-url": "^2.5.3",
- "socks": "^2.7.0"
+ "bson": "^4.7.2",
+ "mongodb-connection-string-url": "^2.5.4",
+ "socks": "^2.7.1"
},
"engines": {
"node": ">=12.9.0"
},
"optionalDependencies": {
+ "@aws-sdk/credential-providers": "^3.186.0",
"saslprep": "^1.0.3"
}
},
"node_modules/mongodb-connection-string-url": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz",
- "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
+ "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
"dependencies": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
@@ -7139,9 +8636,9 @@
}
},
"node_modules/socks": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
- "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"dependencies": {
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
@@ -7350,6 +8847,12 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+ "optional": true
+ },
"node_modules/stylehacks": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz",
@@ -7593,7 +9096,7 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
+ "devOptional": true
},
"node_modules/tsscmp": {
"version": "1.0.6",
@@ -7783,6 +9286,15 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
+ "node_modules/uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "optional": true,
+ "bin": {
+ "uuid": "dist/bin/uuid"
+ }
+ },
"node_modules/v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
@@ -8046,6 +9558,720 @@
}
},
"dependencies": {
+ "@aws-crypto/crc32": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-3.0.0.tgz",
+ "integrity": "sha512-IzSgsrxUcsrejQbPVilIKy16kAT52EwB6zSaI+M3xxIhKh5+aldEyvI+z6erM7TCLB2BJsFrtHjp6/4/sr+3dA==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-crypto/ie11-detection": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/ie11-detection/-/ie11-detection-3.0.0.tgz",
+ "integrity": "sha512-341lBBkiY1DfDNKai/wXM3aujNBkXR7tq1URPQDL9wi3AUbI80NR74uF1TXHMm7po1AcnFk8iu2S2IeU/+/A+Q==",
+ "optional": true,
+ "requires": {
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-crypto/sha256-browser": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz",
+ "integrity": "sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/ie11-detection": "^3.0.0",
+ "@aws-crypto/sha256-js": "^3.0.0",
+ "@aws-crypto/supports-web-crypto": "^3.0.0",
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-locate-window": "^3.0.0",
+ "@aws-sdk/util-utf8-browser": "^3.0.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-crypto/sha256-js": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz",
+ "integrity": "sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/util": "^3.0.0",
+ "@aws-sdk/types": "^3.222.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-crypto/supports-web-crypto": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-3.0.0.tgz",
+ "integrity": "sha512-06hBdMwUAb2WFTuGG73LSC0wfPu93xWwo5vL2et9eymgmu3Id5vFAHBbajVWiGhPO37qcsdCap/FqXvJGJWPIg==",
+ "optional": true,
+ "requires": {
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-crypto/util": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz",
+ "integrity": "sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "^3.222.0",
+ "@aws-sdk/util-utf8-browser": "^3.0.0",
+ "tslib": "^1.11.1"
+ }
+ },
+ "@aws-sdk/client-cognito-identity": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-cognito-identity/-/client-cognito-identity-3.379.1.tgz",
+ "integrity": "sha512-aONC8IyC54OMcdoRCqI+Fw4VIIlonWmFdLDyZPfGoqwYpe/Vqz7DPF7s/ohqiZBSpEt2SzZeKHEpmkBPR8fpkw==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/client-sts": "3.379.1",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/client-sso": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.379.1.tgz",
+ "integrity": "sha512-2N16TPnRcq+seNP8VY/Zq7kfnrUOrJMbVNpyDZWGe5Qglua3n8v/FzxmXFNI87MiSODq8IHtiXhggWhefCd+TA==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/client-sso-oidc": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso-oidc/-/client-sso-oidc-3.379.1.tgz",
+ "integrity": "sha512-B6hZ2ysPyvafCMf6gls1jHI/IUviVZ4+TURpNfUBqThg/hZ1IMxc4BLkXca6VlgzYR+bWU8GKiClS9fFH6mu0g==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/client-sts": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.379.1.tgz",
+ "integrity": "sha512-gEnKuk9bYjThvmxCgOgCn1qa+rRX8IgIRE2+xhbWhlpDanozhkDq9aMB5moX4tBNYQEmi1LtGD+JOvOoZRnToQ==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/sha256-browser": "3.0.0",
+ "@aws-crypto/sha256-js": "3.0.0",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/middleware-host-header": "3.379.1",
+ "@aws-sdk/middleware-logger": "3.378.0",
+ "@aws-sdk/middleware-recursion-detection": "3.378.0",
+ "@aws-sdk/middleware-sdk-sts": "3.379.1",
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/middleware-user-agent": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@aws-sdk/util-user-agent-browser": "3.378.0",
+ "@aws-sdk/util-user-agent-node": "3.378.0",
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/hash-node": "^2.0.1",
+ "@smithy/invalid-dependency": "^2.0.1",
+ "@smithy/middleware-content-length": "^2.0.1",
+ "@smithy/middleware-endpoint": "^2.0.1",
+ "@smithy/middleware-retry": "^2.0.1",
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/smithy-client": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-body-length-browser": "^2.0.0",
+ "@smithy/util-body-length-node": "^2.0.0",
+ "@smithy/util-defaults-mode-browser": "^2.0.1",
+ "@smithy/util-defaults-mode-node": "^2.0.1",
+ "@smithy/util-retry": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "fast-xml-parser": "4.2.5",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-cognito-identity": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-cognito-identity/-/credential-provider-cognito-identity-3.379.1.tgz",
+ "integrity": "sha512-29X4nxo+47TeENgCpaTeMaK66cn7Uv7Fo4HPvGoevtWljqMqlSSNwQgmvpvqkQWGNtG6Ma/7GXkPMBuoqpwC8g==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/client-cognito-identity": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-env": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.378.0.tgz",
+ "integrity": "sha512-B2OVdO9kBClDwGgWTBLAQwFV8qYTYGyVujg++1FZFSFMt8ORFdZ5fNpErvJtiSjYiOOQMzyBeSNhKyYNXCiJjQ==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-ini": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.379.1.tgz",
+ "integrity": "sha512-YhEsJIskzCFwIIKiMN9GSHQkgWwj/b7rq0ofhsXsCRimFtdVkmMlB9veE6vtFAuXpX/WOGWdlWek1az0V22uuw==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-node": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.379.1.tgz",
+ "integrity": "sha512-39Y4OHKn6a8lY8YJhSLLw08aZytWxfvSjM4ObIEnE6hjLl8gsL9vROKKITsh3q6iGQ1EDSWMWZL50aOh3LJUIg==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-ini": "3.379.1",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-process": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.378.0.tgz",
+ "integrity": "sha512-KFTIy7u+wXj3eDua4rgS0tODzMnXtXhAm1RxzCW9FL5JLBBrd82ymCj1Dp72217Sw5Do6NjCnDTTNkCHZMA77w==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-sso": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.379.1.tgz",
+ "integrity": "sha512-PhGtu1+JbUntYP/5CSfazQhWsjUBiksEuhg9fLhYl5OAgZVjVygbgoNVUz/gM7gZJSEMsasTazkn7yZVzO/k7w==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/client-sso": "3.379.1",
+ "@aws-sdk/token-providers": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-provider-web-identity": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.378.0.tgz",
+ "integrity": "sha512-GWjydOszhc4xDF8xuPtBvboglXQr0gwCW1oHAvmLcOT38+Hd6qnKywnMSeoXYRPgoKfF9TkWQgW1jxplzCG0UA==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/credential-providers": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/credential-providers/-/credential-providers-3.379.1.tgz",
+ "integrity": "sha512-srPdRQmavvWAwtrlYqo5GaIhIH0bhMl0knzxIDUf81aBfitNKACWwnbML7TpL/dWSPH2b7ciOBWneK1o1GKNLg==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/client-cognito-identity": "3.379.1",
+ "@aws-sdk/client-sso": "3.379.1",
+ "@aws-sdk/client-sts": "3.379.1",
+ "@aws-sdk/credential-provider-cognito-identity": "3.379.1",
+ "@aws-sdk/credential-provider-env": "3.378.0",
+ "@aws-sdk/credential-provider-ini": "3.379.1",
+ "@aws-sdk/credential-provider-node": "3.379.1",
+ "@aws-sdk/credential-provider-process": "3.378.0",
+ "@aws-sdk/credential-provider-sso": "3.379.1",
+ "@aws-sdk/credential-provider-web-identity": "3.378.0",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/credential-provider-imds": "^2.0.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-host-header": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.379.1.tgz",
+ "integrity": "sha512-LI4KpAFWNWVr2aH2vRVblr0Y8tvDz23lj8LOmbDmCrzd5M21nxuocI/8nEAQj55LiTIf9Zs+dHCdsyegnFXdrA==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-logger": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.378.0.tgz",
+ "integrity": "sha512-l1DyaDLm3KeBMNMuANI3scWh8Xvu248x+vw6Z7ExWOhGXFmQ1MW7YvASg/SdxWkhlF9HmkkTif1LdMB22x6QDA==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-recursion-detection": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.378.0.tgz",
+ "integrity": "sha512-mUMfHAz0oGNIWiTZHTVJb+I515Hqs2zx1j36Le4MMiiaMkPW1SRUF1FIwGuc1wh6E8jB5q+XfEMriDjRi4TZRA==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-sdk-sts": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-sts/-/middleware-sdk-sts-3.379.1.tgz",
+ "integrity": "sha512-SK3gSyT0XbLiY12+AjLFYL9YngxOXHnZF3Z33Cdd4a+AUYrVBV7JBEEGD1Nlwrcmko+3XgaKlmgUaR5s91MYvg==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/middleware-signing": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-signing": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.379.1.tgz",
+ "integrity": "sha512-kBk2ZUvR84EM4fICjr8K+Ykpf8SI1UzzPp2/UVYZ0X+4H/ZCjfSqohGRwHykMqeplne9qHSL7/rGJs1H3l3gPg==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/signature-v4": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/middleware-user-agent": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.379.1.tgz",
+ "integrity": "sha512-4zIGeAIuutcRieAvovs82uBNhJBHuxfxaAUqrKiw49xUBG7xeNVUl+DYPSpbALbEIy4ujfwWCBOOWVCt6dyUZg==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@aws-sdk/util-endpoints": "3.378.0",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/token-providers": {
+ "version": "3.379.1",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.379.1.tgz",
+ "integrity": "sha512-NlYPkArJ7A/txCrjqqkje+4hsv7pSOqm+Qdx3BUIOc7PRYrBVs/XwThxUkGceSntVXoNlO8g9DFL0NY53/wb8Q==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/client-sso-oidc": "3.379.1",
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/property-provider": "^2.0.0",
+ "@smithy/shared-ini-file-loader": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/types": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.378.0.tgz",
+ "integrity": "sha512-qP0CvR/ItgktmN8YXpGQglzzR/6s0nrsQ4zIfx3HMwpsBTwuouYahcCtF1Vr82P4NFcoDA412EJahJ2pIqEd+w==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/util-endpoints": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.378.0.tgz",
+ "integrity": "sha512-NU5C2l2xAXxpyB5nT0fIhahLPlJoJdzHWw4uC53KH9b4PrjHtgvgCN8beIsD3QxyfgeoM4A5J9Auo6WurfRnLw==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/util-locate-window": {
+ "version": "3.310.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.310.0.tgz",
+ "integrity": "sha512-qo2t/vBTnoXpjKxlsC2e1gBrRm80M3bId27r0BRB2VniSSe7bL1mmzM+/HFtujm0iAxtPM+aLEflLJlJeDPg0w==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/util-user-agent-browser": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.378.0.tgz",
+ "integrity": "sha512-FSCpagzftK1W+m7Ar6lpX7/Gr9y5P56nhFYz8U4EYQ4PkufS6czWX9YW+/FA5OYV0vlQ/SvPqMnzoHIPUNhZrQ==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/types": "^2.0.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/util-user-agent-node": {
+ "version": "3.378.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.378.0.tgz",
+ "integrity": "sha512-IdwVJV0E96MkJeFte4dlWqvB+oiqCiZ5lOlheY3W9NynTuuX0GGYNC8Y9yIsV8Oava1+ujpJq0ww6qXdYxmO4A==",
+ "optional": true,
+ "requires": {
+ "@aws-sdk/types": "3.378.0",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@aws-sdk/util-utf8-browser": {
+ "version": "3.259.0",
+ "resolved": "https://registry.npmjs.org/@aws-sdk/util-utf8-browser/-/util-utf8-browser-3.259.0.tgz",
+ "integrity": "sha512-UvFa/vR+e19XookZF8RzFZBrw2EUkQWxiBW0yYQAhvk3C+QVGl0H3ouca8LDBlBfQKXwmW3huo/59H8rwb1wJw==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.3.1"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
"@babel/code-frame": {
"version": "7.18.6",
"resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz",
@@ -8488,6 +10714,717 @@
"integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==",
"dev": true
},
+ "@smithy/abort-controller": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.1.tgz",
+ "integrity": "sha512-0s7XjIbsTwZyUW9OwXQ8J6x1UiA1TNCh60Vaw56nHahL7kUZsLhmTlWiaxfLkFtO2Utkj8YewcpHTYpxaTzO+w==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/config-resolver": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.1.tgz",
+ "integrity": "sha512-l83Pm7hV+8CBQOCmBRopWDtF+CURUJol7NsuPYvimiDhkC2F8Ba9T1imSFE+pD1UIJ9jlsDPAnZfPJT5cjnuEw==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-config-provider": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/credential-provider-imds": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.0.1.tgz",
+ "integrity": "sha512-8VxriuRINNEfVZjEFKBY75y9ZWAx73DZ5K/u+3LmB6r8WR2h3NaFxFKMlwlq0uzNdGhD1ouKBn9XWEGYHKiPLw==",
+ "optional": true,
+ "requires": {
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/eventstream-codec": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.1.tgz",
+ "integrity": "sha512-/IiNB7gQM2y2ZC/GAWOWDa8+iXfhr1g9Xe5979cQEOdCWDISvrAiv18cn3OtIQUhbYOR3gm7QtCpkq1to2takQ==",
+ "optional": true,
+ "requires": {
+ "@aws-crypto/crc32": "3.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/fetch-http-handler": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.0.1.tgz",
+ "integrity": "sha512-/SoU/ClazgcdOxgE4zA7RX8euiELwpsrKCSvulVQvu9zpmqJRyEJn8ZTWYFV17/eHOBdHTs9kqodhNhsNT+cUw==",
+ "optional": true,
+ "requires": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/querystring-builder": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-base64": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/hash-node": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.1.tgz",
+ "integrity": "sha512-oTKYimQdF4psX54ZonpcIE+MXjMUWFxLCNosjPkJPFQ9whRX0K/PFX/+JZGRQh3zO9RlEOEUIbhy9NO+Wha6hw==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/invalid-dependency": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.1.tgz",
+ "integrity": "sha512-2q/Eb0AE662zwyMV+z+TL7deBwcHCgaZZGc0RItamBE8kak3MzCi/EZCNoFWoBfxgQ4jfR12wm8KKsSXhJzJtQ==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/is-array-buffer": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz",
+ "integrity": "sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/middleware-content-length": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.1.tgz",
+ "integrity": "sha512-IZhRSk5GkVBcrKaqPXddBS2uKhaqwBgaSgbBb1OJyGsKe7SxRFbclWS0LqOR9fKUkDl+3lL8E2ffpo6EQg0igw==",
+ "optional": true,
+ "requires": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/middleware-endpoint": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.0.1.tgz",
+ "integrity": "sha512-uz/KI1MBd9WHrrkVFZO4L4Wyv24raf0oR4EsOYEeG5jPJO5U+C7MZGLcMxX8gWERDn1sycBDqmGv8fjUMLxT6w==",
+ "optional": true,
+ "requires": {
+ "@smithy/middleware-serde": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/url-parser": "^2.0.1",
+ "@smithy/util-middleware": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/middleware-retry": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.1.tgz",
+ "integrity": "sha512-NKHF4i0gjSyjO6C0ZyjEpNqzGgIu7s8HOK6oT/1Jqws2Q1GynR1xV8XTUs1gKXeaNRzbzKQRewHHmfPwZjOtHA==",
+ "optional": true,
+ "requires": {
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/service-error-classification": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-middleware": "^2.0.0",
+ "@smithy/util-retry": "^2.0.0",
+ "tslib": "^2.5.0",
+ "uuid": "^8.3.2"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/middleware-serde": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.1.tgz",
+ "integrity": "sha512-uKxPaC6ItH9ZXdpdqNtf8sda7GcU4SPMp0tomq/5lUg9oiMa/Q7+kD35MUrpKaX3IVXVrwEtkjCU9dogZ/RAUA==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/middleware-stack": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.0.tgz",
+ "integrity": "sha512-31XC1xNF65nlbc16yuh3wwTudmqs6qy4EseQUGF8A/p2m/5wdd/cnXJqpniy/XvXVwkHPz/GwV36HqzHtIKATQ==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/node-config-provider": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.0.1.tgz",
+ "integrity": "sha512-Zoel4CPkKRTQ2XxmozZUfqBYqjPKL53/SvTDhJHj+VBSiJy6MXRav1iDCyFPS92t40Uh+Yi+Km5Ch3hQ+c/zSA==",
+ "optional": true,
+ "requires": {
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/shared-ini-file-loader": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/node-http-handler": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.0.1.tgz",
+ "integrity": "sha512-Zv3fxk3p9tsmPT2CKMsbuwbbxnq2gzLDIulxv+yI6aE+02WPYorObbbe9gh7SW3weadMODL1vTfOoJ9yFypDzg==",
+ "optional": true,
+ "requires": {
+ "@smithy/abort-controller": "^2.0.1",
+ "@smithy/protocol-http": "^2.0.1",
+ "@smithy/querystring-builder": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/property-provider": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.1.tgz",
+ "integrity": "sha512-pmJRyY9SF6sutWIktIhe+bUdSQDxv/qZ4mYr3/u+u45riTPN7nmRxPo+e4sjWVoM0caKFjRSlj3tf5teRFy0Vg==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/protocol-http": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-2.0.1.tgz",
+ "integrity": "sha512-mrkMAp0wtaDEIkgRObWYxI1Kun1tm6Iu6rK+X4utb6Ah7Uc3Kk4VIWwK/rBHdYGReiLIrxFCB1rq4a2gyZnSgg==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/querystring-builder": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.1.tgz",
+ "integrity": "sha512-bp+93WFzx1FojVEIeFPtG0A1pKsFdCUcZvVdZdRlmNooOUrz9Mm9bneRd8hDwAQ37pxiZkCOxopSXXRQN10mYw==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/querystring-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.1.tgz",
+ "integrity": "sha512-h+e7k1z+IvI2sSbUBG9Aq46JsgLl4UqIUl6aigAlRBj+P6ocNXpM6Yn1vMBw5ijtXeZbYpd1YvCxwDgdw3jhmg==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/service-error-classification": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.0.tgz",
+ "integrity": "sha512-2z5Nafy1O0cTf69wKyNjGW/sNVMiqDnb4jgwfMG8ye8KnFJ5qmJpDccwIbJNhXIfbsxTg9SEec2oe1cexhMJvw==",
+ "optional": true
+ },
+ "@smithy/shared-ini-file-loader": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.0.1.tgz",
+ "integrity": "sha512-a463YiZrPGvM+F336rIF8pLfQsHAdCRAn/BiI/EWzg5xLoxbC7GSxIgliDDXrOu0z8gT3nhVsif85eU6jyct3A==",
+ "optional": true,
+ "requires": {
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/signature-v4": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.1.tgz",
+ "integrity": "sha512-jztv5Mirca42ilxmMDjzLdXcoAmRhZskGafGL49sRo5u7swEZcToEFrq6vtX5YMbSyTVrE9Teog5EFexY5Ff2Q==",
+ "optional": true,
+ "requires": {
+ "@smithy/eventstream-codec": "^2.0.1",
+ "@smithy/is-array-buffer": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-middleware": "^2.0.0",
+ "@smithy/util-uri-escape": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/smithy-client": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.0.1.tgz",
+ "integrity": "sha512-LHC5m6tYpEu1iNbONfvMbwtErboyTZJfEIPoD78Ei5MVr36vZQCaCla5mvo36+q/a2NAk2//fA5Rx3I1Kf7+lQ==",
+ "optional": true,
+ "requires": {
+ "@smithy/middleware-stack": "^2.0.0",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-stream": "^2.0.1",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/types": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmjs.org/@smithy/types/-/types-2.0.2.tgz",
+ "integrity": "sha512-wcymEjIXQ9+NEfE5Yt5TInAqe1o4n+Nh+rh00AwoazppmUt8tdo6URhc5gkDcOYrcvlDVAZE7uG69nDpEGUKxw==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/url-parser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.1.tgz",
+ "integrity": "sha512-NpHVOAwddo+OyyIoujDL9zGL96piHWrTNXqltWmBvlUoWgt1HPyBuKs6oHjioyFnNZXUqveTOkEEq0U5w6Uv8A==",
+ "optional": true,
+ "requires": {
+ "@smithy/querystring-parser": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-base64": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.0.tgz",
+ "integrity": "sha512-Zb1E4xx+m5Lud8bbeYi5FkcMJMnn+1WUnJF3qD7rAdXpaL7UjkFQLdmW5fHadoKbdHpwH9vSR8EyTJFHJs++tA==",
+ "optional": true,
+ "requires": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-body-length-browser": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.0.tgz",
+ "integrity": "sha512-JdDuS4ircJt+FDnaQj88TzZY3+njZ6O+D3uakS32f2VNnDo3vyEuNdBOh/oFd8Df1zSZOuH1HEChk2AOYDezZg==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-body-length-node": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.0.0.tgz",
+ "integrity": "sha512-ZV7Z/WHTMxHJe/xL/56qZwSUcl63/5aaPAGjkfynJm4poILjdD4GmFI+V+YWabh2WJIjwTKZ5PNsuvPQKt93Mg==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-buffer-from": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz",
+ "integrity": "sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw==",
+ "optional": true,
+ "requires": {
+ "@smithy/is-array-buffer": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-config-provider": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-2.0.0.tgz",
+ "integrity": "sha512-xCQ6UapcIWKxXHEU4Mcs2s7LcFQRiU3XEluM2WcCjjBtQkUN71Tb+ydGmJFPxMUrW/GWMgQEEGipLym4XG0jZg==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-defaults-mode-browser": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.1.tgz",
+ "integrity": "sha512-w72Qwsb+IaEYEFtYICn0Do42eFju78hTaBzzJfT107lFOPdbjWjKnFutV+6GL/nZd5HWXY7ccAKka++C3NrjHw==",
+ "optional": true,
+ "requires": {
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "bowser": "^2.11.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-defaults-mode-node": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.1.tgz",
+ "integrity": "sha512-dNF45caelEBambo0SgkzQ0v76m4YM+aFKZNTtSafy7P5dVF8TbjZuR2UX1A5gJABD9XK6lzN+v/9Yfzj/EDgGg==",
+ "optional": true,
+ "requires": {
+ "@smithy/config-resolver": "^2.0.1",
+ "@smithy/credential-provider-imds": "^2.0.1",
+ "@smithy/node-config-provider": "^2.0.1",
+ "@smithy/property-provider": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-hex-encoding": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-2.0.0.tgz",
+ "integrity": "sha512-c5xY+NUnFqG6d7HFh1IFfrm3mGl29lC+vF+geHv4ToiuJCBmIfzx6IeHLg+OgRdPFKDXIw6pvi+p3CsscaMcMA==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-middleware": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.0.tgz",
+ "integrity": "sha512-eCWX4ECuDHn1wuyyDdGdUWnT4OGyIzV0LN1xRttBFMPI9Ff/4heSHVxneyiMtOB//zpXWCha1/SWHJOZstG7kA==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-retry": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.0.tgz",
+ "integrity": "sha512-/dvJ8afrElasuiiIttRJeoS2sy8YXpksQwiM/TcepqdRVp7u4ejd9C4IQURHNjlfPUT7Y6lCDSa2zQJbdHhVTg==",
+ "optional": true,
+ "requires": {
+ "@smithy/service-error-classification": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-stream": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.1.tgz",
+ "integrity": "sha512-2a0IOtwIKC46EEo7E7cxDN8u2jwOiYYJqcFKA6rd5rdXqKakHT2Gc+AqHWngr0IEHUfW92zX12wRQKwyoqZf2Q==",
+ "optional": true,
+ "requires": {
+ "@smithy/fetch-http-handler": "^2.0.1",
+ "@smithy/node-http-handler": "^2.0.1",
+ "@smithy/types": "^2.0.2",
+ "@smithy/util-base64": "^2.0.0",
+ "@smithy/util-buffer-from": "^2.0.0",
+ "@smithy/util-hex-encoding": "^2.0.0",
+ "@smithy/util-utf8": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-uri-escape": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-2.0.0.tgz",
+ "integrity": "sha512-ebkxsqinSdEooQduuk9CbKcI+wheijxEb3utGXkCoYQkJnwTnLbH1JXGimJtUkQwNQbsbuYwG2+aFVyZf5TLaw==",
+ "optional": true,
+ "requires": {
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
+ "@smithy/util-utf8": {
+ "version": "2.0.0",
+ "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.0.tgz",
+ "integrity": "sha512-rctU1VkziY84n5OXe3bPNpKR001ZCME2JCaBBFgtiM2hfKbHFudc/BkMuPab8hRbLd0j3vbnBTTZ1igBf0wgiQ==",
+ "optional": true,
+ "requires": {
+ "@smithy/util-buffer-from": "^2.0.0",
+ "tslib": "^2.5.0"
+ },
+ "dependencies": {
+ "tslib": {
+ "version": "2.6.1",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.1.tgz",
+ "integrity": "sha512-t0hLfiEKfMUoqhG+U1oid7Pva4bbDPHYfJNiB7BiIjRkj1pyC++4N3huJfqY6aRH6VTB0rvtzQwjM4K6qpfOig==",
+ "optional": true
+ }
+ }
+ },
"@szmarczak/http-timer": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz",
@@ -8783,9 +11720,9 @@
}
},
"@types/webidl-conversions": {
- "version": "6.1.1",
- "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-6.1.1.tgz",
- "integrity": "sha512-XAahCdThVuCFDQLT7R7Pk/vqeObFNL3YqRyFZg+AqAP/W1/w3xHaIxuW7WszQqTbIBOPRcItYJIou3i/mppu3Q=="
+ "version": "7.0.0",
+ "resolved": "https://registry.npmjs.org/@types/webidl-conversions/-/webidl-conversions-7.0.0.tgz",
+ "integrity": "sha512-xTE1E+YF4aWPJJeUzaZI5DRntlkY3+BCVJi0axFptnjGmAoWxkyREIh/XMrfxVLejwQxMCfDXdICo0VLxThrog=="
},
"@types/whatwg-url": {
"version": "8.2.2",
@@ -9131,6 +12068,12 @@
"integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==",
"dev": true
},
+ "bowser": {
+ "version": "2.11.0",
+ "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz",
+ "integrity": "sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA==",
+ "optional": true
+ },
"boxen": {
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/boxen/-/boxen-5.1.2.tgz",
@@ -9179,9 +12122,9 @@
}
},
"bson": {
- "version": "4.7.0",
- "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.0.tgz",
- "integrity": "sha512-VrlEE4vuiO1WTpfof4VmaVolCVYkYTgB9iWgYNOrVlnifpME/06fhFRmONgBhClD5pFC1t9ZWqFUQEQAzY43bA==",
+ "version": "4.7.2",
+ "resolved": "https://registry.npmjs.org/bson/-/bson-4.7.2.tgz",
+ "integrity": "sha512-Ry9wCtIZ5kGqkJoi6aD8KjxFZEx78guTQDnpXWiNthsxzrxAK/i8E6pCHAIZTbaEFWcOCvbecMukfK7XUvyLpQ==",
"requires": {
"buffer": "^5.6.0"
}
@@ -9865,11 +12808,6 @@
"resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz",
"integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ=="
},
- "denque": {
- "version": "2.1.0",
- "resolved": "https://registry.npmjs.org/denque/-/denque-2.1.0.tgz",
- "integrity": "sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw=="
- },
"depd": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz",
@@ -10276,6 +13214,15 @@
"integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==",
"dev": true
},
+ "fast-xml-parser": {
+ "version": "4.2.5",
+ "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.2.5.tgz",
+ "integrity": "sha512-B9/wizE4WngqQftFPmdaMYlXoJlJOYxGQOanC77fq9k8+Z0v5dDSVh+3glErdIROP//s/jgb7ZuxKfB8nVyo0g==",
+ "optional": true,
+ "requires": {
+ "strnum": "^1.0.5"
+ }
+ },
"fastq": {
"version": "1.13.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz",
@@ -11444,21 +14391,21 @@
}
},
"mongodb": {
- "version": "4.9.0",
- "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.9.0.tgz",
- "integrity": "sha512-tJJEFJz7OQTQPZeVHZJIeSOjMRqc5eSyXTt86vSQENEErpkiG7279tM/GT5AVZ7TgXNh9HQxoa2ZkbrANz5GQw==",
+ "version": "4.16.0",
+ "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-4.16.0.tgz",
+ "integrity": "sha512-0EB113Fsucaq1wsY0dOhi1fmZOwFtLOtteQkiqOXGklvWMnSH3g2QS53f0KTP+/6qOkuoXE2JksubSZNmxeI+g==",
"requires": {
- "bson": "^4.7.0",
- "denque": "^2.1.0",
- "mongodb-connection-string-url": "^2.5.3",
+ "@aws-sdk/credential-providers": "^3.186.0",
+ "bson": "^4.7.2",
+ "mongodb-connection-string-url": "^2.5.4",
"saslprep": "^1.0.3",
- "socks": "^2.7.0"
+ "socks": "^2.7.1"
}
},
"mongodb-connection-string-url": {
- "version": "2.5.3",
- "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.5.3.tgz",
- "integrity": "sha512-f+/WsED+xF4B74l3k9V/XkTVj5/fxFH2o5ToKXd8Iyi5UhM+sO9u0Ape17Mvl/GkZaFtM0HQnzAG5OTmhKw+tQ==",
+ "version": "2.6.0",
+ "resolved": "https://registry.npmjs.org/mongodb-connection-string-url/-/mongodb-connection-string-url-2.6.0.tgz",
+ "integrity": "sha512-WvTZlI9ab0QYtTYnuMLgobULWhokRjtC7db9LtcVfJ+Hsnyr5eo6ZtNAt3Ly24XZScGMelOcGtm7lSn0332tPQ==",
"requires": {
"@types/whatwg-url": "^8.2.1",
"whatwg-url": "^11.0.0"
@@ -13093,9 +16040,9 @@
"integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg=="
},
"socks": {
- "version": "2.7.0",
- "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.0.tgz",
- "integrity": "sha512-scnOe9y4VuiNUULJN72GrM26BNOjVsfPXI+j+98PkyEfsIXroa5ofyjT+FzGvn/xHs73U2JtoBYAVx9Hl4quSA==",
+ "version": "2.7.1",
+ "resolved": "https://registry.npmjs.org/socks/-/socks-2.7.1.tgz",
+ "integrity": "sha512-7maUZy1N7uo6+WVEX6psASxtNlKaNVMlGQKkG/63nEDdLOWNbiUMoLK7X4uYoLhQstau72mLgfEWcXcwsaHbYQ==",
"requires": {
"ip": "^2.0.0",
"smart-buffer": "^4.2.0"
@@ -13259,6 +16206,12 @@
"integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==",
"dev": true
},
+ "strnum": {
+ "version": "1.0.5",
+ "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz",
+ "integrity": "sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA==",
+ "optional": true
+ },
"stylehacks": {
"version": "5.1.0",
"resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-5.1.0.tgz",
@@ -13430,7 +16383,7 @@
"version": "1.14.1",
"resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz",
"integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==",
- "dev": true
+ "devOptional": true
},
"tsscmp": {
"version": "1.0.6",
@@ -13561,6 +16514,12 @@
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==",
"dev": true
},
+ "uuid": {
+ "version": "8.3.2",
+ "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
+ "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==",
+ "optional": true
+ },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz",
diff --git a/package.json b/package.json
index a326ccb..3eff185 100644
--- a/package.json
+++ b/package.json
@@ -30,7 +30,7 @@
"koa-jwt": "^4.0.3",
"koa-router": "^12.0.0",
"koa-static": "^5.0.0",
- "mongodb": "^4.9.0",
+ "mongodb": "^4.16.0",
"parsimmon": "^1.18.1",
"seedrandom": "^3.0.5"
},