From 596b7f0eeb5faeffc036e5da5d0a881f149e712b Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Mon, 14 Jul 2025 19:43:04 -0500 Subject: [PATCH 01/15] Initial Draft --- package.json | 27 +- src/bucketManager.js | 168 -- src/gatewayManager.js | 221 --- src/helpers.js | 42 - src/index.js | 905 ++++++++- src/nameManager.js | 251 --- src/objectManager.js | 603 ------ src/pinManager.js | 298 --- test/bucketManager.spec.cjs | 147 -- test/bucketManager.spec.mjs | 147 -- test/gatewayManager.spec.cjs | 125 -- test/gatewayManager.spec.mjs | 125 -- test/index.spec.cjs | 809 ++++++++ test/index.spec.mjs | 809 ++++++++ test/nameManager.spec.cjs | 141 -- test/nameManager.spec.mjs | 141 -- test/objectManager.spec.cjs | 357 ---- test/objectManager.spec.mjs | 325 --- test/pinManager.spec.cjs | 262 --- test/pinManager.spec.mjs | 263 --- yarn.lock | 3612 ++++++++++++++++------------------ 21 files changed, 4189 insertions(+), 5589 deletions(-) delete mode 100644 src/bucketManager.js delete mode 100644 src/gatewayManager.js delete mode 100644 src/helpers.js delete mode 100644 src/nameManager.js delete mode 100644 src/objectManager.js delete mode 100644 src/pinManager.js delete mode 100644 test/bucketManager.spec.cjs delete mode 100644 test/bucketManager.spec.mjs delete mode 100644 test/gatewayManager.spec.cjs delete mode 100644 test/gatewayManager.spec.mjs create mode 100644 test/index.spec.cjs create mode 100644 test/index.spec.mjs delete mode 100644 test/nameManager.spec.cjs delete mode 100644 test/nameManager.spec.mjs delete mode 100644 test/objectManager.spec.cjs delete mode 100644 test/objectManager.spec.mjs delete mode 100644 test/pinManager.spec.cjs delete mode 100644 test/pinManager.spec.mjs diff --git a/package.json b/package.json index 4183897..e472351 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@filebase/sdk", - "version": "1.0.6", + "version": "2.0.0", "description": "SDK for Interacting with Filebase Services [S3(Buckets, Objects), IPFS(Gateways, Pins) IPNS(Names)]", "repository": { "type": "git", @@ -38,28 +38,23 @@ "ipns", "sdk", "web3", - "distributed" + "distributed", + "decentralized" ], "devDependencies": { "clean-jsdoc-theme": "4.2.17", "jsdoc": "4.0.2", - "prettier": "3.1.0", + "prettier": "3.6.2", "tsup": "8.0.1", - "typescript": "5.3.3" + "typescript": "5.3.3", + "uuid": "11.1.0" }, "dependencies": { - "@aws-sdk/client-s3": "3.478.0", - "@aws-sdk/lib-storage": "3.478.0", - "@helia/car": "1.0.4", - "@helia/mfs": "3.0.1", - "@helia/unixfs": "1.4.3", - "@ipld/car": "5.2.4", - "axios": "1.6.2", - "blockstore-fs": "1.1.10", - "blockstore-core": "4.4.1", - "datastore-core": "9.2.9", - "p-queue": "8.0.1", - "uuid": "9.0.1", + "@aws-sdk/client-s3": "3.842.0", + "@aws-sdk/s3-request-presigner": "3.844.0", + "axios": "1.10.0", + "ipns": "10.1.2", + "kubo-rpc-client": "5.2.0", "winston": "3.12.0" } } diff --git a/src/bucketManager.js b/src/bucketManager.js deleted file mode 100644 index f09c1ac..0000000 --- a/src/bucketManager.js +++ /dev/null @@ -1,168 +0,0 @@ -import { - CreateBucketCommand, - DeleteBucketCommand, - GetBucketAclCommand, - ListBucketsCommand, - PutBucketAclCommand, PutBucketTaggingCommand, - S3Client, -} from "@aws-sdk/client-s3"; - -/** Provides methods for managing buckets in an S3 endpoint. */ -class BucketManager { - #DEFAULT_ENDPOINT = "https://s3.filebase.com"; - #DEFAULT_REGION = "us-east-1"; - - #client; - - /** - * @summary Creates a new instance of the constructor. - * @param {string} clientKey - The access key ID for authentication. - * @param {string} clientSecret - The secret access key for authentication. - * @tutorial quickstart-bucket - * @example - * import { BucketManager } from "@filebase/sdk"; - * const bucketManager = new BucketManager("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD"); - */ - constructor(clientKey, clientSecret) { - const clientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_S3_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT, - clientConfiguration = { - credentials: { - accessKeyId: clientKey, - secretAccessKey: clientSecret, - }, - endpoint: clientEndpoint, - region: this.#DEFAULT_REGION, - forcePathStyle: true, - }; - this.#client = new S3Client(clientConfiguration); - } - - /** - * @typedef {Object} bucket - * @property {string} Name The name of the bucket - * @property {date} Date the bucket was created - */ - - /** - * @summary Creates a new bucket with the specified name. - * @param {string} name - The name of the bucket to create. - * @returns {Promise} - A promise that resolves when the bucket is created. - * @example - * // Create bucket with name of `create-bucket-example` - * await bucketManager.create(`create-bucket-example`); - */ - async create(name) { - const command = new CreateBucketCommand({ - Bucket: name, - }); - - return await this.#client.send(command); - } - - /** - * @summary Lists the buckets in the client. - * @returns {Promise>} - A promise that resolves with an array of objects representing the buckets in the client. - * @example - * // List all buckets - * await bucketManager.list(); - */ - async list() { - const command = new ListBucketsCommand({}), - { Buckets } = await this.#client.send(command); - - return Buckets; - } - - /** - * @summary Deletes the specified bucket. - * @param {string} name - The name of the bucket to delete. - * @returns {Promise} - A promise that resolves when the bucket is deleted. - * @example - * // Delete bucket with name of `bucket-name-to-delete` - * await bucketManager.delete(`bucket-name-to-delete`); - */ - async delete(name) { - const command = new DeleteBucketCommand({ - Bucket: name, - }); - - await this.#client.send(command); - return true; - } - - /** - * @summary Sets the privacy of a given bucket. - * @param {string} name - The name of the bucket to toggle. - * @param {boolean} targetState - The new target state. [true=private,false=public] - * @returns {Promise} A promise that resolves to true if the bucket was successfully toggled. - * @example - * // Toggle bucket with label of `toggle-bucket-example` - * await bucketManager.setPrivacy(`toggle-bucket-example`, true); // Enabled - * await bucketManager.setPrivacy(`toggle-bucket-example`, false); // Disabled - */ - - async setPrivacy(name, targetState) { - const command = new PutBucketAclCommand({ - Bucket: name, - ACL: targetState ? "private" : "public-read", - }); - - await this.#client.send(command); - return true; - } - - /** - * @summary Gets the privacy of a given bucket - * @param {string} name - The name of the bucket to query. - * @returns {Promise} A promise that resolves to true if the bucket is private. - */ - async getPrivacy(name) { - const command = new GetBucketAclCommand({ - Bucket: name, - }); - - const response = await this.#client.send(command), - readPermission = response.Grants.find((grant) => { - return grant.Grantee.Type === "Group" && grant.Permission === "READ"; - }); - return !(typeof readPermission !== "undefined"); - } - - /** - * @summary Generates the IPFS Directory/Folder CID for a given bucket - * @param {string} name - The name of the bucket to use. - * @returns {Promise} A promise that resolves with the CID of the new directory/folder - */ - async generateCid(name) { - const command = new PutBucketTaggingCommand({ - Bucket: name, - Tagging: { - TagSet: [ - { - Key: "generateBucketCid", - Value: "true" - } - ] - } - }); - - let cid = false; - command.middlewareStack.add( - (next) => async (args) => { - const response = await next(args); - - // Get cid from headers - cid = response.response.headers["x-amz-meta-cid"]; - return response; - } - ); - - await this.#client.send(command); - return cid; - } -} - -export default BucketManager; diff --git a/src/gatewayManager.js b/src/gatewayManager.js deleted file mode 100644 index b87dd29..0000000 --- a/src/gatewayManager.js +++ /dev/null @@ -1,221 +0,0 @@ -import axios from "axios"; -import { apiErrorHandler } from "./helpers.js"; - -class GatewayManager { - #DEFAULT_ENDPOINT = "https://api.filebase.io"; - #DEFAULT_TIMEOUT = 60000; - - #client; - - /** - * @summary Creates a new instance of the constructor. - * @param {string} clientKey - The access key ID for authentication. - * @param {string} clientSecret - The secret access key for authentication. - * @tutorial quickstart-gateway - * @example - * import { GatewayManager } from "@filebase/sdk"; - * const gatewayManager = new GatewayManager("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD"); - */ - constructor(clientKey, clientSecret) { - const clientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_GW_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT, - encodedToken = Buffer.from(`${clientKey}:${clientSecret}`).toString( - "base64", - ), - baseURL = `${clientEndpoint}/v1/gateways`; - this.#client = axios.create({ - baseURL: baseURL, - timeout: this.#DEFAULT_TIMEOUT, - headers: { Authorization: `Bearer ${encodedToken}` }, - }); - } - - /** - * @typedef {Object} gateway - * @property {string} name Name for the gateway - * @property {string} domain Custom Domain for the gateway - * @property {boolean} enabled Whether the gateway is enabled or not - * @property {string} private Whether the gateway is scoped to users content - * @property {date} created_at Date the gateway was created - * @property {date} updated_at Date the gateway was last updated - */ - - /** - * @typedef {Object} gatewayOptions - * @property {boolean} [domain] Optional Domain to allow for using a Custom Domain - * @property {string} [enabled] Optional Toggle to use for enabling the gateway - * @property {boolean} [private] Optional Boolean determining if gateway is Public or Private - */ - - /** - * @summary Creates a gateway with the given name and options - * @param {string} name Unique name across entire platform for the gateway. Must be a valid subdomain name. - * @param {gatewayOptions} [options] - * @returns {Promise} - A promise that resolves to the value of a gateway. - * @example - * // Create gateway with name of `create-gateway-example` and a custom domain of `cname.mycustomdomain.com`. - * // The custom domain must already exist and have a CNAME record pointed at `create-gateway-example.myfilebase.com`. - * await gatewayManager.create(`create-gateway-example`, { - * domain: `cname.mycustomdomain.com` - * }); - */ - async create(name, options = {}) { - try { - let createOptions = { - name, - }; - if (typeof options.domain === "string") { - createOptions.domain = options.domain; - } - if (typeof options.enabled === "boolean") { - createOptions.enabled = options.enabled; - } - if (typeof options.private === "boolean") { - createOptions.private = options.private; - } - const createResponse = await this.#client.request({ - method: "POST", - data: createOptions, - }); - return createResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Deletes a gateway with the given name. - * @param {string} name - The name of the gateway to delete. - * @returns {Promise} - A promise that resolves to true if the gateway was successfully deleted. - * @example - * // Delete gateway with name of `delete-gateway-example` - * await gatewayManager.delete(`delete-name-example`); - */ - async delete(name) { - try { - await this.#client.request({ - method: "DELETE", - url: `/${name}`, - validateStatus: (status) => { - return status === 204; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Returns the value of a gateway - * @param {string} name - Parameter representing the name to get. - * @returns {Promise} - A promise that resolves to the value of a gateway. - * @example - * // Get gateway with name of `gateway-get-example` - * await gatewayManager.get(`gateway-get-example`); - */ - async get(name) { - try { - const getResponse = await this.#client.request({ - method: "GET", - url: `/${name}`, - validateStatus: (status) => { - return status === 200 || status === 404; - }, - }); - return getResponse.status === 200 ? getResponse.data : false; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Returns a list of gateways - * @returns {Promise>} - A promise that resolves to an array of gateways. - * @example - * // List all gateways - * await gatewayManager.list(); - */ - async list() { - try { - const getResponse = await this.#client.request({ - method: "GET", - }); - return getResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Updates the specified gateway. - * @param {string} name - The name of the gateway to update. - * @param {gatewayOptions} options - The options for the update operation. - * - * @returns {Promise} - A Promise that resolves to true if the gateway was updated. - * @example - * // Update gateway with name of `update-gateway-example` and set the gateway to only serve CIDs pinned by user. - * await gatewayManager.update(`update-gateway-example`, { - * private: true - * }); - */ - async update(name, options) { - try { - const updateOptions = { - name, - }; - if (options?.domain) { - updateOptions.domain = String(options.private); - } - if (options?.enabled) { - updateOptions.enabled = Boolean(options.enabled); - } - if (options?.private) { - updateOptions.private = Boolean(options.private); - } - await this.#client.request({ - method: "PUT", - url: `/${name}`, - data: updateOptions, - validateStatus: (status) => { - return status === 200; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Toggles the enabled state of a given gateway. - * @param {string} name - The name of the gateway to toggle. - * @param {boolean} targetState - The new target state. - * @returns {Promise} A promise that resolves to true if the gateway was successfully toggled. - * @example - * // Toggle gateway with label of `toggle-gateway-example` - * await gatewayManager.toggle(`toggle-gateway-example`, true); // Enabled - * await gatewayManager.toggle(`toggle-gateway-example`, false); // Disabled - */ - async toggle(name, targetState) { - try { - await this.#client.request({ - method: "PUT", - url: `/${name}`, - data: { - enabled: Boolean(targetState), - }, - validateStatus: (status) => { - return status === 200; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } -} - -export default GatewayManager; diff --git a/src/helpers.js b/src/helpers.js deleted file mode 100644 index 9f604b2..0000000 --- a/src/helpers.js +++ /dev/null @@ -1,42 +0,0 @@ -import axios from "axios"; - -const GATEWAY_DEFAULT_TIMEOUT = 60000; - -async function downloadFromGateway(cid, options) { - if (typeof options.endpoint !== "string") { - throw new Error(`Default Gateway must be set`); - } - - const downloadHeaders = {}; - if (options.token) { - downloadHeaders["x-filebase-gateway-token"] = options.token; - } - - const downloadResponse = await axios.request({ - method: "GET", - baseURL: options.endpoint, - url: `/ipfs/${cid}`, - headers: downloadHeaders, - type: "stream", - timeout: options?.timeout || GATEWAY_DEFAULT_TIMEOUT, - }); - return downloadResponse.data; -} - -function apiErrorHandler(err) { - if ( - err?.response && - err?.response?.status && - (err.response.status.toString()[0] === "4" || - err.response.status.toString()[0] === "5") - ) { - throw new Error( - err.response.data.error?.details || - err.response.data.error?.reason || - err, - ); - } - throw err; -} - -export { downloadFromGateway, apiErrorHandler }; diff --git a/src/index.js b/src/index.js index 8687af6..956f352 100644 --- a/src/index.js +++ b/src/index.js @@ -1,13 +1,892 @@ -import BucketManager from "./bucketManager.js"; -import GatewayManager from "./gatewayManager.js"; -import NameManager from "./nameManager.js"; -import ObjectManager from "./objectManager.js"; -import PinManager from "./pinManager.js"; - -export { - BucketManager, - GatewayManager, - NameManager, - ObjectManager, - PinManager, -}; +import axios from "axios"; +import { + CopyObjectCommand, + CreateBucketCommand, + DeleteBucketCommand, + DeleteObjectCommand, + GetBucketTaggingCommand, + GetObjectCommand, + HeadObjectCommand, + ListBucketsCommand, + ListObjectsV2Command, + PutBucketTaggingCommand, + S3Client, +} from "@aws-sdk/client-s3"; +import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; +import { create, globSource } from "kubo-rpc-client"; +import { unmarshalIPNSRecord } from "ipns"; + +class FilebaseClient { + #DEFAULT_IPFS_ENDPOINT = "https://rpc.filebase.io"; + #DEFAULT_S3_ENDPOINT = "https://s3.filebase.com"; + #DEFAULT_REGION = "us-east-1"; + + #DEFAULT_ENDPOINT = "https://api.filebase.io"; + #DEFAULT_TIMEOUT = 60000; + + #GATEWAY_DEFAULT_TIMEOUT = 60000; + #PUBLIC_IPFS_GATEWAY = "https://ipfs.filebase.io"; + #VALID_FORMATS = ["ipns-record", "raw", "car"]; + + #default_bucket; + #default_gateway = this.#PUBLIC_IPFS_GATEWAY; + + #ipfs_credentials; + #ipfs_client; + #gateways_client; + #names_client; + #s3_client; + + /** + * @typedef {Object} clientOptions + * @property {string} [bucket] The bucket to use for file operations (optional) + */ + + /** + * @summary Creates a new instance of the constructor. + * @param {string} clientKey - The access key ID for authentication. + * @param {string} clientSecret - The secret access key for authentication. + * @param {clientOptions} [options] - Options for the client (optional) + * @tutorial quickstart-bucket + * @example + * import FilebaseClient from "@filebase/sdk"; + * const client = new FilebaseClient("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD"); + */ + constructor(clientKey, clientSecret, options) { + //region S3 Client + const clientEndpoint = + process.env.NODE_ENV === "test" + ? process.env.TEST_S3_ENDPOINT || this.#DEFAULT_S3_ENDPOINT + : this.#DEFAULT_S3_ENDPOINT; + this.#s3_client = new S3Client({ + credentials: { + accessKeyId: clientKey, + secretAccessKey: clientSecret, + }, + endpoint: clientEndpoint, + region: this.#DEFAULT_REGION, + forcePathStyle: true, + }); + //endregion + + //region IPFS Client + const ipfsEndpoint = + process.env.NODE_ENV === "test" + ? process.env.TEST_IPFS_ENDPOINT || this.#DEFAULT_IPFS_ENDPOINT + : this.#DEFAULT_IPFS_ENDPOINT; + this.#ipfs_credentials = `${clientKey}:${clientSecret}`; + let ipfsCredentials = this.#ipfs_credentials; + if (options?.bucket) { + ipfsCredentials = `${ipfsCredentials}:${options.bucket}`; + this.#default_bucket = options.bucket; + } + this.#ipfs_client = create({ + url: ipfsEndpoint, + headers: { + Authorization: `Bearer ${Buffer.from(ipfsCredentials).toString("base64")}`, + }, + }); + //endregion + + //region Gateways Client + const gatewayClientEndpoint = + process.env.NODE_ENV === "test" + ? process.env.TEST_GW_ENDPOINT || + options?.gateway?.endpoint || + this.#DEFAULT_ENDPOINT + : options?.gateway?.endpoint || this.#DEFAULT_ENDPOINT; + this.#gateways_client = axios.create({ + baseURL: `${gatewayClientEndpoint}/v1/gateways`, + timeout: this.#DEFAULT_TIMEOUT, + headers: { + common: { + Authorization: `Bearer ${Buffer.from(this.#ipfs_credentials).toString("base64")}`, + }, + }, + }); + //endregion + + //region Names Client + const namesClientEndpoint = + process.env.NODE_ENV === "test" + ? process.env.TEST_NAME_ENDPOINT || this.#DEFAULT_ENDPOINT + : this.#DEFAULT_ENDPOINT; + this.#names_client = axios.create({ + baseURL: `${namesClientEndpoint}/v1/names`, + timeout: this.#DEFAULT_TIMEOUT, + headers: { + common: { + Authorization: `Bearer ${Buffer.from(this.#ipfs_credentials).toString("base64")}`, + }, + }, + }); + //endregion + } + + //region Utility Methods + #apiErrorHandler(err) { + if ( + err?.response && + err?.response?.status && + (err.response.status.toString()[0] === "4" || + err.response.status.toString()[0] === "5") + ) { + throw new Error( + err.response.data.error?.details || + err.response.data.error?.reason || + err, + ); + } + throw err; + } + + #getIpfsCredentials(bucket) { + let encodedCredentials = this.#ipfs_credentials; + if (bucket) { + encodedCredentials = `${encodedCredentials}:${bucket}`; + } else if (this.#default_bucket) { + encodedCredentials = `${encodedCredentials}:${this.#default_bucket}`; + } else { + throw new Error("Bucket must be set"); + } + return Buffer.from(encodedCredentials).toString("base64"); + } + //endregion + + //region Bucket Methods + /** + * @typedef {Object} bucket + * @property {string} Name The name of the bucket + * @property {date} Date the bucket was created + */ + + /** + * @summary Creates a new bucket with the specified name. + * @param {string} name - The name of the bucket to create. + * @returns {Promise} - A promise that resolves when the bucket is created. + * @example + * // Create bucket with name of `create-bucket-example` + * await client.createBucket(`create-bucket-example`); + */ + async createBucket(name) { + const command = new CreateBucketCommand({ + Bucket: name, + }); + + return await this.#s3_client.send(command); + } + + /** + * @summary Lists the buckets in the client. + * @returns {Promise>} - A promise that resolves with an array of objects representing the buckets in the client. + * @example + * // List all buckets + * await client.listBuckets(); + */ + async listBuckets() { + const command = new ListBucketsCommand({}), + { Buckets } = await this.#s3_client.send(command); + + return Buckets; + } + + /** + * @summary Deletes the specified bucket. + * @param {string} name - The name of the bucket to delete. + * @returns {Promise} - A promise that resolves when the bucket is deleted. + * @example + * // Delete bucket with name of `bucket-name-to-delete` + * await client.deleteBucket(`bucket-name-to-delete`); + */ + async deleteBucket(name) { + const command = new DeleteBucketCommand({ + Bucket: name, + }); + + await this.#s3_client.send(command); + return true; + } + + /** + * @summary Generates the IPFS Directory/Folder CID for a given bucket + * @param {string} name - The name of the bucket to use. + * @returns {Promise} A promise that resolves with the CID of the new directory/folder + */ + async generateBucketCid(name) { + const command = new PutBucketTaggingCommand({ + Bucket: name, + Tagging: { + TagSet: [ + { + Key: "generateBucketCid", + Value: "true", + }, + ], + }, + }); + + let cid = false; + command.middlewareStack.add((next) => async (args) => { + const response = await next(args); + + // Get cid from headers + cid = response.response.headers["x-amz-meta-cid"]; + return response; + }); + + await this.#s3_client.send(command); + return cid; + } + + async getBucketCid(name) { + const getCidCommand = new GetBucketTaggingCommand({ + Bucket: name, + }); + const getCidResponse = await this.#s3_client.send(getCidCommand); + if ( + typeof getCidResponse !== "undefined" && + getCidResponse.TagSet !== "undefined" + ) { + const resolvedTag = getCidResponse.TagSet.find((element) => { + return element.Key === "CID"; + }); + if (typeof resolvedTag !== "undefined" && resolvedTag.Value !== "") { + return resolvedTag.Value; + } + } + throw new Error(`Failed to Fetch CID for Bucket`); + } + //endregion + + //region File Methods + async uploadDirectory(path, sourceDirectory, options = {}) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + const importOptions = {}; + if (options?.includeHiddenFiles === true) { + importOptions["hidden"] = true; + delete options["includeHiddenFiles"]; + } + const uploadResults = []; + for await (const uploadResult of this.#ipfs_client.addAll( + globSource(path, "*", importOptions), + options, + )) { + uploadResults.push(uploadResult); + } + return uploadResults; + } + + async uploadFile(path, content, options = {}) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers = options.headers || {}; + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + options.searchParams = options.searchParams || {}; + options.searchParams["preserve-filenames"] = "true"; + return await this.#ipfs_client.add( + { + path, + content, + }, + options, + ); + } + + async uploadFiles(fileStream, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + const uploadResults = []; + for await (const uploadResult of this.#ipfs_client.addAll( + fileStream, + options, + )) { + uploadResults.push(uploadResult); + } + return uploadResults; + } + + pinFile(ipfsPath, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + return this.#ipfs_client.pin.add(ipfsPath, options); + } + + pinFiles(source, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + return this.#ipfs_client.pin.addAll(source, options); + } + + async downloadFile(path, options) { + const command = new GetObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: path, + }), + response = await this.#s3_client.send(command); + + return response.Body; + } + + async deleteFile(path, options) { + const command = new DeleteObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: path, + }); + + await this.#s3_client.send(command); + return true; + } + + async copyFile(from, to, options) { + const copySource = `${ + options?.sourceBucket || this.#default_bucket + }/${from}`, + command = new CopyObjectCommand({ + CopySource: copySource, + Bucket: options?.destinationBucket || this.#default_bucket, + Key: to, + }); + + await this.#s3_client.send(command); + return true; + } + + /** + * @typedef {Object} listFilesResult + * @property {Array} entries List of Files stored in the Bucket + * @property {string} entries.cid CID of the Object + * @property {string} entries.name Name of the Object + * @property {number} entries.size Size in Bytes of the Object + * @property {string} entries.lastModified Date Last Modified of the Object + * @property {function} [nextPage] Convenience function to get the next page of files + */ + + /** + * @typedef {Object} listObjectOptions + * @property {string} [Bucket] The name of the bucket. If not provided, the default bucket will be used. + * @property {string|null} [ContinuationToken=null] Continues listing from this objects name. + * @property {string|null} [Delimiter=null] Character used to group keys + * @property {number} [MaxKeys=1000] The maximum number of objects to retrieve. Defaults to 1000. + */ + + /** + * Retrieves a list of files from a specified bucket. + * + * @param {string} prefix - The prefix to filter the files list with. + * @param {listObjectOptions} [options] - The options for listing files. + * @returns {Promise} - A promise that resolves to an array of files. + * @example + * // List files in bucket with a limit of 1000 + * await filebaseClient.listFiles('my-favorites-folder', { + * MaxKeys: 1000 + * }); + */ + async listFiles( + prefix = undefined, + options = { + Bucket: this.#default_bucket, + ContinuationToken: null, + Delimiter: null, + MaxKeys: 1000, + }, + ) { + const listOptions = { + ...options, + Prefix: prefix, + }; + if (listOptions?.MaxKeys && listOptions.MaxKeys > 100000) { + throw new Error(`MaxKeys Maximum value is 100000`); + } + const bucket = listOptions?.Bucket || this.#default_bucket, + limit = listOptions?.MaxKeys || 1000, + commandOptions = { + Bucket: bucket, + MaxKeys: limit, + }, + command = new ListObjectsV2Command({ + ...listOptions, + ...commandOptions, + }); + + const { Contents, IsTruncated, NextContinuationToken } = + await this.#s3_client.send(command); + const listResponse = { + entries: Contents.map((item) => { + return { + cid: item.CID, + name: item.Key, + size: item.Size, + lastModified: item.LastModified, + }; + }), + }; + if (IsTruncated) { + listResponse["nextPage"] = this.listFiles(prefix, { + ...options, + ContinuationToken: NextContinuationToken, + }); + } + return listResponse; + } + + /** + * @typedef {Object} objectOptions + * @property {string} [bucket] - The bucket to pin the IPFS CID into. + */ + + /** + * @typedef {Object} objectHeadResult + * @property {string} cid The CID of the uploaded object + * @property {array} [entries] If a directory then returns an array of the containing objects + * @property {string} entries.cid The CID of the uploaded object + * @property {string} entries.path The path of the object + */ + + /** + * @summary Gets an objects info and metadata using the S3 API. + * @param {string} path - The key of the object to be inspected. + * @param {objectOptions} [options] - The options for inspecting the object. + * @returns {Promise} + */ + async getFileMetadata(path, options) { + try { + const command = new HeadObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: path, + }); + return await this.#s3_client.send(command); + } catch (err) { + if (err.name === "NotFound") { + return false; + } + throw err; + } + } + + async generatePresignedUrl(objectKey, expiresInSeconds = 3600, options) { + const command = new GetObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: objectKey, + }); + + try { + return await getSignedUrl(this.#s3_client, command, { + expiresIn: expiresInSeconds, // URL valid for 1 hour by default + }); + } catch (error) { + console.error("Error generating presigned download URL:", error); + throw error; + } + } + //endregion + + //region IPNS Name Methods + /** + * @typedef {Object} name + * @property {string} label Descriptive label for the Key + * @property {string} network_key IPNS Key CID + * @property {string} cid Value that name Publishes + * @property {number} sequence Version Number for the name + * @property {boolean} enabled Whether the name is being Published or not + * @property {date} published_at Date the name was last published to the DHT + * @property {date} created_at Date the name was created + * @property {date} updated_at Date the name was last updated + */ + + /** + * @typedef {Object} nameOptions + * @property {boolean} [enabled] Whether the name is enabled or not. + */ + + /** + * @summary Creates a new IPNS name with the given name as the label and CID. + * @param {string} label - The label of the new IPNS name. + * @param {string} cid - The CID of the IPNS name. + * @param {nameOptions} [options] - Additional options for the IPNS name. + * @returns {Promise} - A Promise that resolves with the response JSON. + * @example + * // Create IPNS name with label of `create-name-example` and CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` + * await client.createIpnsName(`create-name-example`, `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm`); + */ + async createIpnsName( + label, + cid, + options = { + enabled: true, + }, + ) { + try { + const createResponse = await this.#names_client.request({ + method: "POST", + data: { + label, + cid, + enabled: options?.enabled !== false, + }, + }); + return createResponse.data; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Returns the value of an IPNS name + * @param {string} label - Parameter representing the label of the name to resolve. + * @returns {Promise} - A promise that resolves to the value of a name. + * @example + * // Get IPNS name with label of `list-name-example` + * await nameManager.get(`list-name-example`); + */ + async getIpnsName(label) { + try { + const getResponse = await this.#names_client.request({ + method: "GET", + url: `/${label}`, + validateStatus: (status) => { + return status === 200 || status === 404; + }, + }); + return getResponse.status === 200 ? getResponse.data : false; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Imports a user's IPNS private key. + * @param {string} label - The label for the IPNS name. + * @param {string} cid - The CID (Content Identifier) of the data. + * @param {string} privateKey - The existing private key encoded in Base64. + * @param {nameOptions} [options] - Additional options for the IPNS name. + * @returns {Promise} - A Promise that resolves to the server response. + * @example + * // Import IPNS private key with label of `create-name-example`, CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` + * // and a private key encoded with base64 + * await client.importIpnsName( + * `create-name-example`, + * `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` + * `BASE64_ENCODED_PRIVATEKEY` + * ); + */ + async importIpnsName( + label, + cid, + privateKey, + options = { + enabled: true, + }, + ) { + try { + const importResponse = await this.#names_client.request({ + method: "POST", + data: { + label, + cid, + network_private_key: privateKey, + enabled: options?.enabled !== false, + }, + }); + return importResponse.data; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Updates the specified name with the given CID. + * @param {string} label - The label of the name to update. + * @param {string} cid - The cid to associate with the name. + * @param {nameOptions} options - The options for the set operation. + * + * @returns {Promise} - A Promise that resolves to true if the IPNS name was updated. + * @example + * // Update name with label of `update-name-example` and set the value of the IPNS name. + * await client.updateIpnsName(`update-name-example`, `bafybeidt4nmaci476lyon2mvgfmwyzysdazienhxs2bqnfpdainzjuwjom`); + */ + async updateIpnsName(label, cid, options = {}) { + try { + const updateOptions = { + cid, + }; + if (options?.enabled) { + updateOptions.enabled = Boolean(options.enabled); + } + await this.#names_client.request({ + method: "PUT", + url: `/${label}`, + data: updateOptions, + validateStatus: (status) => { + return status === 200; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + async resolveIpnsName(value) { + try { + const resolvedIpnsName = await this.#fetchIpnsRecord(value); + const buf = Buffer.from(resolvedIpnsName); + const body = new Uint8Array(buf, 0, buf.byteLength); + const ipnsRecord = unmarshalIPNSRecord(body); + return ipnsRecord.value; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Returns a list of IPNS names + * @returns {Promise>} - A promise that resolves to an array of names. + * @example + * // List all IPNS names + * await client.listIpnsNames(); + */ + async listIpnsNames() { + try { + const listResponse = await this.#names_client.request({ + method: "GET", + }); + return listResponse.data; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Deletes an IPNS name with the given label. + * @param {string} label - The label of the IPNS name to delete. + * @returns {Promise} - A promise that resolves to true if the IPNS name was successfully deleted. + * @example + * // List IPNS name with label of `delete-name-example` + * await client.deleteIpnsName(`delete-name-example`); + */ + async deleteIpnsName(label) { + try { + await this.#names_client.request({ + method: "DELETE", + url: `/${label}`, + validateStatus: (status) => { + return status === 204; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + //endregion + + //region Gateway Methods + /** + * @typedef {Object} gateway + * @property {string} name Name for the gateway + * @property {string} domain Custom Domain for the gateway + * @property {boolean} enabled Whether the gateway is enabled or not + * @property {string} private Whether the gateway is scoped to users content + * @property {date} created_at Date the gateway was created + * @property {date} updated_at Date the gateway was last updated + */ + + /** + * @typedef {Object} gatewayOptions + * @property {boolean} [domain] Optional Domain to allow for using a Custom Domain + * @property {string} [enabled] Optional Toggle to use for enabling the gateway + * @property {boolean} [private] Optional Boolean determining if gateway is Public or Private + */ + + /** + * @summary Creates a gateway with the given name and options + * @param {string} name Unique name across entire platform for the gateway. Must be a valid subdomain name. + * @param {gatewayOptions} [options] + * @returns {Promise} - A promise that resolves to the value of a gateway. + * @example + * // Create gateway with name of `create-gateway-example` and a custom domain of `cname.mycustomdomain.com`. + * // The custom domain must already exist and have a CNAME record pointed at `create-gateway-example.myfilebase.com`. + * await client.createGateway(`create-gateway-example`, { + * domain: `cname.mycustomdomain.com` + * }); + */ + async createGateway(name, options = {}) { + try { + let createOptions = { + name, + }; + if (typeof options.domain === "string") { + createOptions.domain = options.domain; + } + if (typeof options.enabled === "boolean") { + createOptions.enabled = options.enabled; + } + if (typeof options.private === "boolean") { + createOptions.private = options.private; + } + const createResponse = await this.#gateways_client.request({ + method: "POST", + data: createOptions, + }); + return createResponse.data; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Returns the value of a gateway + * @param {string} name - Parameter representing the name to get. + * @returns {Promise} - A promise that resolves to the value of a gateway. + * @example + * // Get gateway with name of `gateway-get-example` + * await client.getGateway(`gateway-get-example`); + */ + async getGateway(name) { + try { + const getResponse = await this.#gateways_client.request({ + method: "GET", + url: `/${name}`, + validateStatus: (status) => { + return status === 200 || status === 404; + }, + }); + return getResponse.status === 200 ? getResponse.data : false; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Returns a list of gateways + * @returns {Promise>} - A promise that resolves to an array of gateways. + * @example + * // List all gateways + * await client.listGateways(); + */ + async listGateways() { + try { + const getResponse = await this.#gateways_client.request({ + method: "GET", + }); + return getResponse.data; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Deletes a gateway with the given name. + * @param {string} name - The name of the gateway to delete. + * @returns {Promise} - A promise that resolves to true if the gateway was successfully deleted. + * @example + * // Delete gateway with name of `delete-gateway-example` + * await client.deleteGateway(`delete-name-example`); + */ + async deleteGateway(name) { + try { + await this.#gateways_client.request({ + method: "DELETE", + url: `/${name}`, + validateStatus: (status) => { + return status === 204; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + + /** + * @summary Updates the specified gateway. + * @param {string} name - The name of the gateway to update. + * @param {gatewayOptions} options - The options for the update operation. + * + * @returns {Promise} - A Promise that resolves to true if the gateway was updated. + * @example + * // Update gateway with name of `update-gateway-example` and set the gateway to only serve CIDs pinned by user. + * await client.updateGateway(`update-gateway-example`, { + * private: true + * }); + */ + async updateGateway(name, options) { + try { + const updateOptions = { + name, + }; + if (options?.domain) { + updateOptions.domain = String(options.private); + } + if (options?.enabled) { + updateOptions.enabled = Boolean(options.enabled); + } + if (options?.private) { + updateOptions.private = Boolean(options.private); + } + await this.#gateways_client.request({ + method: "PUT", + url: `/${name}`, + data: updateOptions, + validateStatus: (status) => { + return status === 200; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + //endregion + + //region Content Fetch Methods + async fetchContentByCid(cid, options = {}) { + return this.#fetchContentFromGateway(cid, "ipfs", options); + } + + async fetchContentByIpnsName(cid, options = {}) { + return this.#fetchContentFromGateway(cid, "ipns", options); + } + + async #fetchIpnsRecord(cid) { + return this.#fetchContentFromGateway(cid, "ipns", { + format: "ipns-record", + }); + } + + async #fetchContentFromGateway(cid, resolver, options) { + const selectedEndpoint = options?.endpoint || this.#default_gateway; + if (typeof selectedEndpoint !== "string") { + throw new Error( + "A valid gateway endpoint must be configured or provided.", + ); + } + + const downloadHeaders = {}; + if (options.token) { + downloadHeaders["x-filebase-gateway-token"] = options.token; + } + + if (options.format) { + if (this.#VALID_FORMATS.includes(options.format)) { + downloadHeaders["Accept"] = + `application/vnd.ipfs.${options.format.toLowerCase()}`; + } else { + throw new Error(`Invalid Format [${options.format}]`); + } + } + + const downloadResponse = await axios.request({ + method: "GET", + baseURL: selectedEndpoint, + url: `/${resolver}/${cid}`, + headers: downloadHeaders, + responseType: "arraybuffer", + timeout: options?.timeout || this.#GATEWAY_DEFAULT_TIMEOUT, + }); + return downloadResponse.data; + } + //endregion +} + +export default FilebaseClient; \ No newline at end of file diff --git a/src/nameManager.js b/src/nameManager.js deleted file mode 100644 index 54a02df..0000000 --- a/src/nameManager.js +++ /dev/null @@ -1,251 +0,0 @@ -import axios from "axios"; -import { apiErrorHandler } from "./helpers.js"; - -/** Provides methods for managing names in an REST endpoint. */ -class NameManager { - #DEFAULT_ENDPOINT = "https://api.filebase.io"; - #DEFAULT_TIMEOUT = 60000; - - #client; - - /** - * @summary Creates a new instance of the constructor. - * @param {string} clientKey - The access key ID for authentication. - * @param {string} clientSecret - The secret access key for authentication. - * @tutorial quickstart-name - * @example - * import { NameManager } from "@filebase/sdk"; - * const nameManager = new NameManager("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD"); - */ - constructor(clientKey, clientSecret) { - const clientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_NAME_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT, - encodedToken = Buffer.from(`${clientKey}:${clientSecret}`).toString( - "base64", - ), - baseURL = `${clientEndpoint}/v1/names`; - this.#client = axios.create({ - baseURL: baseURL, - timeout: this.#DEFAULT_TIMEOUT, - headers: { Authorization: `Bearer ${encodedToken}` }, - }); - } - - /** - * @typedef {Object} name - * @property {string} label Descriptive label for the Key - * @property {string} network_key IPNS Key CID - * @property {string} cid Value that name Publishes - * @property {number} sequence Version Number for the name - * @property {boolean} enabled Whether the name is being Published or not - * @property {date} published_at Date the name was last published to the DHT - * @property {date} created_at Date the name was created - * @property {date} updated_at Date the name was last updated - */ - - /** - * @typedef {Object} nameOptions - * @property {boolean} [enabled] Whether the name is enabled or not. - */ - - /** - * @summary Creates a new IPNS name with the given name as the label and CID. - * @param {string} label - The label of the new IPNS name. - * @param {string} cid - The CID of the IPNS name. - * @param {nameOptions} [options] - Additional options for the IPNS name. - * @returns {Promise} - A Promise that resolves with the response JSON. - * @example - * // Create IPNS name with label of `create-name-example` and CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` - * await nameManager.create(`create-name-example`, `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm`); - */ - async create( - label, - cid, - options = { - enabled: true, - }, - ) { - try { - const createResponse = await this.#client.request({ - method: "POST", - data: { - label, - cid, - enabled: options?.enabled !== false, - }, - }); - return createResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Imports a user's IPNS private key. - * @param {string} label - The label for the IPNS name. - * @param {string} cid - The CID (Content Identifier) of the data. - * @param {string} privateKey - The existing private key encoded in Base64. - * @param {nameOptions} [options] - Additional options for the IPNS name. - * @returns {Promise} - A Promise that resolves to the server response. - * @example - * // Import IPNS private key with label of `create-name-example`, CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` - * // and a private key encoded with base64 - * await nameManager.import( - * `create-name-example`, - * `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` - * `BASE64_ENCODED_PRIVATEKEY` - * ); - */ - async import( - label, - cid, - privateKey, - options = { - enabled: true, - }, - ) { - try { - const importResponse = await this.#client.request({ - method: "POST", - data: { - label, - cid, - network_private_key: privateKey, - enabled: options?.enabled !== false, - }, - }); - return importResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Updates the specified name with the given CID. - * @param {string} label - The label of the name to update. - * @param {string} cid - The cid to associate with the name. - * @param {nameOptions} options - The options for the set operation. - * - * @returns {Promise} - A Promise that resolves to true if the IPNS name was updated. - * @example - * // Update name with label of `update-name-example` and set the value of the IPNS name. - * await nameManager.update(`update-name-example`, `bafybeidt4nmaci476lyon2mvgfmwyzysdazienhxs2bqnfpdainzjuwjom`); - */ - async update(label, cid, options = {}) { - try { - const updateOptions = { - cid, - }; - if (options?.enabled) { - updateOptions.enabled = Boolean(options.enabled); - } - await this.#client.request({ - method: "PUT", - url: `/${label}`, - data: updateOptions, - validateStatus: (status) => { - return status === 200; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Returns the value of an IPNS name - * @param {string} label - Parameter representing the label of the name to resolve. - * @returns {Promise} - A promise that resolves to the value of a name. - * @example - * // Get IPNS name with label of `list-name-example` - * await nameManager.get(`list-name-example`); - */ - async get(label) { - try { - const getResponse = await this.#client.request({ - method: "GET", - url: `/${label}`, - validateStatus: (status) => { - return status === 200 || status === 404; - }, - }); - return getResponse.status === 200 ? getResponse.data : false; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Returns a list of IPNS names - * @returns {Promise>} - A promise that resolves to an array of names. - * @example - * // List all IPNS names - * await nameManager.list(); - */ - async list() { - try { - const listResponse = await this.#client.request({ - method: "GET", - }); - return listResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Deletes an IPNS name with the given label. - * @param {string} label - The label of the IPNS name to delete. - * @returns {Promise} - A promise that resolves to true if the IPNS name was successfully deleted. - * @example - * // List IPNS name with label of `delete-name-example` - * await nameManager.delete(`delete-name-example`); - */ - async delete(label) { - try { - await this.#client.request({ - method: "DELETE", - url: `/${label}`, - validateStatus: (status) => { - return status === 204; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Toggles the enabled state of a given IPNS name. - * @param {string} label - The label of the IPNS name to toggle. - * @param {boolean} targetState - The new target state. - * @returns {Promise} A promise that resolves to true if the IPNS name was successfully toggled. - * @example - * // Toggle IPNS name with label of `toggle-name-example` - * await nameManager.toggle(`toggle-name-example`, true); // Enabled - * await nameManager.toggle(`toggle-name-example`, false); // Disabled - */ - async toggle(label, targetState) { - try { - await this.#client.request({ - method: "PUT", - url: `/${label}`, - data: { - enabled: targetState, - }, - validateStatus: (status) => { - return status === 200; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } -} - -export default NameManager; diff --git a/src/objectManager.js b/src/objectManager.js deleted file mode 100644 index b53eea1..0000000 --- a/src/objectManager.js +++ /dev/null @@ -1,603 +0,0 @@ -// Environment Imports -import logger from "./logger.js"; -// S3 Imports -import { - CopyObjectCommand, - DeleteObjectCommand, - GetObjectCommand, - HeadObjectCommand, - ListObjectsV2Command, - S3Client, -} from "@aws-sdk/client-s3"; -import { Upload } from "@aws-sdk/lib-storage"; -// Helia Imports -import { CarWriter } from "@ipld/car"; -import { car } from "@helia/car"; -import { mfs } from "@helia/mfs"; -import { unixfs } from "@helia/unixfs"; -import { MemoryBlockstore } from "blockstore-core"; -import { MemoryDatastore } from "datastore-core"; -// Utility Imports -import { v4 as uuidv4 } from "uuid"; -import { downloadFromGateway } from "./helpers.js"; -import PQueue from "p-queue"; - -/** Interacts with an S3 client to perform various operations on objects in a bucket. */ -class ObjectManager { - #DEFAULT_ENDPOINT = "https://s3.filebase.com"; - #DEFAULT_REGION = "us-east-1"; - #DEFAULT_MAX_CONCURRENT_UPLOADS = 4; - - #client; - #credentials; - #defaultBucket; - #gatewayConfiguration; - #maxConcurrentUploads; - - /** - * @typedef {Object} objectManagerOptions Optional settings for the constructor. - * @property {string} [bucket] Default bucket to use. - * @property {objectDownloadOptions} [gateway] Default gateway to use. - * @property {number} [maxConcurrentUploads] The maximum number of concurrent uploads. - */ - - /** - * @typedef {Object} objectDownloadOptions Optional settings for downloading objects - * @property {string} endpoint Default gateway to use. - * @property {string} [token] Token for the default gateway. - * @property {number} [timeout=60000] Timeout for the default gateway - */ - - /** - * @summary Creates a new instance of the constructor. - * @param {string} clientKey - The access key ID for authentication. - * @param {string} clientSecret - The secret access key for authentication. - * @param {objectManagerOptions} options - Optional settings for the constructor. - * @tutorial quickstart-object - * @example - * import { ObjectManager } from "@filebase/sdk"; - * const objectManager = new ObjectManager("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD", { - * bucket: "my-default-bucket", - * maxConcurrentUploads: 4, - * gateway: { - * endpoint: "https://my-default-gateway.mydomain.com - * token: SUPER_SECRET_GATEWAY_TOKEN - * } - * }); - */ - constructor(clientKey, clientSecret, options) { - const clientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_S3_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT, - clientConfiguration = { - credentials: { - accessKeyId: clientKey, - secretAccessKey: clientSecret, - }, - endpoint: clientEndpoint, - region: this.#DEFAULT_REGION, - forcePathStyle: true, - }; - this.#defaultBucket = options?.bucket; - this.#maxConcurrentUploads = - options?.maxConcurrentUploads || this.#DEFAULT_MAX_CONCURRENT_UPLOADS; - this.#credentials = { - key: clientKey, - secret: clientSecret, - }; - this.#client = new S3Client(clientConfiguration); - - this.#gatewayConfiguration = { - endpoint: options?.gateway?.endpoint, - token: options?.gateway?.token, - timeout: options?.gateway?.timeout, - }; - } - - /** - * @typedef {Object} objectOptions - * @property {string} [bucket] - The bucket to pin the IPFS CID into. - */ - - /** - * @typedef {Object} objectHeadResult - * @property {string} cid The CID of the uploaded object - * @property {function} download Convenience function to download the object via S3 or the selected gateway - * @property {array} [entries] If a directory then returns an array of the containing objects - * @property {string} entries.cid The CID of the uploaded object - * @property {string} entries.path The path of the object - */ - - /** - * If the source parameter is an array of objects, it will pack multiple files into a CAR file for upload. - * The method returns a Promise that resolves to an object containing the CID (Content Identifier) of the uploaded file - * and an optional entries object when uploading a CAR file. - * - * @summary Uploads a file or a CAR file to the specified bucket. - * @param {string} key - The key or path of the file in the bucket. - * @param {Buffer|ReadableStream|Array} source - The content of the object to be uploaded. - * If an array of files is provided, each file should have a 'path' property specifying the path of the file - * and a 'content' property specifying the content of the file. The SDK will then construct a CAR file locally - * and use that as the content of the object to be uploaded. - * @param {Object} [metadata] Optional metadata for pin object - * @param {objectOptions} [options] - The options for uploading the object. - * @returns {Promise} - * @example - * // Upload Object - * await objectManager.upload("my-object", Buffer.from("Hello World!")); - * // Upload Object with Metadata - * await objectManager.upload("my-custom-object", Buffer.from("Hello Big World!"), { - * "application": "my-filebase-app" - * }); - * // Upload Directory - * await objectManager.upload("my-first-directory", [ - * { - * path: "/testObjects/1.txt", // Virtual Path to store contents at within IPFS Folder/Directory - * content: Buffer.from("upload test object", "utf-8"), - * }, - * { - * path: "/testObjects/deep/1.txt", - * content: Buffer.from("upload deep test object", "utf-8"), - * }, - * { - * path: "/topLevel.txt", - * content: Buffer.from("upload top level test object", "utf-8"), - * }, - * ]); - */ - async upload(key, source, metadata, options) { - // Generate Upload UUID - const uploadUUID = uuidv4(); - const uploadLogger = logger.child({ uploadUUID }); - - // Setup Upload Options - const bucket = options?.bucket || this.#defaultBucket, - uploadOptions = { - client: this.#client, - params: { - Bucket: bucket, - Key: key, - Body: source, - Metadata: metadata || {}, - }, - queueSize: this.#maxConcurrentUploads, - partSize: 26843546, //25.6Mb || 250Gb Max File Size - }; - - // Pack Multiple Files into CAR file for upload - let parsedEntries = {}; - if (Array.isArray(source)) { - // Mark Upload as a CAR file import - uploadOptions.params.Metadata = { - ...uploadOptions.params.Metadata, - import: "car", - }; - source.sort((a, b) => { - return countSlashes(b.path) - countSlashes(a.path); - }); - - let temporaryCarFilePath, temporaryBlockstoreDir; - try { - // Setup Blockstore - let temporaryBlockstore = new MemoryBlockstore(), - temporaryDatastore = new MemoryDatastore(); - if (isNode()) { - const { mkdir } = await import("node:fs/promises"); - const { FsBlockstore } = await import("blockstore-fs"); - const os = await import("node:os"); - const path = await import("node:path"); - temporaryBlockstoreDir = path.resolve( - os.tmpdir(), - "filebase-sdk", - "uploads", - uploadUUID, - ); - temporaryCarFilePath = `${temporaryBlockstoreDir}/main.car`; - await mkdir(temporaryBlockstoreDir, { recursive: true }); - temporaryBlockstore = new FsBlockstore(temporaryBlockstoreDir); - } - let createdFiles = new Map(); - const heliaFs = unixfs({ - blockstore: temporaryBlockstore, - }); - uploadLogger.verbose("UNIXFS_ADD", { - count: source.length, - }); - let createFilePromises = []; - const queue = new PQueue({ concurrency: 50 }); - for (let entry of source) { - entry.path = entry.path.startsWith("/") ? entry.path : `/${entry.path}`; - if (entry.content === null) { - continue; - } - const task = (async () => { - await queue.add(async () => { - uploadLogger.silly("SOURCE_IMPORT_STARTED", { - path: entry.path, - size: queue.size, - }); - - if (isNode()) { - const { Readable } = await import("node:stream"); - let createdFile; - if ( - (entry.type === "import" && entry.content !== null) || - entry.content instanceof Readable - ) { - let filehandle; - try { - if (entry.type === "import") { - const { open } = await import("node:fs/promises"); - const path = await import("node:path"); - filehandle = await open(path.resolve(entry.content), "r"); - entry.content = filehandle.createReadStream(); - } - createdFile = await heliaFs.addByteStream(entry.content); - } catch (err) { - if (typeof filehandle !== "undefined") { - await filehandle.close(); - } - throw err; - } - if (typeof filehandle !== "undefined") { - await filehandle.close(); - } - } else if (entry.content !== null) { - createdFile = await heliaFs.addBytes(entry.content); - } else { - return; - } - createdFiles.set(entry.path, createdFile); - uploadLogger.verbose("SOURCE_IMPORT_COMPLETED", { - path: entry.path, - size: queue.size, - }); - } else { - let createdFile; - if (entry.type === "import" && entry.content !== null) { - createdFile = await heliaFs.addByteStream(entry.content); - } else if (entry.content !== null) { - createdFile = await heliaFs.addBytes(entry.content); - } else { - return; - } - createdFiles.set(entry.path, createdFile); - uploadLogger.verbose("SOURCE_IMPORT_COMPLETED", { - path: entry.path, - size: queue.size, - }); - } - }); - })(); - if (queue.size > 150) { - await queue.onSizeLessThan(100); - } - createFilePromises.push(task); - uploadLogger.verbose("SOURCE_IMPORT_QUEUED", { - path: entry.path, - size: queue.size, - }); - } - await Promise.all(createFilePromises); - uploadLogger.verbose("UNIXFS_ADDED", { - count: createdFiles.size, - }); - - const heliaMfs = mfs({ - blockstore: temporaryBlockstore, - datastore: temporaryDatastore, - }); - uploadLogger.verbose("MFS_ADDING", { - count: source.length, - output: temporaryCarFilePath, - }); - for (const entry of source) { - if (entry.content === null) { - uploadLogger.silly("MFS_DIR_CREATING", { - path: entry.path, - }); - await heliaMfs.mkdir(entry.path); - uploadLogger.verbose("MFS_DIR_CREATED", { - path: entry.path, - }); - } else { - const entryFile = createdFiles.get(entry.path); - uploadLogger.silly("MFS_FILE_COPY", { - cid: entryFile, - path: entry.path, - }); - await heliaMfs.cp(entryFile, entry.path, { - force: true, - }); - uploadLogger.verbose("MFS_FILE_COPIED", { - cid: entryFile, - path: entry.path, - }); - } - } - for (const entry of source) { - parsedEntries[entry.path] = await heliaMfs.stat(entry.path); - uploadLogger.silly("MFS_PATH_STAT", parsedEntries[entry.path]); - } - parsedEntries["/"] = await heliaMfs.stat("/"); - const rootEntry = parsedEntries["/"]; - uploadLogger.verbose("MFS_ADDED", { - root: rootEntry, - count: Object.keys(parsedEntries).length, - }); - - // Get carFile stream here - uploadLogger.verbose("CAR_EXPORTING", { - root: rootEntry, - }); - const carExporter = car({ blockstore: temporaryBlockstore }), - { writer, out } = CarWriter.create([rootEntry.cid]); - - if (isNode()) { - const { createReadStream, createWriteStream } = await import( - "node:fs" - ); - const { Readable } = await import("node:stream"); - // Put carFile stream to disk - const output = createWriteStream(temporaryCarFilePath); - Readable.from(out).pipe(output); - await carExporter.export(rootEntry.cid, writer); - uploadLogger.verbose("CAR_EXPORTED", { - root: rootEntry, - }); - - // Set Uploader to Read from carFile on disk - uploadOptions.params.Body = createReadStream(temporaryCarFilePath); - } - - // Upload carFile via S3 - uploadLogger.verbose("CAR_UPLOADING", { - entry: rootEntry, - source: temporaryCarFilePath, - }); - const parallelUploads3 = new Upload(uploadOptions); - parallelUploads3.on("httpUploadProgress", (progress) => { - uploadLogger.debug("CAR_UPLOAD_PROGRESS", progress); - }); - await parallelUploads3.done(); - uploadLogger.verbose("CAR_UPLOADED", { - entry: rootEntry, - source: temporaryCarFilePath, - }); - await temporaryBlockstore.close(); - } catch (err) { - console.error(err.message); - throw err; - } finally { - if (typeof temporaryBlockstoreDir !== "undefined" && isNode()) { - const { rm } = await import("node:fs/promises"); - // Delete Temporary Blockstore - await rm(temporaryBlockstoreDir, { recursive: true, force: true }); - } - } - } else { - // Upload file via S3 - const parallelUploads3 = new Upload(uploadOptions); - await parallelUploads3.done(); - } - - // Get CID from Platform - const command = new HeadObjectCommand({ - Bucket: bucket, - Key: key, - Body: source, - }), - headResult = await this.#client.send(command), - responseCid = headResult.Metadata.cid; - - if (Object.keys(parsedEntries).length === 0) { - return { - cid: responseCid, - download: () => { - return this.#routeDownload(responseCid, key, options); - }, - }; - } - return { - cid: responseCid, - download: () => { - return this.#routeDownload(responseCid, key, options); - }, - entries: parsedEntries, - }; - } - - async #routeDownload(cid, key, options) { - return typeof this.#gatewayConfiguration.endpoint !== "undefined" - ? downloadFromGateway(cid, this.#gatewayConfiguration) - : this.download(key, options); - } - - /** - * @summary Gets an objects info and metadata using the S3 API. - * @param {string} key - The key of the object to be inspected. - * @param {objectOptions} [options] - The options for inspecting the object. - * @returns {Promise} - */ - async get(key, options) { - const bucket = options?.bucket || this.#defaultBucket; - try { - const command = new HeadObjectCommand({ - Bucket: bucket, - Key: key, - }), - response = await this.#client.send(command); - - response.download = () => { - return this.#routeDownload(response.Metadata.cid, key, options); - }; - - return response; - } catch (err) { - if (err.name === "NotFound") { - return false; - } - throw err; - } - } - - /** - * @summary Downloads an object from the specified bucket using the provided key. - * @param {string} key - The key of the object to be downloaded. - * @param {objectOptions} [options] - The options for downloading the object. - * @returns {Promise} - A promise that resolves with the contents of the downloaded object as a Stream. - * @example - * // Download object with name of `download-object-example` - * await objectManager.download(`download-object-example`); - */ - async download(key, options) { - // Download via IPFS Gateway if Setup or S3 by Default - if (typeof this.#gatewayConfiguration.endpoint === "string") { - const objectToFetch = await this.get(key, options); - return objectToFetch.download(); - } else { - const command = new GetObjectCommand({ - Bucket: options?.bucket || this.#defaultBucket, - Key: key, - }), - response = await this.#client.send(command); - - return response.Body; - } - } - - /** - * @typedef {Object} listObjectsResult - * @property {boolean} IsTruncated Indicates if more results exist on the server - * @property {string} NextContinuationToken ContinuationToken used to paginate list requests - * @property {Array} Contents List of Keys stored in the S3 Bucket - * @property {string} Contents.Key Key of the Object - * @property {string} Contents.LastModified Date Last Modified of the Object - * @property {string} Contents.CID CID of the Object - * @property {string} Contents.ETag ETag of the Object - * @property {number} Contents.Size Size in Bytes of the Object - * @property {string} Contents.StorageClass Class of Storage of the Object - * @property {function} Contents.download Convenience function to download the item using the S3 gateway - */ - - /** - * @typedef {Object} listObjectOptions - * @property {string} [Bucket] The name of the bucket. If not provided, the default bucket will be used. - * @property {string} [ContinuationToken=null] Continues listing from this objects name. - * @property {string} [Delimiter=null] Character used to group keys - * @property {number} [MaxKeys=1000] The maximum number of objects to retrieve. Defaults to 1000. - */ - - /** - * Retrieves a list of objects from a specified bucket. - * - * @param {listObjectOptions} options - The options for listing objects. - * @returns {Promise} - A promise that resolves to an array of objects. - * @example - * // List objects in bucket with a limit of 1000 - * await objectManager.list({ - * MaxKeys: 1000 - * }); - */ - async list( - options = { - Bucket: this.#defaultBucket, - ContinuationToken: null, - Delimiter: null, - MaxKeys: 1000, - }, - ) { - if (options?.MaxKeys && options.MaxKeys > 100000) { - throw new Error(`MaxKeys Maximum value is 100000`); - } - const bucket = options?.Bucket || this.#defaultBucket, - limit = options?.MaxKeys || 1000, - commandOptions = { - Bucket: bucket, - MaxKeys: limit, - }, - command = new ListObjectsV2Command({ - ...options, - ...commandOptions, - }); - - const { Contents, IsTruncated, NextContinuationToken } = - await this.#client.send(command); - return { Contents, IsTruncated, NextContinuationToken }; - } - - /** - * @summary Deletes an object from the specified bucket using the provided key. - * @param {string} key - The key of the object to be deleted. - * @param {objectOptions} [options] - The options for deleting the file. - * @returns {Promise} - A Promise that resolves with the result of the delete operation. - * @example - * // Delete object with name of `delete-object-example` - * await objectManager.delete(`delete-object-example`); - */ - async delete(key, options) { - const command = new DeleteObjectCommand({ - Bucket: options?.bucket || this.#defaultBucket, - Key: key, - }); - - await this.#client.send(command); - return true; - } - - /** - * @typedef {Object} copyObjectOptions - * @property {string} [sourceBucket] The source bucket from where the object is to be copied. - * @property {string} [destinationKey] The key of the object in the destination bucket. By default, it is the same as the sourceKey. - */ - - /** - * If the destinationKey is not provided, the object will be copied with the same key as the sourceKey. - * - * @summary Copy the object from sourceKey in the sourceBucket to destinationKey in the destinationBucket. - * @param {string} sourceKey - The key of the object to be copied from the sourceBucket. - * @param {string} destinationBucket - The bucket where the object will be copied to. - * @param {copyObjectOptions} [options] - Additional options for the copy operation. - * - * @returns {Promise} - A Promise that resolves with the result of the copy operation. - * @example - * // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` - * // TIP: Set bucket on constructor, it will be used as the default source for copying objects. - * await objectManager.copy(`copy-object-test`, `copy-object-dest`, { - * sourceBucket: `copy-object-src` - * }); - */ - async copy( - sourceKey, - destinationBucket, - options = { - sourceBucket: this.#defaultBucket, - destinationKey: undefined, - }, - ) { - const copySource = `${ - options?.sourceBucket || this.#defaultBucket - }/${sourceKey}`, - command = new CopyObjectCommand({ - CopySource: copySource, - Bucket: destinationBucket, - Key: options?.destinationKey || sourceKey, - }); - - await this.#client.send(command); - return true; - } -} - -// Function to count slashes in a path -function countSlashes(path) { - return (path.match(/\//g) || []).length; -} - -// Function to check if the code is running in Node.js or the browser -function isNode() { - return typeof process !== "undefined" && process.release.name === "node"; -} - -export default ObjectManager; diff --git a/src/pinManager.js b/src/pinManager.js deleted file mode 100644 index 6255020..0000000 --- a/src/pinManager.js +++ /dev/null @@ -1,298 +0,0 @@ -import axios from "axios"; -import { apiErrorHandler, downloadFromGateway } from "./helpers.js"; - -/** Provides methods for managing pins in an REST endpoint. */ -class PinManager { - #DEFAULT_ENDPOINT = "https://api.filebase.io"; - #DEFAULT_TIMEOUT = 60000; - - #client; - #credentials; - #gatewayConfiguration; - #defaultBucket; - - /** - * @typedef {Object} pinManagerOptions Optional settings for the constructor. - * @property {string} [bucket] Default bucket to use. - * @property {pinDownloadOptions} [gateway] Default gateway to use. - */ - - /** - * @typedef {Object} pinDownloadOptions Optional settings for downloading pins - * @property {string} endpoint Default gateway to use. - * @property {string} [token] Token for the default gateway. - * @property {number} [timeout=60000] Timeout for the default gateway - */ - - /** - * @summary Creates a new instance of the constructor. - * @param {string} clientKey - The access key ID for authentication. - * @param {string} clientSecret - The secret access key for authentication. - * @param {pinManagerOptions} [options] - Optional settings for the constructor. - * @tutorial quickstart-pin - * @example - * import { PinManager } from "@filebase/sdk"; - * const pinManager = new PinManager("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD", { - * bucket: "my-default-bucket", - * gateway: { - * endpoint: "https://my-default-gateway.mydomain.com - * token: SUPER_SECRET_GATEWAY_TOKEN - * } - * }); - */ - constructor(clientKey, clientSecret, options) { - this.#defaultBucket = options?.bucket; - const PSAClientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_NAME_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT, - baseURL = `${PSAClientEndpoint}/v1/ipfs/pins`; - this.#credentials = { - key: clientKey, - secret: clientSecret, - }; - this.#client = axios.create({ - baseURL: baseURL, - timeout: this.#DEFAULT_TIMEOUT, - }); - - this.#gatewayConfiguration = { - endpoint: options?.gateway?.endpoint, - token: options?.gateway?.token, - timeout: options?.gateway?.timeout || this.#DEFAULT_TIMEOUT, - }; - } - - /** - * @typedef {Object} pinStatus - * @property {string} requestid Globally unique identifier of the pin request; can be used to check the status of ongoing pinning, or pin removal - * @property {string} status Status a pin object can have at a pinning service. ("queued","pinning","pinned","failed") - * @property {string} created Immutable timestamp indicating when a pin request entered a pinning service; can be used for filtering results and pagination - * @property {Object} pin Pin object - * @property {string} pin.cid Content Identifier (CID) pinned recursively - * @property {string} pin.name Name for pinned data; can be used for lookups later - * @property {Array} pin.origins Optional list of multiaddrs known to provide the data - * @property {Object} pin.meta Optional metadata for pin object - * @property {Array} delegates List of multiaddrs designated by pinning service that will receive the pin data - * @property {object} [info] Optional info for PinStatus response - * @property {function} download Convenience function to download pin - */ - - /** - * @typedef {Object} pinOptions - * @property {string} [bucket] - The bucket to pin the IPFS CID into. - */ - - /** - * @typedef {Object} listPinOptions - * @property {Array} [cid] Return pin objects responsible for pinning the specified CID(s); be aware that using longer hash functions introduces further constraints on the number of CIDs that will fit under the limit of 2000 characters per URL in browser contexts - * @property {string} [name] Return pin objects with specified name (by default a case-sensitive, exact match) - * @property {string} [match] Customize the text matching strategy applied when the name filter is present; exact (the default) is a case-sensitive exact match, partial matches anywhere in the name, iexact and ipartial are case-insensitive versions of the exact and partial strategies - * @property {Array} [status] Return pin objects for pins with the specified status (when missing, service defaults to pinned only) - * @property {string} [before] Return results created (queued) before provided timestamp - * @property {string} [after] Return results created (queued) after provided timestamp - * @property {number} [limit] Max records to return - * @property {Object} [meta] Return pin objects that match specified metadata keys passed as a string representation of a JSON object; when implementing a client library, make sure the parameter is URL-encoded to ensure safe transport - */ - - /** - * @typedef {Object} listPinResults - * @property {number} count Total number of pin objects that exist for passed query filters - * @property {Array} Array of PinStatus results - */ - - /** - * @summary List the pins in a given bucket - * @param {listPinOptions} [listOptions] - * @param {pinOptions} [options] - * @returns {Promise} - * @example - * // List pins in bucket with a limit of 1000 - * await pinManager.list({ - * limit: 1000 - * }); - */ - async list(listOptions, options) { - try { - const encodedToken = this.#getEncodedToken(options?.bucket), - getResponse = await this.#client.request({ - method: "GET", - params: listOptions, - headers: { Authorization: `Bearer ${encodedToken}` }, - }); - for (let pinStatus of getResponse.data.results) { - pinStatus.download = () => { - return this.download(pinStatus.pin.cid); - }; - } - return getResponse.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Create a pin in the selected bucket - * @param {string} key Key or path of the file in the bucket - * @param {string} cid Content Identifier (CID) to be pinned recursively - * @param {Object} [metadata] Optional metadata for pin object - * @param {pinOptions} [options] Options for pinning the object - * @returns {Promise} - * @example - * // Create Pin with Metadata - * await pinManager.create("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF", { - * "application": "my-custom-app-on-filebase" - * }); - */ - async create(key, cid, metadata, options) { - try { - const encodedToken = this.#getEncodedToken(options?.bucket), - pinStatus = await this.#client.request({ - method: "POST", - data: { - cid, - name: key, - meta: metadata, - }, - headers: { Authorization: `Bearer ${encodedToken}` }, - }); - pinStatus.data.download = () => { - return this.download(pinStatus.data.pin.cid); - }; - return pinStatus.data; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @typedef {Object} replacePinOptions - * @augments pinOptions - * @property {Object} [metadata] Optional metadata to set on pin during replacement - * @property {string} [name] Optional name for pin to set during replacement - */ - - /** - * @summary Replace a pinned object in the selected bucket - * @param {string} requestid Unique ID for the pinned object - * @param {string} cid Content Identifier (CID) to be pinned recursively - * @param {replacePinOptions} [options] Options for pinning the object - * @returns {Promise} - * @example - * // Replace Pin with Metadata - * await pinManager.create("qr4231213", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF", { - * "revision": Date.now() - * } - */ - async replace(requestid, cid, options) { - try { - let replaceData = { - cid, - meta: options?.metadata || {}, - }; - if (options?.name) { - replaceData.name = options.name; - } - - const encodedToken = this.#getEncodedToken(options?.bucket), - pinStatusResult = await this.#client.request({ - method: "POST", - url: `/${requestid}`, - data: replaceData, - validateStatus: (status) => { - return status === 200; - }, - headers: { Authorization: `Bearer ${encodedToken}` }, - }); - const pinStatus = pinStatusResult.data; - pinStatus.download = () => { - return this.download(pinStatus.pin.cid); - }; - return pinStatus; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Download a pin from the selected IPFS gateway - * @param {string} cid - * @param {pinDownloadOptions} [options] - * @returns {Promise} - * @example - * // Download Pin by CID - * await pinManager.download("QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF"); - */ - async download(cid, options) { - const downloadOptions = Object.assign(this.#gatewayConfiguration, options); - return downloadFromGateway(cid, downloadOptions); - } - - /** - * @summary Get details about a pinned object - * @param {string} requestid Globally unique identifier of the pin request - * @param {pinOptions} [options] Options for getting the pin - * @returns {Promise} - * @example - * // Get Pin Info by RequestId - * await pinManager.get("qr4231214"); - */ - async get(requestid, options) { - try { - const encodedToken = this.#getEncodedToken(options?.bucket), - getResponseResult = await this.#client.request({ - method: "GET", - url: `/${requestid}`, - headers: { Authorization: `Bearer ${encodedToken}` }, - validateStatus: (status) => { - return status === 200 || status === 404; - }, - }); - if (getResponseResult.status === 404) { - return false; - } - const pinStatus = getResponseResult.data; - pinStatus.download = () => { - return this.download(pinStatus.pin.cid); - }; - return pinStatus; - } catch (err) { - apiErrorHandler(err); - } - } - - /** - * @summary Delete a pinned object from the selected bucket - * @param requestid Globally unique identifier of the pin request - * @param {pinOptions} [options] Options for deleting the pin - * @returns {Promise} - * @example - * // Delete Pin by RequestId - * await pinManager.delete("qr4231213"); - */ - async delete(requestid, options) { - try { - const encodedToken = this.#getEncodedToken(options?.bucket); - await this.#client.request({ - method: "DELETE", - url: `/${requestid}`, - headers: { Authorization: `Bearer ${encodedToken}` }, - validateStatus: (status) => { - return status === 202; - }, - }); - return true; - } catch (err) { - apiErrorHandler(err); - } - } - - #getEncodedToken(bucket) { - bucket = bucket || this.#defaultBucket; - return Buffer.from( - `${this.#credentials.key}:${this.#credentials.secret}:${bucket}`, - ).toString("base64"); - } -} - -export default PinManager; diff --git a/test/bucketManager.spec.cjs b/test/bucketManager.spec.cjs deleted file mode 100644 index 8d97455..0000000 --- a/test/bucketManager.spec.cjs +++ /dev/null @@ -1,147 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const { BucketManager } = require("../dist/index.js"); - -const TEST_PREFIX = Date.now(); - -test("create bucket", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - try { - // List buckets - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - // Assert new bucket exists - assert.equal(createdBucket.Name, bucketNameToCreate); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - } -}); - -test("generate bucket cid", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; - await bucketManager.create(bucketNameToGenerate); - - try { - // Generate bucket CID - const generatedCid = await bucketManager.generateCid(bucketNameToGenerate); - - // Assert new bucket exists - assert.equal(generatedCid, "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354"); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToGenerate); - } -}); - -test("list buckets", async () => { - const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, - bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ), - initialBucketsList = await bucketManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await bucketManager.create(`${testBucketName}-${i}`); - } - const bucketsList = await bucketManager.list(); - for (let i = 0; i < countToCreate; i++) { - await bucketManager.delete(`${testBucketName}-${i}`); - } - assert.strictEqual( - bucketsList.length, - initialBucketsList.length + countToCreate, - ); -}); - -test("delete bucket", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `delete-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - if (typeof createdBucket === "undefined") { - throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); - } - - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - - // List buckets and assert new bucket does not exist - const updatedBuckets = await bucketManager.list(), - deletedBucket = updatedBuckets.find((updatedBucket) => { - return updatedBucket.Name === bucketNameToCreate; - }); - assert.equal(typeof deletedBucket, "undefined"); -}); - -test("set bucket privacy to public", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `toggle-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-toggle-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - try { - // List buckets - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - // Check Privacy - const initialPrivacy = await bucketManager.getPrivacy(bucketNameToCreate); - if (initialPrivacy === false) { - throw new Error(`Unexpected Privacy State on Bucket`); - } - - // Toggle Privacy - await bucketManager.setPrivacy(bucketNameToCreate, false); - - // Check Privacy - const updatedPrivacy = await bucketManager.getPrivacy(bucketNameToCreate); - if (updatedPrivacy === true) { - throw new Error(`Unexpected Privacy State on Bucket`); - } - - // Assert new bucket exists - assert.equal(createdBucket.Name, bucketNameToCreate); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - } -}); diff --git a/test/bucketManager.spec.mjs b/test/bucketManager.spec.mjs deleted file mode 100644 index 5ed3f83..0000000 --- a/test/bucketManager.spec.mjs +++ /dev/null @@ -1,147 +0,0 @@ -import test from "node:test"; -import assert from "node:assert/strict"; -import { BucketManager } from "../src/index.js"; - -const TEST_PREFIX = Date.now(); - -test("create bucket", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - try { - // List buckets - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - // Assert new bucket exists - assert.equal(createdBucket.Name, bucketNameToCreate); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - } -}); - -test("generate bucket cid", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; - await bucketManager.create(bucketNameToGenerate); - - try { - // Generate bucket CID - const generatedCid = await bucketManager.generateCid(bucketNameToGenerate); - - // Assert new bucket exists - assert.equal(generatedCid, "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354"); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToGenerate); - } -}); - -test("list buckets", async () => { - const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, - bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ), - initialBucketsList = await bucketManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await bucketManager.create(`${testBucketName}-${i}`); - } - const bucketsList = await bucketManager.list(); - for (let i = 0; i < countToCreate; i++) { - await bucketManager.delete(`${testBucketName}-${i}`); - } - assert.strictEqual( - bucketsList.length, - initialBucketsList.length + countToCreate, - ); -}); - -test("delete bucket", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `delete-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - if (typeof createdBucket === "undefined") { - throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); - } - - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - - // List buckets and assert new bucket does not exist - const updatedBuckets = await bucketManager.list(), - deletedBucket = updatedBuckets.find((updatedBucket) => { - return updatedBucket.Name === bucketNameToCreate; - }); - assert.equal(typeof deletedBucket, "undefined"); -}); - -test("set bucket privacy to public", async () => { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `toggle-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-toggle-bucket-test-pass`; - await bucketManager.create(bucketNameToCreate); - - try { - // List buckets - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - // Check Privacy - const initialPrivacy = await bucketManager.getPrivacy(bucketNameToCreate); - if (initialPrivacy === false) { - throw new Error(`Unexpected Privacy State on Bucket`); - } - - // Toggle Privacy - await bucketManager.setPrivacy(bucketNameToCreate, false); - - // Check Privacy - const updatedPrivacy = await bucketManager.getPrivacy(bucketNameToCreate); - if (updatedPrivacy === true) { - throw new Error(`Unexpected Privacy State on Bucket`); - } - - // Assert new bucket exists - assert.equal(createdBucket.Name, bucketNameToCreate); - } finally { - // Delete new bucket - await bucketManager.delete(bucketNameToCreate); - } -}); diff --git a/test/gatewayManager.spec.cjs b/test/gatewayManager.spec.cjs deleted file mode 100644 index 98237e3..0000000 --- a/test/gatewayManager.spec.cjs +++ /dev/null @@ -1,125 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const { GatewayManager } = require("../dist/index.js"); - -const TEST_PREFIX = Date.now(); - -test("delete gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName); - await gatewayManager.delete(testGatewayName); - const deletedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(deletedName, false); -}); -test("create gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName); - await gatewayManager.delete(testGatewayName); - assert.strictEqual(createdName.name, testGatewayName); -}); - -test("update gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName); - try { - const updatedName = await gatewayManager.update(createdName.name, { - private: true, - enabled: false, - }); - assert.strictEqual(updatedName, true); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("get gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName, {}); - try { - const testName = await gatewayManager.get(createdName.name); - assert.strictEqual(testName.name, testGatewayName); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("list gateways", async () => { - const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - initialGatewaysList = await gatewayManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await gatewayManager.create(`${testGatewayName}-${i}`); - } - const gatewaysList = await gatewayManager.list(); - for (let i = 0; i < countToCreate; i++) { - await gatewayManager.delete(`${testGatewayName}-${i}`); - } - assert.strictEqual( - gatewaysList.length, - initialGatewaysList.length + countToCreate, - ); -}); - -test("toggle gateway off", async () => { - const testGatewayName = `${TEST_PREFIX}-toggle-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName); - try { - const resolvedName = await gatewayManager.get(testGatewayName); - if (resolvedName?.enabled === false) { - throw new Error(`Incorrect State on Resolved Name`); - } - await gatewayManager.toggle(testGatewayName, false); - const updatedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(updatedName.name, testGatewayName); - assert.strictEqual(updatedName.enabled, false); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("toggle gateway on", async () => { - const testGatewayName = `${TEST_PREFIX}-toggle-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName, { - enabled: false, - }); - try { - const resolvedName = await gatewayManager.get(testGatewayName); - if (resolvedName?.enabled === true) { - throw new Error(`Incorrect State on Resolved Name`); - } - await gatewayManager.toggle(testGatewayName, true); - const updatedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(updatedName.name, testGatewayName); - assert.strictEqual(updatedName.enabled, true); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); diff --git a/test/gatewayManager.spec.mjs b/test/gatewayManager.spec.mjs deleted file mode 100644 index 364bb9c..0000000 --- a/test/gatewayManager.spec.mjs +++ /dev/null @@ -1,125 +0,0 @@ -import { test } from "node:test"; -import assert from "node:assert/strict"; -import { GatewayManager } from "../src/index.js"; - -const TEST_PREFIX = Date.now(); - -test("delete gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName); - await gatewayManager.delete(testGatewayName); - const deletedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(deletedName, false); -}); -test("create gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName); - await gatewayManager.delete(testGatewayName); - assert.strictEqual(createdName.name, testGatewayName); -}); - -test("update gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName); - try { - const updatedName = await gatewayManager.update(createdName.name, { - private: true, - enabled: false, - }); - assert.strictEqual(updatedName, true); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("get gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await gatewayManager.create(testGatewayName, {}); - try { - const testName = await gatewayManager.get(createdName.name); - assert.strictEqual(testName.name, testGatewayName); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("list gateways", async () => { - const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - initialGatewaysList = await gatewayManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await gatewayManager.create(`${testGatewayName}-${i}`); - } - const gatewaysList = await gatewayManager.list(); - for (let i = 0; i < countToCreate; i++) { - await gatewayManager.delete(`${testGatewayName}-${i}`); - } - assert.strictEqual( - gatewaysList.length, - initialGatewaysList.length + countToCreate, - ); -}); - -test("toggle gateway off", async () => { - const testGatewayName = `${TEST_PREFIX}-toggle-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName); - try { - const resolvedName = await gatewayManager.get(testGatewayName); - if (resolvedName?.enabled === false) { - throw new Error(`Incorrect State on Resolved Name`); - } - await gatewayManager.toggle(testGatewayName, false); - const updatedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(updatedName.name, testGatewayName); - assert.strictEqual(updatedName.enabled, false); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); - -test("toggle gateway on", async () => { - const testGatewayName = `${TEST_PREFIX}-toggle-gateway-test-pass`, - gatewayManager = new GatewayManager( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await gatewayManager.create(testGatewayName, { - enabled: false, - }); - try { - const resolvedName = await gatewayManager.get(testGatewayName); - if (resolvedName?.enabled === true) { - throw new Error(`Incorrect State on Resolved Name`); - } - await gatewayManager.toggle(testGatewayName, true); - const updatedName = await gatewayManager.get(testGatewayName); - assert.strictEqual(updatedName.name, testGatewayName); - assert.strictEqual(updatedName.enabled, true); - } finally { - await gatewayManager.delete(testGatewayName); - } -}); diff --git a/test/index.spec.cjs b/test/index.spec.cjs new file mode 100644 index 0000000..d557eba --- /dev/null +++ b/test/index.spec.cjs @@ -0,0 +1,809 @@ +const test = require("node:test"); +const assert = require("node:assert/strict"); +const path = require("node:path"); +const { writeFile } = require("node:fs/promises"); +const { v4: uuidv4 } = require("uuid"); +const os = require("node:os"); +const FilebaseClient = require("../dist/index.js"); + +// Application Constants +const TEST_PREFIX = Date.now(); + +//region Bucket Tests +test("create bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + try { + // List buckets + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + // Assert new bucket exists + assert.equal(createdBucket.Name, bucketNameToCreate); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + } +}); + +test("get bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGet); + + try { + // Generate bucket CID + await filebaseClient.generateBucketCid(bucketNameToGet); + + // Get bucket information + const bucketCid = await filebaseClient.getBucketCid(bucketNameToGet); + + // Assert new bucket exists + assert.equal( + bucketCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGet); + } +}); + +test("generate bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGenerate); + + try { + // Generate bucket CID + const generatedCid = + await filebaseClient.generateBucketCid(bucketNameToGenerate); + + // Assert new bucket exists + assert.equal( + generatedCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGenerate); + } +}); + +test("list buckets", async () => { + const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ), + initialBucketsList = await filebaseClient.listBuckets(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createBucket(`${testBucketName}-${i}`); + } + const bucketsList = await filebaseClient.listBuckets(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteBucket(`${testBucketName}-${i}`); + } + assert.strictEqual( + bucketsList.length, + initialBucketsList.length + countToCreate, + ); +}); + +test("delete bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `delete-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + if (typeof createdBucket === "undefined") { + throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); + } + + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + + // List buckets and assert new bucket does not exist + const updatedBuckets = await filebaseClient.listBuckets(), + deletedBucket = updatedBuckets.find((updatedBucket) => { + return updatedBucket.Name === bucketNameToCreate; + }); + assert.equal(typeof deletedBucket, "undefined"); +}); +//endregion + +//region File Tests +async function createBucket(name) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket with name + const bucketNameToCreate = name; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + return typeof createdBucket !== "undefined"; +} + +async function uploadObject(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Upload Object + await filebaseClient.uploadFile(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false + ? uploadedObject + : false; +} + +async function uploadObjects(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Upload Object + await filebaseClient.uploadFiles(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false; +} + +async function deleteObject(bucket, key) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Delete Object + await filebaseClient.deleteFile(key); + return true; +} + +async function deleteBucket(bucket) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Delete Bucket + await filebaseClient.deleteFile(bucket); + return true; +} + +test("delete object", async () => { + // Create bucket `delete-object-test-pass` + const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; + await createBucket(deleteTestBucket); + + try { + // Upload object `delete-object-test` + const objectNameToCreate = `delete-object-test`; + const uploaded = await uploadObject( + deleteTestBucket, + objectNameToCreate, + Buffer.from("delete object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [delete-object-test]`); + } + + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: deleteTestBucket }, + ); + + // Delete object `delete-object-test` + await filebaseClient.deleteFile(objectNameToCreate); + + // List bucket and assert new object doesn't exist + const uploadedObject = + await filebaseClient.getFileMetadata(objectNameToCreate); + assert.equal(uploadedObject, false); + } finally { + await deleteBucket(deleteTestBucket); + } +}); + +test("upload object", async () => { + // Create Bucket `create-object-test-pass + const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; + await createBucket(uploadTestBucket); + + try { + // Upload object `create-object-test` + const uploaded = await uploadObject( + uploadTestBucket, + `create-object-test`, + Buffer.from("upload object", "utf-8"), + ); + + assert.strictEqual(uploaded, true); + await deleteObject(uploadTestBucket, `create-object-test`); + } finally { + await deleteBucket(uploadTestBucket); + } +}); + +test("upload directory", async () => { + // Create Bucket `create-object-test-pass + const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; + await createBucket(uploadDirectoryTestBucket); + + try { + // Upload object `create-object-test` + const uploaded = await uploadObjects( + uploadDirectoryTestBucket, + `create-directory-test`, + [ + { + path: "/testObjects/1.txt", + content: Buffer.from("upload test object", "utf-8"), + }, + { + path: "/testObjects/deep/1.txt", + content: Buffer.from("upload deep test object", "utf-8"), + }, + { + path: "/topLevel.txt", + content: Buffer.from("upload top level test object", "utf-8"), + }, + ], + ); + assert.strictEqual(uploaded, true); + await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); + } finally { + await deleteBucket(uploadDirectoryTestBucket); + } +}); + +test("generate presigned url for object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-presigned-url-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `presigned-url-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [${objectNameToCreate}]`); + } + + try { + // Generate presigned URL for objects + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: downloadTestBucket }, + ); + const presignedUrl = + await filebaseClient.generatePresignedUrl(objectNameToCreate); + assert.strictEqual(typeof presignedUrl, "string"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: downloadTestBucket }, + ); + const downloadStream = + await filebaseClient.downloadFile(objectNameToCreate), + downloadFilename = uuidv4(), + downloadPath = path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object using gateway (ipfs)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }, + ); + const downloadStream = await filebaseClient.fetchContentByCid( + uploaded["cid"], + ), + downloadFilename = uuidv4(), + downloadPath = path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("list objects", async () => { + // Create bucket `list-objects-test-pass` + const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; + await createBucket(listTestBucket); + + try { + let createdObjectCount = 0; + while (createdObjectCount < 26) { + // Upload objects `list-object-test-[x]` + const objectNameToCreate = `list-object-test-${createdObjectCount}`; + await uploadObject( + listTestBucket, + objectNameToCreate, + Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), + ); + createdObjectCount++; + } + + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: listTestBucket }, + ); + + const objectList = await filebaseClient.listFiles(`list-object-test-`, { + MaxKeys: 50, + }); + assert.equal(objectList.Contents.length, 26); + + let deletedObjectCount = 0; + while (deletedObjectCount < 26) { + // Delete objects `list-object-test-[x]` + const objectNameToDelete = `list-object-test-${deletedObjectCount}`; + await deleteObject(listTestBucket, objectNameToDelete); + deletedObjectCount++; + } + } finally { + await deleteBucket(listTestBucket); + } +}); + +test("copy object", async () => { + // Create bucket `copy-object-test-pass-src` + const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; + await createBucket(bucketSrc); + + try { + // Upload object `copy-object-test` + const objectNameToCreateSrc = `copy-object-test`; + const uploaded = await uploadObject( + bucketSrc, + objectNameToCreateSrc, + Buffer.from("copy object", "utf-8"), + ); + try { + assert.equal(uploaded, true); + + // Create bucket `copy-object-test-pass-dest` + const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; + await createBucket(bucketDest); + + try { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: bucketSrc }, + ); + + // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` + await filebaseClient.copyFile(objectNameToCreateSrc, bucketDest); + try { + // List bucket and assert new object exists + const copiedObject = await filebaseClient.getFileMetadata( + objectNameToCreateSrc, + ); + assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); + } finally { + await deleteObject(bucketDest, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketDest); + } + } finally { + await deleteObject(bucketSrc, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketSrc); + } +}); +//endregion + +//region Gateway Tests +test("delete gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ); + await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + const deletedName = await filebaseClient.getGateway(testGatewayName); + assert.strictEqual(deletedName, false); +}); + +test("create gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + assert.strictEqual(createdName.name, testGatewayName); +}); + +test("update gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName); + try { + const updatedName = await filebaseClient.updateGateway(createdName.name, { + private: true, + enabled: false, + }); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("get gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName, {}); + try { + const testName = await filebaseClient.getGateway(createdName.name); + assert.strictEqual(testName.name, testGatewayName); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("list gateways", async () => { + const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + initialGatewaysList = await filebaseClient.listGateways(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createGateway(`${testGatewayName}-${i}`); + } + const gatewaysList = await filebaseClient.listGateways(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteGateway(`${testGatewayName}-${i}`); + } + assert.strictEqual( + gatewaysList.length, + initialGatewaysList.length + countToCreate, + ); +}); +//endregion + +//region Names Tests +const TEST_CID = process.env.TEST_NAME_CID, + TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY; + +test("delete name", async () => { + const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ); + await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + const deletedName = await filebaseClient.getIpnsName(testNameLabel); + assert.strictEqual(deletedName, false); +}); + +test("create name", async () => { + const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(createdName.label, testNameLabel); + assert.strictEqual(createdName.cid, TEST_CID); +}); + +test("import name", async () => { + const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + importedName = await filebaseClient.importIpnsName( + testNameLabel, + TEST_CID, + TEST_PRIVATE_KEY, + ); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(importedName.label, testNameLabel); + assert.strictEqual(importedName.cid, TEST_CID); +}); + +test("update name", async () => { + const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const updatedName = await filebaseClient.updateIpnsName( + createdName.label, + TEST_CID, + ); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("get name", async () => { + const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testName = await filebaseClient.getIpnsName(createdName.label); + assert.strictEqual(testName.label, testNameLabel); + assert.strictEqual(testName.cid, TEST_CID); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("resolve name", async () => { + const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testNameValue = await filebaseClient.resolveIpnsName( + createdName.network_key, + ); + assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("list names", async () => { + const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + initialNamesList = await filebaseClient.listIpnsNames(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createIpnsName(`${testNameLabel}-${i}`, TEST_CID); + } + const namesList = await filebaseClient.listIpnsNames(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteIpnsName(`${testNameLabel}-${i}`); + } + assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); +}); + +test("download object using gateway (ipns)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-ipns-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }, + ); + + // Create IPNS Name + const createdName = await filebaseClient.createIpnsName( + `${objectNameToCreate}-ipns`, + uploaded.cid, + ); + + const downloadStream = await filebaseClient.fetchContentByIpnsName( + createdName["network_key"], + ), + downloadFilename = uuidv4(), + downloadPath = path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); +//endregion + +//region Pinning API Tests +const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT"; + +test("create pin", async () => { + const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, + testPinName = `${TEST_PREFIX}-create-pin-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + { + bucket: testBucketName, + }, + ); + await createBucket(testBucketName); + try { + const createdPin = await filebaseClient.pinFile(testPinName, TEST_CID_1); + assert.strictEqual(createdPin.pin.cid, TEST_CID_1); + await filebaseClient.deleteFile(createdPin.name); + } finally { + await deleteBucket(testBucketName); + } +}); + +test("create pins", async () => { + const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, + testPinName = `${TEST_PREFIX}-create-pin-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + { + bucket: testBucketName, + }, + ); + await createBucket(testBucketName); + try { + const createdPin = await filebaseClient.pinFiles(testPinName, TEST_CID_1); + assert.strictEqual(createdPin.pin.cid, TEST_CID_1); + await filebaseClient.deleteFile(createdPin.name); + } finally { + await deleteBucket(testBucketName); + } +}); +//endregion diff --git a/test/index.spec.mjs b/test/index.spec.mjs new file mode 100644 index 0000000..10eeecf --- /dev/null +++ b/test/index.spec.mjs @@ -0,0 +1,809 @@ +import { test } from "node:test"; +import assert from "node:assert/strict"; +import * as Path from "node:path"; +import { writeFile } from "node:fs/promises"; +import { v4 as uuidv4 } from "uuid"; +import os from "node:os"; +import FilebaseClient from "../src/index.js"; + +// Application Constants +const TEST_PREFIX = Date.now(); + +//region Bucket Tests +test("create bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + try { + // List buckets + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + // Assert new bucket exists + assert.equal(createdBucket.Name, bucketNameToCreate); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + } +}); + +test("get bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGet); + + try { + // Generate bucket CID + await filebaseClient.generateBucketCid(bucketNameToGet); + + // Get bucket information + const bucketCid = await filebaseClient.getBucketCid(bucketNameToGet); + + // Assert new bucket exists + assert.equal( + bucketCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGet); + } +}); + +test("generate bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGenerate); + + try { + // Generate bucket CID + const generatedCid = + await filebaseClient.generateBucketCid(bucketNameToGenerate); + + // Assert new bucket exists + assert.equal( + generatedCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGenerate); + } +}); + +test("list buckets", async () => { + const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ), + initialBucketsList = await filebaseClient.listBuckets(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createBucket(`${testBucketName}-${i}`); + } + const bucketsList = await filebaseClient.listBuckets(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteBucket(`${testBucketName}-${i}`); + } + assert.strictEqual( + bucketsList.length, + initialBucketsList.length + countToCreate, + ); +}); + +test("delete bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket `delete-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + if (typeof createdBucket === "undefined") { + throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); + } + + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + + // List buckets and assert new bucket does not exist + const updatedBuckets = await filebaseClient.listBuckets(), + deletedBucket = updatedBuckets.find((updatedBucket) => { + return updatedBucket.Name === bucketNameToCreate; + }); + assert.equal(typeof deletedBucket, "undefined"); +}); +//endregion + +//region File Tests +async function createBucket(name) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Create bucket with name + const bucketNameToCreate = name; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + return typeof createdBucket !== "undefined"; +} + +async function uploadObject(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Upload Object + await filebaseClient.uploadFile(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false + ? uploadedObject + : false; +} + +async function uploadObjects(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Upload Object + await filebaseClient.uploadFiles(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false; +} + +async function deleteObject(bucket, key) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket }, + ); + + // Delete Object + await filebaseClient.deleteFile(key); + return true; +} + +async function deleteBucket(bucket) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + ); + + // Delete Bucket + await filebaseClient.deleteFile(bucket); + return true; +} + +test("delete object", async () => { + // Create bucket `delete-object-test-pass` + const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; + await createBucket(deleteTestBucket); + + try { + // Upload object `delete-object-test` + const objectNameToCreate = `delete-object-test`; + const uploaded = await uploadObject( + deleteTestBucket, + objectNameToCreate, + Buffer.from("delete object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [delete-object-test]`); + } + + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: deleteTestBucket }, + ); + + // Delete object `delete-object-test` + await filebaseClient.deleteFile(objectNameToCreate); + + // List bucket and assert new object doesn't exist + const uploadedObject = + await filebaseClient.getFileMetadata(objectNameToCreate); + assert.equal(uploadedObject, false); + } finally { + await deleteBucket(deleteTestBucket); + } +}); + +test("upload object", async () => { + // Create Bucket `create-object-test-pass + const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; + await createBucket(uploadTestBucket); + + try { + // Upload object `create-object-test` + const uploaded = await uploadObject( + uploadTestBucket, + `create-object-test`, + Buffer.from("upload object", "utf-8"), + ); + + assert.strictEqual(uploaded, true); + await deleteObject(uploadTestBucket, `create-object-test`); + } finally { + await deleteBucket(uploadTestBucket); + } +}); + +test("upload directory", async () => { + // Create Bucket `create-object-test-pass + const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; + await createBucket(uploadDirectoryTestBucket); + + try { + // Upload object `create-object-test` + const uploaded = await uploadObjects( + uploadDirectoryTestBucket, + `create-directory-test`, + [ + { + path: "/testObjects/1.txt", + content: Buffer.from("upload test object", "utf-8"), + }, + { + path: "/testObjects/deep/1.txt", + content: Buffer.from("upload deep test object", "utf-8"), + }, + { + path: "/topLevel.txt", + content: Buffer.from("upload top level test object", "utf-8"), + }, + ], + ); + assert.strictEqual(uploaded, true); + await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); + } finally { + await deleteBucket(uploadDirectoryTestBucket); + } +}); + +test("generate presigned url for object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-presigned-url-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `presigned-url-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [${objectNameToCreate}]`); + } + + try { + // Generate presigned URL for objects + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: downloadTestBucket }, + ); + const presignedUrl = + await filebaseClient.generatePresignedUrl(objectNameToCreate); + assert.strictEqual(typeof presignedUrl, "string"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: downloadTestBucket }, + ); + const downloadStream = + await filebaseClient.downloadFile(objectNameToCreate), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object using gateway (ipfs)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }, + ); + const downloadStream = await filebaseClient.fetchContentByCid( + uploaded["cid"], + ), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("list objects", async () => { + // Create bucket `list-objects-test-pass` + const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; + await createBucket(listTestBucket); + + try { + let createdObjectCount = 0; + while (createdObjectCount < 26) { + // Upload objects `list-object-test-[x]` + const objectNameToCreate = `list-object-test-${createdObjectCount}`; + await uploadObject( + listTestBucket, + objectNameToCreate, + Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), + ); + createdObjectCount++; + } + + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: listTestBucket }, + ); + + const objectList = await filebaseClient.listFiles(`list-object-test-`, { + MaxKeys: 50, + }); + assert.equal(objectList.Contents.length, 26); + + let deletedObjectCount = 0; + while (deletedObjectCount < 26) { + // Delete objects `list-object-test-[x]` + const objectNameToDelete = `list-object-test-${deletedObjectCount}`; + await deleteObject(listTestBucket, objectNameToDelete); + deletedObjectCount++; + } + } finally { + await deleteBucket(listTestBucket); + } +}); + +test("copy object", async () => { + // Create bucket `copy-object-test-pass-src` + const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; + await createBucket(bucketSrc); + + try { + // Upload object `copy-object-test` + const objectNameToCreateSrc = `copy-object-test`; + const uploaded = await uploadObject( + bucketSrc, + objectNameToCreateSrc, + Buffer.from("copy object", "utf-8"), + ); + try { + assert.equal(uploaded, true); + + // Create bucket `copy-object-test-pass-dest` + const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; + await createBucket(bucketDest); + + try { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { bucket: bucketSrc }, + ); + + // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` + await filebaseClient.copyFile(objectNameToCreateSrc, bucketDest); + try { + // List bucket and assert new object exists + const copiedObject = await filebaseClient.getFileMetadata( + objectNameToCreateSrc, + ); + assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); + } finally { + await deleteObject(bucketDest, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketDest); + } + } finally { + await deleteObject(bucketSrc, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketSrc); + } +}); +//endregion + +//region Gateway Tests +test("delete gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ); + await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + const deletedName = await filebaseClient.getGateway(testGatewayName); + assert.strictEqual(deletedName, false); +}); + +test("create gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + assert.strictEqual(createdName.name, testGatewayName); +}); + +test("update gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName); + try { + const updatedName = await filebaseClient.updateGateway(createdName.name, { + private: true, + enabled: false, + }); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("get gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createGateway(testGatewayName, {}); + try { + const testName = await filebaseClient.getGateway(createdName.name); + assert.strictEqual(testName.name, testGatewayName); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("list gateways", async () => { + const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_GW_KEY || process.env.TEST_KEY, + process.env.TEST_GW_SECRET || process.env.TEST_SECRET, + ), + initialGatewaysList = await filebaseClient.listGateways(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createGateway(`${testGatewayName}-${i}`); + } + const gatewaysList = await filebaseClient.listGateways(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteGateway(`${testGatewayName}-${i}`); + } + assert.strictEqual( + gatewaysList.length, + initialGatewaysList.length + countToCreate, + ); +}); +//endregion + +//region Names Tests +const TEST_CID = process.env.TEST_NAME_CID, + TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY; + +test("delete name", async () => { + const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ); + await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + const deletedName = await filebaseClient.getIpnsName(testNameLabel); + assert.strictEqual(deletedName, false); +}); + +test("create name", async () => { + const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(createdName.label, testNameLabel); + assert.strictEqual(createdName.cid, TEST_CID); +}); + +test("import name", async () => { + const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + importedName = await filebaseClient.importIpnsName( + testNameLabel, + TEST_CID, + TEST_PRIVATE_KEY, + ); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(importedName.label, testNameLabel); + assert.strictEqual(importedName.cid, TEST_CID); +}); + +test("update name", async () => { + const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const updatedName = await filebaseClient.updateIpnsName( + createdName.label, + TEST_CID, + ); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("get name", async () => { + const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testName = await filebaseClient.getIpnsName(createdName.label); + assert.strictEqual(testName.label, testNameLabel); + assert.strictEqual(testName.cid, TEST_CID); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("resolve name", async () => { + const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testNameValue = await filebaseClient.resolveIpnsName( + createdName.network_key, + ); + assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("list names", async () => { + const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + ), + initialNamesList = await filebaseClient.listIpnsNames(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createIpnsName(`${testNameLabel}-${i}`, TEST_CID); + } + const namesList = await filebaseClient.listIpnsNames(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteIpnsName(`${testNameLabel}-${i}`); + } + assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); +}); + +test("download object using gateway (ipns)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-ipns-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + Buffer.from("download object", "utf-8"), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient( + process.env.TEST_S3_KEY || process.env.TEST_KEY, + process.env.TEST_S3_SECRET || process.env.TEST_SECRET, + { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }, + ); + + // Create IPNS Name + const createdName = await filebaseClient.createIpnsName( + `${objectNameToCreate}-ipns`, + uploaded.cid, + ); + + const downloadStream = await filebaseClient.fetchContentByIpnsName( + createdName["network_key"], + ), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); +//endregion + +//region Pinning API Tests +const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT"; + +test("create pin", async () => { + const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, + testPinName = `${TEST_PREFIX}-create-pin-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + { + bucket: testBucketName, + }, + ); + await createBucket(testBucketName); + try { + const createdPin = await filebaseClient.pinFile(testPinName, TEST_CID_1); + assert.strictEqual(createdPin.pin.cid, TEST_CID_1); + await filebaseClient.deleteFile(createdPin.name); + } finally { + await deleteBucket(testBucketName); + } +}); + +test("create pins", async () => { + const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, + testPinName = `${TEST_PREFIX}-create-pin-test-pass`, + filebaseClient = new FilebaseClient( + process.env.TEST_NAME_KEY || process.env.TEST_KEY, + process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, + { + bucket: testBucketName, + }, + ); + await createBucket(testBucketName); + try { + const createdPin = await filebaseClient.pinFiles(testPinName, TEST_CID_1); + assert.strictEqual(createdPin.pin.cid, TEST_CID_1); + await filebaseClient.deleteFile(createdPin.name); + } finally { + await deleteBucket(testBucketName); + } +}); +//endregion diff --git a/test/nameManager.spec.cjs b/test/nameManager.spec.cjs deleted file mode 100644 index 283f7fd..0000000 --- a/test/nameManager.spec.cjs +++ /dev/null @@ -1,141 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const { NameManager } = require("../dist/index.js"); - -const TEST_CID = process.env.TEST_NAME_CID, - TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY, - TEST_PREFIX = Date.now(); - -test("delete name", async () => { - const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID); - await nameManager.delete(testNameLabel); - const deletedName = await nameManager.get(testNameLabel); - assert.strictEqual(deletedName, false); -}); -test("create name", async () => { - const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - await nameManager.delete(testNameLabel); - assert.strictEqual(createdName.label, testNameLabel); - assert.strictEqual(createdName.cid, TEST_CID); -}); - -test("import name", async () => { - const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - importedName = await nameManager.import( - testNameLabel, - TEST_CID, - TEST_PRIVATE_KEY, - ); - await nameManager.delete(testNameLabel); - assert.strictEqual(importedName.label, testNameLabel); - assert.strictEqual(importedName.cid, TEST_CID); -}); - -test("update name", async () => { - const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - try { - const updatedName = await nameManager.update(createdName.label, TEST_CID); - assert.strictEqual(updatedName, true); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("get name", async () => { - const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - try { - const testName = await nameManager.get(createdName.label); - assert.strictEqual(testName.label, testNameLabel); - assert.strictEqual(testName.cid, TEST_CID); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("list names", async () => { - const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - initialNamesList = await nameManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await nameManager.create(`${testNameLabel}-${i}`, TEST_CID); - } - const namesList = await nameManager.list(); - for (let i = 0; i < countToCreate; i++) { - await nameManager.delete(`${testNameLabel}-${i}`); - } - assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); -}); - -test("toggle name on", async () => { - const testNameLabel = `${TEST_PREFIX}-toggle-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID, { - enabled: false, - }); - try { - const resolvedName = await nameManager.get(testNameLabel); - if (resolvedName?.enabled === true) { - throw new Error(`Incorrect State on Resolved Name`); - } - await nameManager.toggle(testNameLabel, true); - const updatedName = await nameManager.get(testNameLabel); - assert.strictEqual(updatedName.label, testNameLabel); - assert.strictEqual(updatedName.cid, TEST_CID); - assert.strictEqual(updatedName.enabled, true); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("toggle name off", async () => { - const testNameLabel = `${TEST_PREFIX}-toggle-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID); - try { - const resolvedName = await nameManager.get(testNameLabel); - if (resolvedName?.enabled === false) { - throw new Error(`Incorrect State on Resolved Name`); - } - await nameManager.toggle(testNameLabel, false); - const updatedName = await nameManager.get(testNameLabel); - assert.strictEqual(updatedName.label, testNameLabel); - assert.strictEqual(updatedName.cid, TEST_CID); - assert.strictEqual(updatedName.enabled, false); - } finally { - await nameManager.delete(testNameLabel); - } -}); diff --git a/test/nameManager.spec.mjs b/test/nameManager.spec.mjs deleted file mode 100644 index c48fe2c..0000000 --- a/test/nameManager.spec.mjs +++ /dev/null @@ -1,141 +0,0 @@ -import { test } from "node:test"; -import assert from "node:assert/strict"; -import { NameManager } from "../src/index.js"; - -const TEST_CID = process.env.TEST_NAME_CID, - TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY, - TEST_PREFIX = Date.now(); - -test("delete name", async () => { - const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID); - await nameManager.delete(testNameLabel); - const deletedName = await nameManager.get(testNameLabel); - assert.strictEqual(deletedName, false); -}); -test("create name", async () => { - const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - await nameManager.delete(testNameLabel); - assert.strictEqual(createdName.label, testNameLabel); - assert.strictEqual(createdName.cid, TEST_CID); -}); - -test("import name", async () => { - const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - importedName = await nameManager.import( - testNameLabel, - TEST_CID, - TEST_PRIVATE_KEY, - ); - await nameManager.delete(testNameLabel); - assert.strictEqual(importedName.label, testNameLabel); - assert.strictEqual(importedName.cid, TEST_CID); -}); - -test("update name", async () => { - const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - try { - const updatedName = await nameManager.update(createdName.label, TEST_CID); - assert.strictEqual(updatedName, true); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("get name", async () => { - const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await nameManager.create(testNameLabel, TEST_CID); - try { - const testName = await nameManager.get(createdName.label); - assert.strictEqual(testName.label, testNameLabel); - assert.strictEqual(testName.cid, TEST_CID); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("list names", async () => { - const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - initialNamesList = await nameManager.list(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await nameManager.create(`${testNameLabel}-${i}`, TEST_CID); - } - const namesList = await nameManager.list(); - for (let i = 0; i < countToCreate; i++) { - await nameManager.delete(`${testNameLabel}-${i}`); - } - assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); -}); - -test("toggle name on", async () => { - const testNameLabel = `${TEST_PREFIX}-toggle-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID, { - enabled: false, - }); - try { - const resolvedName = await nameManager.get(testNameLabel); - if (resolvedName?.enabled === true) { - throw new Error(`Incorrect State on Resolved Name`); - } - await nameManager.toggle(testNameLabel, true); - const updatedName = await nameManager.get(testNameLabel); - assert.strictEqual(updatedName.label, testNameLabel); - assert.strictEqual(updatedName.cid, TEST_CID); - assert.strictEqual(updatedName.enabled, true); - } finally { - await nameManager.delete(testNameLabel); - } -}); - -test("toggle name off", async () => { - const testNameLabel = `${TEST_PREFIX}-toggle-name-test-pass`, - nameManager = new NameManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await nameManager.create(testNameLabel, TEST_CID); - try { - const resolvedName = await nameManager.get(testNameLabel); - if (resolvedName?.enabled === false) { - throw new Error(`Incorrect State on Resolved Name`); - } - await nameManager.toggle(testNameLabel, false); - const updatedName = await nameManager.get(testNameLabel); - assert.strictEqual(updatedName.label, testNameLabel); - assert.strictEqual(updatedName.cid, TEST_CID); - assert.strictEqual(updatedName.enabled, false); - } finally { - await nameManager.delete(testNameLabel); - } -}); diff --git a/test/objectManager.spec.cjs b/test/objectManager.spec.cjs deleted file mode 100644 index 7ea28d8..0000000 --- a/test/objectManager.spec.cjs +++ /dev/null @@ -1,357 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const { ObjectManager, BucketManager } = require("../dist/index.js"); -const Path = require("node:path"); -const { writeFile } = require("node:fs/promises"); -const { v4: uuidv4 } = require("uuid"); -const os = require("node:os"); - -const TEST_PREFIX = Date.now(); - -async function createBucket(name) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket with name - const bucketNameToCreate = name; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - return typeof createdBucket !== "undefined"; -} - -async function uploadObject(bucket, key, body) { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Upload Object - await objectManager.upload(key, body); - - // Confirm Object Uploaded - const uploadedObject = await objectManager.get(key); - - return typeof uploadedObject !== "undefined"; -} - -async function deleteObject(bucket, key) { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Delete Object - await objectManager.delete(key); - return true; -} - -async function deleteBucket(bucket) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Delete Bucket - await bucketManager.delete(bucket); - return true; -} - -test("delete object", async () => { - // Create bucket `delete-object-test-pass` - const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; - await createBucket(deleteTestBucket); - - try { - // Upload object `delete-object-test` - const objectNameToCreate = `delete-object-test`; - const uploaded = await uploadObject( - deleteTestBucket, - objectNameToCreate, - Buffer.from("delete object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [delete-object-test]`); - } - - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: deleteTestBucket }, - ); - - // Delete object `delete-object-test` - await objectManager.delete(objectNameToCreate); - - // List bucket and assert new object doesn't exist - const uploadedObject = await objectManager.get(objectNameToCreate); - assert.equal(uploadedObject, false); - } finally { - await deleteBucket(deleteTestBucket); - } -}); - -test("upload object", async () => { - // Create Bucket `create-object-test-pass - const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; - await createBucket(uploadTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadTestBucket, - `create-object-test`, - Buffer.from("upload object", "utf-8"), - ); - - assert.strictEqual(uploaded, true); - await deleteObject(uploadTestBucket, `create-object-test`); - } finally { - await deleteBucket(uploadTestBucket); - } -}); - -test("upload directory", async () => { - // Create Bucket `create-object-test-pass - const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; - await createBucket(uploadDirectoryTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadDirectoryTestBucket, - `create-directory-test`, - [ - { - path: "/testObjects/1.txt", - content: Buffer.from("upload test object", "utf-8"), - }, - { - path: "/testObjects/deep/1.txt", - content: Buffer.from("upload deep test object", "utf-8"), - }, - { - path: "/topLevel.txt", - content: Buffer.from("upload top level test object", "utf-8"), - }, - ], - ); - assert.strictEqual(uploaded, true); - await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); - } finally { - await deleteBucket(uploadDirectoryTestBucket); - } -}); - -test("upload directory relative paths", async () => { - // Create Bucket `create-object-test-pass - const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-relative-test-pass`; - await createBucket(uploadDirectoryTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadDirectoryTestBucket, - `create-directory-relative-test`, - [ - { - path: "testObjects/1.txt", - content: Buffer.from("upload test object", "utf-8"), - }, - { - path: "testObjects/deep/1.txt", - content: Buffer.from("upload deep test object", "utf-8"), - }, - { - path: "topLevel.txt", - content: Buffer.from("upload top level test object", "utf-8"), - }, - ], - ); - assert.strictEqual(uploaded, true); - await deleteObject(uploadDirectoryTestBucket, `create-directory-relative-test`); - } finally { - await deleteBucket(uploadDirectoryTestBucket); - } -}); - -test("download object", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); - const downloadStream = await objectManager.download(objectNameToCreate), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("download object using gateway", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); - const downloadStream = await objectManager.download(objectNameToCreate), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("list objects", async () => { - // Create bucket `list-objects-test-pass` - const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; - await createBucket(listTestBucket); - - try { - let createdObjectCount = 0; - while (createdObjectCount < 26) { - // Upload objects `list-object-test-[x]` - const objectNameToCreate = `list-object-test-${createdObjectCount}`; - await uploadObject( - listTestBucket, - objectNameToCreate, - Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), - ); - createdObjectCount++; - } - - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: listTestBucket }, - ); - - const objectList = await objectManager.list({ - MaxKeys: 50, - Prefix: `list-object-test-`, - }); - assert.equal(objectList.Contents.length, 26); - - let deletedObjectCount = 0; - while (deletedObjectCount < 26) { - // Delete objects `list-object-test-[x]` - const objectNameToDelete = `list-object-test-${deletedObjectCount}`; - await deleteObject(listTestBucket, objectNameToDelete); - deletedObjectCount++; - } - } finally { - await deleteBucket(listTestBucket); - } -}); - -test("copy object", async () => { - // Create bucket `copy-object-test-pass-src` - const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; - await createBucket(bucketSrc); - - try { - // Upload object `copy-object-test` - const objectNameToCreateSrc = `copy-object-test`; - const uploaded = await uploadObject( - bucketSrc, - objectNameToCreateSrc, - Buffer.from("copy object", "utf-8"), - ); - try { - assert.equal(uploaded, true); - - // Create bucket `copy-object-test-pass-dest` - const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; - await createBucket(bucketDest); - - try { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: bucketSrc }, - ); - - // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` - await objectManager.copy(objectNameToCreateSrc, bucketDest); - try { - // List bucket and assert new object exists - const copiedObject = await objectManager.get(objectNameToCreateSrc); - assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); - } finally { - await deleteObject(bucketDest, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketDest); - } - } finally { - await deleteObject(bucketSrc, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketSrc); - } -}); diff --git a/test/objectManager.spec.mjs b/test/objectManager.spec.mjs deleted file mode 100644 index 6c2bb22..0000000 --- a/test/objectManager.spec.mjs +++ /dev/null @@ -1,325 +0,0 @@ -import { test } from "node:test"; -import assert from "node:assert/strict"; -import { ObjectManager, BucketManager } from "../src/index.js"; -import * as Path from "node:path"; -import { writeFile } from "node:fs/promises"; -import { v4 as uuidv4 } from "uuid"; -import os from "node:os"; - -const TEST_PREFIX = Date.now(); - -async function createBucket(name) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket with name - const bucketNameToCreate = name; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - return typeof createdBucket !== "undefined"; -} - -async function uploadObject(bucket, key, body) { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Upload Object - await objectManager.upload(key, body); - - // Confirm Object Uploaded - const uploadedObject = await objectManager.get(key); - - return typeof uploadedObject !== "undefined"; -} - -async function deleteObject(bucket, key) { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Delete Object - await objectManager.delete(key); - return true; -} - -async function deleteBucket(bucket) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Delete Bucket - await bucketManager.delete(bucket); - return true; -} - -test("delete object", async () => { - // Create bucket `delete-object-test-pass` - const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; - await createBucket(deleteTestBucket); - - try { - // Upload object `delete-object-test` - const objectNameToCreate = `delete-object-test`; - const uploaded = await uploadObject( - deleteTestBucket, - objectNameToCreate, - Buffer.from("delete object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [delete-object-test]`); - } - - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: deleteTestBucket }, - ); - - // Delete object `delete-object-test` - await objectManager.delete(objectNameToCreate); - - // List bucket and assert new object doesn't exist - const uploadedObject = await objectManager.get(objectNameToCreate); - assert.equal(uploadedObject, false); - } finally { - await deleteBucket(deleteTestBucket); - } -}); - -test("upload object", async () => { - // Create Bucket `create-object-test-pass - const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; - await createBucket(uploadTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadTestBucket, - `create-object-test`, - Buffer.from("upload object", "utf-8"), - ); - - assert.strictEqual(uploaded, true); - await deleteObject(uploadTestBucket, `create-object-test`); - } finally { - await deleteBucket(uploadTestBucket); - } -}); - -test("upload directory", async () => { - // Create Bucket `create-object-test-pass - const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; - await createBucket(uploadDirectoryTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadDirectoryTestBucket, - `create-directory-test`, - [ - { - path: "/testObjects/1.txt", - content: Buffer.from("upload test object", "utf-8"), - }, - { - path: "/testObjects/deep/1.txt", - content: Buffer.from("upload deep test object", "utf-8"), - }, - { - path: "/topLevel.txt", - content: Buffer.from("upload top level test object", "utf-8"), - }, - ], - ); - assert.strictEqual(uploaded, true); - await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); - } finally { - await deleteBucket(uploadDirectoryTestBucket); - } -}); - -test("download object", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); - const downloadStream = await objectManager.download(objectNameToCreate), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("download object using gateway", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); - const downloadStream = await objectManager.download(objectNameToCreate), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("list objects", async () => { - // Create bucket `list-objects-test-pass` - const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; - await createBucket(listTestBucket); - - try { - let createdObjectCount = 0; - while (createdObjectCount < 26) { - // Upload objects `list-object-test-[x]` - const objectNameToCreate = `list-object-test-${createdObjectCount}`; - await uploadObject( - listTestBucket, - objectNameToCreate, - Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), - ); - createdObjectCount++; - } - - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: listTestBucket }, - ); - - const objectList = await objectManager.list({ - MaxKeys: 50, - Prefix: `list-object-test-`, - }); - assert.equal(objectList.Contents.length, 26); - - let deletedObjectCount = 0; - while (deletedObjectCount < 26) { - // Delete objects `list-object-test-[x]` - const objectNameToDelete = `list-object-test-${deletedObjectCount}`; - await deleteObject(listTestBucket, objectNameToDelete); - deletedObjectCount++; - } - } finally { - await deleteBucket(listTestBucket); - } -}); - -test("copy object", async () => { - // Create bucket `copy-object-test-pass-src` - const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; - await createBucket(bucketSrc); - - try { - // Upload object `copy-object-test` - const objectNameToCreateSrc = `copy-object-test`; - const uploaded = await uploadObject( - bucketSrc, - objectNameToCreateSrc, - Buffer.from("copy object", "utf-8"), - ); - try { - assert.equal(uploaded, true); - - // Create bucket `copy-object-test-pass-dest` - const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; - await createBucket(bucketDest); - - try { - // Initialize ObjectManager - const objectManager = new ObjectManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: bucketSrc }, - ); - - // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` - await objectManager.copy(objectNameToCreateSrc, bucketDest); - try { - // List bucket and assert new object exists - const copiedObject = await objectManager.get(objectNameToCreateSrc); - assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); - } finally { - await deleteObject(bucketDest, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketDest); - } - } finally { - await deleteObject(bucketSrc, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketSrc); - } -}); diff --git a/test/pinManager.spec.cjs b/test/pinManager.spec.cjs deleted file mode 100644 index e11ce61..0000000 --- a/test/pinManager.spec.cjs +++ /dev/null @@ -1,262 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const { BucketManager, PinManager } = require("../dist/index.js"); -const Path = require("node:path"); -const { writeFile } = require("node:fs/promises"); -const { v4: uuidv4 } = require("uuid"); -const os = require("node:os"); - -const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT", - TEST_CID_2 = "QmNXcMdXadLRTxLpHJMsGnaeKz26d2F6NgUDVWScp54EfC", - TEST_PREFIX = Date.now(); - -async function createBucket(name) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket with name - const bucketNameToCreate = name; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - return typeof createdBucket !== "undefined"; -} - -async function deleteBucket(bucket) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Delete Bucket - await bucketManager.delete(bucket); - return true; -} - -test("create pin", async () => { - const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, - testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await pinManager.delete(createdPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("replace pin with name", async () => { - const testBucketName = `${TEST_PREFIX}-replname-pin-test-pass`, - testPinName = `${TEST_PREFIX}-replace-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const replacedPin = await pinManager.replace( - createdPin.requestid, - TEST_CID_2, - { - name: `${testPinName}-replaced`, - }, - ); - assert.strictEqual(replacedPin.pin.cid, TEST_CID_2); - assert.strictEqual(replacedPin.pin.name, `${testPinName}-replaced`); - await pinManager.delete(replacedPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("replace pin without name", async () => { - const testBucketName = `${TEST_PREFIX}-replace-pin-test-pass`, - testPinName = `${TEST_PREFIX}-replace-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const replacedPin = await pinManager.replace( - createdPin.requestid, - TEST_CID_2, - ); - assert.strictEqual(replacedPin.pin.name, testPinName); - assert.strictEqual(replacedPin.pin.cid, TEST_CID_2); - await pinManager.delete(replacedPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("get pin", async () => { - const testBucketName = `${TEST_PREFIX}-get-pin-test-pass`, - testPinName = `${TEST_PREFIX}-get-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - try { - const queriedPin = await pinManager.get(createdPin.requestid); - assert.strictEqual(queriedPin.requestid, createdPin.requestid); - assert.strictEqual(queriedPin.pin.cid, TEST_CID_1); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("download pin", async () => { - const testBucketName = `${TEST_PREFIX}-download-pin-test-pass`, - testPinName = `${TEST_PREFIX}-download-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - gateway: { - endpoint: process.env.TEST_IPFS_GATEWAY, - }, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - try { - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const downloadStream = await pinManager.download(createdPin.pin.cid), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("download pin by reference", async () => { - const testBucketName = `${TEST_PREFIX}-download-ref-test-pass`, - testPinName = `${TEST_PREFIX}-download-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - gateway: { - endpoint: process.env.TEST_IPFS_GATEWAY, - }, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - try { - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const pinToDownload = await pinManager.get(createdPin.requestid), - downloadStream = await pinToDownload.download(), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("list pins", async () => { - const testBucketName = `${TEST_PREFIX}-list-pin-test-pass`, - testPinName = `${TEST_PREFIX}-list-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const existingPinList = await pinManager.list(), - countToCreate = 25; - let createdPins = []; - for (let i = 0; i < countToCreate; i++) { - createdPins.push( - await pinManager.create(`${testPinName}_${i}`, TEST_CID_1), - ); - } - try { - const pinList = await pinManager.list(); - assert.strictEqual(pinList.count, existingPinList.count + countToCreate); - } finally { - for (const createdPin of createdPins) { - await pinManager.delete(createdPin.requestid); - } - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("delete pin", async () => { - const testBucketName = `${TEST_PREFIX}-delete-pin-test-pass`, - testPinName = `${TEST_PREFIX}-delete-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await pinManager.delete(createdPin.requestid); - const deletedPin = await pinManager.get(createdPin.requestid); - assert.strictEqual(deletedPin, false); - } finally { - await deleteBucket(testBucketName); - } -}); diff --git a/test/pinManager.spec.mjs b/test/pinManager.spec.mjs deleted file mode 100644 index f42c2bb..0000000 --- a/test/pinManager.spec.mjs +++ /dev/null @@ -1,263 +0,0 @@ -import { test } from "node:test"; -import assert from "node:assert/strict"; -import { PinManager } from "../src/index.js"; -import { v4 as uuidv4 } from "uuid"; -import Path from "node:path"; -import os from "node:os"; -import { writeFile } from "node:fs/promises"; -import { BucketManager } from "../src/index.js"; - -const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT", - TEST_CID_2 = "QmNXcMdXadLRTxLpHJMsGnaeKz26d2F6NgUDVWScp54EfC", - TEST_PREFIX = Date.now(); - -async function createBucket(name) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket with name - const bucketNameToCreate = name; - await bucketManager.create(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await bucketManager.list(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - return typeof createdBucket !== "undefined"; -} - -async function deleteBucket(bucket) { - // Initialize BucketManager - const bucketManager = new BucketManager( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Delete Bucket - await bucketManager.delete(bucket); - return true; -} - -test("create pin", async () => { - const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, - testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await pinManager.delete(createdPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("replace pin with name", async () => { - const testBucketName = `${TEST_PREFIX}-replname-pin-test-pass`, - testPinName = `${TEST_PREFIX}-replace-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const replacedPin = await pinManager.replace( - createdPin.requestid, - TEST_CID_2, - { - name: `${testPinName}-replaced`, - }, - ); - assert.strictEqual(replacedPin.pin.cid, TEST_CID_2); - assert.strictEqual(replacedPin.pin.name, `${testPinName}-replaced`); - await pinManager.delete(replacedPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("replace pin without name", async () => { - const testBucketName = `${TEST_PREFIX}-replace-pin-test-pass`, - testPinName = `${TEST_PREFIX}-replace-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const replacedPin = await pinManager.replace( - createdPin.requestid, - TEST_CID_2, - ); - assert.strictEqual(replacedPin.pin.name, testPinName); - assert.strictEqual(replacedPin.pin.cid, TEST_CID_2); - await pinManager.delete(replacedPin.requestid); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("get pin", async () => { - const testBucketName = `${TEST_PREFIX}-get-pin-test-pass`, - testPinName = `${TEST_PREFIX}-get-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - try { - const queriedPin = await pinManager.get(createdPin.requestid); - assert.strictEqual(queriedPin.requestid, createdPin.requestid); - assert.strictEqual(queriedPin.pin.cid, TEST_CID_1); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("download pin", async () => { - const testBucketName = `${TEST_PREFIX}-download-pin-test-pass`, - testPinName = `${TEST_PREFIX}-download-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - gateway: { - endpoint: process.env.TEST_IPFS_GATEWAY, - }, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - try { - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const downloadStream = await pinManager.download(createdPin.pin.cid), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("download pin by reference", async () => { - const testBucketName = `${TEST_PREFIX}-download-ref-test-pass`, - testPinName = `${TEST_PREFIX}-download-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - gateway: { - endpoint: process.env.TEST_IPFS_GATEWAY, - }, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - try { - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - const pinToDownload = await pinManager.get(createdPin.requestid), - downloadStream = await pinToDownload.download(), - downloadFilename = uuidv4(), - downloadPath = Path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await pinManager.delete(createdPin.requestid); - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("list pins", async () => { - const testBucketName = `${TEST_PREFIX}-list-pin-test-pass`, - testPinName = `${TEST_PREFIX}-list-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const existingPinList = await pinManager.list(), - countToCreate = 25; - let createdPins = []; - for (let i = 0; i < countToCreate; i++) { - createdPins.push( - await pinManager.create(`${testPinName}_${i}`, TEST_CID_1), - ); - } - try { - const pinList = await pinManager.list(); - assert.strictEqual(pinList.count, existingPinList.count + countToCreate); - } finally { - for (const createdPin of createdPins) { - await pinManager.delete(createdPin.requestid); - } - } - } finally { - await deleteBucket(testBucketName); - } -}); - -test("delete pin", async () => { - const testBucketName = `${TEST_PREFIX}-delete-pin-test-pass`, - testPinName = `${TEST_PREFIX}-delete-pin-test-pass`, - pinManager = new PinManager( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await pinManager.create(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await pinManager.delete(createdPin.requestid); - const deletedPin = await pinManager.get(createdPin.requestid); - assert.strictEqual(deletedPin, false); - } finally { - await deleteBucket(testBucketName); - } -}); diff --git a/yarn.lock b/yarn.lock index 905c39f..fcffa50 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,597 +2,645 @@ # yarn lockfile v1 -"@assemblyscript/loader@^0.9.4": - version "0.9.4" - resolved "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz" - integrity sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA== - -"@aws-crypto/crc32@3.0.0": - 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== +"@aws-crypto/crc32@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" + integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== dependencies: - "@aws-crypto/util" "^3.0.0" + "@aws-crypto/util" "^5.2.0" "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" + tslib "^2.6.2" -"@aws-crypto/crc32c@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-3.0.0.tgz" - integrity sha512-ENNPPManmnVJ4BTXlOjAgD7URidbAznURqD0KvfREyc4o20DPYdEldU1f5cQ7Jbj0CJJSPaMIk/9ZshdB3210w== +"@aws-crypto/crc32c@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz" + integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== dependencies: - "@aws-crypto/util" "^3.0.0" + "@aws-crypto/util" "^5.2.0" "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" + tslib "^2.6.2" -"@aws-crypto/ie11-detection@^3.0.0": - 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== - dependencies: - tslib "^1.11.1" - -"@aws-crypto/sha1-browser@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-3.0.0.tgz" - integrity sha512-NJth5c997GLHs6nOYTzFKTbYdMNA6/1XlKVgnZoaZcQ7z7UJlOgj2JdbHE8tiYLS3fzXNCguct77SPGat2raSw== +"@aws-crypto/sha1-browser@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz" + integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== dependencies: - "@aws-crypto/ie11-detection" "^3.0.0" - "@aws-crypto/supports-web-crypto" "^3.0.0" - "@aws-crypto/util" "^3.0.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" "@aws-sdk/types" "^3.222.0" "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" -"@aws-crypto/sha256-browser@3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-3.0.0.tgz" - integrity sha512-8VLmW2B+gjFbU5uMeqtQM6Nj0/F1bro80xQXCW6CQBWgosFWXTx77aeOF5CAIAmbOK64SdMBJdNr6J41yP5mvQ== +"@aws-crypto/sha256-browser@5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" + integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== 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-crypto/sha256-js" "^5.2.0" + "@aws-crypto/supports-web-crypto" "^5.2.0" + "@aws-crypto/util" "^5.2.0" "@aws-sdk/types" "^3.222.0" "@aws-sdk/util-locate-window" "^3.0.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" -"@aws-crypto/sha256-js@3.0.0", "@aws-crypto/sha256-js@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-3.0.0.tgz" - integrity sha512-PnNN7os0+yd1XvXAy23CFOmTbMaDxgxXtTKHybrJ39Y8kGzBATgBFibWJKH6BhytLI/Zyszs87xCOBNyBig6vQ== +"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" + integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== dependencies: - "@aws-crypto/util" "^3.0.0" + "@aws-crypto/util" "^5.2.0" "@aws-sdk/types" "^3.222.0" - tslib "^1.11.1" + tslib "^2.6.2" -"@aws-crypto/supports-web-crypto@^3.0.0": - 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== +"@aws-crypto/supports-web-crypto@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" + integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== dependencies: - tslib "^1.11.1" + tslib "^2.6.2" -"@aws-crypto/util@^3.0.0": - version "3.0.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-3.0.0.tgz" - integrity sha512-2OJlpeJpCR48CC8r+uKVChzs9Iungj9wkZrl8Z041DWEWvyIHILYKCPNzJghKsivj+S3mLo6BVc7mBNzdxA46w== +"@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": + version "5.2.0" + resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" + integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== dependencies: "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-utf8-browser" "^3.0.0" - tslib "^1.11.1" - -"@aws-sdk/client-s3@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.478.0.tgz" - integrity sha512-OUpbCCnK71lQQ07BohJOx9ZER0rPqRAGOVIIVhNEkeN0uYFLzB7/o5a7+FEPUQXEd5rZRZgbxN5xEmnNW/0Waw== - dependencies: - "@aws-crypto/sha1-browser" "3.0.0" - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/client-sts" "3.478.0" - "@aws-sdk/core" "3.477.0" - "@aws-sdk/credential-provider-node" "3.478.0" - "@aws-sdk/middleware-bucket-endpoint" "3.470.0" - "@aws-sdk/middleware-expect-continue" "3.468.0" - "@aws-sdk/middleware-flexible-checksums" "3.468.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-location-constraint" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-sdk-s3" "3.474.0" - "@aws-sdk/middleware-signing" "3.468.0" - "@aws-sdk/middleware-ssec" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.470.0" - "@aws-sdk/signature-v4-multi-region" "3.474.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@aws-sdk/xml-builder" "3.472.0" - "@smithy/config-resolver" "^2.0.21" - "@smithy/core" "^1.2.0" - "@smithy/eventstream-serde-browser" "^2.0.15" - "@smithy/eventstream-serde-config-resolver" "^2.0.15" - "@smithy/eventstream-serde-node" "^2.0.15" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-blob-browser" "^2.0.16" - "@smithy/hash-node" "^2.0.17" - "@smithy/hash-stream-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/md5-js" "^2.0.17" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.24" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.22" - "@smithy/util-defaults-mode-node" "^2.0.29" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-stream" "^2.0.23" - "@smithy/util-utf8" "^2.0.2" - "@smithy/util-waiter" "^2.0.15" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/client-sso@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.478.0.tgz" - integrity sha512-Jxy9cE1JMkPR0PklCpq3cORHnZq/Z4klhSTNGgZNeBWovMa+plor52kyh8iUNHKl3XEJvTbHM7V+dvrr/x0P1g== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.477.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.470.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.21" - "@smithy/core" "^1.2.0" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.24" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.22" - "@smithy/util-defaults-mode-node" "^2.0.29" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/client-sts@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sts/-/client-sts-3.478.0.tgz" - integrity sha512-D+QID0dYzmn9dcxgKP3/nMndUqiQbDLsqI0Zf2pG4MW5gPhVNKlDGIV3Ztz8SkMjzGJExNOLW2L569o8jshJVw== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/core" "3.477.0" - "@aws-sdk/credential-provider-node" "3.478.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.470.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.21" - "@smithy/core" "^1.2.0" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.24" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.22" - "@smithy/util-defaults-mode-node" "^2.0.29" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-middleware" "^2.0.8" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" - fast-xml-parser "4.2.5" - tslib "^2.5.0" - -"@aws-sdk/core@3.477.0": - version "3.477.0" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.477.0.tgz" - integrity sha512-o0434EH+d1BxHZvgG7z8vph2SYefciQ5RnJw2MgvETGnthgqsnI4nnNJLSw0FVeqCeS18n6vRtzqlGYR2YPCNg== - dependencies: - "@smithy/core" "^1.2.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-env@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.468.0.tgz" - integrity sha512-k/1WHd3KZn0EQYjadooj53FC0z24/e4dUZhbSKTULgmxyO62pwh9v3Brvw4WRa/8o2wTffU/jo54tf4vGuP/ZA== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-ini@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.478.0.tgz" - integrity sha512-SsrYEYUvTG9ZoPC+zB19AnVoOKID+QIEHJDIi1GCZXW5kTVyr1saTVm4orG2TjYvbHQMddsWtHOvGYXZWAYMbw== - dependencies: - "@aws-sdk/credential-provider-env" "3.468.0" - "@aws-sdk/credential-provider-process" "3.468.0" - "@aws-sdk/credential-provider-sso" "3.478.0" - "@aws-sdk/credential-provider-web-identity" "3.468.0" - "@aws-sdk/types" "3.468.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-node@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.478.0.tgz" - integrity sha512-nwDutJYeHiIZCQDgKIUrsgwAWTil0mNe+cbd+j8fi+wwxkWUzip+F0+z02molJ8WrUUKNRhqB1V5aVx7IranuA== - dependencies: - "@aws-sdk/credential-provider-env" "3.468.0" - "@aws-sdk/credential-provider-ini" "3.478.0" - "@aws-sdk/credential-provider-process" "3.468.0" - "@aws-sdk/credential-provider-sso" "3.478.0" - "@aws-sdk/credential-provider-web-identity" "3.468.0" - "@aws-sdk/types" "3.468.0" - "@smithy/credential-provider-imds" "^2.0.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-process@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.468.0.tgz" - integrity sha512-OYSn1A/UsyPJ7Z8Q2cNhTf55O36shPmSsvOfND04nSfu1nPaR+VUvvsP7v+brhGpwC/GAKTIdGAo4blH31BS6A== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-sso@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.478.0.tgz" - integrity sha512-LsDShG51X/q+s5ZFN7kHVqrd8ZHdyEyHqdhoocmRvvw2Dif50M0AqQfvCrW1ndj5CNzXO4x/eH8EK5ZOVlS6Sg== - dependencies: - "@aws-sdk/client-sso" "3.478.0" - "@aws-sdk/token-providers" "3.478.0" - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/credential-provider-web-identity@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.468.0.tgz" - integrity sha512-rexymPmXjtkwCPfhnUq3EjO1rSkf39R4Jz9CqiM7OsqK2qlT5Y/V3gnMKn0ZMXsYaQOMfM3cT5xly5R+OKDHlw== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/lib-storage@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/lib-storage/-/lib-storage-3.478.0.tgz" - integrity sha512-R1D+hX8Lea9mBZqj2A4hWkSNGCTv5pCsX/+fmfnFtmKL4gPn2MZ1GtnI6Rnk0zyTrQL94SpVc6CcEvhWsm5oiQ== - dependencies: - "@smithy/abort-controller" "^2.0.1" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/smithy-client" "^2.1.18" - buffer "5.6.0" - events "3.3.0" - stream-browserify "3.0.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-bucket-endpoint@3.470.0": - version "3.470.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.470.0.tgz" - integrity sha512-vLXXNWtsRmEIwzJ9HUQfIuTNAsEzvCv0Icsnkvt2BiBZXnmHdp2vIC3e3+kfy1D7dVQloXqMmnfcLu/BUMu2Jw== - dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-arn-parser" "3.465.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-expect-continue@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.468.0.tgz" - integrity sha512-/wmLjmfgeulxhhmnxX3X3N933TvGsYckVIFjAtDSpLjqkbwzEcNiLq7AdmNJ4BfxG0MCMgcht561DCCD19x8Bg== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-flexible-checksums@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.468.0.tgz" - integrity sha512-LQwL/N5MCj3Y5keLLewHTqeAXUIMsHFZyxDXRm/uxrOon9ufLKDvGvzAmfwn1/CuSUo66ZfT8VPSA4BsC90RtA== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@aws-crypto/crc32c" "3.0.0" - "@aws-sdk/types" "3.468.0" - "@smithy/is-array-buffer" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/middleware-host-header@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.468.0.tgz" - integrity sha512-gwQ+/QhX+lhof304r6zbZ/V5l5cjhGRxLL3CjH1uJPMcOAbw9wUlMdl+ibr8UwBZ5elfKFGiB1cdW/0uMchw0w== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-location-constraint@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.468.0.tgz" - integrity sha512-0gBX/lDynQr4YIhM9h1dVnkVWqrg+34iOCVIUq8jHxzUzgZWglGkG9lHGGg0r1xkLTmegeoo1OKH8wrQ6n33Cg== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-logger@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.468.0.tgz" - integrity sha512-X5XHKV7DHRXI3f29SAhJPe/OxWRFgDWDMMCALfzhmJfCi6Jfh0M14cJKoC+nl+dk9lB+36+jKjhjETZaL2bPlA== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-recursion-detection@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.468.0.tgz" - integrity sha512-vch9IQib2Ng9ucSyRW2eKNQXHUPb5jUPCLA5otTW/8nGjcOU37LxQG4WrxO7uaJ9Oe8hjHO+hViE3P0KISUhtA== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-sdk-s3@3.474.0": - version "3.474.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.474.0.tgz" - integrity sha512-62aAo/8u5daIabeJ+gseYeHeShe9eYH6mH+kfWmLsHybXCCv1EaD/ZkdXWNhL0HZ3bUI1z1SF1p8jjTAWALnwA== - dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-arn-parser" "3.465.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.0.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-signing@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-signing/-/middleware-signing-3.468.0.tgz" - integrity sha512-s+7fSB1gdnnTj5O0aCCarX3z5Vppop8kazbNSZADdkfHIDWCN80IH4ZNjY3OWqaAz0HmR4LNNrovdR304ojb4Q== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/property-provider" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@aws-sdk/middleware-ssec@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.468.0.tgz" - integrity sha512-y1qLW24wRkOGBTK5d6eJXf6d8HYo4rzT4a1mNDN1rd18NSffwQ6Yke5qeUiIaxa0y/l+FvvNYErbhYtij2rJoQ== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/middleware-user-agent@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.478.0.tgz" - integrity sha512-Rec+nAPIzzwxgHPW+xqY6tooJGFOytpYg/xSRv8/IXl3xKGhmpMGs6gDWzmMBv/qy5nKTvLph/csNWJ98GWXCw== - dependencies: - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/region-config-resolver@3.470.0": - version "3.470.0" - resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.470.0.tgz" - integrity sha512-C1o1J06iIw8cyAAOvHqT4Bbqf+PgQ/RDlSyjt2gFfP2OovDpc2o2S90dE8f8iZdSGpg70N5MikT1DBhW9NbhtQ== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.0.0" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@aws-sdk/signature-v4-multi-region@3.474.0": - version "3.474.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.474.0.tgz" - integrity sha512-93OWRQgTJZASXLrlUNX7mmXknNkYxFYldRLARmYQccONmnIqgYQW0lQj8BFwqkHJTzSMik3/UsU0SHKwZ9ynYA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.474.0" - "@aws-sdk/types" "3.468.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/signature-v4" "^2.0.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/token-providers@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.478.0.tgz" - integrity sha512-7b5tj1y/wGHZIZ+ckjOUKgKrMuCJMF/G1UKZKIqqdekeEsjcThbvoxAMeY0FEowu2ODVk/ggOmpBFxcu0iYd6A== - dependencies: - "@aws-crypto/sha256-browser" "3.0.0" - "@aws-crypto/sha256-js" "3.0.0" - "@aws-sdk/middleware-host-header" "3.468.0" - "@aws-sdk/middleware-logger" "3.468.0" - "@aws-sdk/middleware-recursion-detection" "3.468.0" - "@aws-sdk/middleware-user-agent" "3.478.0" - "@aws-sdk/region-config-resolver" "3.470.0" - "@aws-sdk/types" "3.468.0" - "@aws-sdk/util-endpoints" "3.478.0" - "@aws-sdk/util-user-agent-browser" "3.468.0" - "@aws-sdk/util-user-agent-node" "3.470.0" - "@smithy/config-resolver" "^2.0.21" - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/hash-node" "^2.0.17" - "@smithy/invalid-dependency" "^2.0.15" - "@smithy/middleware-content-length" "^2.0.17" - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.24" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/property-provider" "^2.0.0" - "@smithy/protocol-http" "^3.0.11" - "@smithy/shared-ini-file-loader" "^2.0.6" - "@smithy/smithy-client" "^2.1.18" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-body-length-browser" "^2.0.1" - "@smithy/util-body-length-node" "^2.1.0" - "@smithy/util-defaults-mode-browser" "^2.0.22" - "@smithy/util-defaults-mode-node" "^2.0.29" - "@smithy/util-endpoints" "^1.0.7" - "@smithy/util-retry" "^2.0.8" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" - -"@aws-sdk/types@3.468.0", "@aws-sdk/types@^3.222.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.468.0.tgz" - integrity sha512-rx/9uHI4inRbp2tw3Y4Ih4PNZkVj32h7WneSg3MVgVjAoVD5Zti9KhS5hkvsBxfgmQmg0AQbE+b1sy5WGAgntA== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@aws-sdk/util-arn-parser@3.465.0": - version "3.465.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.465.0.tgz" - integrity sha512-zOJ82vzDJFqBX9yZBlNeHHrul/kpx/DCoxzW5UBbZeb26kfV53QhMSoEmY8/lEbBqlqargJ/sgRC845GFhHNQw== - dependencies: - tslib "^2.5.0" - -"@aws-sdk/util-endpoints@3.478.0": - version "3.478.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.478.0.tgz" - integrity sha512-u9Mcg3euGJGs5clPt9mBuhBjHiEKiD0PnfvArhfq9i+dcY5mbCq/i1Dezp3iv1fZH9xxQt7hPXDfSpt1yUSM6g== - dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/util-endpoints" "^1.0.7" - tslib "^2.5.0" + "@smithy/util-utf8" "^2.0.0" + tslib "^2.6.2" + +"@aws-sdk/client-s3@3.842.0": + version "3.842.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.842.0.tgz" + integrity sha512-T5Rh72Rcq1xIaM8KkTr1Wpr7/WPCYO++KrM+/Em0rq2jxpjMMhj77ITpgH7eEmNxWmwIndTwqpgfmbpNfk7Gbw== + dependencies: + "@aws-crypto/sha1-browser" "5.2.0" + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.840.0" + "@aws-sdk/credential-provider-node" "3.840.0" + "@aws-sdk/middleware-bucket-endpoint" "3.840.0" + "@aws-sdk/middleware-expect-continue" "3.840.0" + "@aws-sdk/middleware-flexible-checksums" "3.840.0" + "@aws-sdk/middleware-host-header" "3.840.0" + "@aws-sdk/middleware-location-constraint" "3.840.0" + "@aws-sdk/middleware-logger" "3.840.0" + "@aws-sdk/middleware-recursion-detection" "3.840.0" + "@aws-sdk/middleware-sdk-s3" "3.840.0" + "@aws-sdk/middleware-ssec" "3.840.0" + "@aws-sdk/middleware-user-agent" "3.840.0" + "@aws-sdk/region-config-resolver" "3.840.0" + "@aws-sdk/signature-v4-multi-region" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-endpoints" "3.840.0" + "@aws-sdk/util-user-agent-browser" "3.840.0" + "@aws-sdk/util-user-agent-node" "3.840.0" + "@aws-sdk/xml-builder" "3.821.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.6.0" + "@smithy/eventstream-serde-browser" "^4.0.4" + "@smithy/eventstream-serde-config-resolver" "^4.1.2" + "@smithy/eventstream-serde-node" "^4.0.4" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-blob-browser" "^4.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/hash-stream-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/md5-js" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.13" + "@smithy/middleware-retry" "^4.1.14" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.21" + "@smithy/util-defaults-mode-node" "^4.0.21" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.6" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + "@smithy/util-waiter" "^4.0.6" + "@types/uuid" "^9.0.1" + tslib "^2.6.2" + uuid "^9.0.1" + +"@aws-sdk/client-sso@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz" + integrity sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.840.0" + "@aws-sdk/middleware-host-header" "3.840.0" + "@aws-sdk/middleware-logger" "3.840.0" + "@aws-sdk/middleware-recursion-detection" "3.840.0" + "@aws-sdk/middleware-user-agent" "3.840.0" + "@aws-sdk/region-config-resolver" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-endpoints" "3.840.0" + "@aws-sdk/util-user-agent-browser" "3.840.0" + "@aws-sdk/util-user-agent-node" "3.840.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.6.0" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.13" + "@smithy/middleware-retry" "^4.1.14" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.21" + "@smithy/util-defaults-mode-node" "^4.0.21" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.6" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/core@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz" + integrity sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA== + dependencies: + "@aws-sdk/types" "3.840.0" + "@aws-sdk/xml-builder" "3.821.0" + "@smithy/core" "^3.6.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-utf8" "^4.0.0" + fast-xml-parser "4.4.1" + tslib "^2.6.2" + +"@aws-sdk/core@3.844.0": + version "3.844.0" + resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.844.0.tgz" + integrity sha512-pfpI54bG5Xf2NkqrDBC2REStXlDXNCw/whORhkEs+Tp5exU872D5QKguzjPA6hH+8Pvbq1qgt5zXMbduISTHJw== + dependencies: + "@aws-sdk/types" "3.840.0" + "@aws-sdk/xml-builder" "3.821.0" + "@smithy/core" "^3.7.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-utf8" "^4.0.0" + fast-xml-parser "5.2.5" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-env@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz" + integrity sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-http@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz" + integrity sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/util-stream" "^4.2.2" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-ini@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz" + integrity sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/credential-provider-env" "3.840.0" + "@aws-sdk/credential-provider-http" "3.840.0" + "@aws-sdk/credential-provider-process" "3.840.0" + "@aws-sdk/credential-provider-sso" "3.840.0" + "@aws-sdk/credential-provider-web-identity" "3.840.0" + "@aws-sdk/nested-clients" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-node@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz" + integrity sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg== + dependencies: + "@aws-sdk/credential-provider-env" "3.840.0" + "@aws-sdk/credential-provider-http" "3.840.0" + "@aws-sdk/credential-provider-ini" "3.840.0" + "@aws-sdk/credential-provider-process" "3.840.0" + "@aws-sdk/credential-provider-sso" "3.840.0" + "@aws-sdk/credential-provider-web-identity" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-process@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz" + integrity sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-sso@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz" + integrity sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA== + dependencies: + "@aws-sdk/client-sso" "3.840.0" + "@aws-sdk/core" "3.840.0" + "@aws-sdk/token-providers" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/credential-provider-web-identity@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz" + integrity sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/nested-clients" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-bucket-endpoint@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz" + integrity sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ== + dependencies: + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-expect-continue@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.840.0.tgz" + integrity sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-flexible-checksums@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.840.0.tgz" + integrity sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@aws-crypto/crc32c" "5.2.0" + "@aws-crypto/util" "5.2.0" + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-host-header@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz" + integrity sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-location-constraint@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.840.0.tgz" + integrity sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-logger@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz" + integrity sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-recursion-detection@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz" + integrity sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.840.0.tgz" + integrity sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/core" "^3.6.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.2" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-sdk-s3@3.844.0": + version "3.844.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.844.0.tgz" + integrity sha512-vOD5reqZszXBWMbZFN3EUar203o2i8gcoTdrymY4GMsAPDsh0k8yd3VJRNPuxT/017tP6G+rQepOGzna4umung== + dependencies: + "@aws-sdk/core" "3.844.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-arn-parser" "3.804.0" + "@smithy/core" "^3.7.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/middleware-ssec@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.840.0.tgz" + integrity sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/middleware-user-agent@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz" + integrity sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-endpoints" "3.840.0" + "@smithy/core" "^3.6.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/nested-clients@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz" + integrity sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA== + dependencies: + "@aws-crypto/sha256-browser" "5.2.0" + "@aws-crypto/sha256-js" "5.2.0" + "@aws-sdk/core" "3.840.0" + "@aws-sdk/middleware-host-header" "3.840.0" + "@aws-sdk/middleware-logger" "3.840.0" + "@aws-sdk/middleware-recursion-detection" "3.840.0" + "@aws-sdk/middleware-user-agent" "3.840.0" + "@aws-sdk/region-config-resolver" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-endpoints" "3.840.0" + "@aws-sdk/util-user-agent-browser" "3.840.0" + "@aws-sdk/util-user-agent-node" "3.840.0" + "@smithy/config-resolver" "^4.1.4" + "@smithy/core" "^3.6.0" + "@smithy/fetch-http-handler" "^5.0.4" + "@smithy/hash-node" "^4.0.4" + "@smithy/invalid-dependency" "^4.0.4" + "@smithy/middleware-content-length" "^4.0.4" + "@smithy/middleware-endpoint" "^4.1.13" + "@smithy/middleware-retry" "^4.1.14" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/node-http-handler" "^4.0.6" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.5" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-body-length-node" "^4.0.0" + "@smithy/util-defaults-mode-browser" "^4.0.21" + "@smithy/util-defaults-mode-node" "^4.0.21" + "@smithy/util-endpoints" "^3.0.6" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.6" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@aws-sdk/region-config-resolver@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz" + integrity sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + +"@aws-sdk/s3-request-presigner@3.844.0": + version "3.844.0" + resolved "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.844.0.tgz" + integrity sha512-i953TKW1rXbd9G2xEgWoJZDoF0Z1ONRlrXkOKDGOrY/uQhAIPNDz5k6tFcXG5oIaLWW197ShENv3CeEJnhfh3g== + dependencies: + "@aws-sdk/signature-v4-multi-region" "3.844.0" + "@aws-sdk/types" "3.840.0" + "@aws-sdk/util-format-url" "3.840.0" + "@smithy/middleware-endpoint" "^4.1.14" + "@smithy/protocol-http" "^5.1.2" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.840.0.tgz" + integrity sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/signature-v4-multi-region@3.844.0": + version "3.844.0" + resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.844.0.tgz" + integrity sha512-QC8nocQcZ3Bj7vTnuL47iNhcuUjMC46E2L85mU+sPQo3LN2qBVGSOTF+xSWGvmSFDpkN4ZXUMVeA0cJoJFEDFA== + dependencies: + "@aws-sdk/middleware-sdk-s3" "3.844.0" + "@aws-sdk/types" "3.840.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/signature-v4" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/token-providers@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz" + integrity sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg== + dependencies: + "@aws-sdk/core" "3.840.0" + "@aws-sdk/nested-clients" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/types@3.840.0", "@aws-sdk/types@^3.222.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz" + integrity sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@aws-sdk/util-arn-parser@3.804.0": + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz" + integrity sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ== + dependencies: + tslib "^2.6.2" + +"@aws-sdk/util-endpoints@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz" + integrity sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/types" "^4.3.1" + "@smithy/util-endpoints" "^3.0.6" + tslib "^2.6.2" + +"@aws-sdk/util-format-url@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.840.0.tgz" + integrity sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg== + dependencies: + "@aws-sdk/types" "3.840.0" + "@smithy/querystring-builder" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" "@aws-sdk/util-locate-window@^3.0.0": - version "3.465.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.465.0.tgz" - integrity sha512-f+QNcWGswredzC1ExNAB/QzODlxwaTdXkNT5cvke2RLX8SFU5pYk6h4uCtWC0vWPELzOfMfloBrJefBzlarhsw== + version "3.804.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz" + integrity sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@aws-sdk/util-user-agent-browser@3.468.0": - version "3.468.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.468.0.tgz" - integrity sha512-OJyhWWsDEizR3L+dCgMXSUmaCywkiZ7HSbnQytbeKGwokIhD69HTiJcibF/sgcM5gk4k3Mq3puUhGnEZ46GIig== +"@aws-sdk/util-user-agent-browser@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz" + integrity sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/types" "^2.7.0" + "@aws-sdk/types" "3.840.0" + "@smithy/types" "^4.3.1" bowser "^2.11.0" - tslib "^2.5.0" + tslib "^2.6.2" -"@aws-sdk/util-user-agent-node@3.470.0": - version "3.470.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.470.0.tgz" - integrity sha512-QxsZ9iVHcBB/XRdYvwfM5AMvNp58HfqkIrH88mY0cmxuvtlIGDfWjczdDrZMJk9y0vIq+cuoCHsGXHu7PyiEAQ== +"@aws-sdk/util-user-agent-node@3.840.0": + version "3.840.0" + resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz" + integrity sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ== dependencies: - "@aws-sdk/types" "3.468.0" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@aws-sdk/middleware-user-agent" "3.840.0" + "@aws-sdk/types" "3.840.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@aws-sdk/util-utf8-browser@^3.0.0": - 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== +"@aws-sdk/xml-builder@3.821.0": + version "3.821.0" + resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz" + integrity sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA== dependencies: - tslib "^2.3.1" - -"@aws-sdk/xml-builder@3.472.0": - version "3.472.0" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.472.0.tgz" - integrity sha512-PwjVxz1hr9up8QkddabuScPZ/d5aDHgvHYgK4acHYzltXL4wngfvimi5ZqXTzVWF2QANxHmWnHUr45QJX71oJQ== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" "@babel/parser@^7.20.15": version "7.23.6" @@ -613,12 +661,12 @@ "@colors/colors@1.6.0", "@colors/colors@^1.6.0": version "1.6.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.6.0.tgz#ec6cd237440700bc23ca23087f513c75508958b0" + resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== "@dabh/diagnostics@^2.0.2": version "2.0.3" - resolved "https://registry.yarnpkg.com/@dabh/diagnostics/-/diagnostics-2.0.3.tgz#7f7e97ee9a725dffc7808d93668cc984e1dc477a" + resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== dependencies: colorspace "1.1.x" @@ -647,7 +695,7 @@ "@esbuild/darwin-arm64@0.19.12": version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== "@esbuild/darwin-x64@0.19.12": @@ -707,7 +755,7 @@ "@esbuild/linux-x64@0.19.12": version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz#5f37cfdc705aea687dfe5dfbec086a05acfe9c78" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz" integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== "@esbuild/netbsd-x64@0.19.12": @@ -740,132 +788,7 @@ resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== -"@helia/car@1.0.4": - version "1.0.4" - resolved "https://registry.npmjs.org/@helia/car/-/car-1.0.4.tgz" - integrity sha512-HcHMC/eTRCFt3jrLkMvqKD7Og92PpNoBZTMQ9R+dOvtyIlZ2iG4zYRm2DipPdDi+OvXCqaPNg0oJxDx5fBnjRw== - dependencies: - "@helia/interface" "^2.0.0" - "@ipld/car" "^5.1.1" - "@ipld/dag-pb" "^4.0.0" - "@libp2p/interfaces" "^3.3.1" - cborg "^4.0.3" - interface-blockstore "^5.0.0" - it-map "^3.0.3" - multiformats "^12.0.1" - p-defer "^4.0.0" - p-queue "^7.3.4" - progress-events "^1.0.0" - -"@helia/interface@^2.0.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@helia/interface/-/interface-2.1.0.tgz" - integrity sha512-Z7PwuDIR0BODfSMzYcdzgdTYLsshCawAoPvGuuazvBddWSD9y82/QBmsWp6CTkyM/ziEaWbz5wERmRS+wejDLg== - dependencies: - "@libp2p/interface" "^0.1.1" - interface-blockstore "^5.0.0" - interface-datastore "^8.0.0" - interface-store "^5.0.1" - ipfs-bitswap "^19.0.0" - multiformats "^12.0.1" - progress-events "^1.0.0" - -"@helia/interface@^4.0.1": - version "4.0.1" - resolved "https://registry.yarnpkg.com/@helia/interface/-/interface-4.0.1.tgz#45ecc2aab4a03503bcc0cb269094741240a17b65" - integrity sha512-tp9dLlog9x5C/+gE4FF452slemnTQtpS3RneGOatx51nDaE76/HHOmW1hIAASuFtjPHeg/R9BAM8UIX4DEffsg== - dependencies: - "@libp2p/interface" "^1.1.4" - interface-blockstore "^5.2.10" - interface-datastore "^8.2.11" - interface-store "^5.1.8" - multiformats "^13.1.0" - progress-events "^1.0.0" - -"@helia/mfs@3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@helia/mfs/-/mfs-3.0.1.tgz#a24b26671d4543997594f93678905a7244c79bf7" - integrity sha512-2/ZlP1jQ787Tb1P86LBBL2UBSxX7sdvD/kAzbWRxFELJquURVgiJd3stFlFsv6PSN/7x0991H8WZAlKZ0oZt3Q== - dependencies: - "@helia/unixfs" "^3.0.1" - "@libp2p/interfaces" "^3.3.2" - "@libp2p/logger" "^4.0.7" - interface-blockstore "^5.2.10" - interface-datastore "^8.2.11" - ipfs-unixfs "^11.1.3" - ipfs-unixfs-exporter "^13.5.0" - ipfs-unixfs-importer "^15.2.4" - multiformats "^13.1.0" - -"@helia/unixfs@1.4.3": - version "1.4.3" - resolved "https://registry.npmjs.org/@helia/unixfs/-/unixfs-1.4.3.tgz" - integrity sha512-jS0En8fGhb01XH+nnxo3kQsmc1lwBEdlttAZFvTo7HCjBGPNFuaYdwTqF9S1wMVWV2fWqj7eS2zBZZa0MDsi1Q== - dependencies: - "@helia/interface" "^2.0.0" - "@ipld/dag-pb" "^4.0.0" - "@libp2p/interface" "^0.1.2" - "@libp2p/logger" "^3.0.2" - "@multiformats/murmur3" "^2.1.2" - hamt-sharding "^3.0.2" - interface-blockstore "^5.0.0" - ipfs-unixfs "^11.0.0" - ipfs-unixfs-exporter "^13.1.0" - ipfs-unixfs-importer "^15.1.0" - it-glob "^2.0.4" - it-last "^3.0.1" - it-pipe "^3.0.1" - merge-options "^3.0.4" - multiformats "^12.1.1" - progress-events "^1.0.0" - sparse-array "^1.3.2" - -"@helia/unixfs@^3.0.1": - version "3.0.1" - resolved "https://registry.yarnpkg.com/@helia/unixfs/-/unixfs-3.0.1.tgz#9643ff1d531990664c7a9e5c18fad99143ef4b99" - integrity sha512-NgT0gk3oswUK+8IEnJDl6IGv5catSQq6IQ1VrO68ZBpJPpo49CyFCqN5CO8IC3QL3wi4JyJ0sTLXemMVkUsTVA== - dependencies: - "@helia/interface" "^4.0.1" - "@ipld/dag-pb" "^4.1.0" - "@libp2p/interface" "^1.1.4" - "@libp2p/logger" "^4.0.7" - "@multiformats/murmur3" "^2.1.8" - hamt-sharding "^3.0.6" - interface-blockstore "^5.2.10" - ipfs-unixfs "^11.1.3" - ipfs-unixfs-exporter "^13.5.0" - ipfs-unixfs-importer "^15.2.4" - it-all "^3.0.4" - it-glob "^2.0.6" - it-last "^3.0.4" - it-pipe "^3.0.1" - merge-options "^3.0.4" - multiformats "^13.1.0" - progress-events "^1.0.0" - sparse-array "^1.3.2" - uint8arrays "^5.0.2" - -"@ipld/car@5.2.4": - version "5.2.4" - resolved "https://registry.npmjs.org/@ipld/car/-/car-5.2.4.tgz" - integrity sha512-YoVXE/o5HLXKi/Oqh9Nhcn423sdn9brRFKnbUid68/1D332/XINcoyCTvBluFcCw/9IeiTx+sEAV+onXZ/A4eA== - dependencies: - "@ipld/dag-cbor" "^9.0.0" - cborg "^4.0.0" - multiformats "^12.1.0" - varint "^6.0.0" - -"@ipld/car@^5.1.1": - version "5.2.6" - resolved "https://registry.npmjs.org/@ipld/car/-/car-5.2.6.tgz" - integrity sha512-ZiIYan7UFLLQsR90GpKOrZ0t6/6owrevJI7dCG8McNj0zUO4vGzsPumpKRBP4pdBgek4oXt4TbFOwxqTPEh5mA== - dependencies: - "@ipld/dag-cbor" "^9.0.7" - cborg "^4.0.5" - multiformats "^13.0.0" - varint "^6.0.0" - -"@ipld/dag-cbor@^9.0.0", "@ipld/dag-cbor@^9.0.7": +"@ipld/dag-cbor@^9.0.0": version "9.1.0" resolved "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz" integrity sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ== @@ -873,9 +796,9 @@ cborg "^4.0.0" multiformats "^13.0.0" -"@ipld/dag-json@^10.1.7": +"@ipld/dag-json@^10.0.0": version "10.2.0" - resolved "https://registry.yarnpkg.com/@ipld/dag-json/-/dag-json-10.2.0.tgz#32468182ce510284aae75a07e33b3a0da284994e" + resolved "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.0.tgz" integrity sha512-O9YLUrl3d3WbVz7v1WkajFkyfOLEe2Fep+wor4fgVe0ywxzrivrj437NiPcVyB+2EDdFn/Q7tCHFf8YVhDf8ZA== dependencies: cborg "^4.0.0" @@ -888,13 +811,6 @@ dependencies: multiformats "^12.0.1" -"@ipld/dag-pb@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@ipld/dag-pb/-/dag-pb-4.1.0.tgz#4ebec92eeb9e8f317b8ef971221c6dac7b12b302" - integrity sha512-LJU451Drqs5zjFm7jI4Hs3kHlilOqkjcSfPiQgVsZnWaYb2C7YdfhnclrVn/X+ucKejlU9BL3+gXFCZUXkMuCg== - dependencies: - multiformats "^13.1.0" - "@isaacs/cliui@^8.0.2": version "8.0.2" resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" @@ -954,122 +870,103 @@ dependencies: lodash "^4.17.21" -"@libp2p/interface@^0.1.1", "@libp2p/interface@^0.1.2", "@libp2p/interface@^0.1.6": - version "0.1.6" - resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-0.1.6.tgz" - integrity sha512-Lzc5cS/hXuoXhuAbVIxJIHLCYmfPcbU0vVgrpMoiP1Qb2Q3ETU4A46GB8s8mWXgSU6tr9RcqerUqzFYD6+OAag== - dependencies: - "@multiformats/multiaddr" "^12.1.5" - abortable-iterator "^5.0.1" - it-pushable "^3.2.0" - it-stream-types "^2.0.1" - multiformats "^12.0.1" - p-defer "^4.0.0" - race-signal "^1.0.0" - uint8arraylist "^2.4.3" - -"@libp2p/interface@^1.0.0", "@libp2p/interface@^1.0.2": - version "1.0.2" - resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-1.0.2.tgz" - integrity sha512-z/3Yyg+7cVyzRXwzdrDkJd7YmNaLE9iZjQaixo5luI/n9uk5OFFjb9ulAsNqpq8V1xylCo2DXIC7f94KClwzVw== - dependencies: - "@multiformats/multiaddr" "^12.1.10" - it-pushable "^3.2.1" - it-stream-types "^2.0.1" - multiformats "^12.1.3" - uint8arraylist "^2.4.3" +"@leichtgewicht/ip-codec@^2.0.1": + version "2.0.5" + resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" + integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== + +"@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.7": + version "5.1.7" + resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.7.tgz" + integrity sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g== + dependencies: + "@libp2p/interface" "^2.10.5" + "@noble/curves" "^1.9.1" + "@noble/hashes" "^1.8.0" + multiformats "^13.3.6" + protons-runtime "^5.5.0" + uint8arraylist "^2.4.8" + uint8arrays "^5.1.0" -"@libp2p/interface@^1.1.4": - version "1.1.4" - resolved "https://registry.yarnpkg.com/@libp2p/interface/-/interface-1.1.4.tgz#21c7bbbe7628419d1e4902f0c953db1423b0f40f" - integrity sha512-gJXQycTF50tI02X/IlReAav4XoGPs3Yr917vNXsTUsZQRzQaPjbvKfXqA5hkLFpZ1lnxQ8wto/EVw4ca4XaL1A== +"@libp2p/interface@^2.0.0", "@libp2p/interface@^2.10.5": + version "2.10.5" + resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.5.tgz" + integrity sha512-Z52n04Mph/myGdwyExbFi5S/HqrmZ9JOmfLc2v4r2Cik3GRdw98vrGH19PFvvwjLwAjaqsweCtlGaBzAz09YDw== dependencies: - "@multiformats/multiaddr" "^12.1.14" + "@multiformats/dns" "^1.0.6" + "@multiformats/multiaddr" "^12.4.4" it-pushable "^3.2.3" - it-stream-types "^2.0.1" - multiformats "^13.1.0" - progress-events "^1.0.0" + it-stream-types "^2.0.2" + main-event "^1.0.1" + multiformats "^13.3.6" + progress-events "^1.0.1" uint8arraylist "^2.4.8" -"@libp2p/interfaces@^3.3.1", "@libp2p/interfaces@^3.3.2": - version "3.3.2" - resolved "https://registry.npmjs.org/@libp2p/interfaces/-/interfaces-3.3.2.tgz" - integrity sha512-p/M7plbrxLzuQchvNwww1Was7ZeGE2NaOFulMaZBYIihU8z3fhaV+a033OqnC/0NTX/yhfdNOG7znhYq3XoR/g== +"@libp2p/logger@^5.0.0": + version "5.1.21" + resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.21.tgz" + integrity sha512-V1TWlZM5BuKkiGQ7En4qOnseVP82JwDIpIfNjceUZz1ArL32A5HXJjLQnJchkZ3VW8PVciJzUos/vP6slhPY6Q== + dependencies: + "@libp2p/interface" "^2.10.5" + "@multiformats/multiaddr" "^12.4.4" + interface-datastore "^8.3.1" + multiformats "^13.3.6" + weald "^1.0.4" -"@libp2p/logger@^3.0.1", "@libp2p/logger@^3.0.2": - version "3.1.0" - resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-3.1.0.tgz" - integrity sha512-qJbJBAhxHVsRBtQSOIkSLi0lskUSFjzE+zm0QvoyxzZKSz+mX41mZLbnofPIVOVauoDQ40dXpe7WDUOq8AbiQQ== +"@libp2p/peer-id@^5.0.0": + version "5.1.8" + resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.8.tgz" + integrity sha512-pGaM4BwjnXdGtAtd84L4/wuABpsnFYE+AQ+h3GxNFme0IsTaTVKWd1jBBE5YFeKHBHGUOhF3TlHsdjFfjQA7TA== dependencies: - "@libp2p/interface" "^0.1.6" - "@multiformats/multiaddr" "^12.1.5" - debug "^4.3.4" - interface-datastore "^8.2.0" - multiformats "^12.0.1" + "@libp2p/crypto" "^5.1.7" + "@libp2p/interface" "^2.10.5" + multiformats "^13.3.6" + uint8arrays "^5.1.0" -"@libp2p/logger@^4.0.1": - version "4.0.2" - resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-4.0.2.tgz" - integrity sha512-J9UMtMU9BKXNp+3c5kcI7HyWOPYg2B2E6sn1gEQckiSexTaz0wKJSlgTZ89f9F8bkC3AaC8ybXYuHbFQhwpTIg== - dependencies: - "@libp2p/interface" "^1.0.2" - "@multiformats/multiaddr" "^12.1.10" - debug "^4.3.4" - interface-datastore "^8.2.0" - multiformats "^12.1.3" - -"@libp2p/logger@^4.0.6", "@libp2p/logger@^4.0.7": - version "4.0.7" - resolved "https://registry.yarnpkg.com/@libp2p/logger/-/logger-4.0.7.tgz#b5e82135f5c8a6f275c1b2e183333db956f3ed90" - integrity sha512-oyICns7G18S4eDhbFHUwZ7gLQnZTBVQtUMmMgEmrs8LnQu2GvXADxmQAPPkKtLNSCvRudg4hN3hP04Y+vNvlBQ== - dependencies: - "@libp2p/interface" "^1.1.4" - "@multiformats/multiaddr" "^12.1.14" - debug "^4.3.4" - interface-datastore "^8.2.11" - multiformats "^13.1.0" +"@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6": + version "1.0.6" + resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz" + integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== + dependencies: + "@types/dns-packet" "^5.6.5" + buffer "^6.0.3" + dns-packet "^5.6.1" + hashlru "^2.3.0" + p-queue "^8.0.1" + progress-events "^1.0.0" + uint8arrays "^5.0.2" -"@multiformats/multiaddr@^12.1.0", "@multiformats/multiaddr@^12.1.10", "@multiformats/multiaddr@^12.1.5": - version "12.1.11" - resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.1.11.tgz" - integrity sha512-CWG9kETEGTTMdr1T+/JEuMwFld3r3fHNP8LkLoUcLvHRy6yr8sWdotVGEDNEdDO/vrKhuD7bQBws3xMSMMyylg== +"@multiformats/multiaddr-to-uri@^11.0.0": + version "11.0.2" + resolved "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.2.tgz" + integrity sha512-SiLFD54zeOJ0qMgo9xv1Tl9O5YktDKAVDP4q4hL16mSq4O4sfFNagNADz8eAofxd6TfQUzGQ3TkRRG9IY2uHRg== dependencies: - "@chainsafe/is-ip" "^2.0.1" - "@chainsafe/netmask" "^2.0.0" - "@libp2p/interface" "^1.0.0" - dns-over-http-resolver "3.0.0" - multiformats "^12.0.1" - uint8-varint "^2.0.1" - uint8arrays "^4.0.2" + "@multiformats/multiaddr" "^12.3.0" -"@multiformats/multiaddr@^12.1.14": - version "12.1.14" - resolved "https://registry.yarnpkg.com/@multiformats/multiaddr/-/multiaddr-12.1.14.tgz#d021072667f4dfc566cdddcb45feee60fecc8cfd" - integrity sha512-1C0Mo73chzu7pTzTquuKs5vUtw70jhqg1i6pUNznGb0WV6RFa6vyB+D697Os5+cLx+DiItrAY6VzMtlGQsMzYg== +"@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.4.4": + version "12.5.1" + resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz" + integrity sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ== dependencies: "@chainsafe/is-ip" "^2.0.1" "@chainsafe/netmask" "^2.0.0" - "@libp2p/interface" "^1.0.0" - dns-over-http-resolver "^3.0.2" + "@multiformats/dns" "^1.0.3" + abort-error "^1.0.1" multiformats "^13.0.0" uint8-varint "^2.0.1" uint8arrays "^5.0.0" -"@multiformats/murmur3@^2.0.0", "@multiformats/murmur3@^2.1.2": - version "2.1.7" - resolved "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.1.7.tgz" - integrity sha512-Yf0UpAaONjed+8PTt5NM/GG4Z4Ai4m1qfT7bqevjnkwRQ12K+0jxtRomirz+VJx4PokpA2St1ZSD1iMkZTqPRQ== +"@noble/curves@^1.9.1": + version "1.9.2" + resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz" + integrity sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g== dependencies: - multiformats "^12.0.1" - murmurhash3js-revisited "^3.0.0" + "@noble/hashes" "1.8.0" -"@multiformats/murmur3@^2.1.8": - version "2.1.8" - resolved "https://registry.yarnpkg.com/@multiformats/murmur3/-/murmur3-2.1.8.tgz#81c1c15b6391109f3febfca4b3205196615a04e9" - integrity sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA== - dependencies: - multiformats "^13.0.0" - murmurhash3js-revisited "^3.0.0" +"@noble/hashes@1.8.0", "@noble/hashes@^1.8.0": + version "1.8.0" + resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" + integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== "@nodelib/fs.scandir@2.1.5": version "2.1.5" @@ -1097,222 +994,258 @@ resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@rollup/rollup-android-arm-eabi@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz#66b8d9cb2b3a474d115500f9ebaf43e2126fe496" - integrity sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg== - -"@rollup/rollup-android-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz#46327d5b86420d2307946bec1535fdf00356e47d" - integrity sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw== - -"@rollup/rollup-darwin-arm64@4.9.6": - version "4.9.6" - resolved "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz" - integrity sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw== - -"@rollup/rollup-darwin-x64@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz#a2e6e096f74ccea6e2f174454c26aef6bcdd1274" - integrity sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog== - -"@rollup/rollup-linux-arm-gnueabihf@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz#09fcd4c55a2d6160c5865fec708a8e5287f30515" - integrity sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ== - -"@rollup/rollup-linux-arm64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz#19a3c0b6315c747ca9acf86e9b710cc2440f83c9" - integrity sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ== - -"@rollup/rollup-linux-arm64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz#94aaf95fdaf2ad9335983a4552759f98e6b2e850" - integrity sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ== - -"@rollup/rollup-linux-riscv64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz#160510e63f4b12618af4013bddf1761cf9fc9880" - integrity sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA== - -"@rollup/rollup-linux-x64-gnu@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz#5ac5d068ce0726bd0a96ca260d5bd93721c0cb98" - integrity sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw== - -"@rollup/rollup-linux-x64-musl@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz#bafa759ab43e8eab9edf242a8259ffb4f2a57a5d" - integrity sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ== - -"@rollup/rollup-win32-arm64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz#1cc3416682e5a20d8f088f26657e6e47f8db468e" - integrity sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA== - -"@rollup/rollup-win32-ia32-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz#7d2251e1aa5e8a1e47c86891fe4547a939503461" - integrity sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ== - -"@rollup/rollup-win32-x64-msvc@4.9.6": - version "4.9.6" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz#2c1fb69e02a3f1506f52698cfdc3a8b6386df9a6" - integrity sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ== - -"@smithy/abort-controller@^2.0.1", "@smithy/abort-controller@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-2.0.15.tgz" - integrity sha512-JkS36PIS3/UCbq/MaozzV7jECeL+BTt4R75bwY8i+4RASys4xOyUS1HsRyUNSqUXFP4QyCz5aNnh3ltuaxv+pw== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader-native@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-2.0.1.tgz" - integrity sha512-N2oCZRglhWKm7iMBu7S6wDzXirjAofi7tAd26cxmgibRYOBS4D3hGfmkwCpHdASZzwZDD8rluh0Rcqw1JeZDRw== - dependencies: - "@smithy/util-base64" "^2.0.1" - tslib "^2.5.0" - -"@smithy/chunked-blob-reader@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-2.0.0.tgz" - integrity sha512-k+J4GHJsMSAIQPChGBrjEmGS+WbPonCXesoqP9fynIqjn7rdOThdH8FAeCmokP9mxTYKQAKoHCLPzNlm6gh7Wg== - dependencies: - tslib "^2.5.0" - -"@smithy/config-resolver@^2.0.21": - version "2.0.21" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-2.0.21.tgz" - integrity sha512-rlLIGT+BeqjnA6C2FWumPRJS1UW07iU5ZxDHtFuyam4W65gIaOFMjkB90ofKCIh+0mLVQrQFrl/VLtQT/6FWTA== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - "@smithy/util-config-provider" "^2.0.0" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@smithy/core@^1.2.0": - version "1.2.1" - resolved "https://registry.npmjs.org/@smithy/core/-/core-1.2.1.tgz" - integrity sha512-f6cwmMuHo7RIw/c184NBd2rGeGvGIX6p55HSrG5jfR3qkNYo80PHRfhzkJMq1+mv1ZjI5p8NhenWMMkIRJR4tw== - dependencies: - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-retry" "^2.0.25" - "@smithy/middleware-serde" "^2.0.15" - "@smithy/protocol-http" "^3.0.11" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@smithy/credential-provider-imds@^2.0.0", "@smithy/credential-provider-imds@^2.1.4": - version "2.1.4" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-2.1.4.tgz" - integrity sha512-cwPJN1fa1YOQzhBlTXRavABEYRRchci1X79QRwzaNLySnIMJfztyv1Zkst0iZPLMnpn8+CnHu3wOHS11J5Dr3A== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/property-provider" "^2.0.16" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - tslib "^2.5.0" - -"@smithy/eventstream-codec@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-2.0.15.tgz" - integrity sha512-crjvz3j1gGPwA0us6cwS7+5gAn35CTmqu/oIxVbYJo2Qm/sGAye6zGJnMDk3BKhWZw5kcU1G4MxciTkuBpOZPg== - dependencies: - "@aws-crypto/crc32" "3.0.0" - "@smithy/types" "^2.7.0" - "@smithy/util-hex-encoding" "^2.0.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-browser@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-2.0.15.tgz" - integrity sha512-WiFG5N9j3jmS5P0z5Xev6dO0c3lf7EJYC2Ncb0xDnWFvShwXNn741AF71ABr5EcZw8F4rQma0362MMjAwJeZog== - dependencies: - "@smithy/eventstream-serde-universal" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-config-resolver@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-2.0.15.tgz" - integrity sha512-o65d2LRjgCbWYH+VVNlWXtmsI231SO99ZTOL4UuIPa6WTjbSHWtlXvUcJG9libhEKWmEV9DIUiH2IqyPWi7ubA== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-node@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-2.0.15.tgz" - integrity sha512-9OOXiIhHq1VeOG6xdHkn2ZayfMYM3vzdUTV3zhcCnt+tMqA3BJK3XXTJFRR2BV28rtRM778DzqbBTf+hqwQPTg== - dependencies: - "@smithy/eventstream-serde-universal" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/eventstream-serde-universal@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-2.0.15.tgz" - integrity sha512-dP8AQp/pXlWBjvL0TaPBJC3rM0GoYv7O0Uim8d/7UKZ2Wo13bFI3/BhQfY/1DeiP1m23iCHFNFtOQxfQNBB8rQ== - dependencies: - "@smithy/eventstream-codec" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/fetch-http-handler@^2.3.1": - version "2.3.1" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-2.3.1.tgz" - integrity sha512-6MNk16fqb8EwcYY8O8WxB3ArFkLZ2XppsSNo1h7SQcFdDDwIumiJeO6wRzm7iB68xvsOQzsdQKbdtTieS3hfSQ== +"@rollup/rollup-android-arm-eabi@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.0.tgz#0592252f7550bc0ea0474bb5a22430850f92bdbd" + integrity sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg== + +"@rollup/rollup-android-arm64@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.0.tgz#00a51d1d4380cc677da80ac9da1a19e7806bf57e" + integrity sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ== + +"@rollup/rollup-darwin-arm64@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.0.tgz#6638299dd282ebde1ebdf7dc5b0f150aa6e256e5" + integrity sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg== + +"@rollup/rollup-darwin-x64@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.0.tgz#33e61daa0a66890059648feda78e1075d4ea1bcb" + integrity sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA== + +"@rollup/rollup-freebsd-arm64@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.0.tgz#2cc4bd3ba7026cd5374e902285ce76e8fae0f6eb" + integrity sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA== + +"@rollup/rollup-freebsd-x64@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.0.tgz#64664ba3015deac473a5d6d6c60c068f274bf2d5" + integrity sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw== + +"@rollup/rollup-linux-arm-gnueabihf@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.0.tgz#7ab16acae3bcae863e9a9bc32038cd05e794a0ff" + integrity sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA== + +"@rollup/rollup-linux-arm-musleabihf@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.0.tgz#bef91b1e924ab57e82e767dc2655264bbde7acc6" + integrity sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw== + +"@rollup/rollup-linux-arm64-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.0.tgz#0a811b16da334125f6e44570d0badf543876f49e" + integrity sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g== + +"@rollup/rollup-linux-arm64-musl@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.0.tgz#e8c166efe3cb963faaa924c7721eafbade63036f" + integrity sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg== + +"@rollup/rollup-linux-loongarch64-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.0.tgz#239feea00fa2a1e734bdff09b8d1c90def2abbf5" + integrity sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA== + +"@rollup/rollup-linux-powerpc64le-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.0.tgz#1de2f926bddbf7d689a089277c1284ea6df4b6d1" + integrity sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw== + +"@rollup/rollup-linux-riscv64-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.0.tgz#28dbac643244e477a7b931feb9b475aa826f84c1" + integrity sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w== + +"@rollup/rollup-linux-riscv64-musl@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.0.tgz#5d05eeaedadec3625cd50e3ca5d35ef6f96a4bf0" + integrity sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA== + +"@rollup/rollup-linux-s390x-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.0.tgz#55b0790f499fb7adc14eb074c4e46aef92915813" + integrity sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g== + +"@rollup/rollup-linux-x64-gnu@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.0.tgz#e822632fe5b324b16bdc37149149c8c760b031fd" + integrity sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw== + +"@rollup/rollup-linux-x64-musl@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.0.tgz#19a3602cb8fabd7eb3087f0a1e1e01adac31bbff" + integrity sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ== + +"@rollup/rollup-win32-arm64-msvc@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.0.tgz#42e08bf3ea4fc463fc9f199c4f0310a736f03eb1" + integrity sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ== + +"@rollup/rollup-win32-ia32-msvc@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.0.tgz#043d25557f59d7e28dfe38ee1f60ddcb95a08124" + integrity sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug== + +"@rollup/rollup-win32-x64-msvc@4.45.0": + version "4.45.0" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz#0a7eecae41f463d6591c8fecd7a5c5087345ee36" + integrity sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA== + +"@smithy/abort-controller@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz" + integrity sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/chunked-blob-reader-native@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz" + integrity sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig== dependencies: - "@smithy/protocol-http" "^3.0.11" - "@smithy/querystring-builder" "^2.0.15" - "@smithy/types" "^2.7.0" - "@smithy/util-base64" "^2.0.1" - tslib "^2.5.0" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" -"@smithy/hash-blob-browser@^2.0.16": - version "2.0.16" - resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-2.0.16.tgz" - integrity sha512-cSYRi05LA7DZDwjB1HL0BP8B56eUNNeLglVH147QTXFyuXJq/7erAIiLRfsyXB8+GfFHkSS5BHbc76a7k/AYPA== +"@smithy/chunked-blob-reader@^5.0.0": + version "5.0.0" + resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz" + integrity sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw== + dependencies: + tslib "^2.6.2" + +"@smithy/config-resolver@^4.1.4": + version "4.1.4" + resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz" + integrity sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + "@smithy/util-config-provider" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + +"@smithy/core@^3.6.0", "@smithy/core@^3.7.0": + version "3.7.0" + resolved "https://registry.npmjs.org/@smithy/core/-/core-3.7.0.tgz" + integrity sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ== + dependencies: + "@smithy/middleware-serde" "^4.0.8" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-body-length-browser" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-stream" "^4.2.3" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/credential-provider-imds@^4.0.6": + version "4.0.6" + resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz" + integrity sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + tslib "^2.6.2" + +"@smithy/eventstream-codec@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz" + integrity sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig== + dependencies: + "@aws-crypto/crc32" "5.2.0" + "@smithy/types" "^4.3.1" + "@smithy/util-hex-encoding" "^4.0.0" + tslib "^2.6.2" + +"@smithy/eventstream-serde-browser@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz" + integrity sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA== + dependencies: + "@smithy/eventstream-serde-universal" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/eventstream-serde-config-resolver@^4.1.2": + version "4.1.2" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz" + integrity sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ== dependencies: - "@smithy/chunked-blob-reader" "^2.0.0" - "@smithy/chunked-blob-reader-native" "^2.0.1" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/hash-node@^2.0.17": - version "2.0.17" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-2.0.17.tgz" - integrity sha512-Il6WuBcI1nD+e2DM7tTADMf01wEPGK8PAhz4D+YmDUVaoBqlA+CaH2uDJhiySifmuKBZj748IfygXty81znKhw== +"@smithy/eventstream-serde-node@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz" + integrity sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" + "@smithy/eventstream-serde-universal" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/hash-stream-node@^2.0.17": - version "2.0.17" - resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-2.0.17.tgz" - integrity sha512-ey8DtnATzp1mOXgS7rqMwSmAki6iJA+jgNucKcxRkhMB1rrICfHg+rhmIF50iLPDHUhTcS5pBMOrLzzpZftvNQ== +"@smithy/eventstream-serde-universal@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz" + integrity sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA== dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" + "@smithy/eventstream-codec" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/invalid-dependency@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-2.0.15.tgz" - integrity sha512-dlEKBFFwVfzA5QroHlBS94NpgYjXhwN/bFfun+7w3rgxNvVy79SK0w05iGc7UAeC5t+D7gBxrzdnD6hreZnDVQ== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" +"@smithy/fetch-http-handler@^5.0.4", "@smithy/fetch-http-handler@^5.1.0": + version "5.1.0" + resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz" + integrity sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/querystring-builder" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-blob-browser@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz" + integrity sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ== + dependencies: + "@smithy/chunked-blob-reader" "^5.0.0" + "@smithy/chunked-blob-reader-native" "^4.0.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/hash-node@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz" + integrity sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/hash-stream-node@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz" + integrity sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/invalid-dependency@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz" + integrity sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" "@smithy/is-array-buffer@^2.0.0": version "2.0.0" @@ -1321,200 +1254,211 @@ dependencies: tslib "^2.5.0" -"@smithy/md5-js@^2.0.17": - version "2.0.17" - resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-2.0.17.tgz" - integrity sha512-jmISTCnEkOnm2oCNx/rMkvBT/eQh3aA6nktevkzbmn/VYqYEuc5Z2n5sTTqsciMSO01Lvf56wG1A4twDqovYeQ== - dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" - -"@smithy/middleware-content-length@^2.0.17": - version "2.0.17" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-2.0.17.tgz" - integrity sha512-OyadvMcKC7lFXTNBa8/foEv7jOaqshQZkjWS9coEXPRZnNnihU/Ls+8ZuJwGNCOrN2WxXZFmDWhegbnM4vak8w== - dependencies: - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/middleware-endpoint@^2.2.3": - version "2.2.3" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-2.2.3.tgz" - integrity sha512-nYfxuq0S/xoAjdLbyn1ixeVB6cyH9wYCMtbbOCpcCRYR5u2mMtqUtVjjPAZ/DIdlK3qe0tpB0Q76szFGNuz+kQ== - dependencies: - "@smithy/middleware-serde" "^2.0.15" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/shared-ini-file-loader" "^2.2.7" - "@smithy/types" "^2.7.0" - "@smithy/url-parser" "^2.0.15" - "@smithy/util-middleware" "^2.0.8" - tslib "^2.5.0" - -"@smithy/middleware-retry@^2.0.24", "@smithy/middleware-retry@^2.0.25": - version "2.0.25" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-2.0.25.tgz" - integrity sha512-FXhafCPvx/9L9OgHJ3cdo/pD1f7ngC7DKsjDV2J7k6LO/Yl69POoBLk4sI1OZPUGc4dfxriENlTma9Nj1hI+IQ== - dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/protocol-http" "^3.0.11" - "@smithy/service-error-classification" "^2.0.8" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - "@smithy/util-middleware" "^2.0.8" - "@smithy/util-retry" "^2.0.8" - tslib "^2.5.0" - uuid "^8.3.2" - -"@smithy/middleware-serde@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-2.0.15.tgz" - integrity sha512-FOZRFk/zN4AT4wzGuBY+39XWe+ZnCFd0gZtyw3f9Okn2CJPixl9GyWe98TIaljeZdqWkgrzGyPre20AcW2UMHQ== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/middleware-stack@^2.0.9": - version "2.0.9" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-2.0.9.tgz" - integrity sha512-bCB5dUtGQ5wh7QNL2ELxmDc6g7ih7jWU3Kx6MYH1h4mZbv9xL3WyhKHojRltThCB1arLPyTUFDi+x6fB/oabtA== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/node-config-provider@^2.1.8": - version "2.1.8" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-2.1.8.tgz" - integrity sha512-+w26OKakaBUGp+UG+dxYZtFb5fs3tgHg3/QrRrmUZj+rl3cIuw840vFUXX35cVPTUCQIiTqmz7CpVF7+hdINdQ== - dependencies: - "@smithy/property-provider" "^2.0.16" - "@smithy/shared-ini-file-loader" "^2.2.7" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/node-http-handler@^2.2.1": - version "2.2.1" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-2.2.1.tgz" - integrity sha512-8iAKQrC8+VFHPAT8pg4/j6hlsTQh+NKOWlctJBrYtQa4ExcxX7aSg3vdQ2XLoYwJotFUurg/NLqFCmZaPRrogw== - dependencies: - "@smithy/abort-controller" "^2.0.15" - "@smithy/protocol-http" "^3.0.11" - "@smithy/querystring-builder" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/property-provider@^2.0.0", "@smithy/property-provider@^2.0.16": - version "2.0.16" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-2.0.16.tgz" - integrity sha512-28Ky0LlOqtEjwg5CdHmwwaDRHcTWfPRzkT6HrhwOSRS2RryAvuDfJrZpM+BMcrdeCyEg1mbcgIMoqTla+rdL8Q== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/protocol-http@^3.0.11": - version "3.0.11" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-3.0.11.tgz" - integrity sha512-3ziB8fHuXIRamV/akp/sqiWmNPR6X+9SB8Xxnozzj+Nq7hSpyKdFHd1FLpBkgfGFUTzzcBJQlDZPSyxzmdcx5A== - dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/querystring-builder@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-2.0.15.tgz" - integrity sha512-e1q85aT6HutvouOdN+dMsN0jcdshp50PSCvxDvo6aIM57LqeXimjfONUEgfqQ4IFpYWAtVixptyIRE5frMp/2A== - dependencies: - "@smithy/types" "^2.7.0" - "@smithy/util-uri-escape" "^2.0.0" - tslib "^2.5.0" - -"@smithy/querystring-parser@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-2.0.15.tgz" - integrity sha512-jbBvoK3cc81Cj1c1TH1qMYxNQKHrYQ2DoTntN9FBbtUWcGhc+T4FP6kCKYwRLXyU4AajwGIZstvNAmIEgUUNTQ== +"@smithy/is-array-buffer@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" + integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== + dependencies: + tslib "^2.6.2" + +"@smithy/md5-js@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz" + integrity sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg== + dependencies: + "@smithy/types" "^4.3.1" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/middleware-content-length@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz" + integrity sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/middleware-endpoint@^4.1.13", "@smithy/middleware-endpoint@^4.1.14": + version "4.1.14" + resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.14.tgz" + integrity sha512-+BGLpK5D93gCcSEceaaYhUD/+OCGXM1IDaq/jKUQ+ujB0PTWlWN85noodKw/IPFZhIKFCNEe19PGd/reUMeLSQ== + dependencies: + "@smithy/core" "^3.7.0" + "@smithy/middleware-serde" "^4.0.8" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + "@smithy/url-parser" "^4.0.4" + "@smithy/util-middleware" "^4.0.4" + tslib "^2.6.2" + +"@smithy/middleware-retry@^4.1.14": + version "4.1.15" + resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.15.tgz" + integrity sha512-iKYUJpiyTQ33U2KlOZeUb0GwtzWR3C0soYcKuCnTmJrvt6XwTPQZhMfsjJZNw7PpQ3TU4Ati1qLSrkSJxnnSMQ== + dependencies: + "@smithy/node-config-provider" "^4.1.3" + "@smithy/protocol-http" "^5.1.2" + "@smithy/service-error-classification" "^4.0.6" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-retry" "^4.0.6" + tslib "^2.6.2" + uuid "^9.0.1" + +"@smithy/middleware-serde@^4.0.8": + version "4.0.8" + resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz" + integrity sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw== + dependencies: + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/middleware-stack@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz" + integrity sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA== + dependencies: + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/node-config-provider@^4.1.3": + version "4.1.3" + resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz" + integrity sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw== + dependencies: + "@smithy/property-provider" "^4.0.4" + "@smithy/shared-ini-file-loader" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/node-http-handler@^4.0.6", "@smithy/node-http-handler@^4.1.0": + version "4.1.0" + resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz" + integrity sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg== dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/abort-controller" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/querystring-builder" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/service-error-classification@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-2.0.8.tgz" - integrity sha512-jCw9+005im8tsfYvwwSc4TTvd29kXRFkH9peQBg5R/4DD03ieGm6v6Hpv9nIAh98GwgYg1KrztcINC1s4o7/hg== +"@smithy/property-provider@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz" + integrity sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw== dependencies: - "@smithy/types" "^2.7.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/shared-ini-file-loader@^2.0.6", "@smithy/shared-ini-file-loader@^2.2.7": - version "2.2.7" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-2.2.7.tgz" - integrity sha512-0Qt5CuiogIuvQIfK+be7oVHcPsayLgfLJGkPlbgdbl0lD28nUKu4p11L+UG3SAEsqc9UsazO+nErPXw7+IgDpQ== +"@smithy/protocol-http@^5.1.2": + version "5.1.2" + resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz" + integrity sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ== dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/signature-v4@^2.0.0": - version "2.0.18" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-2.0.18.tgz" - integrity sha512-SJRAj9jT/l9ocm8D0GojMbnA1sp7I4JeStOQ4lEXI8A5eHE73vbjlzlqIFB7cLvIgau0oUl4cGVpF9IGCrvjlw== +"@smithy/querystring-builder@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz" + integrity sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w== dependencies: - "@smithy/eventstream-codec" "^2.0.15" - "@smithy/is-array-buffer" "^2.0.0" - "@smithy/types" "^2.7.0" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-middleware" "^2.0.8" - "@smithy/util-uri-escape" "^2.0.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + "@smithy/util-uri-escape" "^4.0.0" + tslib "^2.6.2" -"@smithy/smithy-client@^2.1.18", "@smithy/smithy-client@^2.2.0": - version "2.2.0" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-2.2.0.tgz" - integrity sha512-C/bkNue5H5Obgl83SnlBt4v6VM68CqIjIELh3vAabud87xFYznLNKtj6Qb69Z+QOnLp9T+We++sEem/f2AHE+Q== +"@smithy/querystring-parser@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz" + integrity sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w== dependencies: - "@smithy/middleware-endpoint" "^2.2.3" - "@smithy/middleware-stack" "^2.0.9" - "@smithy/protocol-http" "^3.0.11" - "@smithy/types" "^2.7.0" - "@smithy/util-stream" "^2.0.23" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/types@^2.7.0": - version "2.7.0" - resolved "https://registry.npmjs.org/@smithy/types/-/types-2.7.0.tgz" - integrity sha512-1OIFyhK+vOkMbu4aN2HZz/MomREkrAC/HqY5mlJMUJfGrPRwijJDTeiN8Rnj9zUaB8ogXAfIOtZrrgqZ4w7Wnw== +"@smithy/service-error-classification@^4.0.6": + version "4.0.6" + resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz" + integrity sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg== dependencies: - tslib "^2.5.0" + "@smithy/types" "^4.3.1" -"@smithy/url-parser@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-2.0.15.tgz" - integrity sha512-sADUncUj9rNbOTrdDGm4EXlUs0eQ9dyEo+V74PJoULY4jSQxS+9gwEgsPYyiu8PUOv16JC/MpHonOgqP/IEDZA== +"@smithy/shared-ini-file-loader@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz" + integrity sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw== dependencies: - "@smithy/querystring-parser" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/util-base64@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-2.0.1.tgz" - integrity sha512-DlI6XFYDMsIVN+GH9JtcRp3j02JEVuWIn/QOZisVzpIAprdsxGveFed0bjbMRCqmIFe8uetn5rxzNrBtIGrPIQ== +"@smithy/signature-v4@^5.1.2": + version "5.1.2" + resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz" + integrity sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ== + dependencies: + "@smithy/is-array-buffer" "^4.0.0" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-middleware" "^4.0.4" + "@smithy/util-uri-escape" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/smithy-client@^4.4.5", "@smithy/smithy-client@^4.4.6": + version "4.4.6" + resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.6.tgz" + integrity sha512-3wfhywdzB/CFszP6moa5L3lf5/zSfQoH0kvVSdkyK2az5qZet0sn2PAHjcTDiq296Y4RP5yxF7B6S6+3oeBUCQ== + dependencies: + "@smithy/core" "^3.7.0" + "@smithy/middleware-endpoint" "^4.1.14" + "@smithy/middleware-stack" "^4.0.4" + "@smithy/protocol-http" "^5.1.2" + "@smithy/types" "^4.3.1" + "@smithy/util-stream" "^4.2.3" + tslib "^2.6.2" + +"@smithy/types@^4.3.1": + version "4.3.1" + resolved "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz" + integrity sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA== + dependencies: + tslib "^2.6.2" + +"@smithy/url-parser@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz" + integrity sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ== + dependencies: + "@smithy/querystring-parser" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/util-base64@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" + integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== dependencies: - "@smithy/util-buffer-from" "^2.0.0" - tslib "^2.5.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" -"@smithy/util-body-length-browser@^2.0.1": - version "2.0.1" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-2.0.1.tgz" - integrity sha512-NXYp3ttgUlwkaug4bjBzJ5+yIbUbUx8VsSLuHZROQpoik+gRkIBeEG9MPVYfvPNpuXb/puqodeeUXcKFe7BLOQ== +"@smithy/util-body-length-browser@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" + integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-body-length-node@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-2.1.0.tgz" - integrity sha512-/li0/kj/y3fQ3vyzn36NTLGmUwAICb7Jbe/CsWCktW363gh1MOcpEcSO3mJ344Gv2dqz8YJCLQpb6hju/0qOWw== +"@smithy/util-body-length-node@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" + integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" "@smithy/util-buffer-from@^2.0.0": version "2.0.0" @@ -1524,92 +1468,100 @@ "@smithy/is-array-buffer" "^2.0.0" tslib "^2.5.0" -"@smithy/util-config-provider@^2.0.0": - 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== +"@smithy/util-buffer-from@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" + integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== dependencies: - tslib "^2.5.0" + "@smithy/is-array-buffer" "^4.0.0" + tslib "^2.6.2" -"@smithy/util-defaults-mode-browser@^2.0.22": - version "2.0.23" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-2.0.23.tgz" - integrity sha512-2u+7t7Wgz1jlfsf6il3pz6DIzyJHS3qrnNnmATICm00pQeqp2D4kUOYauOgKGIeKgVpwzzq8+hFQe749r3xR5w== +"@smithy/util-config-provider@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" + integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== dependencies: - "@smithy/property-provider" "^2.0.16" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - bowser "^2.11.0" - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-defaults-mode-node@^2.0.29": - version "2.0.30" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-2.0.30.tgz" - integrity sha512-nmcmEyRlClNprp7mBnUzfmW6HrKQK+yvl+cyXCRUoQSxRvZuLDrztV+JD+zr3qV/oirEc4Q0QNIrrhTDCE6JeA== - dependencies: - "@smithy/config-resolver" "^2.0.21" - "@smithy/credential-provider-imds" "^2.1.4" - "@smithy/node-config-provider" "^2.1.8" - "@smithy/property-provider" "^2.0.16" - "@smithy/smithy-client" "^2.2.0" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/util-endpoints@^1.0.7": - version "1.0.7" - resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-1.0.7.tgz" - integrity sha512-Q2gEind3jxoLk6hdKWyESMU7LnXz8aamVwM+VeVjOYzYT1PalGlY/ETa48hv2YpV4+YV604y93YngyzzzQ4IIA== +"@smithy/util-defaults-mode-browser@^4.0.21": + version "4.0.22" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.22.tgz" + integrity sha512-hjElSW18Wq3fUAWVk6nbk7pGrV7ZT14DL1IUobmqhV3lxcsIenr5FUsDe2jlTVaS8OYBI3x+Og9URv5YcKb5QA== dependencies: - "@smithy/node-config-provider" "^2.1.8" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" - -"@smithy/util-hex-encoding@^2.0.0": - 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== + "@smithy/property-provider" "^4.0.4" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + bowser "^2.11.0" + tslib "^2.6.2" + +"@smithy/util-defaults-mode-node@^4.0.21": + version "4.0.22" + resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.22.tgz" + integrity sha512-7B8mfQBtwwr2aNRRmU39k/bsRtv9B6/1mTMrGmmdJFKmLAH+KgIiOuhaqfKOBGh9sZ/VkZxbvm94rI4MMYpFjQ== + dependencies: + "@smithy/config-resolver" "^4.1.4" + "@smithy/credential-provider-imds" "^4.0.6" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/property-provider" "^4.0.4" + "@smithy/smithy-client" "^4.4.6" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@smithy/util-endpoints@^3.0.6": + version "3.0.6" + resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz" + integrity sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA== dependencies: - tslib "^2.5.0" + "@smithy/node-config-provider" "^4.1.3" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/util-middleware@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-2.0.8.tgz" - integrity sha512-qkvqQjM8fRGGA8P2ydWylMhenCDP8VlkPn8kiNuFEaFz9xnUKC2irfqsBSJrfrOB9Qt6pQsI58r3zvvumhFMkw== +"@smithy/util-hex-encoding@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" + integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== dependencies: - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-retry@^2.0.8": - version "2.0.8" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-2.0.8.tgz" - integrity sha512-cQTPnVaVFMjjS6cb44WV2yXtHVyXDC5icKyIbejMarJEApYeJWpBU3LINTxHqp/tyLI+MZOUdosr2mZ3sdziNg== +"@smithy/util-middleware@^4.0.4": + version "4.0.4" + resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz" + integrity sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ== dependencies: - "@smithy/service-error-classification" "^2.0.8" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/util-stream@^2.0.23": - version "2.0.23" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-2.0.23.tgz" - integrity sha512-OJMWq99LAZJUzUwTk+00plyxX3ESktBaGPhqNIEVab+53gLULiWN9B/8bRABLg0K6R6Xg4t80uRdhk3B/LZqMQ== +"@smithy/util-retry@^4.0.6": + version "4.0.6" + resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz" + integrity sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg== dependencies: - "@smithy/fetch-http-handler" "^2.3.1" - "@smithy/node-http-handler" "^2.2.1" - "@smithy/types" "^2.7.0" - "@smithy/util-base64" "^2.0.1" - "@smithy/util-buffer-from" "^2.0.0" - "@smithy/util-hex-encoding" "^2.0.0" - "@smithy/util-utf8" "^2.0.2" - tslib "^2.5.0" + "@smithy/service-error-classification" "^4.0.6" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" -"@smithy/util-uri-escape@^2.0.0": - 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== +"@smithy/util-stream@^4.2.2", "@smithy/util-stream@^4.2.3": + version "4.2.3" + resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz" + integrity sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg== + dependencies: + "@smithy/fetch-http-handler" "^5.1.0" + "@smithy/node-http-handler" "^4.1.0" + "@smithy/types" "^4.3.1" + "@smithy/util-base64" "^4.0.0" + "@smithy/util-buffer-from" "^4.0.0" + "@smithy/util-hex-encoding" "^4.0.0" + "@smithy/util-utf8" "^4.0.0" + tslib "^2.6.2" + +"@smithy/util-uri-escape@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" + integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== dependencies: - tslib "^2.5.0" + tslib "^2.6.2" -"@smithy/util-utf8@^2.0.2": +"@smithy/util-utf8@^2.0.0": version "2.0.2" resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz" integrity sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA== @@ -1617,19 +1569,34 @@ "@smithy/util-buffer-from" "^2.0.0" tslib "^2.5.0" -"@smithy/util-waiter@^2.0.15": - version "2.0.15" - resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-2.0.15.tgz" - integrity sha512-9Y+btzzB7MhLADW7xgD6SjvmoYaRkrb/9SCbNGmNdfO47v38rxb90IGXyDtAK0Shl9bMthTmLgjlfYc+vtz2Qw== +"@smithy/util-utf8@^4.0.0": + version "4.0.0" + resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" + integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== dependencies: - "@smithy/abort-controller" "^2.0.15" - "@smithy/types" "^2.7.0" - tslib "^2.5.0" + "@smithy/util-buffer-from" "^4.0.0" + tslib "^2.6.2" -"@types/estree@1.0.5": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz" - integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw== +"@smithy/util-waiter@^4.0.6": + version "4.0.6" + resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz" + integrity sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg== + dependencies: + "@smithy/abort-controller" "^4.0.4" + "@smithy/types" "^4.3.1" + tslib "^2.6.2" + +"@types/dns-packet@^5.6.5": + version "5.6.5" + resolved "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz" + integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== + dependencies: + "@types/node" "*" + +"@types/estree@1.0.8": + version "1.0.8" + resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/linkify-it@*": version "3.0.5" @@ -1649,23 +1616,27 @@ resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz" integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== +"@types/node@*": + version "24.0.13" + resolved "https://registry.npmjs.org/@types/node/-/node-24.0.13.tgz" + integrity sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ== + dependencies: + undici-types "~7.8.0" + "@types/triple-beam@^1.3.2": version "1.3.5" - resolved "https://registry.yarnpkg.com/@types/triple-beam/-/triple-beam-1.3.5.tgz#74fef9ffbaa198eb8b588be029f38b00299caa2c" + resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== -"@vascosantos/moving-average@^1.1.0": - version "1.1.0" - resolved "https://registry.npmjs.org/@vascosantos/moving-average/-/moving-average-1.1.0.tgz" - integrity sha512-MVEJ4vWAPNbrGLjz7ITnHYg+YXZ6ijAqtH5/cHwSoCpbvuJ98aLXwFfPKAUfZpJMQR5uXB58UJajbY130IRF/w== +"@types/uuid@^9.0.1": + version "9.0.8" + resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" + integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== -abortable-iterator@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/abortable-iterator/-/abortable-iterator-5.0.1.tgz" - integrity sha512-hlZ5Z8UwqrKsJcelVPEqDduZowJPBQJ9ZhBC2FXpja3lXy8X6MoI5uMzIgmrA8+3jcVnp8TF/tx+IBBqYJNUrg== - dependencies: - get-iterator "^2.0.0" - it-stream-types "^2.0.1" +abort-error@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz" + integrity sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg== acorn@^8.8.2: version "8.11.2" @@ -1724,7 +1695,7 @@ array-union@^2.1.0: async@^3.2.3: version "3.2.5" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.5.tgz#ebd52a8fdaf7a2289a24df399f8d8485c8a46b66" + resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== asynckit@^0.4.0: @@ -1732,12 +1703,12 @@ asynckit@^0.4.0: resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== -axios@1.6.2: - version "1.6.2" - resolved "https://registry.npmjs.org/axios/-/axios-1.6.2.tgz" - integrity sha512-7i24Ri4pmDRfJTR7LDBhsOTtcm+9kjX5WiY1X3wIisx6G9So3pfMkEiU7emUBe46oceVImccTEM3k6C5dbVW8A== +axios@1.10.0: + version "1.10.0" + resolved "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz" + integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== dependencies: - follow-redirects "^1.15.0" + follow-redirects "^1.15.6" form-data "^4.0.0" proxy-from-env "^1.1.0" @@ -1746,69 +1717,22 @@ balanced-match@^1.0.0: resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== -base64-js@^1.0.2, base64-js@^1.3.1: +base64-js@^1.3.1: version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -binary-extensions@^2.0.0: - version "2.2.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz" - integrity sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA== - -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -blockstore-core@4.4.1: - version "4.4.1" - resolved "https://registry.yarnpkg.com/blockstore-core/-/blockstore-core-4.4.1.tgz#0804c8a00f096c43e1b679b1711a66157a421c5e" - integrity sha512-peXfL9ZLx1cb84QALocMjhT8CsQ4JsreI/AitlN1inipSdC/G+jcYVJCqeCD5ecSTv/0LMpg8NlAPH/eBYZLjA== - dependencies: - "@libp2p/logger" "^4.0.6" - err-code "^3.0.1" - interface-blockstore "^5.0.0" - interface-store "^5.0.0" - it-drain "^3.0.5" - it-filter "^3.0.4" - it-merge "^3.0.3" - it-pushable "^3.2.3" - multiformats "^13.0.1" - -blockstore-core@^4.0.0: - version "4.3.8" - resolved "https://registry.npmjs.org/blockstore-core/-/blockstore-core-4.3.8.tgz" - integrity sha512-Agunhjw9w0I1OoJn012OpzJwBRm3Nf+v64N2FaZSsF3UGhoQAu4RePLuIBsZrPh4XRqT5Yg1rHoBYJGDhDmkWQ== - dependencies: - "@libp2p/logger" "^4.0.1" - err-code "^3.0.1" - interface-blockstore "^5.0.0" - interface-store "^5.0.0" - it-drain "^3.0.1" - it-filter "^3.0.0" - it-merge "^3.0.1" - it-pushable "^3.0.0" - multiformats "^12.0.1" - uint8arrays "^5.0.0" + resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +binary-extensions@^2.0.0: + version "2.3.0" + resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" + integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== -blockstore-fs@1.1.10: - version "1.1.10" - resolved "https://registry.yarnpkg.com/blockstore-fs/-/blockstore-fs-1.1.10.tgz#0dc8119b0bc293e6df4e056356e33e85528c7a05" - integrity sha512-Dg0mbdma0OY4NEk78efcAAiG5ZrMcIVrM7s+0e2p4uavnvrcBT6vDj5ITfnRfid3idKHOoCYShGEi9ENNgJg1A== +blob-to-it@^2.0.5: + version "2.0.10" + resolved "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.10.tgz" + integrity sha512-I39vO57y+LBEIcAV7fif0sn96fYOYVqrPiOD+53MxQGv4DBgt1/HHZh0BHheWx2hVe24q5LTSXxqeV1Y3Nzkgg== dependencies: - blockstore-core "^4.0.0" - fast-write-atomic "^0.2.1" - interface-blockstore "^5.0.0" - interface-store "^5.0.0" - it-glob "^2.0.6" - it-map "^3.0.5" - it-parallel-batch "^3.0.4" - multiformats "^13.0.1" + browser-readablestream-to-it "^2.0.0" bluebird@^3.7.2: version "3.7.2" @@ -1827,26 +1751,23 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.2, braces@~3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== +braces@^3.0.3, braces@~3.0.2: + version "3.0.3" + resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== dependencies: - fill-range "^7.0.1" + fill-range "^7.1.1" + +browser-readablestream-to-it@^2.0.0, browser-readablestream-to-it@^2.0.5: + version "2.0.10" + resolved "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.10.tgz" + integrity sha512-I/9hEcRtjct8CzD9sVo9Mm4ntn0D+7tOVrjbPl69XAoOfgJ8NBdOQU+WX+5SHhcELJDb14mWt7zuvyqha+MEAQ== buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== -buffer@5.6.0: - version "5.6.0" - resolved "https://registry.npmjs.org/buffer/-/buffer-5.6.0.tgz" - integrity sha512-/gDYp/UtU0eA1ys8bOs9J6a+E/KWIY+DZ+Q2WESNUA0jFRsJOc0SNUO6xJ5SGA1xueg3NL65W6s+NY5l9cunuw== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - buffer@^6.0.3: version "6.0.3" resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" @@ -1856,9 +1777,9 @@ buffer@^6.0.3: ieee754 "^1.2.1" bundle-require@^4.0.0: - version "4.0.2" - resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz" - integrity sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag== + version "4.2.1" + resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz" + integrity sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA== dependencies: load-tsconfig "^0.2.3" @@ -1882,15 +1803,15 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" -cborg@^4.0.0, cborg@^4.0.3, cborg@^4.0.5: - version "4.0.5" - resolved "https://registry.npmjs.org/cborg/-/cborg-4.0.5.tgz" - integrity sha512-q8TAjprr8pn9Fp53rOIGp/UFDdFY6os2Nq62YogPSIzczJD9M6g2b6igxMkpCiZZKJ0kn/KzDLDvG+EqBIEeCg== +cborg@^4.0.0, cborg@^4.2.3: + version "4.2.12" + resolved "https://registry.npmjs.org/cborg/-/cborg-4.2.12.tgz" + integrity sha512-z126yLoavS75cdTuiKu61RC3Y3trqtDAgQRa5Q0dpHn1RmqhIedptWXKnk0lQ5yo/GmcV9myvIkzFgZ8GnqSog== chokidar@^3.5.1: - version "3.5.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz" - integrity sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== + version "3.6.0" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" + integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== dependencies: anymatch "~3.1.2" braces "~3.0.2" @@ -1923,7 +1844,7 @@ clean-jsdoc-theme@4.2.17: color-convert@^1.9.3: version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" + resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== dependencies: color-name "1.1.3" @@ -1937,7 +1858,7 @@ color-convert@^2.0.1: color-name@1.1.3: version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" + resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== color-name@^1.0.0, color-name@~1.1.4: @@ -1947,7 +1868,7 @@ color-name@^1.0.0, color-name@~1.1.4: color-string@^1.6.0: version "1.9.1" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.9.1.tgz#4467f9146f036f855b764dfb5bf8582bf342c7a4" + resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== dependencies: color-name "^1.0.0" @@ -1955,7 +1876,7 @@ color-string@^1.6.0: color@^3.1.3: version "3.2.1" - resolved "https://registry.yarnpkg.com/color/-/color-3.2.1.tgz#3544dc198caf4490c3ecc9a790b54fe9ff45e164" + resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== dependencies: color-convert "^1.9.3" @@ -1963,7 +1884,7 @@ color@^3.1.3: colorspace@1.1.x: version "1.1.4" - resolved "https://registry.yarnpkg.com/colorspace/-/colorspace-1.1.4.tgz#8d442d1186152f60453bf8070cd66eb364e59243" + resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== dependencies: color "^3.1.3" @@ -2005,30 +1926,20 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -datastore-core@9.2.9: - version "9.2.9" - resolved "https://registry.yarnpkg.com/datastore-core/-/datastore-core-9.2.9.tgz#74b4dd53d4597b59038488ba5f92a7f81769f8df" - integrity sha512-wraWTPsbtdE7FFaVo3pwPuTB/zXsgwGGAm8BgBYwYAuzZCTS0MfXmd/HH1vR9s0/NFFjOVmBkGiWCvKxZ+QjVw== +dag-jose@^5.0.0: + version "5.1.1" + resolved "https://registry.npmjs.org/dag-jose/-/dag-jose-5.1.1.tgz" + integrity sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w== dependencies: - "@libp2p/logger" "^4.0.6" - err-code "^3.0.1" - interface-datastore "^8.0.0" - interface-store "^5.0.0" - it-drain "^3.0.5" - it-filter "^3.0.4" - it-map "^3.0.5" - it-merge "^3.0.3" - it-pipe "^3.0.1" - it-pushable "^3.2.3" - it-sort "^3.0.4" - it-take "^3.0.4" + "@ipld/dag-cbor" "^9.0.0" + multiformats "~13.1.3" -debug@^4.3.1, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== +debug@^4.3.1: + version "4.4.1" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: - ms "2.1.2" + ms "^2.1.3" delayed-stream@~1.0.0: version "1.0.0" @@ -2042,21 +1953,12 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" -dns-over-http-resolver@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/dns-over-http-resolver/-/dns-over-http-resolver-3.0.0.tgz" - integrity sha512-5+BI+B7n8LKhNaEZBYErr+CBd9t5nYtjunByLhrLGtZ+i3TRgiU8yE87pCjEBu2KOwNsD9ljpSXEbZ4S8xih5g== - dependencies: - debug "^4.3.4" - receptacle "^1.3.2" - -dns-over-http-resolver@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/dns-over-http-resolver/-/dns-over-http-resolver-3.0.2.tgz#71644cbab3c5a94f53e357da68771e0781ea3407" - integrity sha512-5batkHOjCkuAfrFa+IPmt3jyeZqLtSMfAo1HQp3hfwtzgUwHooecTFplnYC093u5oRNL4CQHCXh3OfER7+vWrA== +dns-packet@^5.6.1: + version "5.6.1" + resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" + integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== dependencies: - debug "^4.3.4" - receptacle "^1.3.2" + "@leichtgewicht/ip-codec" "^2.0.1" dot-case@^3.0.4: version "3.0.4" @@ -2071,6 +1973,13 @@ eastasianwidth@^0.2.0: resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== +electron-fetch@^1.9.1: + version "1.9.1" + resolved "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz" + integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== + dependencies: + encoding "^0.1.13" + emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -2083,9 +1992,16 @@ emoji-regex@^9.2.2: enabled@2.0.x: version "2.0.0" - resolved "https://registry.yarnpkg.com/enabled/-/enabled-2.0.0.tgz#f9dd92ec2d6f4bbc0d5d1e64e21d61cd4665e7c2" + resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== +encoding@^0.1.13: + version "0.1.13" + resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" + integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== + dependencies: + iconv-lite "^0.6.2" + entities@^4.4.0: version "4.5.0" resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" @@ -2140,11 +2056,6 @@ eventemitter3@^5.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -events@3.3.0, events@^3.3.0: - version "3.3.0" - resolved "https://registry.npmjs.org/events/-/events-3.3.0.tgz" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - execa@^5.0.0: version "5.1.1" resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" @@ -2160,57 +2071,64 @@ execa@^5.0.0: signal-exit "^3.0.3" strip-final-newline "^2.0.0" -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== +fast-fifo@^1.0.0: + version "1.3.2" + resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@^3.2.9, fast-glob@^3.3.3: + version "3.3.3" + resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" -fast-write-atomic@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fast-write-atomic/-/fast-write-atomic-0.2.1.tgz#7ee8ef0ce3c1f531043c09ae8e5143361ab17ede" - integrity sha512-WvJe06IfNYlr+6cO3uQkdKdy3Cb1LlCJSF8zRs2eT8yuhdbSlR9nIt+TgQ92RUxiRrQm+/S7RARnMfCs5iuAjw== - -fast-xml-parser@4.2.5: - 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== +fast-xml-parser@4.4.1: + version "4.4.1" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" + integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== dependencies: strnum "^1.0.5" +fast-xml-parser@5.2.5: + version "5.2.5" + resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz" + integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ== + dependencies: + strnum "^2.1.0" + fastq@^1.6.0: - version "1.17.0" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz" - integrity sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w== + version "1.19.1" + resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" fecha@^4.2.0: version "4.2.3" - resolved "https://registry.yarnpkg.com/fecha/-/fecha-4.2.3.tgz#4d9ccdbc61e8629b259fdca67e65891448d569fd" + resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== dependencies: to-regex-range "^5.0.1" fn.name@1.x.x: version "1.1.0" - resolved "https://registry.yarnpkg.com/fn.name/-/fn.name-1.1.0.tgz#26cad8017967aea8731bc42961d04a3d5988accc" + resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== -follow-redirects@^1.15.0: - version "1.15.3" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.3.tgz" - integrity sha512-1VzOtuEM8pC9SFU1E+8KfTjZyMztRsgEfwQl44z8A25uy13jSzTj6dyK2Df52iV0vgHCfBwLhDWevLn95w5v6Q== +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== foreground-child@^3.1.0: version "3.1.1" @@ -2240,13 +2158,13 @@ fs-extra@^10.1.0: fsevents@~2.3.2: version "2.3.3" - resolved "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -get-iterator@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz" - integrity sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg== +get-iterator@^1.0.2: + version "1.0.2" + resolved "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz" + integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== get-stream@^6.0.0: version "6.0.1" @@ -2288,21 +2206,10 @@ graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== -hamt-sharding@^3.0.0, hamt-sharding@^3.0.2: - version "3.0.2" - resolved "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.2.tgz" - integrity sha512-f0DzBD2tSmLFdFsLAvOflIBqFPjerbA7BfmwO8mVho/5hXwgyyYhv+ijIzidQf/DpDX3bRjAQvhGoBFj+DBvPw== - dependencies: - sparse-array "^1.3.1" - uint8arrays "^4.0.2" - -hamt-sharding@^3.0.6: - version "3.0.6" - resolved "https://registry.yarnpkg.com/hamt-sharding/-/hamt-sharding-3.0.6.tgz#3643107a3021af66ac95684aec87b196add5ba57" - integrity sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg== - dependencies: - sparse-array "^1.3.1" - uint8arrays "^5.0.1" +hashlru@^2.3.0: + version "2.3.0" + resolved "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz" + integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== html-minifier-terser@^7.2.0: version "7.2.0" @@ -2322,203 +2229,68 @@ human-signals@^2.1.0: resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== -ieee754@^1.1.4, ieee754@^1.2.1: +iconv-lite@^0.6.2: + version "0.6.3" + resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0: - version "5.3.1" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== -inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.4: +inherits@^2.0.3: version "2.0.4" resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -interface-blockstore@^5.0.0: - version "5.2.7" - resolved "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-5.2.7.tgz" - integrity sha512-B9UplmgUdQg15f/6xDJEbQYcjMm568cnqJsxSZYbDD0s6eQX5gKh58sd9H3aJEMosIy8T4vz9MwWWZuAOc3hQQ== - dependencies: - interface-store "^5.0.0" - multiformats "^12.0.1" - -interface-blockstore@^5.2.10: - version "5.2.10" - resolved "https://registry.yarnpkg.com/interface-blockstore/-/interface-blockstore-5.2.10.tgz#b01101dd70eda2ab713cc00a492921949934c861" - integrity sha512-9K48hTvBCGsKVD3pF4ILgDcf+W2P/gq0oxLcsHGB6E6W6nDutYkzR+7k7bCs9REHrBEfKzcVDEKieiuNM9WRZg== - dependencies: - interface-store "^5.0.0" - multiformats "^13.0.1" - -interface-datastore@^8.0.0, interface-datastore@^8.2.0: - version "8.2.9" - resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.2.9.tgz" - integrity sha512-J/8PN8TnB5xxCRtgu9Vx3zExdOzcTU5/DBF2dlU41deX1GW6/SPpbJo5DRNSnvzfjmwJ7YhUOIFXyccUp8nuAA== - dependencies: - interface-store "^5.0.0" - uint8arrays "^5.0.0" - -interface-datastore@^8.2.11: - version "8.2.11" - resolved "https://registry.yarnpkg.com/interface-datastore/-/interface-datastore-8.2.11.tgz#1d555ce6218ab6cba6291fc361debe9713590207" - integrity sha512-9E0iXehfp/j0UbZ2mvlYB4K9pP7uQBCppfuy8WHs1EHF6wLQrM9+zwyX+8Qt6HnH4GKZRyXX/CNXm6oD4+QYgA== - dependencies: - interface-store "^5.0.0" - uint8arrays "^5.0.2" - -interface-store@^5.0.0, interface-store@^5.0.1, interface-store@^5.1.0: - version "5.1.5" - resolved "https://registry.npmjs.org/interface-store/-/interface-store-5.1.5.tgz" - integrity sha512-X0KnJBk3o+YL13MxZBMwa88/b3Mdrpm0yPzkSTKDDVn9BSPH7UK6W+ZtIPO2bxKOQVmq7zqOwAnYnpfqWjb6/g== - -interface-store@^5.1.8: - version "5.1.8" - resolved "https://registry.yarnpkg.com/interface-store/-/interface-store-5.1.8.tgz#94bf867d165b5c904cccf09adeba215a5b0f459e" - integrity sha512-7na81Uxkl0vqk0CBPO5PvyTkdaJBaezwUJGsMOz7riPOq0rJt+7W31iaopaMICWea/iykUsvNlPx/Tc+MxC3/w== - -ipfs-bitswap@^19.0.0: - version "19.0.2" - resolved "https://registry.npmjs.org/ipfs-bitswap/-/ipfs-bitswap-19.0.2.tgz" - integrity sha512-pm0EcnTAwMMkCmdXHw/a7uPXzQ4I/pxVFiQZ6Ebg/R64XxAky/bCOJRzmqsgqH0+prH2bXAOgzS0mOZdL+zFSw== - dependencies: - "@libp2p/interface" "^0.1.1" - "@libp2p/logger" "^3.0.1" - "@multiformats/multiaddr" "^12.1.0" - "@vascosantos/moving-average" "^1.1.0" - any-signal "^4.1.1" - blockstore-core "^4.0.0" - events "^3.3.0" - interface-blockstore "^5.0.0" - interface-store "^5.1.0" - it-foreach "^2.0.2" - it-length-prefixed "^9.0.0" - it-map "^3.0.2" - it-pipe "^3.0.1" - it-take "^3.0.1" - just-debounce-it "^3.0.1" - multiformats "^12.0.1" - progress-events "^1.0.0" - protons-runtime "^5.0.0" - timeout-abort-controller "^3.0.0" - uint8arraylist "^2.4.3" - uint8arrays "^4.0.2" - varint "^6.0.0" - varint-decoder "^1.0.0" - -ipfs-unixfs-exporter@^13.1.0: - version "13.2.2" - resolved "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.2.2.tgz" - integrity sha512-poCxSte+SdQzuPc/Sm+gx/86VJu+IEsW6/Cfkq29yEUZDG8QuCvTkvuqAysKAYuN40aR9SjYqwYFRW/hsvspSw== - dependencies: - "@ipld/dag-cbor" "^9.0.0" - "@ipld/dag-pb" "^4.0.0" - "@multiformats/murmur3" "^2.0.0" - err-code "^3.0.1" - hamt-sharding "^3.0.0" - interface-blockstore "^5.0.0" - ipfs-unixfs "^11.0.0" - it-filter "^3.0.2" - it-last "^3.0.2" - it-map "^3.0.3" - it-parallel "^3.0.0" - it-pipe "^3.0.1" - it-pushable "^3.1.0" - multiformats "^12.0.1" - p-queue "^7.3.0" - progress-events "^1.0.0" - uint8arrays "^4.0.2" - -ipfs-unixfs-exporter@^13.5.0: - version "13.5.0" - resolved "https://registry.yarnpkg.com/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-13.5.0.tgz#48fafb272489cc2bf05757c16f3f44fa241ee038" - integrity sha512-s1eWXzoyhQFNEAB1p+QE3adjhW+lBdgpORmmjiCLiruHs5z7T5zsAgRVcWpM8LWYhq2flRtJHObb7Hg73J+oLQ== - dependencies: - "@ipld/dag-cbor" "^9.0.0" - "@ipld/dag-json" "^10.1.7" - "@ipld/dag-pb" "^4.0.0" - "@multiformats/murmur3" "^2.0.0" - err-code "^3.0.1" - hamt-sharding "^3.0.0" - interface-blockstore "^5.0.0" - ipfs-unixfs "^11.0.0" - it-filter "^3.0.2" - it-last "^3.0.2" - it-map "^3.0.3" - it-parallel "^3.0.0" - it-pipe "^3.0.1" - it-pushable "^3.1.0" - multiformats "^13.0.0" - p-queue "^8.0.1" - progress-events "^1.0.0" - -ipfs-unixfs-importer@^15.1.0: - version "15.2.1" - resolved "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.2.1.tgz" - integrity sha512-9ArBh7Xfz8gUSe8pq9c9ilBOXd1bbT3L+4xnI6w/usWLwnNT14p8WbFZjDD0MO1/PrD0PTUZuHNDS2l4EO+wPg== +interface-datastore@^8.3.0, interface-datastore@^8.3.1: + version "8.3.2" + resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz" + integrity sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA== dependencies: - "@ipld/dag-pb" "^4.0.0" - "@multiformats/murmur3" "^2.0.0" - err-code "^3.0.1" - hamt-sharding "^3.0.0" - interface-blockstore "^5.0.0" - interface-store "^5.0.1" - ipfs-unixfs "^11.0.0" - it-all "^3.0.2" - it-batch "^3.0.2" - it-first "^3.0.2" - it-parallel-batch "^3.0.1" - multiformats "^12.0.1" - progress-events "^1.0.0" - rabin-wasm "^0.1.4" - uint8arraylist "^2.4.3" - uint8arrays "^4.0.2" + interface-store "^6.0.0" + uint8arrays "^5.1.0" -ipfs-unixfs-importer@^15.2.4: - version "15.2.4" - resolved "https://registry.yarnpkg.com/ipfs-unixfs-importer/-/ipfs-unixfs-importer-15.2.4.tgz#3577b21132c95693cfa9122c9dc432a565e02218" - integrity sha512-3b7d/pLPwGvAEXvpJ0WyYlbn2pb2j7qY6FayuMSzbZNdFxdJ82l6VkJ9vK1d/G/AHx+0ZfB06eSdGKjX0GVCAg== - dependencies: - "@ipld/dag-pb" "^4.0.0" - "@multiformats/murmur3" "^2.0.0" - err-code "^3.0.1" - hamt-sharding "^3.0.0" - interface-blockstore "^5.0.0" - interface-store "^5.0.1" - ipfs-unixfs "^11.0.0" - it-all "^3.0.2" - it-batch "^3.0.2" - it-first "^3.0.2" - it-parallel-batch "^3.0.1" - multiformats "^13.0.0" - progress-events "^1.0.0" - rabin-wasm "^0.1.4" - uint8arraylist "^2.4.3" - uint8arrays "^5.0.0" +interface-store@^6.0.0: + version "6.0.3" + resolved "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz" + integrity sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA== -ipfs-unixfs@^11.0.0: - version "11.1.0" - resolved "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.1.0.tgz" - integrity sha512-Lq37nKLJOpRFjx3rcg3y+ZwUxBX7jluKfIt5UPp6wb1L3dP0sj1yaLR0Yg2CdGYvHWyUpZD1iTnT8upL0ToDOw== +ipfs-unixfs@^11.1.4: + version "11.2.5" + resolved "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.5.tgz" + integrity sha512-uasYJ0GLPbViaTFsOLnL9YPjX5VmhnqtWRriogAHOe4ApmIi9VAOFBzgDHsUW2ub4pEa/EysbtWk126g2vkU/g== dependencies: - err-code "^3.0.1" - protons-runtime "^5.0.0" - uint8arraylist "^2.4.3" + protons-runtime "^5.5.0" + uint8arraylist "^2.4.8" -ipfs-unixfs@^11.1.3: - version "11.1.3" - resolved "https://registry.yarnpkg.com/ipfs-unixfs/-/ipfs-unixfs-11.1.3.tgz#b53f36d8d34022516d6cfead4305839712c1dab2" - integrity sha512-sy6Koojwm/EcM8yvDlycRYA89C8wIcLcGTMMpqnCPUtqTCdl+JxsuPNCBgAu7tmO8Nipm7Tv7f0g/erxTGKKRA== - dependencies: - err-code "^3.0.1" - protons-runtime "^5.0.0" - uint8arraylist "^2.4.3" +ipns@10.1.2: + version "10.1.2" + resolved "https://registry.npmjs.org/ipns/-/ipns-10.1.2.tgz" + integrity sha512-RKAX20vZSHWEobmUw4zpU8t/kw+0CkrJYMA5ou39kNW5B4sAPGOiR/wGK9c51tQKA3rb8SeKs5g7ndNvNiS/vg== + dependencies: + "@libp2p/crypto" "^5.0.0" + "@libp2p/interface" "^2.0.0" + "@libp2p/logger" "^5.0.0" + cborg "^4.2.3" + interface-datastore "^8.3.0" + multiformats "^13.2.2" + protons-runtime "^5.5.0" + timestamp-nano "^1.0.1" + uint8arraylist "^2.4.8" + uint8arrays "^5.1.0" is-arrayish@^0.3.1: version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" + resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== is-binary-path@~2.1.0: @@ -2528,6 +2300,11 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-electron@^2.2.0: + version "2.2.2" + resolved "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz" + integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== + is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" @@ -2565,137 +2342,68 @@ isexe@^2.0.0: resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -it-all@^3.0.0, it-all@^3.0.2, it-all@^3.0.4: +iso-url@^1.2.1: + version "1.2.1" + resolved "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz" + integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== + +it-all@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz" integrity sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ== -it-batch@^3.0.0, it-batch@^3.0.2: - version "3.0.4" - resolved "https://registry.npmjs.org/it-batch/-/it-batch-3.0.4.tgz" - integrity sha512-WRu2mqOYIs+T9k7+yxSK9VJdk0UE4R0jKQsWQcti5c6vhb1FhjC2+yCB5XBrctQ9edNfCMU/wVzdDj8qSwimbA== - -it-drain@^3.0.1, it-drain@^3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/it-drain/-/it-drain-3.0.5.tgz" - integrity sha512-qYFe4SWdvs9oJGUY5bSjvmiLUMLzFEODNOQUdYdCIkuIgQF+AUB2INhM4yQ09buJ2rhHKDFxvTD/+yUq6qg0XA== - -it-filter@^3.0.0, it-filter@^3.0.2, it-filter@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-filter/-/it-filter-3.0.4.tgz" - integrity sha512-e0sz+st4sudK/zH6GZ/gRTRP8A/ADuJFCYDmRgMbZvR79y5+v4ZXav850bBZk5wL9zXaYZFxS1v/6Qi+Vjwh5g== - dependencies: - it-peekable "^3.0.0" - -it-first@^3.0.2: +it-first@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz" integrity sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg== -it-foreach@^2.0.2: - version "2.0.6" - resolved "https://registry.npmjs.org/it-foreach/-/it-foreach-2.0.6.tgz" - integrity sha512-OVosBHJsdXpAyeFlCbe3IGZia+65UykyAznakNsKXK+b99dbhuu/mOnXxTadDEo1GWhKx+WA8RNanKkMf07zQw== - dependencies: - it-peekable "^3.0.0" - -it-glob@^2.0.4, it-glob@^2.0.6: - version "2.0.6" - resolved "https://registry.npmjs.org/it-glob/-/it-glob-2.0.6.tgz" - integrity sha512-4C6ccz4nhqrq7yZMzBr3MsKhyL+rlnLXIPceyGG6ogl3Lx3eeWMv1RtlySJwFi6q+jVcPyTpeYt/xftwI2JEQQ== +it-glob@^3.0.1: + version "3.0.4" + resolved "https://registry.npmjs.org/it-glob/-/it-glob-3.0.4.tgz" + integrity sha512-73PbGBTK/dHp5PX4l8pkQH1ozCONP0U+PB3qMqltxPonRJQNomINE3Hn9p02m2GOu95VoeVvSZdHI2N+qub0pw== dependencies: - minimatch "^9.0.0" + fast-glob "^3.3.3" -it-last@^3.0.1, it-last@^3.0.2, it-last@^3.0.4: +it-last@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz" integrity sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q== -it-length-prefixed@^9.0.0: - version "9.0.3" - resolved "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-9.0.3.tgz" - integrity sha512-YAu424ceYpXctxtjcLOqn7vJq082CaoP8J646ZusYISfQc3bpzQErgTUqMFj81V262KG2W9/YMBHsy6A/4yvmg== - dependencies: - err-code "^3.0.1" - it-reader "^6.0.1" - it-stream-types "^2.0.1" - uint8-varint "^2.0.1" - uint8arraylist "^2.0.0" - uint8arrays "^4.0.2" - -it-map@^3.0.2, it-map@^3.0.3, it-map@^3.0.5: +it-map@^3.0.5: version "3.0.5" resolved "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz" integrity sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w== dependencies: it-peekable "^3.0.0" -it-merge@^3.0.0, it-merge@^3.0.1, it-merge@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/it-merge/-/it-merge-3.0.3.tgz" - integrity sha512-FYVU15KC5pb/GQX1Ims+lee8d4pdqGVCpWr0lkNj8o4xuNo7jY71k6GuEiWdP+T7W1bJqewSxX5yoTy5yZpRVA== - dependencies: - it-pushable "^3.2.0" - -it-parallel-batch@^3.0.1, it-parallel-batch@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.4.tgz" - integrity sha512-O1omh8ss8+UtXiMjE+8kM5C20DT0Ma4VtKVfrSHOJU0UHZ+iWBXarabzPYEp+WiuQmrv+klDPPlTZ9KaLN9xOA== - dependencies: - it-batch "^3.0.0" - -it-parallel@^3.0.0: - version "3.0.6" - resolved "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.6.tgz" - integrity sha512-i7UM7I9LTkDJw3YIqXHFAPZX6CWYzGc+X3irdNrVExI4vPazrJdI7t5OqrSVN8CONXLAunCiqaSV/zZRbQR56A== - dependencies: - p-defer "^4.0.0" - -it-peekable@^3.0.0: +it-peekable@^3.0.0, it-peekable@^3.0.3: version "3.0.3" resolved "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz" integrity sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w== -it-pipe@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz" - integrity sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA== - dependencies: - it-merge "^3.0.0" - it-pushable "^3.1.2" - it-stream-types "^2.0.1" - -it-pushable@^3.0.0, it-pushable@^3.1.0, it-pushable@^3.1.2, it-pushable@^3.2.0, it-pushable@^3.2.1, it-pushable@^3.2.3: +it-pushable@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz" integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== dependencies: p-defer "^4.0.0" -it-reader@^6.0.1: - version "6.0.4" - resolved "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz" - integrity sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg== - dependencies: - it-stream-types "^2.0.1" - uint8arraylist "^2.0.0" +it-stream-types@^2.0.1, it-stream-types@^2.0.2: + version "2.0.2" + resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz" + integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== -it-sort@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/it-sort/-/it-sort-3.0.4.tgz#250152bf4abf3fa9572954305424bafb3199fa63" - integrity sha512-tvnC93JZZWjX4UxALy0asow0dzXabkoaRbrPJKClTKhNCqw4gzHr+H5axf1gohcthedRRkqd/ae+wl7WqoxFhw== +it-to-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz" + integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== dependencies: - it-all "^3.0.0" - -it-stream-types@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.1.tgz" - integrity sha512-6DmOs5r7ERDbvS4q8yLKENcj6Yecr7QQTqWApbZdfAUTEC947d+PEha7PCqhm//9oxaLYL7TWRekwhoXl2s6fg== - -it-take@^3.0.1, it-take@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-take/-/it-take-3.0.4.tgz" - integrity sha512-RG8HDjAZlvkzz5Nav4xq6gK5zNT+Ff1UTIf+CrSJW8nIl6N1FpBH5e7clUshiCn+MmmMoSdIEpw4UaTolszxhA== + buffer "^6.0.3" + fast-fifo "^1.0.0" + get-iterator "^1.0.2" + p-defer "^3.0.0" + p-fifo "^1.0.0" + readable-stream "^3.6.0" jackspeak@^2.3.5: version "2.3.6" @@ -2748,11 +2456,6 @@ jsonfile@^6.0.1: optionalDependencies: graceful-fs "^4.1.6" -just-debounce-it@^3.0.1: - version "3.2.0" - resolved "https://registry.npmjs.org/just-debounce-it/-/just-debounce-it-3.2.0.tgz" - integrity sha512-WXzwLL0745uNuedrCsCs3rpmfD6DBaf7uuVwaq98/8dafURfgQaBsSpjiPp5+CW6Vjltwy9cOGI6qE71b3T8iQ== - klaw-sync@^6.0.0: version "6.0.0" resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" @@ -2767,15 +2470,54 @@ klaw@^3.0.0: dependencies: graceful-fs "^4.1.9" +kubo-rpc-client@5.2.0: + version "5.2.0" + resolved "https://registry.npmjs.org/kubo-rpc-client/-/kubo-rpc-client-5.2.0.tgz" + integrity sha512-J3ppL1xf7f27NDI9jUPGkr1QiExXLyxUTUwHUMMB1a4AZR4s6113SVXPHRYwe1pFIO3hRb5G+0SuHaxYSfhzBA== + dependencies: + "@ipld/dag-cbor" "^9.0.0" + "@ipld/dag-json" "^10.0.0" + "@ipld/dag-pb" "^4.0.0" + "@libp2p/crypto" "^5.0.0" + "@libp2p/interface" "^2.0.0" + "@libp2p/logger" "^5.0.0" + "@libp2p/peer-id" "^5.0.0" + "@multiformats/multiaddr" "^12.2.1" + "@multiformats/multiaddr-to-uri" "^11.0.0" + any-signal "^4.1.1" + blob-to-it "^2.0.5" + browser-readablestream-to-it "^2.0.5" + dag-jose "^5.0.0" + electron-fetch "^1.9.1" + err-code "^3.0.1" + ipfs-unixfs "^11.1.4" + iso-url "^1.2.1" + it-all "^3.0.4" + it-first "^3.0.4" + it-glob "^3.0.1" + it-last "^3.0.4" + it-map "^3.0.5" + it-peekable "^3.0.3" + it-to-stream "^1.0.0" + merge-options "^3.0.4" + multiformats "^13.1.0" + nanoid "^5.0.7" + native-fetch "^4.0.2" + parse-duration "^2.1.2" + react-native-fetch-api "^3.0.0" + stream-to-it "^1.0.1" + uint8arrays "^5.0.3" + wherearewe "^2.0.1" + kuler@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/kuler/-/kuler-2.0.0.tgz#e2c570a3800388fb44407e851531c1d670b061b3" + resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== lilconfig@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz" - integrity sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g== + version "3.1.3" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: version "1.2.4" @@ -2806,7 +2548,7 @@ lodash@^4.17.15, lodash@^4.17.21: logform@^2.3.2, logform@^2.4.0: version "2.6.0" - resolved "https://registry.yarnpkg.com/logform/-/logform-2.6.0.tgz#8c82a983f05d6eaeb2d75e3decae7a768b2bf9b5" + resolved "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz" integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== dependencies: "@colors/colors" "1.6.0" @@ -2828,6 +2570,11 @@ lower-case@^2.0.2: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +main-event@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/main-event/-/main-event-1.0.1.tgz" + integrity sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw== + markdown-it-anchor@^8.4.1: version "8.6.7" resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" @@ -2871,12 +2618,12 @@ merge2@^1.3.0, merge2@^1.4.1: resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== +micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: - braces "^3.0.2" + braces "^3.0.3" picomatch "^2.3.1" mime-db@1.52.0: @@ -2896,18 +2643,13 @@ mimic-fn@^2.1.0: resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== -minimatch@^9.0.0, minimatch@^9.0.1: +minimatch@^9.0.1: version "9.0.3" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== dependencies: brace-expansion "^2.0.1" -minimist@^1.2.5: - version "1.2.8" - resolved "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - "minipass@^5.0.0 || ^6.0.2 || ^7.0.0": version "7.0.4" resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" @@ -2918,12 +2660,22 @@ mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -ms@2.1.2, ms@^2.1.1: +ms@^2.1.1: version "2.1.2" resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== -multiformats@^12.0.1, multiformats@^12.1.0, multiformats@^12.1.1, multiformats@^12.1.3: +ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +ms@^3.0.0-canary.1: + version "3.0.0-canary.1" + resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz" + integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== + +multiformats@^12.0.1: version "12.1.3" resolved "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz" integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== @@ -2933,15 +2685,20 @@ multiformats@^13.0.0: resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz" integrity sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA== -multiformats@^13.0.1, multiformats@^13.1.0: +multiformats@^13.1.0: version "13.1.0" - resolved "https://registry.yarnpkg.com/multiformats/-/multiformats-13.1.0.tgz#5aa9d2175108a448fc3bdb54ba8a3d0b6cab3ac3" + resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz" integrity sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ== -murmurhash3js-revisited@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/murmurhash3js-revisited/-/murmurhash3js-revisited-3.0.0.tgz" - integrity sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g== +multiformats@^13.2.2, multiformats@^13.3.6: + version "13.3.7" + resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz" + integrity sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ== + +multiformats@~13.1.3: + version "13.1.3" + resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz" + integrity sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw== mz@^2.7.0: version "2.7.0" @@ -2952,6 +2709,16 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" +nanoid@^5.0.7: + version "5.1.5" + resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz" + integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== + +native-fetch@^4.0.2: + version "4.0.2" + resolved "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz" + integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== + no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" @@ -2960,13 +2727,6 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -node-fetch@^2.6.1: - version "2.7.0" - resolved "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - normalize-path@^3.0.0, normalize-path@~3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" @@ -2986,7 +2746,7 @@ object-assign@^4.0.1: one-time@^1.0.0: version "1.0.0" - resolved "https://registry.yarnpkg.com/one-time/-/one-time-1.0.0.tgz#e06bc174aed214ed58edede573b433bbf827cb45" + resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== dependencies: fn.name "1.x.x" @@ -2998,35 +2758,35 @@ onetime@^5.1.2: dependencies: mimic-fn "^2.1.0" +p-defer@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" + integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== + p-defer@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz" integrity sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ== -p-queue@8.0.1, p-queue@^8.0.1: +p-fifo@^1.0.0: + version "1.0.0" + resolved "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz" + integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== + dependencies: + fast-fifo "^1.0.0" + p-defer "^3.0.0" + +p-queue@^8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/p-queue/-/p-queue-8.0.1.tgz#718b7f83836922ef213ddec263ff4223ce70bef8" + resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz" integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== dependencies: eventemitter3 "^5.0.1" p-timeout "^6.1.2" -p-queue@^7.3.0, p-queue@^7.3.4: - version "7.4.1" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-7.4.1.tgz" - integrity sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA== - dependencies: - eventemitter3 "^5.0.1" - p-timeout "^5.0.2" - -p-timeout@^5.0.2: - version "5.1.0" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz" - integrity sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew== - p-timeout@^6.1.2: version "6.1.2" - resolved "https://registry.yarnpkg.com/p-timeout/-/p-timeout-6.1.2.tgz#22b8d8a78abf5e103030211c5fc6dee1166a6aa5" + resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz" integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== param-case@^3.0.4: @@ -3037,6 +2797,11 @@ param-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" +parse-duration@^2.1.2: + version "2.1.4" + resolved "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz" + integrity sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg== + pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" @@ -3081,23 +2846,24 @@ postcss-load-config@^4.0.1: lilconfig "^3.0.0" yaml "^2.3.4" -prettier@3.1.0: - version "3.1.0" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.1.0.tgz" - integrity sha512-TQLvXjq5IAibjh8EpBIkNKxO749UEWABoiIZehEPiY4GNpVdhaFKqSTu+QrlU6D2dPAfubRmtJTi4K4YkQ5eXw== +prettier@3.6.2: + version "3.6.2" + resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz" + integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== -progress-events@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/progress-events/-/progress-events-1.0.0.tgz" - integrity sha512-zIB6QDrSbPfRg+33FZalluFIowkbV5Xh1xSuetjG+rlC5he6u2dc6VQJ0TbMdlN3R1RHdpOqxEFMKTnQ+itUwA== +progress-events@^1.0.0, progress-events@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz" + integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== -protons-runtime@^5.0.0: - version "5.2.0" - resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.2.0.tgz" - integrity sha512-jL3VSbXllgm17zurKQ/z+Ath0w+4BknJ+l/NLocfjAB8hbeASOZTNtb7zK3nDsKq2pHK9YFumNQvpkZ6gFfWhA== +protons-runtime@^5.5.0: + version "5.6.0" + resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz" + integrity sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg== dependencies: + uint8-varint "^2.0.2" uint8arraylist "^2.4.3" - uint8arrays "^4.0.6" + uint8arrays "^5.0.1" proxy-from-env@^1.1.0: version "1.1.0" @@ -3114,24 +2880,14 @@ queue-microtask@^1.2.2: resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== -rabin-wasm@^0.1.4: - version "0.1.5" - resolved "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz" - integrity sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA== +react-native-fetch-api@^3.0.0: + version "3.0.0" + resolved "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz" + integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== dependencies: - "@assemblyscript/loader" "^0.9.4" - bl "^5.0.0" - debug "^4.3.1" - minimist "^1.2.5" - node-fetch "^2.6.1" - readable-stream "^3.6.0" - -race-signal@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/race-signal/-/race-signal-1.0.2.tgz" - integrity sha512-o3xNv0iTcIDQCXFlF6fPAMEBRjFxssgGoRqLbg06m+AdzEXXLUmoNOoUHTVz2NoBI8hHwKFKoC6IqyNtWr2bww== + p-defer "^3.0.0" -readable-stream@^3.4.0, readable-stream@^3.5.0, readable-stream@^3.6.0: +readable-stream@^3.4.0, readable-stream@^3.6.0: version "3.6.2" resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== @@ -3147,13 +2903,6 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -receptacle@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/receptacle/-/receptacle-1.3.2.tgz" - integrity sha512-HrsFvqZZheusncQRiEE7GatOAETrARKV/lnfYicIm8lbvp/JQOdADOfhjBd2DajvoszEyxSM6RlAAIZgEoeu/A== - dependencies: - ms "^2.1.1" - relateurl@^0.2.7: version "0.2.7" resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" @@ -3171,36 +2920,38 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -retimer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/retimer/-/retimer-3.0.0.tgz" - integrity sha512-WKE0j11Pa0ZJI5YIk0nflGI7SQsfl2ljihVy7ogh7DeQSeYAUi0ubZ/yEueGtDfUPk6GH5LRw1hBdLq4IwUBWA== - reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rollup@^4.0.2: - version "4.9.6" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz" - integrity sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg== + version "4.45.0" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.45.0.tgz#92d1b164eca1c6f2cb399ae7a1a8ee78967b6e33" + integrity sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A== dependencies: - "@types/estree" "1.0.5" + "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.9.6" - "@rollup/rollup-android-arm64" "4.9.6" - "@rollup/rollup-darwin-arm64" "4.9.6" - "@rollup/rollup-darwin-x64" "4.9.6" - "@rollup/rollup-linux-arm-gnueabihf" "4.9.6" - "@rollup/rollup-linux-arm64-gnu" "4.9.6" - "@rollup/rollup-linux-arm64-musl" "4.9.6" - "@rollup/rollup-linux-riscv64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-gnu" "4.9.6" - "@rollup/rollup-linux-x64-musl" "4.9.6" - "@rollup/rollup-win32-arm64-msvc" "4.9.6" - "@rollup/rollup-win32-ia32-msvc" "4.9.6" - "@rollup/rollup-win32-x64-msvc" "4.9.6" + "@rollup/rollup-android-arm-eabi" "4.45.0" + "@rollup/rollup-android-arm64" "4.45.0" + "@rollup/rollup-darwin-arm64" "4.45.0" + "@rollup/rollup-darwin-x64" "4.45.0" + "@rollup/rollup-freebsd-arm64" "4.45.0" + "@rollup/rollup-freebsd-x64" "4.45.0" + "@rollup/rollup-linux-arm-gnueabihf" "4.45.0" + "@rollup/rollup-linux-arm-musleabihf" "4.45.0" + "@rollup/rollup-linux-arm64-gnu" "4.45.0" + "@rollup/rollup-linux-arm64-musl" "4.45.0" + "@rollup/rollup-linux-loongarch64-gnu" "4.45.0" + "@rollup/rollup-linux-powerpc64le-gnu" "4.45.0" + "@rollup/rollup-linux-riscv64-gnu" "4.45.0" + "@rollup/rollup-linux-riscv64-musl" "4.45.0" + "@rollup/rollup-linux-s390x-gnu" "4.45.0" + "@rollup/rollup-linux-x64-gnu" "4.45.0" + "@rollup/rollup-linux-x64-musl" "4.45.0" + "@rollup/rollup-win32-arm64-msvc" "4.45.0" + "@rollup/rollup-win32-ia32-msvc" "4.45.0" + "@rollup/rollup-win32-x64-msvc" "4.45.0" fsevents "~2.3.2" run-parallel@^1.1.9: @@ -3217,9 +2968,14 @@ safe-buffer@~5.2.0: safe-stable-stringify@^2.3.1: version "2.4.3" - resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz#138c84b6f6edb3db5f8ef3ef7115b8f55ccbf886" + resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== +"safer-buffer@>= 2.1.2 < 3.0.0": + version "2.1.2" + resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -3251,7 +3007,7 @@ signal-exit@^4.0.1: simple-swizzle@^0.2.2: version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" + resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== dependencies: is-arrayish "^0.3.1" @@ -3281,23 +3037,17 @@ source-map@^0.6.0, source-map@~0.6.0: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -sparse-array@^1.3.1, sparse-array@^1.3.2: - version "1.3.2" - resolved "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz" - integrity sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg== - stack-trace@0.0.x: version "0.0.10" - resolved "https://registry.yarnpkg.com/stack-trace/-/stack-trace-0.0.10.tgz#547c70b347e8d32b4e108ea1a2a159e5fdde19c0" + resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== -stream-browserify@3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/stream-browserify/-/stream-browserify-3.0.0.tgz" - integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== +stream-to-it@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz" + integrity sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA== dependencies: - inherits "~2.0.4" - readable-stream "^3.5.0" + it-stream-types "^2.0.1" "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" @@ -3365,9 +3115,14 @@ strip-json-comments@^3.1.0: integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== strnum@^1.0.5: - version "1.0.5" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.0.5.tgz" - integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== + version "1.1.2" + resolved "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz" + integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== + +strnum@^2.1.0: + version "2.1.1" + resolved "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz" + integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== sucrase@^3.20.3: version "3.35.0" @@ -3382,6 +3137,11 @@ sucrase@^3.20.3: pirates "^4.0.1" ts-interface-checker "^0.1.9" +supports-color@^9.4.0: + version "9.4.0" + resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" + integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== + terser@^5.15.1: version "5.26.0" resolved "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz" @@ -3394,7 +3154,7 @@ terser@^5.15.1: text-hex@1.0.x: version "1.0.0" - resolved "https://registry.yarnpkg.com/text-hex/-/text-hex-1.0.0.tgz#69dc9c1b17446ee79a92bf5b884bb4b9127506f5" + resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== thenify-all@^1.0.0: @@ -3411,12 +3171,10 @@ thenify-all@^1.0.0: dependencies: any-promise "^1.0.0" -timeout-abort-controller@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/timeout-abort-controller/-/timeout-abort-controller-3.0.0.tgz" - integrity sha512-O3e+2B8BKrQxU2YRyEjC/2yFdb33slI22WRdUaDx6rvysfi9anloNZyR2q0l6LnePo5qH7gSM7uZtvvwZbc2yA== - dependencies: - retimer "^3.0.0" +timestamp-nano@^1.0.1: + version "1.0.1" + resolved "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.1.tgz" + integrity sha512-4oGOVZWTu5sl89PtCDnhQBSt7/vL1zVEwAfxH1p49JhTosxzVQWYBYFRFZ8nJmo0G6f824iyP/44BFAwIoKvIA== to-regex-range@^5.0.1: version "5.0.1" @@ -3432,11 +3190,6 @@ tr46@^1.0.1: dependencies: punycode "^2.1.0" -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - tree-kill@^1.2.2: version "1.2.2" resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" @@ -3444,7 +3197,7 @@ tree-kill@^1.2.2: triple-beam@^1.3.0: version "1.4.1" - resolved "https://registry.yarnpkg.com/triple-beam/-/triple-beam-1.4.1.tgz#6fde70271dc6e5d73ca0c3b24e2d92afb7441984" + resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== ts-interface-checker@^0.1.9: @@ -3452,19 +3205,14 @@ ts-interface-checker@^0.1.9: resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== -tslib@^1.11.1: - version "1.14.1" - resolved "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.0.3, tslib@^2.3.1, tslib@^2.5.0: +tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: version "2.6.2" resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== tsup@8.0.1: version "8.0.1" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.0.1.tgz#04a0170f7bbe77e81da3b53006b0a40282291833" + resolved "https://registry.npmjs.org/tsup/-/tsup-8.0.1.tgz" integrity sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg== dependencies: bundle-require "^4.0.0" @@ -3492,7 +3240,7 @@ uc.micro@^1.0.1, uc.micro@^1.0.5: resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -uint8-varint@^2.0.1: +uint8-varint@^2.0.1, uint8-varint@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.2.tgz" integrity sha512-LZXmBT0jiHR7J4oKM1GUhtdLFW1yPauzI8NjJlotXn92TprO9u8VMvEVR4QMk8xhUVUd+2fqfU2/kGbVHYSSWw== @@ -3500,38 +3248,24 @@ uint8-varint@^2.0.1: uint8arraylist "^2.0.0" uint8arrays "^4.0.2" -uint8arraylist@^2.0.0, uint8arraylist@^2.4.3: - version "2.4.7" - resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.7.tgz" - integrity sha512-ohRElqR6C5dd60vRFLq40MCiSnUe1AzkpHvbCEMCGGP6zMoFYECsjdhL6bR1kTK37ONNRDuHQ3RIpScRYcYYIg== - dependencies: - uint8arrays "^4.0.2" - -uint8arraylist@^2.4.8: +uint8arraylist@^2.0.0, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: version "2.4.8" - resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz" integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== dependencies: uint8arrays "^5.0.1" -uint8arrays@^4.0.2, uint8arrays@^4.0.6: +uint8arrays@^4.0.2: version "4.0.10" resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz" integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== dependencies: multiformats "^12.0.1" -uint8arrays@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.0.0.tgz" - integrity sha512-RWO7gR4x6syxnKDfZO8mDCsaaYs1/BqZCxlHgrcRge50E9GTnLmtoA4kwFSGIL4s3dQkryeTkvtG6oEFEya3yg== - dependencies: - multiformats "^12.0.1" - -uint8arrays@^5.0.1, uint8arrays@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.0.2.tgz#f05479bcd521d37c2e7710b24132a460b0ac80e3" - integrity sha512-S0GaeR+orZt7LaqzTRs4ZP8QqzAauJ+0d4xvP2lJTA99jIkKsE2FgDs4tGF/K/z5O9I/2W5Yvrh7IuqNeYH+0Q== +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.0.3, uint8arrays@^5.1.0: + version "5.1.0" + resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz" + integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== dependencies: multiformats "^13.0.0" @@ -3540,6 +3274,11 @@ underscore@~1.13.2: resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== +undici-types@~7.8.0: + version "7.8.0" + resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz" + integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" @@ -3550,51 +3289,29 @@ util-deprecate@^1.0.1: resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== -uuid@9.0.1: +uuid@11.1.0: + version "11.1.0" + resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" + integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== + +uuid@^9.0.1: version "9.0.1" resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -varint-decoder@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/varint-decoder/-/varint-decoder-1.0.0.tgz" - integrity sha512-JkOvdztASWGUAsXshCFHrB9f6AgR2Q8W08CEyJ+43b1qtFocmI8Sp1R/M0E/hDOY2FzVIqk63tOYLgDYWuJ7IQ== +weald@^1.0.4: + version "1.0.4" + resolved "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz" + integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== dependencies: - varint "^5.0.0" - -varint@^5.0.0: - version "5.0.2" - resolved "https://registry.npmjs.org/varint/-/varint-5.0.2.tgz" - integrity sha512-lKxKYG6H03yCZUpAGOPOsMcGxd1RHCu1iKvEHYDPmTyq2HueGhD73ssNBqqQWfvYs04G9iUFRvmAVLW20Jw6ow== - -varint@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz" - integrity sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg== - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + ms "^3.0.0-canary.1" + supports-color "^9.4.0" webidl-conversions@^4.0.2: version "4.0.2" resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - whatwg-url@^7.0.0: version "7.1.0" resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" @@ -3604,6 +3321,13 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" +wherearewe@^2.0.1: + version "2.0.1" + resolved "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz" + integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== + dependencies: + is-electron "^2.2.0" + which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -3613,7 +3337,7 @@ which@^2.0.1: winston-transport@^4.7.0: version "4.7.0" - resolved "https://registry.yarnpkg.com/winston-transport/-/winston-transport-4.7.0.tgz#e302e6889e6ccb7f383b926df6936a5b781bd1f0" + resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz" integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== dependencies: logform "^2.3.2" @@ -3622,7 +3346,7 @@ winston-transport@^4.7.0: winston@3.12.0: version "3.12.0" - resolved "https://registry.yarnpkg.com/winston/-/winston-3.12.0.tgz#a5d965a41d3dc31be5408f8c66e927958846c0d0" + resolved "https://registry.npmjs.org/winston/-/winston-3.12.0.tgz" integrity sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w== dependencies: "@colors/colors" "^1.6.0" @@ -3661,6 +3385,6 @@ xmlcreate@^2.0.4: integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== yaml@^2.3.4: - version "2.3.4" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz" - integrity sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA== + version "2.8.0" + resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz" + integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== From f99a51d1579a4153707bd58e505bc36ab4222422 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:13:06 -0500 Subject: [PATCH 02/15] Alphabetical Region Ordering Update bundle configuration --- .github/workflows/publish.yml | 2 +- .github/workflows/test.yml | 2 +- src/index.js | 419 +++++++++++++++++----------------- src/logger.js | 10 - tsup.config.js | 19 +- 5 files changed, 218 insertions(+), 234 deletions(-) delete mode 100644 src/logger.js diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index 2ceb9b1..e177bcd 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -11,7 +11,7 @@ jobs: - name: Setup Node uses: actions/setup-node@v4 with: - node-version: '20.x' + node-version: '22.x' registry-url: 'https://registry.npmjs.org' - run: yarn install --frozen-lockfile - run: yarn run build diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index f977e9c..df4e06f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -11,7 +11,7 @@ jobs: - name: Use Node.js uses: actions/setup-node@v3 with: - node-version: '20.x' + node-version: '22.x' - run: yarn install --frozen-lockfile - run: yarn run build - run: node --test --test-concurrency 1 diff --git a/src/index.js b/src/index.js index 956f352..1b4355e 100644 --- a/src/index.js +++ b/src/index.js @@ -176,20 +176,6 @@ class FilebaseClient { return await this.#s3_client.send(command); } - /** - * @summary Lists the buckets in the client. - * @returns {Promise>} - A promise that resolves with an array of objects representing the buckets in the client. - * @example - * // List all buckets - * await client.listBuckets(); - */ - async listBuckets() { - const command = new ListBucketsCommand({}), - { Buckets } = await this.#s3_client.send(command); - - return Buckets; - } - /** * @summary Deletes the specified bucket. * @param {string} name - The name of the bucket to delete. @@ -256,65 +242,45 @@ class FilebaseClient { } throw new Error(`Failed to Fetch CID for Bucket`); } - //endregion - //region File Methods - async uploadDirectory(path, sourceDirectory, options = {}) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - const importOptions = {}; - if (options?.includeHiddenFiles === true) { - importOptions["hidden"] = true; - delete options["includeHiddenFiles"]; - } - const uploadResults = []; - for await (const uploadResult of this.#ipfs_client.addAll( - globSource(path, "*", importOptions), - options, - )) { - uploadResults.push(uploadResult); - } - return uploadResults; - } + /** + * @summary Lists the buckets in the client. + * @returns {Promise>} - A promise that resolves with an array of objects representing the buckets in the client. + * @example + * // List all buckets + * await client.listBuckets(); + */ + async listBuckets() { + const command = new ListBucketsCommand({}), + { Buckets } = await this.#s3_client.send(command); - async uploadFile(path, content, options = {}) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers = options.headers || {}; - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - options.searchParams = options.searchParams || {}; - options.searchParams["preserve-filenames"] = "true"; - return await this.#ipfs_client.add( - { - path, - content, - }, - options, - ); + return Buckets; } + //endregion - async uploadFiles(fileStream, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - const uploadResults = []; - for await (const uploadResult of this.#ipfs_client.addAll( - fileStream, - options, - )) { - uploadResults.push(uploadResult); - } - return uploadResults; - } + //region File Methods + async copyFile(from, to, options) { + const copySource = `${ + options?.sourceBucket || this.#default_bucket + }/${from}`, + command = new CopyObjectCommand({ + CopySource: copySource, + Bucket: options?.destinationBucket || this.#default_bucket, + Key: to, + }); - pinFile(ipfsPath, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - return this.#ipfs_client.pin.add(ipfsPath, options); + await this.#s3_client.send(command); + return true; } - pinFiles(source, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - return this.#ipfs_client.pin.addAll(source, options); + async deleteFile(path, options) { + const command = new DeleteObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: path, + }); + + await this.#s3_client.send(command); + return true; } async downloadFile(path, options) { @@ -327,28 +293,54 @@ class FilebaseClient { return response.Body; } - async deleteFile(path, options) { - const command = new DeleteObjectCommand({ + async generatePresignedUrl(objectKey, expiresInSeconds = 3600, options) { + const command = new GetObjectCommand({ Bucket: options?.bucket || this.#default_bucket, - Key: path, + Key: objectKey, }); - await this.#s3_client.send(command); - return true; + try { + return await getSignedUrl(this.#s3_client, command, { + expiresIn: expiresInSeconds, // URL valid for 1 hour by default + }); + } catch (error) { + console.error("Error generating presigned download URL:", error); + throw error; + } } - async copyFile(from, to, options) { - const copySource = `${ - options?.sourceBucket || this.#default_bucket - }/${from}`, - command = new CopyObjectCommand({ - CopySource: copySource, - Bucket: options?.destinationBucket || this.#default_bucket, - Key: to, - }); + /** + * @typedef {Object} objectOptions + * @property {string} [bucket] - The bucket to pin the IPFS CID into. + */ - await this.#s3_client.send(command); - return true; + /** + * @typedef {Object} objectHeadResult + * @property {string} cid The CID of the uploaded object + * @property {array} [entries] If a directory then returns an array of the containing objects + * @property {string} entries.cid The CID of the uploaded object + * @property {string} entries.path The path of the object + */ + + /** + * @summary Gets an objects info and metadata using the S3 API. + * @param {string} path - The key of the object to be inspected. + * @param {objectOptions} [options] - The options for inspecting the object. + * @returns {Promise} + */ + async getFileMetadata(path, options) { + try { + const command = new HeadObjectCommand({ + Bucket: options?.bucket || this.#default_bucket, + Key: path, + }); + return await this.#s3_client.send(command); + } catch (err) { + if (err.name === "NotFound") { + return false; + } + throw err; + } } /** @@ -429,54 +421,63 @@ class FilebaseClient { return listResponse; } - /** - * @typedef {Object} objectOptions - * @property {string} [bucket] - The bucket to pin the IPFS CID into. - */ + pinFile(ipfsPath, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + return this.#ipfs_client.pin.add(ipfsPath, options); + } - /** - * @typedef {Object} objectHeadResult - * @property {string} cid The CID of the uploaded object - * @property {array} [entries] If a directory then returns an array of the containing objects - * @property {string} entries.cid The CID of the uploaded object - * @property {string} entries.path The path of the object - */ + pinFiles(source, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + return this.#ipfs_client.pin.addAll(source, options); + } - /** - * @summary Gets an objects info and metadata using the S3 API. - * @param {string} path - The key of the object to be inspected. - * @param {objectOptions} [options] - The options for inspecting the object. - * @returns {Promise} - */ - async getFileMetadata(path, options) { - try { - const command = new HeadObjectCommand({ - Bucket: options?.bucket || this.#default_bucket, - Key: path, - }); - return await this.#s3_client.send(command); - } catch (err) { - if (err.name === "NotFound") { - return false; - } - throw err; + async uploadDirectory(path, sourceDirectory, options = {}) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + options.searchParams["directory-name"] = path; + const importOptions = {}; + if (options?.includeHiddenFiles === true) { + importOptions["hidden"] = true; + delete options["includeHiddenFiles"]; + } + const uploadResults = []; + for await (const uploadResult of this.#ipfs_client.addAll( + globSource(path, "*", importOptions), + options, + )) { + uploadResults.push(uploadResult); } + return uploadResults; } - async generatePresignedUrl(objectKey, expiresInSeconds = 3600, options) { - const command = new GetObjectCommand({ - Bucket: options?.bucket || this.#default_bucket, - Key: objectKey, - }); + async uploadFile(path, content, options = {}) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers = options.headers || {}; + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + options.searchParams = options.searchParams || {}; + options.searchParams["preserve-filenames"] = "true"; + return await this.#ipfs_client.add( + { + path, + content, + }, + options, + ); + } - try { - return await getSignedUrl(this.#s3_client, command, { - expiresIn: expiresInSeconds, // URL valid for 1 hour by default - }); - } catch (error) { - console.error("Error generating presigned download URL:", error); - throw error; + async uploadFiles(fileStream, options) { + let encodedCredentials = this.#getIpfsCredentials(options?.bucket); + options.headers["Authorization"] = `Bearer ${encodedCredentials}`; + const uploadResults = []; + for await (const uploadResult of this.#ipfs_client.addAll( + fileStream, + options, + )) { + uploadResults.push(uploadResult); } + return uploadResults; } //endregion @@ -530,6 +531,29 @@ class FilebaseClient { } } + /** + * @summary Deletes an IPNS name with the given label. + * @param {string} label - The label of the IPNS name to delete. + * @returns {Promise} - A promise that resolves to true if the IPNS name was successfully deleted. + * @example + * // List IPNS name with label of `delete-name-example` + * await client.deleteIpnsName(`delete-name-example`); + */ + async deleteIpnsName(label) { + try { + await this.#names_client.request({ + method: "DELETE", + url: `/${label}`, + validateStatus: (status) => { + return status === 204; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + /** * @summary Returns the value of an IPNS name * @param {string} label - Parameter representing the label of the name to resolve. @@ -594,33 +618,18 @@ class FilebaseClient { } /** - * @summary Updates the specified name with the given CID. - * @param {string} label - The label of the name to update. - * @param {string} cid - The cid to associate with the name. - * @param {nameOptions} options - The options for the set operation. - * - * @returns {Promise} - A Promise that resolves to true if the IPNS name was updated. + * @summary Returns a list of IPNS names + * @returns {Promise>} - A promise that resolves to an array of names. * @example - * // Update name with label of `update-name-example` and set the value of the IPNS name. - * await client.updateIpnsName(`update-name-example`, `bafybeidt4nmaci476lyon2mvgfmwyzysdazienhxs2bqnfpdainzjuwjom`); + * // List all IPNS names + * await client.listIpnsNames(); */ - async updateIpnsName(label, cid, options = {}) { + async listIpnsNames() { try { - const updateOptions = { - cid, - }; - if (options?.enabled) { - updateOptions.enabled = Boolean(options.enabled); - } - await this.#names_client.request({ - method: "PUT", - url: `/${label}`, - data: updateOptions, - validateStatus: (status) => { - return status === 200; - }, + const listResponse = await this.#names_client.request({ + method: "GET", }); - return true; + return listResponse.data; } catch (err) { this.#apiErrorHandler(err); } @@ -639,38 +648,30 @@ class FilebaseClient { } /** - * @summary Returns a list of IPNS names - * @returns {Promise>} - A promise that resolves to an array of names. - * @example - * // List all IPNS names - * await client.listIpnsNames(); - */ - async listIpnsNames() { - try { - const listResponse = await this.#names_client.request({ - method: "GET", - }); - return listResponse.data; - } catch (err) { - this.#apiErrorHandler(err); - } - } - - /** - * @summary Deletes an IPNS name with the given label. - * @param {string} label - The label of the IPNS name to delete. - * @returns {Promise} - A promise that resolves to true if the IPNS name was successfully deleted. + * @summary Updates the specified name with the given CID. + * @param {string} label - The label of the name to update. + * @param {string} cid - The cid to associate with the name. + * @param {nameOptions} options - The options for the set operation. + * + * @returns {Promise} - A Promise that resolves to true if the IPNS name was updated. * @example - * // List IPNS name with label of `delete-name-example` - * await client.deleteIpnsName(`delete-name-example`); + * // Update name with label of `update-name-example` and set the value of the IPNS name. + * await client.updateIpnsName(`update-name-example`, `bafybeidt4nmaci476lyon2mvgfmwyzysdazienhxs2bqnfpdainzjuwjom`); */ - async deleteIpnsName(label) { + async updateIpnsName(label, cid, options = {}) { try { + const updateOptions = { + cid, + }; + if (options?.enabled) { + updateOptions.enabled = Boolean(options.enabled); + } await this.#names_client.request({ - method: "DELETE", + method: "PUT", url: `/${label}`, + data: updateOptions, validateStatus: (status) => { - return status === 204; + return status === 200; }, }); return true; @@ -734,6 +735,29 @@ class FilebaseClient { } } + /** + * @summary Deletes a gateway with the given name. + * @param {string} name - The name of the gateway to delete. + * @returns {Promise} - A promise that resolves to true if the gateway was successfully deleted. + * @example + * // Delete gateway with name of `delete-gateway-example` + * await client.deleteGateway(`delete-name-example`); + */ + async deleteGateway(name) { + try { + await this.#gateways_client.request({ + method: "DELETE", + url: `/${name}`, + validateStatus: (status) => { + return status === 204; + }, + }); + return true; + } catch (err) { + this.#apiErrorHandler(err); + } + } + /** * @summary Returns the value of a gateway * @param {string} name - Parameter representing the name to get. @@ -775,29 +799,6 @@ class FilebaseClient { } } - /** - * @summary Deletes a gateway with the given name. - * @param {string} name - The name of the gateway to delete. - * @returns {Promise} - A promise that resolves to true if the gateway was successfully deleted. - * @example - * // Delete gateway with name of `delete-gateway-example` - * await client.deleteGateway(`delete-name-example`); - */ - async deleteGateway(name) { - try { - await this.#gateways_client.request({ - method: "DELETE", - url: `/${name}`, - validateStatus: (status) => { - return status === 204; - }, - }); - return true; - } catch (err) { - this.#apiErrorHandler(err); - } - } - /** * @summary Updates the specified gateway. * @param {string} name - The name of the gateway to update. @@ -840,20 +841,6 @@ class FilebaseClient { //endregion //region Content Fetch Methods - async fetchContentByCid(cid, options = {}) { - return this.#fetchContentFromGateway(cid, "ipfs", options); - } - - async fetchContentByIpnsName(cid, options = {}) { - return this.#fetchContentFromGateway(cid, "ipns", options); - } - - async #fetchIpnsRecord(cid) { - return this.#fetchContentFromGateway(cid, "ipns", { - format: "ipns-record", - }); - } - async #fetchContentFromGateway(cid, resolver, options) { const selectedEndpoint = options?.endpoint || this.#default_gateway; if (typeof selectedEndpoint !== "string") { @@ -886,6 +873,20 @@ class FilebaseClient { }); return downloadResponse.data; } + + async #fetchIpnsRecord(cid) { + return this.#fetchContentFromGateway(cid, "ipns", { + format: "ipns-record", + }); + } + + async fetchContentByCid(cid, options = {}) { + return this.#fetchContentFromGateway(cid, "ipfs", options); + } + + async fetchContentByIpnsName(cid, options = {}) { + return this.#fetchContentFromGateway(cid, "ipns", options); + } //endregion } diff --git a/src/logger.js b/src/logger.js deleted file mode 100644 index afac359..0000000 --- a/src/logger.js +++ /dev/null @@ -1,10 +0,0 @@ -import winston from "winston"; -const { combine, timestamp, json } = winston.format; - -const logger = winston.createLogger({ - level: process.env.LOG_LEVEL || "info", - format: combine(timestamp(), json()), - transports: [new winston.transports.Console()], -}); - -export default logger; diff --git a/tsup.config.js b/tsup.config.js index b9bb4d6..e74c708 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -2,19 +2,12 @@ import { defineConfig } from "tsup"; export default defineConfig({ entry: ["src/index.js"], - splitting: false, - sourcemap: false, - noExternal: [ - "@ipld/car", - "@helia/car", - "@helia/unixfs", - "@helia/mfs", - "blockstore-core", - "blockstore-fs", - "datastore-core", - "p-queue", - ], + format: ["cjs", 'esm'], dts: true, - format: ["cjs"], clean: true, + sourcemap: true, + minify: true, + bundle: true, + target: ['es2020', 'node21'], + platform: "neutral", }); From 62b06fbc90db468bdef0fe16091b9cd5bb1bb32e Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 15 Jul 2025 20:34:45 -0500 Subject: [PATCH 03/15] tsup config change --- package.json | 4 +++- tsup.config.js | 2 +- yarn.lock | 5 +++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index e472351..88f0af4 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,8 @@ ".": { "require": "./dist/index.js", "import": "./src/index.js", - "types": "./dist/index.d.ts" + "types": "./dist/index.d.ts", + "fallback": "./dist/index.js" } }, "files": [ @@ -55,6 +56,7 @@ "axios": "1.10.0", "ipns": "10.1.2", "kubo-rpc-client": "5.2.0", + "undici": "7.11.0", "winston": "3.12.0" } } diff --git a/tsup.config.js b/tsup.config.js index e74c708..7b60a58 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -2,7 +2,7 @@ import { defineConfig } from "tsup"; export default defineConfig({ entry: ["src/index.js"], - format: ["cjs", 'esm'], + format: ["cjs"], dts: true, clean: true, sourcemap: true, diff --git a/yarn.lock b/yarn.lock index fcffa50..51c710d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3279,6 +3279,11 @@ undici-types@~7.8.0: resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz" integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== +undici@7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/undici/-/undici-7.11.0.tgz#8e13a54f62afa756666c0590c38b3866e286d0b3" + integrity sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg== + universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" From ca1c01aa67ccee6218af62c559b9a8660eabb90d Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Wed, 16 Jul 2025 00:17:00 -0500 Subject: [PATCH 04/15] remove kubo-rpc-client that is esm first --- package.json | 24 +- src/index.js | 139 ++-- test/index.spec.cjs | 809 ---------------------- test/index.spec.mjs | 51 +- yarn.lock | 1584 +++++++++++++------------------------------ 5 files changed, 585 insertions(+), 2022 deletions(-) delete mode 100644 test/index.spec.cjs diff --git a/package.json b/package.json index 88f0af4..7923194 100644 --- a/package.json +++ b/package.json @@ -12,22 +12,17 @@ "types": "./dist/index.d.ts", "exports": { ".": { - "require": "./dist/index.js", - "import": "./src/index.js", "types": "./dist/index.d.ts", - "fallback": "./dist/index.js" + "require": "./dist/index.js", + "import": "./src/index.js" } }, "files": [ "dist", "src" ], - "engines": { - "node": ">=16.0.0", - "npm": ">=8.0.0" - }, "scripts": { - "build": "tsup src/index.js --format cjs --dts --clean", + "build": "tsup src/index.js", "test": "node --test", "doc": "jsdoc -c jsdoc.json" }, @@ -43,20 +38,17 @@ "decentralized" ], "devDependencies": { - "clean-jsdoc-theme": "4.2.17", - "jsdoc": "4.0.2", + "clean-jsdoc-theme": "4.3.0", + "jsdoc": "4.0.4", "prettier": "3.6.2", - "tsup": "8.0.1", - "typescript": "5.3.3", + "tsup": "8.5.0", + "typescript": "5.8.3", "uuid": "11.1.0" }, "dependencies": { "@aws-sdk/client-s3": "3.842.0", "@aws-sdk/s3-request-presigner": "3.844.0", "axios": "1.10.0", - "ipns": "10.1.2", - "kubo-rpc-client": "5.2.0", - "undici": "7.11.0", - "winston": "3.12.0" + "ipns": "10.1.2" } } diff --git a/src/index.js b/src/index.js index 1b4355e..7271185 100644 --- a/src/index.js +++ b/src/index.js @@ -13,10 +13,10 @@ import { S3Client, } from "@aws-sdk/client-s3"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; -import { create, globSource } from "kubo-rpc-client"; import { unmarshalIPNSRecord } from "ipns"; class FilebaseClient { + #DEFAULT_IPFS_TIMEOUT = 60000; #DEFAULT_IPFS_ENDPOINT = "https://rpc.filebase.io"; #DEFAULT_S3_ENDPOINT = "https://s3.filebase.com"; #DEFAULT_REGION = "us-east-1"; @@ -80,10 +80,18 @@ class FilebaseClient { ipfsCredentials = `${ipfsCredentials}:${options.bucket}`; this.#default_bucket = options.bucket; } - this.#ipfs_client = create({ - url: ipfsEndpoint, + this.#ipfs_client = axios.create({ + baseURL: ipfsEndpoint, + timeout: options?.timeout || this.#DEFAULT_IPFS_TIMEOUT, headers: { - Authorization: `Bearer ${Buffer.from(ipfsCredentials).toString("base64")}`, + common: { + Authorization: `Bearer ${Buffer.from(ipfsCredentials).toString("base64")}`, + }, + }, + method: "POST", + responseType: "text", + validateStatus: function (status) { + return status === 200; }, }); //endregion @@ -92,12 +100,12 @@ class FilebaseClient { const gatewayClientEndpoint = process.env.NODE_ENV === "test" ? process.env.TEST_GW_ENDPOINT || - options?.gateway?.endpoint || - this.#DEFAULT_ENDPOINT + options?.gateway?.endpoint || + this.#DEFAULT_ENDPOINT : options?.gateway?.endpoint || this.#DEFAULT_ENDPOINT; this.#gateways_client = axios.create({ baseURL: `${gatewayClientEndpoint}/v1/gateways`, - timeout: this.#DEFAULT_TIMEOUT, + timeout: options?.timeout || this.#GATEWAY_DEFAULT_TIMEOUT, headers: { common: { Authorization: `Bearer ${Buffer.from(this.#ipfs_credentials).toString("base64")}`, @@ -133,8 +141,8 @@ class FilebaseClient { ) { throw new Error( err.response.data.error?.details || - err.response.data.error?.reason || - err, + err.response.data.error?.reason || + err, ); } throw err; @@ -259,6 +267,31 @@ class FilebaseClient { //endregion //region File Methods + async #uploadFiles(formData, options) { + options.headers = options.headers || {}; + options.headers["Authorization"] = + `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; + options.searchParams = options.searchParams || {}; + options.searchParams["preserve-filenames"] = "true"; + + const downloadResponse = await axios.request({ + url: "api/v0/add", + headers: options.headers, + params: options.searchParams, + }); + + const pins = []; + for (const entry of downloadResponse.data.split("\n")) { + const parsedEntry = JSON.parse(entry); + pins.push({ + name: parsedEntry["Name"], + cid: parsedEntry["Hash"], + size: parsedEntry["Size"], + }); + } + return pins; + } + async copyFile(from, to, options) { const copySource = `${ options?.sourceBucket || this.#default_bucket @@ -421,63 +454,53 @@ class FilebaseClient { return listResponse; } - pinFile(ipfsPath, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - return this.#ipfs_client.pin.add(ipfsPath, options); + async pinFile(path, cid, options) { + await axios.request({ + url: "api/v0/pin/add", + headers: { + Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, + }, + params: { + name: path, + arg: cid, + }, + }); + return true; } - pinFiles(source, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - return this.#ipfs_client.pin.addAll(source, options); + async uploadDirectory(path, formData, options = {}) { + const uploadedFiles = await this.#uploadFiles(formData, { + headers: { + Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, + }, + params: { + "directory-name": path, + "wrap-with-directory": "true", + }, + }); + return uploadedFiles[0]; } - async uploadDirectory(path, sourceDirectory, options = {}) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - options.searchParams["directory-name"] = path; - const importOptions = {}; - if (options?.includeHiddenFiles === true) { - importOptions["hidden"] = true; - delete options["includeHiddenFiles"]; - } - const uploadResults = []; - for await (const uploadResult of this.#ipfs_client.addAll( - globSource(path, "*", importOptions), - options, - )) { - uploadResults.push(uploadResult); - } - return uploadResults; + async uploadFile(path, content, options = {}) { + const uploadFormData = new FormData(); + uploadFormData.append("file", content, path); + + const uploadedFiles = await this.uploadFiles(uploadFormData, options); + return uploadedFiles[0]; } - async uploadFile(path, content, options = {}) { + async uploadFiles(formData, options) { let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers = options.headers || {}; - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - options.searchParams = options.searchParams || {}; - options.searchParams["preserve-filenames"] = "true"; - return await this.#ipfs_client.add( - { - path, - content, + const uploadOptions = { + headers: { + Authorization: `Bearer ${encodedCredentials}`, }, - options, - ); - } + params: { + "preserve-filenames": "true", + }, + }; - async uploadFiles(fileStream, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - options.headers["Authorization"] = `Bearer ${encodedCredentials}`; - const uploadResults = []; - for await (const uploadResult of this.#ipfs_client.addAll( - fileStream, - options, - )) { - uploadResults.push(uploadResult); - } - return uploadResults; + return await this.#uploadFiles(formData, uploadOptions); } //endregion @@ -890,4 +913,4 @@ class FilebaseClient { //endregion } -export default FilebaseClient; \ No newline at end of file +export default FilebaseClient; diff --git a/test/index.spec.cjs b/test/index.spec.cjs deleted file mode 100644 index d557eba..0000000 --- a/test/index.spec.cjs +++ /dev/null @@ -1,809 +0,0 @@ -const test = require("node:test"); -const assert = require("node:assert/strict"); -const path = require("node:path"); -const { writeFile } = require("node:fs/promises"); -const { v4: uuidv4 } = require("uuid"); -const os = require("node:os"); -const FilebaseClient = require("../dist/index.js"); - -// Application Constants -const TEST_PREFIX = Date.now(); - -//region Bucket Tests -test("create bucket", async () => { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; - await filebaseClient.createBucket(bucketNameToCreate); - - try { - // List buckets - const currentBuckets = await filebaseClient.listBuckets(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - // Assert new bucket exists - assert.equal(createdBucket.Name, bucketNameToCreate); - } finally { - // Delete new bucket - await filebaseClient.deleteBucket(bucketNameToCreate); - } -}); - -test("get bucket cid", async () => { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; - await filebaseClient.createBucket(bucketNameToGet); - - try { - // Generate bucket CID - await filebaseClient.generateBucketCid(bucketNameToGet); - - // Get bucket information - const bucketCid = await filebaseClient.getBucketCid(bucketNameToGet); - - // Assert new bucket exists - assert.equal( - bucketCid, - "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", - ); - } finally { - // Delete new bucket - await filebaseClient.deleteBucket(bucketNameToGet); - } -}); - -test("generate bucket cid", async () => { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `create-bucket-test-pass` - const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; - await filebaseClient.createBucket(bucketNameToGenerate); - - try { - // Generate bucket CID - const generatedCid = - await filebaseClient.generateBucketCid(bucketNameToGenerate); - - // Assert new bucket exists - assert.equal( - generatedCid, - "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", - ); - } finally { - // Delete new bucket - await filebaseClient.deleteBucket(bucketNameToGenerate); - } -}); - -test("list buckets", async () => { - const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ), - initialBucketsList = await filebaseClient.listBuckets(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.createBucket(`${testBucketName}-${i}`); - } - const bucketsList = await filebaseClient.listBuckets(); - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.deleteBucket(`${testBucketName}-${i}`); - } - assert.strictEqual( - bucketsList.length, - initialBucketsList.length + countToCreate, - ); -}); - -test("delete bucket", async () => { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket `delete-bucket-test-pass` - const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; - await filebaseClient.createBucket(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await filebaseClient.listBuckets(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - if (typeof createdBucket === "undefined") { - throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); - } - - // Delete new bucket - await filebaseClient.deleteBucket(bucketNameToCreate); - - // List buckets and assert new bucket does not exist - const updatedBuckets = await filebaseClient.listBuckets(), - deletedBucket = updatedBuckets.find((updatedBucket) => { - return updatedBucket.Name === bucketNameToCreate; - }); - assert.equal(typeof deletedBucket, "undefined"); -}); -//endregion - -//region File Tests -async function createBucket(name) { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Create bucket with name - const bucketNameToCreate = name; - await filebaseClient.createBucket(bucketNameToCreate); - - // List buckets and assert new bucket exists - const currentBuckets = await filebaseClient.listBuckets(), - createdBucket = currentBuckets.find((currentBucket) => { - return currentBucket.Name === bucketNameToCreate; - }); - - return typeof createdBucket !== "undefined"; -} - -async function uploadObject(bucket, key, body) { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Upload Object - await filebaseClient.uploadFile(key, body); - - // Confirm Object Uploaded - const uploadedObject = await filebaseClient.getFileMetadata(key); - - return typeof uploadedObject !== "undefined" && uploadedObject !== false - ? uploadedObject - : false; -} - -async function uploadObjects(bucket, key, body) { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Upload Object - await filebaseClient.uploadFiles(key, body); - - // Confirm Object Uploaded - const uploadedObject = await filebaseClient.getFileMetadata(key); - - return typeof uploadedObject !== "undefined" && uploadedObject !== false; -} - -async function deleteObject(bucket, key) { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); - - // Delete Object - await filebaseClient.deleteFile(key); - return true; -} - -async function deleteBucket(bucket) { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); - - // Delete Bucket - await filebaseClient.deleteFile(bucket); - return true; -} - -test("delete object", async () => { - // Create bucket `delete-object-test-pass` - const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; - await createBucket(deleteTestBucket); - - try { - // Upload object `delete-object-test` - const objectNameToCreate = `delete-object-test`; - const uploaded = await uploadObject( - deleteTestBucket, - objectNameToCreate, - Buffer.from("delete object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [delete-object-test]`); - } - - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: deleteTestBucket }, - ); - - // Delete object `delete-object-test` - await filebaseClient.deleteFile(objectNameToCreate); - - // List bucket and assert new object doesn't exist - const uploadedObject = - await filebaseClient.getFileMetadata(objectNameToCreate); - assert.equal(uploadedObject, false); - } finally { - await deleteBucket(deleteTestBucket); - } -}); - -test("upload object", async () => { - // Create Bucket `create-object-test-pass - const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; - await createBucket(uploadTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObject( - uploadTestBucket, - `create-object-test`, - Buffer.from("upload object", "utf-8"), - ); - - assert.strictEqual(uploaded, true); - await deleteObject(uploadTestBucket, `create-object-test`); - } finally { - await deleteBucket(uploadTestBucket); - } -}); - -test("upload directory", async () => { - // Create Bucket `create-object-test-pass - const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; - await createBucket(uploadDirectoryTestBucket); - - try { - // Upload object `create-object-test` - const uploaded = await uploadObjects( - uploadDirectoryTestBucket, - `create-directory-test`, - [ - { - path: "/testObjects/1.txt", - content: Buffer.from("upload test object", "utf-8"), - }, - { - path: "/testObjects/deep/1.txt", - content: Buffer.from("upload deep test object", "utf-8"), - }, - { - path: "/topLevel.txt", - content: Buffer.from("upload top level test object", "utf-8"), - }, - ], - ); - assert.strictEqual(uploaded, true); - await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); - } finally { - await deleteBucket(uploadDirectoryTestBucket); - } -}); - -test("generate presigned url for object", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-presigned-url-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `presigned-url-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [${objectNameToCreate}]`); - } - - try { - // Generate presigned URL for objects - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); - const presignedUrl = - await filebaseClient.generatePresignedUrl(objectNameToCreate); - assert.strictEqual(typeof presignedUrl, "string"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("download object", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); - const downloadStream = - await filebaseClient.downloadFile(objectNameToCreate), - downloadFilename = uuidv4(), - downloadPath = path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("download object using gateway (ipfs)", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); - const downloadStream = await filebaseClient.fetchContentByCid( - uploaded["cid"], - ), - downloadFilename = uuidv4(), - downloadPath = path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); - -test("list objects", async () => { - // Create bucket `list-objects-test-pass` - const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; - await createBucket(listTestBucket); - - try { - let createdObjectCount = 0; - while (createdObjectCount < 26) { - // Upload objects `list-object-test-[x]` - const objectNameToCreate = `list-object-test-${createdObjectCount}`; - await uploadObject( - listTestBucket, - objectNameToCreate, - Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), - ); - createdObjectCount++; - } - - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: listTestBucket }, - ); - - const objectList = await filebaseClient.listFiles(`list-object-test-`, { - MaxKeys: 50, - }); - assert.equal(objectList.Contents.length, 26); - - let deletedObjectCount = 0; - while (deletedObjectCount < 26) { - // Delete objects `list-object-test-[x]` - const objectNameToDelete = `list-object-test-${deletedObjectCount}`; - await deleteObject(listTestBucket, objectNameToDelete); - deletedObjectCount++; - } - } finally { - await deleteBucket(listTestBucket); - } -}); - -test("copy object", async () => { - // Create bucket `copy-object-test-pass-src` - const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; - await createBucket(bucketSrc); - - try { - // Upload object `copy-object-test` - const objectNameToCreateSrc = `copy-object-test`; - const uploaded = await uploadObject( - bucketSrc, - objectNameToCreateSrc, - Buffer.from("copy object", "utf-8"), - ); - try { - assert.equal(uploaded, true); - - // Create bucket `copy-object-test-pass-dest` - const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; - await createBucket(bucketDest); - - try { - // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: bucketSrc }, - ); - - // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` - await filebaseClient.copyFile(objectNameToCreateSrc, bucketDest); - try { - // List bucket and assert new object exists - const copiedObject = await filebaseClient.getFileMetadata( - objectNameToCreateSrc, - ); - assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); - } finally { - await deleteObject(bucketDest, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketDest); - } - } finally { - await deleteObject(bucketSrc, objectNameToCreateSrc); - } - } finally { - await deleteBucket(bucketSrc); - } -}); -//endregion - -//region Gateway Tests -test("delete gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); - await filebaseClient.createGateway(testGatewayName); - await filebaseClient.deleteGateway(testGatewayName); - const deletedName = await filebaseClient.getGateway(testGatewayName); - assert.strictEqual(deletedName, false); -}); - -test("create gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createGateway(testGatewayName); - await filebaseClient.deleteGateway(testGatewayName); - assert.strictEqual(createdName.name, testGatewayName); -}); - -test("update gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createGateway(testGatewayName); - try { - const updatedName = await filebaseClient.updateGateway(createdName.name, { - private: true, - enabled: false, - }); - assert.strictEqual(updatedName, true); - } finally { - await filebaseClient.deleteGateway(testGatewayName); - } -}); - -test("get gateway", async () => { - const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createGateway(testGatewayName, {}); - try { - const testName = await filebaseClient.getGateway(createdName.name); - assert.strictEqual(testName.name, testGatewayName); - } finally { - await filebaseClient.deleteGateway(testGatewayName); - } -}); - -test("list gateways", async () => { - const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), - initialGatewaysList = await filebaseClient.listGateways(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.createGateway(`${testGatewayName}-${i}`); - } - const gatewaysList = await filebaseClient.listGateways(); - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.deleteGateway(`${testGatewayName}-${i}`); - } - assert.strictEqual( - gatewaysList.length, - initialGatewaysList.length + countToCreate, - ); -}); -//endregion - -//region Names Tests -const TEST_CID = process.env.TEST_NAME_CID, - TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY; - -test("delete name", async () => { - const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); - await filebaseClient.createIpnsName(testNameLabel, TEST_CID); - await filebaseClient.deleteIpnsName(testNameLabel); - const deletedName = await filebaseClient.getIpnsName(testNameLabel); - assert.strictEqual(deletedName, false); -}); - -test("create name", async () => { - const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); - await filebaseClient.deleteIpnsName(testNameLabel); - assert.strictEqual(createdName.label, testNameLabel); - assert.strictEqual(createdName.cid, TEST_CID); -}); - -test("import name", async () => { - const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - importedName = await filebaseClient.importIpnsName( - testNameLabel, - TEST_CID, - TEST_PRIVATE_KEY, - ); - await filebaseClient.deleteIpnsName(testNameLabel); - assert.strictEqual(importedName.label, testNameLabel); - assert.strictEqual(importedName.cid, TEST_CID); -}); - -test("update name", async () => { - const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); - try { - const updatedName = await filebaseClient.updateIpnsName( - createdName.label, - TEST_CID, - ); - assert.strictEqual(updatedName, true); - } finally { - await filebaseClient.deleteIpnsName(testNameLabel); - } -}); - -test("get name", async () => { - const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); - try { - const testName = await filebaseClient.getIpnsName(createdName.label); - assert.strictEqual(testName.label, testNameLabel); - assert.strictEqual(testName.cid, TEST_CID); - } finally { - await filebaseClient.deleteIpnsName(testNameLabel); - } -}); - -test("resolve name", async () => { - const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); - try { - const testNameValue = await filebaseClient.resolveIpnsName( - createdName.network_key, - ); - assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); - } finally { - await filebaseClient.deleteIpnsName(testNameLabel); - } -}); - -test("list names", async () => { - const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), - initialNamesList = await filebaseClient.listIpnsNames(), - countToCreate = 3; - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.createIpnsName(`${testNameLabel}-${i}`, TEST_CID); - } - const namesList = await filebaseClient.listIpnsNames(); - for (let i = 0; i < countToCreate; i++) { - await filebaseClient.deleteIpnsName(`${testNameLabel}-${i}`); - } - assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); -}); - -test("download object using gateway (ipns)", async () => { - // Create bucket `download-object-test-pass` - const downloadTestBucket = `${TEST_PREFIX}-download-object-ipns-test-pass`; - await createBucket(downloadTestBucket); - - try { - // Upload object `download-object-test` - const objectNameToCreate = `download-object-test`; - const uploaded = await uploadObject( - downloadTestBucket, - objectNameToCreate, - Buffer.from("download object", "utf-8"), - ); - if (uploaded === false) { - throw Error(`Failed to create object [download-object-test]`); - } - - try { - // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); - - // Create IPNS Name - const createdName = await filebaseClient.createIpnsName( - `${objectNameToCreate}-ipns`, - uploaded.cid, - ); - - const downloadStream = await filebaseClient.fetchContentByIpnsName( - createdName["network_key"], - ), - downloadFilename = uuidv4(), - downloadPath = path.resolve(os.tmpdir(), downloadFilename), - writeFileResult = await writeFile(downloadPath, downloadStream); - assert.strictEqual(typeof writeFileResult, "undefined"); - } finally { - await deleteObject(downloadTestBucket, objectNameToCreate); - } - } finally { - await deleteBucket(downloadTestBucket); - } -}); -//endregion - -//region Pinning API Tests -const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT"; - -test("create pin", async () => { - const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, - testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await filebaseClient.pinFile(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await filebaseClient.deleteFile(createdPin.name); - } finally { - await deleteBucket(testBucketName); - } -}); - -test("create pins", async () => { - const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, - testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await filebaseClient.pinFiles(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await filebaseClient.deleteFile(createdPin.name); - } finally { - await deleteBucket(testBucketName); - } -}); -//endregion diff --git a/test/index.spec.mjs b/test/index.spec.mjs index 10eeecf..9ce0bb6 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -290,23 +290,26 @@ test("upload directory", async () => { try { // Upload object `create-object-test` + const uploadForm = new FormData(); + uploadForm.append( + "file", + Buffer.from("upload test object", "utf-8"), + "/testObjects/1.txt", + ); + uploadForm.append( + "file", + Buffer.from("upload deep test object", "utf-8"), + "/testObjects/deep/1.txt", + ); + uploadForm.append( + "file", + Buffer.from("upload top level test object", "utf-8"), + "/topLevel.txt", + ); const uploaded = await uploadObjects( uploadDirectoryTestBucket, `create-directory-test`, - [ - { - path: "/testObjects/1.txt", - content: Buffer.from("upload test object", "utf-8"), - }, - { - path: "/testObjects/deep/1.txt", - content: Buffer.from("upload deep test object", "utf-8"), - }, - { - path: "/topLevel.txt", - content: Buffer.from("upload top level test object", "utf-8"), - }, - ], + uploadForm, ); assert.strictEqual(uploaded, true); await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); @@ -786,24 +789,4 @@ test("create pin", async () => { await deleteBucket(testBucketName); } }); - -test("create pins", async () => { - const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, - testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); - await createBucket(testBucketName); - try { - const createdPin = await filebaseClient.pinFiles(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await filebaseClient.deleteFile(createdPin.name); - } finally { - await deleteBucket(testBucketName); - } -}); //endregion diff --git a/yarn.lock b/yarn.lock index 51c710d..70052a2 100644 --- a/yarn.lock +++ b/yarn.lock @@ -659,157 +659,135 @@ dependencies: "@chainsafe/is-ip" "^2.0.1" -"@colors/colors@1.6.0", "@colors/colors@^1.6.0": - version "1.6.0" - resolved "https://registry.npmjs.org/@colors/colors/-/colors-1.6.0.tgz" - integrity sha512-Ir+AOibqzrIsL6ajt3Rz3LskB7OiMVHqltZmspbW/TJuTVuyOMirVqAkjfY6JISiLHgyNqicAC8AyHHGzNd/dA== - -"@dabh/diagnostics@^2.0.2": - version "2.0.3" - resolved "https://registry.npmjs.org/@dabh/diagnostics/-/diagnostics-2.0.3.tgz" - integrity sha512-hrlQOIi7hAfzsMqlGSFyVucrx38O+j6wiGOf//H2ecvIEqYN4ADBSS2iLMh5UFyDunCNniUIPk/q3riFv45xRA== - dependencies: - colorspace "1.1.x" - enabled "2.0.x" - kuler "^2.0.0" - -"@esbuild/aix-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz#d1bc06aedb6936b3b6d313bf809a5a40387d2b7f" - integrity sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA== - -"@esbuild/android-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz#7ad65a36cfdb7e0d429c353e00f680d737c2aed4" - integrity sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA== - -"@esbuild/android-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.19.12.tgz#b0c26536f37776162ca8bde25e42040c203f2824" - integrity sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w== - -"@esbuild/android-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.19.12.tgz#cb13e2211282012194d89bf3bfe7721273473b3d" - integrity sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew== - -"@esbuild/darwin-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz#cbee41e988020d4b516e9d9e44dd29200996275e" - integrity sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g== - -"@esbuild/darwin-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz#e37d9633246d52aecf491ee916ece709f9d5f4cd" - integrity sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A== - -"@esbuild/freebsd-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz#1ee4d8b682ed363b08af74d1ea2b2b4dbba76487" - integrity sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA== - -"@esbuild/freebsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz#37a693553d42ff77cd7126764b535fb6cc28a11c" - integrity sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg== - -"@esbuild/linux-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz#be9b145985ec6c57470e0e051d887b09dddb2d4b" - integrity sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA== - -"@esbuild/linux-arm@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz#207ecd982a8db95f7b5279207d0ff2331acf5eef" - integrity sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w== - -"@esbuild/linux-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz#d0d86b5ca1562523dc284a6723293a52d5860601" - integrity sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA== - -"@esbuild/linux-loong64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz#9a37f87fec4b8408e682b528391fa22afd952299" - integrity sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA== - -"@esbuild/linux-mips64el@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz#4ddebd4e6eeba20b509d8e74c8e30d8ace0b89ec" - integrity sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w== - -"@esbuild/linux-ppc64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz#adb67dadb73656849f63cd522f5ecb351dd8dee8" - integrity sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg== - -"@esbuild/linux-riscv64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz#11bc0698bf0a2abf8727f1c7ace2112612c15adf" - integrity sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg== - -"@esbuild/linux-s390x@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz#e86fb8ffba7c5c92ba91fc3b27ed5a70196c3cc8" - integrity sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg== - -"@esbuild/linux-x64@0.19.12": - version "0.19.12" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz" - integrity sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg== - -"@esbuild/netbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz#29da566a75324e0d0dd7e47519ba2f7ef168657b" - integrity sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA== - -"@esbuild/openbsd-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz#306c0acbdb5a99c95be98bdd1d47c916e7dc3ff0" - integrity sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw== - -"@esbuild/sunos-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz#0933eaab9af8b9b2c930236f62aae3fc593faf30" - integrity sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA== - -"@esbuild/win32-arm64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz#773bdbaa1971b36db2f6560088639ccd1e6773ae" - integrity sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A== - -"@esbuild/win32-ia32@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz#000516cad06354cc84a73f0943a4aa690ef6fd67" - integrity sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ== - -"@esbuild/win32-x64@0.19.12": - version "0.19.12" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz#c57c8afbb4054a3ab8317591a0b7320360b444ae" - integrity sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA== - -"@ipld/dag-cbor@^9.0.0": - version "9.1.0" - resolved "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.1.0.tgz" - integrity sha512-7pMKjBaapEh+1Nk/1umPPhQGT6znb5E71lke2ekxlcuVZLLrPPdDSy0UAMwWgj3a28cjir/ZJ6CQH2DEs3DUOQ== - dependencies: - cborg "^4.0.0" - multiformats "^13.0.0" - -"@ipld/dag-json@^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.0.tgz" - integrity sha512-O9YLUrl3d3WbVz7v1WkajFkyfOLEe2Fep+wor4fgVe0ywxzrivrj437NiPcVyB+2EDdFn/Q7tCHFf8YVhDf8ZA== - dependencies: - cborg "^4.0.0" - multiformats "^13.1.0" - -"@ipld/dag-pb@^4.0.0": - version "4.0.6" - resolved "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.0.6.tgz" - integrity sha512-wOij3jfDKZsb9yjhQeHp+TQy0pu1vmUkGv324xciFFZ7xGbDfAGTQW03lSA5aJ/7HBBNYgjEE0nvHmNW1Qjfag== - dependencies: - multiformats "^12.0.1" +"@esbuild/aix-ppc64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz#164b19122e2ed54f85469df9dea98ddb01d5e79e" + integrity sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw== + +"@esbuild/android-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz#8f539e7def848f764f6432598e51cc3820fde3a5" + integrity sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA== + +"@esbuild/android-arm@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.6.tgz#4ceb0f40113e9861169be83e2a670c260dd234ff" + integrity sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg== + +"@esbuild/android-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.6.tgz#ad4f280057622c25fe985c08999443a195dc63a8" + integrity sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A== + +"@esbuild/darwin-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz#d1f04027396b3d6afc96bacd0d13167dfd9f01f7" + integrity sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA== + +"@esbuild/darwin-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz#2b4a6cedb799f635758d7832d75b23772c8ef68f" + integrity sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg== + +"@esbuild/freebsd-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz#a26266cc97dd78dc3c3f3d6788b1b83697b1055d" + integrity sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg== + +"@esbuild/freebsd-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz#9feb8e826735c568ebfd94859b22a3fbb6a9bdd2" + integrity sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ== + +"@esbuild/linux-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz#c07cbed8e249f4c28e7f32781d36fc4695293d28" + integrity sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ== + +"@esbuild/linux-arm@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz#d6e2cd8ef3196468065d41f13fa2a61aaa72644a" + integrity sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw== + +"@esbuild/linux-ia32@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz#3e682bd47c4eddcc4b8f1393dfc8222482f17997" + integrity sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw== + +"@esbuild/linux-loong64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz#473f5ea2e52399c08ad4cd6b12e6dbcddd630f05" + integrity sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg== + +"@esbuild/linux-mips64el@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz#9960631c9fd61605b0939c19043acf4ef2b51718" + integrity sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw== + +"@esbuild/linux-ppc64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz#477cbf8bb04aa034b94f362c32c86b5c31db8d3e" + integrity sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw== + +"@esbuild/linux-riscv64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz#bcdb46c8fb8e93aa779e9a0a62cd4ac00dcac626" + integrity sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w== + +"@esbuild/linux-s390x@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz#f412cf5fdf0aea849ff51c73fd817c6c0234d46d" + integrity sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw== + +"@esbuild/linux-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz#d8233c09b5ebc0c855712dc5eeb835a3a3341108" + integrity sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig== + +"@esbuild/netbsd-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz#f51ae8dd1474172e73cf9cbaf8a38d1c72dd8f1a" + integrity sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q== + +"@esbuild/netbsd-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz#a267538602c0e50a858cf41dcfe5d8036f8da8e7" + integrity sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g== + +"@esbuild/openbsd-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz#a51be60c425b85c216479b8c344ad0511635f2d2" + integrity sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg== + +"@esbuild/openbsd-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz#7e4a743c73f75562e29223ba69d0be6c9c9008da" + integrity sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw== + +"@esbuild/openharmony-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz#2087a5028f387879154ebf44bdedfafa17682e5b" + integrity sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA== + +"@esbuild/sunos-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz#56531f861723ea0dc6283a2bb8837304223cb736" + integrity sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA== + +"@esbuild/win32-arm64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz#f4989f033deac6fae323acff58764fa8bc01436e" + integrity sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q== + +"@esbuild/win32-ia32@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz#b260e9df71e3939eb33925076d39f63cec7d1525" + integrity sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ== + +"@esbuild/win32-x64@0.25.6": + version "0.25.6" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz#4276edd5c105bc28b11c6a1f76fb9d29d1bd25c1" + integrity sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -855,6 +833,11 @@ resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== +"@jridgewell/sourcemap-codec@^1.5.0": + version "1.5.4" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== + "@jridgewell/trace-mapping@^0.3.9": version "0.3.20" resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" @@ -875,7 +858,7 @@ resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== -"@libp2p/crypto@^5.0.0", "@libp2p/crypto@^5.1.7": +"@libp2p/crypto@^5.0.0": version "5.1.7" resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.7.tgz" integrity sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g== @@ -913,16 +896,6 @@ multiformats "^13.3.6" weald "^1.0.4" -"@libp2p/peer-id@^5.0.0": - version "5.1.8" - resolved "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-5.1.8.tgz" - integrity sha512-pGaM4BwjnXdGtAtd84L4/wuABpsnFYE+AQ+h3GxNFme0IsTaTVKWd1jBBE5YFeKHBHGUOhF3TlHsdjFfjQA7TA== - dependencies: - "@libp2p/crypto" "^5.1.7" - "@libp2p/interface" "^2.10.5" - multiformats "^13.3.6" - uint8arrays "^5.1.0" - "@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6": version "1.0.6" resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz" @@ -936,14 +909,7 @@ progress-events "^1.0.0" uint8arrays "^5.0.2" -"@multiformats/multiaddr-to-uri@^11.0.0": - version "11.0.2" - resolved "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-11.0.2.tgz" - integrity sha512-SiLFD54zeOJ0qMgo9xv1Tl9O5YktDKAVDP4q4hL16mSq4O4sfFNagNADz8eAofxd6TfQUzGQ3TkRRG9IY2uHRg== - dependencies: - "@multiformats/multiaddr" "^12.3.0" - -"@multiformats/multiaddr@^12.2.1", "@multiformats/multiaddr@^12.3.0", "@multiformats/multiaddr@^12.4.4": +"@multiformats/multiaddr@^12.4.4": version "12.5.1" resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz" integrity sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ== @@ -968,131 +934,110 @@ resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - "@pkgjs/parseargs@^0.11.0": version "0.11.0" resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== -"@rollup/rollup-android-arm-eabi@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.0.tgz#0592252f7550bc0ea0474bb5a22430850f92bdbd" - integrity sha512-2o/FgACbji4tW1dzXOqAV15Eu7DdgbKsF2QKcxfG4xbh5iwU7yr5RRP5/U+0asQliSYv5M4o7BevlGIoSL0LXg== - -"@rollup/rollup-android-arm64@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.0.tgz#00a51d1d4380cc677da80ac9da1a19e7806bf57e" - integrity sha512-PSZ0SvMOjEAxwZeTx32eI/j5xSYtDCRxGu5k9zvzoY77xUNssZM+WV6HYBLROpY5CkXsbQjvz40fBb7WPwDqtQ== - -"@rollup/rollup-darwin-arm64@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.0.tgz#6638299dd282ebde1ebdf7dc5b0f150aa6e256e5" - integrity sha512-BA4yPIPssPB2aRAWzmqzQ3y2/KotkLyZukVB7j3psK/U3nVJdceo6qr9pLM2xN6iRP/wKfxEbOb1yrlZH6sYZg== - -"@rollup/rollup-darwin-x64@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.0.tgz#33e61daa0a66890059648feda78e1075d4ea1bcb" - integrity sha512-Pr2o0lvTwsiG4HCr43Zy9xXrHspyMvsvEw4FwKYqhli4FuLE5FjcZzuQ4cfPe0iUFCvSQG6lACI0xj74FDZKRA== - -"@rollup/rollup-freebsd-arm64@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.0.tgz#2cc4bd3ba7026cd5374e902285ce76e8fae0f6eb" - integrity sha512-lYE8LkE5h4a/+6VnnLiL14zWMPnx6wNbDG23GcYFpRW1V9hYWHAw9lBZ6ZUIrOaoK7NliF1sdwYGiVmziUF4vA== - -"@rollup/rollup-freebsd-x64@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.0.tgz#64664ba3015deac473a5d6d6c60c068f274bf2d5" - integrity sha512-PVQWZK9sbzpvqC9Q0GlehNNSVHR+4m7+wET+7FgSnKG3ci5nAMgGmr9mGBXzAuE5SvguCKJ6mHL6vq1JaJ/gvw== - -"@rollup/rollup-linux-arm-gnueabihf@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.0.tgz#7ab16acae3bcae863e9a9bc32038cd05e794a0ff" - integrity sha512-hLrmRl53prCcD+YXTfNvXd776HTxNh8wPAMllusQ+amcQmtgo3V5i/nkhPN6FakW+QVLoUUr2AsbtIRPFU3xIA== - -"@rollup/rollup-linux-arm-musleabihf@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.0.tgz#bef91b1e924ab57e82e767dc2655264bbde7acc6" - integrity sha512-XBKGSYcrkdiRRjl+8XvrUR3AosXU0NvF7VuqMsm7s5nRy+nt58ZMB19Jdp1RdqewLcaYnpk8zeVs/4MlLZEJxw== - -"@rollup/rollup-linux-arm64-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.0.tgz#0a811b16da334125f6e44570d0badf543876f49e" - integrity sha512-fRvZZPUiBz7NztBE/2QnCS5AtqLVhXmUOPj9IHlfGEXkapgImf4W9+FSkL8cWqoAjozyUzqFmSc4zh2ooaeF6g== - -"@rollup/rollup-linux-arm64-musl@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.0.tgz#e8c166efe3cb963faaa924c7721eafbade63036f" - integrity sha512-Btv2WRZOcUGi8XU80XwIvzTg4U6+l6D0V6sZTrZx214nrwxw5nAi8hysaXj/mctyClWgesyuxbeLylCBNauimg== - -"@rollup/rollup-linux-loongarch64-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.0.tgz#239feea00fa2a1e734bdff09b8d1c90def2abbf5" - integrity sha512-Li0emNnwtUZdLwHjQPBxn4VWztcrw/h7mgLyHiEI5Z0MhpeFGlzaiBHpSNVOMB/xucjXTTcO+dhv469Djr16KA== - -"@rollup/rollup-linux-powerpc64le-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.0.tgz#1de2f926bddbf7d689a089277c1284ea6df4b6d1" - integrity sha512-sB8+pfkYx2kvpDCfd63d5ScYT0Fz1LO6jIb2zLZvmK9ob2D8DeVqrmBDE0iDK8KlBVmsTNzrjr3G1xV4eUZhSw== - -"@rollup/rollup-linux-riscv64-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.0.tgz#28dbac643244e477a7b931feb9b475aa826f84c1" - integrity sha512-5GQ6PFhh7E6jQm70p1aW05G2cap5zMOvO0se5JMecHeAdj5ZhWEHbJ4hiKpfi1nnnEdTauDXxPgXae/mqjow9w== - -"@rollup/rollup-linux-riscv64-musl@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.0.tgz#5d05eeaedadec3625cd50e3ca5d35ef6f96a4bf0" - integrity sha512-N/euLsBd1rekWcuduakTo/dJw6U6sBP3eUq+RXM9RNfPuWTvG2w/WObDkIvJ2KChy6oxZmOSC08Ak2OJA0UiAA== - -"@rollup/rollup-linux-s390x-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.0.tgz#55b0790f499fb7adc14eb074c4e46aef92915813" - integrity sha512-2l9sA7d7QdikL0xQwNMO3xURBUNEWyHVHfAsHsUdq+E/pgLTUcCE+gih5PCdmyHmfTDeXUWVhqL0WZzg0nua3g== - -"@rollup/rollup-linux-x64-gnu@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.0.tgz#e822632fe5b324b16bdc37149149c8c760b031fd" - integrity sha512-XZdD3fEEQcwG2KrJDdEQu7NrHonPxxaV0/w2HpvINBdcqebz1aL+0vM2WFJq4DeiAVT6F5SUQas65HY5JDqoPw== - -"@rollup/rollup-linux-x64-musl@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.0.tgz#19a3602cb8fabd7eb3087f0a1e1e01adac31bbff" - integrity sha512-7ayfgvtmmWgKWBkCGg5+xTQ0r5V1owVm67zTrsEY1008L5ro7mCyGYORomARt/OquB9KY7LpxVBZes+oSniAAQ== - -"@rollup/rollup-win32-arm64-msvc@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.0.tgz#42e08bf3ea4fc463fc9f199c4f0310a736f03eb1" - integrity sha512-B+IJgcBnE2bm93jEW5kHisqvPITs4ddLOROAcOc/diBgrEiQJJ6Qcjby75rFSmH5eMGrqJryUgJDhrfj942apQ== - -"@rollup/rollup-win32-ia32-msvc@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.0.tgz#043d25557f59d7e28dfe38ee1f60ddcb95a08124" - integrity sha512-+CXwwG66g0/FpWOnP/v1HnrGVSOygK/osUbu3wPRy8ECXjoYKjRAyfxYpDQOfghC5qPJYLPH0oN4MCOjwgdMug== - -"@rollup/rollup-win32-x64-msvc@4.45.0": - version "4.45.0" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.0.tgz#0a7eecae41f463d6591c8fecd7a5c5087345ee36" - integrity sha512-SRf1cytG7wqcHVLrBc9VtPK4pU5wxiB/lNIkNmW2ApKXIg+RpqwHfsaEK+e7eH4A1BpI6BX/aBWXxZCIrJg3uA== +"@rollup/rollup-android-arm-eabi@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz#8560592f0dcf43b8cb0949af9f1d916205148d12" + integrity sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA== + +"@rollup/rollup-android-arm64@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz#6bfb777bbce998691b6fd3e916b05cd46392d020" + integrity sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ== + +"@rollup/rollup-darwin-arm64@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz#7efce10220293a22e7b7b595d05d8b8400a7bcf3" + integrity sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA== + +"@rollup/rollup-darwin-x64@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz#c617a8ece21050bfbea299c126767d2e70cfa79a" + integrity sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og== + +"@rollup/rollup-freebsd-arm64@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz#5a6af0a9acf82162d2910933649ae24fc0ea3ecb" + integrity sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g== + +"@rollup/rollup-freebsd-x64@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz#ae9709463560196fc275bd0da598668a2e341023" + integrity sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A== + +"@rollup/rollup-linux-arm-gnueabihf@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz#6ec52661764dbd54c19d6520a403aa385a5c0fbf" + integrity sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q== + +"@rollup/rollup-linux-arm-musleabihf@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz#fd33ba4a43ef8419e96811236493d19436271923" + integrity sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q== + +"@rollup/rollup-linux-arm64-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz#933b3d99b73c9d7bf4506cab0d5d313c7e74fd2d" + integrity sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw== + +"@rollup/rollup-linux-arm64-musl@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz#dbe9ae24ee9e97b75662fddcb69eb7f23c89280a" + integrity sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog== + +"@rollup/rollup-linux-loongarch64-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz#818c5a071eec744436dbcdd76fe9c3c869dc9a8d" + integrity sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg== + +"@rollup/rollup-linux-powerpc64le-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz#6b8591def27d886fa147fb0340126c7d6682a7e4" + integrity sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg== + +"@rollup/rollup-linux-riscv64-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz#f1861ac4ee8da64e0b0d23853ff26fe2baa876cf" + integrity sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw== + +"@rollup/rollup-linux-riscv64-musl@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz#320c961401a923b374e358664527b188e374e1ae" + integrity sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA== + +"@rollup/rollup-linux-s390x-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz#1763eed3362b50b6164d3f0947486c03cc7e616d" + integrity sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw== + +"@rollup/rollup-linux-x64-gnu@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz#0d4c8d0b8f801902f0844a40a9d981a0179f4971" + integrity sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw== + +"@rollup/rollup-linux-x64-musl@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz#ec30bb48b5fe22a3aaba98072f2d5b7139e1a8eb" + integrity sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw== + +"@rollup/rollup-win32-arm64-msvc@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz#27a6e48d1502e8e4bed96bedfb533738655874f2" + integrity sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg== + +"@rollup/rollup-win32-ia32-msvc@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz#a2fbad3bec20ff879f3fd51720adf33692ca8f3d" + integrity sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw== + +"@rollup/rollup-win32-x64-msvc@4.45.1": + version "4.45.1" + resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz#e5085c6d13da15b4c5133cd2a6bb11f25b6bb77a" + integrity sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA== "@smithy/abort-controller@^4.0.4": version "4.0.4" @@ -1598,23 +1543,23 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== -"@types/linkify-it@*": - version "3.0.5" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz" - integrity sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw== +"@types/linkify-it@^5": + version "5.0.0" + resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== -"@types/markdown-it@^12.2.3": - version "12.2.3" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-12.2.3.tgz" - integrity sha512-GKMHFfv3458yYy+v/N8gjufHO6MSZKCOXpZc5GXIWWy8uldwfmPn98vp81gZ5f9SVw8YYBctgfJ22a2d7AOMeQ== +"@types/markdown-it@^14.1.1": + version "14.1.2" + resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: - "@types/linkify-it" "*" - "@types/mdurl" "*" + "@types/linkify-it" "^5" + "@types/mdurl" "^2" -"@types/mdurl@*": - version "1.0.5" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-1.0.5.tgz" - integrity sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA== +"@types/mdurl@^2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/node@*": version "24.0.13" @@ -1623,11 +1568,6 @@ dependencies: undici-types "~7.8.0" -"@types/triple-beam@^1.3.2": - version "1.3.5" - resolved "https://registry.npmjs.org/@types/triple-beam/-/triple-beam-1.3.5.tgz" - integrity sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw== - "@types/uuid@^9.0.1": version "9.0.8" resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" @@ -1638,6 +1578,11 @@ abort-error@^1.0.1: resolved "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz" integrity sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg== +acorn@^8.14.0: + version "8.15.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== + acorn@^8.8.2: version "8.11.2" resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" @@ -1670,34 +1615,11 @@ any-promise@^1.0.0: resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== -any-signal@^4.1.1: - version "4.1.1" - resolved "https://registry.npmjs.org/any-signal/-/any-signal-4.1.1.tgz" - integrity sha512-iADenERppdC+A2YKbOXXB2WUeABLaM6qnpZ70kZbPZ1cZMMJ7eF+3CaYm+/PhBizgkzlvssC7QuHS30oOiQYWA== - -anymatch@~3.1.2: - version "3.1.3" - resolved "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz" - integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - argparse@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -async@^3.2.3: - version "3.2.5" - resolved "https://registry.npmjs.org/async/-/async-3.2.5.tgz" - integrity sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg== - asynckit@^0.4.0: version "0.4.0" resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" @@ -1722,18 +1644,6 @@ base64-js@^1.3.1: resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== -binary-extensions@^2.0.0: - version "2.3.0" - resolved "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz" - integrity sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw== - -blob-to-it@^2.0.5: - version "2.0.10" - resolved "https://registry.npmjs.org/blob-to-it/-/blob-to-it-2.0.10.tgz" - integrity sha512-I39vO57y+LBEIcAV7fif0sn96fYOYVqrPiOD+53MxQGv4DBgt1/HHZh0BHheWx2hVe24q5LTSXxqeV1Y3Nzkgg== - dependencies: - browser-readablestream-to-it "^2.0.0" - bluebird@^3.7.2: version "3.7.2" resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" @@ -1751,18 +1661,6 @@ brace-expansion@^2.0.1: dependencies: balanced-match "^1.0.0" -braces@^3.0.3, braces@~3.0.2: - version "3.0.3" - resolved "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz" - integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== - dependencies: - fill-range "^7.1.1" - -browser-readablestream-to-it@^2.0.0, browser-readablestream-to-it@^2.0.5: - version "2.0.10" - resolved "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.10.tgz" - integrity sha512-I/9hEcRtjct8CzD9sVo9Mm4ntn0D+7tOVrjbPl69XAoOfgJ8NBdOQU+WX+5SHhcELJDb14mWt7zuvyqha+MEAQ== - buffer-from@^1.0.0: version "1.1.2" resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" @@ -1776,16 +1674,16 @@ buffer@^6.0.3: base64-js "^1.3.1" ieee754 "^1.2.1" -bundle-require@^4.0.0: - version "4.2.1" - resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-4.2.1.tgz" - integrity sha512-7Q/6vkyYAwOmQNRw75x+4yRtZCZJXUDmHHlFdkiV0wgv/reNjtJwpu1jPJ0w2kbEpIM0uoKI3S4/f39dU7AjSA== +bundle-require@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee" + integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== dependencies: load-tsconfig "^0.2.3" -cac@^6.7.12: +cac@^6.7.14: version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" + resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== camel-case@^4.1.2: @@ -1803,25 +1701,17 @@ catharsis@^0.9.0: dependencies: lodash "^4.17.15" -cborg@^4.0.0, cborg@^4.2.3: +cborg@^4.2.3: version "4.2.12" resolved "https://registry.npmjs.org/cborg/-/cborg-4.2.12.tgz" integrity sha512-z126yLoavS75cdTuiKu61RC3Y3trqtDAgQRa5Q0dpHn1RmqhIedptWXKnk0lQ5yo/GmcV9myvIkzFgZ8GnqSog== -chokidar@^3.5.1: - version "3.6.0" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz" - integrity sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw== - dependencies: - anymatch "~3.1.2" - braces "~3.0.2" - glob-parent "~5.1.2" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.6.0" - optionalDependencies: - fsevents "~2.3.2" +chokidar@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== + dependencies: + readdirp "^4.0.1" clean-css@~5.3.2: version "5.3.3" @@ -1830,10 +1720,10 @@ clean-css@~5.3.2: dependencies: source-map "~0.6.0" -clean-jsdoc-theme@4.2.17: - version "4.2.17" - resolved "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.2.17.tgz" - integrity sha512-5SbJNXcQHUXd7N13g+3OpGFiBQdxz36xwEP3p1r1vbo/apLcDRtugaFdUZ56H6Rvlb68Q33EChoBkajSlnD11w== +clean-jsdoc-theme@4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz#6cd55ff7b25ff6d1719ae0ff9f1cdb5ef07bf640" + integrity sha512-QMrBdZ2KdPt6V2Ytg7dIt0/q32U4COpxvR0UDhPjRRKRL0o0MvRCR5YpY37/4rPF1SI1AYEKAWyof7ndCb/dzA== dependencies: "@jsdoc/salty" "^0.2.4" fs-extra "^10.1.0" @@ -1842,13 +1732,6 @@ clean-jsdoc-theme@4.2.17: lodash "^4.17.21" showdown "^2.1.0" -color-convert@^1.9.3: - version "1.9.3" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - color-convert@^2.0.1: version "2.0.1" resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" @@ -1856,40 +1739,11 @@ color-convert@^2.0.1: dependencies: color-name "~1.1.4" -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz" - integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw== - -color-name@^1.0.0, color-name@~1.1.4: +color-name@~1.1.4: version "1.1.4" resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== -color-string@^1.6.0: - version "1.9.1" - resolved "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz" - integrity sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color@^3.1.3: - version "3.2.1" - resolved "https://registry.npmjs.org/color/-/color-3.2.1.tgz" - integrity sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA== - dependencies: - color-convert "^1.9.3" - color-string "^1.6.0" - -colorspace@1.1.x: - version "1.1.4" - resolved "https://registry.npmjs.org/colorspace/-/colorspace-1.1.4.tgz" - integrity sha512-BgvKJiuVu1igBUF2kEjRCZXol6wiiGbY5ipL/oVPwm0BL9sIpMIzM8IK7vwuxIIzOXMV3Ey5w+vxhm0rR/TN8w== - dependencies: - color "^3.1.3" - text-hex "1.0.x" - combined-stream@^1.0.8: version "1.0.8" resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" @@ -1917,7 +1771,17 @@ commander@^9.0.0: resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== -cross-spawn@^7.0.0, cross-spawn@^7.0.3: +confbox@^0.1.8: + version "0.1.8" + resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== + +consola@^3.4.0: + version "3.4.2" + resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== + +cross-spawn@^7.0.0: version "7.0.3" resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -1926,15 +1790,7 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.3: shebang-command "^2.0.0" which "^2.0.1" -dag-jose@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/dag-jose/-/dag-jose-5.1.1.tgz" - integrity sha512-9alfZ8Wh1XOOMel8bMpDqWsDT72ojFQCJPtwZSev9qh4f8GoCV9qrJW8jcOUhcstO8Kfm09FHGo//jqiZq3z9w== - dependencies: - "@ipld/dag-cbor" "^9.0.0" - multiformats "~13.1.3" - -debug@^4.3.1: +debug@^4.4.0: version "4.4.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== @@ -1946,13 +1802,6 @@ delayed-stream@~1.0.0: resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - dns-packet@^5.6.1: version "5.6.1" resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" @@ -1973,13 +1822,6 @@ eastasianwidth@^0.2.0: resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== -electron-fetch@^1.9.1: - version "1.9.1" - resolved "https://registry.npmjs.org/electron-fetch/-/electron-fetch-1.9.1.tgz" - integrity sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA== - dependencies: - encoding "^0.1.13" - emoji-regex@^8.0.0: version "8.0.0" resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" @@ -1990,61 +1832,42 @@ emoji-regex@^9.2.2: resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== -enabled@2.0.x: - version "2.0.0" - resolved "https://registry.npmjs.org/enabled/-/enabled-2.0.0.tgz" - integrity sha512-AKrN98kuwOzMIdAizXGI86UFBoo26CL21UM763y1h/GMSJ4/OHU9k2YlsmBpyScFo/wbLzWQJBMCW4+IO3/+OQ== - -encoding@^0.1.13: - version "0.1.13" - resolved "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz" - integrity sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A== - dependencies: - iconv-lite "^0.6.2" - entities@^4.4.0: version "4.5.0" resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -entities@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/entities/-/entities-2.1.0.tgz" - integrity sha512-hCx1oky9PFrJ611mf0ifBLBRW8lUUVRlFolb5gWRfIELabBlbp9xZvrqZLZAs+NxFnbfQoeGd8wDkygjg7U85w== - -err-code@^3.0.1: - version "3.0.1" - resolved "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz" - integrity sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA== - -esbuild@^0.19.2: - version "0.19.12" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz" - integrity sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg== +esbuild@^0.25.0: + version "0.25.6" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.6.tgz#9b82a3db2fa131aec069ab040fd57ed0a880cdcd" + integrity sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg== optionalDependencies: - "@esbuild/aix-ppc64" "0.19.12" - "@esbuild/android-arm" "0.19.12" - "@esbuild/android-arm64" "0.19.12" - "@esbuild/android-x64" "0.19.12" - "@esbuild/darwin-arm64" "0.19.12" - "@esbuild/darwin-x64" "0.19.12" - "@esbuild/freebsd-arm64" "0.19.12" - "@esbuild/freebsd-x64" "0.19.12" - "@esbuild/linux-arm" "0.19.12" - "@esbuild/linux-arm64" "0.19.12" - "@esbuild/linux-ia32" "0.19.12" - "@esbuild/linux-loong64" "0.19.12" - "@esbuild/linux-mips64el" "0.19.12" - "@esbuild/linux-ppc64" "0.19.12" - "@esbuild/linux-riscv64" "0.19.12" - "@esbuild/linux-s390x" "0.19.12" - "@esbuild/linux-x64" "0.19.12" - "@esbuild/netbsd-x64" "0.19.12" - "@esbuild/openbsd-x64" "0.19.12" - "@esbuild/sunos-x64" "0.19.12" - "@esbuild/win32-arm64" "0.19.12" - "@esbuild/win32-ia32" "0.19.12" - "@esbuild/win32-x64" "0.19.12" + "@esbuild/aix-ppc64" "0.25.6" + "@esbuild/android-arm" "0.25.6" + "@esbuild/android-arm64" "0.25.6" + "@esbuild/android-x64" "0.25.6" + "@esbuild/darwin-arm64" "0.25.6" + "@esbuild/darwin-x64" "0.25.6" + "@esbuild/freebsd-arm64" "0.25.6" + "@esbuild/freebsd-x64" "0.25.6" + "@esbuild/linux-arm" "0.25.6" + "@esbuild/linux-arm64" "0.25.6" + "@esbuild/linux-ia32" "0.25.6" + "@esbuild/linux-loong64" "0.25.6" + "@esbuild/linux-mips64el" "0.25.6" + "@esbuild/linux-ppc64" "0.25.6" + "@esbuild/linux-riscv64" "0.25.6" + "@esbuild/linux-s390x" "0.25.6" + "@esbuild/linux-x64" "0.25.6" + "@esbuild/netbsd-arm64" "0.25.6" + "@esbuild/netbsd-x64" "0.25.6" + "@esbuild/openbsd-arm64" "0.25.6" + "@esbuild/openbsd-x64" "0.25.6" + "@esbuild/openharmony-arm64" "0.25.6" + "@esbuild/sunos-x64" "0.25.6" + "@esbuild/win32-arm64" "0.25.6" + "@esbuild/win32-ia32" "0.25.6" + "@esbuild/win32-x64" "0.25.6" escape-string-regexp@^2.0.0: version "2.0.0" @@ -2056,37 +1879,6 @@ eventemitter3@^5.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== -execa@^5.0.0: - version "5.1.1" - resolved "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz" - integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== - dependencies: - cross-spawn "^7.0.3" - get-stream "^6.0.0" - human-signals "^2.1.0" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.1" - onetime "^5.1.2" - signal-exit "^3.0.3" - strip-final-newline "^2.0.0" - -fast-fifo@^1.0.0: - version "1.3.2" - resolved "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz" - integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== - -fast-glob@^3.2.9, fast-glob@^3.3.3: - version "3.3.3" - resolved "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz" - integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.8" - fast-xml-parser@4.4.1: version "4.4.1" resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" @@ -2101,29 +1893,19 @@ fast-xml-parser@5.2.5: dependencies: strnum "^2.1.0" -fastq@^1.6.0: - version "1.19.1" - resolved "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz" - integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== - dependencies: - reusify "^1.0.4" - -fecha@^4.2.0: - version "4.2.3" - resolved "https://registry.npmjs.org/fecha/-/fecha-4.2.3.tgz" - integrity sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw== +fdir@^6.4.4: + version "6.4.6" + resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== -fill-range@^7.1.1: - version "7.1.1" - resolved "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz" - integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== +fix-dts-default-cjs-exports@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz#955cb6b3d519691c57828b078adadf2cb92e9549" + integrity sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg== dependencies: - to-regex-range "^5.0.1" - -fn.name@1.x.x: - version "1.1.0" - resolved "https://registry.npmjs.org/fn.name/-/fn.name-1.1.0.tgz" - integrity sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw== + magic-string "^0.30.17" + mlly "^1.7.4" + rollup "^4.34.8" follow-redirects@^1.15.6: version "1.15.9" @@ -2161,23 +1943,6 @@ fsevents@~2.3.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== -get-iterator@^1.0.2: - version "1.0.2" - resolved "https://registry.npmjs.org/get-iterator/-/get-iterator-1.0.2.tgz" - integrity sha512-v+dm9bNVfOYsY1OrhaCrmyOcYoSeVvbt+hHZ0Au+T+p1y+0Uyj9aMaGIeUTT6xdpRbWzDeYKvfOslPhggQMcsg== - -get-stream@^6.0.0: - version "6.0.1" - resolved "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz" - integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== - -glob-parent@^5.1.2, glob-parent@~5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - glob@^10.3.10: version "10.3.10" resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" @@ -2189,18 +1954,6 @@ glob@^10.3.10: minipass "^5.0.0 || ^6.0.2 || ^7.0.0" path-scurry "^1.10.1" -globby@^11.0.3: - version "11.1.0" - resolved "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: version "4.2.11" resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" @@ -2224,33 +1977,11 @@ html-minifier-terser@^7.2.0: relateurl "^0.2.7" terser "^5.15.1" -human-signals@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz" - integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== - -iconv-lite@^0.6.2: - version "0.6.3" - resolved "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz" - integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== - dependencies: - safer-buffer ">= 2.1.2 < 3.0.0" - ieee754@^1.2.1: version "1.2.1" resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== -ignore@^5.2.0: - version "5.3.2" - resolved "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz" - integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== - -inherits@^2.0.3: - version "2.0.4" - resolved "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - interface-datastore@^8.3.0, interface-datastore@^8.3.1: version "8.3.2" resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz" @@ -2264,14 +1995,6 @@ interface-store@^6.0.0: resolved "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz" integrity sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA== -ipfs-unixfs@^11.1.4: - version "11.2.5" - resolved "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-11.2.5.tgz" - integrity sha512-uasYJ0GLPbViaTFsOLnL9YPjX5VmhnqtWRriogAHOe4ApmIi9VAOFBzgDHsUW2ub4pEa/EysbtWk126g2vkU/g== - dependencies: - protons-runtime "^5.5.0" - uint8arraylist "^2.4.8" - ipns@10.1.2: version "10.1.2" resolved "https://registry.npmjs.org/ipns/-/ipns-10.1.2.tgz" @@ -2288,99 +2011,16 @@ ipns@10.1.2: uint8arraylist "^2.4.8" uint8arrays "^5.1.0" -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-electron@^2.2.0: - version "2.2.2" - resolved "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz" - integrity sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg== - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== -is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.3" - resolved "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-plain-obj@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz" - integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - isexe@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== -iso-url@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/iso-url/-/iso-url-1.2.1.tgz" - integrity sha512-9JPDgCN4B7QPkLtYAAOrEuAWvP9rWvR5offAr0/SeF046wIkglqH3VXgYYP6NcsKslH80UIVgmPqNe3j7tG2ng== - -it-all@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-all/-/it-all-3.0.4.tgz" - integrity sha512-UMiy0i9DqCHBdWvMbzdYvVGa5/w4t1cc4nchpbnjdLhklglv8mQeEYnii0gvKESJuL1zV32Cqdb33R6/GPfxpQ== - -it-first@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-first/-/it-first-3.0.4.tgz" - integrity sha512-FtQl84iTNxN5EItP/JgL28V2rzNMkCzTUlNoj41eVdfix2z1DBuLnBqZ0hzYhGGa1rMpbQf0M7CQSA2adlrLJg== - -it-glob@^3.0.1: - version "3.0.4" - resolved "https://registry.npmjs.org/it-glob/-/it-glob-3.0.4.tgz" - integrity sha512-73PbGBTK/dHp5PX4l8pkQH1ozCONP0U+PB3qMqltxPonRJQNomINE3Hn9p02m2GOu95VoeVvSZdHI2N+qub0pw== - dependencies: - fast-glob "^3.3.3" - -it-last@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/it-last/-/it-last-3.0.4.tgz" - integrity sha512-Ns+KTsQWhs0KCvfv5X3Ck3lpoYxHcp4zUp4d+AOdmC8cXXqDuoZqAjfWhgCbxJubXyIYWdfE2nRcfWqgvZHP8Q== - -it-map@^3.0.5: - version "3.0.5" - resolved "https://registry.npmjs.org/it-map/-/it-map-3.0.5.tgz" - integrity sha512-hB0TDXo/h4KSJJDSRLgAPmDroiXP6Fx1ck4Bzl3US9hHfZweTKsuiP0y4gXuTMcJlS6vj0bb+f70rhkD47ZA3w== - dependencies: - it-peekable "^3.0.0" - -it-peekable@^3.0.0, it-peekable@^3.0.3: - version "3.0.3" - resolved "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.3.tgz" - integrity sha512-Wx21JX/rMzTEl9flx3DGHuPV1KQFGOl8uoKfQtmZHgPQtGb89eQ6RyVd82h3HuP9Ghpt0WgBDlmmdWeHXqyx7w== - it-pushable@^3.2.3: version "3.2.3" resolved "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz" @@ -2388,23 +2028,11 @@ it-pushable@^3.2.3: dependencies: p-defer "^4.0.0" -it-stream-types@^2.0.1, it-stream-types@^2.0.2: +it-stream-types@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz" integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== -it-to-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/it-to-stream/-/it-to-stream-1.0.0.tgz" - integrity sha512-pLULMZMAB/+vbdvbZtebC0nWBTbG581lk6w8P7DfIIIKUfa8FbY7Oi0FxZcFPbxvISs7A9E+cMpLDBc1XhpAOA== - dependencies: - buffer "^6.0.3" - fast-fifo "^1.0.0" - get-iterator "^1.0.2" - p-defer "^3.0.0" - p-fifo "^1.0.0" - readable-stream "^3.6.0" - jackspeak@^2.3.5: version "2.3.6" resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" @@ -2414,9 +2042,9 @@ jackspeak@^2.3.5: optionalDependencies: "@pkgjs/parseargs" "^0.11.0" -joycon@^3.0.1: +joycon@^3.1.1: version "3.1.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" + resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== js2xmlparser@^4.0.2: @@ -2426,21 +2054,21 @@ js2xmlparser@^4.0.2: dependencies: xmlcreate "^2.0.4" -jsdoc@4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.2.tgz" - integrity sha512-e8cIg2z62InH7azBBi3EsSEqrKx+nUtAS5bBcYTSpZFA+vhNPyhv8PTFZ0WsjOPDj04/dOLlm08EDcQJDqaGQg== +jsdoc@4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-4.0.4.tgz#86565a9e39cc723a3640465b3fb189a22d1206ca" + integrity sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw== dependencies: "@babel/parser" "^7.20.15" "@jsdoc/salty" "^0.2.1" - "@types/markdown-it" "^12.2.3" + "@types/markdown-it" "^14.1.1" bluebird "^3.7.2" catharsis "^0.9.0" escape-string-regexp "^2.0.0" js2xmlparser "^4.0.2" klaw "^3.0.0" - markdown-it "^12.3.2" - markdown-it-anchor "^8.4.1" + markdown-it "^14.1.0" + markdown-it-anchor "^8.6.7" marked "^4.0.10" mkdirp "^1.0.4" requizzle "^0.2.3" @@ -2470,53 +2098,9 @@ klaw@^3.0.0: dependencies: graceful-fs "^4.1.9" -kubo-rpc-client@5.2.0: - version "5.2.0" - resolved "https://registry.npmjs.org/kubo-rpc-client/-/kubo-rpc-client-5.2.0.tgz" - integrity sha512-J3ppL1xf7f27NDI9jUPGkr1QiExXLyxUTUwHUMMB1a4AZR4s6113SVXPHRYwe1pFIO3hRb5G+0SuHaxYSfhzBA== - dependencies: - "@ipld/dag-cbor" "^9.0.0" - "@ipld/dag-json" "^10.0.0" - "@ipld/dag-pb" "^4.0.0" - "@libp2p/crypto" "^5.0.0" - "@libp2p/interface" "^2.0.0" - "@libp2p/logger" "^5.0.0" - "@libp2p/peer-id" "^5.0.0" - "@multiformats/multiaddr" "^12.2.1" - "@multiformats/multiaddr-to-uri" "^11.0.0" - any-signal "^4.1.1" - blob-to-it "^2.0.5" - browser-readablestream-to-it "^2.0.5" - dag-jose "^5.0.0" - electron-fetch "^1.9.1" - err-code "^3.0.1" - ipfs-unixfs "^11.1.4" - iso-url "^1.2.1" - it-all "^3.0.4" - it-first "^3.0.4" - it-glob "^3.0.1" - it-last "^3.0.4" - it-map "^3.0.5" - it-peekable "^3.0.3" - it-to-stream "^1.0.0" - merge-options "^3.0.4" - multiformats "^13.1.0" - nanoid "^5.0.7" - native-fetch "^4.0.2" - parse-duration "^2.1.2" - react-native-fetch-api "^3.0.0" - stream-to-it "^1.0.1" - uint8arrays "^5.0.3" - wherearewe "^2.0.1" - -kuler@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/kuler/-/kuler-2.0.0.tgz" - integrity sha512-Xq9nH7KlWZmXAtodXDDRE7vs6DU1gTU8zYDHDiWLSip45Egwq3plLHzPn27NgvzL2r1LMPC1vdqh98sQxtqj4A== - -lilconfig@^3.0.0: +lilconfig@^3.1.1: version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" + resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: @@ -2524,12 +2108,12 @@ lines-and-columns@^1.1.6: resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== -linkify-it@^3.0.1: - version "3.0.3" - resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-3.0.3.tgz" - integrity sha512-ynTsyrFSdE5oZ/O9GEf00kPngmOfVwazR5GKDq6EYfhlpFug3J2zybX56a2PRRpc9P+FuSoGNAwjlbDs9jJBPQ== +linkify-it@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== dependencies: - uc.micro "^1.0.1" + uc.micro "^2.0.0" load-tsconfig@^0.2.3: version "0.2.5" @@ -2546,18 +2130,6 @@ lodash@^4.17.15, lodash@^4.17.21: resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== -logform@^2.3.2, logform@^2.4.0: - version "2.6.0" - resolved "https://registry.npmjs.org/logform/-/logform-2.6.0.tgz" - integrity sha512-1ulHeNPp6k/LD8H91o7VYFBng5i1BDE7HoKxVbZiGFidS1Rj65qcywLxX+pVfAPoQJEjRdvKcusKwOupHCVOVQ== - dependencies: - "@colors/colors" "1.6.0" - "@types/triple-beam" "^1.3.2" - fecha "^4.2.0" - ms "^2.1.1" - safe-stable-stringify "^2.3.1" - triple-beam "^1.3.0" - lower-case@^2.0.2: version "2.0.2" resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" @@ -2570,61 +2142,44 @@ lower-case@^2.0.2: resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== +magic-string@^0.30.17: + version "0.30.17" + resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== + dependencies: + "@jridgewell/sourcemap-codec" "^1.5.0" + main-event@^1.0.1: version "1.0.1" resolved "https://registry.npmjs.org/main-event/-/main-event-1.0.1.tgz" integrity sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw== -markdown-it-anchor@^8.4.1: +markdown-it-anchor@^8.6.7: version "8.6.7" - resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" + resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== -markdown-it@^12.3.2: - version "12.3.2" - resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-12.3.2.tgz" - integrity sha512-TchMembfxfNVpHkbtriWltGWc+m3xszaRD0CZup7GFFhzIgQqxIfn3eGj1yZpfuflzPvfkt611B2Q/Bsk1YnGg== +markdown-it@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== dependencies: argparse "^2.0.1" - entities "~2.1.0" - linkify-it "^3.0.1" - mdurl "^1.0.1" - uc.micro "^1.0.5" + entities "^4.4.0" + linkify-it "^5.0.0" + mdurl "^2.0.0" + punycode.js "^2.3.1" + uc.micro "^2.1.0" marked@^4.0.10: version "4.3.0" resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz" - integrity sha512-/sKlQJCBYVY9Ers9hqzKou4H6V5UWc/M59TH2dvkt+84itfnq7uFOMLpOiOS4ujvHP4etln18fmIxA5R5fll0g== - -merge-options@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz" - integrity sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ== - dependencies: - is-plain-obj "^2.1.0" - -merge-stream@^2.0.0: +mdurl@^2.0.0: version "2.0.0" - resolved "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.8: - version "4.0.8" - resolved "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz" - integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== - dependencies: - braces "^3.0.3" - picomatch "^2.3.1" + resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== mime-db@1.52.0: version "1.52.0" @@ -2638,11 +2193,6 @@ mime-types@^2.1.12: dependencies: mime-db "1.52.0" -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - minimatch@^9.0.1: version "9.0.3" resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" @@ -2660,10 +2210,15 @@ mkdirp@^1.0.4: resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== +mlly@^1.7.4: + version "1.7.4" + resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" + integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== + dependencies: + acorn "^8.14.0" + pathe "^2.0.1" + pkg-types "^1.3.0" + ufo "^1.5.4" ms@^2.1.3: version "2.1.3" @@ -2685,21 +2240,11 @@ multiformats@^13.0.0: resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz" integrity sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA== -multiformats@^13.1.0: - version "13.1.0" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.0.tgz" - integrity sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ== - multiformats@^13.2.2, multiformats@^13.3.6: version "13.3.7" resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz" integrity sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ== -multiformats@~13.1.3: - version "13.1.3" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.1.3.tgz" - integrity sha512-CZPi9lFZCM/+7oRolWYsvalsyWQGFo+GpdaTmjxXXomC+nP/W1Rnxb9sUgjvmNmRZ5bOPqRAl4nuK+Ydw/4tGw== - mz@^2.7.0: version "2.7.0" resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" @@ -2709,16 +2254,6 @@ mz@^2.7.0: object-assign "^4.0.1" thenify-all "^1.0.0" -nanoid@^5.0.7: - version "5.1.5" - resolved "https://registry.npmjs.org/nanoid/-/nanoid-5.1.5.tgz" - integrity sha512-Ir/+ZpE9fDsNH0hQ3C68uyThDXzYcim2EqcZ8zn8Chtt1iylPT9xXJB0kPCnqzgcEGikO9RxSrh63MsmVCU7Fw== - -native-fetch@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/native-fetch/-/native-fetch-4.0.2.tgz" - integrity sha512-4QcVlKFtv2EYVS5MBgsGX5+NWKtbDbIECdUXDBGDMAZXq3Jkv9zf+y8iS7Ub8fEdga3GpYeazp9gauNqXHJOCg== - no-case@^3.0.4: version "3.0.4" resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" @@ -2727,55 +2262,16 @@ no-case@^3.0.4: lower-case "^2.0.2" tslib "^2.0.3" -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -npm-run-path@^4.0.1: - version "4.0.1" - resolved "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - object-assign@^4.0.1: version "4.1.1" resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== -one-time@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/one-time/-/one-time-1.0.0.tgz" - integrity sha512-5DXOiRKwuSEcQ/l0kGCF6Q3jcADFv5tSmRaJck/OqkVFcOzutB134KRSfF0xDrL39MNnqxbHBbUUcjZIhTgb2g== - dependencies: - fn.name "1.x.x" - -onetime@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -p-defer@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-3.0.0.tgz" - integrity sha512-ugZxsxmtTln604yeYd29EGrNhazN2lywetzpKhfmQjW/VJmhpDmWbiX+h0zL8V91R0UXkhb3KtPmyq9PZw3aYw== - p-defer@^4.0.0: version "4.0.0" resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz" integrity sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ== -p-fifo@^1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/p-fifo/-/p-fifo-1.0.0.tgz" - integrity sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A== - dependencies: - fast-fifo "^1.0.0" - p-defer "^3.0.0" - p-queue@^8.0.1: version "8.0.1" resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz" @@ -2797,11 +2293,6 @@ param-case@^3.0.4: dot-case "^3.0.4" tslib "^2.0.3" -parse-duration@^2.1.2: - version "2.1.4" - resolved "https://registry.npmjs.org/parse-duration/-/parse-duration-2.1.4.tgz" - integrity sha512-b98m6MsCh+akxfyoz9w9dt0AlH2dfYLOBss5SdDsr9pkhKNvkWBXU/r8A4ahmIGByBOLV2+4YwfCuFxbDDaGyg== - pascal-case@^3.1.2: version "3.1.2" resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" @@ -2810,7 +2301,7 @@ pascal-case@^3.1.2: no-case "^3.0.4" tslib "^2.0.3" -path-key@^3.0.0, path-key@^3.1.0: +path-key@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== @@ -2823,28 +2314,41 @@ path-scurry@^1.10.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== +pathe@^2.0.1: + version "2.0.3" + resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== -picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^4.0.2: + version "4.0.3" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pirates@^4.0.1: version "4.0.6" resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== -postcss-load-config@^4.0.1: - version "4.0.2" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz" - integrity sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ== +pkg-types@^1.3.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== + dependencies: + confbox "^0.1.8" + mlly "^1.7.4" + pathe "^2.0.1" + +postcss-load-config@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" + integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== dependencies: - lilconfig "^3.0.0" - yaml "^2.3.4" + lilconfig "^3.1.1" prettier@3.6.2: version "3.6.2" @@ -2870,38 +2374,20 @@ proxy-from-env@^1.1.0: resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== +punycode.js@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== + punycode@^2.1.0: version "2.3.1" resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -react-native-fetch-api@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/react-native-fetch-api/-/react-native-fetch-api-3.0.0.tgz" - integrity sha512-g2rtqPjdroaboDKTsJCTlcmtw54E25OjyaunUP0anOZn4Fuo2IKs8BVfe02zVggA/UysbmfSnRJIqtNkAgggNA== - dependencies: - p-defer "^3.0.0" - -readable-stream@^3.4.0, readable-stream@^3.6.0: - version "3.6.2" - resolved "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readdirp@~3.6.0: - version "3.6.0" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz" - integrity sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA== - dependencies: - picomatch "^2.2.1" +readdirp@^4.0.1: + version "4.1.2" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== relateurl@^0.2.7: version "0.2.7" @@ -2920,62 +2406,35 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== -reusify@^1.0.4: - version "1.1.0" - resolved "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz" - integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== - -rollup@^4.0.2: - version "4.45.0" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.45.0.tgz#92d1b164eca1c6f2cb399ae7a1a8ee78967b6e33" - integrity sha512-WLjEcJRIo7i3WDDgOIJqVI2d+lAC3EwvOGy+Xfq6hs+GQuAA4Di/H72xmXkOhrIWFg2PFYSKZYfH0f4vfKXN4A== +rollup@^4.34.8: + version "4.45.1" + resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.45.1.tgz#d0ef72a8d0a9210d832f9c3c5f3b6a2aa4b0ba64" + integrity sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw== dependencies: "@types/estree" "1.0.8" optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.45.0" - "@rollup/rollup-android-arm64" "4.45.0" - "@rollup/rollup-darwin-arm64" "4.45.0" - "@rollup/rollup-darwin-x64" "4.45.0" - "@rollup/rollup-freebsd-arm64" "4.45.0" - "@rollup/rollup-freebsd-x64" "4.45.0" - "@rollup/rollup-linux-arm-gnueabihf" "4.45.0" - "@rollup/rollup-linux-arm-musleabihf" "4.45.0" - "@rollup/rollup-linux-arm64-gnu" "4.45.0" - "@rollup/rollup-linux-arm64-musl" "4.45.0" - "@rollup/rollup-linux-loongarch64-gnu" "4.45.0" - "@rollup/rollup-linux-powerpc64le-gnu" "4.45.0" - "@rollup/rollup-linux-riscv64-gnu" "4.45.0" - "@rollup/rollup-linux-riscv64-musl" "4.45.0" - "@rollup/rollup-linux-s390x-gnu" "4.45.0" - "@rollup/rollup-linux-x64-gnu" "4.45.0" - "@rollup/rollup-linux-x64-musl" "4.45.0" - "@rollup/rollup-win32-arm64-msvc" "4.45.0" - "@rollup/rollup-win32-ia32-msvc" "4.45.0" - "@rollup/rollup-win32-x64-msvc" "4.45.0" + "@rollup/rollup-android-arm-eabi" "4.45.1" + "@rollup/rollup-android-arm64" "4.45.1" + "@rollup/rollup-darwin-arm64" "4.45.1" + "@rollup/rollup-darwin-x64" "4.45.1" + "@rollup/rollup-freebsd-arm64" "4.45.1" + "@rollup/rollup-freebsd-x64" "4.45.1" + "@rollup/rollup-linux-arm-gnueabihf" "4.45.1" + "@rollup/rollup-linux-arm-musleabihf" "4.45.1" + "@rollup/rollup-linux-arm64-gnu" "4.45.1" + "@rollup/rollup-linux-arm64-musl" "4.45.1" + "@rollup/rollup-linux-loongarch64-gnu" "4.45.1" + "@rollup/rollup-linux-powerpc64le-gnu" "4.45.1" + "@rollup/rollup-linux-riscv64-gnu" "4.45.1" + "@rollup/rollup-linux-riscv64-musl" "4.45.1" + "@rollup/rollup-linux-s390x-gnu" "4.45.1" + "@rollup/rollup-linux-x64-gnu" "4.45.1" + "@rollup/rollup-linux-x64-musl" "4.45.1" + "@rollup/rollup-win32-arm64-msvc" "4.45.1" + "@rollup/rollup-win32-ia32-msvc" "4.45.1" + "@rollup/rollup-win32-x64-msvc" "4.45.1" fsevents "~2.3.2" -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-stable-stringify@^2.3.1: - version "2.4.3" - resolved "https://registry.npmjs.org/safe-stable-stringify/-/safe-stable-stringify-2.4.3.tgz" - integrity sha512-e2bDA2WJT0wxseVd4lsDP4+3ONX6HpMXQa1ZhFQ7SU+GjvORCmShbCMltrtIDfkYhVHrOcPtj+KhmDBdPdZD1g== - -"safer-buffer@>= 2.1.2 < 3.0.0": - version "2.1.2" - resolved "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - shebang-command@^2.0.0: version "2.0.0" resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" @@ -2995,28 +2454,11 @@ showdown@^2.1.0: dependencies: commander "^9.0.0" -signal-exit@^3.0.3: - version "3.0.7" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - signal-exit@^4.0.1: version "4.1.0" resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz" - integrity sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg== - dependencies: - is-arrayish "^0.3.1" - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - source-map-support@~0.5.20: version "0.5.21" resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" @@ -3037,18 +2479,6 @@ source-map@^0.6.0, source-map@~0.6.0: resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== -stack-trace@0.0.x: - version "0.0.10" - resolved "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz" - integrity sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg== - -stream-to-it@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/stream-to-it/-/stream-to-it-1.0.1.tgz" - integrity sha512-AqHYAYPHcmvMrcLNgncE/q0Aj/ajP6A4qGhxP6EVn7K3YTNs0bJpJyk57wc2Heb7MUL64jurvmnmui8D9kjZgA== - dependencies: - it-stream-types "^2.0.1" - "string-width-cjs@npm:string-width@^4.2.0": version "4.2.3" resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" @@ -3076,13 +2506,6 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - "strip-ansi-cjs@npm:strip-ansi@^6.0.1": version "6.0.1" resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" @@ -3104,11 +2527,6 @@ strip-ansi@^7.0.1: dependencies: ansi-regex "^6.0.1" -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - strip-json-comments@^3.1.0: version "3.1.1" resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" @@ -3124,9 +2542,9 @@ strnum@^2.1.0: resolved "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz" integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== -sucrase@^3.20.3: +sucrase@^3.35.0: version "3.35.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" + resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -3152,11 +2570,6 @@ terser@^5.15.1: commander "^2.20.0" source-map-support "~0.5.20" -text-hex@1.0.x: - version "1.0.0" - resolved "https://registry.npmjs.org/text-hex/-/text-hex-1.0.0.tgz" - integrity sha512-uuVGNWzgJ4yhRaNSiubPY7OjISw4sw4E5Uv0wbjp+OzcbmVU/rsT8ujgcXJhn9ypzsgr5vlzpPqP+MBBKcGvbg== - thenify-all@^1.0.0: version "1.6.0" resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" @@ -3176,12 +2589,18 @@ timestamp-nano@^1.0.1: resolved "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.1.tgz" integrity sha512-4oGOVZWTu5sl89PtCDnhQBSt7/vL1zVEwAfxH1p49JhTosxzVQWYBYFRFZ8nJmo0G6f824iyP/44BFAwIoKvIA== -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== +tinyexec@^0.3.2: + version "0.3.2" + resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== + +tinyglobby@^0.2.11: + version "0.2.14" + resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== dependencies: - is-number "^7.0.0" + fdir "^6.4.4" + picomatch "^4.0.2" tr46@^1.0.1: version "1.0.1" @@ -3195,11 +2614,6 @@ tree-kill@^1.2.2: resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== -triple-beam@^1.3.0: - version "1.4.1" - resolved "https://registry.npmjs.org/triple-beam/-/triple-beam-1.4.1.tgz" - integrity sha512-aZbgViZrg1QNcG+LULa7nhZpJTZSLm/mXnHXnbAbjmN5aSa0y7V+wvv6+4WaBtpISJzThKy+PIPxc1Nq1EJ9mg== - ts-interface-checker@^0.1.9: version "0.1.13" resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" @@ -3210,35 +2624,43 @@ tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== -tsup@8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/tsup/-/tsup-8.0.1.tgz" - integrity sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg== - dependencies: - bundle-require "^4.0.0" - cac "^6.7.12" - chokidar "^3.5.1" - debug "^4.3.1" - esbuild "^0.19.2" - execa "^5.0.0" - globby "^11.0.3" - joycon "^3.0.1" - postcss-load-config "^4.0.1" +tsup@8.5.0: + version "8.5.0" + resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.5.0.tgz#4b1e25b1a8f4e4f89b764207bf37cfe2d7411d31" + integrity sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ== + dependencies: + bundle-require "^5.1.0" + cac "^6.7.14" + chokidar "^4.0.3" + consola "^3.4.0" + debug "^4.4.0" + esbuild "^0.25.0" + fix-dts-default-cjs-exports "^1.0.0" + joycon "^3.1.1" + picocolors "^1.1.1" + postcss-load-config "^6.0.1" resolve-from "^5.0.0" - rollup "^4.0.2" + rollup "^4.34.8" source-map "0.8.0-beta.0" - sucrase "^3.20.3" + sucrase "^3.35.0" + tinyexec "^0.3.2" + tinyglobby "^0.2.11" tree-kill "^1.2.2" -typescript@5.3.3: - version "5.3.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== +typescript@5.8.3: + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== -uc.micro@^1.0.1, uc.micro@^1.0.5: - version "1.0.6" - resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz" - integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== +uc.micro@^2.0.0, uc.micro@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== + +ufo@^1.5.4: + version "1.6.1" + resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" + integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== uint8-varint@^2.0.1, uint8-varint@^2.0.2: version "2.0.2" @@ -3262,7 +2684,7 @@ uint8arrays@^4.0.2: dependencies: multiformats "^12.0.1" -uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.0.3, uint8arrays@^5.1.0: +uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.1.0: version "5.1.0" resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz" integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== @@ -3279,21 +2701,11 @@ undici-types@~7.8.0: resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz" integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== -undici@7.11.0: - version "7.11.0" - resolved "https://registry.yarnpkg.com/undici/-/undici-7.11.0.tgz#8e13a54f62afa756666c0590c38b3866e286d0b3" - integrity sha512-heTSIac3iLhsmZhUCjyS3JQEkZELateufzZuBaVM5RHXdSBMb1LPMQf5x+FH7qjsZYDP0ttAc3nnVpUB+wYbOg== - universalify@^2.0.0: version "2.0.1" resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - uuid@11.1.0: version "11.1.0" resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" @@ -3326,13 +2738,6 @@ whatwg-url@^7.0.0: tr46 "^1.0.1" webidl-conversions "^4.0.2" -wherearewe@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz" - integrity sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw== - dependencies: - is-electron "^2.2.0" - which@^2.0.1: version "2.0.2" resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" @@ -3340,32 +2745,6 @@ which@^2.0.1: dependencies: isexe "^2.0.0" -winston-transport@^4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/winston-transport/-/winston-transport-4.7.0.tgz" - integrity sha512-ajBj65K5I7denzer2IYW6+2bNIVqLGDHqDw3Ow8Ohh+vdW+rv4MZ6eiDvHoKhfJFZ2auyN8byXieDDJ96ViONg== - dependencies: - logform "^2.3.2" - readable-stream "^3.6.0" - triple-beam "^1.3.0" - -winston@3.12.0: - version "3.12.0" - resolved "https://registry.npmjs.org/winston/-/winston-3.12.0.tgz" - integrity sha512-OwbxKaOlESDi01mC9rkM0dQqQt2I8DAUMRLZ/HpbwvDXm85IryEHgoogy5fziQy38PntgZsLlhAYHz//UPHZ5w== - dependencies: - "@colors/colors" "^1.6.0" - "@dabh/diagnostics" "^2.0.2" - async "^3.2.3" - is-stream "^2.0.0" - logform "^2.4.0" - one-time "^1.0.0" - readable-stream "^3.4.0" - safe-stable-stringify "^2.3.1" - stack-trace "0.0.x" - triple-beam "^1.3.0" - winston-transport "^4.7.0" - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": version "7.0.0" resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" @@ -3388,8 +2767,3 @@ xmlcreate@^2.0.4: version "2.0.4" resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz" integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg== - -yaml@^2.3.4: - version "2.8.0" - resolved "https://registry.npmjs.org/yaml/-/yaml-2.8.0.tgz" - integrity sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ== From 5ffdc866e18216be0d1c22c4ab4a5d2c869ce8bb Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Wed, 16 Jul 2025 20:55:11 -0500 Subject: [PATCH 05/15] Test fixes --- src/index.js | 41 +++++---- test/index.spec.mjs | 203 +++++++++++++------------------------------- 2 files changed, 84 insertions(+), 160 deletions(-) diff --git a/src/index.js b/src/index.js index 7271185..eab6226 100644 --- a/src/index.js +++ b/src/index.js @@ -29,7 +29,7 @@ class FilebaseClient { #VALID_FORMATS = ["ipns-record", "raw", "car"]; #default_bucket; - #default_gateway = this.#PUBLIC_IPFS_GATEWAY; + #default_gateway; #ipfs_credentials; #ipfs_client; @@ -88,11 +88,7 @@ class FilebaseClient { Authorization: `Bearer ${Buffer.from(ipfsCredentials).toString("base64")}`, }, }, - method: "POST", responseType: "text", - validateStatus: function (status) { - return status === 200; - }, }); //endregion @@ -129,6 +125,11 @@ class FilebaseClient { }, }); //endregion + + //region IPFS Gateway Client + this.#default_gateway = + options?.gateway.endpoint || this.#PUBLIC_IPFS_GATEWAY; + //endregion } //region Utility Methods @@ -269,19 +270,30 @@ class FilebaseClient { //region File Methods async #uploadFiles(formData, options) { options.headers = options.headers || {}; + options.headers = { + ...options.headers, + }; options.headers["Authorization"] = `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; options.searchParams = options.searchParams || {}; options.searchParams["preserve-filenames"] = "true"; - const downloadResponse = await axios.request({ + const downloadResponse = await this.#ipfs_client.request({ + method: "POST", url: "api/v0/add", headers: options.headers, params: options.searchParams, + data: formData, + validateStatus: function (status) { + return status === 200; + }, }); const pins = []; for (const entry of downloadResponse.data.split("\n")) { + if (entry === "") { + continue; + } const parsedEntry = JSON.parse(entry); pins.push({ name: parsedEntry["Name"], @@ -455,7 +467,8 @@ class FilebaseClient { } async pinFile(path, cid, options) { - await axios.request({ + await this.#ipfs_client.request({ + method: "POST", url: "api/v0/pin/add", headers: { Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, @@ -464,6 +477,9 @@ class FilebaseClient { name: path, arg: cid, }, + validateStatus: function (status) { + return status === 200; + }, }); return true; } @@ -490,16 +506,7 @@ class FilebaseClient { } async uploadFiles(formData, options) { - let encodedCredentials = this.#getIpfsCredentials(options?.bucket); - const uploadOptions = { - headers: { - Authorization: `Bearer ${encodedCredentials}`, - }, - params: { - "preserve-filenames": "true", - }, - }; - + const uploadOptions = {}; return await this.#uploadFiles(formData, uploadOptions); } //endregion diff --git a/test/index.spec.mjs b/test/index.spec.mjs index 9ce0bb6..ce32307 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -8,14 +8,13 @@ import FilebaseClient from "../src/index.js"; // Application Constants const TEST_PREFIX = Date.now(); +const CLIENT_KEY = process.env.TEST_S3_KEY; +const CLIENT_SECRET = process.env.TEST_S3_SECRET; //region Bucket Tests test("create bucket", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Create bucket `create-bucket-test-pass` const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; @@ -38,10 +37,7 @@ test("create bucket", async () => { test("get bucket cid", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Create bucket `create-bucket-test-pass` const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; @@ -67,10 +63,7 @@ test("get bucket cid", async () => { test("generate bucket cid", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Create bucket `create-bucket-test-pass` const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; @@ -94,10 +87,7 @@ test("generate bucket cid", async () => { test("list buckets", async () => { const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), initialBucketsList = await filebaseClient.listBuckets(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -115,10 +105,7 @@ test("list buckets", async () => { test("delete bucket", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Create bucket `delete-bucket-test-pass` const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; @@ -148,10 +135,7 @@ test("delete bucket", async () => { //region File Tests async function createBucket(name) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Create bucket with name const bucketNameToCreate = name; @@ -168,11 +152,9 @@ async function createBucket(name) { async function uploadObject(bucket, key, body) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + }); // Upload Object await filebaseClient.uploadFile(key, body); @@ -187,11 +169,9 @@ async function uploadObject(bucket, key, body) { async function uploadObjects(bucket, key, body) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + }); // Upload Object await filebaseClient.uploadFiles(key, body); @@ -204,11 +184,9 @@ async function uploadObjects(bucket, key, body) { async function deleteObject(bucket, key) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + }); // Delete Object await filebaseClient.deleteFile(key); @@ -217,13 +195,10 @@ async function deleteObject(bucket, key) { async function deleteBucket(bucket) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); // Delete Bucket - await filebaseClient.deleteFile(bucket); + await filebaseClient.deleteBucket(bucket); return true; } @@ -238,18 +213,16 @@ test("delete object", async () => { const uploaded = await uploadObject( deleteTestBucket, objectNameToCreate, - Buffer.from("delete object", "utf-8"), + new Blob(["delete object"]), ); if (uploaded === false) { throw Error(`Failed to create object [delete-object-test]`); } // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: deleteTestBucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: deleteTestBucket, + }); // Delete object `delete-object-test` await filebaseClient.deleteFile(objectNameToCreate); @@ -337,11 +310,9 @@ test("generate presigned url for object", async () => { try { // Generate presigned URL for objects - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + }); const presignedUrl = await filebaseClient.generatePresignedUrl(objectNameToCreate); assert.strictEqual(typeof presignedUrl, "string"); @@ -372,11 +343,9 @@ test("download object", async () => { try { // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: downloadTestBucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + }); const downloadStream = await filebaseClient.downloadFile(objectNameToCreate), downloadFilename = uuidv4(), @@ -410,14 +379,10 @@ test("download object using gateway (ipfs)", async () => { try { // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }); const downloadStream = await filebaseClient.fetchContentByCid( uploaded["cid"], ), @@ -451,11 +416,9 @@ test("list objects", async () => { createdObjectCount++; } - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: listTestBucket }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: listTestBucket, + }); const objectList = await filebaseClient.listFiles(`list-object-test-`, { MaxKeys: 50, @@ -496,11 +459,9 @@ test("copy object", async () => { try { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { bucket: bucketSrc }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: bucketSrc, + }); // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` await filebaseClient.copyFile(objectNameToCreateSrc, bucketDest); @@ -528,10 +489,7 @@ test("copy object", async () => { //region Gateway Tests test("delete gateway", async () => { const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ); + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); await filebaseClient.createGateway(testGatewayName); await filebaseClient.deleteGateway(testGatewayName); const deletedName = await filebaseClient.getGateway(testGatewayName); @@ -540,10 +498,7 @@ test("delete gateway", async () => { test("create gateway", async () => { const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createGateway(testGatewayName); await filebaseClient.deleteGateway(testGatewayName); assert.strictEqual(createdName.name, testGatewayName); @@ -551,10 +506,7 @@ test("create gateway", async () => { test("update gateway", async () => { const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createGateway(testGatewayName); try { const updatedName = await filebaseClient.updateGateway(createdName.name, { @@ -569,10 +521,7 @@ test("update gateway", async () => { test("get gateway", async () => { const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createGateway(testGatewayName, {}); try { const testName = await filebaseClient.getGateway(createdName.name); @@ -584,10 +533,7 @@ test("get gateway", async () => { test("list gateways", async () => { const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_GW_KEY || process.env.TEST_KEY, - process.env.TEST_GW_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), initialGatewaysList = await filebaseClient.listGateways(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -610,10 +556,7 @@ const TEST_CID = process.env.TEST_NAME_CID, test("delete name", async () => { const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ); + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); await filebaseClient.createIpnsName(testNameLabel, TEST_CID); await filebaseClient.deleteIpnsName(testNameLabel); const deletedName = await filebaseClient.getIpnsName(testNameLabel); @@ -622,10 +565,7 @@ test("delete name", async () => { test("create name", async () => { const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); await filebaseClient.deleteIpnsName(testNameLabel); assert.strictEqual(createdName.label, testNameLabel); @@ -634,10 +574,7 @@ test("create name", async () => { test("import name", async () => { const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), importedName = await filebaseClient.importIpnsName( testNameLabel, TEST_CID, @@ -650,10 +587,7 @@ test("import name", async () => { test("update name", async () => { const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const updatedName = await filebaseClient.updateIpnsName( @@ -668,10 +602,7 @@ test("update name", async () => { test("get name", async () => { const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const testName = await filebaseClient.getIpnsName(createdName.label); @@ -684,10 +615,7 @@ test("get name", async () => { test("resolve name", async () => { const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const testNameValue = await filebaseClient.resolveIpnsName( @@ -701,10 +629,7 @@ test("resolve name", async () => { test("list names", async () => { const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - ), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), initialNamesList = await filebaseClient.listIpnsNames(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -736,14 +661,10 @@ test("download object using gateway (ipns)", async () => { try { // Download object `download-object-test` and assert it completes - const filebaseClient = new FilebaseClient( - process.env.TEST_S3_KEY || process.env.TEST_KEY, - process.env.TEST_S3_SECRET || process.env.TEST_SECRET, - { - bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, - }, - ); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + }); // Create IPNS Name const createdName = await filebaseClient.createIpnsName( @@ -773,18 +694,14 @@ const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT"; test("create pin", async () => { const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, testPinName = `${TEST_PREFIX}-create-pin-test-pass`, - filebaseClient = new FilebaseClient( - process.env.TEST_NAME_KEY || process.env.TEST_KEY, - process.env.TEST_NAME_SECRET || process.env.TEST_SECRET, - { - bucket: testBucketName, - }, - ); + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: testBucketName, + }); await createBucket(testBucketName); try { const createdPin = await filebaseClient.pinFile(testPinName, TEST_CID_1); - assert.strictEqual(createdPin.pin.cid, TEST_CID_1); - await filebaseClient.deleteFile(createdPin.name); + assert.strictEqual(createdPin, true); + await filebaseClient.deleteFile(testPinName); } finally { await deleteBucket(testBucketName); } From 1d2fb74dbd89176200b9b38184f037d393963ad9 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Thu, 17 Jul 2025 13:43:44 -0500 Subject: [PATCH 06/15] General Fixes for Axios Clients --- src/index.js | 37 ++---- test/index.spec.mjs | 274 +++++++++++++++++++++++++++++++++++++------- 2 files changed, 242 insertions(+), 69 deletions(-) diff --git a/src/index.js b/src/index.js index eab6226..fdf6432 100644 --- a/src/index.js +++ b/src/index.js @@ -16,8 +16,8 @@ import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { unmarshalIPNSRecord } from "ipns"; class FilebaseClient { - #DEFAULT_IPFS_TIMEOUT = 60000; - #DEFAULT_IPFS_ENDPOINT = "https://rpc.filebase.io"; + #DEFAULT_RPC_TIMEOUT = 60000; + #DEFAULT_RPC_ENDPOINT = "https://rpc.filebase.io"; #DEFAULT_S3_ENDPOINT = "https://s3.filebase.com"; #DEFAULT_REGION = "us-east-1"; @@ -54,10 +54,7 @@ class FilebaseClient { */ constructor(clientKey, clientSecret, options) { //region S3 Client - const clientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_S3_ENDPOINT || this.#DEFAULT_S3_ENDPOINT - : this.#DEFAULT_S3_ENDPOINT; + const clientEndpoint = options?.endpoints?.s3 || this.#DEFAULT_S3_ENDPOINT; this.#s3_client = new S3Client({ credentials: { accessKeyId: clientKey, @@ -70,10 +67,7 @@ class FilebaseClient { //endregion //region IPFS Client - const ipfsEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_IPFS_ENDPOINT || this.#DEFAULT_IPFS_ENDPOINT - : this.#DEFAULT_IPFS_ENDPOINT; + const ipfsEndpoint = options?.endpoints?.rpc || this.#DEFAULT_RPC_ENDPOINT; this.#ipfs_credentials = `${clientKey}:${clientSecret}`; let ipfsCredentials = this.#ipfs_credentials; if (options?.bucket) { @@ -82,7 +76,7 @@ class FilebaseClient { } this.#ipfs_client = axios.create({ baseURL: ipfsEndpoint, - timeout: options?.timeout || this.#DEFAULT_IPFS_TIMEOUT, + timeout: options?.timeout || this.#DEFAULT_RPC_TIMEOUT, headers: { common: { Authorization: `Bearer ${Buffer.from(ipfsCredentials).toString("base64")}`, @@ -94,11 +88,7 @@ class FilebaseClient { //region Gateways Client const gatewayClientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_GW_ENDPOINT || - options?.gateway?.endpoint || - this.#DEFAULT_ENDPOINT - : options?.gateway?.endpoint || this.#DEFAULT_ENDPOINT; + options?.endpoints?.platform || this.#DEFAULT_ENDPOINT; this.#gateways_client = axios.create({ baseURL: `${gatewayClientEndpoint}/v1/gateways`, timeout: options?.timeout || this.#GATEWAY_DEFAULT_TIMEOUT, @@ -112,9 +102,7 @@ class FilebaseClient { //region Names Client const namesClientEndpoint = - process.env.NODE_ENV === "test" - ? process.env.TEST_NAME_ENDPOINT || this.#DEFAULT_ENDPOINT - : this.#DEFAULT_ENDPOINT; + options?.endpoints?.platform || this.#DEFAULT_ENDPOINT; this.#names_client = axios.create({ baseURL: `${namesClientEndpoint}/v1/names`, timeout: this.#DEFAULT_TIMEOUT, @@ -128,7 +116,7 @@ class FilebaseClient { //region IPFS Gateway Client this.#default_gateway = - options?.gateway.endpoint || this.#PUBLIC_IPFS_GATEWAY; + options?.endpoints.gateway || this.#PUBLIC_IPFS_GATEWAY; //endregion } @@ -275,14 +263,14 @@ class FilebaseClient { }; options.headers["Authorization"] = `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; - options.searchParams = options.searchParams || {}; - options.searchParams["preserve-filenames"] = "true"; + options.params = options.params || {}; + options.params["preserve-filenames"] = "true"; const downloadResponse = await this.#ipfs_client.request({ method: "POST", url: "api/v0/add", headers: options.headers, - params: options.searchParams, + params: options.params, data: formData, validateStatus: function (status) { return status === 200; @@ -895,8 +883,7 @@ class FilebaseClient { const downloadResponse = await axios.request({ method: "GET", - baseURL: selectedEndpoint, - url: `/${resolver}/${cid}`, + url: `${selectedEndpoint}/${resolver}/${cid}`, headers: downloadHeaders, responseType: "arraybuffer", timeout: options?.timeout || this.#GATEWAY_DEFAULT_TIMEOUT, diff --git a/test/index.spec.mjs b/test/index.spec.mjs index ce32307..7c01090 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -8,13 +8,27 @@ import FilebaseClient from "../src/index.js"; // Application Constants const TEST_PREFIX = Date.now(); -const CLIENT_KEY = process.env.TEST_S3_KEY; -const CLIENT_SECRET = process.env.TEST_S3_SECRET; +const TEST_IPFS_GATEWAY = + process.env.TEST_IPFS_GATEWAY || "https://ipfs.filebase.io"; +const TEST_S3_ENDPOINT = + process.env.TEST_S3_ENDPOINT || "https://s3.filebase.com"; +const TEST_RPC_ENDPOINT = + process.env.TEST_RPC_ENDPOINT || "https://rpc.filebase.io"; +const TEST_PLATFORM_ENDPOINT = + process.env.TEST_PLATFORM_ENDPOINT || "https://api.filebase.io"; +const CLIENT_KEY = process.env.TEST_KEY; +const CLIENT_SECRET = process.env.TEST_SECRET; //region Bucket Tests test("create bucket", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Create bucket `create-bucket-test-pass` const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; @@ -37,7 +51,13 @@ test("create bucket", async () => { test("get bucket cid", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Create bucket `create-bucket-test-pass` const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; @@ -63,7 +83,13 @@ test("get bucket cid", async () => { test("generate bucket cid", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Create bucket `create-bucket-test-pass` const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; @@ -87,7 +113,13 @@ test("generate bucket cid", async () => { test("list buckets", async () => { const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), initialBucketsList = await filebaseClient.listBuckets(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -105,7 +137,13 @@ test("list buckets", async () => { test("delete bucket", async () => { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Create bucket `delete-bucket-test-pass` const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; @@ -135,7 +173,13 @@ test("delete bucket", async () => { //region File Tests async function createBucket(name) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Create bucket with name const bucketNameToCreate = name; @@ -154,6 +198,11 @@ async function uploadObject(bucket, key, body) { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Upload Object @@ -171,10 +220,15 @@ async function uploadObjects(bucket, key, body) { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Upload Object - await filebaseClient.uploadFiles(key, body); + await filebaseClient.uploadDirectory(key, body); // Confirm Object Uploaded const uploadedObject = await filebaseClient.getFileMetadata(key); @@ -186,6 +240,11 @@ async function deleteObject(bucket, key) { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Delete Object @@ -195,7 +254,13 @@ async function deleteObject(bucket, key) { async function deleteBucket(bucket) { // Initialize FilebaseClient - const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); // Delete Bucket await filebaseClient.deleteBucket(bucket); @@ -222,6 +287,11 @@ test("delete object", async () => { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: deleteTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Delete object `delete-object-test` @@ -246,10 +316,10 @@ test("upload object", async () => { const uploaded = await uploadObject( uploadTestBucket, `create-object-test`, - Buffer.from("upload object", "utf-8"), + new Blob(["upload object"]), ); - assert.strictEqual(uploaded, true); + assert.notEqual(uploaded, false); await deleteObject(uploadTestBucket, `create-object-test`); } finally { await deleteBucket(uploadTestBucket); @@ -266,25 +336,25 @@ test("upload directory", async () => { const uploadForm = new FormData(); uploadForm.append( "file", - Buffer.from("upload test object", "utf-8"), - "/testObjects/1.txt", + new Blob(["upload test object"]), + "testObjects/1.txt", ); uploadForm.append( "file", - Buffer.from("upload deep test object", "utf-8"), - "/testObjects/deep/1.txt", + new Blob(["upload deep test object"]), + "testObjects/deep/1.txt", ); uploadForm.append( "file", - Buffer.from("upload top level test object", "utf-8"), - "/topLevel.txt", + new Blob(["upload top level test object"]), + "topLevel.txt", ); const uploaded = await uploadObjects( uploadDirectoryTestBucket, `create-directory-test`, uploadForm, ); - assert.strictEqual(uploaded, true); + assert.notEqual(uploaded, false); await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); } finally { await deleteBucket(uploadDirectoryTestBucket); @@ -302,7 +372,7 @@ test("generate presigned url for object", async () => { const uploaded = await uploadObject( downloadTestBucket, objectNameToCreate, - Buffer.from("download object", "utf-8"), + new Blob(["download object"]), ); if (uploaded === false) { throw Error(`Failed to create object [${objectNameToCreate}]`); @@ -312,6 +382,11 @@ test("generate presigned url for object", async () => { // Generate presigned URL for objects const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: downloadTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); const presignedUrl = await filebaseClient.generatePresignedUrl(objectNameToCreate); @@ -335,7 +410,7 @@ test("download object", async () => { const uploaded = await uploadObject( downloadTestBucket, objectNameToCreate, - Buffer.from("download object", "utf-8"), + new Blob(["download object"]), ); if (uploaded === false) { throw Error(`Failed to create object [download-object-test]`); @@ -345,6 +420,11 @@ test("download object", async () => { // Download object `download-object-test` and assert it completes const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: downloadTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); const downloadStream = await filebaseClient.downloadFile(objectNameToCreate), @@ -371,7 +451,7 @@ test("download object using gateway (ipfs)", async () => { const uploaded = await uploadObject( downloadTestBucket, objectNameToCreate, - Buffer.from("download object", "utf-8"), + new Blob(["download object"]), ); if (uploaded === false) { throw Error(`Failed to create object [download-object-test]`); @@ -381,10 +461,15 @@ test("download object using gateway (ipfs)", async () => { // Download object `download-object-test` and assert it completes const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: downloadTestBucket, - gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + gateway: TEST_IPFS_GATEWAY, + }, }); const downloadStream = await filebaseClient.fetchContentByCid( - uploaded["cid"], + uploaded["Metadata"]["cid"], ), downloadFilename = uuidv4(), downloadPath = Path.resolve(os.tmpdir(), downloadFilename), @@ -411,19 +496,24 @@ test("list objects", async () => { await uploadObject( listTestBucket, objectNameToCreate, - Buffer.from(`list objects ${createdObjectCount}`, "utf-8"), + new Blob([`list objects ${createdObjectCount}`]), ); createdObjectCount++; } const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: listTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); const objectList = await filebaseClient.listFiles(`list-object-test-`, { MaxKeys: 50, }); - assert.equal(objectList.Contents.length, 26); + assert.equal(objectList.entries.length, 26); let deletedObjectCount = 0; while (deletedObjectCount < 26) { @@ -448,10 +538,10 @@ test("copy object", async () => { const uploaded = await uploadObject( bucketSrc, objectNameToCreateSrc, - Buffer.from("copy object", "utf-8"), + new Blob(["copy object"]), ); try { - assert.equal(uploaded, true); + assert.notEqual(uploaded, false); // Create bucket `copy-object-test-pass-dest` const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; @@ -461,16 +551,30 @@ test("copy object", async () => { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: bucketSrc, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` - await filebaseClient.copyFile(objectNameToCreateSrc, bucketDest); + await filebaseClient.copyFile( + objectNameToCreateSrc, + objectNameToCreateSrc, + { + destinationBucket: bucketDest, + }, + ); try { // List bucket and assert new object exists const copiedObject = await filebaseClient.getFileMetadata( objectNameToCreateSrc, + { + bucket: bucketDest, + }, ); - assert.equal(copiedObject.ETag, '"8605273d870f50fde0d8fbcad4a8f702"'); + assert.equal(copiedObject.ETag, '"1181cc81508b7da38b06cc32da7df1f0"'); } finally { await deleteObject(bucketDest, objectNameToCreateSrc); } @@ -489,7 +593,13 @@ test("copy object", async () => { //region Gateway Tests test("delete gateway", async () => { const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); await filebaseClient.createGateway(testGatewayName); await filebaseClient.deleteGateway(testGatewayName); const deletedName = await filebaseClient.getGateway(testGatewayName); @@ -498,7 +608,13 @@ test("delete gateway", async () => { test("create gateway", async () => { const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createGateway(testGatewayName); await filebaseClient.deleteGateway(testGatewayName); assert.strictEqual(createdName.name, testGatewayName); @@ -506,7 +622,13 @@ test("create gateway", async () => { test("update gateway", async () => { const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createGateway(testGatewayName); try { const updatedName = await filebaseClient.updateGateway(createdName.name, { @@ -521,7 +643,13 @@ test("update gateway", async () => { test("get gateway", async () => { const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createGateway(testGatewayName, {}); try { const testName = await filebaseClient.getGateway(createdName.name); @@ -533,7 +661,13 @@ test("get gateway", async () => { test("list gateways", async () => { const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), initialGatewaysList = await filebaseClient.listGateways(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -556,7 +690,13 @@ const TEST_CID = process.env.TEST_NAME_CID, test("delete name", async () => { const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET); + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); await filebaseClient.createIpnsName(testNameLabel, TEST_CID); await filebaseClient.deleteIpnsName(testNameLabel); const deletedName = await filebaseClient.getIpnsName(testNameLabel); @@ -565,7 +705,13 @@ test("delete name", async () => { test("create name", async () => { const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); await filebaseClient.deleteIpnsName(testNameLabel); assert.strictEqual(createdName.label, testNameLabel); @@ -574,7 +720,13 @@ test("create name", async () => { test("import name", async () => { const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), importedName = await filebaseClient.importIpnsName( testNameLabel, TEST_CID, @@ -587,7 +739,13 @@ test("import name", async () => { test("update name", async () => { const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const updatedName = await filebaseClient.updateIpnsName( @@ -602,7 +760,13 @@ test("update name", async () => { test("get name", async () => { const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const testName = await filebaseClient.getIpnsName(createdName.label); @@ -615,7 +779,13 @@ test("get name", async () => { test("resolve name", async () => { const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); try { const testNameValue = await filebaseClient.resolveIpnsName( @@ -629,7 +799,13 @@ test("resolve name", async () => { test("list names", async () => { const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, - filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET), + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), initialNamesList = await filebaseClient.listIpnsNames(), countToCreate = 3; for (let i = 0; i < countToCreate; i++) { @@ -653,7 +829,7 @@ test("download object using gateway (ipns)", async () => { const uploaded = await uploadObject( downloadTestBucket, objectNameToCreate, - Buffer.from("download object", "utf-8"), + new Blob(["download object"]), ); if (uploaded === false) { throw Error(`Failed to create object [download-object-test]`); @@ -664,12 +840,17 @@ test("download object using gateway (ipns)", async () => { const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: downloadTestBucket, gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); // Create IPNS Name const createdName = await filebaseClient.createIpnsName( `${objectNameToCreate}-ipns`, - uploaded.cid, + uploaded["Metadata"]["cid"], ); const downloadStream = await filebaseClient.fetchContentByIpnsName( @@ -696,6 +877,11 @@ test("create pin", async () => { testPinName = `${TEST_PREFIX}-create-pin-test-pass`, filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { bucket: testBucketName, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, }); await createBucket(testBucketName); try { From a0407465a3c7727a6771ff720d13833a94c57067 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Mon, 21 Jul 2025 15:26:03 -0500 Subject: [PATCH 07/15] Use named export for better browser support --- package.json | 13 +- src/index.js | 2 +- test/index.spec.cjs | 895 ++++++++++++++++++++++++++++++++++++++++++++ test/index.spec.mjs | 2 +- tsup.config.js | 43 ++- yarn.lock | 458 +++++++++++++---------- 6 files changed, 1192 insertions(+), 221 deletions(-) create mode 100644 test/index.spec.cjs diff --git a/package.json b/package.json index 7923194..fb45ce8 100644 --- a/package.json +++ b/package.json @@ -11,11 +11,12 @@ "module": "./src/index.js", "types": "./dist/index.d.ts", "exports": { - ".": { - "types": "./dist/index.d.ts", - "require": "./dist/index.js", - "import": "./src/index.js" - } + "node": { + "types": "./dist/node/index.d.ts", + "require": "./dist/node/index.js", + "import": "./dist/node/index.mjs" + }, + "default": "./dist/browser/index.js" }, "files": [ "dist", @@ -39,6 +40,8 @@ ], "devDependencies": { "clean-jsdoc-theme": "4.3.0", + "esbuild": "^0.25.8", + "esbuild-plugins-node-modules-polyfill": "1.7.1", "jsdoc": "4.0.4", "prettier": "3.6.2", "tsup": "8.5.0", diff --git a/src/index.js b/src/index.js index fdf6432..8588eb0 100644 --- a/src/index.js +++ b/src/index.js @@ -907,4 +907,4 @@ class FilebaseClient { //endregion } -export default FilebaseClient; +export { FilebaseClient }; diff --git a/test/index.spec.cjs b/test/index.spec.cjs new file mode 100644 index 0000000..7e81d19 --- /dev/null +++ b/test/index.spec.cjs @@ -0,0 +1,895 @@ +const test = require("node:test"); +const assert = require("node:assert/strict"); +const Path = require("node:path"); +const { writeFile } = require("node:fs/promises"); +const { v4: uuidv4 } = require("uuid"); +const os = require("node:os"); +const { FilebaseClient } = require("../dist/node/index.js"); + +// Application Constants +const TEST_PREFIX = Date.now(); +const TEST_IPFS_GATEWAY = + process.env.TEST_IPFS_GATEWAY || "https://ipfs.filebase.io"; +const TEST_S3_ENDPOINT = + process.env.TEST_S3_ENDPOINT || "https://s3.filebase.com"; +const TEST_RPC_ENDPOINT = + process.env.TEST_RPC_ENDPOINT || "https://rpc.filebase.io"; +const TEST_PLATFORM_ENDPOINT = + process.env.TEST_PLATFORM_ENDPOINT || "https://api.filebase.io"; +const CLIENT_KEY = process.env.TEST_KEY; +const CLIENT_SECRET = process.env.TEST_SECRET; + +//region Bucket Tests +test("create bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create bucket `create-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-create-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + try { + // List buckets + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + // Assert new bucket exists + assert.equal(createdBucket.Name, bucketNameToCreate); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + } +}); + +test("get bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGet = `${TEST_PREFIX}-get-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGet); + + try { + // Generate bucket CID + await filebaseClient.generateBucketCid(bucketNameToGet); + + // Get bucket information + const bucketCid = await filebaseClient.getBucketCid(bucketNameToGet); + + // Assert new bucket exists + assert.equal( + bucketCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGet); + } +}); + +test("generate bucket cid", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create bucket `create-bucket-test-pass` + const bucketNameToGenerate = `${TEST_PREFIX}-generate-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToGenerate); + + try { + // Generate bucket CID + const generatedCid = + await filebaseClient.generateBucketCid(bucketNameToGenerate); + + // Assert new bucket exists + assert.equal( + generatedCid, + "bafybeiczsscdsbs7ffqz55asqdf3smv6klcw3gofszvwlyarci47bgf354", + ); + } finally { + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToGenerate); + } +}); + +test("list buckets", async () => { + const testBucketName = `${TEST_PREFIX}-list-bucket-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + initialBucketsList = await filebaseClient.listBuckets(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createBucket(`${testBucketName}-${i}`); + } + const bucketsList = await filebaseClient.listBuckets(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteBucket(`${testBucketName}-${i}`); + } + assert.strictEqual( + bucketsList.length, + initialBucketsList.length + countToCreate, + ); +}); + +test("delete bucket", async () => { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create bucket `delete-bucket-test-pass` + const bucketNameToCreate = `${TEST_PREFIX}-delete-bucket-test-pass`; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + if (typeof createdBucket === "undefined") { + throw new Error(`Unable to create test bucket [delete-bucket-test-pass]`); + } + + // Delete new bucket + await filebaseClient.deleteBucket(bucketNameToCreate); + + // List buckets and assert new bucket does not exist + const updatedBuckets = await filebaseClient.listBuckets(), + deletedBucket = updatedBuckets.find((updatedBucket) => { + return updatedBucket.Name === bucketNameToCreate; + }); + assert.equal(typeof deletedBucket, "undefined"); +}); +//endregion + +//region File Tests +async function createBucket(name) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create bucket with name + const bucketNameToCreate = name; + await filebaseClient.createBucket(bucketNameToCreate); + + // List buckets and assert new bucket exists + const currentBuckets = await filebaseClient.listBuckets(), + createdBucket = currentBuckets.find((currentBucket) => { + return currentBucket.Name === bucketNameToCreate; + }); + + return typeof createdBucket !== "undefined"; +} + +async function uploadObject(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Upload Object + await filebaseClient.uploadFile(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false + ? uploadedObject + : false; +} + +async function uploadObjects(bucket, key, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Upload Object + await filebaseClient.uploadDirectory(key, body); + + // Confirm Object Uploaded + const uploadedObject = await filebaseClient.getFileMetadata(key); + + return typeof uploadedObject !== "undefined" && uploadedObject !== false; +} + +async function deleteObject(bucket, key) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Delete Object + await filebaseClient.deleteFile(key); + return true; +} + +async function deleteBucket(bucket) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Delete Bucket + await filebaseClient.deleteBucket(bucket); + return true; +} + +test("delete object", async () => { + // Create bucket `delete-object-test-pass` + const deleteTestBucket = `${TEST_PREFIX}-delete-object-test-pass`; + await createBucket(deleteTestBucket); + + try { + // Upload object `delete-object-test` + const objectNameToCreate = `delete-object-test`; + const uploaded = await uploadObject( + deleteTestBucket, + objectNameToCreate, + new Blob(["delete object"]), + ); + if (uploaded === false) { + throw Error(`Failed to create object [delete-object-test]`); + } + + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: deleteTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Delete object `delete-object-test` + await filebaseClient.deleteFile(objectNameToCreate); + + // List bucket and assert new object doesn't exist + const uploadedObject = + await filebaseClient.getFileMetadata(objectNameToCreate); + assert.equal(uploadedObject, false); + } finally { + await deleteBucket(deleteTestBucket); + } +}); + +test("upload object", async () => { + // Create Bucket `create-object-test-pass + const uploadTestBucket = `${TEST_PREFIX}-create-object-test-pass`; + await createBucket(uploadTestBucket); + + try { + // Upload object `create-object-test` + const uploaded = await uploadObject( + uploadTestBucket, + `create-object-test`, + new Blob(["upload object"]), + ); + + assert.notEqual(uploaded, false); + await deleteObject(uploadTestBucket, `create-object-test`); + } finally { + await deleteBucket(uploadTestBucket); + } +}); + +test("upload directory", async () => { + // Create Bucket `create-object-test-pass + const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; + await createBucket(uploadDirectoryTestBucket); + + try { + // Upload object `create-object-test` + const uploadForm = new FormData(); + uploadForm.append( + "file", + new Blob(["upload test object"]), + "testObjects/1.txt", + ); + uploadForm.append( + "file", + new Blob(["upload deep test object"]), + "testObjects/deep/1.txt", + ); + uploadForm.append( + "file", + new Blob(["upload top level test object"]), + "topLevel.txt", + ); + const uploaded = await uploadObjects( + uploadDirectoryTestBucket, + `create-directory-test`, + uploadForm, + ); + assert.notEqual(uploaded, false); + await deleteObject(uploadDirectoryTestBucket, `create-directory-test`); + } finally { + await deleteBucket(uploadDirectoryTestBucket); + } +}); + +test("generate presigned url for object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-presigned-url-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `presigned-url-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + new Blob(["download object"]), + ); + if (uploaded === false) { + throw Error(`Failed to create object [${objectNameToCreate}]`); + } + + try { + // Generate presigned URL for objects + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + const presignedUrl = + await filebaseClient.generatePresignedUrl(objectNameToCreate); + assert.strictEqual(typeof presignedUrl, "string"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + new Blob(["download object"]), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + const downloadStream = + await filebaseClient.downloadFile(objectNameToCreate), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("download object using gateway (ipfs)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + new Blob(["download object"]), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + gateway: TEST_IPFS_GATEWAY, + }, + }); + const downloadStream = await filebaseClient.fetchContentByCid( + uploaded["Metadata"]["cid"], + ), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); + +test("list objects", async () => { + // Create bucket `list-objects-test-pass` + const listTestBucket = `${TEST_PREFIX}-list-objects-test-pass`; + await createBucket(listTestBucket); + + try { + let createdObjectCount = 0; + while (createdObjectCount < 26) { + // Upload objects `list-object-test-[x]` + const objectNameToCreate = `list-object-test-${createdObjectCount}`; + await uploadObject( + listTestBucket, + objectNameToCreate, + new Blob([`list objects ${createdObjectCount}`]), + ); + createdObjectCount++; + } + + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: listTestBucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + const objectList = await filebaseClient.listFiles(`list-object-test-`, { + MaxKeys: 50, + }); + assert.equal(objectList.entries.length, 26); + + let deletedObjectCount = 0; + while (deletedObjectCount < 26) { + // Delete objects `list-object-test-[x]` + const objectNameToDelete = `list-object-test-${deletedObjectCount}`; + await deleteObject(listTestBucket, objectNameToDelete); + deletedObjectCount++; + } + } finally { + await deleteBucket(listTestBucket); + } +}); + +test("copy object", async () => { + // Create bucket `copy-object-test-pass-src` + const bucketSrc = `${TEST_PREFIX}-copy-object-test-pass-src`; + await createBucket(bucketSrc); + + try { + // Upload object `copy-object-test` + const objectNameToCreateSrc = `copy-object-test`; + const uploaded = await uploadObject( + bucketSrc, + objectNameToCreateSrc, + new Blob(["copy object"]), + ); + try { + assert.notEqual(uploaded, false); + + // Create bucket `copy-object-test-pass-dest` + const bucketDest = `${TEST_PREFIX}-copy-object-test-pass-dest`; + await createBucket(bucketDest); + + try { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: bucketSrc, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Copy object `copy-object-test` from `copy-object-test-pass-src` to `copy-object-test-pass-dest` + await filebaseClient.copyFile( + objectNameToCreateSrc, + objectNameToCreateSrc, + { + destinationBucket: bucketDest, + }, + ); + try { + // List bucket and assert new object exists + const copiedObject = await filebaseClient.getFileMetadata( + objectNameToCreateSrc, + { + bucket: bucketDest, + }, + ); + assert.equal(copiedObject.ETag, '"1181cc81508b7da38b06cc32da7df1f0"'); + } finally { + await deleteObject(bucketDest, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketDest); + } + } finally { + await deleteObject(bucketSrc, objectNameToCreateSrc); + } + } finally { + await deleteBucket(bucketSrc); + } +}); +//endregion + +//region Gateway Tests +test("delete gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-delete-gateway-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + const deletedName = await filebaseClient.getGateway(testGatewayName); + assert.strictEqual(deletedName, false); +}); + +test("create gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-create-gateway-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createGateway(testGatewayName); + await filebaseClient.deleteGateway(testGatewayName); + assert.strictEqual(createdName.name, testGatewayName); +}); + +test("update gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-update-gateway-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createGateway(testGatewayName); + try { + const updatedName = await filebaseClient.updateGateway(createdName.name, { + private: true, + enabled: false, + }); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("get gateway", async () => { + const testGatewayName = `${TEST_PREFIX}-get-gateway-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createGateway(testGatewayName, {}); + try { + const testName = await filebaseClient.getGateway(createdName.name); + assert.strictEqual(testName.name, testGatewayName); + } finally { + await filebaseClient.deleteGateway(testGatewayName); + } +}); + +test("list gateways", async () => { + const testGatewayName = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + initialGatewaysList = await filebaseClient.listGateways(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createGateway(`${testGatewayName}-${i}`); + } + const gatewaysList = await filebaseClient.listGateways(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteGateway(`${testGatewayName}-${i}`); + } + assert.strictEqual( + gatewaysList.length, + initialGatewaysList.length + countToCreate, + ); +}); +//endregion + +//region Names Tests +const TEST_CID = process.env.TEST_NAME_CID, + TEST_PRIVATE_KEY = process.env.TEST_NAME_PRIVATE_KEY; + +test("delete name", async () => { + const testNameLabel = `${TEST_PREFIX}-delete-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + const deletedName = await filebaseClient.getIpnsName(testNameLabel); + assert.strictEqual(deletedName, false); +}); + +test("create name", async () => { + const testNameLabel = `${TEST_PREFIX}-create-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(createdName.label, testNameLabel); + assert.strictEqual(createdName.cid, TEST_CID); +}); + +test("import name", async () => { + const testNameLabel = `${TEST_PREFIX}-import-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + importedName = await filebaseClient.importIpnsName( + testNameLabel, + TEST_CID, + TEST_PRIVATE_KEY, + ); + await filebaseClient.deleteIpnsName(testNameLabel); + assert.strictEqual(importedName.label, testNameLabel); + assert.strictEqual(importedName.cid, TEST_CID); +}); + +test("update name", async () => { + const testNameLabel = `${TEST_PREFIX}-update-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const updatedName = await filebaseClient.updateIpnsName( + createdName.label, + TEST_CID, + ); + assert.strictEqual(updatedName, true); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("get name", async () => { + const testNameLabel = `${TEST_PREFIX}-get-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testName = await filebaseClient.getIpnsName(createdName.label); + assert.strictEqual(testName.label, testNameLabel); + assert.strictEqual(testName.cid, TEST_CID); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("resolve name", async () => { + const testNameLabel = `${TEST_PREFIX}-resolve-name-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + createdName = await filebaseClient.createIpnsName(testNameLabel, TEST_CID); + try { + const testNameValue = await filebaseClient.resolveIpnsName( + createdName.network_key, + ); + assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); + } finally { + await filebaseClient.deleteIpnsName(testNameLabel); + } +}); + +test("list names", async () => { + const testNameLabel = `${TEST_PREFIX}-list-names-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }), + initialNamesList = await filebaseClient.listIpnsNames(), + countToCreate = 3; + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.createIpnsName(`${testNameLabel}-${i}`, TEST_CID); + } + const namesList = await filebaseClient.listIpnsNames(); + for (let i = 0; i < countToCreate; i++) { + await filebaseClient.deleteIpnsName(`${testNameLabel}-${i}`); + } + assert.strictEqual(namesList.length, initialNamesList.length + countToCreate); +}); + +test("download object using gateway (ipns)", async () => { + // Create bucket `download-object-test-pass` + const downloadTestBucket = `${TEST_PREFIX}-download-object-ipns-test-pass`; + await createBucket(downloadTestBucket); + + try { + // Upload object `download-object-test` + const objectNameToCreate = `download-object-test`; + const uploaded = await uploadObject( + downloadTestBucket, + objectNameToCreate, + new Blob(["download object"]), + ); + if (uploaded === false) { + throw Error(`Failed to create object [download-object-test]`); + } + + try { + // Download object `download-object-test` and assert it completes + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: downloadTestBucket, + gateway: { endpoint: process.env.TEST_IPFS_GATEWAY }, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Create IPNS Name + const createdName = await filebaseClient.createIpnsName( + `${objectNameToCreate}-ipns`, + uploaded["Metadata"]["cid"], + ); + + const downloadStream = await filebaseClient.fetchContentByIpnsName( + createdName["network_key"], + ), + downloadFilename = uuidv4(), + downloadPath = Path.resolve(os.tmpdir(), downloadFilename), + writeFileResult = await writeFile(downloadPath, downloadStream); + assert.strictEqual(typeof writeFileResult, "undefined"); + } finally { + await deleteObject(downloadTestBucket, objectNameToCreate); + } + } finally { + await deleteBucket(downloadTestBucket); + } +}); +//endregion + +//region Pinning API Tests +const TEST_CID_1 = "QmSEu6zGwKgkQA3ZKaDnvkrwre1kkQa7eRFCbQi7waNwTT"; + +test("create pin", async () => { + const testBucketName = `${TEST_PREFIX}-create-pin-test-pass`, + testPinName = `${TEST_PREFIX}-create-pin-test-pass`, + filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket: testBucketName, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + await createBucket(testBucketName); + try { + const createdPin = await filebaseClient.pinFile(testPinName, TEST_CID_1); + assert.strictEqual(createdPin, true); + await filebaseClient.deleteFile(testPinName); + } finally { + await deleteBucket(testBucketName); + } +}); +//endregion diff --git a/test/index.spec.mjs b/test/index.spec.mjs index 7c01090..ff181e5 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -4,7 +4,7 @@ import * as Path from "node:path"; import { writeFile } from "node:fs/promises"; import { v4 as uuidv4 } from "uuid"; import os from "node:os"; -import FilebaseClient from "../src/index.js"; +import { FilebaseClient } from "../dist/node/index.mjs"; // Application Constants const TEST_PREFIX = Date.now(); diff --git a/tsup.config.js b/tsup.config.js index 7b60a58..47494c4 100644 --- a/tsup.config.js +++ b/tsup.config.js @@ -1,13 +1,34 @@ import { defineConfig } from "tsup"; +import { nodeModulesPolyfillPlugin } from "esbuild-plugins-node-modules-polyfill"; -export default defineConfig({ - entry: ["src/index.js"], - format: ["cjs"], - dts: true, - clean: true, - sourcemap: true, - minify: true, - bundle: true, - target: ['es2020', 'node21'], - platform: "neutral", -}); +export default defineConfig([ + { + entry: ["src/index.js"], + format: ["cjs", "esm"], + target: "node18", + outDir: "dist/node", + dts: true, + clean: true, + sourcemap: true, + minify: true, + noExternal: ["ipns"], + }, + { + entry: ["src/index.js"], + format: ["esm"], + target: "es2018", + outDir: "dist/browser", + dts: true, + clean: true, + sourcemap: true, + minify: true, + noExternal: ["ipns"], + esbuildPlugins: [ + nodeModulesPolyfillPlugin({ + modules: { + crypto: true, + }, + }), + ], + }, +]); diff --git a/yarn.lock b/yarn.lock index 70052a2..79cf246 100644 --- a/yarn.lock +++ b/yarn.lock @@ -659,135 +659,135 @@ dependencies: "@chainsafe/is-ip" "^2.0.1" -"@esbuild/aix-ppc64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.6.tgz#164b19122e2ed54f85469df9dea98ddb01d5e79e" - integrity sha512-ShbM/3XxwuxjFiuVBHA+d3j5dyac0aEVVq1oluIDf71hUw0aRF59dV/efUsIwFnR6m8JNM2FjZOzmaZ8yG61kw== - -"@esbuild/android-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.6.tgz#8f539e7def848f764f6432598e51cc3820fde3a5" - integrity sha512-hd5zdUarsK6strW+3Wxi5qWws+rJhCCbMiC9QZyzoxfk5uHRIE8T287giQxzVpEvCwuJ9Qjg6bEjcRJcgfLqoA== - -"@esbuild/android-arm@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.6.tgz#4ceb0f40113e9861169be83e2a670c260dd234ff" - integrity sha512-S8ToEOVfg++AU/bHwdksHNnyLyVM+eMVAOf6yRKFitnwnbwwPNqKr3srzFRe7nzV69RQKb5DgchIX5pt3L53xg== - -"@esbuild/android-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.6.tgz#ad4f280057622c25fe985c08999443a195dc63a8" - integrity sha512-0Z7KpHSr3VBIO9A/1wcT3NTy7EB4oNC4upJ5ye3R7taCc2GUdeynSLArnon5G8scPwaU866d3H4BCrE5xLW25A== - -"@esbuild/darwin-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.6.tgz#d1f04027396b3d6afc96bacd0d13167dfd9f01f7" - integrity sha512-FFCssz3XBavjxcFxKsGy2DYK5VSvJqa6y5HXljKzhRZ87LvEi13brPrf/wdyl/BbpbMKJNOr1Sd0jtW4Ge1pAA== - -"@esbuild/darwin-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.6.tgz#2b4a6cedb799f635758d7832d75b23772c8ef68f" - integrity sha512-GfXs5kry/TkGM2vKqK2oyiLFygJRqKVhawu3+DOCk7OxLy/6jYkWXhlHwOoTb0WqGnWGAS7sooxbZowy+pK9Yg== - -"@esbuild/freebsd-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.6.tgz#a26266cc97dd78dc3c3f3d6788b1b83697b1055d" - integrity sha512-aoLF2c3OvDn2XDTRvn8hN6DRzVVpDlj2B/F66clWd/FHLiHaG3aVZjxQX2DYphA5y/evbdGvC6Us13tvyt4pWg== - -"@esbuild/freebsd-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.6.tgz#9feb8e826735c568ebfd94859b22a3fbb6a9bdd2" - integrity sha512-2SkqTjTSo2dYi/jzFbU9Plt1vk0+nNg8YC8rOXXea+iA3hfNJWebKYPs3xnOUf9+ZWhKAaxnQNUf2X9LOpeiMQ== - -"@esbuild/linux-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.6.tgz#c07cbed8e249f4c28e7f32781d36fc4695293d28" - integrity sha512-b967hU0gqKd9Drsh/UuAm21Khpoh6mPBSgz8mKRq4P5mVK8bpA+hQzmm/ZwGVULSNBzKdZPQBRT3+WuVavcWsQ== - -"@esbuild/linux-arm@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.6.tgz#d6e2cd8ef3196468065d41f13fa2a61aaa72644a" - integrity sha512-SZHQlzvqv4Du5PrKE2faN0qlbsaW/3QQfUUc6yO2EjFcA83xnwm91UbEEVx4ApZ9Z5oG8Bxz4qPE+HFwtVcfyw== - -"@esbuild/linux-ia32@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.6.tgz#3e682bd47c4eddcc4b8f1393dfc8222482f17997" - integrity sha512-aHWdQ2AAltRkLPOsKdi3xv0mZ8fUGPdlKEjIEhxCPm5yKEThcUjHpWB1idN74lfXGnZ5SULQSgtr5Qos5B0bPw== - -"@esbuild/linux-loong64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.6.tgz#473f5ea2e52399c08ad4cd6b12e6dbcddd630f05" - integrity sha512-VgKCsHdXRSQ7E1+QXGdRPlQ/e08bN6WMQb27/TMfV+vPjjTImuT9PmLXupRlC90S1JeNNW5lzkAEO/McKeJ2yg== - -"@esbuild/linux-mips64el@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.6.tgz#9960631c9fd61605b0939c19043acf4ef2b51718" - integrity sha512-WViNlpivRKT9/py3kCmkHnn44GkGXVdXfdc4drNmRl15zVQ2+D2uFwdlGh6IuK5AAnGTo2qPB1Djppj+t78rzw== - -"@esbuild/linux-ppc64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.6.tgz#477cbf8bb04aa034b94f362c32c86b5c31db8d3e" - integrity sha512-wyYKZ9NTdmAMb5730I38lBqVu6cKl4ZfYXIs31Baf8aoOtB4xSGi3THmDYt4BTFHk7/EcVixkOV2uZfwU3Q2Jw== - -"@esbuild/linux-riscv64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.6.tgz#bcdb46c8fb8e93aa779e9a0a62cd4ac00dcac626" - integrity sha512-KZh7bAGGcrinEj4qzilJ4hqTY3Dg2U82c8bv+e1xqNqZCrCyc+TL9AUEn5WGKDzm3CfC5RODE/qc96OcbIe33w== - -"@esbuild/linux-s390x@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.6.tgz#f412cf5fdf0aea849ff51c73fd817c6c0234d46d" - integrity sha512-9N1LsTwAuE9oj6lHMyyAM+ucxGiVnEqUdp4v7IaMmrwb06ZTEVCIs3oPPplVsnjPfyjmxwHxHMF8b6vzUVAUGw== - -"@esbuild/linux-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.25.6.tgz#d8233c09b5ebc0c855712dc5eeb835a3a3341108" - integrity sha512-A6bJB41b4lKFWRKNrWoP2LHsjVzNiaurf7wyj/XtFNTsnPuxwEBWHLty+ZE0dWBKuSK1fvKgrKaNjBS7qbFKig== - -"@esbuild/netbsd-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.6.tgz#f51ae8dd1474172e73cf9cbaf8a38d1c72dd8f1a" - integrity sha512-IjA+DcwoVpjEvyxZddDqBY+uJ2Snc6duLpjmkXm/v4xuS3H+3FkLZlDm9ZsAbF9rsfP3zeA0/ArNDORZgrxR/Q== - -"@esbuild/netbsd-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.6.tgz#a267538602c0e50a858cf41dcfe5d8036f8da8e7" - integrity sha512-dUXuZr5WenIDlMHdMkvDc1FAu4xdWixTCRgP7RQLBOkkGgwuuzaGSYcOpW4jFxzpzL1ejb8yF620UxAqnBrR9g== - -"@esbuild/openbsd-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.6.tgz#a51be60c425b85c216479b8c344ad0511635f2d2" - integrity sha512-l8ZCvXP0tbTJ3iaqdNf3pjaOSd5ex/e6/omLIQCVBLmHTlfXW3zAxQ4fnDmPLOB1x9xrcSi/xtCWFwCZRIaEwg== - -"@esbuild/openbsd-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.6.tgz#7e4a743c73f75562e29223ba69d0be6c9c9008da" - integrity sha512-hKrmDa0aOFOr71KQ/19JC7az1P0GWtCN1t2ahYAf4O007DHZt/dW8ym5+CUdJhQ/qkZmI1HAF8KkJbEFtCL7gw== - -"@esbuild/openharmony-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.6.tgz#2087a5028f387879154ebf44bdedfafa17682e5b" - integrity sha512-+SqBcAWoB1fYKmpWoQP4pGtx+pUUC//RNYhFdbcSA16617cchuryuhOCRpPsjCblKukAckWsV+aQ3UKT/RMPcA== - -"@esbuild/sunos-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.6.tgz#56531f861723ea0dc6283a2bb8837304223cb736" - integrity sha512-dyCGxv1/Br7MiSC42qinGL8KkG4kX0pEsdb0+TKhmJZgCUDBGmyo1/ArCjNGiOLiIAgdbWgmWgib4HoCi5t7kA== - -"@esbuild/win32-arm64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.6.tgz#f4989f033deac6fae323acff58764fa8bc01436e" - integrity sha512-42QOgcZeZOvXfsCBJF5Afw73t4veOId//XD3i+/9gSkhSV6Gk3VPlWncctI+JcOyERv85FUo7RxuxGy+z8A43Q== - -"@esbuild/win32-ia32@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.6.tgz#b260e9df71e3939eb33925076d39f63cec7d1525" - integrity sha512-4AWhgXmDuYN7rJI6ORB+uU9DHLq/erBbuMoAuB4VWJTu5KtCgcKYPynF0YI1VkBNuEfjNlLrFr9KZPJzrtLkrQ== - -"@esbuild/win32-x64@0.25.6": - version "0.25.6" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.6.tgz#4276edd5c105bc28b11c6a1f76fb9d29d1bd25c1" - integrity sha512-NgJPHHbEpLQgDH2MjQu90pzW/5vvXIZ7KOnPyNBm92A6WgZ/7b6fJyUBjoumLqeOQQGqY2QjQxRo97ah4Sj0cA== +"@esbuild/aix-ppc64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz#a1414903bb38027382f85f03dda6065056757727" + integrity sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA== + +"@esbuild/android-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz#c859994089e9767224269884061f89dae6fb51c6" + integrity sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w== + +"@esbuild/android-arm@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.8.tgz#96a8f2ca91c6cd29ea90b1af79d83761c8ba0059" + integrity sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw== + +"@esbuild/android-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.8.tgz#a3a626c4fec4a024a9fa8c7679c39996e92916f0" + integrity sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA== + +"@esbuild/darwin-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz#a5e1252ca2983d566af1c0ea39aded65736fc66d" + integrity sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw== + +"@esbuild/darwin-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz#5271b0df2bb12ce8df886704bfdd1c7cc01385d2" + integrity sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg== + +"@esbuild/freebsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz#d0a0e7fdf19733b8bb1566b81df1aa0bb7e46ada" + integrity sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA== + +"@esbuild/freebsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz#2de8b2e0899d08f1cb1ef3128e159616e7e85343" + integrity sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw== + +"@esbuild/linux-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz#a4209efadc0c2975716458484a4e90c237c48ae9" + integrity sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w== + +"@esbuild/linux-arm@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz#ccd9e291c24cd8d9142d819d463e2e7200d25b19" + integrity sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg== + +"@esbuild/linux-ia32@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz#006ad1536d0c2b28fb3a1cf0b53bcb85aaf92c4d" + integrity sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg== + +"@esbuild/linux-loong64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz#127b3fbfb2c2e08b1397e985932f718f09a8f5c4" + integrity sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ== + +"@esbuild/linux-mips64el@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz#837d1449517791e3fa7d82675a2d06d9f56cb340" + integrity sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw== + +"@esbuild/linux-ppc64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz#aa2e3bd93ab8df084212f1895ca4b03c42d9e0fe" + integrity sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ== + +"@esbuild/linux-riscv64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz#a340620e31093fef72767dd28ab04214b3442083" + integrity sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg== + +"@esbuild/linux-s390x@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz#ddfed266c8c13f5efb3105a0cd47f6dcd0e79e71" + integrity sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg== + +"@esbuild/linux-x64@0.25.8": + version "0.25.8" + resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz" + integrity sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ== + +"@esbuild/netbsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz#902c80e1d678047926387230bc037e63e00697d0" + integrity sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw== + +"@esbuild/netbsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz#2d9eb4692add2681ff05a14ce99de54fbed7079c" + integrity sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg== + +"@esbuild/openbsd-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz#89c3b998c6de739db38ab7fb71a8a76b3fa84a45" + integrity sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ== + +"@esbuild/openbsd-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz#2f01615cf472b0e48c077045cfd96b5c149365cc" + integrity sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ== + +"@esbuild/openharmony-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz#a201f720cd2c3ebf9a6033fcc3feb069a54b509a" + integrity sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg== + +"@esbuild/sunos-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz#07046c977985a3334667f19e6ab3a01a80862afb" + integrity sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w== + +"@esbuild/win32-arm64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz#4a5470caf0d16127c05d4833d4934213c69392d1" + integrity sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ== + +"@esbuild/win32-ia32@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz#3de3e8470b7b328d99dbc3e9ec1eace207e5bbc4" + integrity sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg== + +"@esbuild/win32-x64@0.25.8": + version "0.25.8" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz#610d7ea539d2fcdbe39237b5cc175eb2c4451f9c" + integrity sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw== "@isaacs/cliui@^8.0.2": version "8.0.2" @@ -835,7 +835,7 @@ "@jridgewell/sourcemap-codec@^1.5.0": version "1.5.4" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz#7358043433b2e5da569aa02cbc4c121da3af27d7" + resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz" integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== "@jridgewell/trace-mapping@^0.3.9": @@ -853,6 +853,11 @@ dependencies: lodash "^4.17.21" +"@jspm/core@^2.1.0": + version "2.1.0" + resolved "https://registry.npmjs.org/@jspm/core/-/core-2.1.0.tgz" + integrity sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg== + "@leichtgewicht/ip-codec@^2.0.1": version "2.0.5" resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" @@ -1016,12 +1021,12 @@ "@rollup/rollup-linux-x64-gnu@4.45.1": version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz#0d4c8d0b8f801902f0844a40a9d981a0179f4971" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz" integrity sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw== "@rollup/rollup-linux-x64-musl@4.45.1": version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz#ec30bb48b5fe22a3aaba98072f2d5b7139e1a8eb" + resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz" integrity sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw== "@rollup/rollup-win32-arm64-msvc@4.45.1": @@ -1540,17 +1545,17 @@ "@types/estree@1.0.8": version "1.0.8" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.8.tgz#958b91c991b1867ced318bedea0e215ee050726e" + resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== "@types/linkify-it@^5": version "5.0.0" - resolved "https://registry.yarnpkg.com/@types/linkify-it/-/linkify-it-5.0.0.tgz#21413001973106cda1c3a9b91eedd4ccd5469d76" + resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz" integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== "@types/markdown-it@^14.1.1": version "14.1.2" - resolved "https://registry.yarnpkg.com/@types/markdown-it/-/markdown-it-14.1.2.tgz#57f2532a0800067d9b934f3521429a2e8bfb4c61" + resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz" integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== dependencies: "@types/linkify-it" "^5" @@ -1558,7 +1563,7 @@ "@types/mdurl@^2": version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/mdurl/-/mdurl-2.0.0.tgz#d43878b5b20222682163ae6f897b20447233bdfd" + resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz" integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== "@types/node@*": @@ -1580,7 +1585,7 @@ abort-error@^1.0.1: acorn@^8.14.0: version "8.15.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.15.0.tgz#a360898bc415edaac46c8241f6383975b930b816" + resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== acorn@^8.8.2: @@ -1676,14 +1681,14 @@ buffer@^6.0.3: bundle-require@^5.1.0: version "5.1.0" - resolved "https://registry.yarnpkg.com/bundle-require/-/bundle-require-5.1.0.tgz#8db66f41950da3d77af1ef3322f4c3e04009faee" + resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz" integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== dependencies: load-tsconfig "^0.2.3" cac@^6.7.14: version "6.7.14" - resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959" + resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== camel-case@^4.1.2: @@ -1708,7 +1713,7 @@ cborg@^4.2.3: chokidar@^4.0.3: version "4.0.3" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-4.0.3.tgz#7be37a4c03c9aee1ecfe862a4a23b2c70c205d30" + resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== dependencies: readdirp "^4.0.1" @@ -1722,7 +1727,7 @@ clean-css@~5.3.2: clean-jsdoc-theme@4.3.0: version "4.3.0" - resolved "https://registry.yarnpkg.com/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz#6cd55ff7b25ff6d1719ae0ff9f1cdb5ef07bf640" + resolved "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz" integrity sha512-QMrBdZ2KdPt6V2Ytg7dIt0/q32U4COpxvR0UDhPjRRKRL0o0MvRCR5YpY37/4rPF1SI1AYEKAWyof7ndCb/dzA== dependencies: "@jsdoc/salty" "^0.2.4" @@ -1773,12 +1778,17 @@ commander@^9.0.0: confbox@^0.1.8: version "0.1.8" - resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== +confbox@^0.2.2: + version "0.2.2" + resolved "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz" + integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== + consola@^3.4.0: version "3.4.2" - resolved "https://registry.yarnpkg.com/consola/-/consola-3.4.2.tgz#5af110145397bb67afdab77013fdc34cae590ea7" + resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== cross-spawn@^7.0.0: @@ -1792,7 +1802,7 @@ cross-spawn@^7.0.0: debug@^4.4.0: version "4.4.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.1.tgz#e5a8bc6cbc4c6cd3e64308b0693a3d4fa550189b" + resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== dependencies: ms "^2.1.3" @@ -1837,37 +1847,46 @@ entities@^4.4.0: resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== -esbuild@^0.25.0: - version "0.25.6" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.25.6.tgz#9b82a3db2fa131aec069ab040fd57ed0a880cdcd" - integrity sha512-GVuzuUwtdsghE3ocJ9Bs8PNoF13HNQ5TXbEi2AhvVb8xU1Iwt9Fos9FEamfoee+u/TOsn7GUWc04lz46n2bbTg== +esbuild-plugins-node-modules-polyfill@1.7.1: + version "1.7.1" + resolved "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.7.1.tgz" + integrity sha512-IEaUhaS1RukGGcatDzqJmR+AzUWJ2upTJZP2i7FzR37Iw5Lk0LReCTnWnPMWnGG9lO4MWTGKEGGLWEOPegTRJA== + dependencies: + "@jspm/core" "^2.1.0" + local-pkg "^1.1.1" + resolve.exports "^2.0.3" + +esbuild@^0.25.0, esbuild@^0.25.8: + version "0.25.8" + resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz" + integrity sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q== optionalDependencies: - "@esbuild/aix-ppc64" "0.25.6" - "@esbuild/android-arm" "0.25.6" - "@esbuild/android-arm64" "0.25.6" - "@esbuild/android-x64" "0.25.6" - "@esbuild/darwin-arm64" "0.25.6" - "@esbuild/darwin-x64" "0.25.6" - "@esbuild/freebsd-arm64" "0.25.6" - "@esbuild/freebsd-x64" "0.25.6" - "@esbuild/linux-arm" "0.25.6" - "@esbuild/linux-arm64" "0.25.6" - "@esbuild/linux-ia32" "0.25.6" - "@esbuild/linux-loong64" "0.25.6" - "@esbuild/linux-mips64el" "0.25.6" - "@esbuild/linux-ppc64" "0.25.6" - "@esbuild/linux-riscv64" "0.25.6" - "@esbuild/linux-s390x" "0.25.6" - "@esbuild/linux-x64" "0.25.6" - "@esbuild/netbsd-arm64" "0.25.6" - "@esbuild/netbsd-x64" "0.25.6" - "@esbuild/openbsd-arm64" "0.25.6" - "@esbuild/openbsd-x64" "0.25.6" - "@esbuild/openharmony-arm64" "0.25.6" - "@esbuild/sunos-x64" "0.25.6" - "@esbuild/win32-arm64" "0.25.6" - "@esbuild/win32-ia32" "0.25.6" - "@esbuild/win32-x64" "0.25.6" + "@esbuild/aix-ppc64" "0.25.8" + "@esbuild/android-arm" "0.25.8" + "@esbuild/android-arm64" "0.25.8" + "@esbuild/android-x64" "0.25.8" + "@esbuild/darwin-arm64" "0.25.8" + "@esbuild/darwin-x64" "0.25.8" + "@esbuild/freebsd-arm64" "0.25.8" + "@esbuild/freebsd-x64" "0.25.8" + "@esbuild/linux-arm" "0.25.8" + "@esbuild/linux-arm64" "0.25.8" + "@esbuild/linux-ia32" "0.25.8" + "@esbuild/linux-loong64" "0.25.8" + "@esbuild/linux-mips64el" "0.25.8" + "@esbuild/linux-ppc64" "0.25.8" + "@esbuild/linux-riscv64" "0.25.8" + "@esbuild/linux-s390x" "0.25.8" + "@esbuild/linux-x64" "0.25.8" + "@esbuild/netbsd-arm64" "0.25.8" + "@esbuild/netbsd-x64" "0.25.8" + "@esbuild/openbsd-arm64" "0.25.8" + "@esbuild/openbsd-x64" "0.25.8" + "@esbuild/openharmony-arm64" "0.25.8" + "@esbuild/sunos-x64" "0.25.8" + "@esbuild/win32-arm64" "0.25.8" + "@esbuild/win32-ia32" "0.25.8" + "@esbuild/win32-x64" "0.25.8" escape-string-regexp@^2.0.0: version "2.0.0" @@ -1879,6 +1898,11 @@ eventemitter3@^5.0.1: resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== +exsolve@^1.0.7: + version "1.0.7" + resolved "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz" + integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw== + fast-xml-parser@4.4.1: version "4.4.1" resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" @@ -1895,12 +1919,12 @@ fast-xml-parser@5.2.5: fdir@^6.4.4: version "6.4.6" - resolved "https://registry.yarnpkg.com/fdir/-/fdir-6.4.6.tgz#2b268c0232697063111bbf3f64810a2a741ba281" + resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz" integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== fix-dts-default-cjs-exports@^1.0.0: version "1.0.1" - resolved "https://registry.yarnpkg.com/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz#955cb6b3d519691c57828b078adadf2cb92e9549" + resolved "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz" integrity sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg== dependencies: magic-string "^0.30.17" @@ -1909,7 +1933,7 @@ fix-dts-default-cjs-exports@^1.0.0: follow-redirects@^1.15.6: version "1.15.9" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== foreground-child@^3.1.0: @@ -2044,7 +2068,7 @@ jackspeak@^2.3.5: joycon@^3.1.1: version "3.1.1" - resolved "https://registry.yarnpkg.com/joycon/-/joycon-3.1.1.tgz#bce8596d6ae808f8b68168f5fc69280996894f03" + resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== js2xmlparser@^4.0.2: @@ -2056,7 +2080,7 @@ js2xmlparser@^4.0.2: jsdoc@4.0.4: version "4.0.4" - resolved "https://registry.yarnpkg.com/jsdoc/-/jsdoc-4.0.4.tgz#86565a9e39cc723a3640465b3fb189a22d1206ca" + resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz" integrity sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw== dependencies: "@babel/parser" "^7.20.15" @@ -2100,7 +2124,7 @@ klaw@^3.0.0: lilconfig@^3.1.1: version "3.1.3" - resolved "https://registry.yarnpkg.com/lilconfig/-/lilconfig-3.1.3.tgz#a1bcfd6257f9585bf5ae14ceeebb7b559025e4c4" + resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== lines-and-columns@^1.1.6: @@ -2110,7 +2134,7 @@ lines-and-columns@^1.1.6: linkify-it@^5.0.0: version "5.0.0" - resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421" + resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz" integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== dependencies: uc.micro "^2.0.0" @@ -2120,6 +2144,15 @@ load-tsconfig@^0.2.3: resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz" integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== +local-pkg@^1.1.1: + version "1.1.1" + resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz" + integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg== + dependencies: + mlly "^1.7.4" + pkg-types "^2.0.1" + quansync "^0.2.8" + lodash.sortby@^4.7.0: version "4.7.0" resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" @@ -2144,7 +2177,7 @@ lower-case@^2.0.2: magic-string@^0.30.17: version "0.30.17" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453" + resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== dependencies: "@jridgewell/sourcemap-codec" "^1.5.0" @@ -2156,12 +2189,12 @@ main-event@^1.0.1: markdown-it-anchor@^8.6.7: version "8.6.7" - resolved "https://registry.yarnpkg.com/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz#ee6926daf3ad1ed5e4e3968b1740eef1c6399634" + resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== markdown-it@^14.1.0: version "14.1.0" - resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45" + resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz" integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== dependencies: argparse "^2.0.1" @@ -2178,7 +2211,7 @@ marked@^4.0.10: mdurl@^2.0.0: version "2.0.0" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0" + resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz" integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== mime-db@1.52.0: @@ -2212,7 +2245,7 @@ mkdirp@^1.0.4: mlly@^1.7.4: version "1.7.4" - resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f" + resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz" integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== dependencies: acorn "^8.14.0" @@ -2222,7 +2255,7 @@ mlly@^1.7.4: ms@^2.1.3: version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== ms@^3.0.0-canary.1: @@ -2314,19 +2347,19 @@ path-scurry@^1.10.1: lru-cache "^9.1.1 || ^10.0.0" minipass "^5.0.0 || ^6.0.2 || ^7.0.0" -pathe@^2.0.1: +pathe@^2.0.1, pathe@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716" + resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== picocolors@^1.1.1: version "1.1.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^4.0.2: version "4.0.3" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042" + resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== pirates@^4.0.1: @@ -2336,16 +2369,25 @@ pirates@^4.0.1: pkg-types@^1.3.0: version "1.3.1" - resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== dependencies: confbox "^0.1.8" mlly "^1.7.4" pathe "^2.0.1" +pkg-types@^2.0.1: + version "2.2.0" + resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz" + integrity sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ== + dependencies: + confbox "^0.2.2" + exsolve "^1.0.7" + pathe "^2.0.3" + postcss-load-config@^6.0.1: version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-6.0.1.tgz#6fd7dcd8ae89badcf1b2d644489cbabf83aa8096" + resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz" integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== dependencies: lilconfig "^3.1.1" @@ -2376,7 +2418,7 @@ proxy-from-env@^1.1.0: punycode.js@^2.3.1: version "2.3.1" - resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7" + resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz" integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== punycode@^2.1.0: @@ -2384,9 +2426,14 @@ punycode@^2.1.0: resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== +quansync@^0.2.8: + version "0.2.10" + resolved "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz" + integrity sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A== + readdirp@^4.0.1: version "4.1.2" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-4.1.2.tgz#eb85801435fbf2a7ee58f19e0921b068fc69948d" + resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== relateurl@^0.2.7: @@ -2406,9 +2453,14 @@ resolve-from@^5.0.0: resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== +resolve.exports@^2.0.3: + version "2.0.3" + resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + rollup@^4.34.8: version "4.45.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.45.1.tgz#d0ef72a8d0a9210d832f9c3c5f3b6a2aa4b0ba64" + resolved "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz" integrity sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw== dependencies: "@types/estree" "1.0.8" @@ -2544,7 +2596,7 @@ strnum@^2.1.0: sucrase@^3.35.0: version "3.35.0" - resolved "https://registry.yarnpkg.com/sucrase/-/sucrase-3.35.0.tgz#57f17a3d7e19b36d8995f06679d121be914ae263" + resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== dependencies: "@jridgewell/gen-mapping" "^0.3.2" @@ -2591,12 +2643,12 @@ timestamp-nano@^1.0.1: tinyexec@^0.3.2: version "0.3.2" - resolved "https://registry.yarnpkg.com/tinyexec/-/tinyexec-0.3.2.tgz#941794e657a85e496577995c6eef66f53f42b3d2" + resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== tinyglobby@^0.2.11: version "0.2.14" - resolved "https://registry.yarnpkg.com/tinyglobby/-/tinyglobby-0.2.14.tgz#5280b0cf3f972b050e74ae88406c0a6a58f4079d" + resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz" integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== dependencies: fdir "^6.4.4" @@ -2626,7 +2678,7 @@ tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: tsup@8.5.0: version "8.5.0" - resolved "https://registry.yarnpkg.com/tsup/-/tsup-8.5.0.tgz#4b1e25b1a8f4e4f89b764207bf37cfe2d7411d31" + resolved "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz" integrity sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ== dependencies: bundle-require "^5.1.0" @@ -2649,17 +2701,17 @@ tsup@8.5.0: typescript@5.8.3: version "5.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== uc.micro@^2.0.0, uc.micro@^2.1.0: version "2.1.0" - resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee" + resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz" integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== ufo@^1.5.4: version "1.6.1" - resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.6.1.tgz#ac2db1d54614d1b22c1d603e3aef44a85d8f146b" + resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz" integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== uint8-varint@^2.0.1, uint8-varint@^2.0.2: From 7a05ab53e6af39e9851837ac21c4125a99dc2929 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Thu, 24 Jul 2025 15:35:37 -0500 Subject: [PATCH 08/15] Documentation updates on source. --- src/index.js | 309 +++++++++++++++++++++++++++++++------------- test/index.spec.cjs | 2 +- test/index.spec.mjs | 2 +- 3 files changed, 224 insertions(+), 89 deletions(-) diff --git a/src/index.js b/src/index.js index 8588eb0..0bc1186 100644 --- a/src/index.js +++ b/src/index.js @@ -10,11 +10,15 @@ import { ListBucketsCommand, ListObjectsV2Command, PutBucketTaggingCommand, + PutObjectCommand, S3Client, } from "@aws-sdk/client-s3"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { unmarshalIPNSRecord } from "ipns"; +/** + */ + class FilebaseClient { #DEFAULT_RPC_TIMEOUT = 60000; #DEFAULT_RPC_ENDPOINT = "https://rpc.filebase.io"; @@ -26,7 +30,7 @@ class FilebaseClient { #GATEWAY_DEFAULT_TIMEOUT = 60000; #PUBLIC_IPFS_GATEWAY = "https://ipfs.filebase.io"; - #VALID_FORMATS = ["ipns-record", "raw", "car"]; + #VALID_FORMATS = ["ipns-record", "raw", "car", "tar"]; #default_bucket; #default_gateway; @@ -37,20 +41,18 @@ class FilebaseClient { #names_client; #s3_client; - /** - * @typedef {Object} clientOptions - * @property {string} [bucket] The bucket to use for file operations (optional) - */ - /** * @summary Creates a new instance of the constructor. * @param {string} clientKey - The access key ID for authentication. * @param {string} clientSecret - The secret access key for authentication. - * @param {clientOptions} [options] - Options for the client (optional) + * @param {Object} [options] - Options for the client (optional) + * @property {string} options.bucket The bucket to use for file operations (optional) * @tutorial quickstart-bucket * @example * import FilebaseClient from "@filebase/sdk"; - * const client = new FilebaseClient("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD"); + * const client = new FilebaseClient("KEY_FROM_DASHBOARD", "SECRET_FROM_DASHBOARD", { + * bucket: "my-main-bucket" + * }); */ constructor(clientKey, clientSecret, options) { //region S3 Client @@ -163,7 +165,7 @@ class FilebaseClient { * @returns {Promise} - A promise that resolves when the bucket is created. * @example * // Create bucket with name of `create-bucket-example` - * await client.createBucket(`create-bucket-example`); + * const createdBucket = await client.createBucket(`create-bucket-example`); */ async createBucket(name) { const command = new CreateBucketCommand({ @@ -193,7 +195,10 @@ class FilebaseClient { /** * @summary Generates the IPFS Directory/Folder CID for a given bucket * @param {string} name - The name of the bucket to use. - * @returns {Promise} A promise that resolves with the CID of the new directory/folder + * @returns {Promise} A promise that resolves with the CID of the new directory/folder + * @example + * // Generate CID for bucket with name of `bucket-name-to-mfs` + * const generatedCid = await client.generateBucketCid(`bucket-name-to-mfs`); */ async generateBucketCid(name) { const command = new PutBucketTaggingCommand({ @@ -221,6 +226,14 @@ class FilebaseClient { return cid; } + /** + * @summary Gets the IPFS Directory/Folder CID for a given bucket + * @param {string} name - The name of the bucket to use. + * @returns {Promise} A promise that resolves with the CID of the directory + * @example + * // Get CID for bucket with name of `bucket-name-with-mfs` + * const bucketCid = await client.generateBucketCid(`bucket-name-with-mfs`); + */ async getBucketCid(name) { const getCidCommand = new GetBucketTaggingCommand({ Bucket: name, @@ -245,7 +258,7 @@ class FilebaseClient { * @returns {Promise>} - A promise that resolves with an array of objects representing the buckets in the client. * @example * // List all buckets - * await client.listBuckets(); + * const bucketList = await client.listBuckets(); */ async listBuckets() { const command = new ListBucketsCommand({}), @@ -292,6 +305,18 @@ class FilebaseClient { return pins; } + /** + * @summary Copies a file by name. Can also copy files to another bucket. + * @param {string} from - The name of the file to use as the source. + * @param {string} to - The name to use for the destination file + * @param {Object} [options] Options for copying file + * @property {string} options.sourceBucket The bucket to copy the file from. + * @property {string} entries.destinationBucket The bucket to copy the file into. + * @returns {Promise} - A promise that resolves when the file has been copied. + * @example + * // Copy file with name of `copy-file-example` + * const copiedFile = await client.copyFile(`copy-file-example`, `copy-file-example-copy1`); + */ async copyFile(from, to, options) { const copySource = `${ options?.sourceBucket || this.#default_bucket @@ -306,68 +331,99 @@ class FilebaseClient { return true; } - async deleteFile(path, options) { + /** + * @summary Deletes a file by name. + * @param {string} name - The name of the file to delete. + * @param {Object} [options] Options for deleting file + * @property {string} options.bucket The bucket to delete the file from. + * @returns {Promise} - A promise that resolves when the file has been deleted. + * @example + * // Delete file with name of `delete-file-example` + * const deletedFile = await client.deleteFile(`delete-file-example`); + */ + async deleteFile(name, options) { const command = new DeleteObjectCommand({ Bucket: options?.bucket || this.#default_bucket, - Key: path, + Key: name, }); await this.#s3_client.send(command); return true; } - async downloadFile(path, options) { + /** + * @summary Downloads a file by name. + * @param {string} name - The name of the file to download. + * @param {Object} [options] Options for downloading file + * @property {string} options.bucket The bucket to download the file from. + * @returns {Promise} - A promise that resolves with the contents of the file. + * @example + * // Download file with name of `download-file-example` + * const downloadedFile = await client.downloadFile(`download-file-example`); + */ + async downloadFile(name, options) { const command = new GetObjectCommand({ Bucket: options?.bucket || this.#default_bucket, - Key: path, + Key: name, }), response = await this.#s3_client.send(command); return response.Body; } - async generatePresignedUrl(objectKey, expiresInSeconds = 3600, options) { - const command = new GetObjectCommand({ + /** + * @summary Generate presigned URL for uploading a file. + * @param {string} name - The name of the file to upload. + * @param {Object} [options] Options for downloading file + * @property {string} options.bucket The bucket to upload the file into. + * @property {string} options.expectedContentType The content type that the uploaded file should be. + * @property {integer} options.expectedFileSize The number of bytes the file should be on upload. + * @property {integer} options.expirationInSeconds The number of seconds for the URL to be valid. + * @returns {Promise} - A promise that resolves with the presigned URL to use for the upload. + * @example + * // Generate a presigned URL to upload a file with name of `presigned-upload-file-example` + * const presignedUrl = await client.generatePresignedUrl(`presigned-upload-file-example`, { + * expirationInSeconds: 600, + * }); + */ + async generatePresignedUrl(name, options) { + const putObjectOptions = { Bucket: options?.bucket || this.#default_bucket, - Key: objectKey, - }); + Key: name, + }; + if (options?.expectedContentType) { + putObjectOptions["ContentType"] = options?.expectedContentType; + } + if (options?.expectedFileSize) { + putObjectOptions["ContentLength"] = options?.expectedFileSize; + } try { + const command = new PutObjectCommand(putObjectOptions); return await getSignedUrl(this.#s3_client, command, { - expiresIn: expiresInSeconds, // URL valid for 1 hour by default + expiresIn: options?.expirationInSeconds || 3600, // URL valid for 1 hour by default }); } catch (error) { - console.error("Error generating presigned download URL:", error); + console.error(`Error generating presigned upload URL:`, error); throw error; } } - /** - * @typedef {Object} objectOptions - * @property {string} [bucket] - The bucket to pin the IPFS CID into. - */ - - /** - * @typedef {Object} objectHeadResult - * @property {string} cid The CID of the uploaded object - * @property {array} [entries] If a directory then returns an array of the containing objects - * @property {string} entries.cid The CID of the uploaded object - * @property {string} entries.path The path of the object - */ - /** * @summary Gets an objects info and metadata using the S3 API. - * @param {string} path - The key of the object to be inspected. - * @param {objectOptions} [options] - The options for inspecting the object. - * @returns {Promise} + * @param {string} name - The key of the object to be inspected. + * @param {Object} [options] - The options for inspecting the object. + * @property {string} options.bucket - The bucket to pin the IPFS CID into. + * @returns {Promise} */ - async getFileMetadata(path, options) { + async getFileMetadata(name, options) { try { const command = new HeadObjectCommand({ Bucket: options?.bucket || this.#default_bucket, - Key: path, + Key: name, }); - return await this.#s3_client.send(command); + const headOutput = await this.#s3_client.send(command); + return headOutput["Metadata"]; } catch (err) { if (err.name === "NotFound") { return false; @@ -386,19 +442,14 @@ class FilebaseClient { * @property {function} [nextPage] Convenience function to get the next page of files */ - /** - * @typedef {Object} listObjectOptions - * @property {string} [Bucket] The name of the bucket. If not provided, the default bucket will be used. - * @property {string|null} [ContinuationToken=null] Continues listing from this objects name. - * @property {string|null} [Delimiter=null] Character used to group keys - * @property {number} [MaxKeys=1000] The maximum number of objects to retrieve. Defaults to 1000. - */ - /** * Retrieves a list of files from a specified bucket. * * @param {string} prefix - The prefix to filter the files list with. - * @param {listObjectOptions} [options] - The options for listing files. + * @param {Object} [options] - The options for listing files. + * @property {string} options.Bucket The name of the bucket. If not provided, the default bucket will be used. + * @property {string} options.ContinuationToken=null Continues listing from this objects name. + * @property {string} options.Delimiter=null Character used to group keys * @returns {Promise} - A promise that resolves to an array of files. * @example * // List files in bucket with a limit of 1000 @@ -454,7 +505,18 @@ class FilebaseClient { return listResponse; } - async pinFile(path, cid, options) { + /** + * @summary Pins a file by name and CID. + * @param {string} name - The name of the file to pin. + * @param {string} cid - The CID of the file to pin. + * @param {Object} [options] Options for pinning file + * @property {string} options.bucket The bucket to pin the file to. + * @returns {Promise} - A promise that resolves when the file has been queued for pinning. + * @example + * // Pin file with name of `pin-file-example` + * const pinnedFile = await client.pinFile(`pin-file-example`, 'QmbQDovX7wRe9ek7u6QXe9zgCXkTzoUSsTFJEkrYV1HrVR'); + */ + async pinFile(name, cid, options) { await this.#ipfs_client.request({ method: "POST", url: "api/v0/pin/add", @@ -462,7 +524,7 @@ class FilebaseClient { Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, }, params: { - name: path, + name: name, arg: cid, }, validateStatus: function (status) { @@ -472,30 +534,75 @@ class FilebaseClient { return true; } - async uploadDirectory(path, formData, options = {}) { - const uploadedFiles = await this.#uploadFiles(formData, { + /** + * @typedef {Object} pinnedFile + * @property {string} name Name of the pinned file + * @property {string} cid CID of the pinned file + * @property {number} size Size in Bytes of the pinned file + */ + + /** + * @summary Uploads an array of Files as a directory + * @param {string} name - The name of the directory once pinned. + * @param {File[]} input - The array of files to include in the directory. + * @param {Object} [options] Options for uploading directory + * @property {string} options.bucket The bucket to upload the pinned directory into. + * @returns {Promise} - A promise that resolves when the directory has finished uploading. + * @example + * // Pin file with name of `pin-file-example` + * const pinnedFile = await client.pinFile(`pin-file-example`, 'QmbQDovX7wRe9ek7u6QXe9zgCXkTzoUSsTFJEkrYV1HrVR'); + */ + async uploadDirectory(name, input, options = {}) { + const uploadedFiles = await this.#uploadFiles(input, { headers: { Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, }, params: { - "directory-name": path, + "directory-name": name, "wrap-with-directory": "true", }, }); return uploadedFiles[0]; } - async uploadFile(path, content, options = {}) { + /** + * @summary Uploads a single file + * @param {string} name - The name of the file once pinned. + * @param {File} content - The file to upload. + * @param {Object} [options] Options for uploading file + * @property {string} options.bucket The bucket to upload the pinned directory into. + * @property {Object} options.headers The headers to pass to the RPC API. + * @property {Object} options.params The params to pass to the RPC API. + * @returns {Promise} - A promise that resolves when the file has finished uploading. + * @example + * // Upload file with name of `upload-file-example` + * const uploadedFile = await client.uploadFile(`upload-file-example`, new Blob(["Hello Filebase!"])); + */ + async uploadFile(name, content, options = {}) { const uploadFormData = new FormData(); - uploadFormData.append("file", content, path); + uploadFormData.append("file", content, name); const uploadedFiles = await this.uploadFiles(uploadFormData, options); return uploadedFiles[0]; } - async uploadFiles(formData, options) { - const uploadOptions = {}; - return await this.#uploadFiles(formData, uploadOptions); + /** + * @summary Uploads multiple files at once. + * @param {FormData} content - The form to upload. + * @param {Object} [options] Options for uploading file + * @property {string} options.bucket The bucket to upload the pinned directory into. + * @property {Object} options.headers The headers to pass to the RPC API. + * @property {Object} options.params The params to pass to the RPC API. + * @returns {Promise} - A promise that resolves when the file has finished uploading. + * @example + * // Upload files with a form + * const uploadForm = new FormData(); + * uploadForm.append('File', new Blob(['Hello Jack!']), 'jacks/file.txt'); + * uploadForm.append('File', new Blob(['Hello Jill!']), 'jills/file.txt'); + * const uploadedFiles = await client.uploadFiles(uploadForm); + */ + uploadFiles(content, options = {}) { + return this.#uploadFiles(content, options); } //endregion @@ -512,20 +619,16 @@ class FilebaseClient { * @property {date} updated_at Date the name was last updated */ - /** - * @typedef {Object} nameOptions - * @property {boolean} [enabled] Whether the name is enabled or not. - */ - /** * @summary Creates a new IPNS name with the given name as the label and CID. * @param {string} label - The label of the new IPNS name. * @param {string} cid - The CID of the IPNS name. - * @param {nameOptions} [options] - Additional options for the IPNS name. + * @param {Object} [options] - Additional options for the IPNS name. + * @param {boolean} options.enabled - Whether the name is enabled or not. * @returns {Promise} - A Promise that resolves with the response JSON. * @example * // Create IPNS name with label of `create-name-example` and CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` - * await client.createIpnsName(`create-name-example`, `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm`); + * const createdName = await client.createIpnsName(`create-name-example`, `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm`); */ async createIpnsName( label, @@ -578,7 +681,7 @@ class FilebaseClient { * @returns {Promise} - A promise that resolves to the value of a name. * @example * // Get IPNS name with label of `list-name-example` - * await nameManager.get(`list-name-example`); + * const ipnsName = await nameManager.get(`list-name-example`); */ async getIpnsName(label) { try { @@ -600,12 +703,13 @@ class FilebaseClient { * @param {string} label - The label for the IPNS name. * @param {string} cid - The CID (Content Identifier) of the data. * @param {string} privateKey - The existing private key encoded in Base64. - * @param {nameOptions} [options] - Additional options for the IPNS name. + * @param {Object} [options] - Additional options for the IPNS name. + * @param {boolean} options.enabled - Whether the name is enabled or not. * @returns {Promise} - A Promise that resolves to the server response. * @example * // Import IPNS private key with label of `create-name-example`, CID of `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` * // and a private key encoded with base64 - * await client.importIpnsName( + * const createdName = await client.importIpnsName( * `create-name-example`, * `QmdmQXB2mzChmMeKY47C43LxUdg1NDJ5MWcKMKxDu7RgQm` * `BASE64_ENCODED_PRIVATEKEY` @@ -640,7 +744,7 @@ class FilebaseClient { * @returns {Promise>} - A promise that resolves to an array of names. * @example * // List all IPNS names - * await client.listIpnsNames(); + * const namesList = await client.listIpnsNames(); */ async listIpnsNames() { try { @@ -653,13 +757,30 @@ class FilebaseClient { } } - async resolveIpnsName(value) { + /** + * @summary Resolves an IPNS CID using your selected gateway + * @param {string} value - The IPNS CID to resolve. + * @param {Object} [options] - Optional options for fetching content. + * @param {string} options.endpoint - Gateway to use for downloading data. + * @param {string} options.format - Format for returned data. ["car", "tar", "raw", "ipns-record"] + * @param {number} options.timeout - Timeout for request in milliseconds. + * @param {string} options.token - Token for accessing gateway. + * @returns {Promise} - A promise that resolves to the IPFS CID. + */ + async resolveIpnsName(value, options = {}) { try { - const resolvedIpnsName = await this.#fetchIpnsRecord(value); - const buf = Buffer.from(resolvedIpnsName); - const body = new Uint8Array(buf, 0, buf.byteLength); - const ipnsRecord = unmarshalIPNSRecord(body); - return ipnsRecord.value; + const resolvedIpnsName = await this.#fetchContentFromGateway( + value, + "ipns", + { + ...options, + format: "ipns-record", + }, + ); + return unmarshalIPNSRecord(Buffer.from(resolvedIpnsName)).value.replace( + "/ipfs/", + "", + ); } catch (err) { this.#apiErrorHandler(err); } @@ -669,8 +790,8 @@ class FilebaseClient { * @summary Updates the specified name with the given CID. * @param {string} label - The label of the name to update. * @param {string} cid - The cid to associate with the name. - * @param {nameOptions} options - The options for the set operation. - * + * @param {Object} options - The options for the set operation. + * @param {boolean} options.enabled - Whether the name is enabled or not. * * @returns {Promise} - A Promise that resolves to true if the IPNS name was updated. * @example * // Update name with label of `update-name-example` and set the value of the IPNS name. @@ -725,7 +846,7 @@ class FilebaseClient { * @example * // Create gateway with name of `create-gateway-example` and a custom domain of `cname.mycustomdomain.com`. * // The custom domain must already exist and have a CNAME record pointed at `create-gateway-example.myfilebase.com`. - * await client.createGateway(`create-gateway-example`, { + * const createdGateway = await client.createGateway(`create-gateway-example`, { * domain: `cname.mycustomdomain.com` * }); */ @@ -782,7 +903,7 @@ class FilebaseClient { * @returns {Promise} - A promise that resolves to the value of a gateway. * @example * // Get gateway with name of `gateway-get-example` - * await client.getGateway(`gateway-get-example`); + * const existingGateway = await client.getGateway(`gateway-get-example`); */ async getGateway(name) { try { @@ -804,7 +925,7 @@ class FilebaseClient { * @returns {Promise>} - A promise that resolves to an array of gateways. * @example * // List all gateways - * await client.listGateways(); + * const gatewaysList = await client.listGateways(); */ async listGateways() { try { @@ -891,16 +1012,30 @@ class FilebaseClient { return downloadResponse.data; } - async #fetchIpnsRecord(cid) { - return this.#fetchContentFromGateway(cid, "ipns", { - format: "ipns-record", - }); - } - + /** + * @summary Fetches content by the IPFS CID from your selected gateway. + * @param {string} cid - The CID for the IPFS content to fetch data from. + * @param {Object} [options] - Optional options for fetching content. + * @param {string} options.endpoint - Gateway to use for downloading data. + * @param {string} options.format - Format for returned data. ["car", "tar", "raw", "ipns-record"] + * @param {number} options.timeout - Timeout for request in milliseconds. + * @param {string} options.token - Token for accessing gateway. + * @returns {Promise} + */ async fetchContentByCid(cid, options = {}) { return this.#fetchContentFromGateway(cid, "ipfs", options); } + /** + * @summary Fetches content by the IPNS CID from your selected gateway. + * @param {string} cid - The CID for the IPNS name to fetch data from. + * @param {Object} [options] - Optional options for fetching content. + * @param {string} options.endpoint - Gateway to use for downloading data. + * @param {string} options.format - Format for returned data. ["car", "tar", "raw", "ipns-record"] + * @param {number} options.timeout - Timeout for request in milliseconds. + * @param {string} options.token - Token for accessing gateway. + * @returns {Promise} + */ async fetchContentByIpnsName(cid, options = {}) { return this.#fetchContentFromGateway(cid, "ipns", options); } diff --git a/test/index.spec.cjs b/test/index.spec.cjs index 7e81d19..acdc8cd 100644 --- a/test/index.spec.cjs +++ b/test/index.spec.cjs @@ -791,7 +791,7 @@ test("resolve name", async () => { const testNameValue = await filebaseClient.resolveIpnsName( createdName.network_key, ); - assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); + assert.strictEqual(testNameValue, TEST_CID); } finally { await filebaseClient.deleteIpnsName(testNameLabel); } diff --git a/test/index.spec.mjs b/test/index.spec.mjs index ff181e5..5475f0a 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -791,7 +791,7 @@ test("resolve name", async () => { const testNameValue = await filebaseClient.resolveIpnsName( createdName.network_key, ); - assert.strictEqual(testNameValue, `/ipfs/${TEST_CID}`); + assert.strictEqual(testNameValue, TEST_CID); } finally { await filebaseClient.deleteIpnsName(testNameLabel); } From bcbbf315c6ed316d9a7de22c0c6d48e5d26cbc84 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Thu, 24 Jul 2025 18:55:13 -0500 Subject: [PATCH 09/15] Simplify listFiles method Update tutorials and readme.md --- readme.md | 94 ++++++++++++++------------- src/index.js | 108 +++++++++++++++---------------- test/index.spec.cjs | 2 +- test/index.spec.mjs | 2 +- tutorials/quickstart-bucket.md | 18 ++---- tutorials/quickstart-files.json | 3 + tutorials/quickstart-files.md | 23 +++++++ tutorials/quickstart-gateway.md | 22 +++---- tutorials/quickstart-name.md | 28 ++++---- tutorials/quickstart-object.json | 3 - tutorials/quickstart-object.md | 24 ------- tutorials/quickstart-pin.md | 19 +++--- 12 files changed, 169 insertions(+), 177 deletions(-) create mode 100644 tutorials/quickstart-files.json create mode 100644 tutorials/quickstart-files.md delete mode 100644 tutorials/quickstart-object.json delete mode 100644 tutorials/quickstart-object.md diff --git a/readme.md b/readme.md index 766424e..af60306 100644 --- a/readme.md +++ b/readme.md @@ -1,15 +1,15 @@ -

• Filebase SDK •

+

‥ Filebase SDK ‥

Developer Friendly [ IPFS | IPNS | S3 ]

## About -The Filebase SDK provides a hybrid data management solution, blending S3-compatible cloud storage with IPFS -(InterPlanetary File System) pinning services. It features robust S3 bucket management, object handling for uploads and -downloads, and seamless integration with IPFS and IPNS (InterPlanetary Naming System) for decentralized storage +The Filebase SDK provides a hybrid data management solution, blending S3-compatible cloud storage with IPFS +(InterPlanetary File System) pinning services. It features robust S3 bucket management, object handling for uploads and +downloads, and seamless integration with IPFS and IPNS (InterPlanetary Naming System) for decentralized storage operations. The SDK supports advanced data tasks like compiling files into CAR (Content Addressable aRchive) formats and -ensures secure transactions through strong authentication. Designed for varied applications, the Filebase SDK is ideal -for scenarios demanding the dependability of cloud storage combined with the advantages of decentralized, peer-to-peer -storage, catering to diverse needs such as content distribution, data backup, and archival. Developing InterPlanetary +ensures secure transactions through strong authentication. Designed for varied applications, the Filebase SDK is ideal +for scenarios demanding the dependability of cloud storage combined with the advantages of decentralized, peer-to-peer +storage, catering to diverse needs such as content distribution, data backup, and archival. Developing InterPlanetary Applications has never been easier. ### JS Client @@ -28,68 +28,72 @@ yarn add @filebase/sdk ### Getting started -The snippet below shows how to create a new bucket with `BucketManager`, upload a new object to IPFS -with `ObjectManager`, publish the object to IPNS with `NameManager`, delete the object with `ObjectManager` and finally -delete the bucket with `BucketManager`. +The snippet below shows how to create a new bucket, upload a new file to IPFS with `ObjectManager`, publish the +object to IPNS, delete the object and finally delete the bucket. -To use the library in your project, use npm or yarn to install the [`@filebase/sdk`](https://www.npmjs.com/package/@filebase/sdk) module. Requires node.js 16+. +To use the library in your project, use npm or yarn to install the [ +`@filebase/sdk`](https://www.npmjs.com/package/@filebase/sdk) module. Requires node.js 16+. **node.js** + ````js -// Import Classes -import { - BucketManager, - ObjectManager, - NameManager, - GatewayManager, - PinManager -} from '@filebase/sdk' - -// Initialize BucketManager -const bucketManager = new BucketManager(S3_KEY, S3_SECRET); +// Import example +import {FilebaseClient} from '@filebase/sdk' + // Create bucket +const client = new FilebaseClient(S3_KEY, S3_SECRET); const bucketName = `create-bucket-[random string]`; -await bucketManager.create(bucketName); +await client.createBucket(bucketName); + +// Upload File +const client = new FilebaseClient(S3_KEY, S3_SECRET, { + bucket: bucketName +}); +const fileName = `new-object`; +const uploadedFile = await client.uploadFile(fileName, new Blob(["Hello Filebase!"])); -// Initialize ObjectManager -const objectManager = new ObjectManager(S3_KEY, S3_SECRET, { +// Download File +const client = new FilebaseClient(S3_KEY, S3_SECRET, { + bucket: bucketName +}); +await client.downloadFile("/organized/my-object"); +await client.fetchContentByCid(uploadedFile.cid, { + endpoint: "my-custom-gateway.myfilebase.com", +}); + +// Copy File to a New Bucket +const client = new FilebaseClient(S3_KEY, S3_SECRET, { bucket: bucketName }); -// Upload Object -const objectName = `new-object`; -const uploadedObject = await objectManager.upload(objectName, body); -// Download Object -await uploadedObject.download(); -// Copy Object to a New Bucket const bucketCopyDestinationName = `copy-dest-bucket` -await bucketManager.create(bucketCopyDestinationName); -await objectManager.copy(`new-object`, bucketCopyDestinationName); +await client.createBucket(bucketCopyDestinationName); +await client.copyFile(`my-original-file`, 'my-copied-file', { + destinationBucket: bucketCopyDestinationName +}); -// Initialize NameManager -const nameManager = new NameManager(S3_KEY, S3_SECRET); // Create New IPNS Name with Broadcast Disabled +const client = new FilebaseClient(S3_KEY, S3_SECRET); const ipnsLabel = `myFirstIpnsKey`; -const ipnsName = await nameManager.create(ipnsLabel, uploadedObject.cid, { +const ipnsName = await client.createIpnsName(ipnsLabel, uploadedObject.cid, { enabled: true }); +const downloadedFile = await client.fetchContentByIpnsName(ipnsLabel, { + endpoint: "my-gw.myfilebase.com" +}) -// Initialize GatewayManager -const gatewayManager = new GatewayManager(S3_KEY, S3_SECRET); // Create New Gateway +const client = new FilebaseClient(S3_KEY, S3_SECRET); const gatewayName = "myRandomGatewayName"; -const myGateway = await gatewayManager.create(gatewayName); +const myGateway = await client.createGateway(gatewayName); -// Initialize PinManager -const pinManager = new PinManager(S3_KEY, S3_SECRET, { +// Create New Pin +const client = new FilebaseClient(S3_KEY, S3_SECRET, { bucket: bucketName, gateway: { endpoint: "https://myRandomGatewayName.myfilebase.com" } }); -// Create New Pin with Metadata -const myNewPin = await pinManager.create("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF", { - "application": "my-custom-app-on-filebase" -}); +const myNewPin = await client.pinFile("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF"); ```` Full API reference doc for the JS client are available at https://filebase.github.io/filebase-sdk diff --git a/src/index.js b/src/index.js index 0bc1186..921cb51 100644 --- a/src/index.js +++ b/src/index.js @@ -447,43 +447,39 @@ class FilebaseClient { * * @param {string} prefix - The prefix to filter the files list with. * @param {Object} [options] - The options for listing files. - * @property {string} options.Bucket The name of the bucket. If not provided, the default bucket will be used. - * @property {string} options.ContinuationToken=null Continues listing from this objects name. - * @property {string} options.Delimiter=null Character used to group keys + * @property {string} options.bucket The name of the bucket. If not provided, the default bucket will be used. + * @property {string} options.nextToken Continues listing from this objects name. + * @property {number} options.limit=1000 Continues listing from this objects name. * @returns {Promise} - A promise that resolves to an array of files. * @example * // List files in bucket with a limit of 1000 - * await filebaseClient.listFiles('my-favorites-folder', { - * MaxKeys: 1000 + * await client.listFiles('my-favorites-folder', { + * limit: 1000 * }); */ async listFiles( prefix = undefined, options = { - Bucket: this.#default_bucket, - ContinuationToken: null, - Delimiter: null, - MaxKeys: 1000, + bucket: this.#default_bucket, + nextToken: null, + limit: 1000, }, ) { const listOptions = { - ...options, - Prefix: prefix, + Bucket: options?.bucket || this.#default_bucket, + Prefix: prefix || "", + Delimiter: "/", + MaxKeys: listOptions?.limit || 1000, }; - if (listOptions?.MaxKeys && listOptions.MaxKeys > 100000) { - throw new Error(`MaxKeys Maximum value is 100000`); + if (listOptions?.limit && listOptions.limit > 100000) { + throw new Error(`Maximum limit is 100000`); } - const bucket = listOptions?.Bucket || this.#default_bucket, - limit = listOptions?.MaxKeys || 1000, - commandOptions = { - Bucket: bucket, - MaxKeys: limit, - }, - command = new ListObjectsV2Command({ - ...listOptions, - ...commandOptions, - }); - + if (options?.nextToken) { + listOptions.ContinuationToken = options?.nextToken; + } + const command = new ListObjectsV2Command({ + ...listOptions, + }); const { Contents, IsTruncated, NextContinuationToken } = await this.#s3_client.send(command); const listResponse = { @@ -498,42 +494,13 @@ class FilebaseClient { }; if (IsTruncated) { listResponse["nextPage"] = this.listFiles(prefix, { - ...options, - ContinuationToken: NextContinuationToken, + ...listOptions, + continuationToken: NextContinuationToken, }); } return listResponse; } - /** - * @summary Pins a file by name and CID. - * @param {string} name - The name of the file to pin. - * @param {string} cid - The CID of the file to pin. - * @param {Object} [options] Options for pinning file - * @property {string} options.bucket The bucket to pin the file to. - * @returns {Promise} - A promise that resolves when the file has been queued for pinning. - * @example - * // Pin file with name of `pin-file-example` - * const pinnedFile = await client.pinFile(`pin-file-example`, 'QmbQDovX7wRe9ek7u6QXe9zgCXkTzoUSsTFJEkrYV1HrVR'); - */ - async pinFile(name, cid, options) { - await this.#ipfs_client.request({ - method: "POST", - url: "api/v0/pin/add", - headers: { - Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, - }, - params: { - name: name, - arg: cid, - }, - validateStatus: function (status) { - return status === 200; - }, - }); - return true; - } - /** * @typedef {Object} pinnedFile * @property {string} name Name of the pinned file @@ -979,6 +946,37 @@ class FilebaseClient { } //endregion + //region Pinning Methods + /** + * @summary Pins a file by name and CID. + * @param {string} name - The name of the file to pin. + * @param {string} cid - The CID of the file to pin. + * @param {Object} [options] Options for pinning file + * @property {string} options.bucket The bucket to pin the file to. + * @returns {Promise} - A promise that resolves when the file has been queued for pinning. + * @example + * // Pin file with name of `pin-file-example` + * const pinnedFile = await client.pinFile(`pin-file-example`, 'QmbQDovX7wRe9ek7u6QXe9zgCXkTzoUSsTFJEkrYV1HrVR'); + */ + async pinFile(name, cid, options) { + await this.#ipfs_client.request({ + method: "POST", + url: "api/v0/pin/add", + headers: { + Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, + }, + params: { + name: name, + arg: cid, + }, + validateStatus: function (status) { + return status === 200; + }, + }); + return true; + } + //endregion + //region Content Fetch Methods async #fetchContentFromGateway(cid, resolver, options) { const selectedEndpoint = options?.endpoint || this.#default_gateway; diff --git a/test/index.spec.cjs b/test/index.spec.cjs index acdc8cd..4144ea4 100644 --- a/test/index.spec.cjs +++ b/test/index.spec.cjs @@ -511,7 +511,7 @@ test("list objects", async () => { }); const objectList = await filebaseClient.listFiles(`list-object-test-`, { - MaxKeys: 50, + limit: 50, }); assert.equal(objectList.entries.length, 26); diff --git a/test/index.spec.mjs b/test/index.spec.mjs index 5475f0a..d5db2a4 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -511,7 +511,7 @@ test("list objects", async () => { }); const objectList = await filebaseClient.listFiles(`list-object-test-`, { - MaxKeys: 50, + limit: 50, }); assert.equal(objectList.entries.length, 26); diff --git a/tutorials/quickstart-bucket.md b/tutorials/quickstart-bucket.md index 1d8a1a3..8890ba6 100644 --- a/tutorials/quickstart-bucket.md +++ b/tutorials/quickstart-bucket.md @@ -1,21 +1,17 @@ **node.js** ````js -// Import Classes -import {BucketManager} from '@filebase/sdk'; +// Import Client +import { FilebaseClient } from '@filebase/sdk'; -// Initialize BucketManager -const bucketManager = new BucketManager(S3_KEY, S3_SECRET); +// Initialize FilebaseClient +const client = new FilebaseClient(S3_KEY, S3_SECRET); // Create bucket const bucketName = `create-bucket-[random string]`; -await bucketManager.create(bucketName); +await client.createBucket(bucketName); // List buckets -const bucketsList = await bucketManager.list(); - -// Toggle bucket privacy off -await bucketManager.setPrivacy(bucketName, false); -console.dir(bucketsList); +const bucketsList = await client.listBuckets(); // Delete Bucket -await bucketManager.delete(bucketName); \ No newline at end of file +await client.deleteBucket(bucketName); \ No newline at end of file diff --git a/tutorials/quickstart-files.json b/tutorials/quickstart-files.json new file mode 100644 index 0000000..bfe2060 --- /dev/null +++ b/tutorials/quickstart-files.json @@ -0,0 +1,3 @@ +{ + "title": "Files" +} \ No newline at end of file diff --git a/tutorials/quickstart-files.md b/tutorials/quickstart-files.md new file mode 100644 index 0000000..083d5ab --- /dev/null +++ b/tutorials/quickstart-files.md @@ -0,0 +1,23 @@ +**node.js** +````js +// Import Client +import { FilebaseClient } from '@filebase/sdk'; + +// Initialize FilebaseClient +const bucketName = `create-file-[random string]`; +const client = new FilebaseClient(S3_KEY, S3_SECRET, { + bucket: bucketName +}); + +// Upload File +const fileName = `new-file`; +const uploadedFile = await client.uploadFile(fileName, new Blob["Hello Filebase!"]); + +// Confirm File Uploaded +const filesList = await client.listFiles(key, { + limit: 1, +}); +console.dir(filesList); + +// Delete File +await client.deleteFile(fileName); \ No newline at end of file diff --git a/tutorials/quickstart-gateway.md b/tutorials/quickstart-gateway.md index 85f2778..33f091c 100644 --- a/tutorials/quickstart-gateway.md +++ b/tutorials/quickstart-gateway.md @@ -1,32 +1,28 @@ **node.js** ````js -// Import Classes -import {GatewayManager} from '@filebase/sdk'; +// Import Client +import { FilebaseClient } from '@filebase/sdk'; -// Initialize GatewayManager -const gatewayManager = new GatewayManager(S3_KEY, S3_SECRET); +// Initialize FilebaseClient +const client = new FilebaseClient(S3_KEY, S3_SECRET); // Create New Gateway with a custom domain of `cname.mycustomdomain.com`. // The custom domain must already exist and have a CNAME record pointed at `myRandomGatewayName.myfilebase.com`. const gatewayName = "myRandomGatewayName"; -const myGateway = await gatewayManager.create(gatewayName); -await gatewayManager.create(gatewayname, { +const myGateway = await client.createGateway(gatewayname, { domain: `cname.mycustomdomain.com` }); // Get Gateway Setup -const gatewayConfig = await gatewayManager.get(gatewayName); +const gatewayConfig = await client.getGateway(gatewayName); // List IPFS Gateways -const myGateways = await gatewayManager.list(); +const myGateways = await client.listGateways(); // Update Gateway -const myUpdatedGateway = await gatewayManager.update(gatewayName, { +const myUpdatedGateway = await client.updateGateway(gatewayName, { enabled: false }); -// Toggle Gateway State -await gatewayManager.toggle(gatewayName, true) - // Delete Gateway -await gatewayManager.delete(gatewayName); \ No newline at end of file +await client.deleteGateway(gatewayName); \ No newline at end of file diff --git a/tutorials/quickstart-name.md b/tutorials/quickstart-name.md index 94c003e..574940b 100644 --- a/tutorials/quickstart-name.md +++ b/tutorials/quickstart-name.md @@ -1,36 +1,36 @@ **node.js** ````js -// Import Classes -import {NameManager} from '@filebase/sdk'; +// Import Client +import { FilebaseClient } from '@filebase/sdk'; -// Initialize NameManager -const nameManager = new NameManager(S3_KEY, S3_SECRET); +// Initialize FilebaseClient +const client = new FilebaseClient(S3_KEY, S3_SECRET); // Create New IPNS Name with Broadcast Disabled const ipnsCid = "QmZqkuqX1qTspb1GgmnzyRFetf1uMyA3CemvvgPZD39sPo"; -const ipnsName = await nameManager.create(`myFirstIpnsKey`, ipnsCid, { +const ipnsName = await client.createIpnsName(`myFirstIpnsKey`, ipnsCid, { enabled: true }); // Update IPNS Value and Optionally Enable the Broadcast const ipnsLabel = `myFirstIpnsKey`; -await nameManager.set(ipnsLabel, ipnsCid, { - enabled: true, +await client.updateIpnsName(ipnsLabel, ipnsCid, { + enabled: true }); -// Enable IPNS Broadcast without updating the IPNS Record -await nameManager.toggle(ipnsLabel, true); - // List IPNS Names -const myIpnsNames = await nameManager.list(); +const myIpnsNames = await client.listIpnsNames(); // List Specific IPNS Name -const myIpnsName = await nameManager.list(ipnsLabel); +const myIpnsName = await client.getIpnsName(ipnsLabel); // Import IPNS Name -const myImportedIpnsName = await nameManager.import(ipnsLabel, ipnsCid, Base64EncodedPrivateKey, { +const myImportedIpnsName = await client.importIpnsName(ipnsLabel, ipnsCid, Base64EncodedPrivateKey, { enabled: false, }); +// Resolve IPNS CID +const resolvedCid = await client.resolveIpnsName(ipnsCid); + // Delete Name -await nameManager.delete(ipnsLabel); \ No newline at end of file +await client.deleteIpnsName(ipnsLabel); \ No newline at end of file diff --git a/tutorials/quickstart-object.json b/tutorials/quickstart-object.json deleted file mode 100644 index 7088f34..0000000 --- a/tutorials/quickstart-object.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "title": "Objects" -} \ No newline at end of file diff --git a/tutorials/quickstart-object.md b/tutorials/quickstart-object.md deleted file mode 100644 index 559f3be..0000000 --- a/tutorials/quickstart-object.md +++ /dev/null @@ -1,24 +0,0 @@ -**node.js** -````js -// Import Classes -import {ObjectManager} from '@filebase/sdk'; - -// Initialize ObjectManager -const bucketName = `create-object-[random string]`; -const objectManager = new ObjectManager(S3_KEY, S3_SECRET, { - bucket: bucketName -}); - -// Upload Object -const objectName = `new-object`; -const uploadedObject = await objectManager.upload(objectName, body); - -// Confirm Object Uploaded -const objectsList = await objectManager.list({ - Prefix: key, - MaxKeys: 1, -}); -console.dir(objectsList) - -// Delete Object -await objectManager.delete(objectName); \ No newline at end of file diff --git a/tutorials/quickstart-pin.md b/tutorials/quickstart-pin.md index 427f1bc..d923dc9 100644 --- a/tutorials/quickstart-pin.md +++ b/tutorials/quickstart-pin.md @@ -1,16 +1,15 @@ **node.js** ````js -// Import Classes -import {PinManager} from '@filebase/sdk'; +// Import Client +import { FilebaseClient } from '@filebase/sdk'; -// Initialize PinManager -const pinManager = new PinManager(S3_KEY, S3_SECRET, { +// Initialize FilebaseClient +const client = new FilebaseClient(S3_KEY, S3_SECRET, { bucket: bucketName, - gateway: { - endpoint: "https://myRandomGatewayName.myfilebase.com" + endpoints: { + gateway: "https://myRandomGatewayName.myfilebase.com" } }); -// Create New Pin with Metadata -const myNewPin = await pinManager.create("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF", { - "application": "my-custom-app-on-filebase" -}); \ No newline at end of file + +// Create New Pin +const myNewPin = await client.pinFile("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF"); \ No newline at end of file From a54d671a93d81bc1502e5f45405a6dc8e33eb442 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 29 Jul 2025 11:39:20 -0500 Subject: [PATCH 10/15] Make gateway top level option --- src/index.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 921cb51..9f11155 100644 --- a/src/index.js +++ b/src/index.js @@ -47,6 +47,8 @@ class FilebaseClient { * @param {string} clientSecret - The secret access key for authentication. * @param {Object} [options] - Options for the client (optional) * @property {string} options.bucket The bucket to use for file operations (optional) + * @property {string} options.gateway The gateway to use for file retrievals (optional) + * @property {string} options.timeout The amount of time to wait for responses (optional) * @tutorial quickstart-bucket * @example * import FilebaseClient from "@filebase/sdk"; @@ -117,8 +119,7 @@ class FilebaseClient { //endregion //region IPFS Gateway Client - this.#default_gateway = - options?.endpoints.gateway || this.#PUBLIC_IPFS_GATEWAY; + this.#default_gateway = options?.gateway || this.#PUBLIC_IPFS_GATEWAY; //endregion } From 0a49c7e8c6639dbee7eaf0b55c2ae92071ab2676 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 29 Jul 2025 12:47:35 -0500 Subject: [PATCH 11/15] Simplify readme.md --- readme.md | 82 +++++++++++++++++++------------------------------------ 1 file changed, 28 insertions(+), 54 deletions(-) diff --git a/readme.md b/readme.md index af60306..d4137cf 100644 --- a/readme.md +++ b/readme.md @@ -1,38 +1,29 @@ -

‥ Filebase SDK ‥

-

Developer Friendly [ IPFS | IPNS | S3 ]

+# 🗂️ Filebase SDK -## About - -The Filebase SDK provides a hybrid data management solution, blending S3-compatible cloud storage with IPFS -(InterPlanetary File System) pinning services. It features robust S3 bucket management, object handling for uploads and -downloads, and seamless integration with IPFS and IPNS (InterPlanetary Naming System) for decentralized storage -operations. The SDK supports advanced data tasks like compiling files into CAR (Content Addressable aRchive) formats and -ensures secure transactions through strong authentication. Designed for varied applications, the Filebase SDK is ideal -for scenarios demanding the dependability of cloud storage combined with the advantages of decentralized, peer-to-peer -storage, catering to diverse needs such as content distribution, data backup, and archival. Developing InterPlanetary -Applications has never been easier. +[![npm version](https://badge.fury.io/js/@filebase%2Fsdk.svg)](https://badge.fury.io/js/@filebase%2Fsdk) +[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) -### JS Client +--- +## About -Install the package using npm +The Filebase SDK for JavaScript offers a straightforward way to add decentralized storage to your applications. It lets your team easily work with IPFS and IPNS, handling the tricky parts for you. -```shell -npm install @filebase/sdk -``` +Here's what you can do: -or yarn: +* Manage Storage: Easily create and control your storage spaces and gateways. +* Handle IPFS Files: Upload, download, and "pin" files to the IPFS network with ease. +* Control IPNS Names: Set up and find IPNS names to keep your content links consistent. +* Move Data: Quickly copy files between different storage spots. -```shell -yarn add @filebase/sdk -``` +Just install it with `npm install @filebase/sdk`. This SDK helps your team quickly build solutions using the power of decentralized data. Check out the full guide for all the details! ### Getting started -The snippet below shows how to create a new bucket, upload a new file to IPFS with `ObjectManager`, publish the -object to IPNS, delete the object and finally delete the bucket. +The snippet below shows how to create a new bucket, create a new gateway, upload a file to IPFS, publish the +file to IPNS. -To use the library in your project, use npm or yarn to install the [ -`@filebase/sdk`](https://www.npmjs.com/package/@filebase/sdk) module. Requires node.js 16+. +To use the library in your project, use npm to install the [ +`@filebase/sdk`](https://www.npmjs.com/package/@filebase/sdk) module. **node.js** @@ -41,30 +32,32 @@ To use the library in your project, use npm or yarn to install the [ import {FilebaseClient} from '@filebase/sdk' // Create bucket -const client = new FilebaseClient(S3_KEY, S3_SECRET); +const client = new FilebaseClient(clientKey, clientSecret); const bucketName = `create-bucket-[random string]`; await client.createBucket(bucketName); +// Create New Gateway +const gatewayName = "myRandomGatewayName"; +const myGateway = await client.createGateway(gatewayName); + // Upload File -const client = new FilebaseClient(S3_KEY, S3_SECRET, { - bucket: bucketName +const client = new FilebaseClient(clientKey, clientSecret, { + bucket: bucketName, + gateway: "https://myRandomGatewayName.myfilebase.com" }); const fileName = `new-object`; const uploadedFile = await client.uploadFile(fileName, new Blob(["Hello Filebase!"])); +// Pin File +const myNewPin = await client.pinFile("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF"); + // Download File -const client = new FilebaseClient(S3_KEY, S3_SECRET, { - bucket: bucketName -}); await client.downloadFile("/organized/my-object"); await client.fetchContentByCid(uploadedFile.cid, { endpoint: "my-custom-gateway.myfilebase.com", }); // Copy File to a New Bucket -const client = new FilebaseClient(S3_KEY, S3_SECRET, { - bucket: bucketName -}); const bucketCopyDestinationName = `copy-dest-bucket` await client.createBucket(bucketCopyDestinationName); await client.copyFile(`my-original-file`, 'my-copied-file', { @@ -72,7 +65,6 @@ await client.copyFile(`my-original-file`, 'my-copied-file', { }); // Create New IPNS Name with Broadcast Disabled -const client = new FilebaseClient(S3_KEY, S3_SECRET); const ipnsLabel = `myFirstIpnsKey`; const ipnsName = await client.createIpnsName(ipnsLabel, uploadedObject.cid, { enabled: true @@ -80,24 +72,6 @@ const ipnsName = await client.createIpnsName(ipnsLabel, uploadedObject.cid, { const downloadedFile = await client.fetchContentByIpnsName(ipnsLabel, { endpoint: "my-gw.myfilebase.com" }) - -// Create New Gateway -const client = new FilebaseClient(S3_KEY, S3_SECRET); -const gatewayName = "myRandomGatewayName"; -const myGateway = await client.createGateway(gatewayName); - -// Create New Pin -const client = new FilebaseClient(S3_KEY, S3_SECRET, { - bucket: bucketName, - gateway: { - endpoint: "https://myRandomGatewayName.myfilebase.com" - } -}); -const myNewPin = await client.pinFile("my-pin", "QmTJkc7crTuPG7xRmCQSz1yioBpCW3juFBtJPXhQfdCqGF"); ```` -Full API reference doc for the JS client are available at https://filebase.github.io/filebase-sdk - -### Testing - -Test are found in the `test` directory and are built to be run with the Node.js v20+ test runner. \ No newline at end of file +Full API reference doc for the JS client are available at https://filebase.github.io/filebase-sdk \ No newline at end of file From 8e17e1dc298ef4662e6cb627e77b2885917b1541 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 5 Aug 2025 09:39:07 -0500 Subject: [PATCH 12/15] Add CID version support --- src/index.js | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/index.js b/src/index.js index 9f11155..6f41279 100644 --- a/src/index.js +++ b/src/index.js @@ -279,6 +279,9 @@ class FilebaseClient { `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; options.params = options.params || {}; options.params["preserve-filenames"] = "true"; + options.params["cid-version"] = options.params.cidVersion + ? Number(options.params.cidVersion) + : 0; const downloadResponse = await this.#ipfs_client.request({ method: "POST", @@ -514,6 +517,7 @@ class FilebaseClient { * @param {string} name - The name of the directory once pinned. * @param {File[]} input - The array of files to include in the directory. * @param {Object} [options] Options for uploading directory + * @property {number} options.cidVersion The version of CID to use for the files hash. * @property {string} options.bucket The bucket to upload the pinned directory into. * @returns {Promise} - A promise that resolves when the directory has finished uploading. * @example @@ -526,6 +530,7 @@ class FilebaseClient { Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, }, params: { + "cid-version": options?.cidVersion || 0, "directory-name": name, "wrap-with-directory": "true", }, @@ -538,6 +543,7 @@ class FilebaseClient { * @param {string} name - The name of the file once pinned. * @param {File} content - The file to upload. * @param {Object} [options] Options for uploading file + * @property {number} options.cidVersion The version of CID to use for the files hash. * @property {string} options.bucket The bucket to upload the pinned directory into. * @property {Object} options.headers The headers to pass to the RPC API. * @property {Object} options.params The params to pass to the RPC API. @@ -558,6 +564,7 @@ class FilebaseClient { * @summary Uploads multiple files at once. * @param {FormData} content - The form to upload. * @param {Object} [options] Options for uploading file + * @property {number} options.cidVersion The version of CID to use for the files hash. * @property {string} options.bucket The bucket to upload the pinned directory into. * @property {Object} options.headers The headers to pass to the RPC API. * @property {Object} options.params The params to pass to the RPC API. From cbda3515cc2a9a6a0fbdd90dab6d064ceb2eb263 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Wed, 6 Aug 2025 11:56:38 -0500 Subject: [PATCH 13/15] Use `to-files` from Kubo RPC API for setting file locations --- src/index.js | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/index.js b/src/index.js index 6f41279..f4fa077 100644 --- a/src/index.js +++ b/src/index.js @@ -278,7 +278,7 @@ class FilebaseClient { options.headers["Authorization"] = `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; options.params = options.params || {}; - options.params["preserve-filenames"] = "true"; + options.params["to-files"] = options.params.toFiles || ""; options.params["cid-version"] = options.params.cidVersion ? Number(options.params.cidVersion) : 0; @@ -531,7 +531,7 @@ class FilebaseClient { }, params: { "cid-version": options?.cidVersion || 0, - "directory-name": name, + "to-files": name, "wrap-with-directory": "true", }, }); @@ -554,7 +554,8 @@ class FilebaseClient { */ async uploadFile(name, content, options = {}) { const uploadFormData = new FormData(); - uploadFormData.append("file", content, name); + uploadFormData.append("file", content); + options["to-files"] = name; const uploadedFiles = await this.uploadFiles(uploadFormData, options); return uploadedFiles[0]; @@ -577,7 +578,10 @@ class FilebaseClient { * const uploadedFiles = await client.uploadFiles(uploadForm); */ uploadFiles(content, options = {}) { - return this.#uploadFiles(content, options); + return this.#uploadFiles(content, { + ...options, + "to-files": options?.prefix || "", + }); } //endregion From a14d677d2e2b046171591017f73dde3f7acb8a4e Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Thu, 7 Aug 2025 12:59:15 -0500 Subject: [PATCH 14/15] Revert to-files changes Add upload files test --- src/index.js | 29 ++++++++++--------------- test/index.spec.cjs | 52 +++++++++++++++++++++++++++++++++++++++++++++ test/index.spec.mjs | 52 +++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 115 insertions(+), 18 deletions(-) diff --git a/src/index.js b/src/index.js index f4fa077..c704c0b 100644 --- a/src/index.js +++ b/src/index.js @@ -271,23 +271,20 @@ class FilebaseClient { //region File Methods async #uploadFiles(formData, options) { - options.headers = options.headers || {}; - options.headers = { - ...options.headers, - }; - options.headers["Authorization"] = + const uploadHeaders = options.headers || {}; + uploadHeaders["Authorization"] = `Bearer ${this.#getIpfsCredentials(options?.bucket)}`; - options.params = options.params || {}; - options.params["to-files"] = options.params.toFiles || ""; - options.params["cid-version"] = options.params.cidVersion - ? Number(options.params.cidVersion) + const uploadParams = options.params || {}; + uploadParams["preserve-filenames"] = "true"; + uploadParams["cid-version"] = uploadParams.cidVersion + ? Number(uploadParams.cidVersion) : 0; const downloadResponse = await this.#ipfs_client.request({ method: "POST", url: "api/v0/add", - headers: options.headers, - params: options.params, + headers: uploadHeaders, + params: uploadParams, data: formData, validateStatus: function (status) { return status === 200; @@ -531,7 +528,7 @@ class FilebaseClient { }, params: { "cid-version": options?.cidVersion || 0, - "to-files": name, + "directory-name": name, "wrap-with-directory": "true", }, }); @@ -554,8 +551,7 @@ class FilebaseClient { */ async uploadFile(name, content, options = {}) { const uploadFormData = new FormData(); - uploadFormData.append("file", content); - options["to-files"] = name; + uploadFormData.append("file", content, name); const uploadedFiles = await this.uploadFiles(uploadFormData, options); return uploadedFiles[0]; @@ -578,10 +574,7 @@ class FilebaseClient { * const uploadedFiles = await client.uploadFiles(uploadForm); */ uploadFiles(content, options = {}) { - return this.#uploadFiles(content, { - ...options, - "to-files": options?.prefix || "", - }); + return this.#uploadFiles(content, options); } //endregion diff --git a/test/index.spec.cjs b/test/index.spec.cjs index 4144ea4..2428a27 100644 --- a/test/index.spec.cjs +++ b/test/index.spec.cjs @@ -236,6 +236,23 @@ async function uploadObjects(bucket, key, body) { return typeof uploadedObject !== "undefined" && uploadedObject !== false; } +async function uploadFiles(bucket, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Upload Object + await filebaseClient.uploadFiles(body); + + return true; +} + async function deleteObject(bucket, key) { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { @@ -326,6 +343,41 @@ test("upload object", async () => { } }); +test("upload objects", async () => { + // Create Bucket `create-objects-test-pass + const uploadTestBucket = `${TEST_PREFIX}-create-objects-test-pass`; + await createBucket(uploadTestBucket); + + try { + // Upload object `create-object-test` + const objectPrefix = `create-objects-test/`; + const objectsForm = new FormData(); + objectsForm.append( + "file", + new Blob(["upload object 1"]), + `${objectPrefix}testObjects/1.txt`, + ); + objectsForm.append( + "file", + new Blob(["upload object 2"]), + `${objectPrefix}testObjects/2.txt`, + ); + objectsForm.append( + "file", + new Blob(["upload object 3"]), + `${objectPrefix}testObjects/3.txt`, + ); + const uploaded = await uploadFiles(uploadTestBucket, objectsForm); + + assert.notEqual(uploaded, false); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/1.txt`); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/2.txt`); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/3.txt`); + } finally { + await deleteBucket(uploadTestBucket); + } +}); + test("upload directory", async () => { // Create Bucket `create-object-test-pass const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; diff --git a/test/index.spec.mjs b/test/index.spec.mjs index d5db2a4..a34290f 100644 --- a/test/index.spec.mjs +++ b/test/index.spec.mjs @@ -236,6 +236,23 @@ async function uploadObjects(bucket, key, body) { return typeof uploadedObject !== "undefined" && uploadedObject !== false; } +async function uploadFiles(bucket, body) { + // Initialize FilebaseClient + const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { + bucket, + endpoints: { + s3: TEST_S3_ENDPOINT, + rpc: TEST_RPC_ENDPOINT, + platform: TEST_PLATFORM_ENDPOINT, + }, + }); + + // Upload Object + await filebaseClient.uploadFiles(body); + + return true; +} + async function deleteObject(bucket, key) { // Initialize FilebaseClient const filebaseClient = new FilebaseClient(CLIENT_KEY, CLIENT_SECRET, { @@ -326,6 +343,41 @@ test("upload object", async () => { } }); +test("upload objects", async () => { + // Create Bucket `create-objects-test-pass + const uploadTestBucket = `${TEST_PREFIX}-create-objects-test-pass`; + await createBucket(uploadTestBucket); + + try { + // Upload object `create-object-test` + const objectPrefix = `create-objects-test/`; + const objectsForm = new FormData(); + objectsForm.append( + "file", + new Blob(["upload object 1"]), + `${objectPrefix}testObjects/1.txt`, + ); + objectsForm.append( + "file", + new Blob(["upload object 2"]), + `${objectPrefix}testObjects/2.txt`, + ); + objectsForm.append( + "file", + new Blob(["upload object 3"]), + `${objectPrefix}testObjects/3.txt`, + ); + const uploaded = await uploadFiles(uploadTestBucket, objectsForm); + + assert.notEqual(uploaded, false); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/1.txt`); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/2.txt`); + await deleteObject(uploadTestBucket, `${objectPrefix}testObjects/3.txt`); + } finally { + await deleteBucket(uploadTestBucket); + } +}); + test("upload directory", async () => { // Create Bucket `create-object-test-pass const uploadDirectoryTestBucket = `${TEST_PREFIX}-create-directory-test-pass`; From 7e1979c63554ad3a28cc31f9ea0ed9b5f7c3f446 Mon Sep 17 00:00:00 2001 From: jtsmedley <38006759+jtsmedley@users.noreply.github.com> Date: Tue, 31 Mar 2026 12:05:51 -0500 Subject: [PATCH 15/15] Add verification to downloads --- package-lock.json | 13068 ++++++++++++++++++++++++++++++++++++++++++++ package.json | 3 +- src/index.js | 64 +- yarn.lock | 2821 ---------- 4 files changed, 13127 insertions(+), 2829 deletions(-) create mode 100644 package-lock.json delete mode 100644 yarn.lock diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..d9c1d46 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,13068 @@ +{ + "name": "@filebase/sdk", + "version": "2.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "@filebase/sdk", + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "@aws-sdk/client-s3": "3.842.0", + "@aws-sdk/s3-request-presigner": "3.844.0", + "@helia/verified-fetch": "7.1.0", + "axios": "1.10.0", + "ipns": "10.1.2" + }, + "devDependencies": { + "clean-jsdoc-theme": "4.3.0", + "esbuild": "0.25.8", + "esbuild-plugins-node-modules-polyfill": "1.7.1", + "jsdoc": "4.0.4", + "prettier": "3.6.2", + "tsup": "8.5.0", + "typescript": "5.8.3", + "uuid": "11.1.0" + } + }, + "node_modules/@achingbrain/http-parser-js": { + "version": "0.5.9", + "resolved": "https://registry.npmjs.org/@achingbrain/http-parser-js/-/http-parser-js-0.5.9.tgz", + "integrity": "sha512-nPuMf2zVzBAGRigH/1jFpb/6HmJsps+15f4BPlGDp3vsjYB2ZgruAErUpKpcFiVRz3DHLXcGNmuwmqZx/sVI7A==", + "license": "MIT", + "dependencies": { + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@achingbrain/nat-port-mapper": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/@achingbrain/nat-port-mapper/-/nat-port-mapper-4.0.5.tgz", + "integrity": "sha512-YAA4MW6jO6W7pmJaFzQ0AOLpu8iQClUkdT2HbfKLmtFjrpoZugnFj9wH8EONV9LxnIW+0W1J98ri+oApKyAKLQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/ssdp": "^4.1.0", + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/logger": "^6.0.5", + "abort-error": "^1.0.0", + "err-code": "^3.0.1", + "netmask": "^2.0.2", + "p-defer": "^4.0.0", + "race-signal": "^2.0.0", + "xml2js": "^0.6.0" + } + }, + "node_modules/@achingbrain/ssdp": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/@achingbrain/ssdp/-/ssdp-4.2.4.tgz", + "integrity": "sha512-1dZIV7dwYJRS1sTA0qIDzsMdwZAnPa7DGb2YuPqMq4PjEjvzBBuz2WIsXnrkRFCNY00JuqLiMby9GecnGsOgaQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.0", + "freeport-promise": "^2.0.0", + "merge-options": "^3.0.4", + "xml2js": "^0.6.2" + } + }, + "node_modules/@assemblyscript/loader": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.9.4.tgz", + "integrity": "sha512-HazVq9zwTVwGmqdwYzu7WyQ6FQVZ7SwET0KKQuKm55jD0IfUpZgN0OPIiZG3zV1iSrVYcN0bdwLRXI/VNCYsUA==", + "license": "Apache-2.0" + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz", + "integrity": "sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz", + "integrity": "sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz", + "integrity": "sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha1-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz", + "integrity": "sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-browser/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz", + "integrity": "sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz", + "integrity": "sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz", + "integrity": "sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.2.0.tgz", + "integrity": "sha512-GGP3O9QFD24uGeAXYUjwSTXARoqpZykHadOmA8G5vfJPK0/DC67qa//0qvqrJzL1xc8WQWX7/yc7fwudjPHPhA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.2.0.tgz", + "integrity": "sha512-IJdWBbTcMQ6DA0gdNhh/BwrLkDR+ADW5Kr1aZmd4k3DIF6ezMV4R2NIAmT08wQJ3yUK82thHWmC/TnK/wpMMIA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-crypto/util/node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.3.0.tgz", + "integrity": "sha512-R8Rdn8Hy72KKcebgLiv8jQcQkXoLMOGGv5uI1/k0l+snqkOzQ1R0ChUBCxWMlBsFMekWjq0wRudIweFs7sKT5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.842.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.842.0.tgz", + "integrity": "sha512-T5Rh72Rcq1xIaM8KkTr1Wpr7/WPCYO++KrM+/Em0rq2jxpjMMhj77ITpgH7eEmNxWmwIndTwqpgfmbpNfk7Gbw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-node": "3.840.0", + "@aws-sdk/middleware-bucket-endpoint": "3.840.0", + "@aws-sdk/middleware-expect-continue": "3.840.0", + "@aws-sdk/middleware-flexible-checksums": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-location-constraint": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-sdk-s3": "3.840.0", + "@aws-sdk/middleware-ssec": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/signature-v4-multi-region": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/eventstream-serde-browser": "^4.0.4", + "@smithy/eventstream-serde-config-resolver": "^4.1.2", + "@smithy/eventstream-serde-node": "^4.0.4", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-blob-browser": "^4.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/hash-stream-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/md5-js": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "@smithy/util-waiter": "^4.0.6", + "@types/uuid": "^9.0.1", + "tslib": "^2.6.2", + "uuid": "^9.0.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/client-s3/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@aws-sdk/client-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz", + "integrity": "sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz", + "integrity": "sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "4.4.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz", + "integrity": "sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz", + "integrity": "sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-stream": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz", + "integrity": "sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz", + "integrity": "sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "3.840.0", + "@aws-sdk/credential-provider-http": "3.840.0", + "@aws-sdk/credential-provider-ini": "3.840.0", + "@aws-sdk/credential-provider-process": "3.840.0", + "@aws-sdk/credential-provider-sso": "3.840.0", + "@aws-sdk/credential-provider-web-identity": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/credential-provider-imds": "^4.0.6", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz", + "integrity": "sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz", + "integrity": "sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/client-sso": "3.840.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/token-providers": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz", + "integrity": "sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-bucket-endpoint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz", + "integrity": "sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-expect-continue": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.840.0.tgz", + "integrity": "sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.840.0.tgz", + "integrity": "sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/is-array-buffer": "^4.0.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-host-header": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz", + "integrity": "sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-location-constraint": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.840.0.tgz", + "integrity": "sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-logger": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz", + "integrity": "sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-recursion-detection": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz", + "integrity": "sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.840.0.tgz", + "integrity": "sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.6.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.2", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-ssec": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.840.0.tgz", + "integrity": "sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/middleware-user-agent": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz", + "integrity": "sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@smithy/core": "^3.6.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz", + "integrity": "sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "3.840.0", + "@aws-sdk/middleware-host-header": "3.840.0", + "@aws-sdk/middleware-logger": "3.840.0", + "@aws-sdk/middleware-recursion-detection": "3.840.0", + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/region-config-resolver": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-endpoints": "3.840.0", + "@aws-sdk/util-user-agent-browser": "3.840.0", + "@aws-sdk/util-user-agent-node": "3.840.0", + "@smithy/config-resolver": "^4.1.4", + "@smithy/core": "^3.6.0", + "@smithy/fetch-http-handler": "^5.0.4", + "@smithy/hash-node": "^4.0.4", + "@smithy/invalid-dependency": "^4.0.4", + "@smithy/middleware-content-length": "^4.0.4", + "@smithy/middleware-endpoint": "^4.1.13", + "@smithy/middleware-retry": "^4.1.14", + "@smithy/middleware-serde": "^4.0.8", + "@smithy/middleware-stack": "^4.0.4", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/node-http-handler": "^4.0.6", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.5", + "@smithy/types": "^4.3.1", + "@smithy/url-parser": "^4.0.4", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-body-length-node": "^4.0.0", + "@smithy/util-defaults-mode-browser": "^4.0.21", + "@smithy/util-defaults-mode-node": "^4.0.21", + "@smithy/util-endpoints": "^3.0.6", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-retry": "^4.0.6", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/region-config-resolver": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz", + "integrity": "sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner": { + "version": "3.844.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.844.0.tgz", + "integrity": "sha512-i953TKW1rXbd9G2xEgWoJZDoF0Z1ONRlrXkOKDGOrY/uQhAIPNDz5k6tFcXG5oIaLWW197ShENv3CeEJnhfh3g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/signature-v4-multi-region": "3.844.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-format-url": "3.840.0", + "@smithy/middleware-endpoint": "^4.1.14", + "@smithy/protocol-http": "^5.1.2", + "@smithy/smithy-client": "^4.4.6", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/@aws-sdk/core": { + "version": "3.844.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.844.0.tgz", + "integrity": "sha512-pfpI54bG5Xf2NkqrDBC2REStXlDXNCw/whORhkEs+Tp5exU872D5QKguzjPA6hH+8Pvbq1qgt5zXMbduISTHJw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@aws-sdk/xml-builder": "3.821.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/property-provider": "^4.0.4", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.6", + "@smithy/types": "^4.3.1", + "@smithy/util-base64": "^4.0.0", + "@smithy/util-body-length-browser": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-utf8": "^4.0.0", + "fast-xml-parser": "5.2.5", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.844.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.844.0.tgz", + "integrity": "sha512-vOD5reqZszXBWMbZFN3EUar203o2i8gcoTdrymY4GMsAPDsh0k8yd3VJRNPuxT/017tP6G+rQepOGzna4umung==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.844.0", + "@aws-sdk/types": "3.840.0", + "@aws-sdk/util-arn-parser": "3.804.0", + "@smithy/core": "^3.7.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/smithy-client": "^4.4.6", + "@smithy/types": "^4.3.1", + "@smithy/util-config-provider": "^4.0.0", + "@smithy/util-middleware": "^4.0.4", + "@smithy/util-stream": "^4.2.3", + "@smithy/util-utf8": "^4.0.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.844.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.844.0.tgz", + "integrity": "sha512-QC8nocQcZ3Bj7vTnuL47iNhcuUjMC46E2L85mU+sPQo3LN2qBVGSOTF+xSWGvmSFDpkN4ZXUMVeA0cJoJFEDFA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.844.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/fast-xml-parser": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz", + "integrity": "sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^2.1.0" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/@aws-sdk/s3-request-presigner/node_modules/strnum": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.2.2.tgz", + "integrity": "sha512-DnR90I+jtXNSTXWdwrEy9FakW7UX+qUZg28gj5fk2vxxl7uS/3bpI4fjFYVmdK9etptYBPNkpahuQnEwhwECqA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.840.0.tgz", + "integrity": "sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-sdk-s3": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/protocol-http": "^5.1.2", + "@smithy/signature-v4": "^5.1.2", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz", + "integrity": "sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.840.0", + "@aws-sdk/nested-clients": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/property-provider": "^4.0.4", + "@smithy/shared-ini-file-loader": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz", + "integrity": "sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-arn-parser": { + "version": "3.804.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz", + "integrity": "sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-endpoints": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz", + "integrity": "sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "@smithy/util-endpoints": "^3.0.6", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-format-url": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.840.0.tgz", + "integrity": "sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/querystring-builder": "^4.0.4", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.5", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.965.5.tgz", + "integrity": "sha512-WhlJNNINQB+9qtLtZJcpQdgZw3SCDCpXdUJP7cToGwHbCWCnRckGlc6Bx/OhWwIYFNAn+FIydY8SZ0QmVu3xTQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-user-agent-browser": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz", + "integrity": "sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "3.840.0", + "@smithy/types": "^4.3.1", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/util-user-agent-node": { + "version": "3.840.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz", + "integrity": "sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ==", + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/middleware-user-agent": "3.840.0", + "@aws-sdk/types": "3.840.0", + "@smithy/node-config-provider": "^4.1.3", + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "aws-crt": ">=1.0.0" + }, + "peerDependenciesMeta": { + "aws-crt": { + "optional": true + } + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.821.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz", + "integrity": "sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.3.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.29.0.tgz", + "integrity": "sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.28.5", + "js-tokens": "^4.0.0", + "picocolors": "^1.1.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.29.0.tgz", + "integrity": "sha512-T1NCJqT/j9+cn8fvkt7jtwbLBfLC/1y1c7NtCeXFRgzGTsafi68MRv8yzkYSapBnFA6L3U2VSc02ciDzoAJhJg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", + "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-compilation-targets": "^7.28.6", + "@babel/helper-module-transforms": "^7.28.6", + "@babel/helpers": "^7.28.6", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/remapping": "^2.3.5", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/babel" + } + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.29.1", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.29.1.tgz", + "integrity": "sha512-qsaF+9Qcm2Qv8SRIMMscAvG4O3lJ0F1GuMo5HR/Bp02LopNgnZBC/EkbevHFeGs4ls/oPz9v+Bsmzbkbe+0dUw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "@jridgewell/gen-mapping": "^0.3.12", + "@jridgewell/trace-mapping": "^0.3.28", + "jsesc": "^3.0.2" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.28.6.tgz", + "integrity": "sha512-JYtls3hqi15fcx5GaSNL7SCTJ2MNmjrkHXg4FSpOA/grxK8KwyZ5bubHsCq8FXCkua6xhuaaBit+3b7+VZRfcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/compat-data": "^7.28.6", + "@babel/helper-validator-option": "^7.27.1", + "browserslist": "^4.24.0", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-globals": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@babel/helper-globals/-/helper-globals-7.28.0.tgz", + "integrity": "sha512-+W6cISkXFa1jXsDEdYA8HeevQT/FULhxzR99pxphltZcVaugps53THCeiWA8SguxxpSp3gKPiuYfSWopkLQ4hw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.28.6.tgz", + "integrity": "sha512-l5XkZK7r7wa9LucGw9LwZyyCUscb4x37JWTPz7swwFE/0FMQAGpiWUZn8u9DzkSBWEcK25jmvubfpw2dnAMdbw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.28.6.tgz", + "integrity": "sha512-67oXFAYr2cDLDVGLXTEABjdBJZ6drElUSI7WKp70NrpyISso3plG9SAGEF6y7zbha/wOzUByWWTJvEDVNIUGcA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-module-imports": "^7.28.6", + "@babel/helper-validator-identifier": "^7.28.5", + "@babel/traverse": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.28.6.tgz", + "integrity": "sha512-S9gzZ/bz83GRysI7gAD4wPT/AI3uCnY+9xn+Mx/KPs2JwHJIz1W8PZkg2cqyt3RNOBM8ejcXhV6y8Og7ly/Dug==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-string-parser": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz", + "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.28.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.28.5.tgz", + "integrity": "sha512-qSs4ifwzKJSV39ucNjsvc6WVHs6b7S03sOh2OcHF9UHfVPqWWALUsNUVzhSBiItjRZoLHx7nIarVjqKVusUZ1Q==", + "license": "MIT", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.27.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz", + "integrity": "sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.29.2.tgz", + "integrity": "sha512-HoGuUs4sCZNezVEKdVcwqmZN8GoHirLUcLaYVNBK2J0DadGtdcqgr3BCbvH8+XUo4NGjNl3VOtSjEKNzqfFgKw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.29.2.tgz", + "integrity": "sha512-4GgRzy/+fsBa72/RZVJmGKPmZu9Byn8o4MoLpmNe1m8ZfYnz5emHLQz3U4gLud6Zwl0RZIcgiLD7Uq7ySFuDLA==", + "license": "MIT", + "dependencies": { + "@babel/types": "^7.29.0" + }, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-bigint": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz", + "integrity": "sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.12.13" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-attributes": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.28.6.tgz", + "integrity": "sha512-jiLC0ma9XkQT3TKJ9uYvlakm66Pamywo+qwL+oL8HJOvc6TWdZXVfhqJr8CCzbSGUAbDOzlGHJC1U+vRfLQDvw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.10.4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.14.5" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.29.2", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.29.2.tgz", + "integrity": "sha512-JiDShH45zKHWyGe4ZNVRrCjBz8Nh9TMmZG1kh4QTK8hCBTWBi8Da+i7s1fJw7/lYpM4ccepSNfqzZ/QvABBi5g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.28.6", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.28.6.tgz", + "integrity": "sha512-YA6Ma2KsCdGb+WC6UpBVFJGXL58MDA6oyONbjyF/+5sBgxY/dwkhLogbMT2GXXyU84/IhRw/2D1Os1B/giz+BQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.28.6", + "@babel/parser": "^7.28.6", + "@babel/types": "^7.28.6" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.29.0.tgz", + "integrity": "sha512-4HPiQr0X7+waHfyXPZpWPfWL/J7dcN1mx9gL6WdQVMbPnF3+ZhSMs8tCxN7oHddJE9fhNE7+lxdnlyemKfJRuA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/generator": "^7.29.0", + "@babel/helper-globals": "^7.28.0", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/types": "^7.29.0", + "debug": "^4.3.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/types": { + "version": "7.29.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.29.0.tgz", + "integrity": "sha512-LwdZHpScM4Qz8Xw2iKSzS+cfglZzJGvofQICy7W7v4caru4EaAmyUuO6BGrbyQ2mYV11W0U8j5mBhd14dd3B0A==", + "license": "MIT", + "dependencies": { + "@babel/helper-string-parser": "^7.27.1", + "@babel/helper-validator-identifier": "^7.28.5" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@borewit/text-codec": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@borewit/text-codec/-/text-codec-0.2.2.tgz", + "integrity": "sha512-DDaRehssg1aNrH4+2hnj1B7vnUGEjU6OIlyRdkMd0aUdIUvKXrJfXsy8LVtXAy7DRvYVluWbMspsRhz2lcW0mQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@chainsafe/as-chacha20poly1305": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-chacha20poly1305/-/as-chacha20poly1305-0.1.0.tgz", + "integrity": "sha512-BpNcL8/lji/GM3+vZ/bgRWqJ1q5kwvTFmGPk7pxm/QQZDbaMI98waOHjEymTjq2JmdD/INdNBFOVSyJofXg7ew==", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/as-sha256": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@chainsafe/as-sha256/-/as-sha256-1.2.0.tgz", + "integrity": "sha512-H2BNHQ5C3RS+H0ZvOdovK6GjFAyq5T6LClad8ivwj9Oaiy28uvdsGVS7gNJKuZmg0FGHAI+n7F0Qju6U0QkKDA==", + "license": "Apache-2.0" + }, + "node_modules/@chainsafe/is-ip": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.1.0.tgz", + "integrity": "sha512-KIjt+6IfysQ4GCv66xihEitBjvhU/bixbbbFxdJ1sqCp4uJ0wuZiYBPhksZoy4lfaF0k9cwNzY5upEW/VWdw3w==", + "license": "MIT" + }, + "node_modules/@chainsafe/libp2p-noise": { + "version": "17.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-noise/-/libp2p-noise-17.0.0.tgz", + "integrity": "sha512-vwrmY2Y+L1xYhIDiEpl61KHxwrLCZoXzTpwhyk34u+3+6zCAZPL3GxH3i2cs+u5IYNoyLptORdH17RKFXy7upA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/as-chacha20poly1305": "^0.1.0", + "@chainsafe/as-sha256": "^1.2.0", + "@libp2p/crypto": "^5.1.9", + "@libp2p/interface": "^3.0.0", + "@libp2p/peer-id": "^6.0.0", + "@libp2p/utils": "^7.0.0", + "@noble/ciphers": "^2.0.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "protons-runtime": "^5.6.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0", + "wherearewe": "^2.0.1" + } + }, + "node_modules/@chainsafe/libp2p-yamux": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@chainsafe/libp2p-yamux/-/libp2p-yamux-8.0.1.tgz", + "integrity": "sha512-pJsqmUg1cZRJZn/luAtQaq0uLcVfExo51Rg7iRtAEceNYtsKUi/exfegnvTBzTnF1CGmTzVEV3MCLsRhqiNyoA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.0.0", + "@libp2p/utils": "^7.0.0", + "race-signal": "^2.0.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@chainsafe/netmask": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz", + "integrity": "sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg==", + "license": "MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1" + } + }, + "node_modules/@dnsquery/dns-packet": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@dnsquery/dns-packet/-/dns-packet-6.1.1.tgz", + "integrity": "sha512-WXTuFvL3G+74SchFAtz3FgIYVOe196ycvGsMgvSH/8Goptb1qpIQtIuM4SOK9G9lhMWYpHxnXyy544ZhluFOew==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.4", + "utf8-codec": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz", + "integrity": "sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.8.tgz", + "integrity": "sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz", + "integrity": "sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.8.tgz", + "integrity": "sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz", + "integrity": "sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz", + "integrity": "sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz", + "integrity": "sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz", + "integrity": "sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz", + "integrity": "sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz", + "integrity": "sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz", + "integrity": "sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz", + "integrity": "sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz", + "integrity": "sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz", + "integrity": "sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz", + "integrity": "sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz", + "integrity": "sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz", + "integrity": "sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz", + "integrity": "sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz", + "integrity": "sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz", + "integrity": "sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz", + "integrity": "sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openharmony-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz", + "integrity": "sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz", + "integrity": "sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz", + "integrity": "sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz", + "integrity": "sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz", + "integrity": "sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@helia/bitswap": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@helia/bitswap/-/bitswap-3.1.4.tgz", + "integrity": "sha512-0YhfMipfiE+38nk0xmofspOv7qzsMMh3Dj8jFRDHT4QRsUd5G9akhUmGCi8jFgH84ITyjwThTqfJkJDH+MEUQA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^6.1.1", + "@helia/utils": "^2.4.2", + "@libp2p/interface": "^3.1.0", + "@libp2p/logger": "^6.0.5", + "@libp2p/peer-collections": "^7.0.5", + "@libp2p/utils": "^7.0.5", + "@multiformats/multiaddr": "^13.0.1", + "any-signal": "^4.1.1", + "interface-blockstore": "^6.0.1", + "interface-store": "^7.0.0", + "it-drain": "^3.0.10", + "it-length-prefixed": "^10.0.1", + "it-map": "^3.1.4", + "it-pushable": "^3.2.3", + "it-take": "^3.0.9", + "it-to-buffer": "^4.0.10", + "multiformats": "^13.4.1", + "p-defer": "^4.0.1", + "progress-events": "^1.0.1", + "protons-runtime": "^5.6.0", + "race-event": "^1.6.1", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/block-brokers": { + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@helia/block-brokers/-/block-brokers-5.1.4.tgz", + "integrity": "sha512-sItwx53fkWtkypP28eIwYHdzE85IOUxhvUXHTyEQMCvGk1gKKE5wi50zwZ9AhuIaZ/kFk2GXgA03Fuameg4HBg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/bitswap": "^3.1.4", + "@helia/interface": "^6.1.1", + "@helia/utils": "^2.4.2", + "@libp2p/interface": "^3.1.0", + "@libp2p/utils": "^7.0.5", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "@multiformats/multiaddr-to-uri": "^12.0.0", + "interface-blockstore": "^6.0.1", + "interface-store": "^7.0.0", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@helia/car": { + "version": "5.3.10", + "resolved": "https://registry.npmjs.org/@helia/car/-/car-5.3.10.tgz", + "integrity": "sha512-0gcu+1EaQkHwqcwdjnNyuF2+h1yFjk21/AgVfU9fIpSwla7AwjhsWhJ6kat8t856U2e6llLDB8/PMnYFm8u6mQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^6.1.1", + "@helia/utils": "^2.4.2", + "@ipld/car": "^5.4.2", + "@ipld/dag-pb": "^4.1.5", + "@libp2p/interface": "^3.1.0", + "@libp2p/utils": "^7.0.5", + "any-signal": "^4.1.1", + "interface-blockstore": "^6.0.1", + "ipfs-unixfs": "^12.0.0", + "ipfs-unixfs-exporter": "^15.0.2", + "it-drain": "^3.0.10", + "it-map": "^3.1.4", + "it-to-buffer": "^4.0.10", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1", + "race-signal": "^2.0.0" + } + }, + "node_modules/@helia/delegated-routing-v1-http-api-client": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@helia/delegated-routing-v1-http-api-client/-/delegated-routing-v1-http-api-client-6.0.1.tgz", + "integrity": "sha512-Y1nGpUQrdN80XSDDAfe7azJFKKD0MxM0mQqfbefNEcrYMM344rHNQJ7xgiSqsH20vMIaKv+NnQqT/MEg2aWv6g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.0.2", + "@libp2p/peer-id": "^6.0.3", + "@multiformats/multiaddr": "^13.0.1", + "any-signal": "^4.1.1", + "browser-readablestream-to-it": "^2.0.9", + "ipns": "^10.0.2", + "it-first": "^3.0.8", + "it-map": "^3.1.3", + "it-ndjson": "^1.1.3", + "multiformats": "^13.3.6", + "p-defer": "^4.0.1", + "p-queue": "^9.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/dnslink": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/@helia/dnslink/-/dnslink-1.1.4.tgz", + "integrity": "sha512-uQXu8Qi054IZz4yYqHBqR9nep+gO0EfjA0WqEVquE1e+5k2CpQq8UOgoYNxrzaNC9++PpJYs8FEfCE2vTXvVKw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.0", + "@libp2p/peer-id": "^6.0.3", + "@multiformats/dns": "^1.0.9", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1", + "quick-lru": "^7.3.0" + } + }, + "node_modules/@helia/interface": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/@helia/interface/-/interface-6.1.1.tgz", + "integrity": "sha512-vcLr6lMB2sE3iweBMr2ZXmugOPw1U2kLppwit7raQ84L1wM/q4ERBQfouaeAA0dntliopXk1luPU8I9glE6PIA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.0", + "@multiformats/dns": "^1.0.9", + "@multiformats/multiaddr": "^13.0.1", + "interface-blockstore": "^6.0.1", + "interface-datastore": "^9.0.2", + "interface-store": "^7.0.0", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/@helia/ipns": { + "version": "9.1.9", + "resolved": "https://registry.npmjs.org/@helia/ipns/-/ipns-9.1.9.tgz", + "integrity": "sha512-SbCyTsdkvxkY2NBV6Lg4Xg8XRaAPSfVuYMIHlcctEu9+tEFllAP9cyC3TzDTHBQOj2+qlxTXR2n4ayIGLSZwyg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^6.1.1", + "@libp2p/crypto": "^5.1.7", + "@libp2p/interface": "^3.1.0", + "@libp2p/kad-dht": "^16.1.0", + "@libp2p/keychain": "^6.0.5", + "@libp2p/logger": "^6.0.5", + "@libp2p/utils": "^7.0.5", + "interface-datastore": "^9.0.2", + "ipns": "^10.1.2", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1", + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/routers": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@helia/routers/-/routers-5.0.3.tgz", + "integrity": "sha512-6yiaN8amvHrC1yynWV+HRjk0zPOL2QwB2QzilaF2R0XozqqoCyOOX0NE0Z5rkVA6IyUBSH2J+t+TpgnE5pTaHA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/delegated-routing-v1-http-api-client": "^6.0.0", + "@helia/interface": "^6.1.1", + "@libp2p/interface": "^3.1.0", + "@libp2p/peer-id": "^6.0.3", + "@multiformats/uri-to-multiaddr": "^10.0.0", + "ipns": "^10.1.2", + "it-first": "^3.0.9", + "it-map": "^3.1.4", + "multiformats": "^13.4.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/unixfs": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@helia/unixfs/-/unixfs-7.1.0.tgz", + "integrity": "sha512-TiJb/1LX67TZ9O1BMNt41hX8SodTFzShVw/0uii72JRONxOE+GuKSzC0LtMfssY3UrpLjjL48kkXtsH5zsvJSw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^6.1.1", + "@ipld/dag-pb": "^4.1.5", + "@libp2p/interface": "^3.1.0", + "@libp2p/logger": "^6.0.5", + "@libp2p/utils": "^7.0.5", + "@multiformats/murmur3": "^2.1.8", + "interface-blockstore": "^6.0.1", + "ipfs-unixfs": "^12.0.1", + "ipfs-unixfs-exporter": "^15.0.3", + "ipfs-unixfs-importer": "^16.1.4", + "it-all": "^3.0.9", + "it-first": "^3.0.9", + "it-glob": "^3.0.4", + "it-last": "^3.0.9", + "it-pipe": "^3.0.1", + "it-to-buffer": "^4.0.10", + "multiformats": "^13.4.1", + "progress-events": "^1.0.1", + "sparse-array": "^1.3.2", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/utils": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@helia/utils/-/utils-2.4.2.tgz", + "integrity": "sha512-a+5uTq5+O3aRmbdYW4a2Tm+eRqS6XMy26N+D2i++efubxt2loB195hAIb6Gue9BbzRt/IRKfndfSLVrcav2hZw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/interface": "^6.1.1", + "@ipld/dag-cbor": "^9.2.5", + "@ipld/dag-json": "^10.2.5", + "@ipld/dag-pb": "^4.1.5", + "@libp2p/interface": "^3.1.0", + "@libp2p/keychain": "^6.0.5", + "@libp2p/utils": "^7.0.5", + "@multiformats/dns": "^1.0.9", + "@multiformats/multiaddr": "^13.0.1", + "any-signal": "^4.1.1", + "blockstore-core": "^6.1.1", + "cborg": "^4.2.15", + "interface-blockstore": "^6.0.1", + "interface-datastore": "^9.0.2", + "interface-store": "^7.0.0", + "it-drain": "^3.0.10", + "it-filter": "^3.1.4", + "it-foreach": "^2.1.5", + "it-merge": "^3.0.12", + "it-to-buffer": "^4.0.10", + "libp2p": "^3.0.6", + "mortice": "^3.3.1", + "multiformats": "^13.4.1", + "p-defer": "^4.0.1", + "progress-events": "^1.0.1", + "race-signal": "^2.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/verified-fetch": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/@helia/verified-fetch/-/verified-fetch-7.1.0.tgz", + "integrity": "sha512-64dK21JGLslNrFLcW7kB25MfXhJFyoP06VFIjd9uWVMoqi/Ry3tGyCSMCoHNtv7E11E5Ua0xRTV17KjI5n6sEg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@helia/block-brokers": "^5.1.0", + "@helia/car": "^5.3.7", + "@helia/delegated-routing-v1-http-api-client": "^6.0.1", + "@helia/dnslink": "^1.1.4", + "@helia/interface": "^6.1.0", + "@helia/ipns": "^9.1.8", + "@helia/routers": "^5.0.2", + "@helia/unixfs": "^7.0.3", + "@ipld/dag-cbor": "^9.2.3", + "@ipld/dag-json": "^10.2.4", + "@ipld/dag-pb": "^4.1.5", + "@libp2p/interface": "^3.1.0", + "@libp2p/kad-dht": "^16.1.0", + "@libp2p/peer-id": "^6.0.4", + "@libp2p/utils": "^7.0.7", + "@libp2p/webrtc": "^6.0.8", + "@libp2p/websockets": "^10.1.0", + "@multiformats/dns": "^1.0.6", + "file-type": "^21.1.1", + "helia": "^6.0.18", + "interface-blockstore": "^6.0.1", + "ipfs-unixfs-exporter": "^15.0.2", + "ipns": "^10.1.3", + "it-first": "^3.0.9", + "it-last": "^3.0.9", + "it-map": "^3.1.3", + "it-pipe": "^3.0.1", + "it-tar": "^6.0.5", + "it-to-browser-readablestream": "^2.0.11", + "it-to-buffer": "^4.0.9", + "libp2p": "^3.1.0", + "multiformats": "^13.3.6", + "progress-events": "^1.0.1", + "quick-lru": "^7.0.1", + "regexp.escape": "^2.0.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@helia/verified-fetch/node_modules/ipns": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/ipns/-/ipns-10.1.3.tgz", + "integrity": "sha512-b2Zeh8+7qOV11NjnTsYLpG8K6T13uBMndpzk9N9E2Qjz/u80qsxvKpspSP32sErOLr/GWjdFVVc02E9PMojQNA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.0.0", + "@libp2p/interface": "^3.0.2", + "@libp2p/logger": "^6.0.4", + "cborg": "^4.2.3", + "interface-datastore": "^9.0.2", + "multiformats": "^13.2.2", + "protons-runtime": "^5.5.0", + "timestamp-nano": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@ipld/car": { + "version": "5.4.2", + "resolved": "https://registry.npmjs.org/@ipld/car/-/car-5.4.2.tgz", + "integrity": "sha512-gfyrJvePyXnh2Fbj8mPg4JYvEZ3izhk8C9WgAle7xIYbrJNSXmNQ6BxAls8Gof97vvGbCROdxbTWRmHJtTCbcg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-cbor": "^9.0.7", + "cborg": "^4.0.5", + "multiformats": "^13.0.0", + "varint": "^6.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-cbor": { + "version": "9.2.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-cbor/-/dag-cbor-9.2.5.tgz", + "integrity": "sha512-84wSr4jv30biui7endhobYhXBQzQE4c/wdoWlFrKcfiwH+ofaPg8fwsM8okX9cOzkkrsAsNdDyH3ou+kiLquwQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.0.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-json": { + "version": "10.2.6", + "resolved": "https://registry.npmjs.org/@ipld/dag-json/-/dag-json-10.2.6.tgz", + "integrity": "sha512-51yc5azhmkvc9mp2HV/vtJ8SlgFXADp55wAPuuAjQZ+yPurAYuTVddS3ke5vT4sjcd4DbE+DWjsMZGXjFB2cuA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "cborg": "^4.4.0", + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipld/dag-pb": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/@ipld/dag-pb/-/dag-pb-4.1.5.tgz", + "integrity": "sha512-w4PZ2yPqvNmlAir7/2hsCRMqny1EY5jj26iZcSgxREJexmbAc2FI21jp26MqiNdfgAxvkCnf2N/TJI18GaDNwA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.1.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@ipshipyard/libp2p-auto-tls": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ipshipyard/libp2p-auto-tls/-/libp2p-auto-tls-2.0.1.tgz", + "integrity": "sha512-zpDXVMY1ZgB6o30zFocXUzrD9+tz1bbEdgewFoBf4olDh5/CwjDi/k9v2RrJqujWKYWyRuHRg6Q+VRpvtGrpuw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.2", + "@libp2p/crypto": "^5.0.9", + "@libp2p/http": "^2.0.0", + "@libp2p/interface": "^3.0.2", + "@libp2p/interface-internal": "^3.0.4", + "@libp2p/keychain": "^6.0.4", + "@libp2p/utils": "^7.0.4", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "@peculiar/x509": "^1.12.3", + "acme-client": "^5.4.0", + "any-signal": "^4.1.1", + "delay": "^6.0.0", + "interface-datastore": "^9.0.2", + "multiformats": "^13.3.1", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@ipshipyard/libp2p-auto-tls/node_modules/delay": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-6.0.0.tgz", + "integrity": "sha512-2NJozoOHQ4NuZuVIr5CWd0iiLVIRSDepakaovIN+9eIDHEhdCAEvSy2cuf1DCrPPQLvHmbqTHODlhHg8UCy4zw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@isaacs/ttlcache": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/@isaacs/ttlcache/-/ttlcache-1.4.1.tgz", + "integrity": "sha512-RQgQ4uQ+pLbqXfOmieB91ejmLwvSgv9nLx6sT6sD83s7umBypgg+OIBOBbEUiJXrfpnp9j0mRhYYdzp9uqq3lA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/@istanbuljs/load-nyc-config": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz", + "integrity": "sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "camelcase": "^5.3.1", + "find-up": "^4.1.0", + "get-package-type": "^0.1.0", + "js-yaml": "^3.13.1", + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", + "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@jest/create-cache-key-function": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/create-cache-key-function/-/create-cache-key-function-29.7.0.tgz", + "integrity": "sha512-4QqS3LY5PBmTRHj9sAg1HLoPzqAI0uOX6wI/TRqHIcOxlFidy6YEmCQJk6FSZjNLGCeubDMfmkWL+qaLKhSGQA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/environment": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/environment/-/environment-29.7.0.tgz", + "integrity": "sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/fake-timers": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/fake-timers/-/fake-timers-29.7.0.tgz", + "integrity": "sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@sinonjs/fake-timers": "^10.0.2", + "@types/node": "*", + "jest-message-util": "^29.7.0", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/schemas": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", + "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@sinclair/typebox": "^0.27.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/transform": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/@jest/transform/-/transform-29.7.0.tgz", + "integrity": "sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.11.6", + "@jest/types": "^29.6.3", + "@jridgewell/trace-mapping": "^0.3.18", + "babel-plugin-istanbul": "^6.1.1", + "chalk": "^4.0.0", + "convert-source-map": "^2.0.0", + "fast-json-stable-stringify": "^2.1.0", + "graceful-fs": "^4.2.9", + "jest-haste-map": "^29.7.0", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "micromatch": "^4.0.4", + "pirates": "^4.0.4", + "slash": "^3.0.0", + "write-file-atomic": "^4.0.2" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jest/types": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/@jest/types/-/types-29.6.3.tgz", + "integrity": "sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "@types/istanbul-lib-coverage": "^2.0.0", + "@types/istanbul-reports": "^3.0.0", + "@types/node": "*", + "@types/yargs": "^17.0.8", + "chalk": "^4.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.11", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.11.tgz", + "integrity": "sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==", + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.25" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "license": "MIT", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@jsdoc/salty": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.11.tgz", + "integrity": "sha512-luR/TZqgru6gNjBQnRIbzNPOmDG62VIFQO7QyEjc1/zk3VP3yoGfuecwP2uOlAmKz+t6aq9bwsBV3FgiyHTT7Q==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "lodash": "^4.17.23" + }, + "engines": { + "node": ">=v12.0.0" + } + }, + "node_modules/@jspm/core": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@jspm/core/-/core-2.1.0.tgz", + "integrity": "sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/@leichtgewicht/ip-codec": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz", + "integrity": "sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==", + "license": "MIT" + }, + "node_modules/@libp2p/autonat": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/autonat/-/autonat-3.0.14.tgz", + "integrity": "sha512-D+6ogVowie+cA9G1QiYuFuTBk/sRz4bb2tQ3k/EpvfxnjMtD1m/19UhFeoRxkz0ZfL7FTs8HgYEMCaPVzK0ahw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-collections": "^7.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "any-signal": "^4.1.1", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/autonat/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/bootstrap": { + "version": "12.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/bootstrap/-/bootstrap-12.0.15.tgz", + "integrity": "sha512-r3EqhsSlHxlnqu6Lf1Gxx/rufUKePAYEk0cO1gBFtJ3AOUwodm1kPYnUJp1po0Tx23pyGGjv38r/2nCPOWmsZA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-id": "^6.0.5", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "main-event": "^1.0.1" + } + }, + "node_modules/@libp2p/circuit-relay-v2": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/@libp2p/circuit-relay-v2/-/circuit-relay-v2-4.1.7.tgz", + "integrity": "sha512-yQJ5+CSKGz1oqisa/hbp+VfwWpYFU9XPgC2qq6Q6rFK80CxeIf3AQ0QQdC/OAS/5Nl+EFLK5DQuaQ+QYT54XLQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-collections": "^7.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/peer-record": "^9.0.6", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "any-signal": "^4.1.1", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "nanoid": "^5.1.5", + "progress-events": "^1.0.1", + "protons-runtime": "^6.0.1", + "retimeable-signal": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/circuit-relay-v2/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/config": { + "version": "1.1.26", + "resolved": "https://registry.npmjs.org/@libp2p/config/-/config-1.1.26.tgz", + "integrity": "sha512-Gpx057C5WfppFMZP3Y3MmAf3lQ1PKoY+bTFUIZhjz+y7dq0n/gHek+v7gYff8ou+dZPyVBepp2uhDySlnjkRxw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/keychain": "^6.0.11", + "@libp2p/logger": "^6.2.3", + "interface-datastore": "^9.0.1" + } + }, + "node_modules/@libp2p/crypto": { + "version": "5.1.14", + "resolved": "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.14.tgz", + "integrity": "sha512-0L2SEhDfvKWFhlc8GXgm268MoakrS4qbewD5LoZpoiUesXpB9e1vjed9dWEN1VsSjOmrOPyhBoSxZ2mnLTrOVA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@noble/curves": "^2.0.1", + "@noble/hashes": "^2.0.1", + "multiformats": "^13.4.0", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/crypto/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/dcutr": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/dcutr/-/dcutr-3.0.14.tgz", + "integrity": "sha512-a3LXH66PCAopRVNucUcHuSlAHmeeRVRyQL0vbEQXnxoNLMqtgmsuHY1ygITKJzSqMpQlk8m9EkU+aC25yPhFMw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "delay": "^7.0.0", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/dcutr/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/http": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/http/-/http-2.0.1.tgz", + "integrity": "sha512-NjTvXdpwlGNvPsjiumRWJ3jm+9euQkKLXzdHnE+cPCEjPWo6cyGGB541161Jgi8CZ5tNTudddlriwkZRb8Z6KQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/http-fetch": "^4.0.0", + "@libp2p/http-peer-id-auth": "^2.0.0", + "@libp2p/http-utils": "^2.0.0", + "@libp2p/http-websocket": "^2.0.0", + "@libp2p/interface": "^3.0.2", + "@libp2p/interface-internal": "^3.0.4", + "@multiformats/multiaddr": "^13.0.1", + "cookie": "^1.0.2", + "undici": "^7.16.0" + } + }, + "node_modules/@libp2p/http-fetch": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/http-fetch/-/http-fetch-4.0.1.tgz", + "integrity": "sha512-7vtJVOfyGol6CWrNm9HhjlYOmCsJVLKWYdhpmjdpS6pGWtpkTMrHJLznSJ7PYkMq7OnhzhXNFq0FhWygP6mmPQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/http-parser-js": "^0.5.9", + "@libp2p/http-utils": "^2.0.0", + "@libp2p/interface": "^3.0.2", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/http-peer-id-auth": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@libp2p/http-peer-id-auth/-/http-peer-id-auth-2.0.0.tgz", + "integrity": "sha512-GKs0DXK/JVKKH57IGQDiWsC6hYsLY+cwKNRMuX1FY6FZo09zc1QPwvgr0FNtIB2c5WJFf/vja4M4QekLsWU+xw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.12", + "@libp2p/interface": "^3.0.2", + "@libp2p/peer-id": "^6.0.3", + "uint8-varint": "^2.0.4", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/http-utils": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/http-utils/-/http-utils-2.0.1.tgz", + "integrity": "sha512-dJFRV2gAzPkF5NOnGMdWXXO3PFK0cMSn5uDbW55n5Usnrx6hHQmDCRfKh3ClQUzjG66pFjXM3zFXLKORyasl3A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/http-parser-js": "^0.5.9", + "@libp2p/interface": "^3.0.2", + "@libp2p/peer-id": "^6.0.3", + "@libp2p/utils": "^7.0.4", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-to-uri": "^12.0.0", + "@multiformats/uri-to-multiaddr": "^10.0.0", + "it-to-browser-readablestream": "^2.0.12", + "multiformats": "^13.4.1", + "race-event": "^1.6.1", + "readable-stream": "^4.7.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/http-websocket": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@libp2p/http-websocket/-/http-websocket-2.0.1.tgz", + "integrity": "sha512-hMMWVKAK3P3oAmatUB8SQ4mUMhkkLdERAjgZUoKdohIPumPGQ6ADFSJMYsSWv9ZwyBiXMHBbwluYEBZUw85GCw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/http-parser-js": "^0.5.9", + "@libp2p/http-utils": "^2.0.0", + "@libp2p/interface": "^3.0.2", + "@libp2p/interface-internal": "^3.0.4", + "@libp2p/utils": "^7.0.4", + "@multiformats/multiaddr": "^13.0.1", + "multiformats": "^13.4.1", + "race-event": "^1.6.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/identify": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/identify/-/identify-4.0.14.tgz", + "integrity": "sha512-SFCqYlEZ21rT6ubCIHLKNJDixhwzNORlyO2GIXwf1EXS7hC7YJF4qc32tTz7pXPapjjXZVza+vPRrYgPzs/DiA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/peer-record": "^9.0.6", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "it-drain": "^3.0.10", + "it-parallel": "^3.0.13", + "main-event": "^1.0.1", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/identify/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/interface": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-3.1.1.tgz", + "integrity": "sha512-pQuReZeZUSqk27UXwXXdAVlxrgs08GrcPsd92Qv27IFBPICG8da3FmHg1bclUpMW/6GE6o4qDCVqR4cBMRVKyA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^13.0.1", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/interface-internal": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/interface-internal/-/interface-internal-3.0.14.tgz", + "integrity": "sha512-X7TxzWapCKNaBCy9quPJIiXouPaAbPNT2XgWghw1MouznKPMWzCyHY+kW0l+e2JkvBqeSDHLPdBE7WnHwdbNtA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/peer-collections": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "progress-events": "^1.0.1" + } + }, + "node_modules/@libp2p/kad-dht": { + "version": "16.1.7", + "resolved": "https://registry.npmjs.org/@libp2p/kad-dht/-/kad-dht-16.1.7.tgz", + "integrity": "sha512-f5ENaW8RQY1ZSi5H1hQeFDlA1p1ZijNue/izLhNKUYPa571sJsMTU2ZV8ravghoFFk0pZDDUJi5nMVFfdzA23A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-collections": "^7.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/ping": "^3.0.14", + "@libp2p/record": "^4.0.10", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "any-signal": "^4.1.1", + "interface-datastore": "^9.0.1", + "it-all": "^3.0.9", + "it-drain": "^3.0.10", + "it-length": "^3.0.9", + "it-map": "^3.1.4", + "it-merge": "^3.0.12", + "it-parallel": "^3.0.13", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-take": "^3.0.9", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "p-defer": "^4.0.1", + "p-event": "^7.0.0", + "progress-events": "^1.0.1", + "protons-runtime": "^6.0.1", + "race-signal": "^2.0.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/kad-dht/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/keychain": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/@libp2p/keychain/-/keychain-6.0.11.tgz", + "integrity": "sha512-675QQ4TGMYuPeTd7Nl/+zid2NeGeEr9nCE0jYJxzmLKoCK38JqVmGVKUfhqqVQGyaFwZ5MyIo2uOQOWF3QteTg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@noble/hashes": "^2.0.1", + "asn1js": "^3.0.6", + "interface-datastore": "^9.0.1", + "multiformats": "^13.4.0", + "sanitize-filename": "^1.6.3", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/logger": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-6.2.3.tgz", + "integrity": "sha512-ZlGE8a0pHDkTFoNleKHAu4Fqta1QHiqgR3CR9fw0Ek/FnjMXo++zxyBCYdwqYz/Jeqh1s1/svSonRTIfknF4zQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@multiformats/multiaddr": "^13.0.1", + "interface-datastore": "^9.0.1", + "multiformats": "^13.4.0", + "weald": "^1.1.0" + } + }, + "node_modules/@libp2p/mdns": { + "version": "12.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/mdns/-/mdns-12.0.15.tgz", + "integrity": "sha512-NNUOBSq65B4Q+ToEm49WzZhrc8Kdk3q60fFKuqD0vQ5dhkV75snl99KtmiyhEB/H6x/tGyPB74gV90Hs683MMg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@types/multicast-dns": "^7.2.4", + "dns-packet": "^5.6.1", + "main-event": "^1.0.1", + "multicast-dns": "^7.2.5" + } + }, + "node_modules/@libp2p/mplex": { + "version": "12.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/mplex/-/mplex-12.0.15.tgz", + "integrity": "sha512-GwnYqiLOC+E37UWe4dlXoqXDpdba+K6gmEloib/TdYXoLGhBBt6AnNSyqY3k1Wq0p4GFwWiTz8rvWEOPQDjB+Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/utils": "^7.0.14", + "it-pushable": "^3.2.3", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/multistream-select": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/multistream-select/-/multistream-select-7.0.14.tgz", + "integrity": "sha512-NsKuXEYIOzw9371l6qM5F40cGVVa/UAAEfVXcpVyZTBLxE7qF6OadypssfK9z5oBqsgKjqzyck/m+9DyWknbkQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/utils": "^7.0.14", + "it-length-prefixed": "^10.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-collections": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/peer-collections/-/peer-collections-7.0.14.tgz", + "integrity": "sha512-PoH9m6ihhuEe5ot23o7kZ7aa10QlemTaHyn6w34oXUjhCFWsYNbl3zIlnTLdM2r1ROQABEeMH7AmxvfgipNR0A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/utils": "^7.0.14", + "multiformats": "^13.4.0" + } + }, + "node_modules/@libp2p/peer-id": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/@libp2p/peer-id/-/peer-id-6.0.5.tgz", + "integrity": "sha512-0rAcAnoOrhjUPs03fRMw29hctzx9s1mdsmCdfgl1U4FnEohMRfBmLkGD8Al3/J52Z23jwzdDfz1VpyxjOANaHA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "multiformats": "^13.4.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-record": { + "version": "9.0.6", + "resolved": "https://registry.npmjs.org/@libp2p/peer-record/-/peer-record-9.0.6.tgz", + "integrity": "sha512-AJNscSkH6lbia7OO+9F+eGryOnhAZwbJghj4iG2jF2IuGJ5G+hJv28AJyep5J6+BzaTJdnDhhXM5RPHFqHMmWQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/peer-id": "^6.0.5", + "@multiformats/multiaddr": "^13.0.1", + "multiformats": "^13.4.0", + "protons-runtime": "^6.0.1", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-record/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-store": { + "version": "12.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/peer-store/-/peer-store-12.0.14.tgz", + "integrity": "sha512-5oGhVkwr0XCopDxdcXBShzKI8qVHk0fIfmnIUcOjfAA93XEtzZEKKlJfFKJoOPBoU5xKqoh829OGe/20S3gxJA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/peer-collections": "^7.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/peer-record": "^9.0.6", + "@multiformats/multiaddr": "^13.0.1", + "interface-datastore": "^9.0.1", + "it-all": "^3.0.9", + "main-event": "^1.0.1", + "mortice": "^3.3.1", + "multiformats": "^13.4.0", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/peer-store/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/ping": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/ping/-/ping-3.0.14.tgz", + "integrity": "sha512-BQB/n6JTnJCTjXBqim9zCM+9nDQzHcB9/QnxUeGXKN71kc3lr2VIImsdBcgJF2w/CjG81WkMO4iB5+NtQjAICQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@multiformats/multiaddr": "^13.0.1", + "p-event": "^7.0.0", + "race-signal": "^2.0.0", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/record": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/@libp2p/record/-/record-4.0.10.tgz", + "integrity": "sha512-XuMvcVU5EYGgB9Hgu+N9PDQLeoscUFD3qzbuvKnJhlNg052JI4L045Zon+0lzwLtW38w7rmL9UUBAVFta4trLA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/record/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/tcp": { + "version": "11.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/tcp/-/tcp-11.0.14.tgz", + "integrity": "sha512-0qsr85C7pLLykrMXTRuAa29JRfDj93tPPZ4OeqHV9GqWb5KNEO1XsLENy0sKDj7aJGe7b5cVizjca55u+KE6oQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "@types/sinon": "^20.0.0", + "main-event": "^1.0.1", + "p-event": "^7.0.0", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/@libp2p/tls": { + "version": "3.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/tls/-/tls-3.0.14.tgz", + "integrity": "sha512-WhWc++fsALc/iVU8tyb7LH81keqONU0VNxJ1EjFNm+OP7vhrrPnlwD5ZUB4pdZmhN1UtGrhtifs2nxVus/13Ag==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/utils": "^7.0.14", + "@peculiar/asn1-schema": "^2.4.0", + "@peculiar/asn1-x509": "^2.4.0", + "@peculiar/webcrypto": "^1.5.0", + "@peculiar/x509": "^1.13.0", + "asn1js": "^3.0.6", + "p-event": "^7.0.0", + "protons-runtime": "^6.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/tls/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/upnp-nat": { + "version": "4.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/upnp-nat/-/upnp-nat-4.0.14.tgz", + "integrity": "sha512-YsT2jV40YYY1AjpawYtwBRgEysXpv7AQ8GG7JyvxB45KfgO5s59sX0tK55jgcvO0Cj2el+7p/Trg/c+5/PXP+Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@achingbrain/nat-port-mapper": "^4.0.4", + "@chainsafe/is-ip": "^2.1.0", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "main-event": "^1.0.1", + "p-defer": "^4.0.1", + "race-signal": "^2.0.0" + } + }, + "node_modules/@libp2p/utils": { + "version": "7.0.14", + "resolved": "https://registry.npmjs.org/@libp2p/utils/-/utils-7.0.14.tgz", + "integrity": "sha512-G8tj32VT1sRAiXV3pGLMlepRSmkydCKBRXzTp/OFqDjRmoXRlIenWMN+hxKOG5wXOyXZkRtkBbXJGq2kIB27/A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.1.0", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/logger": "^6.2.3", + "@multiformats/multiaddr": "^13.0.1", + "@sindresorhus/fnv1a": "^3.1.0", + "any-signal": "^4.1.1", + "cborg": "^4.2.14", + "delay": "^7.0.0", + "is-loopback-addr": "^2.0.2", + "it-length-prefixed": "^10.0.1", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "main-event": "^1.0.1", + "netmask": "^2.0.2", + "p-defer": "^4.0.1", + "p-event": "^7.0.0", + "race-signal": "^2.0.0", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/webrtc": { + "version": "6.0.15", + "resolved": "https://registry.npmjs.org/@libp2p/webrtc/-/webrtc-6.0.15.tgz", + "integrity": "sha512-sZHkG/sNYlWkS3t9mYHnXN3CJGipqua/Z+LhbrJYsqr8LfnOomJp8sZToH+2jy2SzlMeE3aAJgXAS3WK1HtfmQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.1.0", + "@chainsafe/libp2p-noise": "^17.0.0", + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/keychain": "^6.0.11", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "@peculiar/webcrypto": "^1.5.0", + "@peculiar/x509": "^1.13.0", + "detect-browser": "^5.3.0", + "get-port": "^7.1.0", + "interface-datastore": "^9.0.1", + "it-length-prefixed": "^10.0.1", + "it-protobuf-stream": "^2.0.3", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "node-datachannel": "^0.29.0", + "p-defer": "^4.0.1", + "p-event": "^7.0.0", + "p-timeout": "^7.0.0", + "p-wait-for": "^6.0.0", + "progress-events": "^1.0.1", + "protons-runtime": "^6.0.1", + "race-signal": "^2.0.0", + "react-native-webrtc": "^124.0.6", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/webrtc/node_modules/protons-runtime": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-6.0.1.tgz", + "integrity": "sha512-ONL+jDj143WA1m+WKLuuqBIaDKxm32dx6HfJdyujrRcni/6KkhXzVnyg22nH/Wwqmbwnd1BKUVkD1hMEWZFeww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/@libp2p/websockets": { + "version": "10.1.7", + "resolved": "https://registry.npmjs.org/@libp2p/websockets/-/websockets-10.1.7.tgz", + "integrity": "sha512-pxPnBRNKxjn8Zgg788vWxpedsAPmyF4JEH1HXTXUV6AgkQ3jX8cEzkZ2OI8cwK5zPPK0X88dN/brf4I5rU1T5w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^3.1.1", + "@libp2p/utils": "^7.0.14", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "@multiformats/multiaddr-to-uri": "^12.0.0", + "main-event": "^1.0.1", + "p-event": "^7.0.0", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0", + "ws": "^8.18.3" + } + }, + "node_modules/@multiformats/dns": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.13.tgz", + "integrity": "sha512-yr4bxtA3MbvJ+2461kYIYMsiiZj/FIqKI64hE4SdvWJUdWF9EtZLar38juf20Sf5tguXKFUruluswAO6JsjS2w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@dnsquery/dns-packet": "^6.1.1", + "@libp2p/interface": "^3.1.0", + "hashlru": "^2.3.0", + "p-queue": "^9.0.0", + "progress-events": "^1.0.0", + "uint8arrays": "^5.0.2" + } + }, + "node_modules/@multiformats/multiaddr": { + "version": "13.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-13.0.1.tgz", + "integrity": "sha512-XToN915cnfr6Lr9EdGWakGJbPT0ghpg/850HvdC+zFX8XvpLZElwa8synCiwa8TuvKNnny6m8j8NVBNCxhIO3g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/@multiformats/multiaddr-matcher": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-matcher/-/multiaddr-matcher-3.0.1.tgz", + "integrity": "sha512-jvjwzCPysVTQ53F4KqwmcqZw73BqHMk0UUZrMP9P4OtJ/YHrfs122ikTqhVA2upe0P/Qz9l8HVlhEifVYB2q9A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^13.0.0" + } + }, + "node_modules/@multiformats/multiaddr-to-uri": { + "version": "12.0.0", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr-to-uri/-/multiaddr-to-uri-12.0.0.tgz", + "integrity": "sha512-3uIEBCiy8tfzxYYBl81x1tISiNBQ7mHU4pGjippbJRoQYHzy/ZdZM/7JvTldr8pc/dzpkaNJxnsuxxlhsPOJsA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^13.0.0" + } + }, + "node_modules/@multiformats/murmur3": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/@multiformats/murmur3/-/murmur3-2.2.2.tgz", + "integrity": "sha512-B37HsL4uqZpKzOPRNmpr9hR1lbywZfJR053sYgkQGnnbfNzM1Nw4SlL9I8hMAZRk1TOqr8q+PeaFeuNmKgi2YA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/@multiformats/uri-to-multiaddr": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/@multiformats/uri-to-multiaddr/-/uri-to-multiaddr-10.0.0.tgz", + "integrity": "sha512-QsmwLmY6iB1wDU1e1wyctqF0eP/2KD1QPLQ+APISuqETbCTSpaq159S/K/ssmWlBpSEkhH0SUfBUgGi014Ttfw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/multiaddr": "^13.0.0", + "is-ip": "^5.0.0" + } + }, + "node_modules/@noble/ciphers": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-2.1.1.tgz", + "integrity": "sha512-bysYuiVfhxNJuldNXlFEitTVdNnYUc+XNJZd7Qm2a5j1vZHgY+fazadNFWFaMK/2vye0JVlxV3gHmC0WDfAOQw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-2.0.1.tgz", + "integrity": "sha512-vs1Az2OOTBiP4q0pwjW5aF0xp9n4MxVrmkFBxc6EKZc6ddYx5gaZiAsZoq0uRRXWbi3AT/sBqn05eRPtn1JCPw==", + "license": "MIT", + "dependencies": { + "@noble/hashes": "2.0.1" + }, + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-2.0.1.tgz", + "integrity": "sha512-XlOlEbQcE9fmuXxrVTXCTlG2nlRXa9Rj3rr5Ue/+tX+nmkgbX720YHh0VR3hBF9xDvwnb8D2shVGOwNx+ulArw==", + "license": "MIT", + "engines": { + "node": ">= 20.19.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@peculiar/asn1-cms": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-cms/-/asn1-cms-2.6.1.tgz", + "integrity": "sha512-vdG4fBF6Lkirkcl53q6eOdn3XYKt+kJTG59edgRZORlg/3atWWEReRCx5rYE1ZzTTX6vLK5zDMjHh7vbrcXGtw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-csr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-csr/-/asn1-csr-2.6.1.tgz", + "integrity": "sha512-WRWnKfIocHyzFYQTka8O/tXCiBquAPSrRjXbOkHbO4qdmS6loffCEGs+rby6WxxGdJCuunnhS2duHURhjyio6w==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-ecc": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-ecc/-/asn1-ecc-2.6.1.tgz", + "integrity": "sha512-+Vqw8WFxrtDIN5ehUdvlN2m73exS2JVG0UAyfVB31gIfor3zWEAQPD+K9ydCxaj3MLen9k0JhKpu9LqviuCE1g==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pfx": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pfx/-/asn1-pfx-2.6.1.tgz", + "integrity": "sha512-nB5jVQy3MAAWvq0KY0R2JUZG8bO/bTLpnwyOzXyEh/e54ynGTatAR+csOnXkkVD9AFZ2uL8Z7EV918+qB1qDvw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-rsa": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs8": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs8/-/asn1-pkcs8-2.6.1.tgz", + "integrity": "sha512-JB5iQ9Izn5yGMw3ZG4Nw3Xn/hb/G38GYF3lf7WmJb8JZUydhVGEjK/ZlFSWhnlB7K/4oqEs8HnfFIKklhR58Tw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-pkcs9": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-pkcs9/-/asn1-pkcs9-2.6.1.tgz", + "integrity": "sha512-5EV8nZoMSxeWmcxWmmcolg22ojZRgJg+Y9MX2fnE2bGRo5KQLqV5IL9kdSQDZxlHz95tHvIq9F//bvL1OeNILw==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.1", + "@peculiar/asn1-pfx": "^2.6.1", + "@peculiar/asn1-pkcs8": "^2.6.1", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "@peculiar/asn1-x509-attr": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-rsa": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-rsa/-/asn1-rsa-2.6.1.tgz", + "integrity": "sha512-1nVMEh46SElUt5CB3RUTV4EG/z7iYc7EoaDY5ECwganibQPkZ/Y2eMsTKB/LeyrUJ+W/tKoD9WUqIy8vB+CEdA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-schema": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-schema/-/asn1-schema-2.6.0.tgz", + "integrity": "sha512-xNLYLBFTBKkCzEZIw842BxytQQATQv+lDTCEMZ8C196iJcJJMBUZxrhSTxLaohMyKK8QlzRNTRkUmanucnDSqg==", + "license": "MIT", + "dependencies": { + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509/-/asn1-x509-2.6.1.tgz", + "integrity": "sha512-O9jT5F1A2+t3r7C4VT7LYGXqkGLK7Kj1xFpz7U0isPrubwU5PbDoyYtx6MiGst29yq7pXN5vZbQFKRCP+lLZlA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "asn1js": "^3.0.6", + "pvtsutils": "^1.3.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/asn1-x509-attr": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@peculiar/asn1-x509-attr/-/asn1-x509-attr-2.6.1.tgz", + "integrity": "sha512-tlW6cxoHwgcQghnJwv3YS+9OO1737zgPogZ+CgWRUK4roEwIPzRH4JEiG770xe5HX2ATfCpmX60gurfWIF9dcQ==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.1", + "asn1js": "^3.0.6", + "tslib": "^2.8.1" + } + }, + "node_modules/@peculiar/json-schema": { + "version": "1.1.12", + "resolved": "https://registry.npmjs.org/@peculiar/json-schema/-/json-schema-1.1.12.tgz", + "integrity": "sha512-coUfuoMeIB7B8/NMekxaDzLhaYmp0HZNPEjYRm9goRou8UZIC3z21s0sL9AWoCw4EG876QyO3kYrc61WNF9B/w==", + "license": "MIT", + "dependencies": { + "tslib": "^2.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@peculiar/webcrypto": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@peculiar/webcrypto/-/webcrypto-1.5.0.tgz", + "integrity": "sha512-BRs5XUAwiyCDQMsVA9IDvDa7UBR9gAvPHgugOeGng3YN6vJ9JYonyDc0lNczErgtCWtucjR5N7VtaonboD/ezg==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.8", + "@peculiar/json-schema": "^1.1.12", + "pvtsutils": "^1.3.5", + "tslib": "^2.6.2", + "webcrypto-core": "^1.8.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/@peculiar/x509": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/@peculiar/x509/-/x509-1.14.3.tgz", + "integrity": "sha512-C2Xj8FZ0uHWeCXXqX5B4/gVFQmtSkiuOolzAgutjTfseNOHT3pUjljDZsTSxXFGgio54bCzVFqmEOUrIVk8RDA==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-cms": "^2.6.0", + "@peculiar/asn1-csr": "^2.6.0", + "@peculiar/asn1-ecc": "^2.6.0", + "@peculiar/asn1-pkcs9": "^2.6.0", + "@peculiar/asn1-rsa": "^2.6.0", + "@peculiar/asn1-schema": "^2.6.0", + "@peculiar/asn1-x509": "^2.6.0", + "pvtsutils": "^1.3.6", + "reflect-metadata": "^0.2.2", + "tslib": "^2.8.1", + "tsyringe": "^4.10.0" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@react-native/assets-registry": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/assets-registry/-/assets-registry-0.84.1.tgz", + "integrity": "sha512-lAJ6PDZv95FdT9s9uhc9ivhikW1Zwh4j9XdXM7J2l4oUA3t37qfoBmTSDLuPyE3Bi+Xtwa11hJm0BUTT2sc/gg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/codegen": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/codegen/-/codegen-0.84.1.tgz", + "integrity": "sha512-n1RIU0QAavgCg1uC5+s53arL7/mpM+16IBhJ3nCFSd/iK5tUmCwxQDcIDC703fuXfpub/ZygeSjVN8bcOWn0gA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/parser": "^7.25.3", + "hermes-parser": "0.32.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "tinyglobby": "^0.2.15", + "yargs": "^17.6.2" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@babel/core": "*" + } + }, + "node_modules/@react-native/community-cli-plugin": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/community-cli-plugin/-/community-cli-plugin-0.84.1.tgz", + "integrity": "sha512-f6a+mJEJ6Joxlt/050TqYUr7uRRbeKnz8lnpL7JajhpsgZLEbkJRjH8HY5QiLcRdUwWFtizml4V+vcO3P4RxoQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@react-native/dev-middleware": "0.84.1", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "metro": "^0.83.3", + "metro-config": "^0.83.3", + "metro-core": "^0.83.3", + "semver": "^7.1.3" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@react-native-community/cli": "*", + "@react-native/metro-config": "*" + }, + "peerDependenciesMeta": { + "@react-native-community/cli": { + "optional": true + }, + "@react-native/metro-config": { + "optional": true + } + } + }, + "node_modules/@react-native/debugger-frontend": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-frontend/-/debugger-frontend-0.84.1.tgz", + "integrity": "sha512-rUU/Pyh3R5zT0WkVgB+yA6VwOp7HM5Hz4NYE97ajFS07OUIcv8JzBL3MXVdSSjLfldfqOuPEuKUaZcAOwPgabw==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/debugger-shell": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/debugger-shell/-/debugger-shell-0.84.1.tgz", + "integrity": "sha512-LIGhh4q4ette3yW5OzmukNMYwmINYrRGDZqKyTYc/VZyNpblZPw72coXVHXdfpPT6+YlxHqXzn3UjFZpNODGCQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "debug": "^4.4.0", + "fb-dotslash": "0.5.8" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/dev-middleware": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/dev-middleware/-/dev-middleware-0.84.1.tgz", + "integrity": "sha512-Z83ra+Gk6ElAhH3XRrv3vwbwCPTb04sPPlNpotxcFZb5LtRQZwT91ZQEXw3GOJCVIFp9EQ/gj8AQbVvtHKOUlQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@isaacs/ttlcache": "^1.4.1", + "@react-native/debugger-frontend": "0.84.1", + "@react-native/debugger-shell": "0.84.1", + "chrome-launcher": "^0.15.2", + "chromium-edge-launcher": "^0.2.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "invariant": "^2.2.4", + "nullthrows": "^1.1.1", + "open": "^7.0.3", + "serve-static": "^1.16.2", + "ws": "^7.5.10" + }, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/dev-middleware/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/@react-native/gradle-plugin": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/gradle-plugin/-/gradle-plugin-0.84.1.tgz", + "integrity": "sha512-7uVlPBE3uluRNRX4MW7PUJIO1LDBTpAqStKHU7LHH+GRrdZbHsWtOEAX8PiY4GFfBEvG8hEjiuTOqAxMjV+hDg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/js-polyfills": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/js-polyfills/-/js-polyfills-0.84.1.tgz", + "integrity": "sha512-UsTe2AbUugsfyI7XIHMQq4E7xeC8a6GrYwuK+NohMMMJMxmyM3JkzIk+GB9e2il6ScEQNMJNaj+q+i5za8itxQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 20.19.4" + } + }, + "node_modules/@react-native/normalize-colors": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/normalize-colors/-/normalize-colors-0.84.1.tgz", + "integrity": "sha512-/UPaQ4jl95soXnLDEJ6Cs6lnRXhwbxtT4KbZz+AFDees7prMV2NOLcHfCnzmTabf5Y3oxENMVBL666n4GMLcTA==", + "license": "MIT", + "peer": true + }, + "node_modules/@react-native/virtualized-lists": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/@react-native/virtualized-lists/-/virtualized-lists-0.84.1.tgz", + "integrity": "sha512-sJoDunzhci8ZsqxlUiKoLut4xQeQcmbIgvDHGQKeBz6uEq9HgU+hCWOijMRr6sLP0slQVfBAza34Rq7IbXZZOA==", + "license": "MIT", + "peer": true, + "dependencies": { + "invariant": "^2.2.4", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.2.0", + "react": "*", + "react-native": "*" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.60.1.tgz", + "integrity": "sha512-d6FinEBLdIiK+1uACUttJKfgZREXrF0Qc2SmLII7W2AD8FfiZ9Wjd+rD/iRuf5s5dWrr1GgwXCvPqOuDquOowA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.60.1.tgz", + "integrity": "sha512-YjG/EwIDvvYI1YvYbHvDz/BYHtkY4ygUIXHnTdLhG+hKIQFBiosfWiACWortsKPKU/+dUwQQCKQM3qrDe8c9BA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.60.1.tgz", + "integrity": "sha512-mjCpF7GmkRtSJwon+Rq1N8+pI+8l7w5g9Z3vWj4T7abguC4Czwi3Yu/pFaLvA3TTeMVjnu3ctigusqWUfjZzvw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.60.1.tgz", + "integrity": "sha512-haZ7hJ1JT4e9hqkoT9R/19XW2QKqjfJVv+i5AGg57S+nLk9lQnJ1F/eZloRO3o9Scy9CM3wQ9l+dkXtcBgN5Ew==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.60.1.tgz", + "integrity": "sha512-czw90wpQq3ZsAVBlinZjAYTKduOjTywlG7fEeWKUA7oCmpA8xdTkxZZlwNJKWqILlq0wehoZcJYfBvOyhPTQ6w==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.60.1.tgz", + "integrity": "sha512-KVB2rqsxTHuBtfOeySEyzEOB7ltlB/ux38iu2rBQzkjbwRVlkhAGIEDiiYnO2kFOkJp+Z7pUXKyrRRFuFUKt+g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.60.1.tgz", + "integrity": "sha512-L+34Qqil+v5uC0zEubW7uByo78WOCIrBvci69E7sFASRl0X7b/MB6Cqd1lky/CtcSVTydWa2WZwFuWexjS5o6g==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.60.1.tgz", + "integrity": "sha512-n83O8rt4v34hgFzlkb1ycniJh7IR5RCIqt6mz1VRJD6pmhRi0CXdmfnLu9dIUS6buzh60IvACM842Ffb3xd6Gg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.60.1.tgz", + "integrity": "sha512-Nql7sTeAzhTAja3QXeAI48+/+GjBJ+QmAH13snn0AJSNL50JsDqotyudHyMbO2RbJkskbMbFJfIJKWA6R1LCJQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.60.1.tgz", + "integrity": "sha512-+pUymDhd0ys9GcKZPPWlFiZ67sTWV5UU6zOJat02M1+PiuSGDziyRuI/pPue3hoUwm2uGfxdL+trT6Z9rxnlMA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.60.1.tgz", + "integrity": "sha512-VSvgvQeIcsEvY4bKDHEDWcpW4Yw7BtlKG1GUT4FzBUlEKQK0rWHYBqQt6Fm2taXS+1bXvJT6kICu5ZwqKCnvlQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loong64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-musl/-/rollup-linux-loong64-musl-4.60.1.tgz", + "integrity": "sha512-4LqhUomJqwe641gsPp6xLfhqWMbQV04KtPp7/dIp0nzPxAkNY1AbwL5W0MQpcalLYk07vaW9Kp1PBhdpZYYcEw==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.60.1.tgz", + "integrity": "sha512-tLQQ9aPvkBxOc/EUT6j3pyeMD6Hb8QF2BTBnCQWP/uu1lhc9AIrIjKnLYMEroIz/JvtGYgI9dF3AxHZNaEH0rw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-ppc64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-musl/-/rollup-linux-ppc64-musl-4.60.1.tgz", + "integrity": "sha512-RMxFhJwc9fSXP6PqmAz4cbv3kAyvD1etJFjTx4ONqFP9DkTkXsAMU4v3Vyc5BgzC+anz7nS/9tp4obsKfqkDHg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.60.1.tgz", + "integrity": "sha512-QKgFl+Yc1eEk6MmOBfRHYF6lTxiiiV3/z/BRrbSiW2I7AFTXoBFvdMEyglohPj//2mZS4hDOqeB0H1ACh3sBbg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.60.1.tgz", + "integrity": "sha512-RAjXjP/8c6ZtzatZcA1RaQr6O1TRhzC+adn8YZDnChliZHviqIjmvFwHcxi4JKPSDAt6Uhf/7vqcBzQJy0PDJg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.60.1.tgz", + "integrity": "sha512-wcuocpaOlaL1COBYiA89O6yfjlp3RwKDeTIA0hM7OpmhR1Bjo9j31G1uQVpDlTvwxGn2nQs65fBFL5UFd76FcQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.60.1.tgz", + "integrity": "sha512-77PpsFQUCOiZR9+LQEFg9GClyfkNXj1MP6wRnzYs0EeWbPcHs02AXu4xuUbM1zhwn3wqaizle3AEYg5aeoohhg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.60.1.tgz", + "integrity": "sha512-5cIATbk5vynAjqqmyBjlciMJl1+R/CwX9oLk/EyiFXDWd95KpHdrOJT//rnUl4cUcskrd0jCCw3wpZnhIHdD9w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-openbsd-x64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openbsd-x64/-/rollup-openbsd-x64-4.60.1.tgz", + "integrity": "sha512-cl0w09WsCi17mcmWqqglez9Gk8isgeWvoUZ3WiJFYSR3zjBQc2J5/ihSjpl+VLjPqjQ/1hJRcqBfLjssREQILw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/@rollup/rollup-openharmony-arm64": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.60.1.tgz", + "integrity": "sha512-4Cv23ZrONRbNtbZa37mLSueXUCtN7MXccChtKpUnQNgF010rjrjfHx3QxkS2PI7LqGT5xXyYs1a7LbzAwT0iCA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openharmony" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.60.1.tgz", + "integrity": "sha512-i1okWYkA4FJICtr7KpYzFpRTHgy5jdDbZiWfvny21iIKky5YExiDXP+zbXzm3dUcFpkEeYNHgQ5fuG236JPq0g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.60.1.tgz", + "integrity": "sha512-u09m3CuwLzShA0EYKMNiFgcjjzwqtUMLmuCJLeZWjjOYA3IT2Di09KaxGBTP9xVztWyIWjVdsB2E9goMjZvTQg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-gnu": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.60.1.tgz", + "integrity": "sha512-k+600V9Zl1CM7eZxJgMyTUzmrmhB/0XZnF4pRypKAlAgxmedUA+1v9R+XOFv56W4SlHEzfeMtzujLJD22Uz5zg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.60.1.tgz", + "integrity": "sha512-lWMnixq/QzxyhTV6NjQJ4SFo1J6PvOX8vUx5Wb4bBPsEb+8xZ89Bz6kOXpfXj9ak9AHTQVQzlgzBEc1SyM27xQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@sinclair/typebox": { + "version": "0.27.10", + "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.10.tgz", + "integrity": "sha512-MTBk/3jGLNB2tVxv6uLlFh1iu64iYOQ2PbdOSK3NW8JZsmlaOh2q6sdtKowBhfw8QFLmYNzTW4/oK4uATIi6ZA==", + "license": "MIT", + "peer": true + }, + "node_modules/@sindresorhus/fnv1a": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/fnv1a/-/fnv1a-3.1.0.tgz", + "integrity": "sha512-KV321z5m/0nuAg83W1dPLy85HpHDk7Sdi4fJbwvacWsEhAh+rZUW4ZfGcXmUIvjZg4ss2bcwNlRhJ7GBEUG08w==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", + "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz", + "integrity": "sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader": { + "version": "5.2.2", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.2.2.tgz", + "integrity": "sha512-St+kVicSyayWQca+I1rGitaOEH6uKgE8IUWoYnnEX26SWdWQcL6LvMSD19Lg+vYHKdT9B2Zuu7rd3i6Wnyb/iw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/chunked-blob-reader-native": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.2.3.tgz", + "integrity": "sha512-jA5k5Udn7Y5717L86h4EIv06wIr3xn8GM1qHRi/Nf31annXcXHJjBKvgztnbn2TxH3xWrPBfgwHsOwZf0UmQWw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-base64": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/config-resolver": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.13.tgz", + "integrity": "sha512-iIzMC5NmOUP6WL6o8iPBjFhUhBZ9pPjpUpQYWMUFQqKyXXzOftbfK8zcQCz/jFV1Psmf05BK5ypx4K2r4Tnwdg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.12", + "@smithy/types": "^4.13.1", + "@smithy/util-config-provider": "^4.2.2", + "@smithy/util-endpoints": "^3.3.3", + "@smithy/util-middleware": "^4.2.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/core": { + "version": "3.23.13", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.23.13.tgz", + "integrity": "sha512-J+2TT9D6oGsUVXVEMvz8h2EmdVnkBiy2auCie4aSJMvKlzUtO5hqjEzXhoCUkIMo7gAYjbQcN0g/MMSXEhDs1Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.12", + "@smithy/types": "^4.13.1", + "@smithy/url-parser": "^4.2.12", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-body-length-browser": "^4.2.2", + "@smithy/util-middleware": "^4.2.12", + "@smithy/util-stream": "^4.5.21", + "@smithy/util-utf8": "^4.2.2", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.12.tgz", + "integrity": "sha512-cr2lR792vNZcYMriSIj+Um3x9KWrjcu98kn234xA6reOAFMmbRpQMOv8KPgEmLLtx3eldU6c5wALKFqNOhugmg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.12", + "@smithy/property-provider": "^4.2.12", + "@smithy/types": "^4.13.1", + "@smithy/url-parser": "^4.2.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-codec": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.12.tgz", + "integrity": "sha512-FE3bZdEl62ojmy8x4FHqxq2+BuOHlcxiH5vaZ6aqHJr3AIZzwF5jfx8dEiU/X0a8RboyNDjmXjlbr8AdEyLgiA==", + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.13.1", + "@smithy/util-hex-encoding": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-browser": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.12.tgz", + "integrity": "sha512-XUSuMxlTxV5pp4VpqZf6Sa3vT/Q75FVkLSpSSE3KkWBvAQWeuWt1msTv8fJfgA4/jcJhrbrbMzN1AC/hvPmm5A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-config-resolver": { + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.12.tgz", + "integrity": "sha512-7epsAZ3QvfHkngz6RXQYseyZYHlmWXSTPOfPmXkiS+zA6TBNo1awUaMFL9vxyXlGdoELmCZyZe1nQE+imbmV+Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-node": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.12.tgz", + "integrity": "sha512-D1pFuExo31854eAvg89KMn9Oab/wEeJR6Buy32B49A9Ogdtx5fwZPqBHUlDzaCDpycTFk2+fSQgX689Qsk7UGA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-serde-universal": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/eventstream-serde-universal": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.12.tgz", + "integrity": "sha512-+yNuTiyBACxOJUTvbsNsSOfH9G9oKbaJE1lNL3YHpGcuucl6rPZMi3nrpehpVOVR2E07YqFFmtwpImtpzlouHQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/eventstream-codec": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.3.15", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.15.tgz", + "integrity": "sha512-T4jFU5N/yiIfrtrsb9uOQn7RdELdM/7HbyLNr6uO/mpkj1ctiVs7CihVr51w4LyQlXWDpXFn4BElf1WmQvZu/A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.12", + "@smithy/querystring-builder": "^4.2.12", + "@smithy/types": "^4.13.1", + "@smithy/util-base64": "^4.3.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-blob-browser": { + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.13.tgz", + "integrity": "sha512-YrF4zWKh+ghLuquldj6e/RzE3xZYL8wIPfkt0MqCRphVICjyyjH8OwKD7LLlKpVEbk4FLizFfC1+gwK6XQdR3g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/chunked-blob-reader": "^5.2.2", + "@smithy/chunked-blob-reader-native": "^4.2.3", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-node": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.12.tgz", + "integrity": "sha512-QhBYbGrbxTkZ43QoTPrK72DoYviDeg6YKDrHTMJbbC+A0sml3kSjzFtXP7BtbyJnXojLfTQldGdUR0RGD8dA3w==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/hash-stream-node": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.12.tgz", + "integrity": "sha512-O3YbmGExeafuM/kP7Y8r6+1y0hIh3/zn6GROx0uNlB54K9oihAL75Qtc+jFfLNliTi6pxOAYZrRKD9A7iA6UFw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/invalid-dependency": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.12.tgz", + "integrity": "sha512-/4F1zb7Z8LOu1PalTdESFHR0RbPwHd3FcaG1sI3UEIriQTWakysgJr65lc1jj6QY5ye7aFsisajotH6UhWfm/g==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.2.2.tgz", + "integrity": "sha512-n6rQ4N8Jj4YTQO3YFrlgZuwKodf4zUFs7EJIWH86pSCWBaAtAGBFfCM7Wx6D2bBJ2xqFNxGBSrUWswT3M0VJow==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/md5-js": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.12.tgz", + "integrity": "sha512-W/oIpHCpWU2+iAkfZYyGWE+qkpuf3vEXHLxQQDx9FPNZTTdnul0dZ2d/gUFrtQ5je1G2kp4cjG0/24YueG2LbQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-content-length": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.12.tgz", + "integrity": "sha512-YE58Yz+cvFInWI/wOTrB+DbvUVz/pLn5mC5MvOV4fdRUc6qGwygyngcucRQjAhiCEbmfLOXX0gntSIcgMvAjmA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-endpoint": { + "version": "4.4.28", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.28.tgz", + "integrity": "sha512-p1gfYpi91CHcs5cBq982UlGlDrxoYUX6XdHSo91cQ2KFuz6QloHosO7Jc60pJiVmkWrKOV8kFYlGFFbQ2WUKKQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.23.13", + "@smithy/middleware-serde": "^4.2.16", + "@smithy/node-config-provider": "^4.3.12", + "@smithy/shared-ini-file-loader": "^4.4.7", + "@smithy/types": "^4.13.1", + "@smithy/url-parser": "^4.2.12", + "@smithy/util-middleware": "^4.2.12", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-retry": { + "version": "4.4.46", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.46.tgz", + "integrity": "sha512-SpvWNNOPOrKQGUqZbEPO+es+FRXMWvIyzUKUOYdDgdlA6BdZj/R58p4umoQ76c2oJC44PiM7mKizyyex1IJzow==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.12", + "@smithy/protocol-http": "^5.3.12", + "@smithy/service-error-classification": "^4.2.12", + "@smithy/smithy-client": "^4.12.8", + "@smithy/types": "^4.13.1", + "@smithy/util-middleware": "^4.2.12", + "@smithy/util-retry": "^4.2.13", + "@smithy/uuid": "^1.1.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-serde": { + "version": "4.2.16", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.16.tgz", + "integrity": "sha512-beqfV+RZ9RSv+sQqor3xroUUYgRFCGRw6niGstPG8zO9LgTl0B0MCucxjmrH/2WwksQN7UUgI7KNANoZv+KALA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.23.13", + "@smithy/protocol-http": "^5.3.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/middleware-stack": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.12.tgz", + "integrity": "sha512-kruC5gRHwsCOuyCd4ouQxYjgRAym2uDlCvQ5acuMtRrcdfg7mFBg6blaxcJ09STpt3ziEkis6bhg1uwrWU7txw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-config-provider": { + "version": "4.3.12", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.12.tgz", + "integrity": "sha512-tr2oKX2xMcO+rBOjobSwVAkV05SIfUKz8iI53rzxEmgW3GOOPOv0UioSDk+J8OpRQnpnhsO3Af6IEBabQBVmiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.12", + "@smithy/shared-ini-file-loader": "^4.4.7", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.5.1", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.5.1.tgz", + "integrity": "sha512-ejjxdAXjkPIs9lyYyVutOGNOraqUE9v/NjGMKwwFrfOM354wfSD8lmlj8hVwUzQmlLLF4+udhfCX9Exnbmvfzw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/protocol-http": "^5.3.12", + "@smithy/querystring-builder": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/property-provider": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.12.tgz", + "integrity": "sha512-jqve46eYU1v7pZ5BM+fmkbq3DerkSluPr5EhvOcHxygxzD05ByDRppRwRPPpFrsFo5yDtCYLKu+kreHKVrvc7A==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/protocol-http": { + "version": "5.3.12", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.12.tgz", + "integrity": "sha512-fit0GZK9I1xoRlR4jXmbLhoN0OdEpa96ul8M65XdmXnxXkuMxM0Y8HDT0Fh0Xb4I85MBvBClOzgSrV1X2s1Hxw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-builder": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.12.tgz", + "integrity": "sha512-6wTZjGABQufekycfDGMEB84BgtdOE/rCVTov+EDXQ8NHKTUNIp/j27IliwP7tjIU9LR+sSzyGBOXjeEtVgzCHg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "@smithy/util-uri-escape": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/querystring-parser": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.12.tgz", + "integrity": "sha512-P2OdvrgiAKpkPNKlKUtWbNZKB1XjPxM086NeVhK+W+wI46pIKdWBe5QyXvhUm3MEcyS/rkLvY8rZzyUdmyDZBw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/service-error-classification": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.12.tgz", + "integrity": "sha512-LlP29oSQN0Tw0b6D0Xo6BIikBswuIiGYbRACy5ujw/JgWSzTdYj46U83ssf6Ux0GyNJVivs2uReU8pt7Eu9okQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/shared-ini-file-loader": { + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.7.tgz", + "integrity": "sha512-HrOKWsUb+otTeo1HxVWeEb99t5ER1XrBi/xka2Wv6NVmTbuCUC1dvlrksdvxFtODLBjsC+PHK+fuy2x/7Ynyiw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.3.12", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.12.tgz", + "integrity": "sha512-B/FBwO3MVOL00DaRSXfXfa/TRXRheagt/q5A2NM13u7q+sHS59EOVGQNfG7DkmVtdQm5m3vOosoKAXSqn/OEgw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.2", + "@smithy/protocol-http": "^5.3.12", + "@smithy/types": "^4.13.1", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-middleware": "^4.2.12", + "@smithy/util-uri-escape": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/smithy-client": { + "version": "4.12.8", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.12.8.tgz", + "integrity": "sha512-aJaAX7vHe5i66smoSSID7t4rKY08PbD8EBU7DOloixvhOozfYWdcSYE4l6/tjkZ0vBZhGjheWzB2mh31sLgCMA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.23.13", + "@smithy/middleware-endpoint": "^4.4.28", + "@smithy/middleware-stack": "^4.2.12", + "@smithy/protocol-http": "^5.3.12", + "@smithy/types": "^4.13.1", + "@smithy/util-stream": "^4.5.21", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.13.1.tgz", + "integrity": "sha512-787F3yzE2UiJIQ+wYW1CVg2odHjmaWLGksnKQHUrK/lYZSEcy1msuLVvxaR/sI2/aDe9U+TBuLsXnr3vod1g0g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/url-parser": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.12.tgz", + "integrity": "sha512-wOPKPEpso+doCZGIlr+e1lVI6+9VAKfL4kZWFgzVgGWY2hZxshNKod4l2LXS3PRC9otH/JRSjtEHqQ/7eLciRA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/querystring-parser": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-base64": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.3.2.tgz", + "integrity": "sha512-XRH6b0H/5A3SgblmMa5ErXQ2XKhfbQB+Fm/oyLZ2O2kCUrwgg55bU0RekmzAhuwOjA9qdN5VU2BprOvGGUkOOQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-browser": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.2.2.tgz", + "integrity": "sha512-JKCrLNOup3OOgmzeaKQwi4ZCTWlYR5H4Gm1r2uTMVBXoemo1UEghk5vtMi1xSu2ymgKVGW631e2fp9/R610ZjQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-body-length-node": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.2.3.tgz", + "integrity": "sha512-ZkJGvqBzMHVHE7r/hcuCxlTY8pQr1kMtdsVPs7ex4mMU+EAbcXppfo5NmyxMYi2XU49eqaz56j2gsk4dHHPG/g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.2.2.tgz", + "integrity": "sha512-FDXD7cvUoFWwN6vtQfEta540Y/YBe5JneK3SoZg9bThSoOAC/eGeYEua6RkBgKjGa/sz6Y+DuBZj3+YEY21y4Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-config-provider": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.2.2.tgz", + "integrity": "sha512-dWU03V3XUprJwaUIFVv4iOnS1FC9HnMHDfUrlNDSh4315v0cWyaIErP8KiqGVbf5z+JupoVpNM7ZB3jFiTejvQ==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-browser": { + "version": "4.3.44", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.44.tgz", + "integrity": "sha512-eZg6XzaCbVr2S5cAErU5eGBDaOVTuTo1I65i4tQcHENRcZ8rMWhQy1DaIYUSLyZjsfXvmCqZrstSMYyGFocvHA==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/property-provider": "^4.2.12", + "@smithy/smithy-client": "^4.12.8", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-defaults-mode-node": { + "version": "4.2.48", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.48.tgz", + "integrity": "sha512-FqOKTlqSaoV3nzO55pMs5NBnZX8EhoI0DGmn9kbYeXWppgHD6dchyuj2HLqp4INJDJbSrj6OFYJkAh/WhSzZPg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/config-resolver": "^4.4.13", + "@smithy/credential-provider-imds": "^4.2.12", + "@smithy/node-config-provider": "^4.3.12", + "@smithy/property-provider": "^4.2.12", + "@smithy/smithy-client": "^4.12.8", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-endpoints": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.3.3.tgz", + "integrity": "sha512-VACQVe50j0HZPjpwWcjyT51KUQ4AnsvEaQ2lKHOSL4mNLD0G9BjEniQ+yCt1qqfKfiAHRAts26ud7hBjamrwig==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/node-config-provider": "^4.3.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-hex-encoding": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.2.2.tgz", + "integrity": "sha512-Qcz3W5vuHK4sLQdyT93k/rfrUwdJ8/HZ+nMUOyGdpeGA1Wxt65zYwi3oEl9kOM+RswvYq90fzkNDahPS8K0OIg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-middleware": { + "version": "4.2.12", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.12.tgz", + "integrity": "sha512-Er805uFUOvgc0l8nv0e0su0VFISoxhJ/AwOn3gL2NWNY2LUEldP5WtVcRYSQBcjg0y9NfG8JYrCJaYDpupBHJQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-retry": { + "version": "4.2.13", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.13.tgz", + "integrity": "sha512-qQQsIvL0MGIbUjeSrg0/VlQ3jGNKyM3/2iU3FPNgy01z+Sp4OvcaxbgIoFOTvB61ZoohtutuOvOcgmhbD0katQ==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/service-error-classification": "^4.2.12", + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-stream": { + "version": "4.5.21", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.21.tgz", + "integrity": "sha512-KzSg+7KKywLnkoKejRtIBXDmwBfjGvg1U1i/etkC7XSWUyFCoLno1IohV2c74IzQqdhX5y3uE44r/8/wuK+A7Q==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/fetch-http-handler": "^5.3.15", + "@smithy/node-http-handler": "^4.5.1", + "@smithy/types": "^4.13.1", + "@smithy/util-base64": "^4.3.2", + "@smithy/util-buffer-from": "^4.2.2", + "@smithy/util-hex-encoding": "^4.2.2", + "@smithy/util-utf8": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-uri-escape": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.2.2.tgz", + "integrity": "sha512-2kAStBlvq+lTXHyAZYfJRb/DfS3rsinLiwb+69SstC9Vb0s9vNWkRwpnj918Pfi85mzi42sOqdV72OLxWAISnw==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.2.2.tgz", + "integrity": "sha512-75MeYpjdWRe8M5E3AW0O4Cx3UadweS+cwdXjwYGBW5h/gxxnbeZ877sLPX/ZJA9GVTlL/qG0dXP29JWFCD1Ayw==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^4.2.2", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-waiter": { + "version": "4.2.14", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.14.tgz", + "integrity": "sha512-2zqq5o/oizvMaFUlNiTyZ7dbgYv1a893aGut2uaxtbzTx/VYYnRxWzDHuD/ftgcw94ffenua+ZNLrbqwUYE+Bg==", + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.13.1", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/uuid": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@smithy/uuid/-/uuid-1.1.2.tgz", + "integrity": "sha512-O/IEdcCUKkubz60tFbGA7ceITTAJsty+lBjNoorP4Z6XRqaFb/OjQjZODophEcuq68nKm6/0r+6/lLQ+XVpk8g==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@tokenizer/inflate": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@tokenizer/inflate/-/inflate-0.4.1.tgz", + "integrity": "sha512-2mAv+8pkG6GIZiF1kNg1jAjh27IDxEPKwdGul3snfztFerfPGI1LjDezZp3i7BElXompqEtPmoPx6c2wgtWsOA==", + "license": "MIT", + "dependencies": { + "debug": "^4.4.3", + "token-types": "^6.1.1" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/@tokenizer/token": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@tokenizer/token/-/token-0.3.0.tgz", + "integrity": "sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A==", + "license": "MIT" + }, + "node_modules/@types/babel__core": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.20.5.tgz", + "integrity": "sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "node_modules/@types/babel__generator": { + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.27.0.tgz", + "integrity": "sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__template": { + "version": "7.4.4", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.4.tgz", + "integrity": "sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "node_modules/@types/babel__traverse": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.28.0.tgz", + "integrity": "sha512-8PvcXf70gTDZBgt9ptxJ8elBeBjcLOAcOtoO/mPJjtji1+CdGbHgm77om1GrsPxsiE+uXIpNSK64UYaIwQXd4Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/types": "^7.28.2" + } + }, + "node_modules/@types/dns-packet": { + "version": "5.6.5", + "resolved": "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz", + "integrity": "sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q==", + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz", + "integrity": "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/graceful-fs": { + "version": "4.1.9", + "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", + "integrity": "sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz", + "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz", + "integrity": "sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-coverage": "*" + } + }, + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz", + "integrity": "sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/markdown-it": { + "version": "14.1.2", + "resolved": "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz", + "integrity": "sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/linkify-it": "^5", + "@types/mdurl": "^2" + } + }, + "node_modules/@types/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/multicast-dns": { + "version": "7.2.4", + "resolved": "https://registry.npmjs.org/@types/multicast-dns/-/multicast-dns-7.2.4.tgz", + "integrity": "sha512-ib5K4cIDR4Ro5SR3Sx/LROkMDa0BHz0OPaCBL/OSPDsAXEGZ3/KQeS6poBKYVN7BfjXDL9lWNwzyHVgt/wkyCw==", + "license": "MIT", + "dependencies": { + "@types/dns-packet": "*", + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "25.5.0", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.5.0.tgz", + "integrity": "sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==", + "license": "MIT", + "dependencies": { + "undici-types": "~7.18.0" + } + }, + "node_modules/@types/sinon": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-20.0.0.tgz", + "integrity": "sha512-etYGUC6IEevDGSWvR9WrECRA01ucR2/Oi9XMBUAdV0g4bLkNf4HlZWGiGlDOq5lgwXRwcV+PSeKgFcW4QzzYOg==", + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "15.0.1", + "resolved": "https://registry.npmjs.org/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-15.0.1.tgz", + "integrity": "sha512-Ko2tjWJq8oozHzHV+reuvS5KYIRAokHnGbDwGh/J64LntgpbuylF74ipEL24HCyRjf9FOlBiBHWBR1RlVKsI1w==", + "license": "MIT" + }, + "node_modules/@types/stack-utils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/stack-utils/-/stack-utils-2.0.3.tgz", + "integrity": "sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==", + "license": "MIT", + "peer": true + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "license": "MIT" + }, + "node_modules/@types/yargs": { + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/yargs-parser": "*" + } + }, + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "resolved": "https://registry.npmjs.org/@types/yargs-parser/-/yargs-parser-21.0.3.tgz", + "integrity": "sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==", + "license": "MIT", + "peer": true + }, + "node_modules/abort-controller": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/abort-controller/-/abort-controller-3.0.0.tgz", + "integrity": "sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==", + "license": "MIT", + "dependencies": { + "event-target-shim": "^5.0.0" + }, + "engines": { + "node": ">=6.5" + } + }, + "node_modules/abort-error": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz", + "integrity": "sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/accepts": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-2.0.0.tgz", + "integrity": "sha512-5cvg6CtKwfgdmVqY1WIiXKc3Q1bkRqGLi+2W/6ao+6Y7gu/RCwRuAhGEzh5B4KlszSuTLgZYuqFqo5bImjNKng==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-types": "^3.0.0", + "negotiator": "^1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/accepts/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/acme-client": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/acme-client/-/acme-client-5.4.0.tgz", + "integrity": "sha512-mORqg60S8iML6XSmVjqjGHJkINrCGLMj2QvDmFzI9vIlv1RGlyjmw3nrzaINJjkNsYXC41XhhD5pfy7CtuGcbA==", + "license": "MIT", + "dependencies": { + "@peculiar/x509": "^1.11.0", + "asn1js": "^3.0.5", + "axios": "^1.7.2", + "debug": "^4.3.5", + "node-forge": "^1.3.1" + }, + "engines": { + "node": ">= 16" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.16.0.tgz", + "integrity": "sha512-UVJyE9MttOsBQIDKw1skb9nAwQuR5wuGD3+82K6JgJlm/Y+KI92oNsMNGZCYdDsVtRHSak0pcV5Dno5+4jh9sw==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/agent-base": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.4.tgz", + "integrity": "sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 14" + } + }, + "node_modules/anser": { + "version": "1.4.10", + "resolved": "https://registry.npmjs.org/anser/-/anser-1.4.10.tgz", + "integrity": "sha512-hCv9AqTQ8ycjpSd3upOJd7vFwW1JaoYQ7tpham03GJ1ca8/65rqn0RpaWpItOAd6ylW9wAw6luXYPJIyPFVOww==", + "license": "MIT", + "peer": true + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true, + "license": "MIT" + }, + "node_modules/any-signal": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/any-signal/-/any-signal-4.2.0.tgz", + "integrity": "sha512-LndMvYuAPf4rC195lk7oSFuHOYFpOszIYrNYv0gHAvz+aEhE9qPZLhmrIz5pXP2BSsPOXvsuHDXEGaiQhIh9wA==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "license": "ISC", + "peer": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true, + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz", + "integrity": "sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.1", + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "license": "MIT", + "peer": true + }, + "node_modules/asn1js": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/asn1js/-/asn1js-3.0.7.tgz", + "integrity": "sha512-uLvq6KJu04qoQM6gvBfKFjlh6Gl0vOKQuR5cJMDHQkmwfMOQeN3F3SHCv9SNYSL+CRoHvOGFfllDlVz03GQjvQ==", + "license": "BSD-3-Clause", + "dependencies": { + "pvtsutils": "^1.3.6", + "pvutils": "^1.1.3", + "tslib": "^2.8.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/async-function": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/async-function/-/async-function-1.0.0.tgz", + "integrity": "sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "license": "MIT" + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz", + "integrity": "sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw==", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.15.6", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" + } + }, + "node_modules/babel-jest": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/babel-jest/-/babel-jest-29.7.0.tgz", + "integrity": "sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/transform": "^29.7.0", + "@types/babel__core": "^7.1.14", + "babel-plugin-istanbul": "^6.1.1", + "babel-preset-jest": "^29.6.3", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "slash": "^3.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.8.0" + } + }, + "node_modules/babel-plugin-istanbul": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", + "integrity": "sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.0.0", + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-instrument": "^5.0.4", + "test-exclude": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-plugin-jest-hoist": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz", + "integrity": "sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/template": "^7.3.3", + "@babel/types": "^7.3.3", + "@types/babel__core": "^7.1.14", + "@types/babel__traverse": "^7.0.6" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/babel-plugin-syntax-hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/babel-plugin-syntax-hermes-parser/-/babel-plugin-syntax-hermes-parser-0.32.0.tgz", + "integrity": "sha512-m5HthL++AbyeEA2FcdwOLfVFvWYECOBObLHNqdR8ceY4TsEdn4LdX2oTvbB2QJSSElE2AWA/b2MXZ/PF/CqLZg==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-parser": "0.32.0" + } + }, + "node_modules/babel-preset-current-node-syntax": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.2.0.tgz", + "integrity": "sha512-E/VlAEzRrsLEb2+dv8yp3bo4scof3l9nR4lrld+Iy5NyVqgVYUJnDAmunkhPMisRI32Qc4iRiz425d8vM++2fg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-bigint": "^7.8.3", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-import-attributes": "^7.24.7", + "@babel/plugin-syntax-import-meta": "^7.10.4", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5" + }, + "peerDependencies": { + "@babel/core": "^7.0.0 || ^8.0.0-0" + } + }, + "node_modules/babel-preset-jest": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz", + "integrity": "sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA==", + "license": "MIT", + "peer": true, + "dependencies": { + "babel-plugin-jest-hoist": "^29.6.3", + "babel-preset-current-node-syntax": "^1.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "license": "MIT", + "peer": true + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/baseline-browser-mapping": { + "version": "2.10.13", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.10.13.tgz", + "integrity": "sha512-BL2sTuHOdy0YT1lYieUxTw/QMtPBC3pmlJC6xk8BBYVv6vcw3SGdKemQ+Xsx9ik2F/lYDO9tqsFQH1r9PFuHKw==", + "license": "Apache-2.0", + "peer": true, + "bin": { + "baseline-browser-mapping": "dist/cli.cjs" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/bl": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-5.1.0.tgz", + "integrity": "sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ==", + "license": "MIT", + "dependencies": { + "buffer": "^6.0.3", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/blockstore-core": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/blockstore-core/-/blockstore-core-6.1.2.tgz", + "integrity": "sha512-yWU38RM8DJ6C7Y2shIeTNVgGiJX/ko2RXqDyNlxMakOc+aVS7k1SCiakMlh6ix0juRNPtj0ySMTXU8UBDXXRCQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^6.0.0", + "interface-blockstore": "^6.0.0", + "interface-store": "^7.0.0", + "it-all": "^3.0.9", + "it-filter": "^3.1.3", + "it-merge": "^3.0.11", + "multiformats": "^13.3.6" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true, + "license": "MIT" + }, + "node_modules/bowser": { + "version": "2.14.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.14.1.tgz", + "integrity": "sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==", + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "1.1.13", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.13.tgz", + "integrity": "sha512-9ZLprWS6EENmhEOpjCYW2c8VkmOvckIJZfkr7rBW6dObmfgJ/L1GpSYW5Hpo9lDz4D1+n0Ckz8rU7FwHDQiG/w==", + "license": "MIT", + "peer": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browser-readablestream-to-it": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/browser-readablestream-to-it/-/browser-readablestream-to-it-2.0.10.tgz", + "integrity": "sha512-I/9hEcRtjct8CzD9sVo9Mm4ntn0D+7tOVrjbPl69XAoOfgJ8NBdOQU+WX+5SHhcELJDb14mWt7zuvyqha+MEAQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/browserslist": { + "version": "4.28.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.2.tgz", + "integrity": "sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "baseline-browser-mapping": "^2.10.12", + "caniuse-lite": "^1.0.30001782", + "electron-to-chromium": "^1.5.328", + "node-releases": "^2.0.36", + "update-browserslist-db": "^1.2.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/bser": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/bser/-/bser-2.1.1.tgz", + "integrity": "sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "node-int64": "^0.4.0" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", + "license": "MIT" + }, + "node_modules/bundle-require": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz", + "integrity": "sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "load-tsconfig": "^0.2.3" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.18" + } + }, + "node_modules/cac": { + "version": "6.7.14", + "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", + "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/call-bind": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-define-property": "^1.0.0", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz", + "integrity": "sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw==", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001782", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001782.tgz", + "integrity": "sha512-dZcaJLJeDMh4rELYFw1tvSn1bhZWYFOt468FcbHHxx/Z/dFidd1I6ciyFdi3iwfQCyOjqo9upF6lGQYtMiJWxw==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/catharsis": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz", + "integrity": "sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/cborg": { + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/cborg/-/cborg-4.5.8.tgz", + "integrity": "sha512-6/viltD51JklRhq4L7jC3zgy6gryuG5xfZ3kzpE+PravtyeQLeQmCYLREhQH7pWENg5pY4Yu/XCd6a7dKScVlw==", + "license": "Apache-2.0", + "bin": { + "cborg": "lib/bin.js" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz", + "integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "license": "ISC" + }, + "node_modules/chrome-launcher": { + "version": "0.15.2", + "resolved": "https://registry.npmjs.org/chrome-launcher/-/chrome-launcher-0.15.2.tgz", + "integrity": "sha512-zdLEwNo3aUVzIhKhTtXfxhdvZhUghrnmkvcAq2NoDd+LeOHKf03H5jwZ8T/STsAlzyALkBVK552iaG1fGf1xVQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0" + }, + "bin": { + "print-chrome-path": "bin/print-chrome-path.js" + }, + "engines": { + "node": ">=12.13.0" + } + }, + "node_modules/chrome-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/chromium-edge-launcher": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/chromium-edge-launcher/-/chromium-edge-launcher-0.2.0.tgz", + "integrity": "sha512-JfJjUnq25y9yg4FABRRVPmBGWPZZi+AQXT4mxupb67766/0UlhG8PAZCz6xzEMXTbW3CsSoE8PcCWA49n35mKg==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "@types/node": "*", + "escape-string-regexp": "^4.0.0", + "is-wsl": "^2.2.0", + "lighthouse-logger": "^1.0.0", + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + } + }, + "node_modules/chromium-edge-launcher/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ci-info": { + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", + "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/clean-css": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz", + "integrity": "sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==", + "dev": true, + "license": "MIT", + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 10.0" + } + }, + "node_modules/clean-jsdoc-theme": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz", + "integrity": "sha512-QMrBdZ2KdPt6V2Ytg7dIt0/q32U4COpxvR0UDhPjRRKRL0o0MvRCR5YpY37/4rPF1SI1AYEKAWyof7ndCb/dzA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jsdoc/salty": "^0.2.4", + "fs-extra": "^10.1.0", + "html-minifier-terser": "^7.2.0", + "klaw-sync": "^6.0.0", + "lodash": "^4.17.21", + "showdown": "^2.1.0" + }, + "peerDependencies": { + "jsdoc": ">=3.x <=4.x" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "license": "ISC", + "peer": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone-regexp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-3.0.0.tgz", + "integrity": "sha512-ujdnoq2Kxb8s3ItNBtnYeXdm07FcU0u8ARAT1lQ2YdMwQC+cdiXX8KoqMVuglztILivceTtp4ivqGSmEmhBUJw==", + "license": "MIT", + "dependencies": { + "is-regexp": "^3.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "license": "MIT", + "peer": true + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", + "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "license": "MIT", + "peer": true + }, + "node_modules/confbox": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.4.tgz", + "integrity": "sha512-ysOGlgTFbN2/Y6Cg3Iye8YKulHw+R2fNXHrgSmXISQdMnomY6eNDprVdW9R5xBguEqI954+S6709UyiO7B+6OQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/connect": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/connect/-/connect-3.7.0.tgz", + "integrity": "sha512-ZqRXc+tZukToSNmh5C2iWMSoV3X1YUcPbqEM4DkEG5tNQXrQUZCNVGGv3IuicnkMtPfGf3Xtp8WCXs295iQ1pQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "finalhandler": "1.1.2", + "parseurl": "~1.3.3", + "utils-merge": "1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/connect/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/connect/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/consola": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz", + "integrity": "sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, + "node_modules/convert-hrtime": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/convert-hrtime/-/convert-hrtime-5.0.0.tgz", + "integrity": "sha512-lOETlkIeYSJWcbbcvjRKGxVMXJR+8+OQb/mTPbA4ObPMytYIsUbuOE0Jzy60hjARYszq1id0j8KgVhC+WGZVTg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "license": "MIT", + "peer": true + }, + "node_modules/cookie": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-1.1.1.tgz", + "integrity": "sha512-ei8Aos7ja0weRpFzJnEA9UHJ/7XQmqglbRwnf2ATjcB9Wq874VKH9kfjjirM6UhU2/E5fFYadylyhFldcqSidQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "license": "MIT", + "peer": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz", + "integrity": "sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/datastore-core": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/datastore-core/-/datastore-core-11.0.2.tgz", + "integrity": "sha512-0pN4hMcaCWcnUBo5OL/8j14Lt1l/p1v2VvzryRYeJAKRLqnFrzy2FhAQ7y0yTA63ki760ImQHfm2XlZrfIdFpQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/logger": "^6.0.0", + "interface-datastore": "^9.0.0", + "interface-store": "^7.0.0", + "it-drain": "^3.0.9", + "it-filter": "^3.1.3", + "it-map": "^3.1.3", + "it-merge": "^3.0.11", + "it-pipe": "^3.0.1", + "it-sort": "^3.0.8", + "it-take": "^3.0.8" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "license": "MIT", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", + "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delay": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/delay/-/delay-7.0.0.tgz", + "integrity": "sha512-C3vaGs818qzZjCvVJ98GQUMVyWeg7dr5w2Nwwb2t5K8G98jOyyVO2ti2bKYk5yoYElqH3F2yA53ykuEnwD6MCg==", + "license": "MIT", + "dependencies": { + "random-int": "^3.1.0", + "unlimited-timeout": "^0.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==", + "license": "MIT" + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.2.tgz", + "integrity": "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/dns-packet": { + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", + "integrity": "sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw==", + "license": "MIT", + "dependencies": { + "@leichtgewicht/ip-codec": "^2.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", + "integrity": "sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "license": "MIT", + "peer": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.329", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.329.tgz", + "integrity": "sha512-/4t+AS1l4S3ZC0Ja7PHFIWeBIxGA3QGqV8/yKsP36v7NcyUCl+bIcmw6s5zVuMIECWwBrAK/6QLzTmbJChBboQ==", + "license": "ISC", + "peer": true + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "license": "MIT", + "peer": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.5.tgz", + "integrity": "sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/entities": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", + "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/err-code": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-3.0.1.tgz", + "integrity": "sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==", + "license": "MIT" + }, + "node_modules/error-stack-parser": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/error-stack-parser/-/error-stack-parser-2.1.4.tgz", + "integrity": "sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "stackframe": "^1.3.4" + } + }, + "node_modules/es-abstract": { + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", + "license": "MIT", + "dependencies": { + "array-buffer-byte-length": "^1.0.2", + "arraybuffer.prototype.slice": "^1.0.4", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "data-view-buffer": "^1.0.2", + "data-view-byte-length": "^1.0.2", + "data-view-byte-offset": "^1.0.1", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "es-set-tostringtag": "^2.1.0", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.8", + "get-intrinsic": "^1.3.0", + "get-proto": "^1.0.1", + "get-symbol-description": "^1.1.0", + "globalthis": "^1.0.4", + "gopd": "^1.2.0", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "internal-slot": "^1.1.0", + "is-array-buffer": "^3.0.5", + "is-callable": "^1.2.7", + "is-data-view": "^1.0.2", + "is-negative-zero": "^2.0.3", + "is-regex": "^1.2.1", + "is-set": "^2.0.3", + "is-shared-array-buffer": "^1.0.4", + "is-string": "^1.1.1", + "is-typed-array": "^1.1.15", + "is-weakref": "^1.1.1", + "math-intrinsics": "^1.1.0", + "object-inspect": "^1.13.4", + "object-keys": "^1.1.1", + "object.assign": "^4.1.7", + "own-keys": "^1.0.1", + "regexp.prototype.flags": "^1.5.4", + "safe-array-concat": "^1.1.3", + "safe-push-apply": "^1.0.0", + "safe-regex-test": "^1.1.0", + "set-proto": "^1.0.0", + "stop-iteration-iterator": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", + "string.prototype.trimstart": "^1.0.8", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-length": "^1.0.3", + "typed-array-byte-offset": "^1.0.4", + "typed-array-length": "^1.0.7", + "unbox-primitive": "^1.1.0", + "which-typed-array": "^1.1.19" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/esbuild": { + "version": "0.25.8", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz", + "integrity": "sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.25.8", + "@esbuild/android-arm": "0.25.8", + "@esbuild/android-arm64": "0.25.8", + "@esbuild/android-x64": "0.25.8", + "@esbuild/darwin-arm64": "0.25.8", + "@esbuild/darwin-x64": "0.25.8", + "@esbuild/freebsd-arm64": "0.25.8", + "@esbuild/freebsd-x64": "0.25.8", + "@esbuild/linux-arm": "0.25.8", + "@esbuild/linux-arm64": "0.25.8", + "@esbuild/linux-ia32": "0.25.8", + "@esbuild/linux-loong64": "0.25.8", + "@esbuild/linux-mips64el": "0.25.8", + "@esbuild/linux-ppc64": "0.25.8", + "@esbuild/linux-riscv64": "0.25.8", + "@esbuild/linux-s390x": "0.25.8", + "@esbuild/linux-x64": "0.25.8", + "@esbuild/netbsd-arm64": "0.25.8", + "@esbuild/netbsd-x64": "0.25.8", + "@esbuild/openbsd-arm64": "0.25.8", + "@esbuild/openbsd-x64": "0.25.8", + "@esbuild/openharmony-arm64": "0.25.8", + "@esbuild/sunos-x64": "0.25.8", + "@esbuild/win32-arm64": "0.25.8", + "@esbuild/win32-ia32": "0.25.8", + "@esbuild/win32-x64": "0.25.8" + } + }, + "node_modules/esbuild-plugins-node-modules-polyfill": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.7.1.tgz", + "integrity": "sha512-IEaUhaS1RukGGcatDzqJmR+AzUWJ2upTJZP2i7FzR37Iw5Lk0LReCTnWnPMWnGG9lO4MWTGKEGGLWEOPegTRJA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jspm/core": "^2.1.0", + "local-pkg": "^1.1.1", + "resolve.exports": "^2.0.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "esbuild": ">=0.14.0 <=0.25.x" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "license": "MIT", + "peer": true + }, + "node_modules/escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "license": "BSD-2-Clause", + "peer": true, + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-target-shim": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", + "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/eventemitter3": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.4.tgz", + "integrity": "sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==", + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "license": "(MIT OR WTFPL)", + "engines": { + "node": ">=6" + } + }, + "node_modules/exponential-backoff": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/exponential-backoff/-/exponential-backoff-3.1.3.tgz", + "integrity": "sha512-ZgEeZXj30q+I0EN+CbSSpIyPaJ5HVQD18Z1m+u1FXbAeT94mr1zw50q4q6jiiC447Nl/YTcIYSAftiGqetwXCA==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/exsolve": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.8.tgz", + "integrity": "sha512-LmDxfWXwcTArk8fUEnOfSZpHOJ6zOMUJKOtFLFqJLoKJetuQG874Uc7/Kki7zFLzYybmZhp1M7+98pfMqeX8yA==", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.8" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "license": "MIT", + "peer": true + }, + "node_modules/fast-xml-parser": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz", + "integrity": "sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + }, + { + "type": "paypal", + "url": "https://paypal.me/naturalintelligence" + } + ], + "license": "MIT", + "dependencies": { + "strnum": "^1.0.5" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz", + "integrity": "sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fb-dotslash": { + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/fb-dotslash/-/fb-dotslash-0.5.8.tgz", + "integrity": "sha512-XHYLKk9J4BupDxi9bSEhkfss0m+Vr9ChTrjhf9l2iw3jB5C7BnY4GVPoMcqbrTutsKJso6yj2nAB6BI/F2oZaA==", + "license": "(MIT OR Apache-2.0)", + "peer": true, + "bin": { + "dotslash": "bin/dotslash" + }, + "engines": { + "node": ">=20" + } + }, + "node_modules/fb-watchman": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/fb-watchman/-/fb-watchman-2.0.2.tgz", + "integrity": "sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "bser": "2.1.1" + } + }, + "node_modules/file-type": { + "version": "21.3.4", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-21.3.4.tgz", + "integrity": "sha512-Ievi/yy8DS3ygGvT47PjSfdFoX+2isQueoYP1cntFW1JLYAuS4GD7NUPGg4zv2iZfV52uDyk5w5Z0TdpRS6Q1g==", + "license": "MIT", + "dependencies": { + "@tokenizer/inflate": "^0.4.1", + "strtok3": "^10.3.4", + "token-types": "^6.1.1", + "uint8array-extras": "^1.4.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sindresorhus/file-type?sponsor=1" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/finalhandler/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/finalhandler/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "license": "MIT", + "peer": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/fix-dts-default-cjs-exports": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz", + "integrity": "sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg==", + "dev": true, + "license": "MIT", + "dependencies": { + "magic-string": "^0.30.17", + "mlly": "^1.7.4", + "rollup": "^4.34.8" + } + }, + "node_modules/flow-enums-runtime": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/flow-enums-runtime/-/flow-enums-runtime-0.0.6.tgz", + "integrity": "sha512-3PYnM29RFXwvAN6Pc/scUfkI7RwhQ/xqyLUyPNlXUp9S40zI8nup9tUSrTLSVnWGBN38FNiGWbwZOB6uR4OGdw==", + "license": "MIT", + "peer": true + }, + "node_modules/follow-redirects": { + "version": "1.15.11", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.11.tgz", + "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.5.tgz", + "integrity": "sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.5.tgz", + "integrity": "sha512-8RipRLol37bNs2bhoV67fiTEvdTrbMUYcFTiy3+wuuOnUog2QBHCZWXDRijWQfAkhBj2Uf5UnVaiWwA5vdd82w==", + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", + "hasown": "^2.0.2", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/freeport-promise": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/freeport-promise/-/freeport-promise-2.0.0.tgz", + "integrity": "sha512-dwWpT1DdQcwrhmRwnDnPM/ZFny+FtzU+k50qF2eid3KxaQDsMiBrwo1i0G3qSugkN5db6Cb0zgfc68QeTOpEFg==", + "license": "Apache-2.0 OR MIT", + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "license": "ISC", + "peer": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function-timeout": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/function-timeout/-/function-timeout-0.1.1.tgz", + "integrity": "sha512-0NVVC0TaP7dSTvn1yMiy6d6Q8gifzbvQafO46RtLG/kHJUBNd+pVRGOBoK44wNBvtSPUJRfdVvkFdD3p0xvyZg==", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.8.tgz", + "integrity": "sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/generator-function/-/generator-function-2.0.1.tgz", + "integrity": "sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "license": "ISC", + "peer": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", + "function-bind": "^1.1.2", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-iterator": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/get-iterator/-/get-iterator-2.0.1.tgz", + "integrity": "sha512-7HuY/hebu4gryTDT7O/XY/fvY9wRByEGdK6QOa4of8npTcv0+NS6frFKABcf6S9EBAsveTuKTsZQQBFMMNILIg==", + "license": "MIT" + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz", + "integrity": "sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-port": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-7.2.0.tgz", + "integrity": "sha512-afP4W205ONCuMoPBqcR6PSXnzX35KTcJygfJfcp+QY+uwm3p20p1YczWXhlICIzGMCxYBQcySEcOgsJcrkyobg==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.1.0.tgz", + "integrity": "sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", + "license": "MIT" + }, + "node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "deprecated": "Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me", + "license": "ISC", + "peer": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz", + "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "license": "ISC" + }, + "node_modules/hamt-sharding": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/hamt-sharding/-/hamt-sharding-3.0.6.tgz", + "integrity": "sha512-nZeamxfymIWLpVcAN0CRrb7uVq3hCOGj9IcL6NMA6VVCVWqj+h9Jo/SmaWuS92AEDf1thmHsM5D5c70hM3j2Tg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "sparse-array": "^1.3.1", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.1.0.tgz", + "integrity": "sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hashlru": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz", + "integrity": "sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A==", + "license": "MIT" + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/helia": { + "version": "6.0.22", + "resolved": "https://registry.npmjs.org/helia/-/helia-6.0.22.tgz", + "integrity": "sha512-7FGNHkv0ioNFah2MUTTB4cyUUfRHGAvnKB6CEqDf1NV4r65x3+CW50c3YirZO/BnclxDVQkBWBzl7VJ3cjPR8Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/libp2p-noise": "^17.0.0", + "@chainsafe/libp2p-yamux": "^8.0.0", + "@helia/block-brokers": "^5.1.4", + "@helia/delegated-routing-v1-http-api-client": "^6.0.0", + "@helia/interface": "^6.1.1", + "@helia/routers": "^5.0.3", + "@helia/utils": "^2.4.2", + "@ipshipyard/libp2p-auto-tls": "^2.0.1", + "@libp2p/autonat": "^3.0.5", + "@libp2p/bootstrap": "^12.0.6", + "@libp2p/circuit-relay-v2": "^4.0.5", + "@libp2p/config": "^1.1.20", + "@libp2p/dcutr": "^3.0.5", + "@libp2p/http": "^2.0.0", + "@libp2p/identify": "^4.0.5", + "@libp2p/interface": "^3.1.0", + "@libp2p/kad-dht": "^16.1.0", + "@libp2p/keychain": "^6.0.5", + "@libp2p/mdns": "^12.0.6", + "@libp2p/mplex": "^12.0.6", + "@libp2p/ping": "^3.0.5", + "@libp2p/tcp": "^11.0.5", + "@libp2p/tls": "^3.0.5", + "@libp2p/upnp-nat": "^4.0.5", + "@libp2p/webrtc": "^6.0.6", + "@libp2p/websockets": "^10.0.6", + "@multiformats/dns": "^1.0.9", + "blockstore-core": "^6.1.1", + "datastore-core": "^11.0.2", + "interface-datastore": "^9.0.2", + "ipns": "^10.1.2", + "libp2p": "^3.0.6", + "multiformats": "^13.4.1" + } + }, + "node_modules/hermes-compiler": { + "version": "250829098.0.9", + "resolved": "https://registry.npmjs.org/hermes-compiler/-/hermes-compiler-250829098.0.9.tgz", + "integrity": "sha512-hZ5O7PDz1vQ99TS7HD3FJ9zVynfU1y+VWId6U1Pldvd8hmAYrNec/XLPYJKD3dLOW6NXak6aAQAuMuSo3ji0tQ==", + "license": "MIT", + "peer": true + }, + "node_modules/hermes-estree": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.32.0.tgz", + "integrity": "sha512-KWn3BqnlDOl97Xe1Yviur6NbgIZ+IP+UVSpshlZWkq+EtoHg6/cwiDj/osP9PCEgFE15KBm1O55JRwbMEm5ejQ==", + "license": "MIT", + "peer": true + }, + "node_modules/hermes-parser": { + "version": "0.32.0", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.32.0.tgz", + "integrity": "sha512-g4nBOWFpuiTqjR3LZdRxKUkij9iyveWeuks7INEsMX741f3r9xxrOe8TeQfUxtda0eXmiIFiMQzoeSQEno33Hw==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.32.0" + } + }, + "node_modules/html-minifier-terser": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz", + "integrity": "sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA==", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "clean-css": "~5.3.2", + "commander": "^10.0.0", + "entities": "^4.4.0", + "param-case": "^3.0.4", + "relateurl": "^0.2.7", + "terser": "^5.15.1" + }, + "bin": { + "html-minifier-terser": "cli.js" + }, + "engines": { + "node": "^14.13.1 || >=16.0.0" + } + }, + "node_modules/http-errors": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" + }, + "engines": { + "node": ">= 0.8" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/http-errors/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/https-proxy-agent": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", + "license": "MIT", + "peer": true, + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/image-size": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-1.2.1.tgz", + "integrity": "sha512-rH+46sQJ2dlwfjfhCyNx5thzrv+dtmBIhPHk0zgRUukHzZ/kRueTJXoYYsclBaKcSMBWuGbOFXtioLpzTb5euw==", + "license": "MIT", + "peer": true, + "dependencies": { + "queue": "6.0.2" + }, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=16.x" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "deprecated": "This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.", + "license": "ISC", + "peer": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "license": "ISC" + }, + "node_modules/interface-blockstore": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/interface-blockstore/-/interface-blockstore-6.0.1.tgz", + "integrity": "sha512-AVcUbMwrhiO4RqDljUitUt3aoon6MD2fblsN7vEVBDsmHFQT0LIOODVK5Qxe28h1uUvVykyZqmo09f6w55KiJg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^7.0.0", + "multiformats": "^13.3.6" + } + }, + "node_modules/interface-datastore": { + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-9.0.2.tgz", + "integrity": "sha512-jebn+GV/5LTDDoyicNIB4D9O0QszpPqT09Z/MpEWvf3RekjVKpXJCDguM5Au2fwIFxFDAQMZe5bSla0jMamCNg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^7.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/interface-store": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-7.0.1.tgz", + "integrity": "sha512-OPRRUO3Cs6Jr/t98BrJLQp1jUTPgrRH0PqFfuNoPAqd+J7ABN1tjFVjQdaOBiybYJTS/AyBSZnZVWLPvp3dW3w==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "license": "MIT", + "peer": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/ip-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ip-regex/-/ip-regex-5.0.0.tgz", + "integrity": "sha512-fOCG6lhoKKakwv+C6KdsOnGvgXnmgfmp0myi3bcNwj3qfwPAxRKWEuFhvEFF7ceYIz6+1jRZ+yguLFAmUNPEfw==", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ipfs-unixfs": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/ipfs-unixfs/-/ipfs-unixfs-12.0.1.tgz", + "integrity": "sha512-V8o80MEq3Aehs9KSX9k/FpRmsyYrLAH6mrq7Tq13vQi8TA3onzif8z5sDsWg8AAV9aa+uuvr0HHVLtnb5rNL3A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "protons-runtime": "^5.5.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/ipfs-unixfs-exporter": { + "version": "15.0.4", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-exporter/-/ipfs-unixfs-exporter-15.0.4.tgz", + "integrity": "sha512-y/RMzv5Ceb5CHXBfM85NNWPceUS4Y5Z7zR+sPrOZhr22HnovUpXBM9lXZI7bIBknQs3vRREAJHNzfuRdPFVtRA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-cbor": "^9.2.4", + "@ipld/dag-json": "^10.2.5", + "@ipld/dag-pb": "^4.1.5", + "@multiformats/murmur3": "^2.1.8", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^6.0.1", + "ipfs-unixfs": "^12.0.0", + "it-last": "^3.0.9", + "it-map": "^3.1.4", + "it-parallel": "^3.0.13", + "it-pipe": "^3.0.1", + "it-pushable": "^3.2.3", + "it-to-buffer": "^4.0.10", + "multiformats": "^13.3.7", + "p-queue": "^9.0.0", + "progress-events": "^1.0.1" + } + }, + "node_modules/ipfs-unixfs-importer": { + "version": "16.1.4", + "resolved": "https://registry.npmjs.org/ipfs-unixfs-importer/-/ipfs-unixfs-importer-16.1.4.tgz", + "integrity": "sha512-apnhvrTRFZMt7YUjyHJcvaPN1SSgBQ7OQIjTb2LppRDbY20kzVO8PcROLOzpinFmeZlVfx0QONy8aNfAcT3b2w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@ipld/dag-pb": "^4.1.5", + "@multiformats/murmur3": "^2.1.8", + "blockstore-core": "^6.1.2", + "hamt-sharding": "^3.0.6", + "interface-blockstore": "^6.0.1", + "interface-store": "^7.0.0", + "ipfs-unixfs": "^12.0.0", + "it-all": "^3.0.9", + "it-batch": "^3.0.9", + "it-first": "^3.0.9", + "it-parallel-batch": "^3.0.9", + "multiformats": "^13.3.7", + "progress-events": "^1.0.1", + "rabin-wasm": "^0.1.5", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/ipns": { + "version": "10.1.2", + "resolved": "https://registry.npmjs.org/ipns/-/ipns-10.1.2.tgz", + "integrity": "sha512-RKAX20vZSHWEobmUw4zpU8t/kw+0CkrJYMA5ou39kNW5B4sAPGOiR/wGK9c51tQKA3rb8SeKs5g7ndNvNiS/vg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/crypto": "^5.0.0", + "@libp2p/interface": "^2.0.0", + "@libp2p/logger": "^5.0.0", + "cborg": "^4.2.3", + "interface-datastore": "^8.3.0", + "multiformats": "^13.2.2", + "protons-runtime": "^5.5.0", + "timestamp-nano": "^1.0.1", + "uint8arraylist": "^2.4.8", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/ipns/node_modules/@libp2p/interface": { + "version": "2.11.0", + "resolved": "https://registry.npmjs.org/@libp2p/interface/-/interface-2.11.0.tgz", + "integrity": "sha512-0MUFKoXWHTQW3oWIgSHApmYMUKWO/Y02+7Hpyp+n3z+geD4Xo2Rku2gYWmxcq+Pyjkz6Q9YjDWz3Yb2SoV2E8Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^12.4.4", + "it-pushable": "^3.2.3", + "it-stream-types": "^2.0.2", + "main-event": "^1.0.1", + "multiformats": "^13.3.6", + "progress-events": "^1.0.1", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/ipns/node_modules/@libp2p/logger": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@libp2p/logger/-/logger-5.2.0.tgz", + "integrity": "sha512-OEFS529CnIKfbWEHmuCNESw9q0D0hL8cQ8klQfjIVPur15RcgAEgc1buQ7Y6l0B6tCYg120bp55+e9tGvn8c0g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@libp2p/interface": "^2.11.0", + "@multiformats/multiaddr": "^12.4.4", + "interface-datastore": "^8.3.1", + "multiformats": "^13.3.6", + "weald": "^1.0.4" + } + }, + "node_modules/ipns/node_modules/@multiformats/multiaddr": { + "version": "12.5.1", + "resolved": "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz", + "integrity": "sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.0.1", + "@chainsafe/netmask": "^2.0.0", + "@multiformats/dns": "^1.0.3", + "abort-error": "^1.0.1", + "multiformats": "^13.0.0", + "uint8-varint": "^2.0.1", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/ipns/node_modules/interface-datastore": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz", + "integrity": "sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "interface-store": "^6.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/ipns/node_modules/interface-store": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz", + "integrity": "sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-async-function/-/is-async-function-2.1.1.tgz", + "integrity": "sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==", + "license": "MIT", + "dependencies": { + "async-function": "^1.0.0", + "call-bound": "^1.0.3", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.2.tgz", + "integrity": "sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "license": "MIT", + "peer": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-electron": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/is-electron/-/is-electron-2.2.2.tgz", + "integrity": "sha512-FO/Rhvz5tuw4MCWkpMzHFKWD2LsfHzIb7i6MdPYZ/KW7AlxawyLkqdy+jPZP1WubqEADE3O4FUENlJHDfQASRg==", + "license": "MIT" + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-generator-function/-/is-generator-function-1.1.2.tgz", + "integrity": "sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.4", + "generator-function": "^2.0.0", + "get-proto": "^1.0.1", + "has-tostringtag": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-ip": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/is-ip/-/is-ip-5.0.1.tgz", + "integrity": "sha512-FCsGHdlrOnZQcp0+XT5a+pYowf33itBalCl+7ovNXC/7o5BhIpG14M3OrpPPdBSIQJCm+0M5+9mO7S9VVTTCFw==", + "license": "MIT", + "dependencies": { + "ip-regex": "^5.0.0", + "super-regex": "^0.2.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-loopback-addr": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-loopback-addr/-/is-loopback-addr-2.0.2.tgz", + "integrity": "sha512-26POf2KRCno/KTNL5Q0b/9TYnL00xEsSaLfiFRmjM7m7Lw7ZMmFybzzuX4CcsLAluZGd+niLUiMRxEooVE3aqg==", + "license": "MIT" + }, + "node_modules/is-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-map/-/is-map-2.0.3.tgz", + "integrity": "sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-network-error": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/is-network-error/-/is-network-error-1.3.1.tgz", + "integrity": "sha512-6QCxa49rQbmUWLfk0nuGqzql9U8uaV2H6279bRErPBHe/109hCzsLUBUHfbEtvLIHBd6hyXbgedBSHevm43Edw==", + "license": "MIT", + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-regex": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-regexp": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-3.1.0.tgz", + "integrity": "sha512-rbku49cWloU5bSMI+zaRaXdQHXnthP6DZ/vLnfdSKyL4zUzuWnomtOEiZZOd+ioQ+avFo/qau3KPTc7Fjy1uPA==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-set/-/is-set-2.0.3.tgz", + "integrity": "sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz", + "integrity": "sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.15.tgz", + "integrity": "sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-weakmap/-/is-weakmap-2.0.2.tgz", + "integrity": "sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.1.tgz", + "integrity": "sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "license": "ISC", + "peer": true + }, + "node_modules/iso-constants": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/iso-constants/-/iso-constants-0.1.2.tgz", + "integrity": "sha512-OTCM5ZCQsHBCI4Wdu4tSxvDIkmDHd5EwJDps5mKqnQnWJSKlnwMs3EDZ4n3Fh1tmkWkDlyd2vCDbEYuPbyrUNQ==", + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", + "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz", + "integrity": "sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "@babel/core": "^7.12.3", + "@babel/parser": "^7.14.7", + "@istanbuljs/schema": "^0.1.2", + "istanbul-lib-coverage": "^3.2.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/istanbul-lib-instrument/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "license": "ISC", + "peer": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/it-all": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-all/-/it-all-3.0.9.tgz", + "integrity": "sha512-fz1oJJ36ciGnu2LntAlE6SA97bFZpW7Rnt0uEc1yazzR2nKokZLr8lIRtgnpex4NsmaBcvHF+Z9krljWFy/mmg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-batch": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-batch/-/it-batch-3.0.9.tgz", + "integrity": "sha512-z6p89Q8gm2urBtF3JcpnbJogacijWk3m1uc3xZYI3x0eJUoYLUbgF8IxJ2fnuVObV7yRv3SixfwGCufaZY1NCg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-byte-stream": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/it-byte-stream/-/it-byte-stream-2.0.4.tgz", + "integrity": "sha512-8pS0OvkBYwQ206pRLgoLDAiHP6c8wYZJ1ig8KDmP5NOrzMxeH2Wv2ktXIjYHwdu7RPOsnxQb0vKo+O784L/m5g==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-queueless-pushable": "^2.0.0", + "it-stream-types": "^2.0.2", + "race-signal": "^2.0.0", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-drain": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/it-drain/-/it-drain-3.0.10.tgz", + "integrity": "sha512-0w/bXzudlyKIyD1+rl0xUKTI7k4cshcS43LTlBiGFxI8K1eyLydNPxGcsVLsFVtKh1/ieS8AnVWt6KwmozxyEA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-filter": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/it-filter/-/it-filter-3.1.4.tgz", + "integrity": "sha512-80kWEKgiFEa4fEYD3mwf2uygo1dTQ5Y5midKtL89iXyjinruA/sNXl6iFkTcdNedydjvIsFhWLiqRPQP4fAwWQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-first": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-first/-/it-first-3.0.9.tgz", + "integrity": "sha512-ZWYun273Gbl7CwiF6kK5xBtIKR56H1NoRaiJek2QzDirgen24u8XZ0Nk+jdnJSuCTPxC2ul1TuXKxu/7eK6NuA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-foreach": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/it-foreach/-/it-foreach-2.1.5.tgz", + "integrity": "sha512-9tIp+NFVODmGV/49JUKVxW3+8RrPkYrmUaXUM4W6lMC5POM/1gegckNjBmDe5xgBa7+RE9HKBmRTAdY5V+bWSQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/it-glob/-/it-glob-3.0.4.tgz", + "integrity": "sha512-73PbGBTK/dHp5PX4l8pkQH1ozCONP0U+PB3qMqltxPonRJQNomINE3Hn9p02m2GOu95VoeVvSZdHI2N+qub0pw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "fast-glob": "^3.3.3" + } + }, + "node_modules/it-last": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-last/-/it-last-3.0.9.tgz", + "integrity": "sha512-AtfUEnGDBHBEwa1LjrpGHsJMzJAWDipD6zilvhakzJcm+BCvNX8zlX2BsHClHJLLTrsY4lY9JUjc+TQV4W7m1w==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-length/-/it-length-3.0.9.tgz", + "integrity": "sha512-cPhRPzyulYqyL7x4sX4MOjG/xu3vvEIFAhJ1aCrtrnbfxloCOtejOONib5oC3Bz8tLL6b6ke6+YHu4Bm6HCG7A==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-length-prefixed": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/it-length-prefixed/-/it-length-prefixed-10.0.1.tgz", + "integrity": "sha512-BhyluvGps26u9a7eQIpOI1YN7mFgi8lFwmiPi07whewbBARKAG9LE09Odc8s1Wtbt2MB6rNUrl7j9vvfXTJwdQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "uint8-varint": "^2.0.1", + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-length-prefixed-stream": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/it-length-prefixed-stream/-/it-length-prefixed-stream-2.0.4.tgz", + "integrity": "sha512-ugHDOQCkC2Dx2pQaJ+W4OIM6nZFBwlpgdQVVOfdX4c1Os47d6PMsfrkTrzRwZdBCMZb+JISZNP2gjU/DHN/z9A==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-byte-stream": "^2.0.0", + "it-stream-types": "^2.0.2", + "uint8-varint": "^2.0.4", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-map": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/it-map/-/it-map-3.1.4.tgz", + "integrity": "sha512-QB9PYQdE9fUfpVFYfSxBIyvKynUCgblb143c+ktTK6ZuKSKkp7iH58uYFzagqcJ5HcqIfn1xbfaralHWam+3fg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-peekable": "^3.0.0" + } + }, + "node_modules/it-merge": { + "version": "3.0.12", + "resolved": "https://registry.npmjs.org/it-merge/-/it-merge-3.0.12.tgz", + "integrity": "sha512-nnnFSUxKlkZVZD7c0jYw6rDxCcAQYcMsFj27thf7KkDhpj0EA0g9KHPxbFzHuDoc6US2EPS/MtplkNj8sbCx4Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-queueless-pushable": "^2.0.0" + } + }, + "node_modules/it-ndjson": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/it-ndjson/-/it-ndjson-1.1.4.tgz", + "integrity": "sha512-ZMgTUrNo/UQCeRUT3KqnC0UaClzU6D+ItSmzVt7Ks7pcJ7DboYeYBSPeFLAaEthf5zlvaApDuACLmOWepgkrRg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-parallel": { + "version": "3.0.13", + "resolved": "https://registry.npmjs.org/it-parallel/-/it-parallel-3.0.13.tgz", + "integrity": "sha512-85PPJ/O8q97Vj9wmDTSBBXEkattwfQGruXitIzrh0RLPso6RHfiVqkuTqBNufYYtB1x6PSkh0cwvjmMIkFEPHA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.1" + } + }, + "node_modules/it-parallel-batch": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-parallel-batch/-/it-parallel-batch-3.0.9.tgz", + "integrity": "sha512-TszXWqqLG8IG5DUEnC4cgH9aZI6CsGS7sdkXTiiacMIj913bFy7+ohU3IqsFURCcZkpnXtNLNzrYnXISsKBhbQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-batch": "^3.0.0" + } + }, + "node_modules/it-peekable": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/it-peekable/-/it-peekable-3.0.8.tgz", + "integrity": "sha512-7IDBQKSp/dtBxXV3Fj0v3qM1jftJ9y9XrWLRIuU1X6RdKqWiN60syNwP0fiDxZD97b8SYM58dD3uklIk1TTQAw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-pipe": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/it-pipe/-/it-pipe-3.0.1.tgz", + "integrity": "sha512-sIoNrQl1qSRg2seYSBH/3QxWhJFn9PKYvOf/bHdtCBF0bnghey44VyASsWzn5dAx0DCDDABq1hZIuzKmtBZmKA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-merge": "^3.0.0", + "it-pushable": "^3.1.2", + "it-stream-types": "^2.0.1" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-protobuf-stream": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-protobuf-stream/-/it-protobuf-stream-2.0.3.tgz", + "integrity": "sha512-Dus9qyylOSnC7l75/3qs6j3Fe9MCM2K5luXi9o175DYijFRne5FPucdOGIYdwaDBDQ4Oy34dNCuFobOpcusvEQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-length-prefixed-stream": "^2.0.0", + "it-stream-types": "^2.0.2", + "uint8arraylist": "^2.4.8" + } + }, + "node_modules/it-pushable": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz", + "integrity": "sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "p-defer": "^4.0.0" + } + }, + "node_modules/it-queue": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/it-queue/-/it-queue-1.1.1.tgz", + "integrity": "sha512-yeYCV22WF1QDyb3ylw+g3TGEdkmnoHUH2mc12QoGOQuxW4XP1V7Zd3BfsEF1iq2IFBwIK7wCPUcRLTAQVeZ3SQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "it-pushable": "^3.2.3", + "main-event": "^1.0.0", + "race-event": "^1.3.0", + "race-signal": "^2.0.0" + } + }, + "node_modules/it-queueless-pushable": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/it-queueless-pushable/-/it-queueless-pushable-2.0.3.tgz", + "integrity": "sha512-USa5EzTvmQswOcVE7+o6qsj2o2G+6KHCxSogPOs23sGYkDWFidhqVO7dAvv6ve/Z+Q+nvxpEa9rrRo6VEK7w4Q==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1", + "p-defer": "^4.0.1", + "race-signal": "^2.0.0" + } + }, + "node_modules/it-reader": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/it-reader/-/it-reader-6.0.4.tgz", + "integrity": "sha512-XCWifEcNFFjjBHtor4Sfaj8rcpt+FkY0L6WdhD578SCDhV4VUm7fCkF3dv5a+fTcfQqvN9BsxBTvWbYO6iCjTg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-stream-types": "^2.0.1", + "uint8arraylist": "^2.0.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-sort": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-sort/-/it-sort-3.0.9.tgz", + "integrity": "sha512-jsM6alGaPiQbcAJdzMsuMh00uJcI+kD9TBoScB8TR75zUFOmHvhSsPi+Dmh2zfVkcoca+14EbfeIZZXTUGH63w==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "it-all": "^3.0.0" + } + }, + "node_modules/it-stream-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz", + "integrity": "sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-take": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/it-take/-/it-take-3.0.9.tgz", + "integrity": "sha512-XMeUbnjOcgrhFXPUqa7H0VIjYSV/BvyxxjCp76QHVAFDJw2LmR1SHxUFiqyGeobgzJr7P2ZwSRRJQGn4D2BVlA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/it-tar": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/it-tar/-/it-tar-6.0.5.tgz", + "integrity": "sha512-GxKBamsX2EZA6jrNh6xoeKmRpbOELgYhCk1ojhN0TFSBdxwkRBqBRc3sI43vTHRpI7i2o6ptrSxK3LLKWNvudg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "iso-constants": "^0.1.2", + "it-reader": "^6.0.1", + "it-stream-types": "^2.0.1", + "it-to-buffer": "^4.0.5", + "p-defer": "^4.0.0", + "uint8arraylist": "^2.3.2", + "uint8arrays": "^5.0.2" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/it-to-browser-readablestream": { + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/it-to-browser-readablestream/-/it-to-browser-readablestream-2.0.12.tgz", + "integrity": "sha512-9pcVGxY8jrfMUgCqPrxjVN0bl6fQXCK1NEbUq5Bi+APlr3q0s2AsQINBPcWYgJbMnSHAfoRDthsi4GHqtkvHgw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "get-iterator": "^2.0.1" + } + }, + "node_modules/it-to-buffer": { + "version": "4.0.10", + "resolved": "https://registry.npmjs.org/it-to-buffer/-/it-to-buffer-4.0.10.tgz", + "integrity": "sha512-dXNHSILSPVv+31nxav+egNxWA/RpSuAHCSurJCLxkFDpmzAyYPJwIkPfLkYiHLoJqyE6Z5nVFILp6aDvz9V5pw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.1.0" + } + }, + "node_modules/jest-environment-node": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-environment-node/-/jest-environment-node-29.7.0.tgz", + "integrity": "sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/environment": "^29.7.0", + "@jest/fake-timers": "^29.7.0", + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-mock": "^29.7.0", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-get-type": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-get-type/-/jest-get-type-29.6.3.tgz", + "integrity": "sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-haste-map": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-haste-map/-/jest-haste-map-29.7.0.tgz", + "integrity": "sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/graceful-fs": "^4.1.3", + "@types/node": "*", + "anymatch": "^3.0.3", + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.2.9", + "jest-regex-util": "^29.6.3", + "jest-util": "^29.7.0", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "walker": "^1.0.8" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "optionalDependencies": { + "fsevents": "^2.3.2" + } + }, + "node_modules/jest-message-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-message-util/-/jest-message-util-29.7.0.tgz", + "integrity": "sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.12.13", + "@jest/types": "^29.6.3", + "@types/stack-utils": "^2.0.0", + "chalk": "^4.0.0", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.4", + "pretty-format": "^29.7.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-mock": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-mock/-/jest-mock-29.7.0.tgz", + "integrity": "sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "jest-util": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-regex-util": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/jest-regex-util/-/jest-regex-util-29.6.3.tgz", + "integrity": "sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg==", + "license": "MIT", + "peer": true, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-util": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-util/-/jest-util-29.7.0.tgz", + "integrity": "sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "@types/node": "*", + "chalk": "^4.0.0", + "ci-info": "^3.2.0", + "graceful-fs": "^4.2.9", + "picomatch": "^2.2.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-validate/-/jest-validate-29.7.0.tgz", + "integrity": "sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/types": "^29.6.3", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^29.6.3", + "leven": "^3.1.0", + "pretty-format": "^29.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-validate/node_modules/camelcase": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", + "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/jest-worker": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-29.7.0.tgz", + "integrity": "sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@types/node": "*", + "jest-util": "^29.7.0", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/joycon": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", + "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "license": "MIT", + "peer": true + }, + "node_modules/js-yaml": { + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", + "license": "MIT", + "peer": true, + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/js-yaml/node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "license": "MIT", + "peer": true, + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/js2xmlparser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz", + "integrity": "sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "xmlcreate": "^2.0.4" + } + }, + "node_modules/jsc-safe-url": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/jsc-safe-url/-/jsc-safe-url-0.2.4.tgz", + "integrity": "sha512-0wM3YBWtYePOjfyXQH5MWQ8H7sdk5EXSwZvmSLKk2RboVQ2Bu239jycHDz5J/8Blf3K0Qnoy2b6xD+z10MFB+Q==", + "license": "0BSD", + "peer": true + }, + "node_modules/jsdoc": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz", + "integrity": "sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@babel/parser": "^7.20.15", + "@jsdoc/salty": "^0.2.1", + "@types/markdown-it": "^14.1.1", + "bluebird": "^3.7.2", + "catharsis": "^0.9.0", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.2", + "klaw": "^3.0.0", + "markdown-it": "^14.1.0", + "markdown-it-anchor": "^8.6.7", + "marked": "^4.0.10", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "underscore": "~1.13.2" + }, + "bin": { + "jsdoc": "jsdoc.js" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/jsesc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", + "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/json5": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "license": "MIT", + "peer": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/jsonfile": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.2.0.tgz", + "integrity": "sha512-FGuPw30AdOIUTRMC2OMRtQV+jkVj2cfPqSeWXv1NEAJ1qZ5zb1X6z1mFhbfOB/iy3ssJCD+3KuZ8r8C3uVFlAg==", + "dev": true, + "license": "MIT", + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.9" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/libp2p": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/libp2p/-/libp2p-3.1.7.tgz", + "integrity": "sha512-Yccp5frTOwyIB6Wt7KLHBBWc4UOfF03nDqbWrKV/0T056mWKd87YDI5kR248sSAyc/S0r3TrgSgTpBThUeHJFA==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "@chainsafe/is-ip": "^2.1.0", + "@chainsafe/netmask": "^2.0.0", + "@libp2p/crypto": "^5.1.14", + "@libp2p/interface": "^3.1.1", + "@libp2p/interface-internal": "^3.0.14", + "@libp2p/logger": "^6.2.3", + "@libp2p/multistream-select": "^7.0.14", + "@libp2p/peer-collections": "^7.0.14", + "@libp2p/peer-id": "^6.0.5", + "@libp2p/peer-store": "^12.0.14", + "@libp2p/utils": "^7.0.14", + "@multiformats/dns": "^1.0.6", + "@multiformats/multiaddr": "^13.0.1", + "@multiformats/multiaddr-matcher": "^3.0.1", + "any-signal": "^4.1.1", + "datastore-core": "^11.0.1", + "interface-datastore": "^9.0.1", + "it-merge": "^3.0.12", + "it-parallel": "^3.0.13", + "main-event": "^1.0.1", + "multiformats": "^13.4.0", + "p-defer": "^4.0.1", + "p-event": "^7.0.0", + "p-retry": "^7.0.0", + "progress-events": "^1.0.1", + "race-signal": "^2.0.0", + "uint8arrays": "^5.1.0" + } + }, + "node_modules/lighthouse-logger": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/lighthouse-logger/-/lighthouse-logger-1.4.2.tgz", + "integrity": "sha512-gPWxznF6TKmUHrOQjlVo2UbaL2EJ71mb2CCeRs/2qBpi4L/g4LUVc9+3lKQ6DTUZwJswfM7ainGrLO1+fOqa2g==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "debug": "^2.6.9", + "marky": "^1.2.2" + } + }, + "node_modules/lighthouse-logger/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/lighthouse-logger/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz", + "integrity": "sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true, + "license": "MIT" + }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, + "node_modules/load-tsconfig": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", + "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + } + }, + "node_modules/local-pkg": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.2.tgz", + "integrity": "sha512-arhlxbFRmoQHl33a0Zkle/YWlmNwoyt6QNZEIJcqNbdrsix5Lvc4HyyI3EnwxTYlZYc32EbYrQ8SzEZ7dqgg9A==", + "dev": true, + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.3.0", + "quansync": "^0.2.11" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.23", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.23.tgz", + "integrity": "sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==", + "license": "MIT", + "peer": true + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz", + "integrity": "sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "license": "ISC", + "peer": true, + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/magic-string": { + "version": "0.30.21", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.21.tgz", + "integrity": "sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/main-event": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/main-event/-/main-event-1.0.1.tgz", + "integrity": "sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/makeerror": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/makeerror/-/makeerror-1.0.12.tgz", + "integrity": "sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg==", + "license": "BSD-3-Clause", + "peer": true, + "dependencies": { + "tmpl": "1.0.5" + } + }, + "node_modules/markdown-it": { + "version": "14.1.1", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.1.tgz", + "integrity": "sha512-BuU2qnTti9YKgK5N+IeMubp14ZUKUUw7yeJbkjtosvHiP0AZ5c8IAgEMk79D0eC8F23r4Ac/q8cAIFdm2FtyoA==", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" + }, + "bin": { + "markdown-it": "bin/markdown-it.mjs" + } + }, + "node_modules/markdown-it-anchor": { + "version": "8.6.7", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz", + "integrity": "sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA==", + "dev": true, + "license": "Unlicense", + "peerDependencies": { + "@types/markdown-it": "*", + "markdown-it": "*" + } + }, + "node_modules/marked": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", + "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "dev": true, + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, + "node_modules/marky": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/marky/-/marky-1.3.0.tgz", + "integrity": "sha512-ocnPZQLNpvbedwTy9kNrQEsknEfgvcLMvOtz3sFeWApDq1MXH1TqkCIx58xlpESsfwQOnuBO9beyQuNGzVvuhQ==", + "license": "Apache-2.0", + "peer": true + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, + "node_modules/memoize-one": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz", + "integrity": "sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==", + "license": "MIT", + "peer": true + }, + "node_modules/merge-options": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/merge-options/-/merge-options-3.0.4.tgz", + "integrity": "sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==", + "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "license": "MIT", + "peer": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/metro": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro/-/metro-0.83.5.tgz", + "integrity": "sha512-BgsXevY1MBac/3ZYv/RfNFf/4iuW9X7f4H8ZNkiH+r667HD9sVujxcmu4jvEzGCAm4/WyKdZCuyhAcyhTHOucQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/code-frame": "^7.29.0", + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "accepts": "^2.0.0", + "chalk": "^4.0.0", + "ci-info": "^2.0.0", + "connect": "^3.6.5", + "debug": "^4.4.0", + "error-stack-parser": "^2.0.6", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "hermes-parser": "0.33.3", + "image-size": "^1.0.2", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "jsc-safe-url": "^0.2.2", + "lodash.throttle": "^4.1.1", + "metro-babel-transformer": "0.83.5", + "metro-cache": "0.83.5", + "metro-cache-key": "0.83.5", + "metro-config": "0.83.5", + "metro-core": "0.83.5", + "metro-file-map": "0.83.5", + "metro-resolver": "0.83.5", + "metro-runtime": "0.83.5", + "metro-source-map": "0.83.5", + "metro-symbolicate": "0.83.5", + "metro-transform-plugins": "0.83.5", + "metro-transform-worker": "0.83.5", + "mime-types": "^3.0.1", + "nullthrows": "^1.1.1", + "serialize-error": "^2.1.0", + "source-map": "^0.5.6", + "throat": "^5.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "metro": "src/cli.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-babel-transformer": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-babel-transformer/-/metro-babel-transformer-0.83.5.tgz", + "integrity": "sha512-d9FfmgUEVejTiSb7bkQeLRGl6aeno2UpuPm3bo3rCYwxewj03ymvOn8s8vnS4fBqAPQ+cE9iQM40wh7nGXR+eA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "flow-enums-runtime": "^0.0.6", + "hermes-parser": "0.33.3", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-babel-transformer/node_modules/hermes-estree": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", + "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "license": "MIT", + "peer": true + }, + "node_modules/metro-babel-transformer/node_modules/hermes-parser": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", + "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.33.3" + } + }, + "node_modules/metro-cache": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-cache/-/metro-cache-0.83.5.tgz", + "integrity": "sha512-oH+s4U+IfZyg8J42bne2Skc90rcuESIYf86dYittcdWQtPfcaFXWpByPyTuWk3rR1Zz3Eh5HOrcVImfEhhJLng==", + "license": "MIT", + "peer": true, + "dependencies": { + "exponential-backoff": "^3.1.1", + "flow-enums-runtime": "^0.0.6", + "https-proxy-agent": "^7.0.5", + "metro-core": "0.83.5" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-cache-key": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-cache-key/-/metro-cache-key-0.83.5.tgz", + "integrity": "sha512-Ycl8PBajB7bhbAI7Rt0xEyiF8oJ0RWX8EKkolV1KfCUlC++V/GStMSGpPLwnnBZXZWkCC5edBPzv1Hz1Yi0Euw==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-config": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-config/-/metro-config-0.83.5.tgz", + "integrity": "sha512-JQ/PAASXH7yczgV6OCUSRhZYME+NU8NYjI2RcaG5ga4QfQ3T/XdiLzpSb3awWZYlDCcQb36l4Vl7i0Zw7/Tf9w==", + "license": "MIT", + "peer": true, + "dependencies": { + "connect": "^3.6.5", + "flow-enums-runtime": "^0.0.6", + "jest-validate": "^29.7.0", + "metro": "0.83.5", + "metro-cache": "0.83.5", + "metro-core": "0.83.5", + "metro-runtime": "0.83.5", + "yaml": "^2.6.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-core": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-core/-/metro-core-0.83.5.tgz", + "integrity": "sha512-YcVcLCrf0ed4mdLa82Qob0VxYqfhmlRxUS8+TO4gosZo/gLwSvtdeOjc/Vt0pe/lvMNrBap9LlmvZM8FIsMgJQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "lodash.throttle": "^4.1.1", + "metro-resolver": "0.83.5" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-file-map": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-file-map/-/metro-file-map-0.83.5.tgz", + "integrity": "sha512-ZEt8s3a1cnYbn40nyCD+CsZdYSlwtFh2kFym4lo+uvfM+UMMH+r/BsrC6rbNClSrt+B7rU9T+Te/sh/NL8ZZKQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "^4.4.0", + "fb-watchman": "^2.0.0", + "flow-enums-runtime": "^0.0.6", + "graceful-fs": "^4.2.4", + "invariant": "^2.2.4", + "jest-worker": "^29.7.0", + "micromatch": "^4.0.4", + "nullthrows": "^1.1.1", + "walker": "^1.0.7" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-minify-terser": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-minify-terser/-/metro-minify-terser-0.83.5.tgz", + "integrity": "sha512-Toe4Md1wS1PBqbvB0cFxBzKEVyyuYTUb0sgifAZh/mSvLH84qA1NAWik9sISWatzvfWf3rOGoUoO5E3f193a3Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "terser": "^5.15.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-resolver": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-resolver/-/metro-resolver-0.83.5.tgz", + "integrity": "sha512-7p3GtzVUpbAweJeCcUJihJeOQl1bDuimO5ueo1K0BUpUtR41q5EilbQ3klt16UTPPMpA+tISWBtsrqU556mY1A==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-runtime": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-runtime/-/metro-runtime-0.83.5.tgz", + "integrity": "sha512-f+b3ue9AWTVlZe2Xrki6TAoFtKIqw30jwfk7GQ1rDUBQaE0ZQ+NkiMEtb9uwH7uAjJ87U7Tdx1Jg1OJqUfEVlA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/runtime": "^7.25.0", + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-source-map": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-source-map/-/metro-source-map-0.83.5.tgz", + "integrity": "sha512-VT9bb2KO2/4tWY9Z2yeZqTUao7CicKAOps9LUg2aQzsz+04QyuXL3qgf1cLUVRjA/D6G5u1RJAlN1w9VNHtODQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/traverse": "^7.29.0", + "@babel/types": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-symbolicate": "0.83.5", + "nullthrows": "^1.1.1", + "ob1": "0.83.5", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-source-map/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-symbolicate": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-symbolicate/-/metro-symbolicate-0.83.5.tgz", + "integrity": "sha512-EMIkrjNRz/hF+p0RDdxoE60+dkaTLPN3vaaGkFmX5lvFdO6HPfHA/Ywznzkev+za0VhPQ5KSdz49/MALBRteHA==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6", + "invariant": "^2.2.4", + "metro-source-map": "0.83.5", + "nullthrows": "^1.1.1", + "source-map": "^0.5.6", + "vlq": "^1.0.0" + }, + "bin": { + "metro-symbolicate": "src/index.js" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-symbolicate/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro-transform-plugins": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-transform-plugins/-/metro-transform-plugins-0.83.5.tgz", + "integrity": "sha512-KxYKzZL+lt3Os5H2nx7YkbkWVduLZL5kPrE/Yq+Prm/DE1VLhpfnO6HtPs8vimYFKOa58ncl60GpoX0h7Wm0Vw==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/template": "^7.28.6", + "@babel/traverse": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro-transform-worker": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/metro-transform-worker/-/metro-transform-worker-0.83.5.tgz", + "integrity": "sha512-8N4pjkNXc6ytlP9oAM6MwqkvUepNSW39LKYl9NjUMpRDazBQ7oBpQDc8Sz4aI8jnH6AGhF7s1m/ayxkN1t04yA==", + "license": "MIT", + "peer": true, + "dependencies": { + "@babel/core": "^7.25.2", + "@babel/generator": "^7.29.1", + "@babel/parser": "^7.29.0", + "@babel/types": "^7.29.0", + "flow-enums-runtime": "^0.0.6", + "metro": "0.83.5", + "metro-babel-transformer": "0.83.5", + "metro-cache": "0.83.5", + "metro-cache-key": "0.83.5", + "metro-minify-terser": "0.83.5", + "metro-source-map": "0.83.5", + "metro-transform-plugins": "0.83.5", + "nullthrows": "^1.1.1" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/metro/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-estree": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-estree/-/hermes-estree-0.33.3.tgz", + "integrity": "sha512-6kzYZHCk8Fy1Uc+t3HGYyJn3OL4aeqKLTyina4UFtWl8I0kSL7OmKThaiX+Uh2f8nGw3mo4Ifxg0M5Zk3/Oeqg==", + "license": "MIT", + "peer": true + }, + "node_modules/metro/node_modules/hermes-parser": { + "version": "0.33.3", + "resolved": "https://registry.npmjs.org/hermes-parser/-/hermes-parser-0.33.3.tgz", + "integrity": "sha512-Yg3HgaG4CqgyowtYjX/FsnPAuZdHOqSMtnbpylbptsQ9nwwSKsy6uRWcGO5RK0EqiX12q8HvDWKgeAVajRO5DA==", + "license": "MIT", + "peer": true, + "dependencies": { + "hermes-estree": "0.33.3" + } + }, + "node_modules/metro/node_modules/mime-db": { + "version": "1.54.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.54.0.tgz", + "integrity": "sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/metro/node_modules/mime-types": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-3.0.2.tgz", + "integrity": "sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "mime-db": "^1.54.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/metro/node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "license": "BSD-3-Clause", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/metro/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "license": "MIT", + "peer": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.5.tgz", + "integrity": "sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==", + "license": "ISC", + "peer": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "license": "MIT" + }, + "node_modules/mlly": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.8.2.tgz", + "integrity": "sha512-d+ObxMQFmbt10sretNDytwt85VrbkhhUA/JBGm1MPaWJ65Cl4wOgLaB1NYvJSZ0Ef03MMEU/0xpPMXUIQ29UfA==", + "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.16.0", + "pathe": "^2.0.3", + "pkg-types": "^1.3.1", + "ufo": "^1.6.3" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "dev": true, + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, + "node_modules/mortice": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/mortice/-/mortice-3.3.1.tgz", + "integrity": "sha512-t3oESfijIPGsmsdLEKjF+grHfrbnKSXflJtgb1wY14cjxZpS6GnhHRXTxxzCAoCCnq1YYfpEPwY3gjiCPhOufQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.0", + "it-queue": "^1.1.0", + "main-event": "^1.0.0" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/multicast-dns": { + "version": "7.2.5", + "resolved": "https://registry.npmjs.org/multicast-dns/-/multicast-dns-7.2.5.tgz", + "integrity": "sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==", + "license": "MIT", + "dependencies": { + "dns-packet": "^5.2.2", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multiformats": { + "version": "13.4.2", + "resolved": "https://registry.npmjs.org/multiformats/-/multiformats-13.4.2.tgz", + "integrity": "sha512-eh6eHCrRi1+POZ3dA+Dq1C6jhP1GNtr9CRINMb67OKzqW9I5DUuZM/3jLPlzhgpGeiNUlEGEbkCYChXMCc/8DQ==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "5.1.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.1.7.tgz", + "integrity": "sha512-ua3NDgISf6jdwezAheMOk4mbE1LXjm1DfMUDMuJf4AqxLFK3ccGpgWizwa5YV7Yz9EpXwEaWoRXSb/BnV0t5dQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/napi-build-utils": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-2.0.0.tgz", + "integrity": "sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==", + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-1.0.0.tgz", + "integrity": "sha512-8Ofs/AUQh8MaEcrlq5xOX0CQ9ypTF5dl78mjlMNfOK08fzpgTHQRQPBxcPlEtIw0yRpws+Zo/3r+5WRby7u3Gg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/netmask": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/netmask/-/netmask-2.0.2.tgz", + "integrity": "sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==", + "license": "MIT", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz", + "integrity": "sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/node-abi": { + "version": "3.89.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.89.0.tgz", + "integrity": "sha512-6u9UwL0HlAl21+agMN3YAMXcKByMqwGx+pq+P76vii5f7hTPtKDp08/H9py6DY+cfDw7kQNTGEj/rly3IgbNQA==", + "license": "MIT", + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/node-datachannel": { + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/node-datachannel/-/node-datachannel-0.29.0.tgz", + "integrity": "sha512-aCRJA5uZRqxMvQAl2QtOnCkodF1qJa1dCUVaXW9D7rku2p6F7PWe5OuRLcIgOYe+e2ZyJu0LefIQ95TtCn6xxA==", + "hasInstallScript": true, + "license": "MPL 2.0", + "dependencies": { + "prebuild-install": "^7.1.3" + }, + "engines": { + "node": ">=18.20.0" + } + }, + "node_modules/node-fetch": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "license": "MIT", + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-forge": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-1.4.0.tgz", + "integrity": "sha512-LarFH0+6VfriEhqMMcLX2F7SwSXeWwnEAJEsYm5QKWchiVYVvJyV9v7UDvUv+w5HO23ZpQTXDv/GxdDdMyOuoQ==", + "license": "(BSD-3-Clause OR GPL-2.0)", + "engines": { + "node": ">= 6.13.0" + } + }, + "node_modules/node-int64": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", + "integrity": "sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==", + "license": "MIT", + "peer": true + }, + "node_modules/node-releases": { + "version": "2.0.36", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.36.tgz", + "integrity": "sha512-TdC8FSgHz8Mwtw9g5L4gR/Sh9XhSP/0DEkQxfEFXOpiul5IiHgHan2VhYYb6agDSfp4KuvltmGApc8HMgUrIkA==", + "license": "MIT", + "peer": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nullthrows": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/nullthrows/-/nullthrows-1.1.1.tgz", + "integrity": "sha512-2vPPEi+Z7WqML2jZYddDIfy5Dqb0r2fze2zTxNNknZaFpVHU3mFB3R+DWeJWGVx0ecvttSGlJTI+WG+8Z4cDWw==", + "license": "MIT", + "peer": true + }, + "node_modules/ob1": { + "version": "0.83.5", + "resolved": "https://registry.npmjs.org/ob1/-/ob1-0.83.5.tgz", + "integrity": "sha512-vNKPYC8L5ycVANANpF/S+WZHpfnRWKx/F3AYP4QMn6ZJTh+l2HOrId0clNkEmua58NB9vmI9Qh7YOoV/4folYg==", + "license": "MIT", + "peer": true, + "dependencies": { + "flow-enums-runtime": "^0.0.6" + }, + "engines": { + "node": ">=20.19.4" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.4.tgz", + "integrity": "sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.7.tgz", + "integrity": "sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0", + "has-symbols": "^1.1.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha512-ikqdkGAAyf/X/gPhXGvfgAytDZtDbr+bkNUJ0N9h5MI/dmdgCs3l6hoHrcUv41sRKew3jIwrp4qQDXiK99Utww==", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-defer": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-4.0.1.tgz", + "integrity": "sha512-Mr5KC5efvAK5VUptYEIopP1bakB85k2IWXaRC0rsh1uwn1L6M0LVml8OIQ4Gudg4oyZakf7FmeRLkMMtZW1i5A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-event": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/p-event/-/p-event-7.1.0.tgz", + "integrity": "sha512-/lkPs5W1aC3cp6vqZefpdosOn65J571sWodyfOQiF0+tmDCpU+H8Atwpu0vQROCVUlZuToDN5eyTLsMLLc54mg==", + "license": "MIT", + "dependencies": { + "p-timeout": "^7.0.1" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "license": "MIT", + "peer": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-queue": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/p-queue/-/p-queue-9.1.0.tgz", + "integrity": "sha512-O/ZPaXuQV29uSLbxWBGGZO1mCQXV2BLIwUr59JUU9SoH76mnYvtms7aafH/isNSNGwuEfP6W/4xD0/TJXxrizw==", + "license": "MIT", + "dependencies": { + "eventemitter3": "^5.0.1", + "p-timeout": "^7.0.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-retry": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-7.1.1.tgz", + "integrity": "sha512-J5ApzjyRkkf601HpEeykoiCvzHQjWxPAHhyjFcEUP2SWq0+35NKh8TLhpLw+Dkq5TZBFvUM6UigdE9hIVYTl5w==", + "license": "MIT", + "dependencies": { + "is-network-error": "^1.1.0" + }, + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-timeout": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-7.0.1.tgz", + "integrity": "sha512-AxTM2wDGORHGEkPCt8yqxOTMgpfbEHqF51f/5fJCmwFC3C/zNcGT63SymH2ttOAaiIws2zVg4+izQCjrakcwHg==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-wait-for": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/p-wait-for/-/p-wait-for-6.0.0.tgz", + "integrity": "sha512-2kKzMtjS8TVcpCOU/gr3vZ4K/WIyS1AsEFXFWapM/0lERCdyTbB6ZeuCIp+cL1aeLZfQoMdZFCBTHiK4I9UtOw==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/param-case": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", + "integrity": "sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A==", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz", + "integrity": "sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g==", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "dev": true, + "license": "MIT" + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz", + "integrity": "sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==", + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pirates": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.7.tgz", + "integrity": "sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==", + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/pkg-types": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.3.0.tgz", + "integrity": "sha512-SIqCzDRg0s9npO5XQ3tNZioRY1uK06lA41ynBC1YmFTmnY6FjUjVt6s4LoADmwoig1qqD0oK8h1p/8mlMx8Oig==", + "dev": true, + "license": "MIT", + "dependencies": { + "confbox": "^0.2.2", + "exsolve": "^1.0.7", + "pathe": "^2.0.3" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz", + "integrity": "sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss-load-config": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", + "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "lilconfig": "^3.1.1" + }, + "engines": { + "node": ">= 18" + }, + "peerDependencies": { + "jiti": ">=1.21.0", + "postcss": ">=8.0.9", + "tsx": "^4.8.1", + "yaml": "^2.4.2" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + }, + "postcss": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/prebuild-install": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.3.tgz", + "integrity": "sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==", + "deprecated": "No longer maintained. Please contact the author of the relevant native addon; alternatives are available.", + "license": "MIT", + "dependencies": { + "detect-libc": "^2.0.0", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^2.0.0", + "node-abi": "^3.3.0", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^4.0.0", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0" + }, + "bin": { + "prebuild-install": "bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "license": "MIT", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/progress-events": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz", + "integrity": "sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/promise": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/promise/-/promise-8.3.0.tgz", + "integrity": "sha512-rZPNPKTOYVNEEKFaq1HqTgOwZD+4/YHS5ukLzQCypkj+OkYx7iv0mA91lJlpPPZ8vMau3IIGj5Qlwrx+8iiSmg==", + "license": "MIT", + "peer": true, + "dependencies": { + "asap": "~2.0.6" + } + }, + "node_modules/protons-runtime": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz", + "integrity": "sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8-varint": "^2.0.2", + "uint8arraylist": "^2.4.3", + "uint8arrays": "^5.0.1" + } + }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "license": "MIT" + }, + "node_modules/pump": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.4.tgz", + "integrity": "sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==", + "license": "MIT", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", + "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/pvtsutils": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/pvtsutils/-/pvtsutils-1.3.6.tgz", + "integrity": "sha512-PLgQXQ6H2FWCaeRak8vvk1GW462lMxB5s3Jm673N82zI4vqtVUPuZdffdZbPDFRoU8kAhItWFtPCWiPpp4/EDg==", + "license": "MIT", + "dependencies": { + "tslib": "^2.8.1" + } + }, + "node_modules/pvutils": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/pvutils/-/pvutils-1.1.5.tgz", + "integrity": "sha512-KTqnxsgGiQ6ZAzZCVlJH5eOjSnvlyEgx1m8bkRJfOhmGRqfo5KLvmAlACQkrjEtOQ4B7wF9TdSLIs9O90MX9xA==", + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/quansync": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.11.tgz", + "integrity": "sha512-AifT7QEbW9Nri4tAwR5M/uzpBuqfZf+zwaEM/QkzEjj7NBuFD2rBuy0K3dE+8wltbezDV7JMA0WfnCPYRSYbXA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, + "node_modules/queue": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/queue/-/queue-6.0.2.tgz", + "integrity": "sha512-iHZWu+q3IdFZFX36ro/lKBkSvfkztY5Y7HMiPlOUjhupPcG2JMfst2KKEpu5XndviX/3UhFbRngUPNKtgvtZiA==", + "license": "MIT", + "peer": true, + "dependencies": { + "inherits": "~2.0.3" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "7.3.0", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-7.3.0.tgz", + "integrity": "sha512-k9lSsjl36EJdK7I06v7APZCbyGT2vMTsYSRX1Q2nbYmnkBqgUhRkAuzH08Ciotteu/PLJmIF2+tti7o3C/ts2g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/rabin-wasm": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/rabin-wasm/-/rabin-wasm-0.1.5.tgz", + "integrity": "sha512-uWgQTo7pim1Rnj5TuWcCewRDTf0PEFTSlaUjWP4eY9EbLV9em08v89oCz/WO+wRxpYuO36XEHp4wgYQnAgOHzA==", + "license": "MIT", + "dependencies": { + "@assemblyscript/loader": "^0.9.4", + "bl": "^5.0.0", + "debug": "^4.3.1", + "minimist": "^1.2.5", + "node-fetch": "^2.6.1", + "readable-stream": "^3.6.0" + }, + "bin": { + "rabin-wasm": "cli/bin.js" + } + }, + "node_modules/rabin-wasm/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/race-event": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/race-event/-/race-event-1.6.1.tgz", + "integrity": "sha512-vi7WH5g5KoTFpu2mme/HqZiWH14XSOtg5rfp6raBskBHl7wnmy3F/biAIyY5MsK+BHWhoPhxtZ1Y2R7OHHaWyQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "abort-error": "^1.0.1" + } + }, + "node_modules/race-signal": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/race-signal/-/race-signal-2.0.0.tgz", + "integrity": "sha512-P31bLhE4ByBX/70QDXMutxnqgwrF1WUXea1O8DXuviAgkdbQ1iQMQotNgzJIBC9yUSn08u/acZrMUhgw7w6GpA==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/random-int": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/random-int/-/random-int-3.1.0.tgz", + "integrity": "sha512-h8CRz8cpvzj0hC/iH/1Gapgcl2TQ6xtnCpyOI5WvWfXf/yrDx2DOU+tD9rX23j36IF11xg1KqB9W11Z18JPMdw==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", + "dependencies": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "bin": { + "rc": "cli.js" + } + }, + "node_modules/rc/node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react": { + "version": "19.2.4", + "resolved": "https://registry.npmjs.org/react/-/react-19.2.4.tgz", + "integrity": "sha512-9nfp2hYpCwOjAN+8TZFGhtWEwgvWHXqESH8qT89AT/lWklpLON22Lc8pEtnpsZz7VmawabSU0gCjnj8aC0euHQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/react-devtools-core": { + "version": "6.1.5", + "resolved": "https://registry.npmjs.org/react-devtools-core/-/react-devtools-core-6.1.5.tgz", + "integrity": "sha512-ePrwPfxAnB+7hgnEr8vpKxL9cmnp7F322t8oqcPshbIQQhDKgFDW4tjhF2wjVbdXF9O/nyuy3sQWd9JGpiLPvA==", + "license": "MIT", + "peer": true, + "dependencies": { + "shell-quote": "^1.6.1", + "ws": "^7" + } + }, + "node_modules/react-devtools-core/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-is": { + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", + "integrity": "sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==", + "license": "MIT", + "peer": true + }, + "node_modules/react-native": { + "version": "0.84.1", + "resolved": "https://registry.npmjs.org/react-native/-/react-native-0.84.1.tgz", + "integrity": "sha512-0PjxOyXRu3tZ8EobabxSukvhKje2HJbsZikR0U+pvS0pYZza2hXKjcSBiBdFN4h9D0S3v6a8kkrDK6WTRKMwzg==", + "license": "MIT", + "peer": true, + "dependencies": { + "@jest/create-cache-key-function": "^29.7.0", + "@react-native/assets-registry": "0.84.1", + "@react-native/codegen": "0.84.1", + "@react-native/community-cli-plugin": "0.84.1", + "@react-native/gradle-plugin": "0.84.1", + "@react-native/js-polyfills": "0.84.1", + "@react-native/normalize-colors": "0.84.1", + "@react-native/virtualized-lists": "0.84.1", + "abort-controller": "^3.0.0", + "anser": "^1.4.9", + "ansi-regex": "^5.0.0", + "babel-jest": "^29.7.0", + "babel-plugin-syntax-hermes-parser": "0.32.0", + "base64-js": "^1.5.1", + "commander": "^12.0.0", + "flow-enums-runtime": "^0.0.6", + "hermes-compiler": "250829098.0.9", + "invariant": "^2.2.4", + "jest-environment-node": "^29.7.0", + "memoize-one": "^5.0.0", + "metro-runtime": "^0.83.3", + "metro-source-map": "^0.83.3", + "nullthrows": "^1.1.1", + "pretty-format": "^29.7.0", + "promise": "^8.3.0", + "react-devtools-core": "^6.1.5", + "react-refresh": "^0.14.0", + "regenerator-runtime": "^0.13.2", + "scheduler": "0.27.0", + "semver": "^7.1.3", + "stacktrace-parser": "^0.1.10", + "tinyglobby": "^0.2.15", + "whatwg-fetch": "^3.0.0", + "ws": "^7.5.10", + "yargs": "^17.6.2" + }, + "bin": { + "react-native": "cli.js" + }, + "engines": { + "node": ">= 20.19.4" + }, + "peerDependencies": { + "@types/react": "^19.1.1", + "react": "^19.2.3" + }, + "peerDependenciesMeta": { + "@types/react": { + "optional": true + } + } + }, + "node_modules/react-native-webrtc": { + "version": "124.0.7", + "resolved": "https://registry.npmjs.org/react-native-webrtc/-/react-native-webrtc-124.0.7.tgz", + "integrity": "sha512-gnXPdbUS8IkKHq9WNaWptW/yy5s6nMyI6cNn90LXdobPVCgYSk6NA2uUGdT4c4J14BRgaFA95F+cR28tUPkMVA==", + "license": "MIT", + "dependencies": { + "base64-js": "1.5.1", + "debug": "4.3.4", + "event-target-shim": "6.0.2" + }, + "peerDependencies": { + "react-native": ">=0.60.0" + } + }, + "node_modules/react-native-webrtc/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "license": "MIT", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/react-native-webrtc/node_modules/event-target-shim": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-6.0.2.tgz", + "integrity": "sha512-8q3LsZjRezbFZ2PN+uP+Q7pnHUMmAOziU2vA2OwoFaKIXxlxl38IylhSSgUorWu/rf4er67w0ikBqjBFk/pomA==", + "license": "MIT", + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + } + }, + "node_modules/react-native-webrtc/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "license": "MIT" + }, + "node_modules/react-native/node_modules/commander": { + "version": "12.1.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-12.1.0.tgz", + "integrity": "sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/react-native/node_modules/ws": { + "version": "7.5.10", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.10.tgz", + "integrity": "sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8.3.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": "^5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/react-refresh": { + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/readable-stream": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-4.7.0.tgz", + "integrity": "sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==", + "license": "MIT", + "dependencies": { + "abort-controller": "^3.0.0", + "buffer": "^6.0.3", + "events": "^3.3.0", + "process": "^0.11.10", + "string_decoder": "^1.3.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/readdirp": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz", + "integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.18.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/reflect-metadata": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/reflect-metadata/-/reflect-metadata-0.2.2.tgz", + "integrity": "sha512-urBwgfrvVP/eAyXx4hluJivBKzuEbSQs9rKWCrCkbSxNv8mxPcUZKeuoF3Uy4mJl3Lwprp6yy5/39VWigZ4K6Q==", + "license": "Apache-2.0" + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz", + "integrity": "sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.7", + "get-proto": "^1.0.1", + "which-builtin-type": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", + "license": "MIT", + "peer": true + }, + "node_modules/regexp.escape": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/regexp.escape/-/regexp.escape-2.0.1.tgz", + "integrity": "sha512-JItRb4rmyTzmERBkAf6J87LjDPy/RscIwmaJQ3gsFlAzrmZbZU8LwBw5IydFZXW9hqpgbPlGbMhtpqtuAhMgtg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.3", + "es-errors": "^1.3.0", + "for-each": "^0.3.3", + "safe-regex-test": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz", + "integrity": "sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "set-function-name": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requizzle": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", + "integrity": "sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash": "^4.17.21" + } + }, + "node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/resolve.exports": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/retimeable-signal": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/retimeable-signal/-/retimeable-signal-1.0.1.tgz", + "integrity": "sha512-Cy26CYfbWnYu8HMoJeDhaMpW/EYFIbne3vMf6G9RSrOyWYXbPehja/BEdzpqmM84uy2bfBD7NPZhoQ4GZEtgvg==", + "license": "Apache-2.0 OR MIT" + }, + "node_modules/reusify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "deprecated": "Rimraf versions prior to v4 are no longer supported", + "license": "ISC", + "peer": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rollup": { + "version": "4.60.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.60.1.tgz", + "integrity": "sha512-VmtB2rFU/GroZ4oL8+ZqXgSA38O6GR8KSIvWmEFv63pQ0G6KaBH9s07PO8XTXP4vI+3UJUEypOfjkGfmSBBR0w==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.8" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.60.1", + "@rollup/rollup-android-arm64": "4.60.1", + "@rollup/rollup-darwin-arm64": "4.60.1", + "@rollup/rollup-darwin-x64": "4.60.1", + "@rollup/rollup-freebsd-arm64": "4.60.1", + "@rollup/rollup-freebsd-x64": "4.60.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.60.1", + "@rollup/rollup-linux-arm-musleabihf": "4.60.1", + "@rollup/rollup-linux-arm64-gnu": "4.60.1", + "@rollup/rollup-linux-arm64-musl": "4.60.1", + "@rollup/rollup-linux-loong64-gnu": "4.60.1", + "@rollup/rollup-linux-loong64-musl": "4.60.1", + "@rollup/rollup-linux-ppc64-gnu": "4.60.1", + "@rollup/rollup-linux-ppc64-musl": "4.60.1", + "@rollup/rollup-linux-riscv64-gnu": "4.60.1", + "@rollup/rollup-linux-riscv64-musl": "4.60.1", + "@rollup/rollup-linux-s390x-gnu": "4.60.1", + "@rollup/rollup-linux-x64-gnu": "4.60.1", + "@rollup/rollup-linux-x64-musl": "4.60.1", + "@rollup/rollup-openbsd-x64": "4.60.1", + "@rollup/rollup-openharmony-arm64": "4.60.1", + "@rollup/rollup-win32-arm64-msvc": "4.60.1", + "@rollup/rollup-win32-ia32-msvc": "4.60.1", + "@rollup/rollup-win32-x64-gnu": "4.60.1", + "@rollup/rollup-win32-x64-msvc": "4.60.1", + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-array-concat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-push-apply/-/safe-push-apply-1.0.0.tgz", + "integrity": "sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/sanitize-filename": { + "version": "1.6.4", + "resolved": "https://registry.npmjs.org/sanitize-filename/-/sanitize-filename-1.6.4.tgz", + "integrity": "sha512-9ZyI08PsvdQl2r/bBIGubpVdR3RR9sY6RDiWFPreA21C/EFlQhmgo20UZlNjZMMZNubusLhAQozkA0Od5J21Eg==", + "license": "WTFPL OR ISC", + "dependencies": { + "truncate-utf8-bytes": "^1.0.0" + } + }, + "node_modules/sax": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.6.0.tgz", + "integrity": "sha512-6R3J5M4AcbtLUdZmRv2SygeVaM7IhrLXu9BmnOGmmACak8fiUtOsYNWUS4uK7upbmHIBbLBeFeI//477BKLBzA==", + "license": "BlueOak-1.0.0", + "engines": { + "node": ">=11.0.0" + } + }, + "node_modules/scheduler": { + "version": "0.27.0", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.27.0.tgz", + "integrity": "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q==", + "license": "MIT", + "peer": true + }, + "node_modules/semver": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.4.tgz", + "integrity": "sha512-vFKC2IEtQnVhpT78h1Yp8wzwrf8CM+MzKMHGJZfBtzhZNycRFnXsHk6E5TxIkkMsgNS7mdX3AGB7x2QM2di4lA==", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/send": { + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", + "license": "MIT", + "peer": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "~2.4.1", + "range-parser": "~1.2.1", + "statuses": "~2.0.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "license": "MIT", + "peer": true, + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/send/node_modules/debug/node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "license": "MIT", + "peer": true + }, + "node_modules/send/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "license": "MIT", + "peer": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/send/node_modules/statuses": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/serialize-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-2.1.0.tgz", + "integrity": "sha512-ghgmKt5o4Tly5yEG/UJp8qTd0AN7Xalw4XBtDEKP655B699qMEtra1WlXeE6WIvdEG481JvRxULKsInq/iNysw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/serve-static": { + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", + "license": "MIT", + "peer": true, + "dependencies": { + "encodeurl": "~2.0.0", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "~0.19.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-static/node_modules/encodeurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-2.0.0.tgz", + "integrity": "sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/set-proto/-/set-proto-1.0.0.tgz", + "integrity": "sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "license": "ISC", + "peer": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "license": "MIT", + "peer": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/showdown": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz", + "integrity": "sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "commander": "^9.0.0" + }, + "bin": { + "showdown": "bin/showdown.js" + }, + "funding": { + "type": "individual", + "url": "https://www.paypal.me/tiviesantos" + } + }, + "node_modules/showdown/node_modules/commander": { + "version": "9.5.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz", + "integrity": "sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || >=14" + } + }, + "node_modules/side-channel": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "license": "ISC", + "peer": true + }, + "node_modules/simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/simple-get": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", + "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "decompress-response": "^6.0.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sparse-array": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/sparse-array/-/sparse-array-1.3.2.tgz", + "integrity": "sha512-ZT711fePGn3+kQyLuv1fpd3rNSkNF8vd5Kv2D+qnOANeyKs3fx6bUMGWRPvgTTcYV64QMqZKZwcuaQSP3AZ0tg==", + "license": "ISC" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/stack-utils": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", + "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", + "license": "MIT", + "peer": true, + "dependencies": { + "escape-string-regexp": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/stackframe": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/stackframe/-/stackframe-1.3.4.tgz", + "integrity": "sha512-oeVtt7eWQS+Na6F//S4kJ2K2VbRlS9D43mAlMyVpVWovy9o+jfgH8O9agzANzaiLjclA0oYzUXEM4PurhSUChw==", + "license": "MIT", + "peer": true + }, + "node_modules/stacktrace-parser": { + "version": "0.1.11", + "resolved": "https://registry.npmjs.org/stacktrace-parser/-/stacktrace-parser-0.1.11.tgz", + "integrity": "sha512-WjlahMgHmCJpqzU8bIBy4qtsZdU9lRlcZE3Lvyej6t4tuOuv1vk57OW3MBrj6hXBFx/nNoC9MPMTcr5YA7NQbg==", + "license": "MIT", + "peer": true, + "dependencies": { + "type-fest": "^0.7.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "license": "MIT", + "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.8.tgz", + "integrity": "sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz", + "integrity": "sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/strtok3": { + "version": "10.3.5", + "resolved": "https://registry.npmjs.org/strtok3/-/strtok3-10.3.5.tgz", + "integrity": "sha512-ki4hZQfh5rX0QDLLkOCj+h+CVNkqmp/CMf8v8kZpkNVK6jGQooMytqzLZYUVYIZcFZ6yDB70EfD8POcFXiF5oA==", + "license": "MIT", + "dependencies": { + "@tokenizer/token": "^0.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/sucrase": { + "version": "3.35.1", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.1.tgz", + "integrity": "sha512-DhuTmvZWux4H1UOnWMB3sk0sbaCVOoQZjv8u1rDoTV0HTdGem9hkAZtl4JZy8P2z4Bg0nT+YMeOFyVr4zcG5Tw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "tinyglobby": "^0.2.11", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 6" + } + }, + "node_modules/super-regex": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/super-regex/-/super-regex-0.2.0.tgz", + "integrity": "sha512-WZzIx3rC1CvbMDloLsVw0lkZVKJWbrkJ0k1ghKFmcnPrW1+jWbgTkTEWVtD9lMdmI4jZEz40+naBxl1dCUhXXw==", + "license": "MIT", + "dependencies": { + "clone-regexp": "^3.0.0", + "function-timeout": "^0.1.0", + "time-span": "^5.1.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "license": "MIT", + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/tar-fs": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.4.tgz", + "integrity": "sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==", + "license": "MIT", + "dependencies": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/tar-stream/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/terser": { + "version": "5.46.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.46.1.tgz", + "integrity": "sha512-vzCjQO/rgUuK9sf8VJZvjqiqiHFaZLnOiimmUuOKODxWL8mm/xua7viT7aqX7dgPY60otQjUotzFMmCB4VdmqQ==", + "license": "BSD-2-Clause", + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.15.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "license": "MIT" + }, + "node_modules/test-exclude": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz", + "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==", + "license": "ISC", + "peer": true, + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "license": "MIT", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "license": "MIT", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/throat": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/throat/-/throat-5.0.0.tgz", + "integrity": "sha512-fcwX4mndzpLQKBS1DVYhGAcYaYt7vsHNIvQV+WXMvnow5cgjPphq5CaayLaGsjRdSCKZFNGt7/GYAuXaNOiYCA==", + "license": "MIT", + "peer": true + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "license": "MIT" + }, + "node_modules/time-span": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/time-span/-/time-span-5.1.0.tgz", + "integrity": "sha512-75voc/9G4rDIJleOo4jPvN4/YC4GRZrY8yy1uU4lwrB3XEQbWve8zXoO5No4eFrGcTAMYyoY67p8jRQdtA1HbA==", + "license": "MIT", + "dependencies": { + "convert-hrtime": "^5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/timestamp-nano": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.1.tgz", + "integrity": "sha512-4oGOVZWTu5sl89PtCDnhQBSt7/vL1zVEwAfxH1p49JhTosxzVQWYBYFRFZ8nJmo0G6f824iyP/44BFAwIoKvIA==", + "license": "MIT", + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyglobby": { + "version": "0.2.15", + "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", + "integrity": "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.3" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.5.0.tgz", + "integrity": "sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.4.tgz", + "integrity": "sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tmpl": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", + "license": "BSD-3-Clause", + "peer": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/token-types": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/token-types/-/token-types-6.1.2.tgz", + "integrity": "sha512-dRXchy+C0IgK8WPC6xvCHFRIWYUbqqdEIKPaKo/AcTUNzwLTK6AH7RjdLWsEZcAN/TBdtfUw3PYEgPr5VPr6ww==", + "license": "MIT", + "dependencies": { + "@borewit/text-codec": "^0.2.1", + "@tokenizer/token": "^0.3.0", + "ieee754": "^1.2.1" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Borewit" + } + }, + "node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "license": "MIT", + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/truncate-utf8-bytes": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz", + "integrity": "sha512-95Pu1QXQvruGEhv62XCMO3Mm90GscOCClvrIUwCM0PYOXK3kaF3l3sIHxx71ThJfcbM2O5Au6SO3AWCSEfW4mQ==", + "license": "WTFPL", + "dependencies": { + "utf8-byte-length": "^1.0.1" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "license": "0BSD" + }, + "node_modules/tsup": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz", + "integrity": "sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "bundle-require": "^5.1.0", + "cac": "^6.7.14", + "chokidar": "^4.0.3", + "consola": "^3.4.0", + "debug": "^4.4.0", + "esbuild": "^0.25.0", + "fix-dts-default-cjs-exports": "^1.0.0", + "joycon": "^3.1.1", + "picocolors": "^1.1.1", + "postcss-load-config": "^6.0.1", + "resolve-from": "^5.0.0", + "rollup": "^4.34.8", + "source-map": "0.8.0-beta.0", + "sucrase": "^3.35.0", + "tinyexec": "^0.3.2", + "tinyglobby": "^0.2.11", + "tree-kill": "^1.2.2" + }, + "bin": { + "tsup": "dist/cli-default.js", + "tsup-node": "dist/cli-node.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@microsoft/api-extractor": "^7.36.0", + "@swc/core": "^1", + "postcss": "^8.4.12", + "typescript": ">=4.5.0" + }, + "peerDependenciesMeta": { + "@microsoft/api-extractor": { + "optional": true + }, + "@swc/core": { + "optional": true + }, + "postcss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/tsup/node_modules/source-map": { + "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", + "deprecated": "The work that was done in this beta branch won't be included in future versions", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "whatwg-url": "^7.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/tsup/node_modules/tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/tsup/node_modules/webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/tsup/node_modules/whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "license": "MIT", + "dependencies": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "node_modules/tsyringe": { + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/tsyringe/-/tsyringe-4.10.0.tgz", + "integrity": "sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==", + "license": "MIT", + "dependencies": { + "tslib": "^1.9.3" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/tsyringe/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "license": "0BSD" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.7.1.tgz", + "integrity": "sha512-Ne2YiiGN8bmrmJJEuTWTLJR32nh/JdL1+PSicowtNb0WFpn59GK8/lfD61bVtzguz7b3PBt74nxpv/Pw5po5Rg==", + "license": "(MIT OR CC0-1.0)", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz", + "integrity": "sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz", + "integrity": "sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz", + "integrity": "sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "for-each": "^0.3.3", + "gopd": "^1.2.0", + "has-proto": "^1.2.0", + "is-typed-array": "^1.1.15", + "reflect.getprototypeof": "^1.0.9" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.8.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz", + "integrity": "sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, + "node_modules/ufo": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.3.tgz", + "integrity": "sha512-yDJTmhydvl5lJzBmy/hyOAA0d+aqCBuwl818haVdYCRrWV84o7YyeVm4QlVHStqNrrJSTb6jKuFAVqAFsr+K3Q==", + "dev": true, + "license": "MIT" + }, + "node_modules/uint8-varint": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.4.tgz", + "integrity": "sha512-FwpTa7ZGA/f/EssWAb5/YV6pHgVF1fViKdW8cWaEarjB8t7NyofSWBdOTyFPaGuUG4gx3v1O3PQ8etsiOs3lcw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arraylist": "^2.0.0", + "uint8arrays": "^5.0.0" + } + }, + "node_modules/uint8array-extras": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.5.0.tgz", + "integrity": "sha512-rvKSBiC5zqCCiDZ9kAOszZcDvdAHwwIKJG33Ykj43OKcWsnmcBRL09YTU4nOeHZ8Y2a7l1MgTd08SBe9A8Qj6A==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/uint8arraylist": { + "version": "2.4.8", + "resolved": "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz", + "integrity": "sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "uint8arrays": "^5.0.1" + } + }, + "node_modules/uint8arrays": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz", + "integrity": "sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "multiformats": "^13.0.0" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/underscore": { + "version": "1.13.8", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.8.tgz", + "integrity": "sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==", + "dev": true, + "license": "MIT" + }, + "node_modules/undici": { + "version": "7.24.6", + "resolved": "https://registry.npmjs.org/undici/-/undici-7.24.6.tgz", + "integrity": "sha512-Xi4agocCbRzt0yYMZGMA6ApD7gvtUFaxm4ZmeacWI4cZxaF6C+8I8QfofC20NAePiB/IcvZmzkJ7XPa471AEtA==", + "license": "MIT", + "engines": { + "node": ">=20.18.1" + } + }, + "node_modules/undici-types": { + "version": "7.18.2", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-7.18.2.tgz", + "integrity": "sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==", + "license": "MIT" + }, + "node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/unlimited-timeout": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/unlimited-timeout/-/unlimited-timeout-0.1.0.tgz", + "integrity": "sha512-D4g+mxFeQGQHzCfnvij+R35ukJ0658Zzudw7j16p4tBBbNasKkKM4SocYxqhwT5xA7a9JYWDzKkEFyMlRi5sng==", + "license": "MIT", + "engines": { + "node": ">=20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "peer": true, + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/utf8-byte-length": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/utf8-byte-length/-/utf8-byte-length-1.0.5.tgz", + "integrity": "sha512-Xn0w3MtiQ6zoz2vFyUVruaCL53O/DwUvkEeOvj+uulMm0BkUGYWmBYVyElqZaSLhY6ZD0ulfU3aBra2aVT4xfA==", + "license": "(WTFPL OR MIT)" + }, + "node_modules/utf8-codec": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/utf8-codec/-/utf8-codec-1.0.0.tgz", + "integrity": "sha512-S/QSLezp3qvG4ld5PUfXiH7mCFxLKjSVZRFkB3DOjgwHuJPFDkInAXc/anf7BAbHt/D38ozDzL+QMZ6/7gsI6w==", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "license": "MIT" + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "license": "MIT", + "peer": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz", + "integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/esm/bin/uuid" + } + }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT" + }, + "node_modules/vlq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/vlq/-/vlq-1.0.1.tgz", + "integrity": "sha512-gQpnTgkubC6hQgdIcRdYGDSDc+SaujOdyesZQMv6JlfQee/9Mp0Qhnys6WxDWvQnL5WZdT7o2Ul187aSt0Rq+w==", + "license": "MIT", + "peer": true + }, + "node_modules/walker": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.8.tgz", + "integrity": "sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==", + "license": "Apache-2.0", + "peer": true, + "dependencies": { + "makeerror": "1.0.12" + } + }, + "node_modules/weald": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/weald/-/weald-1.1.1.tgz", + "integrity": "sha512-PaEQShzMCz8J/AD2N3dJMc1hTZWkJeLKS2NMeiVkV5KDHwgZe7qXLEzyodsT/SODxWDdXJJqocuwf3kHzcXhSQ==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "ms": "^3.0.0-canary.1", + "supports-color": "^10.0.0" + } + }, + "node_modules/weald/node_modules/ms": { + "version": "3.0.0-canary.202508261828", + "resolved": "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.202508261828.tgz", + "integrity": "sha512-NotsCoUCIUkojWCzQff4ttdCfIPoA1UGZsyQbi7KmqkNRfKCrvga8JJi2PknHymHOuor0cJSn/ylj52Cbt2IrQ==", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/weald/node_modules/supports-color": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz", + "integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/webcrypto-core": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/webcrypto-core/-/webcrypto-core-1.8.1.tgz", + "integrity": "sha512-P+x1MvlNCXlKbLSOY4cYrdreqPG5hbzkmawbcXLKN/mf6DZW0SdNNkZ+sjwsqVkI4A4Ko2sPZmkZtCKY58w83A==", + "license": "MIT", + "dependencies": { + "@peculiar/asn1-schema": "^2.3.13", + "@peculiar/json-schema": "^1.1.12", + "asn1js": "^3.0.5", + "pvtsutils": "^1.3.5", + "tslib": "^2.7.0" + } + }, + "node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" + }, + "node_modules/whatwg-fetch": { + "version": "3.6.20", + "resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.6.20.tgz", + "integrity": "sha512-EqhiFU6daOA8kpjOWTL0olhVOF3i7OrFzSYiGsEMB8GcXS+RrzauAERX65xMeNWVqxA6HXH2m69Z9LaKKdisfg==", + "license": "MIT", + "peer": true + }, + "node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/wherearewe": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/wherearewe/-/wherearewe-2.0.1.tgz", + "integrity": "sha512-XUguZbDxCA2wBn2LoFtcEhXL6AXo+hVjGonwhSTTTU9SzbWG8Xu3onNIpzf9j/mYUcJQ0f+m37SzG77G851uFw==", + "license": "Apache-2.0 OR MIT", + "dependencies": { + "is-electron": "^2.2.0" + }, + "engines": { + "node": ">=16.0.0", + "npm": ">=7.0.0" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "license": "ISC", + "peer": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", + "license": "MIT", + "dependencies": { + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "function.prototype.name": "^1.1.6", + "has-tostringtag": "^1.0.2", + "is-async-function": "^2.0.0", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", + "is-generator-function": "^1.0.10", + "is-regex": "^1.2.1", + "is-weakref": "^1.0.2", + "isarray": "^2.0.5", + "which-boxed-primitive": "^1.1.0", + "which-collection": "^1.0.2", + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", + "integrity": "sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-typed-array": { + "version": "1.1.20", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.20.tgz", + "integrity": "sha512-LYfpUkmqwl0h9A2HL09Mms427Q1RZWuOHsukfVcKRq9q95iQxdw0ix1JQrqbcDR9PH1QDwf5Qo8OZb5lksZ8Xg==", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "license": "MIT", + "peer": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.2.tgz", + "integrity": "sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==", + "license": "ISC", + "peer": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/ws": { + "version": "8.20.0", + "resolved": "https://registry.npmjs.org/ws/-/ws-8.20.0.tgz", + "integrity": "sha512-sAt8BhgNbzCtgGbt2OxmpuryO63ZoDk/sqaB/znQm94T4fCEsy/yV+7CdC1kJhOU9lboAEU7R3kquuycDoibVA==", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xml2js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.6.2.tgz", + "integrity": "sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==", + "license": "MIT", + "dependencies": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "license": "MIT", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/xmlcreate": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", + "integrity": "sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "license": "ISC", + "peer": true + }, + "node_modules/yaml": { + "version": "2.8.3", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.8.3.tgz", + "integrity": "sha512-AvbaCLOO2Otw/lW5bmh9d/WEdcDFdQp2Z2ZUH3pX9U2ihyUY0nvLv7J6TrWowklRGPYbB/IuIMfYgxaCPg5Bpg==", + "license": "ISC", + "peer": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14.6" + }, + "funding": { + "url": "https://github.com/sponsors/eemeli" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "license": "MIT", + "peer": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "license": "ISC", + "peer": true, + "engines": { + "node": ">=12" + } + } + } +} diff --git a/package.json b/package.json index fb45ce8..c5e13d8 100644 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ ], "devDependencies": { "clean-jsdoc-theme": "4.3.0", - "esbuild": "^0.25.8", + "esbuild": "0.25.8", "esbuild-plugins-node-modules-polyfill": "1.7.1", "jsdoc": "4.0.4", "prettier": "3.6.2", @@ -51,6 +51,7 @@ "dependencies": { "@aws-sdk/client-s3": "3.842.0", "@aws-sdk/s3-request-presigner": "3.844.0", + "@helia/verified-fetch": "7.1.0", "axios": "1.10.0", "ipns": "10.1.2" } diff --git a/src/index.js b/src/index.js index c704c0b..070ee20 100644 --- a/src/index.js +++ b/src/index.js @@ -13,6 +13,7 @@ import { PutObjectCommand, S3Client, } from "@aws-sdk/client-s3"; +import { createVerifiedFetch } from "@helia/verified-fetch"; import { getSignedUrl } from "@aws-sdk/s3-request-presigner"; import { unmarshalIPNSRecord } from "ipns"; @@ -21,6 +22,8 @@ import { unmarshalIPNSRecord } from "ipns"; class FilebaseClient { #DEFAULT_RPC_TIMEOUT = 60000; + #DEFAULT_ROUTER_ENDPOINT = "https://routingv1.filebase.io"; + #DEFAULT_TRUSTLESS_ENDPOINT = "https://trustless.filebase.io"; #DEFAULT_RPC_ENDPOINT = "https://rpc.filebase.io"; #DEFAULT_S3_ENDPOINT = "https://s3.filebase.com"; #DEFAULT_REGION = "us-east-1"; @@ -38,6 +41,7 @@ class FilebaseClient { #ipfs_credentials; #ipfs_client; #gateways_client; + #trustless_client; #names_client; #s3_client; @@ -121,6 +125,12 @@ class FilebaseClient { //region IPFS Gateway Client this.#default_gateway = options?.gateway || this.#PUBLIC_IPFS_GATEWAY; //endregion + + //region Trustless Gateway Client + this.#trustless_client = createVerifiedFetch({ + gateways: [this.#DEFAULT_TRUSTLESS_ENDPOINT], + routers: [this.#DEFAULT_ROUTER_ENDPOINT], + }); } //region Utility Methods @@ -166,7 +176,7 @@ class FilebaseClient { * @returns {Promise} - A promise that resolves when the bucket is created. * @example * // Create bucket with name of `create-bucket-example` - * const createdBucket = await client.createBucket(`create-bucket-example`); + * await client.createBucket(`create-bucket-example`); */ async createBucket(name) { const command = new CreateBucketCommand({ @@ -357,19 +367,59 @@ class FilebaseClient { * @param {string} name - The name of the file to download. * @param {Object} [options] Options for downloading file * @property {string} options.bucket The bucket to download the file from. + * @property {number} options.offset The offset to start reading the file from. + * @property {number} options.count The number of bytes to read from the file. + * @property {boolean} options.verify If true, the file will be verified using the IPFS API. * @returns {Promise} - A promise that resolves with the contents of the file. * @example * // Download file with name of `download-file-example` * const downloadedFile = await client.downloadFile(`download-file-example`); */ async downloadFile(name, options) { - const command = new GetObjectCommand({ - Bucket: options?.bucket || this.#default_bucket, - Key: name, - }), - response = await this.#s3_client.send(command); + if (options?.verify === true) { + const fileMetadata = await this.getFileMetadata(name, options); + if (fileMetadata === false) { + throw new Error(`File Not Found`); + } + + const verifiedResp = await this.#trustless_client( + `ipfs://${fileMetadata.cid}`, + ); + + if (verifiedResp?.status !== 200) { + throw new Error( + `Failed to Verify File: ${verifiedResp.status} - ${verifiedResp.statusText}`, + ); + } + + return verifiedResp.body; + } + + let downloadParams = { + arg: name, + }; + + if (options?.offset) { + downloadParams["offset"] = Number(options.offset); + } + + if (options?.count) { + downloadParams["count"] = Number(options.count); + } + + const downloadResp = await this.#ipfs_client.request({ + method: "POST", + url: "api/v0/files/read", + headers: { + Authorization: `Bearer ${this.#getIpfsCredentials(options?.bucket)}`, + }, + params: downloadParams, + validateStatus: function (status) { + return status === 200; + }, + }); - return response.Body; + return downloadResp.data; } /** diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 79cf246..0000000 --- a/yarn.lock +++ /dev/null @@ -1,2821 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@aws-crypto/crc32@5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32/-/crc32-5.2.0.tgz" - integrity sha512-nLbCWqQNgUiwwtFsen1AdzAtvuLRsQS8rYgMuxCrdKf9kOssamGLuPwyTY9wyYblNr9+1XM8v6zoDTPPSIeANg== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/crc32c@5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/crc32c/-/crc32c-5.2.0.tgz" - integrity sha512-+iWb8qaHLYKrNvGRbiYRHSdKRWhto5XlZUEBwDjYNf+ly5SVYG6zEoYIdxvf5R3zyeP16w4PLBn3rH1xc74Rag== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/sha1-browser@5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha1-browser/-/sha1-browser-5.2.0.tgz" - integrity sha512-OH6lveCFfcDjX4dbAvCFSYUjJZjDr/3XJ3xHtjn3Oj5b9RjojQo8npoLeA/bNwkOkrSQ0wgrHzXk4tDRxGKJeg== - dependencies: - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-browser@5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-browser/-/sha256-browser-5.2.0.tgz" - integrity sha512-AXfN/lGotSQwu6HNcEsIASo7kWXZ5HYWvfOmSNKDsEqC4OashTp8alTmaz+F7TC2L083SFv5RdB+qU3Vs1kZqw== - dependencies: - "@aws-crypto/sha256-js" "^5.2.0" - "@aws-crypto/supports-web-crypto" "^5.2.0" - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - "@aws-sdk/util-locate-window" "^3.0.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-crypto/sha256-js@5.2.0", "@aws-crypto/sha256-js@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/sha256-js/-/sha256-js-5.2.0.tgz" - integrity sha512-FFQQyu7edu4ufvIZ+OadFpHHOt+eSTBaYaki44c+akjg7qZg9oOQeLlk77F6tSYqjDAFClrHJk9tMf0HdVyOvA== - dependencies: - "@aws-crypto/util" "^5.2.0" - "@aws-sdk/types" "^3.222.0" - tslib "^2.6.2" - -"@aws-crypto/supports-web-crypto@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/supports-web-crypto/-/supports-web-crypto-5.2.0.tgz" - integrity sha512-iAvUotm021kM33eCdNfwIN//F77/IADDSs58i+MDaOqFrVjZo9bAal0NK7HurRuWLLpF1iLX7gbWrjHjeo+YFg== - dependencies: - tslib "^2.6.2" - -"@aws-crypto/util@5.2.0", "@aws-crypto/util@^5.2.0": - version "5.2.0" - resolved "https://registry.npmjs.org/@aws-crypto/util/-/util-5.2.0.tgz" - integrity sha512-4RkU9EsI6ZpBve5fseQlGNUWKMa1RLPQ1dnjnQoe07ldfIzcsGb5hC5W0Dm7u423KWzawlrpbjXBrXCEv9zazQ== - dependencies: - "@aws-sdk/types" "^3.222.0" - "@smithy/util-utf8" "^2.0.0" - tslib "^2.6.2" - -"@aws-sdk/client-s3@3.842.0": - version "3.842.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.842.0.tgz" - integrity sha512-T5Rh72Rcq1xIaM8KkTr1Wpr7/WPCYO++KrM+/Em0rq2jxpjMMhj77ITpgH7eEmNxWmwIndTwqpgfmbpNfk7Gbw== - dependencies: - "@aws-crypto/sha1-browser" "5.2.0" - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.840.0" - "@aws-sdk/credential-provider-node" "3.840.0" - "@aws-sdk/middleware-bucket-endpoint" "3.840.0" - "@aws-sdk/middleware-expect-continue" "3.840.0" - "@aws-sdk/middleware-flexible-checksums" "3.840.0" - "@aws-sdk/middleware-host-header" "3.840.0" - "@aws-sdk/middleware-location-constraint" "3.840.0" - "@aws-sdk/middleware-logger" "3.840.0" - "@aws-sdk/middleware-recursion-detection" "3.840.0" - "@aws-sdk/middleware-sdk-s3" "3.840.0" - "@aws-sdk/middleware-ssec" "3.840.0" - "@aws-sdk/middleware-user-agent" "3.840.0" - "@aws-sdk/region-config-resolver" "3.840.0" - "@aws-sdk/signature-v4-multi-region" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-endpoints" "3.840.0" - "@aws-sdk/util-user-agent-browser" "3.840.0" - "@aws-sdk/util-user-agent-node" "3.840.0" - "@aws-sdk/xml-builder" "3.821.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.6.0" - "@smithy/eventstream-serde-browser" "^4.0.4" - "@smithy/eventstream-serde-config-resolver" "^4.1.2" - "@smithy/eventstream-serde-node" "^4.0.4" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-blob-browser" "^4.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/hash-stream-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/md5-js" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.13" - "@smithy/middleware-retry" "^4.1.14" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.21" - "@smithy/util-defaults-mode-node" "^4.0.21" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-stream" "^4.2.2" - "@smithy/util-utf8" "^4.0.0" - "@smithy/util-waiter" "^4.0.6" - "@types/uuid" "^9.0.1" - tslib "^2.6.2" - uuid "^9.0.1" - -"@aws-sdk/client-sso@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.840.0.tgz" - integrity sha512-3Zp+FWN2hhmKdpS0Ragi5V2ZPsZNScE3jlbgoJjzjI/roHZqO+e3/+XFN4TlM0DsPKYJNp+1TAjmhxN6rOnfYA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.840.0" - "@aws-sdk/middleware-host-header" "3.840.0" - "@aws-sdk/middleware-logger" "3.840.0" - "@aws-sdk/middleware-recursion-detection" "3.840.0" - "@aws-sdk/middleware-user-agent" "3.840.0" - "@aws-sdk/region-config-resolver" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-endpoints" "3.840.0" - "@aws-sdk/util-user-agent-browser" "3.840.0" - "@aws-sdk/util-user-agent-node" "3.840.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.6.0" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.13" - "@smithy/middleware-retry" "^4.1.14" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.21" - "@smithy/util-defaults-mode-node" "^4.0.21" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/core@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.840.0.tgz" - integrity sha512-x3Zgb39tF1h2XpU+yA4OAAQlW6LVEfXNlSedSYJ7HGKXqA/E9h3rWQVpYfhXXVVsLdYXdNw5KBUkoAoruoZSZA== - dependencies: - "@aws-sdk/types" "3.840.0" - "@aws-sdk/xml-builder" "3.821.0" - "@smithy/core" "^3.6.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-utf8" "^4.0.0" - fast-xml-parser "4.4.1" - tslib "^2.6.2" - -"@aws-sdk/core@3.844.0": - version "3.844.0" - resolved "https://registry.npmjs.org/@aws-sdk/core/-/core-3.844.0.tgz" - integrity sha512-pfpI54bG5Xf2NkqrDBC2REStXlDXNCw/whORhkEs+Tp5exU872D5QKguzjPA6hH+8Pvbq1qgt5zXMbduISTHJw== - dependencies: - "@aws-sdk/types" "3.840.0" - "@aws-sdk/xml-builder" "3.821.0" - "@smithy/core" "^3.7.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-utf8" "^4.0.0" - fast-xml-parser "5.2.5" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-env@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.840.0.tgz" - integrity sha512-EzF6VcJK7XvQ/G15AVEfJzN2mNXU8fcVpXo4bRyr1S6t2q5zx6UPH/XjDbn18xyUmOq01t+r8gG+TmHEVo18fA== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-http@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.840.0.tgz" - integrity sha512-wbnUiPGLVea6mXbUh04fu+VJmGkQvmToPeTYdHE8eRZq3NRDi3t3WltT+jArLBKD/4NppRpMjf2ju4coMCz91g== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/util-stream" "^4.2.2" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-ini@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.840.0.tgz" - integrity sha512-7F290BsWydShHb+7InXd+IjJc3mlEIm9I0R57F/Pjl1xZB69MdkhVGCnuETWoBt4g53ktJd6NEjzm/iAhFXFmw== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/credential-provider-env" "3.840.0" - "@aws-sdk/credential-provider-http" "3.840.0" - "@aws-sdk/credential-provider-process" "3.840.0" - "@aws-sdk/credential-provider-sso" "3.840.0" - "@aws-sdk/credential-provider-web-identity" "3.840.0" - "@aws-sdk/nested-clients" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-node@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.840.0.tgz" - integrity sha512-KufP8JnxA31wxklLm63evUPSFApGcH8X86z3mv9SRbpCm5ycgWIGVCTXpTOdgq6rPZrwT9pftzv2/b4mV/9clg== - dependencies: - "@aws-sdk/credential-provider-env" "3.840.0" - "@aws-sdk/credential-provider-http" "3.840.0" - "@aws-sdk/credential-provider-ini" "3.840.0" - "@aws-sdk/credential-provider-process" "3.840.0" - "@aws-sdk/credential-provider-sso" "3.840.0" - "@aws-sdk/credential-provider-web-identity" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-process@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.840.0.tgz" - integrity sha512-HkDQWHy8tCI4A0Ps2NVtuVYMv9cB4y/IuD/TdOsqeRIAT12h8jDb98BwQPNLAImAOwOWzZJ8Cu0xtSpX7CQhMw== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-sso@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.840.0.tgz" - integrity sha512-2qgdtdd6R0Z1y0KL8gzzwFUGmhBHSUx4zy85L2XV1CXhpRNwV71SVWJqLDVV5RVWVf9mg50Pm3AWrUC0xb0pcA== - dependencies: - "@aws-sdk/client-sso" "3.840.0" - "@aws-sdk/core" "3.840.0" - "@aws-sdk/token-providers" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/credential-provider-web-identity@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.840.0.tgz" - integrity sha512-dpEeVXG8uNZSmVXReE4WP0lwoioX2gstk4RnUgrdUE3YaPq8A+hJiVAyc3h+cjDeIqfbsQbZm9qFetKC2LF9dQ== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/nested-clients" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-bucket-endpoint@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.840.0.tgz" - integrity sha512-+gkQNtPwcSMmlwBHFd4saVVS11In6ID1HczNzpM3MXKXRBfSlbZJbCt6wN//AZ8HMklZEik4tcEOG0qa9UY8SQ== - dependencies: - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-arn-parser" "3.804.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-expect-continue@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.840.0.tgz" - integrity sha512-iJg2r6FKsKKvdiU4oCOuCf7Ro/YE0Q2BT/QyEZN3/Rt8Nr4SAZiQOlcBXOCpGvuIKOEAhvDOUnW3aDHL01PdVw== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-flexible-checksums@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.840.0.tgz" - integrity sha512-Kg/o2G6o72sdoRH0J+avdcf668gM1bp6O4VeEXpXwUj/urQnV5qiB2q1EYT110INHUKWOLXPND3sQAqh6sTqHw== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@aws-crypto/crc32c" "5.2.0" - "@aws-crypto/util" "5.2.0" - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/is-array-buffer" "^4.0.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-stream" "^4.2.2" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-host-header@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.840.0.tgz" - integrity sha512-ub+hXJAbAje94+Ya6c6eL7sYujoE8D4Bumu1NUI8TXjUhVVn0HzVWQjpRLshdLsUp1AW7XyeJaxyajRaJQ8+Xg== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-location-constraint@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.840.0.tgz" - integrity sha512-KVLD0u0YMF3aQkVF8bdyHAGWSUY6N1Du89htTLgqCcIhSxxAJ9qifrosVZ9jkAzqRW99hcufyt2LylcVU2yoKQ== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-logger@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.840.0.tgz" - integrity sha512-lSV8FvjpdllpGaRspywss4CtXV8M7NNNH+2/j86vMH+YCOZ6fu2T/TyFd/tHwZ92vDfHctWkRbQxg0bagqwovA== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-recursion-detection@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.840.0.tgz" - integrity sha512-Gu7lGDyfddyhIkj1Z1JtrY5NHb5+x/CRiB87GjaSrKxkDaydtX2CU977JIABtt69l9wLbcGDIQ+W0uJ5xPof7g== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.840.0.tgz" - integrity sha512-rOUji7CayWN3O09zvvgLzDVQe0HiJdZkxoTS6vzOS3WbbdT7joGdVtAJHtn+x776QT3hHzbKU5gnfhel0o6gQA== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-arn-parser" "3.804.0" - "@smithy/core" "^3.6.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-stream" "^4.2.2" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-sdk-s3@3.844.0": - version "3.844.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.844.0.tgz" - integrity sha512-vOD5reqZszXBWMbZFN3EUar203o2i8gcoTdrymY4GMsAPDsh0k8yd3VJRNPuxT/017tP6G+rQepOGzna4umung== - dependencies: - "@aws-sdk/core" "3.844.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-arn-parser" "3.804.0" - "@smithy/core" "^3.7.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-stream" "^4.2.3" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/middleware-ssec@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.840.0.tgz" - integrity sha512-CBZP9t1QbjDFGOrtnUEHL1oAvmnCUUm7p0aPNbIdSzNtH42TNKjPRN3TuEIJDGjkrqpL3MXyDSmNayDcw/XW7Q== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/middleware-user-agent@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.840.0.tgz" - integrity sha512-hiiMf7BP5ZkAFAvWRcK67Mw/g55ar7OCrvrynC92hunx/xhMkrgSLM0EXIZ1oTn3uql9kH/qqGF0nqsK6K555A== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-endpoints" "3.840.0" - "@smithy/core" "^3.6.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/nested-clients@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.840.0.tgz" - integrity sha512-LXYYo9+n4hRqnRSIMXLBb+BLz+cEmjMtTudwK1BF6Bn2RfdDv29KuyeDRrPCS3TwKl7ZKmXUmE9n5UuHAPfBpA== - dependencies: - "@aws-crypto/sha256-browser" "5.2.0" - "@aws-crypto/sha256-js" "5.2.0" - "@aws-sdk/core" "3.840.0" - "@aws-sdk/middleware-host-header" "3.840.0" - "@aws-sdk/middleware-logger" "3.840.0" - "@aws-sdk/middleware-recursion-detection" "3.840.0" - "@aws-sdk/middleware-user-agent" "3.840.0" - "@aws-sdk/region-config-resolver" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-endpoints" "3.840.0" - "@aws-sdk/util-user-agent-browser" "3.840.0" - "@aws-sdk/util-user-agent-node" "3.840.0" - "@smithy/config-resolver" "^4.1.4" - "@smithy/core" "^3.6.0" - "@smithy/fetch-http-handler" "^5.0.4" - "@smithy/hash-node" "^4.0.4" - "@smithy/invalid-dependency" "^4.0.4" - "@smithy/middleware-content-length" "^4.0.4" - "@smithy/middleware-endpoint" "^4.1.13" - "@smithy/middleware-retry" "^4.1.14" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/node-http-handler" "^4.0.6" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.5" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-body-length-node" "^4.0.0" - "@smithy/util-defaults-mode-browser" "^4.0.21" - "@smithy/util-defaults-mode-node" "^4.0.21" - "@smithy/util-endpoints" "^3.0.6" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@aws-sdk/region-config-resolver@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.840.0.tgz" - integrity sha512-Qjnxd/yDv9KpIMWr90ZDPtRj0v75AqGC92Lm9+oHXZ8p1MjG5JE2CW0HL8JRgK9iKzgKBL7pPQRXI8FkvEVfrA== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - tslib "^2.6.2" - -"@aws-sdk/s3-request-presigner@3.844.0": - version "3.844.0" - resolved "https://registry.npmjs.org/@aws-sdk/s3-request-presigner/-/s3-request-presigner-3.844.0.tgz" - integrity sha512-i953TKW1rXbd9G2xEgWoJZDoF0Z1ONRlrXkOKDGOrY/uQhAIPNDz5k6tFcXG5oIaLWW197ShENv3CeEJnhfh3g== - dependencies: - "@aws-sdk/signature-v4-multi-region" "3.844.0" - "@aws-sdk/types" "3.840.0" - "@aws-sdk/util-format-url" "3.840.0" - "@smithy/middleware-endpoint" "^4.1.14" - "@smithy/protocol-http" "^5.1.2" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.840.0.tgz" - integrity sha512-8AoVgHrkSfhvGPtwx23hIUO4MmMnux2pjnso1lrLZGqxfElM6jm2w4jTNLlNXk8uKHGyX89HaAIuT0lL6dJj9g== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/signature-v4-multi-region@3.844.0": - version "3.844.0" - resolved "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.844.0.tgz" - integrity sha512-QC8nocQcZ3Bj7vTnuL47iNhcuUjMC46E2L85mU+sPQo3LN2qBVGSOTF+xSWGvmSFDpkN4ZXUMVeA0cJoJFEDFA== - dependencies: - "@aws-sdk/middleware-sdk-s3" "3.844.0" - "@aws-sdk/types" "3.840.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/signature-v4" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/token-providers@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.840.0.tgz" - integrity sha512-6BuTOLTXvmgwjK7ve7aTg9JaWFdM5UoMolLVPMyh3wTv9Ufalh8oklxYHUBIxsKkBGO2WiHXytveuxH6tAgTYg== - dependencies: - "@aws-sdk/core" "3.840.0" - "@aws-sdk/nested-clients" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/types@3.840.0", "@aws-sdk/types@^3.222.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/types/-/types-3.840.0.tgz" - integrity sha512-xliuHaUFZxEx1NSXeLLZ9Dyu6+EJVQKEoD+yM+zqUo3YDZ7medKJWY6fIOKiPX/N7XbLdBYwajb15Q7IL8KkeA== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/util-arn-parser@3.804.0": - version "3.804.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.804.0.tgz" - integrity sha512-wmBJqn1DRXnZu3b4EkE6CWnoWMo1ZMvlfkqU5zPz67xx1GMaXlDCchFvKAXMjk4jn/L1O3tKnoFDNsoLV1kgNQ== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-endpoints@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.840.0.tgz" - integrity sha512-eqE9ROdg/Kk0rj3poutyRCFauPDXIf/WSvCqFiRDDVi6QOnCv/M0g2XW8/jSvkJlOyaXkNCptapIp6BeeFFGYw== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/types" "^4.3.1" - "@smithy/util-endpoints" "^3.0.6" - tslib "^2.6.2" - -"@aws-sdk/util-format-url@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-format-url/-/util-format-url-3.840.0.tgz" - integrity sha512-VB1PWyI1TQPiPvg4w7tgUGGQER1xxXPNUqfh3baxUSFi1Oh8wHrDnFywkxLm3NMmgDmnLnSZ5Q326qAoyqKLSg== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/querystring-builder" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/util-locate-window@^3.0.0": - version "3.804.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.804.0.tgz" - integrity sha512-zVoRfpmBVPodYlnMjgVjfGoEZagyRF5IPn3Uo6ZvOZp24chnW/FRstH7ESDHDDRga4z3V+ElUQHKpFDXWyBW5A== - dependencies: - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-browser@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.840.0.tgz" - integrity sha512-JdyZM3EhhL4PqwFpttZu1afDpPJCCc3eyZOLi+srpX11LsGj6sThf47TYQN75HT1CarZ7cCdQHGzP2uy3/xHfQ== - dependencies: - "@aws-sdk/types" "3.840.0" - "@smithy/types" "^4.3.1" - bowser "^2.11.0" - tslib "^2.6.2" - -"@aws-sdk/util-user-agent-node@3.840.0": - version "3.840.0" - resolved "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.840.0.tgz" - integrity sha512-Fy5JUEDQU1tPm2Yw/YqRYYc27W5+QD/J4mYvQvdWjUGZLB5q3eLFMGD35Uc28ZFoGMufPr4OCxK/bRfWROBRHQ== - dependencies: - "@aws-sdk/middleware-user-agent" "3.840.0" - "@aws-sdk/types" "3.840.0" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@aws-sdk/xml-builder@3.821.0": - version "3.821.0" - resolved "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.821.0.tgz" - integrity sha512-DIIotRnefVL6DiaHtO6/21DhJ4JZnnIwdNbpwiAhdt/AVbttcE4yw925gsjur0OGv5BTYXQXU3YnANBYnZjuQA== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@babel/parser@^7.20.15": - version "7.23.6" - resolved "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@chainsafe/is-ip@^2.0.1": - version "2.0.2" - resolved "https://registry.npmjs.org/@chainsafe/is-ip/-/is-ip-2.0.2.tgz" - integrity sha512-ndGqEMG1W5WkGagaqOZHpPU172AGdxr+LD15sv3WIUvT5oCFUrG1Y0CW/v2Egwj4JXEvSibaIIIqImsm98y1nA== - -"@chainsafe/netmask@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@chainsafe/netmask/-/netmask-2.0.0.tgz" - integrity sha512-I3Z+6SWUoaljh3TBzCnCxjlUyN8tA+NAk5L6m9IxvCf1BENQTePzPMis97CoN/iMW1St3WN+AWCCRp+TTBRiDg== - dependencies: - "@chainsafe/is-ip" "^2.0.1" - -"@esbuild/aix-ppc64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.25.8.tgz#a1414903bb38027382f85f03dda6065056757727" - integrity sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA== - -"@esbuild/android-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.25.8.tgz#c859994089e9767224269884061f89dae6fb51c6" - integrity sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w== - -"@esbuild/android-arm@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.25.8.tgz#96a8f2ca91c6cd29ea90b1af79d83761c8ba0059" - integrity sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw== - -"@esbuild/android-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.25.8.tgz#a3a626c4fec4a024a9fa8c7679c39996e92916f0" - integrity sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA== - -"@esbuild/darwin-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.25.8.tgz#a5e1252ca2983d566af1c0ea39aded65736fc66d" - integrity sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw== - -"@esbuild/darwin-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.25.8.tgz#5271b0df2bb12ce8df886704bfdd1c7cc01385d2" - integrity sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg== - -"@esbuild/freebsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.8.tgz#d0a0e7fdf19733b8bb1566b81df1aa0bb7e46ada" - integrity sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA== - -"@esbuild/freebsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.25.8.tgz#2de8b2e0899d08f1cb1ef3128e159616e7e85343" - integrity sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw== - -"@esbuild/linux-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.25.8.tgz#a4209efadc0c2975716458484a4e90c237c48ae9" - integrity sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w== - -"@esbuild/linux-arm@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.25.8.tgz#ccd9e291c24cd8d9142d819d463e2e7200d25b19" - integrity sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg== - -"@esbuild/linux-ia32@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.25.8.tgz#006ad1536d0c2b28fb3a1cf0b53bcb85aaf92c4d" - integrity sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg== - -"@esbuild/linux-loong64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.25.8.tgz#127b3fbfb2c2e08b1397e985932f718f09a8f5c4" - integrity sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ== - -"@esbuild/linux-mips64el@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.25.8.tgz#837d1449517791e3fa7d82675a2d06d9f56cb340" - integrity sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw== - -"@esbuild/linux-ppc64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.25.8.tgz#aa2e3bd93ab8df084212f1895ca4b03c42d9e0fe" - integrity sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ== - -"@esbuild/linux-riscv64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.25.8.tgz#a340620e31093fef72767dd28ab04214b3442083" - integrity sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg== - -"@esbuild/linux-s390x@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.25.8.tgz#ddfed266c8c13f5efb3105a0cd47f6dcd0e79e71" - integrity sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg== - -"@esbuild/linux-x64@0.25.8": - version "0.25.8" - resolved "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.8.tgz" - integrity sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ== - -"@esbuild/netbsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.8.tgz#902c80e1d678047926387230bc037e63e00697d0" - integrity sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw== - -"@esbuild/netbsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.25.8.tgz#2d9eb4692add2681ff05a14ce99de54fbed7079c" - integrity sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg== - -"@esbuild/openbsd-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.8.tgz#89c3b998c6de739db38ab7fb71a8a76b3fa84a45" - integrity sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ== - -"@esbuild/openbsd-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.25.8.tgz#2f01615cf472b0e48c077045cfd96b5c149365cc" - integrity sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ== - -"@esbuild/openharmony-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.8.tgz#a201f720cd2c3ebf9a6033fcc3feb069a54b509a" - integrity sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg== - -"@esbuild/sunos-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.25.8.tgz#07046c977985a3334667f19e6ab3a01a80862afb" - integrity sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w== - -"@esbuild/win32-arm64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.25.8.tgz#4a5470caf0d16127c05d4833d4934213c69392d1" - integrity sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ== - -"@esbuild/win32-ia32@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.25.8.tgz#3de3e8470b7b328d99dbc3e9ec1eace207e5bbc4" - integrity sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg== - -"@esbuild/win32-x64@0.25.8": - version "0.25.8" - resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.25.8.tgz#610d7ea539d2fcdbe39237b5cc175eb2c4451f9c" - integrity sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw== - -"@isaacs/cliui@^8.0.2": - version "8.0.2" - resolved "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz" - integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA== - dependencies: - string-width "^5.1.2" - string-width-cjs "npm:string-width@^4.2.0" - strip-ansi "^7.0.1" - strip-ansi-cjs "npm:strip-ansi@^6.0.1" - wrap-ansi "^8.1.0" - wrap-ansi-cjs "npm:wrap-ansi@^7.0.0" - -"@jridgewell/gen-mapping@^0.3.0", "@jridgewell/gen-mapping@^0.3.2": - version "0.3.3" - resolved "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz" - integrity sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ== - dependencies: - "@jridgewell/set-array" "^1.0.1" - "@jridgewell/sourcemap-codec" "^1.4.10" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/resolve-uri@^3.1.0": - version "3.1.1" - resolved "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/set-array@^1.0.1": - version "1.1.2" - resolved "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz" - integrity sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw== - -"@jridgewell/source-map@^0.3.3": - version "0.3.5" - resolved "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.5.tgz" - integrity sha512-UTYAUj/wviwdsMfzoSJspJxbkH5o1snzwX0//0ENX1u/55kkZZkcTZP6u9bwKGkv+dkk9at4m1Cpt0uY80kcpQ== - dependencies: - "@jridgewell/gen-mapping" "^0.3.0" - "@jridgewell/trace-mapping" "^0.3.9" - -"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/sourcemap-codec@^1.5.0": - version "1.5.4" - resolved "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.4.tgz" - integrity sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw== - -"@jridgewell/trace-mapping@^0.3.9": - version "0.3.20" - resolved "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz" - integrity sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q== - dependencies: - "@jridgewell/resolve-uri" "^3.1.0" - "@jridgewell/sourcemap-codec" "^1.4.14" - -"@jsdoc/salty@^0.2.1", "@jsdoc/salty@^0.2.4": - version "0.2.7" - resolved "https://registry.npmjs.org/@jsdoc/salty/-/salty-0.2.7.tgz" - integrity sha512-mh8LbS9d4Jq84KLw8pzho7XC2q2/IJGiJss3xwRoLD1A+EE16SjN4PfaG4jRCzKegTFLlN0Zd8SdUPE6XdoPFg== - dependencies: - lodash "^4.17.21" - -"@jspm/core@^2.1.0": - version "2.1.0" - resolved "https://registry.npmjs.org/@jspm/core/-/core-2.1.0.tgz" - integrity sha512-3sRl+pkyFY/kLmHl0cgHiFp2xEqErA8N3ECjMs7serSUBmoJ70lBa0PG5t0IM6WJgdZNyyI0R8YFfi5wM8+mzg== - -"@leichtgewicht/ip-codec@^2.0.1": - version "2.0.5" - resolved "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.5.tgz" - integrity sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw== - -"@libp2p/crypto@^5.0.0": - version "5.1.7" - resolved "https://registry.npmjs.org/@libp2p/crypto/-/crypto-5.1.7.tgz" - integrity sha512-7DO0piidLEKfCuNfS420BlHG0e2tH7W/zugdsPSiC/1Apa/s1B1dBkaIEgfDkGjrRP4S/8Or86Rtq7zXeEu67g== - dependencies: - "@libp2p/interface" "^2.10.5" - "@noble/curves" "^1.9.1" - "@noble/hashes" "^1.8.0" - multiformats "^13.3.6" - protons-runtime "^5.5.0" - uint8arraylist "^2.4.8" - uint8arrays "^5.1.0" - -"@libp2p/interface@^2.0.0", "@libp2p/interface@^2.10.5": - version "2.10.5" - resolved "https://registry.npmjs.org/@libp2p/interface/-/interface-2.10.5.tgz" - integrity sha512-Z52n04Mph/myGdwyExbFi5S/HqrmZ9JOmfLc2v4r2Cik3GRdw98vrGH19PFvvwjLwAjaqsweCtlGaBzAz09YDw== - dependencies: - "@multiformats/dns" "^1.0.6" - "@multiformats/multiaddr" "^12.4.4" - it-pushable "^3.2.3" - it-stream-types "^2.0.2" - main-event "^1.0.1" - multiformats "^13.3.6" - progress-events "^1.0.1" - uint8arraylist "^2.4.8" - -"@libp2p/logger@^5.0.0": - version "5.1.21" - resolved "https://registry.npmjs.org/@libp2p/logger/-/logger-5.1.21.tgz" - integrity sha512-V1TWlZM5BuKkiGQ7En4qOnseVP82JwDIpIfNjceUZz1ArL32A5HXJjLQnJchkZ3VW8PVciJzUos/vP6slhPY6Q== - dependencies: - "@libp2p/interface" "^2.10.5" - "@multiformats/multiaddr" "^12.4.4" - interface-datastore "^8.3.1" - multiformats "^13.3.6" - weald "^1.0.4" - -"@multiformats/dns@^1.0.3", "@multiformats/dns@^1.0.6": - version "1.0.6" - resolved "https://registry.npmjs.org/@multiformats/dns/-/dns-1.0.6.tgz" - integrity sha512-nt/5UqjMPtyvkG9BQYdJ4GfLK3nMqGpFZOzf4hAmIa0sJh2LlS9YKXZ4FgwBDsaHvzZqR/rUFIywIc7pkHNNuw== - dependencies: - "@types/dns-packet" "^5.6.5" - buffer "^6.0.3" - dns-packet "^5.6.1" - hashlru "^2.3.0" - p-queue "^8.0.1" - progress-events "^1.0.0" - uint8arrays "^5.0.2" - -"@multiformats/multiaddr@^12.4.4": - version "12.5.1" - resolved "https://registry.npmjs.org/@multiformats/multiaddr/-/multiaddr-12.5.1.tgz" - integrity sha512-+DDlr9LIRUS8KncI1TX/FfUn8F2dl6BIxJgshS/yFQCNB5IAF0OGzcwB39g5NLE22s4qqDePv0Qof6HdpJ/4aQ== - dependencies: - "@chainsafe/is-ip" "^2.0.1" - "@chainsafe/netmask" "^2.0.0" - "@multiformats/dns" "^1.0.3" - abort-error "^1.0.1" - multiformats "^13.0.0" - uint8-varint "^2.0.1" - uint8arrays "^5.0.0" - -"@noble/curves@^1.9.1": - version "1.9.2" - resolved "https://registry.npmjs.org/@noble/curves/-/curves-1.9.2.tgz" - integrity sha512-HxngEd2XUcg9xi20JkwlLCtYwfoFw4JGkuZpT+WlsPD4gB/cxkvTD8fSsoAnphGZhFdZYKeQIPCuFlWPm1uE0g== - dependencies: - "@noble/hashes" "1.8.0" - -"@noble/hashes@1.8.0", "@noble/hashes@^1.8.0": - version "1.8.0" - resolved "https://registry.npmjs.org/@noble/hashes/-/hashes-1.8.0.tgz" - integrity sha512-jCs9ldd7NwzpgXDIf6P3+NrHh9/sD6CQdxHyjQI+h/6rDNo88ypBxxz45UDuZHz9r3tNz7N/VInSVoVdtXEI4A== - -"@pkgjs/parseargs@^0.11.0": - version "0.11.0" - resolved "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz" - integrity sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== - -"@rollup/rollup-android-arm-eabi@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.45.1.tgz#8560592f0dcf43b8cb0949af9f1d916205148d12" - integrity sha512-NEySIFvMY0ZQO+utJkgoMiCAjMrGvnbDLHvcmlA33UXJpYBCvlBEbMMtV837uCkS+plG2umfhn0T5mMAxGrlRA== - -"@rollup/rollup-android-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.45.1.tgz#6bfb777bbce998691b6fd3e916b05cd46392d020" - integrity sha512-ujQ+sMXJkg4LRJaYreaVx7Z/VMgBBd89wGS4qMrdtfUFZ+TSY5Rs9asgjitLwzeIbhwdEhyj29zhst3L1lKsRQ== - -"@rollup/rollup-darwin-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.45.1.tgz#7efce10220293a22e7b7b595d05d8b8400a7bcf3" - integrity sha512-FSncqHvqTm3lC6Y13xncsdOYfxGSLnP+73k815EfNmpewPs+EyM49haPS105Rh4aF5mJKywk9X0ogzLXZzN9lA== - -"@rollup/rollup-darwin-x64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.45.1.tgz#c617a8ece21050bfbea299c126767d2e70cfa79a" - integrity sha512-2/vVn/husP5XI7Fsf/RlhDaQJ7x9zjvC81anIVbr4b/f0xtSmXQTFcGIQ/B1cXIYM6h2nAhJkdMHTnD7OtQ9Og== - -"@rollup/rollup-freebsd-arm64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.45.1.tgz#5a6af0a9acf82162d2910933649ae24fc0ea3ecb" - integrity sha512-4g1kaDxQItZsrkVTdYQ0bxu4ZIQ32cotoQbmsAnW1jAE4XCMbcBPDirX5fyUzdhVCKgPcrwWuucI8yrVRBw2+g== - -"@rollup/rollup-freebsd-x64@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.45.1.tgz#ae9709463560196fc275bd0da598668a2e341023" - integrity sha512-L/6JsfiL74i3uK1Ti2ZFSNsp5NMiM4/kbbGEcOCps99aZx3g8SJMO1/9Y0n/qKlWZfn6sScf98lEOUe2mBvW9A== - -"@rollup/rollup-linux-arm-gnueabihf@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.45.1.tgz#6ec52661764dbd54c19d6520a403aa385a5c0fbf" - integrity sha512-RkdOTu2jK7brlu+ZwjMIZfdV2sSYHK2qR08FUWcIoqJC2eywHbXr0L8T/pONFwkGukQqERDheaGTeedG+rra6Q== - -"@rollup/rollup-linux-arm-musleabihf@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.45.1.tgz#fd33ba4a43ef8419e96811236493d19436271923" - integrity sha512-3kJ8pgfBt6CIIr1o+HQA7OZ9mp/zDk3ctekGl9qn/pRBgrRgfwiffaUmqioUGN9hv0OHv2gxmvdKOkARCtRb8Q== - -"@rollup/rollup-linux-arm64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.45.1.tgz#933b3d99b73c9d7bf4506cab0d5d313c7e74fd2d" - integrity sha512-k3dOKCfIVixWjG7OXTCOmDfJj3vbdhN0QYEqB+OuGArOChek22hn7Uy5A/gTDNAcCy5v2YcXRJ/Qcnm4/ma1xw== - -"@rollup/rollup-linux-arm64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.45.1.tgz#dbe9ae24ee9e97b75662fddcb69eb7f23c89280a" - integrity sha512-PmI1vxQetnM58ZmDFl9/Uk2lpBBby6B6rF4muJc65uZbxCs0EA7hhKCk2PKlmZKuyVSHAyIw3+/SiuMLxKxWog== - -"@rollup/rollup-linux-loongarch64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.45.1.tgz#818c5a071eec744436dbcdd76fe9c3c869dc9a8d" - integrity sha512-9UmI0VzGmNJ28ibHW2GpE2nF0PBQqsyiS4kcJ5vK+wuwGnV5RlqdczVocDSUfGX/Na7/XINRVoUgJyFIgipoRg== - -"@rollup/rollup-linux-powerpc64le-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.45.1.tgz#6b8591def27d886fa147fb0340126c7d6682a7e4" - integrity sha512-7nR2KY8oEOUTD3pBAxIBBbZr0U7U+R9HDTPNy+5nVVHDXI4ikYniH1oxQz9VoB5PbBU1CZuDGHkLJkd3zLMWsg== - -"@rollup/rollup-linux-riscv64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.45.1.tgz#f1861ac4ee8da64e0b0d23853ff26fe2baa876cf" - integrity sha512-nlcl3jgUultKROfZijKjRQLUu9Ma0PeNv/VFHkZiKbXTBQXhpytS8CIj5/NfBeECZtY2FJQubm6ltIxm/ftxpw== - -"@rollup/rollup-linux-riscv64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.45.1.tgz#320c961401a923b374e358664527b188e374e1ae" - integrity sha512-HJV65KLS51rW0VY6rvZkiieiBnurSzpzore1bMKAhunQiECPuxsROvyeaot/tcK3A3aGnI+qTHqisrpSgQrpgA== - -"@rollup/rollup-linux-s390x-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.45.1.tgz#1763eed3362b50b6164d3f0947486c03cc7e616d" - integrity sha512-NITBOCv3Qqc6hhwFt7jLV78VEO/il4YcBzoMGGNxznLgRQf43VQDae0aAzKiBeEPIxnDrACiMgbqjuihx08OOw== - -"@rollup/rollup-linux-x64-gnu@4.45.1": - version "4.45.1" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.45.1.tgz" - integrity sha512-+E/lYl6qu1zqgPEnTrs4WysQtvc/Sh4fC2nByfFExqgYrqkKWp1tWIbe+ELhixnenSpBbLXNi6vbEEJ8M7fiHw== - -"@rollup/rollup-linux-x64-musl@4.45.1": - version "4.45.1" - resolved "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.45.1.tgz" - integrity sha512-a6WIAp89p3kpNoYStITT9RbTbTnqarU7D8N8F2CV+4Cl9fwCOZraLVuVFvlpsW0SbIiYtEnhCZBPLoNdRkjQFw== - -"@rollup/rollup-win32-arm64-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.45.1.tgz#27a6e48d1502e8e4bed96bedfb533738655874f2" - integrity sha512-T5Bi/NS3fQiJeYdGvRpTAP5P02kqSOpqiopwhj0uaXB6nzs5JVi2XMJb18JUSKhCOX8+UE1UKQufyD6Or48dJg== - -"@rollup/rollup-win32-ia32-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.45.1.tgz#a2fbad3bec20ff879f3fd51720adf33692ca8f3d" - integrity sha512-lxV2Pako3ujjuUe9jiU3/s7KSrDfH6IgTSQOnDWr9aJ92YsFd7EurmClK0ly/t8dzMkDtd04g60WX6yl0sGfdw== - -"@rollup/rollup-win32-x64-msvc@4.45.1": - version "4.45.1" - resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.45.1.tgz#e5085c6d13da15b4c5133cd2a6bb11f25b6bb77a" - integrity sha512-M/fKi4sasCdM8i0aWJjCSFm2qEnYRR8AMLG2kxp6wD13+tMGA4Z1tVAuHkNRjud5SW2EM3naLuK35w9twvf6aA== - -"@smithy/abort-controller@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.0.4.tgz" - integrity sha512-gJnEjZMvigPDQWHrW3oPrFhQtkrgqBkyjj3pCIdF3A5M6vsZODG93KNlfJprv6bp4245bdT32fsHK4kkH3KYDA== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader-native@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader-native/-/chunked-blob-reader-native-4.0.0.tgz" - integrity sha512-R9wM2yPmfEMsUmlMlIgSzOyICs0x9uu7UTHoccMyt7BWw8shcGM8HqB355+BZCPBcySvbTYMs62EgEQkNxz2ig== - dependencies: - "@smithy/util-base64" "^4.0.0" - tslib "^2.6.2" - -"@smithy/chunked-blob-reader@^5.0.0": - version "5.0.0" - resolved "https://registry.npmjs.org/@smithy/chunked-blob-reader/-/chunked-blob-reader-5.0.0.tgz" - integrity sha512-+sKqDBQqb036hh4NPaUiEkYFkTUGYzRsn3EuFhyfQfMy6oGHEUJDurLP9Ufb5dasr/XiAmPNMr6wa9afjQB+Gw== - dependencies: - tslib "^2.6.2" - -"@smithy/config-resolver@^4.1.4": - version "4.1.4" - resolved "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.1.4.tgz" - integrity sha512-prmU+rDddxHOH0oNcwemL+SwnzcG65sBF2yXRO7aeXIn/xTlq2pX7JLVbkBnVLowHLg4/OL4+jBmv9hVrVGS+w== - dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - "@smithy/util-config-provider" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - tslib "^2.6.2" - -"@smithy/core@^3.6.0", "@smithy/core@^3.7.0": - version "3.7.0" - resolved "https://registry.npmjs.org/@smithy/core/-/core-3.7.0.tgz" - integrity sha512-7ov8hu/4j0uPZv8b27oeOFtIBtlFmM3ibrPv/Omx1uUdoXvcpJ00U+H/OWWC/keAguLlcqwtyL2/jTlSnApgNQ== - dependencies: - "@smithy/middleware-serde" "^4.0.8" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-body-length-browser" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-stream" "^4.2.3" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/credential-provider-imds@^4.0.6": - version "4.0.6" - resolved "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.0.6.tgz" - integrity sha512-hKMWcANhUiNbCJouYkZ9V3+/Qf9pteR1dnwgdyzR09R4ODEYx8BbUysHwRSyex4rZ9zapddZhLFTnT4ZijR4pw== - dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - tslib "^2.6.2" - -"@smithy/eventstream-codec@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.0.4.tgz" - integrity sha512-7XoWfZqWb/QoR/rAU4VSi0mWnO2vu9/ltS6JZ5ZSZv0eovLVfDfu0/AX4ub33RsJTOth3TiFWSHS5YdztvFnig== - dependencies: - "@aws-crypto/crc32" "5.2.0" - "@smithy/types" "^4.3.1" - "@smithy/util-hex-encoding" "^4.0.0" - tslib "^2.6.2" - -"@smithy/eventstream-serde-browser@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.0.4.tgz" - integrity sha512-3fb/9SYaYqbpy/z/H3yIi0bYKyAa89y6xPmIqwr2vQiUT2St+avRt8UKwsWt9fEdEasc5d/V+QjrviRaX1JRFA== - dependencies: - "@smithy/eventstream-serde-universal" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-config-resolver@^4.1.2": - version "4.1.2" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.1.2.tgz" - integrity sha512-JGtambizrWP50xHgbzZI04IWU7LdI0nh/wGbqH3sJesYToMi2j/DcoElqyOcqEIG/D4tNyxgRuaqBXWE3zOFhQ== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-node@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.0.4.tgz" - integrity sha512-RD6UwNZ5zISpOWPuhVgRz60GkSIp0dy1fuZmj4RYmqLVRtejFqQ16WmfYDdoSoAjlp1LX+FnZo+/hkdmyyGZ1w== - dependencies: - "@smithy/eventstream-serde-universal" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/eventstream-serde-universal@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.0.4.tgz" - integrity sha512-UeJpOmLGhq1SLox79QWw/0n2PFX+oPRE1ZyRMxPIaFEfCqWaqpB7BU9C8kpPOGEhLF7AwEqfFbtwNxGy4ReENA== - dependencies: - "@smithy/eventstream-codec" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/fetch-http-handler@^5.0.4", "@smithy/fetch-http-handler@^5.1.0": - version "5.1.0" - resolved "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.1.0.tgz" - integrity sha512-mADw7MS0bYe2OGKkHYMaqarOXuDwRbO6ArD91XhHcl2ynjGCFF+hvqf0LyQcYxkA1zaWjefSkU7Ne9mqgApSgQ== - dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/querystring-builder" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - tslib "^2.6.2" - -"@smithy/hash-blob-browser@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.0.4.tgz" - integrity sha512-WszRiACJiQV3QG6XMV44i5YWlkrlsM5Yxgz4jvsksuu7LDXA6wAtypfPajtNTadzpJy3KyJPoWehYpmZGKUFIQ== - dependencies: - "@smithy/chunked-blob-reader" "^5.0.0" - "@smithy/chunked-blob-reader-native" "^4.0.0" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/hash-node@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.0.4.tgz" - integrity sha512-qnbTPUhCVnCgBp4z4BUJUhOEkVwxiEi1cyFM+Zj6o+aY8OFGxUQleKWq8ltgp3dujuhXojIvJWdoqpm6dVO3lQ== - dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/hash-stream-node@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.0.4.tgz" - integrity sha512-wHo0d8GXyVmpmMh/qOR0R7Y46/G1y6OR8U+bSTB4ppEzRxd1xVAQ9xOE9hOc0bSjhz0ujCPAbfNLkLrpa6cevg== - dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/invalid-dependency@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.0.4.tgz" - integrity sha512-bNYMi7WKTJHu0gn26wg8OscncTt1t2b8KcsZxvOv56XA6cyXtOAAAaNP7+m45xfppXfOatXF3Sb1MNsLUgVLTw== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/is-array-buffer@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-2.0.0.tgz" - integrity sha512-z3PjFjMyZNI98JFRJi/U0nGoLWMSJlDjAW4QUX2WNZLas5C0CmVV6LJ01JI0k90l7FvpmixjWxPFmENSClQ7ug== - dependencies: - tslib "^2.5.0" - -"@smithy/is-array-buffer@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/is-array-buffer/-/is-array-buffer-4.0.0.tgz" - integrity sha512-saYhF8ZZNoJDTvJBEWgeBccCg+yvp1CX+ed12yORU3NilJScfc6gfch2oVb4QgxZrGUx3/ZJlb+c/dJbyupxlw== - dependencies: - tslib "^2.6.2" - -"@smithy/md5-js@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.0.4.tgz" - integrity sha512-uGLBVqcOwrLvGh/v/jw423yWHq/ofUGK1W31M2TNspLQbUV1Va0F5kTxtirkoHawODAZcjXTSGi7JwbnPcDPJg== - dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/middleware-content-length@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.0.4.tgz" - integrity sha512-F7gDyfI2BB1Kc+4M6rpuOLne5LOcEknH1n6UQB69qv+HucXBR1rkzXBnQTB2q46sFy1PM/zuSJOB532yc8bg3w== - dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/middleware-endpoint@^4.1.13", "@smithy/middleware-endpoint@^4.1.14": - version "4.1.14" - resolved "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.1.14.tgz" - integrity sha512-+BGLpK5D93gCcSEceaaYhUD/+OCGXM1IDaq/jKUQ+ujB0PTWlWN85noodKw/IPFZhIKFCNEe19PGd/reUMeLSQ== - dependencies: - "@smithy/core" "^3.7.0" - "@smithy/middleware-serde" "^4.0.8" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - "@smithy/url-parser" "^4.0.4" - "@smithy/util-middleware" "^4.0.4" - tslib "^2.6.2" - -"@smithy/middleware-retry@^4.1.14": - version "4.1.15" - resolved "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.1.15.tgz" - integrity sha512-iKYUJpiyTQ33U2KlOZeUb0GwtzWR3C0soYcKuCnTmJrvt6XwTPQZhMfsjJZNw7PpQ3TU4Ati1qLSrkSJxnnSMQ== - dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/protocol-http" "^5.1.2" - "@smithy/service-error-classification" "^4.0.6" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-retry" "^4.0.6" - tslib "^2.6.2" - uuid "^9.0.1" - -"@smithy/middleware-serde@^4.0.8": - version "4.0.8" - resolved "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.0.8.tgz" - integrity sha512-iSSl7HJoJaGyMIoNn2B7czghOVwJ9nD7TMvLhMWeSB5vt0TnEYyRRqPJu/TqW76WScaNvYYB8nRoiBHR9S1Ddw== - dependencies: - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/middleware-stack@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.0.4.tgz" - integrity sha512-kagK5ggDrBUCCzI93ft6DjteNSfY8Ulr83UtySog/h09lTIOAJ/xUSObutanlPT0nhoHAkpmW9V5K8oPyLh+QA== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/node-config-provider@^4.1.3": - version "4.1.3" - resolved "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.1.3.tgz" - integrity sha512-HGHQr2s59qaU1lrVH6MbLlmOBxadtzTsoO4c+bF5asdgVik3I8o7JIOzoeqWc5MjVa+vD36/LWE0iXKpNqooRw== - dependencies: - "@smithy/property-provider" "^4.0.4" - "@smithy/shared-ini-file-loader" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/node-http-handler@^4.0.6", "@smithy/node-http-handler@^4.1.0": - version "4.1.0" - resolved "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.1.0.tgz" - integrity sha512-vqfSiHz2v8b3TTTrdXi03vNz1KLYYS3bhHCDv36FYDqxT7jvTll1mMnCrkD+gOvgwybuunh/2VmvOMqwBegxEg== - dependencies: - "@smithy/abort-controller" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/querystring-builder" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/property-provider@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.0.4.tgz" - integrity sha512-qHJ2sSgu4FqF4U/5UUp4DhXNmdTrgmoAai6oQiM+c5RZ/sbDwJ12qxB1M6FnP+Tn/ggkPZf9ccn4jqKSINaquw== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/protocol-http@^5.1.2": - version "5.1.2" - resolved "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.1.2.tgz" - integrity sha512-rOG5cNLBXovxIrICSBm95dLqzfvxjEmuZx4KK3hWwPFHGdW3lxY0fZNXfv2zebfRO7sJZ5pKJYHScsqopeIWtQ== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/querystring-builder@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.0.4.tgz" - integrity sha512-SwREZcDnEYoh9tLNgMbpop+UTGq44Hl9tdj3rf+yeLcfH7+J8OXEBaMc2kDxtyRHu8BhSg9ADEx0gFHvpJgU8w== - dependencies: - "@smithy/types" "^4.3.1" - "@smithy/util-uri-escape" "^4.0.0" - tslib "^2.6.2" - -"@smithy/querystring-parser@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.0.4.tgz" - integrity sha512-6yZf53i/qB8gRHH/l2ZwUG5xgkPgQF15/KxH0DdXMDHjesA9MeZje/853ifkSY0x4m5S+dfDZ+c4x439PF0M2w== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/service-error-classification@^4.0.6": - version "4.0.6" - resolved "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.0.6.tgz" - integrity sha512-RRoTDL//7xi4tn5FrN2NzH17jbgmnKidUqd4KvquT0954/i6CXXkh1884jBiunq24g9cGtPBEXlU40W6EpNOOg== - dependencies: - "@smithy/types" "^4.3.1" - -"@smithy/shared-ini-file-loader@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.0.4.tgz" - integrity sha512-63X0260LoFBjrHifPDs+nM9tV0VMkOTl4JRMYNuKh/f5PauSjowTfvF3LogfkWdcPoxsA9UjqEOgjeYIbhb7Nw== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/signature-v4@^5.1.2": - version "5.1.2" - resolved "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.1.2.tgz" - integrity sha512-d3+U/VpX7a60seHziWnVZOHuEgJlclufjkS6zhXvxcJgkJq4UWdH5eOBLzHRMx6gXjsdT9h6lfpmLzbrdupHgQ== - dependencies: - "@smithy/is-array-buffer" "^4.0.0" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-hex-encoding" "^4.0.0" - "@smithy/util-middleware" "^4.0.4" - "@smithy/util-uri-escape" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/smithy-client@^4.4.5", "@smithy/smithy-client@^4.4.6": - version "4.4.6" - resolved "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.4.6.tgz" - integrity sha512-3wfhywdzB/CFszP6moa5L3lf5/zSfQoH0kvVSdkyK2az5qZet0sn2PAHjcTDiq296Y4RP5yxF7B6S6+3oeBUCQ== - dependencies: - "@smithy/core" "^3.7.0" - "@smithy/middleware-endpoint" "^4.1.14" - "@smithy/middleware-stack" "^4.0.4" - "@smithy/protocol-http" "^5.1.2" - "@smithy/types" "^4.3.1" - "@smithy/util-stream" "^4.2.3" - tslib "^2.6.2" - -"@smithy/types@^4.3.1": - version "4.3.1" - resolved "https://registry.npmjs.org/@smithy/types/-/types-4.3.1.tgz" - integrity sha512-UqKOQBL2x6+HWl3P+3QqFD4ncKq0I8Nuz9QItGv5WuKuMHuuwlhvqcZCoXGfc+P1QmfJE7VieykoYYmrOoFJxA== - dependencies: - tslib "^2.6.2" - -"@smithy/url-parser@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.0.4.tgz" - integrity sha512-eMkc144MuN7B0TDA4U2fKs+BqczVbk3W+qIvcoCY6D1JY3hnAdCuhCZODC+GAeaxj0p6Jroz4+XMUn3PCxQQeQ== - dependencies: - "@smithy/querystring-parser" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/util-base64@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-base64/-/util-base64-4.0.0.tgz" - integrity sha512-CvHfCmO2mchox9kjrtzoHkWHxjHZzaFojLc8quxXY7WAAMAg43nuxwv95tATVgQFNDwd4M9S1qFzj40Ul41Kmg== - dependencies: - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/util-body-length-browser@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-browser/-/util-body-length-browser-4.0.0.tgz" - integrity sha512-sNi3DL0/k64/LO3A256M+m3CDdG6V7WKWHdAiBBMUN8S3hK3aMPhwnPik2A/a2ONN+9doY9UxaLfgqsIRg69QA== - dependencies: - tslib "^2.6.2" - -"@smithy/util-body-length-node@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-body-length-node/-/util-body-length-node-4.0.0.tgz" - integrity sha512-q0iDP3VsZzqJyje8xJWEJCNIu3lktUGVoSy1KB0UWym2CL1siV3artm+u1DFYTLejpsrdGyCSWBdGNjJzfDPjg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-buffer-from@^2.0.0": - version "2.0.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-2.0.0.tgz" - integrity sha512-/YNnLoHsR+4W4Vf2wL5lGv0ksg8Bmk3GEGxn2vEQt52AQaPSCuaO5PM5VM7lP1K9qHRKHwrPGktqVoAHKWHxzw== - dependencies: - "@smithy/is-array-buffer" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-buffer-from@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-buffer-from/-/util-buffer-from-4.0.0.tgz" - integrity sha512-9TOQ7781sZvddgO8nxueKi3+yGvkY35kotA0Y6BWRajAv8jjmigQ1sBwz0UX47pQMYXJPahSKEKYFgt+rXdcug== - dependencies: - "@smithy/is-array-buffer" "^4.0.0" - tslib "^2.6.2" - -"@smithy/util-config-provider@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-config-provider/-/util-config-provider-4.0.0.tgz" - integrity sha512-L1RBVzLyfE8OXH+1hsJ8p+acNUSirQnWQ6/EgpchV88G6zGBTDPdXiiExei6Z1wR2RxYvxY/XLw6AMNCCt8H3w== - dependencies: - tslib "^2.6.2" - -"@smithy/util-defaults-mode-browser@^4.0.21": - version "4.0.22" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.0.22.tgz" - integrity sha512-hjElSW18Wq3fUAWVk6nbk7pGrV7ZT14DL1IUobmqhV3lxcsIenr5FUsDe2jlTVaS8OYBI3x+Og9URv5YcKb5QA== - dependencies: - "@smithy/property-provider" "^4.0.4" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - bowser "^2.11.0" - tslib "^2.6.2" - -"@smithy/util-defaults-mode-node@^4.0.21": - version "4.0.22" - resolved "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.0.22.tgz" - integrity sha512-7B8mfQBtwwr2aNRRmU39k/bsRtv9B6/1mTMrGmmdJFKmLAH+KgIiOuhaqfKOBGh9sZ/VkZxbvm94rI4MMYpFjQ== - dependencies: - "@smithy/config-resolver" "^4.1.4" - "@smithy/credential-provider-imds" "^4.0.6" - "@smithy/node-config-provider" "^4.1.3" - "@smithy/property-provider" "^4.0.4" - "@smithy/smithy-client" "^4.4.6" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/util-endpoints@^3.0.6": - version "3.0.6" - resolved "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.0.6.tgz" - integrity sha512-YARl3tFL3WgPuLzljRUnrS2ngLiUtkwhQtj8PAL13XZSyUiNLQxwG3fBBq3QXFqGFUXepIN73pINp3y8c2nBmA== - dependencies: - "@smithy/node-config-provider" "^4.1.3" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/util-hex-encoding@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-hex-encoding/-/util-hex-encoding-4.0.0.tgz" - integrity sha512-Yk5mLhHtfIgW2W2WQZWSg5kuMZCVbvhFmC7rV4IO2QqnZdbEFPmQnCcGMAX2z/8Qj3B9hYYNjZOhWym+RwhePw== - dependencies: - tslib "^2.6.2" - -"@smithy/util-middleware@^4.0.4": - version "4.0.4" - resolved "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.0.4.tgz" - integrity sha512-9MLKmkBmf4PRb0ONJikCbCwORACcil6gUWojwARCClT7RmLzF04hUR4WdRprIXal7XVyrddadYNfp2eF3nrvtQ== - dependencies: - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/util-retry@^4.0.6": - version "4.0.6" - resolved "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.0.6.tgz" - integrity sha512-+YekoF2CaSMv6zKrA6iI/N9yva3Gzn4L6n35Luydweu5MMPYpiGZlWqehPHDHyNbnyaYlz/WJyYAZnC+loBDZg== - dependencies: - "@smithy/service-error-classification" "^4.0.6" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@smithy/util-stream@^4.2.2", "@smithy/util-stream@^4.2.3": - version "4.2.3" - resolved "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.2.3.tgz" - integrity sha512-cQn412DWHHFNKrQfbHY8vSFI3nTROY1aIKji9N0tpp8gUABRilr7wdf8fqBbSlXresobM+tQFNk6I+0LXK/YZg== - dependencies: - "@smithy/fetch-http-handler" "^5.1.0" - "@smithy/node-http-handler" "^4.1.0" - "@smithy/types" "^4.3.1" - "@smithy/util-base64" "^4.0.0" - "@smithy/util-buffer-from" "^4.0.0" - "@smithy/util-hex-encoding" "^4.0.0" - "@smithy/util-utf8" "^4.0.0" - tslib "^2.6.2" - -"@smithy/util-uri-escape@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-uri-escape/-/util-uri-escape-4.0.0.tgz" - integrity sha512-77yfbCbQMtgtTylO9itEAdpPXSog3ZxMe09AEhm0dU0NLTalV70ghDZFR+Nfi1C60jnJoh/Re4090/DuZh2Omg== - dependencies: - tslib "^2.6.2" - -"@smithy/util-utf8@^2.0.0": - version "2.0.2" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-2.0.2.tgz" - integrity sha512-qOiVORSPm6Ce4/Yu6hbSgNHABLP2VMv8QOC3tTDNHHlWY19pPyc++fBTbZPtx6egPXi4HQxKDnMxVxpbtX2GoA== - dependencies: - "@smithy/util-buffer-from" "^2.0.0" - tslib "^2.5.0" - -"@smithy/util-utf8@^4.0.0": - version "4.0.0" - resolved "https://registry.npmjs.org/@smithy/util-utf8/-/util-utf8-4.0.0.tgz" - integrity sha512-b+zebfKCfRdgNJDknHCob3O7FpeYQN6ZG6YLExMcasDHsCXlsXCEuiPZeLnJLpwa5dvPetGlnGCiMHuLwGvFow== - dependencies: - "@smithy/util-buffer-from" "^4.0.0" - tslib "^2.6.2" - -"@smithy/util-waiter@^4.0.6": - version "4.0.6" - resolved "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.0.6.tgz" - integrity sha512-slcr1wdRbX7NFphXZOxtxRNA7hXAAtJAXJDE/wdoMAos27SIquVCKiSqfB6/28YzQ8FCsB5NKkhdM5gMADbqxg== - dependencies: - "@smithy/abort-controller" "^4.0.4" - "@smithy/types" "^4.3.1" - tslib "^2.6.2" - -"@types/dns-packet@^5.6.5": - version "5.6.5" - resolved "https://registry.npmjs.org/@types/dns-packet/-/dns-packet-5.6.5.tgz" - integrity sha512-qXOC7XLOEe43ehtWJCMnQXvgcIpv6rPmQ1jXT98Ad8A3TB1Ue50jsCbSSSyuazScEuZ/Q026vHbrOTVkmwA+7Q== - dependencies: - "@types/node" "*" - -"@types/estree@1.0.8": - version "1.0.8" - resolved "https://registry.npmjs.org/@types/estree/-/estree-1.0.8.tgz" - integrity sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w== - -"@types/linkify-it@^5": - version "5.0.0" - resolved "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-5.0.0.tgz" - integrity sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q== - -"@types/markdown-it@^14.1.1": - version "14.1.2" - resolved "https://registry.npmjs.org/@types/markdown-it/-/markdown-it-14.1.2.tgz" - integrity sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog== - dependencies: - "@types/linkify-it" "^5" - "@types/mdurl" "^2" - -"@types/mdurl@^2": - version "2.0.0" - resolved "https://registry.npmjs.org/@types/mdurl/-/mdurl-2.0.0.tgz" - integrity sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg== - -"@types/node@*": - version "24.0.13" - resolved "https://registry.npmjs.org/@types/node/-/node-24.0.13.tgz" - integrity sha512-Qm9OYVOFHFYg3wJoTSrz80hoec5Lia/dPp84do3X7dZvLikQvM1YpmvTBEdIr/e+U8HTkFjLHLnl78K/qjf+jQ== - dependencies: - undici-types "~7.8.0" - -"@types/uuid@^9.0.1": - version "9.0.8" - resolved "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz" - integrity sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA== - -abort-error@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/abort-error/-/abort-error-1.0.1.tgz" - integrity sha512-fxqCblJiIPdSXIUrxI0PL+eJG49QdP9SQ70qtB65MVAoMr2rASlOyAbJFOylfB467F/f+5BCLJJq58RYi7mGfg== - -acorn@^8.14.0: - version "8.15.0" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz" - integrity sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg== - -acorn@^8.8.2: - version "8.11.2" - resolved "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-regex@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz" - integrity sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA== - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^6.1.0: - version "6.2.1" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz" - integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== - -any-promise@^1.0.0: - version "1.3.0" - resolved "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz" - integrity sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A== - -argparse@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz" - integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -axios@1.10.0: - version "1.10.0" - resolved "https://registry.npmjs.org/axios/-/axios-1.10.0.tgz" - integrity sha512-/1xYAC4MP/HEG+3duIhFr4ZQXR4sQXOIe+o6sdqzeykGLx6Upp/1p8MHqhINOvGeP7xyNHe7tsiJByc4SSVUxw== - dependencies: - follow-redirects "^1.15.6" - form-data "^4.0.0" - proxy-from-env "^1.1.0" - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bowser@^2.11.0: - version "2.11.0" - resolved "https://registry.npmjs.org/bowser/-/bowser-2.11.0.tgz" - integrity sha512-AlcaJBi/pqqJBIQ8U9Mcpc9i8Aqxn88Skv5d+xBX006BY5u8N3mGLHa5Lgppa7L/HfwgwLgZ6NYs+Ag6uUmJRA== - -brace-expansion@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz" - integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== - dependencies: - balanced-match "^1.0.0" - -buffer-from@^1.0.0: - version "1.1.2" - resolved "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz" - integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== - -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" - -bundle-require@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/bundle-require/-/bundle-require-5.1.0.tgz" - integrity sha512-3WrrOuZiyaaZPWiEt4G3+IffISVC9HYlWueJEBWED4ZH4aIAC2PnkdnuRrR94M+w6yGWn4AglWtJtBI8YqvgoA== - dependencies: - load-tsconfig "^0.2.3" - -cac@^6.7.14: - version "6.7.14" - resolved "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz" - integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== - -camel-case@^4.1.2: - version "4.1.2" - resolved "https://registry.npmjs.org/camel-case/-/camel-case-4.1.2.tgz" - integrity sha512-gxGWBrTT1JuMx6R+o5PTXMmUnhnVzLQ9SNutD4YqKtI6ap897t3tKECYla6gCWEkplXnlNybEkZg9GEGxKFCgw== - dependencies: - pascal-case "^3.1.2" - tslib "^2.0.3" - -catharsis@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/catharsis/-/catharsis-0.9.0.tgz" - integrity sha512-prMTQVpcns/tzFgFVkVp6ak6RykZyWb3gu8ckUpd6YkTlacOd3DXGJjIpD4Q6zJirizvaiAjSSHlOsA+6sNh2A== - dependencies: - lodash "^4.17.15" - -cborg@^4.2.3: - version "4.2.12" - resolved "https://registry.npmjs.org/cborg/-/cborg-4.2.12.tgz" - integrity sha512-z126yLoavS75cdTuiKu61RC3Y3trqtDAgQRa5Q0dpHn1RmqhIedptWXKnk0lQ5yo/GmcV9myvIkzFgZ8GnqSog== - -chokidar@^4.0.3: - version "4.0.3" - resolved "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz" - integrity sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA== - dependencies: - readdirp "^4.0.1" - -clean-css@~5.3.2: - version "5.3.3" - resolved "https://registry.npmjs.org/clean-css/-/clean-css-5.3.3.tgz" - integrity sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg== - dependencies: - source-map "~0.6.0" - -clean-jsdoc-theme@4.3.0: - version "4.3.0" - resolved "https://registry.npmjs.org/clean-jsdoc-theme/-/clean-jsdoc-theme-4.3.0.tgz" - integrity sha512-QMrBdZ2KdPt6V2Ytg7dIt0/q32U4COpxvR0UDhPjRRKRL0o0MvRCR5YpY37/4rPF1SI1AYEKAWyof7ndCb/dzA== - dependencies: - "@jsdoc/salty" "^0.2.4" - fs-extra "^10.1.0" - html-minifier-terser "^7.2.0" - klaw-sync "^6.0.0" - lodash "^4.17.21" - showdown "^2.1.0" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -combined-stream@^1.0.8: - version "1.0.8" - resolved "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.0: - version "10.0.1" - resolved "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^2.20.0: - version "2.20.3" - resolved "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -commander@^4.0.0: - version "4.1.1" - resolved "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz" - integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== - -commander@^9.0.0: - version "9.5.0" - resolved "https://registry.npmjs.org/commander/-/commander-9.5.0.tgz" - integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== - -confbox@^0.1.8: - version "0.1.8" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz" - integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w== - -confbox@^0.2.2: - version "0.2.2" - resolved "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz" - integrity sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ== - -consola@^3.4.0: - version "3.4.2" - resolved "https://registry.npmjs.org/consola/-/consola-3.4.2.tgz" - integrity sha512-5IKcdX0nnYavi6G7TtOhwkYzyjfJlatbjMjuLSfE2kYT5pMDOilZ4OvMhi637CcDICTmz3wARPoyhqyX1Y+XvA== - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -debug@^4.4.0: - version "4.4.1" - resolved "https://registry.npmjs.org/debug/-/debug-4.4.1.tgz" - integrity sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ== - dependencies: - ms "^2.1.3" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dns-packet@^5.6.1: - version "5.6.1" - resolved "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz" - integrity sha512-l4gcSouhcgIKRvyy99RNVOgxXiicE+2jZoNmaNmZ6JXiGajBOJAesk1OBlJuM5k2c+eudGdLxDqXuPCKIj6kpw== - dependencies: - "@leichtgewicht/ip-codec" "^2.0.1" - -dot-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz" - integrity sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -eastasianwidth@^0.2.0: - version "0.2.0" - resolved "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz" - integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -emoji-regex@^9.2.2: - version "9.2.2" - resolved "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz" - integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg== - -entities@^4.4.0: - version "4.5.0" - resolved "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz" - integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== - -esbuild-plugins-node-modules-polyfill@1.7.1: - version "1.7.1" - resolved "https://registry.npmjs.org/esbuild-plugins-node-modules-polyfill/-/esbuild-plugins-node-modules-polyfill-1.7.1.tgz" - integrity sha512-IEaUhaS1RukGGcatDzqJmR+AzUWJ2upTJZP2i7FzR37Iw5Lk0LReCTnWnPMWnGG9lO4MWTGKEGGLWEOPegTRJA== - dependencies: - "@jspm/core" "^2.1.0" - local-pkg "^1.1.1" - resolve.exports "^2.0.3" - -esbuild@^0.25.0, esbuild@^0.25.8: - version "0.25.8" - resolved "https://registry.npmjs.org/esbuild/-/esbuild-0.25.8.tgz" - integrity sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q== - optionalDependencies: - "@esbuild/aix-ppc64" "0.25.8" - "@esbuild/android-arm" "0.25.8" - "@esbuild/android-arm64" "0.25.8" - "@esbuild/android-x64" "0.25.8" - "@esbuild/darwin-arm64" "0.25.8" - "@esbuild/darwin-x64" "0.25.8" - "@esbuild/freebsd-arm64" "0.25.8" - "@esbuild/freebsd-x64" "0.25.8" - "@esbuild/linux-arm" "0.25.8" - "@esbuild/linux-arm64" "0.25.8" - "@esbuild/linux-ia32" "0.25.8" - "@esbuild/linux-loong64" "0.25.8" - "@esbuild/linux-mips64el" "0.25.8" - "@esbuild/linux-ppc64" "0.25.8" - "@esbuild/linux-riscv64" "0.25.8" - "@esbuild/linux-s390x" "0.25.8" - "@esbuild/linux-x64" "0.25.8" - "@esbuild/netbsd-arm64" "0.25.8" - "@esbuild/netbsd-x64" "0.25.8" - "@esbuild/openbsd-arm64" "0.25.8" - "@esbuild/openbsd-x64" "0.25.8" - "@esbuild/openharmony-arm64" "0.25.8" - "@esbuild/sunos-x64" "0.25.8" - "@esbuild/win32-arm64" "0.25.8" - "@esbuild/win32-ia32" "0.25.8" - "@esbuild/win32-x64" "0.25.8" - -escape-string-regexp@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz" - integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== - -eventemitter3@^5.0.1: - version "5.0.1" - resolved "https://registry.npmjs.org/eventemitter3/-/eventemitter3-5.0.1.tgz" - integrity sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA== - -exsolve@^1.0.7: - version "1.0.7" - resolved "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz" - integrity sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw== - -fast-xml-parser@4.4.1: - version "4.4.1" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-4.4.1.tgz" - integrity sha512-xkjOecfnKGkSsOwtZ5Pz7Us/T6mrbPQrq0nh+aCO5V9nk5NLWmasAHumTKjiPJPWANe+kAZ84Jc8ooJkzZ88Sw== - dependencies: - strnum "^1.0.5" - -fast-xml-parser@5.2.5: - version "5.2.5" - resolved "https://registry.npmjs.org/fast-xml-parser/-/fast-xml-parser-5.2.5.tgz" - integrity sha512-pfX9uG9Ki0yekDHx2SiuRIyFdyAr1kMIMitPvb0YBo8SUfKvia7w7FIyd/l6av85pFYRhZscS75MwMnbvY+hcQ== - dependencies: - strnum "^2.1.0" - -fdir@^6.4.4: - version "6.4.6" - resolved "https://registry.npmjs.org/fdir/-/fdir-6.4.6.tgz" - integrity sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w== - -fix-dts-default-cjs-exports@^1.0.0: - version "1.0.1" - resolved "https://registry.npmjs.org/fix-dts-default-cjs-exports/-/fix-dts-default-cjs-exports-1.0.1.tgz" - integrity sha512-pVIECanWFC61Hzl2+oOCtoJ3F17kglZC/6N94eRWycFgBH35hHx0Li604ZIzhseh97mf2p0cv7vVrOZGoqhlEg== - dependencies: - magic-string "^0.30.17" - mlly "^1.7.4" - rollup "^4.34.8" - -follow-redirects@^1.15.6: - version "1.15.9" - resolved "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.9.tgz" - integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== - -foreground-child@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz" - integrity sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg== - dependencies: - cross-spawn "^7.0.0" - signal-exit "^4.0.1" - -form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.8" - mime-types "^2.1.12" - -fs-extra@^10.1.0: - version "10.1.0" - resolved "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz" - integrity sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ== - dependencies: - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fsevents@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" - integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== - -glob@^10.3.10: - version "10.3.10" - resolved "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz" - integrity sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g== - dependencies: - foreground-child "^3.1.0" - jackspeak "^2.3.5" - minimatch "^9.0.1" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - path-scurry "^1.10.1" - -graceful-fs@^4.1.11, graceful-fs@^4.1.6, graceful-fs@^4.1.9, graceful-fs@^4.2.0: - version "4.2.11" - resolved "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -hashlru@^2.3.0: - version "2.3.0" - resolved "https://registry.npmjs.org/hashlru/-/hashlru-2.3.0.tgz" - integrity sha512-0cMsjjIC8I+D3M44pOQdsy0OHXGLVz6Z0beRuufhKa0KfaD2wGwAev6jILzXsd3/vpnNQJmWyZtIILqM1N+n5A== - -html-minifier-terser@^7.2.0: - version "7.2.0" - resolved "https://registry.npmjs.org/html-minifier-terser/-/html-minifier-terser-7.2.0.tgz" - integrity sha512-tXgn3QfqPIpGl9o+K5tpcj3/MN4SfLtsx2GWwBC3SSd0tXQGyF3gsSqad8loJgKZGM3ZxbYDd5yhiBIdWpmvLA== - dependencies: - camel-case "^4.1.2" - clean-css "~5.3.2" - commander "^10.0.0" - entities "^4.4.0" - param-case "^3.0.4" - relateurl "^0.2.7" - terser "^5.15.1" - -ieee754@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -interface-datastore@^8.3.0, interface-datastore@^8.3.1: - version "8.3.2" - resolved "https://registry.npmjs.org/interface-datastore/-/interface-datastore-8.3.2.tgz" - integrity sha512-R3NLts7pRbJKc3qFdQf+u40hK8XWc0w4Qkx3OFEstC80VoaDUABY/dXA2EJPhtNC+bsrf41Ehvqb6+pnIclyRA== - dependencies: - interface-store "^6.0.0" - uint8arrays "^5.1.0" - -interface-store@^6.0.0: - version "6.0.3" - resolved "https://registry.npmjs.org/interface-store/-/interface-store-6.0.3.tgz" - integrity sha512-+WvfEZnFUhRwFxgz+QCQi7UC6o9AM0EHM9bpIe2Nhqb100NHCsTvNAn4eJgvgV2/tmLo1MP9nGxQKEcZTAueLA== - -ipns@10.1.2: - version "10.1.2" - resolved "https://registry.npmjs.org/ipns/-/ipns-10.1.2.tgz" - integrity sha512-RKAX20vZSHWEobmUw4zpU8t/kw+0CkrJYMA5ou39kNW5B4sAPGOiR/wGK9c51tQKA3rb8SeKs5g7ndNvNiS/vg== - dependencies: - "@libp2p/crypto" "^5.0.0" - "@libp2p/interface" "^2.0.0" - "@libp2p/logger" "^5.0.0" - cborg "^4.2.3" - interface-datastore "^8.3.0" - multiformats "^13.2.2" - protons-runtime "^5.5.0" - timestamp-nano "^1.0.1" - uint8arraylist "^2.4.8" - uint8arrays "^5.1.0" - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -it-pushable@^3.2.3: - version "3.2.3" - resolved "https://registry.npmjs.org/it-pushable/-/it-pushable-3.2.3.tgz" - integrity sha512-gzYnXYK8Y5t5b/BnJUr7glfQLO4U5vyb05gPx/TyTw+4Bv1zM9gFk4YsOrnulWefMewlphCjKkakFvj1y99Tcg== - dependencies: - p-defer "^4.0.0" - -it-stream-types@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/it-stream-types/-/it-stream-types-2.0.2.tgz" - integrity sha512-Rz/DEZ6Byn/r9+/SBCuJhpPATDF9D+dz5pbgSUyBsCDtza6wtNATrz/jz1gDyNanC3XdLboriHnOC925bZRBww== - -jackspeak@^2.3.5: - version "2.3.6" - resolved "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz" - integrity sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== - dependencies: - "@isaacs/cliui" "^8.0.2" - optionalDependencies: - "@pkgjs/parseargs" "^0.11.0" - -joycon@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz" - integrity sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw== - -js2xmlparser@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.2.tgz" - integrity sha512-6n4D8gLlLf1n5mNLQPRfViYzu9RATblzPEtm1SthMX1Pjao0r9YI9nw7ZIfRxQMERS87mcswrg+r/OYrPRX6jA== - dependencies: - xmlcreate "^2.0.4" - -jsdoc@4.0.4: - version "4.0.4" - resolved "https://registry.npmjs.org/jsdoc/-/jsdoc-4.0.4.tgz" - integrity sha512-zeFezwyXeG4syyYHbvh1A967IAqq/67yXtXvuL5wnqCkFZe8I0vKfm+EO+YEvLguo6w9CDUbrAXVtJSHh2E8rw== - dependencies: - "@babel/parser" "^7.20.15" - "@jsdoc/salty" "^0.2.1" - "@types/markdown-it" "^14.1.1" - bluebird "^3.7.2" - catharsis "^0.9.0" - escape-string-regexp "^2.0.0" - js2xmlparser "^4.0.2" - klaw "^3.0.0" - markdown-it "^14.1.0" - markdown-it-anchor "^8.6.7" - marked "^4.0.10" - mkdirp "^1.0.4" - requizzle "^0.2.3" - strip-json-comments "^3.1.0" - underscore "~1.13.2" - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -klaw-sync@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/klaw-sync/-/klaw-sync-6.0.0.tgz" - integrity sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ== - dependencies: - graceful-fs "^4.1.11" - -klaw@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz" - integrity sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g== - dependencies: - graceful-fs "^4.1.9" - -lilconfig@^3.1.1: - version "3.1.3" - resolved "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.3.tgz" - integrity sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw== - -lines-and-columns@^1.1.6: - version "1.2.4" - resolved "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz" - integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== - -linkify-it@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz" - integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ== - dependencies: - uc.micro "^2.0.0" - -load-tsconfig@^0.2.3: - version "0.2.5" - resolved "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz" - integrity sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg== - -local-pkg@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz" - integrity sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg== - dependencies: - mlly "^1.7.4" - pkg-types "^2.0.1" - quansync "^0.2.8" - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz" - integrity sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA== - -lodash@^4.17.15, lodash@^4.17.21: - version "4.17.21" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lower-case@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/lower-case/-/lower-case-2.0.2.tgz" - integrity sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== - dependencies: - tslib "^2.0.3" - -"lru-cache@^9.1.1 || ^10.0.0": - version "10.2.0" - resolved "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz" - integrity sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q== - -magic-string@^0.30.17: - version "0.30.17" - resolved "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz" - integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA== - dependencies: - "@jridgewell/sourcemap-codec" "^1.5.0" - -main-event@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/main-event/-/main-event-1.0.1.tgz" - integrity sha512-NWtdGrAca/69fm6DIVd8T9rtfDII4Q8NQbIbsKQq2VzS9eqOGYs8uaNQjcuaCq/d9H/o625aOTJX2Qoxzqw0Pw== - -markdown-it-anchor@^8.6.7: - version "8.6.7" - resolved "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-8.6.7.tgz" - integrity sha512-FlCHFwNnutLgVTflOYHPW2pPcl2AACqVzExlkGQNsi4CJgqOHN7YTgDd4LuhgN1BFO3TS0vLAruV1Td6dwWPJA== - -markdown-it@^14.1.0: - version "14.1.0" - resolved "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz" - integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg== - dependencies: - argparse "^2.0.1" - entities "^4.4.0" - linkify-it "^5.0.0" - mdurl "^2.0.0" - punycode.js "^2.3.1" - uc.micro "^2.1.0" - -marked@^4.0.10: - version "4.3.0" - resolved "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz" - integrity sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A== - -mdurl@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz" - integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w== - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12: - version "2.1.35" - resolved "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -minimatch@^9.0.1: - version "9.0.3" - resolved "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz" - integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== - dependencies: - brace-expansion "^2.0.1" - -"minipass@^5.0.0 || ^6.0.2 || ^7.0.0": - version "7.0.4" - resolved "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz" - integrity sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ== - -mkdirp@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz" - integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== - -mlly@^1.7.4: - version "1.7.4" - resolved "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz" - integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw== - dependencies: - acorn "^8.14.0" - pathe "^2.0.1" - pkg-types "^1.3.0" - ufo "^1.5.4" - -ms@^2.1.3: - version "2.1.3" - resolved "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -ms@^3.0.0-canary.1: - version "3.0.0-canary.1" - resolved "https://registry.npmjs.org/ms/-/ms-3.0.0-canary.1.tgz" - integrity sha512-kh8ARjh8rMN7Du2igDRO9QJnqCb2xYTJxyQYK7vJJS4TvLLmsbyhiKpSW+t+y26gyOyMd0riphX0GeWKU3ky5g== - -multiformats@^12.0.1: - version "12.1.3" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-12.1.3.tgz" - integrity sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw== - -multiformats@^13.0.0: - version "13.0.1" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.0.1.tgz" - integrity sha512-bt3R5iXe2O8xpp3wkmQhC73b/lC4S2ihU8Dndwcsysqbydqb8N+bpP116qMcClZ17g58iSIwtXUTcg2zT4sniA== - -multiformats@^13.2.2, multiformats@^13.3.6: - version "13.3.7" - resolved "https://registry.npmjs.org/multiformats/-/multiformats-13.3.7.tgz" - integrity sha512-meL9DERHj+fFVWoOX9fXqfcYcSpUfSYJPcFvDPKrxitICbwAoWR+Ut4j5NO9zAT917HUHLQmqzQbAsGNHlDcxQ== - -mz@^2.7.0: - version "2.7.0" - resolved "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz" - integrity sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q== - dependencies: - any-promise "^1.0.0" - object-assign "^4.0.1" - thenify-all "^1.0.0" - -no-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/no-case/-/no-case-3.0.4.tgz" - integrity sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg== - dependencies: - lower-case "^2.0.2" - tslib "^2.0.3" - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz" - integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== - -p-defer@^4.0.0: - version "4.0.0" - resolved "https://registry.npmjs.org/p-defer/-/p-defer-4.0.0.tgz" - integrity sha512-Vb3QRvQ0Y5XnF40ZUWW7JfLogicVh/EnA5gBIvKDJoYpeI82+1E3AlB9yOcKFS0AhHrWVnAQO39fbR0G99IVEQ== - -p-queue@^8.0.1: - version "8.0.1" - resolved "https://registry.npmjs.org/p-queue/-/p-queue-8.0.1.tgz" - integrity sha512-NXzu9aQJTAzbBqOt2hwsR63ea7yvxJc0PwN/zobNAudYfb1B7R08SzB4TsLeSbUCuG467NhnoT0oO6w1qRO+BA== - dependencies: - eventemitter3 "^5.0.1" - p-timeout "^6.1.2" - -p-timeout@^6.1.2: - version "6.1.2" - resolved "https://registry.npmjs.org/p-timeout/-/p-timeout-6.1.2.tgz" - integrity sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ== - -param-case@^3.0.4: - version "3.0.4" - resolved "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz" - integrity sha512-RXlj7zCYokReqWpOPH9oYivUzLYZ5vAPIfEmCTNViosC78F8F0H9y7T7gG2M39ymgutxF5gcFEsyZQSph9Bp3A== - dependencies: - dot-case "^3.0.4" - tslib "^2.0.3" - -pascal-case@^3.1.2: - version "3.1.2" - resolved "https://registry.npmjs.org/pascal-case/-/pascal-case-3.1.2.tgz" - integrity sha512-uWlGT3YSnK9x3BQJaOdcZwrnV6hPpd8jFH1/ucpiLRPh/2zCVJKS19E4GvYHvaCcACn3foXZ0cLB9Wrx1KGe5g== - dependencies: - no-case "^3.0.4" - tslib "^2.0.3" - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-scurry@^1.10.1: - version "1.10.1" - resolved "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz" - integrity sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ== - dependencies: - lru-cache "^9.1.1 || ^10.0.0" - minipass "^5.0.0 || ^6.0.2 || ^7.0.0" - -pathe@^2.0.1, pathe@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz" - integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w== - -picocolors@^1.1.1: - version "1.1.1" - resolved "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz" - integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== - -picomatch@^4.0.2: - version "4.0.3" - resolved "https://registry.npmjs.org/picomatch/-/picomatch-4.0.3.tgz" - integrity sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q== - -pirates@^4.0.1: - version "4.0.6" - resolved "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== - -pkg-types@^1.3.0: - version "1.3.1" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz" - integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ== - dependencies: - confbox "^0.1.8" - mlly "^1.7.4" - pathe "^2.0.1" - -pkg-types@^2.0.1: - version "2.2.0" - resolved "https://registry.npmjs.org/pkg-types/-/pkg-types-2.2.0.tgz" - integrity sha512-2SM/GZGAEkPp3KWORxQZns4M+WSeXbC2HEvmOIJe3Cmiv6ieAJvdVhDldtHqM5J1Y7MrR1XhkBT/rMlhh9FdqQ== - dependencies: - confbox "^0.2.2" - exsolve "^1.0.7" - pathe "^2.0.3" - -postcss-load-config@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz" - integrity sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g== - dependencies: - lilconfig "^3.1.1" - -prettier@3.6.2: - version "3.6.2" - resolved "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz" - integrity sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ== - -progress-events@^1.0.0, progress-events@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/progress-events/-/progress-events-1.0.1.tgz" - integrity sha512-MOzLIwhpt64KIVN64h1MwdKWiyKFNc/S6BoYKPIVUHFg0/eIEyBulhWCgn678v/4c0ri3FdGuzXymNCv02MUIw== - -protons-runtime@^5.5.0: - version "5.6.0" - resolved "https://registry.npmjs.org/protons-runtime/-/protons-runtime-5.6.0.tgz" - integrity sha512-/Kde+sB9DsMFrddJT/UZWe6XqvL7SL5dbag/DBCElFKhkwDj7XKt53S+mzLyaDP5OqS0wXjV5SA572uWDaT0Hg== - dependencies: - uint8-varint "^2.0.2" - uint8arraylist "^2.4.3" - uint8arrays "^5.0.1" - -proxy-from-env@^1.1.0: - version "1.1.0" - resolved "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -punycode.js@^2.3.1: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz" - integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA== - -punycode@^2.1.0: - version "2.3.1" - resolved "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz" - integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== - -quansync@^0.2.8: - version "0.2.10" - resolved "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz" - integrity sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A== - -readdirp@^4.0.1: - version "4.1.2" - resolved "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz" - integrity sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg== - -relateurl@^0.2.7: - version "0.2.7" - resolved "https://registry.npmjs.org/relateurl/-/relateurl-0.2.7.tgz" - integrity sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog== - -requizzle@^0.2.3: - version "0.2.4" - resolved "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz" - integrity sha512-JRrFk1D4OQ4SqovXOgdav+K8EAhSB/LJZqCz8tbX0KObcdeM15Ss59ozWMBWmmINMagCwmqn4ZNryUGpBsl6Jw== - dependencies: - lodash "^4.17.21" - -resolve-from@^5.0.0: - version "5.0.0" - resolved "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz" - integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== - -resolve.exports@^2.0.3: - version "2.0.3" - resolved "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz" - integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== - -rollup@^4.34.8: - version "4.45.1" - resolved "https://registry.npmjs.org/rollup/-/rollup-4.45.1.tgz" - integrity sha512-4iya7Jb76fVpQyLoiVpzUrsjQ12r3dM7fIVz+4NwoYvZOShknRmiv+iu9CClZml5ZLGb0XMcYLutK6w9tgxHDw== - dependencies: - "@types/estree" "1.0.8" - optionalDependencies: - "@rollup/rollup-android-arm-eabi" "4.45.1" - "@rollup/rollup-android-arm64" "4.45.1" - "@rollup/rollup-darwin-arm64" "4.45.1" - "@rollup/rollup-darwin-x64" "4.45.1" - "@rollup/rollup-freebsd-arm64" "4.45.1" - "@rollup/rollup-freebsd-x64" "4.45.1" - "@rollup/rollup-linux-arm-gnueabihf" "4.45.1" - "@rollup/rollup-linux-arm-musleabihf" "4.45.1" - "@rollup/rollup-linux-arm64-gnu" "4.45.1" - "@rollup/rollup-linux-arm64-musl" "4.45.1" - "@rollup/rollup-linux-loongarch64-gnu" "4.45.1" - "@rollup/rollup-linux-powerpc64le-gnu" "4.45.1" - "@rollup/rollup-linux-riscv64-gnu" "4.45.1" - "@rollup/rollup-linux-riscv64-musl" "4.45.1" - "@rollup/rollup-linux-s390x-gnu" "4.45.1" - "@rollup/rollup-linux-x64-gnu" "4.45.1" - "@rollup/rollup-linux-x64-musl" "4.45.1" - "@rollup/rollup-win32-arm64-msvc" "4.45.1" - "@rollup/rollup-win32-ia32-msvc" "4.45.1" - "@rollup/rollup-win32-x64-msvc" "4.45.1" - fsevents "~2.3.2" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -showdown@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/showdown/-/showdown-2.1.0.tgz" - integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== - dependencies: - commander "^9.0.0" - -signal-exit@^4.0.1: - version "4.1.0" - resolved "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz" - integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== - -source-map-support@~0.5.20: - version "0.5.21" - resolved "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz" - integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map@0.8.0-beta.0: - version "0.8.0-beta.0" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz" - integrity sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA== - dependencies: - whatwg-url "^7.0.0" - -source-map@^0.6.0, source-map@~0.6.0: - version "0.6.1" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -"string-width-cjs@npm:string-width@^4.2.0": - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^4.1.0: - version "4.2.3" - resolved "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string-width@^5.0.1, string-width@^5.1.2: - version "5.1.2" - resolved "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz" - integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA== - dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^9.2.2" - strip-ansi "^7.0.1" - -"strip-ansi-cjs@npm:strip-ansi@^6.0.1": - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-ansi@^7.0.1: - version "7.1.0" - resolved "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz" - integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ== - dependencies: - ansi-regex "^6.0.1" - -strip-json-comments@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz" - integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== - -strnum@^1.0.5: - version "1.1.2" - resolved "https://registry.npmjs.org/strnum/-/strnum-1.1.2.tgz" - integrity sha512-vrN+B7DBIoTTZjnPNewwhx6cBA/H+IS7rfW68n7XxC1y7uoiGQBxaKzqucGUgavX15dJgiGztLJ8vxuEzwqBdA== - -strnum@^2.1.0: - version "2.1.1" - resolved "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz" - integrity sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw== - -sucrase@^3.35.0: - version "3.35.0" - resolved "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz" - integrity sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA== - dependencies: - "@jridgewell/gen-mapping" "^0.3.2" - commander "^4.0.0" - glob "^10.3.10" - lines-and-columns "^1.1.6" - mz "^2.7.0" - pirates "^4.0.1" - ts-interface-checker "^0.1.9" - -supports-color@^9.4.0: - version "9.4.0" - resolved "https://registry.npmjs.org/supports-color/-/supports-color-9.4.0.tgz" - integrity sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw== - -terser@^5.15.1: - version "5.26.0" - resolved "https://registry.npmjs.org/terser/-/terser-5.26.0.tgz" - integrity sha512-dytTGoE2oHgbNV9nTzgBEPaqAWvcJNl66VZ0BkJqlvp71IjO8CxdBx/ykCNb47cLnCmCvRZ6ZR0tLkqvZCdVBQ== - dependencies: - "@jridgewell/source-map" "^0.3.3" - acorn "^8.8.2" - commander "^2.20.0" - source-map-support "~0.5.20" - -thenify-all@^1.0.0: - version "1.6.0" - resolved "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz" - integrity sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA== - dependencies: - thenify ">= 3.1.0 < 4" - -"thenify@>= 3.1.0 < 4": - version "3.3.1" - resolved "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz" - integrity sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw== - dependencies: - any-promise "^1.0.0" - -timestamp-nano@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/timestamp-nano/-/timestamp-nano-1.0.1.tgz" - integrity sha512-4oGOVZWTu5sl89PtCDnhQBSt7/vL1zVEwAfxH1p49JhTosxzVQWYBYFRFZ8nJmo0G6f824iyP/44BFAwIoKvIA== - -tinyexec@^0.3.2: - version "0.3.2" - resolved "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz" - integrity sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA== - -tinyglobby@^0.2.11: - version "0.2.14" - resolved "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.14.tgz" - integrity sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ== - dependencies: - fdir "^6.4.4" - picomatch "^4.0.2" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz" - integrity sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA== - dependencies: - punycode "^2.1.0" - -tree-kill@^1.2.2: - version "1.2.2" - resolved "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz" - integrity sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A== - -ts-interface-checker@^0.1.9: - version "0.1.13" - resolved "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz" - integrity sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA== - -tslib@^2.0.3, tslib@^2.5.0, tslib@^2.6.2: - version "2.6.2" - resolved "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz" - integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== - -tsup@8.5.0: - version "8.5.0" - resolved "https://registry.npmjs.org/tsup/-/tsup-8.5.0.tgz" - integrity sha512-VmBp77lWNQq6PfuMqCHD3xWl22vEoWsKajkF8t+yMBawlUS8JzEI+vOVMeuNZIuMML8qXRizFKi9oD5glKQVcQ== - dependencies: - bundle-require "^5.1.0" - cac "^6.7.14" - chokidar "^4.0.3" - consola "^3.4.0" - debug "^4.4.0" - esbuild "^0.25.0" - fix-dts-default-cjs-exports "^1.0.0" - joycon "^3.1.1" - picocolors "^1.1.1" - postcss-load-config "^6.0.1" - resolve-from "^5.0.0" - rollup "^4.34.8" - source-map "0.8.0-beta.0" - sucrase "^3.35.0" - tinyexec "^0.3.2" - tinyglobby "^0.2.11" - tree-kill "^1.2.2" - -typescript@5.8.3: - version "5.8.3" - resolved "https://registry.npmjs.org/typescript/-/typescript-5.8.3.tgz" - integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== - -uc.micro@^2.0.0, uc.micro@^2.1.0: - version "2.1.0" - resolved "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz" - integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A== - -ufo@^1.5.4: - version "1.6.1" - resolved "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz" - integrity sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA== - -uint8-varint@^2.0.1, uint8-varint@^2.0.2: - version "2.0.2" - resolved "https://registry.npmjs.org/uint8-varint/-/uint8-varint-2.0.2.tgz" - integrity sha512-LZXmBT0jiHR7J4oKM1GUhtdLFW1yPauzI8NjJlotXn92TprO9u8VMvEVR4QMk8xhUVUd+2fqfU2/kGbVHYSSWw== - dependencies: - uint8arraylist "^2.0.0" - uint8arrays "^4.0.2" - -uint8arraylist@^2.0.0, uint8arraylist@^2.4.3, uint8arraylist@^2.4.8: - version "2.4.8" - resolved "https://registry.npmjs.org/uint8arraylist/-/uint8arraylist-2.4.8.tgz" - integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== - dependencies: - uint8arrays "^5.0.1" - -uint8arrays@^4.0.2: - version "4.0.10" - resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-4.0.10.tgz" - integrity sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA== - dependencies: - multiformats "^12.0.1" - -uint8arrays@^5.0.0, uint8arrays@^5.0.1, uint8arrays@^5.0.2, uint8arrays@^5.1.0: - version "5.1.0" - resolved "https://registry.npmjs.org/uint8arrays/-/uint8arrays-5.1.0.tgz" - integrity sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww== - dependencies: - multiformats "^13.0.0" - -underscore@~1.13.2: - version "1.13.6" - resolved "https://registry.npmjs.org/underscore/-/underscore-1.13.6.tgz" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== - -undici-types@~7.8.0: - version "7.8.0" - resolved "https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz" - integrity sha512-9UJ2xGDvQ43tYyVMpuHlsgApydB8ZKfVYTsLDhXkFL/6gfkp+U8xTGdh8pMJv1SpZna0zxG1DwsKZsreLbXBxw== - -universalify@^2.0.0: - version "2.0.1" - resolved "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz" - integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== - -uuid@11.1.0: - version "11.1.0" - resolved "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz" - integrity sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A== - -uuid@^9.0.1: - version "9.0.1" - resolved "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz" - integrity sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA== - -weald@^1.0.4: - version "1.0.4" - resolved "https://registry.npmjs.org/weald/-/weald-1.0.4.tgz" - integrity sha512-+kYTuHonJBwmFhP1Z4YQK/dGi3jAnJGCYhyODFpHK73rbxnp9lnZQj7a2m+WVgn8fXr5bJaxUpF6l8qZpPeNWQ== - dependencies: - ms "^3.0.0-canary.1" - supports-color "^9.4.0" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -"wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^8.1.0: - version "8.1.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz" - integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ== - dependencies: - ansi-styles "^6.1.0" - string-width "^5.0.1" - strip-ansi "^7.0.1" - -xmlcreate@^2.0.4: - version "2.0.4" - resolved "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz" - integrity sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==