From ffcd9c75aee61d37b7fdfc55f2d4b7bee7e9d724 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 1 Nov 2024 16:11:10 +0000 Subject: [PATCH 01/12] feat: wip router --- packages/capabilities/package.json | 14 +- packages/capabilities/src/blob.js | 202 ++++-------- packages/capabilities/src/http.js | 2 +- packages/capabilities/src/index.js | 20 +- packages/capabilities/src/space/blob.js | 177 ++++++++++ .../src/{index => space}/index.js | 6 +- packages/capabilities/src/types.ts | 45 +-- packages/capabilities/src/utils.js | 37 +-- .../capabilities/src/web3.storage/blob.js | 8 +- .../test/capabilities/blob.test.js | 311 ++++++++++++++++++ .../test/capabilities/index.test.js | 24 +- packages/capabilities/test/helpers/utils.js | 11 +- packages/upload-api/src/blob/accept.js | 4 +- packages/upload-api/src/blob/add.js | 43 ++- packages/upload-api/src/blob/allocate.js | 4 +- packages/upload-api/src/blob/get.js | 6 +- packages/upload-api/src/blob/list.js | 6 +- packages/upload-api/src/blob/remove.js | 6 +- packages/upload-api/src/index/add.js | 4 +- packages/upload-api/src/types.ts | 35 +- packages/upload-api/src/types/blob.ts | 59 ++++ 21 files changed, 770 insertions(+), 254 deletions(-) create mode 100644 packages/capabilities/src/space/blob.js rename packages/capabilities/src/{index => space}/index.js (89%) create mode 100644 packages/capabilities/test/capabilities/blob.test.js diff --git a/packages/capabilities/package.json b/packages/capabilities/package.json index 650dd8991..8a5c9d150 100644 --- a/packages/capabilities/package.json +++ b/packages/capabilities/package.json @@ -37,6 +37,10 @@ "types": "./dist/test/helpers/*.d.ts", "import": "./test/helpers/*.js" }, + "./blob": { + "types": "./dist/src/blob.d.ts", + "import": "./src/blob.js" + }, "./filecoin": { "types": "./dist/src/filecoin/index.d.ts", "import": "./src/filecoin/index.js" @@ -57,9 +61,13 @@ "types": "./dist/src/filecoin/dealer.d.ts", "import": "./src/filecoin/dealer.js" }, - "./index": { - "types": "./dist/src/index/index.d.ts", - "import": "./src/index/index.js" + "./space/index": { + "types": "./dist/src/space/index.d.ts", + "import": "./src/space/index.js" + }, + "./space/blob": { + "types": "./dist/src/space/blob.d.ts", + "import": "./src/space/blob.js" }, "./web3.storage/blob": { "types": "./dist/src/web3.storage/blob.d.ts", diff --git a/packages/capabilities/src/blob.js b/packages/capabilities/src/blob.js index 6d652a5b7..44470b61f 100644 --- a/packages/capabilities/src/blob.js +++ b/packages/capabilities/src/blob.js @@ -1,177 +1,91 @@ /** * Blob Capabilities. * - * Blob is a fixed size byte array addressed by the multihash. - * Usually blobs are used to represent set of IPLD blocks at different byte ranges. + * The blob protocol allows authorized agents allocate memory space on a storage + * node and subsequently verify the content has been accepted by / delivered to + * said node. * * These can be imported directly with: * ```js - * import * as Blob from '@storacha/capabilities/blob' + * import * as Index from '@storacha/capabilities/blob' * ``` * * @module + * @see https://github.com/storacha/specs/blob/main/w3-blob.md */ -import { equals } from 'uint8arrays/equals' -import { capability, Schema, fail, ok } from '@ucanto/validator' -import { equalBlob, equalWith, SpaceDID } from './utils.js' - -/** - * Agent capabilities for Blob protocol - */ +import { capability, Schema, Link, ok } from '@ucanto/validator' +import { content } from './space/blob.js' +import { + equalBlob, + equalWith, + SpaceDID, + and, + equal, + checkLink, + Await, +} from './utils.js' /** * Capability can only be delegated (but not invoked) allowing audience to - * derived any `space/blob/` prefixed capability for the (memory) space identified - * by DID in the `with` field. + * derive any `blob/` prefixed capability. */ export const blob = capability({ - can: 'space/blob/*', - /** - * DID of the (memory) space where Blob is intended to - * be stored. - */ - with: SpaceDID, + can: 'blob/*', + /** Storage provider DID. */ + with: Schema.did(), derives: equalWith, }) /** - * Blob description for being ingested by the service. - */ -export const content = Schema.struct({ - /** - * A multihash digest of the blob payload bytes, uniquely identifying blob. - */ - digest: Schema.bytes(), - /** - * Number of bytes contained by this blob. Service will provision write target - * for this exact size. Attempt to write a larger Blob file will fail. - */ - size: Schema.integer(), -}) - -/** - * `space/blob/add` capability allows agent to store a Blob into a (memory) space - * identified by did:key in the `with` field. Agent should compute blob multihash - * and size and provide it under `nb.blob` field, allowing a service to provision - * a write location for the agent to PUT desired Blob into. + * The `blob/allocate` capability can be invoked to create a memory address on a + * storage node where blob content can be written via a HTTP PUT request. */ -export const add = capability({ - can: 'space/blob/add', - /** - * DID of the (memory) space where Blob is intended to - * be stored. - */ - with: SpaceDID, +export const allocate = capability({ + can: 'blob/allocate', + /** Storage provider DID. */ + with: Schema.did(), nb: Schema.struct({ - /** - * Blob to be added on the space. - */ + /** Blob to allocate. */ blob: content, + /** Link to the add blob task that initiated the allocation. */ + cause: Link, + /** DID of the user space where the allocation takes place. */ + space: SpaceDID, }), - derives: equalBlob, -}) - -/** - * Capability can be used to remove the stored Blob from the (memory) - * space identified by `with` field. - */ -export const remove = capability({ - can: 'space/blob/remove', - /** - * DID of the (memory) space where Blob is stored. - */ - with: SpaceDID, - nb: Schema.struct({ - /** - * A multihash digest of the blob payload bytes, uniquely identifying blob. - */ - digest: Schema.bytes(), - }), - derives: (claimed, delegated) => { - if (claimed.with !== delegated.with) { - return fail( - `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` - ) - } else if ( - delegated.nb.digest && - !equals(delegated.nb.digest, claimed.nb.digest) - ) { - return fail( - `Link ${ - claimed.nb.digest ? `${claimed.nb.digest}` : '' - } violates imposed ${delegated.nb.digest} constraint.` - ) - } - return ok({}) - }, -}) - -/** - * Capability can be invoked to request a list of stored Blobs in the - * (memory) space identified by `with` field. - */ -export const list = capability({ - can: 'space/blob/list', - /** - * DID of the (memory) space where Blobs to be listed are stored. - */ - with: SpaceDID, - nb: Schema.struct({ - /** - * A pointer that can be moved back and forth on the list. - * It can be used to paginate a list for instance. - */ - cursor: Schema.string().optional(), - /** - * Maximum number of items per page. - */ - size: Schema.integer().optional(), - }), - derives: (claimed, delegated) => { - if (claimed.with !== delegated.with) { - return fail( - `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` - ) - } - return ok({}) - }, + derives: (claimed, delegated) => ( + and(equalWith(claimed, delegated)) || + and(equalBlob(claimed, delegated)) || + and(checkLink(claimed.nb.cause, delegated.nb.cause, 'cause')) || + and(equal(claimed.nb.space, delegated.nb.space, 'space')) || + ok({}) + ), }) /** - * Capability can be used to get the stored Blob from the (memory) - * space identified by `with` field. + * The `blob/accept` capability invocation should either succeed when content is + * delivered on allocated address or fail if no content is allocation expires + * without content being delivered. */ -export const get = capability({ - can: 'space/blob/get/0/1', - /** - * DID of the (memory) space where Blob is stored. - */ - with: SpaceDID, +export const accept = capability({ + can: 'blob/accept', + /** Storage provider DID. */ + with: Schema.did(), nb: Schema.struct({ - /** - * A multihash digest of the blob payload bytes, uniquely identifying blob. - */ - digest: Schema.bytes(), + /** Blob to accept. */ + blob: content, + /** DID of the user space where allocation took place. */ + space: SpaceDID, + /** This task is blocked on `http/put` receipt available */ + _put: Await, }), - derives: (claimed, delegated) => { - if (claimed.with !== delegated.with) { - return fail( - `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` - ) - } else if ( - delegated.nb.digest && - !equals(delegated.nb.digest, claimed.nb.digest) - ) { - return fail( - `Link ${ - claimed.nb.digest ? `${claimed.nb.digest}` : '' - } violates imposed ${delegated.nb.digest} constraint.` - ) - } - return ok({}) - }, + derives: (claimed, delegated) => ( + and(equalWith(claimed, delegated)) || + and(equalBlob(claimed, delegated)) || + and(equal(claimed.nb.space, delegated.nb.space, 'space')) || + ok({}) + ), }) // ⚠️ We export imports here so they are not omitted in generated typedefs // @see https://github.com/microsoft/TypeScript/issues/51548 -export { Schema } +export { Schema, Link } diff --git a/packages/capabilities/src/http.js b/packages/capabilities/src/http.js index 880d3a5b7..0d60a4e7a 100644 --- a/packages/capabilities/src/http.js +++ b/packages/capabilities/src/http.js @@ -9,7 +9,7 @@ * @module */ import { capability, Schema, ok } from '@ucanto/validator' -import { content } from './blob.js' +import { content } from './space/blob.js' import { equal, equalBody, equalWith, SpaceDID, Await, and } from './utils.js' /** diff --git a/packages/capabilities/src/index.js b/packages/capabilities/src/index.js index beb10efb8..213bf437a 100644 --- a/packages/capabilities/src/index.js +++ b/packages/capabilities/src/index.js @@ -16,11 +16,11 @@ import * as Storefront from './filecoin/storefront.js' import * as Aggregator from './filecoin/aggregator.js' import * as Dealer from './filecoin/dealer.js' import * as DealTracker from './filecoin/deal-tracker.js' -import * as Index from './index/index.js' +import * as SpaceIndex from './space/index.js' import * as UCAN from './ucan.js' import * as Plan from './plan.js' import * as Usage from './usage.js' -import * as Blob from './blob.js' +import * as SpaceBlob from './space/blob.js' import * as W3sBlob from './web3.storage/blob.js' import * as HTTP from './http.js' @@ -38,7 +38,7 @@ export { RateLimit, Subscription, Filecoin, - Index, + SpaceIndex, Storefront, Aggregator, Dealer, @@ -47,7 +47,7 @@ export { UCAN, Plan, Usage, - Blob, + SpaceBlob, W3sBlob, HTTP, } @@ -97,14 +97,14 @@ export const abilitiesAsStrings = [ Plan.createAdminSession.can, Usage.usage.can, Usage.report.can, - Blob.blob.can, - Blob.add.can, - Blob.remove.can, - Blob.list.can, + SpaceBlob.blob.can, + SpaceBlob.add.can, + SpaceBlob.remove.can, + SpaceBlob.list.can, W3sBlob.blob.can, W3sBlob.allocate.can, W3sBlob.accept.can, HTTP.put.can, - Index.index.can, - Index.add.can, + SpaceIndex.index.can, + SpaceIndex.add.can, ] diff --git a/packages/capabilities/src/space/blob.js b/packages/capabilities/src/space/blob.js new file mode 100644 index 000000000..26f71a025 --- /dev/null +++ b/packages/capabilities/src/space/blob.js @@ -0,0 +1,177 @@ +/** + * Blob Capabilities. + * + * Blob is a fixed size byte array addressed by the multihash. + * Usually blobs are used to represent set of IPLD blocks at different byte ranges. + * + * These can be imported directly with: + * ```js + * import * as Blob from '@storacha/capabilities/space/blob' + * ``` + * + * @module + */ +import { equals as SpaceBlob } from 'uint8arrays/equals' +import { capability, Schema, fail, ok } from '@ucanto/validator' +import { equalBlob, equalWith, SpaceDID } from '../utils.js' + +/** + * Agent capabilities for Blob protocol + */ + +/** + * Capability can only be delegated (but not invoked) allowing audience to + * derived any `space/blob/` prefixed capability for the (memory) space identified + * by DID in the `with` field. + */ +export const blob = capability({ + can: 'space/blob/*', + /** + * DID of the (memory) space where Blob is intended to + * be stored. + */ + with: SpaceDID, + derives: equalWith, +}) + +/** + * Blob description for being ingested by the service. + */ +export const content = Schema.struct({ + /** + * A multihash digest of the blob payload bytes, uniquely identifying blob. + */ + digest: Schema.bytes(), + /** + * Number of bytes contained by this blob. Service will provision write target + * for this exact size. Attempt to write a larger Blob file will fail. + */ + size: Schema.integer(), +}) + +/** + * `space/blob/add` capability allows agent to store a Blob into a (memory) space + * identified by did:key in the `with` field. Agent should compute blob multihash + * and size and provide it under `nb.blob` field, allowing a service to provision + * a write location for the agent to PUT desired Blob into. + */ +export const add = capability({ + can: 'space/blob/add', + /** + * DID of the (memory) space where Blob is intended to + * be stored. + */ + with: SpaceDID, + nb: Schema.struct({ + /** + * Blob to be added on the space. + */ + blob: content, + }), + derives: equalBlob, +}) + +/** + * Capability can be used to remove the stored Blob from the (memory) + * space identified by `with` field. + */ +export const remove = capability({ + can: 'space/blob/remove', + /** + * DID of the (memory) space where Blob is stored. + */ + with: SpaceDID, + nb: Schema.struct({ + /** + * A multihash digest of the blob payload bytes, uniquely identifying blob. + */ + digest: Schema.bytes(), + }), + derives: (claimed, delegated) => { + if (claimed.with !== delegated.with) { + return fail( + `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` + ) + } else if ( + delegated.nb.digest && + !SpaceBlob(delegated.nb.digest, claimed.nb.digest) + ) { + return fail( + `Link ${ + claimed.nb.digest ? `${claimed.nb.digest}` : '' + } violates imposed ${delegated.nb.digest} constraint.` + ) + } + return ok({}) + }, +}) + +/** + * Capability can be invoked to request a list of stored Blobs in the + * (memory) space identified by `with` field. + */ +export const list = capability({ + can: 'space/blob/list', + /** + * DID of the (memory) space where Blobs to be listed are stored. + */ + with: SpaceDID, + nb: Schema.struct({ + /** + * A pointer that can be moved back and forth on the list. + * It can be used to paginate a list for instance. + */ + cursor: Schema.string().optional(), + /** + * Maximum number of items per page. + */ + size: Schema.integer().optional(), + }), + derives: (claimed, delegated) => { + if (claimed.with !== delegated.with) { + return fail( + `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` + ) + } + return ok({}) + }, +}) + +/** + * Capability can be used to get the stored Blob from the (memory) + * space identified by `with` field. + */ +export const get = capability({ + can: 'space/blob/get/0/1', + /** + * DID of the (memory) space where Blob is stored. + */ + with: SpaceDID, + nb: Schema.struct({ + /** + * A multihash digest of the blob payload bytes, uniquely identifying blob. + */ + digest: Schema.bytes(), + }), + derives: (claimed, delegated) => { + if (claimed.with !== delegated.with) { + return fail( + `Expected 'with: "${delegated.with}"' instead got '${claimed.with}'` + ) + } else if ( + delegated.nb.digest && + !SpaceBlob(delegated.nb.digest, claimed.nb.digest) + ) { + return fail( + `Link ${ + claimed.nb.digest ? `${claimed.nb.digest}` : '' + } violates imposed ${delegated.nb.digest} constraint.` + ) + } + return ok({}) + }, +}) + +// ⚠️ We export imports here so they are not omitted in generated typedefs +// @see https://github.com/microsoft/TypeScript/issues/51548 +export { Schema } diff --git a/packages/capabilities/src/index/index.js b/packages/capabilities/src/space/index.js similarity index 89% rename from packages/capabilities/src/index/index.js rename to packages/capabilities/src/space/index.js index 6d6ad2b60..62020a4e8 100644 --- a/packages/capabilities/src/index/index.js +++ b/packages/capabilities/src/space/index.js @@ -7,12 +7,12 @@ * * These can be imported directly with: * ```js - * import * as Index from '@storacha/capabilities/index' + * import * as Index from '@storacha/capabilities/space/index' * ``` * * @module */ -import { CAR } from '@ucanto/core' +import { CAR as SpaceIndex } from '@ucanto/core' import { capability, Schema, ok } from '@ucanto/validator' import { equalWith, SpaceDID, and, equal } from '../utils.js' @@ -39,7 +39,7 @@ export const add = capability({ with: SpaceDID, nb: Schema.struct({ /** Content Archive (CAR) containing the `Index`. */ - index: Schema.link({ code: CAR.code, version: 1 }), + index: Schema.link({ code: SpaceIndex.code, version: 1 }), }), derives: (claimed, delegated) => and(equalWith(claimed, delegated)) || diff --git a/packages/capabilities/src/types.ts b/packages/capabilities/src/types.ts index 2cf6b3d25..2aa3a5a25 100644 --- a/packages/capabilities/src/types.ts +++ b/packages/capabilities/src/types.ts @@ -22,6 +22,7 @@ import { space, info } from './space.js' import * as provider from './provider.js' import { top } from './top.js' import * as BlobCaps from './blob.js' +import * as SpaceBlobCaps from './space/blob.js' import * as W3sBlobCaps from './web3.storage/blob.js' import * as HTTPCaps from './http.js' import * as StoreCaps from './store.js' @@ -35,7 +36,7 @@ import * as StorefrontCaps from './filecoin/storefront.js' import * as AggregatorCaps from './filecoin/aggregator.js' import * as DealTrackerCaps from './filecoin/deal-tracker.js' import * as DealerCaps from './filecoin/dealer.js' -import * as IndexCaps from './index/index.js' +import * as SpaceIndexCaps from './space/index.js' import * as AdminCaps from './admin.js' import * as UCANCaps from './ucan.js' import * as PlanCaps from './plan.js' @@ -473,12 +474,12 @@ export type UploadGetFailure = UploadNotFound | Ucanto.Failure export type HTTPPut = InferInvokedCapability // Index -export type Index = InferInvokedCapability -export type IndexAdd = InferInvokedCapability +export type SpaceIndex = InferInvokedCapability +export type SpaceIndexAdd = InferInvokedCapability -export type IndexAddSuccess = Unit +export type SpaceIndexAddSuccess = Unit -export type IndexAddFailure = +export type SpaceIndexAddFailure = | IndexNotFound | DecodeFailure | UnknownFormat @@ -519,13 +520,16 @@ export interface SliceNotFound extends Failure { // Blob export type Blob = InferInvokedCapability -export type BlobAdd = InferInvokedCapability -export type BlobRemove = InferInvokedCapability -export type BlobList = InferInvokedCapability -export type BlobGet = InferInvokedCapability -export type ServiceBlob = InferInvokedCapability -export type BlobAllocate = InferInvokedCapability -export type BlobAccept = InferInvokedCapability +export type BlobAllocate = InferInvokedCapability +export type BlobAccept = InferInvokedCapability +export type SpaceBlob = InferInvokedCapability +export type SpaceBlobAdd = InferInvokedCapability +export type SpaceBlobRemove = InferInvokedCapability +export type SpaceBlobList = InferInvokedCapability +export type SpaceBlobGet = InferInvokedCapability +export type W3sBlob = InferInvokedCapability +export type W3sBlobAllocate = InferInvokedCapability +export type W3sBlobAccept = InferInvokedCapability export interface BlobModel { digest: Multihash @@ -929,16 +933,19 @@ export type ServiceAbilityArray = [ Usage['can'], UsageReport['can'], Blob['can'], - BlobAdd['can'], - BlobRemove['can'], - BlobList['can'], - BlobGet['can'], - ServiceBlob['can'], BlobAllocate['can'], BlobAccept['can'], + SpaceBlob['can'], + SpaceBlobAdd['can'], + SpaceBlobRemove['can'], + SpaceBlobList['can'], + SpaceBlobGet['can'], + W3sBlob['can'], + W3sBlobAllocate['can'], + W3sBlobAccept['can'], HTTPPut['can'], - Index['can'], - IndexAdd['can'] + SpaceIndex['can'], + SpaceIndexAdd['can'] ] /** diff --git a/packages/capabilities/src/utils.js b/packages/capabilities/src/utils.js index 619fab0fb..01d635bd3 100644 --- a/packages/capabilities/src/utils.js +++ b/packages/capabilities/src/utils.js @@ -1,9 +1,8 @@ import { DID, Schema, fail, ok } from '@ucanto/validator' -// eslint-disable-next-line no-unused-vars -import * as Types from '@ucanto/interface' - import { equals } from 'uint8arrays/equals' +/** @import * as API from '@ucanto/interface' */ + // e.g. did:web:storacha.network or did:web:staging.storacha.network export const ProviderDID = DID.match({ method: 'web' }) @@ -40,8 +39,8 @@ export function canDelegateURI(child, parent) { * Checks that `with` on claimed capability is the same as `with` * in delegated capability. Note this will ignore `can` field. * - * @param {Types.ParsedCapability} child - * @param {Types.ParsedCapability} parent + * @param {API.ParsedCapability} child + * @param {API.ParsedCapability} parent */ export function equalWith(child, parent) { return child.with === parent.with @@ -67,10 +66,10 @@ export function equal(child, parent, constraint) { } /** - * @template {Types.ParsedCapability<"store/add"|"store/get"|"store/remove", Types.URI<'did:'>, {link?: Types.Link}>} T + * @template {API.ParsedCapability<"store/add"|"store/get"|"store/remove", API.URI<'did:'>, {link?: API.Link}>} T * @param {T} claimed * @param {T} delegated - * @returns {Types.Result<{}, Types.Failure>} + * @returns {API.Result<{}, API.Failure>} */ export const equalLink = (claimed, delegated) => { if (claimed.with !== delegated.with) { @@ -92,10 +91,10 @@ export const equalLink = (claimed, delegated) => { } /** - * @template {Types.ParsedCapability<"space/blob/add"|"space/blob/remove"|"web3.storage/blob/allocate"|"web3.storage/blob/accept", Types.URI<'did:'>, {blob: { digest: Uint8Array, size: number }}>} T + * @template {API.ParsedCapability<"space/blob/add"|"space/blob/remove"|"web3.storage/blob/allocate"|"web3.storage/blob/accept"|"blob/allocate"|"blob/accept", API.URI<'did:'>, {blob: { digest: Uint8Array, size: number }}>} T * @param {T} claimed * @param {T} delegated - * @returns {Types.Result<{}, Types.Failure>} + * @returns {API.Result<{}, API.Failure>} */ export const equalBlob = (claimed, delegated) => { if (claimed.with !== delegated.with) { @@ -126,10 +125,10 @@ export const equalBlob = (claimed, delegated) => { } /** - * @template {Types.ParsedCapability<"http/put", Types.URI<'did:'>, {body: { digest: Uint8Array, size: number }}>} T + * @template {API.ParsedCapability<"http/put", API.URI<'did:'>, {body: { digest: Uint8Array, size: number }}>} T * @param {T} claimed * @param {T} delegated - * @returns {Types.Result<{}, Types.Failure>} + * @returns {API.Result<{}, API.Failure>} */ export const equalBody = (claimed, delegated) => { if (claimed.with !== delegated.with) { @@ -160,10 +159,10 @@ export const equalBody = (claimed, delegated) => { } /** - * @template {Types.ParsedCapability<"blob/add"|"blob/remove"|"blob/allocate"|"blob/accept"|"http/put", Types.URI<'did:'>, {content: Uint8Array}>} T + * @template {API.ParsedCapability<"blob/add"|"blob/remove"|"blob/allocate"|"blob/accept"|"http/put", API.URI<'did:'>, {content: Uint8Array}>} T * @param {T} claimed * @param {T} delegated - * @returns {Types.Result<{}, Types.Failure>} + * @returns {API.Result<{}, API.Failure>} */ export const equalContent = (claimed, delegated) => { if (claimed.with !== delegated.with) { @@ -185,12 +184,12 @@ export const equalContent = (claimed, delegated) => { } /** - * Checks that `claimed` {@link Types.Link} meets an `imposed` constraint. + * Checks that `claimed` {@link API.Link} meets an `imposed` constraint. * - * @param {Types.UnknownLink} claimed - * @param {Types.UnknownLink|undefined} imposed + * @param {API.UnknownLink} claimed + * @param {API.UnknownLink|undefined} imposed * @param {string} at - * @returns {Types.Result<{}, Types.Failure>} + * @returns {API.Result<{}, API.Failure>} */ export const checkLink = (claimed, imposed, at) => { return equal( @@ -202,8 +201,8 @@ export const checkLink = (claimed, imposed, at) => { /** * @template T - * @param {Types.Result} result - * @returns {{error: Types.Failure, ok?:undefined}|undefined} + * @param {API.Result} result + * @returns {{error: API.Failure, ok?:undefined}|undefined} */ export const and = (result) => (result.error ? result : undefined) diff --git a/packages/capabilities/src/web3.storage/blob.js b/packages/capabilities/src/web3.storage/blob.js index 42085380f..6303e1660 100644 --- a/packages/capabilities/src/web3.storage/blob.js +++ b/packages/capabilities/src/web3.storage/blob.js @@ -1,5 +1,5 @@ import { capability, Schema, Link, ok } from '@ucanto/validator' -import { content } from '../blob.js' +import { content } from '../space/blob.js' import { equalBlob, equalWith, @@ -17,6 +17,8 @@ import { * Capability can only be delegated (but not invoked) allowing audience to * derived any `web3.storage/blob/` prefixed capability for the (memory) space identified * by DID in the `with` field. + * + * @deprecated These capabilities were used by w3up to invoke on itself. */ export const blob = capability({ can: 'web3.storage/blob/*', @@ -31,6 +33,8 @@ export const blob = capability({ /** * `web3.storage/blob//allocate` capability can be invoked to create a memory * address where blob content can be written via HTTP PUT request. + * + * @deprecated These capabilities were used by w3up to invoke on itself. */ export const allocate = capability({ can: 'web3.storage/blob/allocate', @@ -67,6 +71,8 @@ export const allocate = capability({ * `blob/accept` capability invocation should either succeed when content is * delivered on allocated address or fail if no content is allocation expires * without content being delivered. + * + * @deprecated These capabilities were used by w3up to invoke on itself. */ export const accept = capability({ can: 'web3.storage/blob/accept', diff --git a/packages/capabilities/test/capabilities/blob.test.js b/packages/capabilities/test/capabilities/blob.test.js new file mode 100644 index 000000000..7b897354d --- /dev/null +++ b/packages/capabilities/test/capabilities/blob.test.js @@ -0,0 +1,311 @@ +import assert from 'assert' +import { access } from '@ucanto/validator' +import { ed25519, Verifier } from '@ucanto/principal' +import * as Blob from '../../src/blob.js' +import * as Capability from '../../src/top.js' +import { + alice, + service as storageNode, + mallory as account, + bob, +} from '../helpers/fixtures.js' +import { createCar, createCborCid, validateAuthorization } from '../helpers/utils.js' + +const top = () => + Capability.top.delegate({ + issuer: account, + audience: alice, + with: account.did(), + }) + +const blob = async () => + Blob.blob.delegate({ + issuer: account, + audience: alice, + with: account.did(), + proofs: [await top()], + }) + +describe('blob capabilities', function () { + it('blob/allocate can be derived from *', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const allocate = Blob.allocate.invoke({ + issuer: alice, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + cause: await createCborCid({ now: Date.now() }) + }, + proofs: [await top()], + }) + + const result = await access(await allocate.delegate(), { + capability: Blob.allocate, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.allocate.can) + }) + + it('blob/allocate can be derived from blob/*', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const allocate = Blob.allocate.invoke({ + issuer: alice, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + cause: await createCborCid({ now: Date.now() }) + }, + proofs: [await blob()], + }) + + const result = await access(await allocate.delegate(), { + capability: Blob.allocate, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.allocate.can) + }) + + it('blob/allocate can be derived from blob/* derived from *', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const blob = await Blob.blob.delegate({ + issuer: alice, + audience: bob, + with: account.did(), + proofs: [await top()], + }) + + const allocate = Blob.allocate.invoke({ + issuer: bob, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + cause: await createCborCid({ now: Date.now() }) + }, + proofs: [blob], + }) + + const result = await access(await allocate.delegate(), { + capability: Blob.allocate, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.allocate.can) + }) + + it('blob/allocate should fail when escalating space constraint', async () => { + const space0 = await ed25519.generate() + const space1 = await ed25519.generate() + const car = await createCar('test') + + const blob = await Blob.allocate.delegate({ + issuer: alice, + audience: bob, + with: account.did(), + nb: { + space: space0.did() + }, + proofs: [await top()], + }) + + const allocate = Blob.allocate.invoke({ + issuer: bob, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space1.did(), + cause: await createCborCid({ now: Date.now() }) + }, + proofs: [blob], + }) + + const result = await access(await allocate.delegate(), { + capability: Blob.allocate, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.error) + assert(result.error.message.includes('violates imposed space constraint')) + }) + + it('blob/accept can be derived from *', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const accept = Blob.accept.invoke({ + issuer: alice, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + _put: { + 'ucan/await': ['.out.ok', await createCborCid('receipt')] + } + }, + proofs: [await top()], + }) + + const result = await access(await accept.delegate(), { + capability: Blob.accept, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.accept.can) + }) + + it('blob/accept can be derived from blob/*', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const accept = Blob.accept.invoke({ + issuer: alice, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + _put: { + 'ucan/await': ['.out.ok', await createCborCid('receipt')] + } + }, + proofs: [await blob()], + }) + + const result = await access(await accept.delegate(), { + capability: Blob.accept, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.accept.can) + }) + + it('blob/accept can be derived from blob/* derived from *', async () => { + const space = await ed25519.generate() + const car = await createCar('test') + + const blob = await Blob.blob.delegate({ + issuer: alice, + audience: bob, + with: account.did(), + proofs: [await top()], + }) + + const accept = Blob.accept.invoke({ + issuer: bob, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space.did(), + _put: { + 'ucan/await': ['.out.ok', await createCborCid('receipt')] + } + }, + proofs: [blob], + }) + + const result = await access(await accept.delegate(), { + capability: Blob.accept, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.ok) + assert.deepEqual(result.ok.audience.did(), storageNode.did()) + assert.equal(result.ok.capability.can, Blob.accept.can) + }) + + it('blob/accept should fail when escalating space constraint', async () => { + const space0 = await ed25519.generate() + const space1 = await ed25519.generate() + const car = await createCar('test') + + const blob = await Blob.accept.delegate({ + issuer: alice, + audience: bob, + with: account.did(), + nb: { + space: space0.did() + }, + proofs: [await top()], + }) + + const accept = Blob.accept.invoke({ + issuer: bob, + audience: storageNode, + with: account.did(), + nb: { + blob: { + digest: car.cid.multihash.bytes, + size: car.bytes.length + }, + space: space1.did(), + _put: { + 'ucan/await': ['.out.ok', await createCborCid('receipt')] + } + }, + proofs: [blob], + }) + + const result = await access(await accept.delegate(), { + capability: Blob.accept, + principal: Verifier, + authority: storageNode, + validateAuthorization, + }) + assert.ok(result.error) + assert(result.error.message.includes('violates imposed space constraint')) + }) +}) diff --git a/packages/capabilities/test/capabilities/index.test.js b/packages/capabilities/test/capabilities/index.test.js index cafd31a64..e350b13f7 100644 --- a/packages/capabilities/test/capabilities/index.test.js +++ b/packages/capabilities/test/capabilities/index.test.js @@ -1,7 +1,7 @@ import assert from 'assert' import { access } from '@ucanto/validator' import { Verifier } from '@ucanto/principal' -import * as Index from '../../src/index/index.js' +import * as SpaceIndex from '../../src/space/index.js' import * as Capability from '../../src/top.js' import { alice, @@ -19,7 +19,7 @@ const top = async () => }) const index = async () => - Index.index.delegate({ + SpaceIndex.index.delegate({ issuer: account, audience: alice, with: account.did(), @@ -28,7 +28,7 @@ const index = async () => describe('index capabilities', function () { it('space/index/add can be derived from *', async () => { - const add = Index.add.invoke({ + const add = SpaceIndex.add.invoke({ issuer: alice, audience: w3, with: account.did(), @@ -39,7 +39,7 @@ describe('index capabilities', function () { }) const result = await access(await add.delegate(), { - capability: Index.add, + capability: SpaceIndex.add, principal: Verifier, authority: w3, validateAuthorization, @@ -57,7 +57,7 @@ describe('index capabilities', function () { }) it('space/index/add can be derived from index/*', async () => { - const add = Index.add.invoke({ + const add = SpaceIndex.add.invoke({ issuer: alice, audience: w3, with: account.did(), @@ -68,7 +68,7 @@ describe('index capabilities', function () { }) const result = await access(await add.delegate(), { - capability: Index.add, + capability: SpaceIndex.add, principal: Verifier, authority: w3, validateAuthorization, @@ -86,14 +86,14 @@ describe('index capabilities', function () { }) it('space/index/add can be derived from index/* derived from *', async () => { - const index = await Index.index.delegate({ + const index = await SpaceIndex.index.delegate({ issuer: alice, audience: bob, with: account.did(), proofs: [await top()], }) - const add = Index.add.invoke({ + const add = SpaceIndex.add.invoke({ issuer: bob, audience: w3, with: account.did(), @@ -104,7 +104,7 @@ describe('index capabilities', function () { }) const result = await access(await add.delegate(), { - capability: Index.add, + capability: SpaceIndex.add, principal: Verifier, authority: w3, validateAuthorization, @@ -122,7 +122,7 @@ describe('index capabilities', function () { }) it('space/index/add should fail when escalating index constraint', async () => { - const delegation = await Index.add.delegate({ + const delegation = await SpaceIndex.add.delegate({ issuer: alice, audience: bob, with: account.did(), @@ -132,7 +132,7 @@ describe('index capabilities', function () { proofs: [await top()], }) - const add = Index.add.invoke({ + const add = SpaceIndex.add.invoke({ issuer: bob, audience: w3, with: account.did(), @@ -143,7 +143,7 @@ describe('index capabilities', function () { }) const result = await access(await add.delegate(), { - capability: Index.add, + capability: SpaceIndex.add, principal: Verifier, authority: w3, validateAuthorization, diff --git a/packages/capabilities/test/helpers/utils.js b/packages/capabilities/test/helpers/utils.js index 980e64c8e..92b0758d4 100644 --- a/packages/capabilities/test/helpers/utils.js +++ b/packages/capabilities/test/helpers/utils.js @@ -23,9 +23,16 @@ export async function createCborCid(data) { /** * @param {string} source */ -export async function createCarCid(source) { +export async function createCar(source) { const cbor = await CBOR.write({ hello: source }) - const shard = await CAR.codec.write({ roots: [cbor] }) + return await CAR.codec.write({ roots: [cbor] }) +} + +/** + * @param {string} source + */ +export async function createCarCid(source) { + const shard = await createCar(source) return shard.cid } diff --git a/packages/upload-api/src/blob/accept.js b/packages/upload-api/src/blob/accept.js index 234c0f823..e50f7e3e1 100644 --- a/packages/upload-api/src/blob/accept.js +++ b/packages/upload-api/src/blob/accept.js @@ -13,7 +13,7 @@ import * as HTTP from '@storacha/capabilities/http' /** * @param {API.W3ServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobAcceptProvider(context) { return Server.provideAdvanced({ @@ -108,7 +108,7 @@ export const poll = async (context, receipt) => { return result } - const [allocate] = /** @type {[API.BlobAllocate]} */ (result.ok.capabilities) + const [allocate] = /** @type {[API.W3sBlobAllocate]} */ (result.ok.capabilities) // If this is a receipt for the http/put we will perform blob/accept. const blobAccept = await W3sBlob.accept.invoke({ diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index f2045f457..62f82f885 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -2,12 +2,14 @@ import * as Server from '@ucanto/server' import { Receipt } from '@ucanto/core' import { ed25519 } from '@ucanto/principal' import * as Blob from '@storacha/capabilities/blob' +import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as W3sBlob from '@storacha/capabilities/web3.storage/blob' import * as HTTP from '@storacha/capabilities/http' import * as API from '../types.js' import { createConcludeInvocation } from '../ucan/conclude.js' import { AwaitError } from './lib.js' +import * as Digest from 'multiformats/hashes/digest' /** * Derives did:key principal from (blob) multihash that can be used to @@ -27,25 +29,50 @@ const conclude = (receipt, issuer, audience = issuer) => /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobAddProvider(context) { + const { routingService } = context + return Server.provideAdvanced({ - capability: Blob.add, + capability: SpaceBlob.add, handler: async ({ capability, invocation }) => { const { with: space, nb } = capability const { blob } = nb - const allocation = await allocate({ - context, - blob, - space, - cause: invocation.link(), + const digest = Digest.decode(blob.digest) + + const candidateRes = await routingService.selectBlobAllocationCandidate(digest, blob.size) + if (candidateRes.error) { + return candidateRes + } + + const candidate = candidateRes.ok + const cap = Blob.allocate.create({ + with: candidate, + nb: { + blob: { + digest: blob.digest, + size: blob.size, + }, + space, + cause: invocation.link() + } }) + const confRes = await routingService.configureInvocation(candidate, cap) + if (confRes.error) { + return confRes + } + + const allocReceipt = await confRes.ok.invocation.execute(confRes.ok.connection) + if (allocReceipt.out.error) { + return allocReceipt.out + } + const delivery = await put({ blob, - allocation, + allocation: { receipt: allocReceipt }, }) const acceptance = await accept({ diff --git a/packages/upload-api/src/blob/allocate.js b/packages/upload-api/src/blob/allocate.js index e925259fd..c134bbaeb 100644 --- a/packages/upload-api/src/blob/allocate.js +++ b/packages/upload-api/src/blob/allocate.js @@ -9,14 +9,14 @@ import { /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export const blobAllocateProvider = (context) => Server.provide(W3sBlob.allocate, (input) => allocate(context, input)) /** * @param {API.BlobServiceContext} context - * @param {API.ProviderInput} input + * @param {API.ProviderInput} input */ export const allocate = async (context, { capability }) => { // Only service principal can perform an allocation diff --git a/packages/upload-api/src/blob/get.js b/packages/upload-api/src/blob/get.js index fb0216868..1f2276c84 100644 --- a/packages/upload-api/src/blob/get.js +++ b/packages/upload-api/src/blob/get.js @@ -1,15 +1,15 @@ import * as Server from '@ucanto/server' -import * as Blob from '@storacha/capabilities/blob' +import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as Digest from 'multiformats/hashes/digest' import * as API from '../types.js' import { BlobNotFound } from './lib.js' /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobGetProvider(context) { - return Server.provide(Blob.get, async ({ capability }) => { + return Server.provide(SpaceBlob.get, async ({ capability }) => { const digest = Digest.decode(capability.nb.digest) const space = Server.DID.parse(capability.with).did() const res = await context.allocationsStorage.get(space, digest) diff --git a/packages/upload-api/src/blob/list.js b/packages/upload-api/src/blob/list.js index 9d25cb412..cf5de9e16 100644 --- a/packages/upload-api/src/blob/list.js +++ b/packages/upload-api/src/blob/list.js @@ -1,13 +1,13 @@ import * as Server from '@ucanto/server' -import * as Blob from '@storacha/capabilities/blob' +import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as API from '../types.js' /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobListProvider(context) { - return Server.provide(Blob.list, async ({ capability }) => { + return Server.provide(SpaceBlob.list, async ({ capability }) => { const space = capability.with const { cursor, size } = capability.nb return await context.allocationsStorage.list(space, { size, cursor }) diff --git a/packages/upload-api/src/blob/remove.js b/packages/upload-api/src/blob/remove.js index ce98f1b48..4611d2755 100644 --- a/packages/upload-api/src/blob/remove.js +++ b/packages/upload-api/src/blob/remove.js @@ -1,5 +1,5 @@ import * as Server from '@ucanto/server' -import * as Blob from '@storacha/capabilities/blob' +import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as Digest from 'multiformats/hashes/digest' import * as API from '../types.js' @@ -7,10 +7,10 @@ import { RecordNotFoundErrorName } from '../errors.js' /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobRemoveProvider(context) { - return Server.provide(Blob.remove, async ({ capability }) => { + return Server.provide(SpaceBlob.remove, async ({ capability }) => { const space = capability.with const digest = Digest.decode(capability.nb.digest) diff --git a/packages/upload-api/src/index/add.js b/packages/upload-api/src/index/add.js index e4f3dbac5..00b69792b 100644 --- a/packages/upload-api/src/index/add.js +++ b/packages/upload-api/src/index/add.js @@ -8,7 +8,7 @@ import * as API from '../types.js' /** * @param {API.IndexServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export const provide = (context) => Server.provide(Index.add, (input) => add(input, context)) @@ -16,7 +16,7 @@ export const provide = (context) => /** * @param {API.Input} input * @param {API.IndexServiceContext} context - * @returns {Promise>} + * @returns {Promise>} */ const add = async ({ capability }, context) => { const space = capability.with diff --git a/packages/upload-api/src/types.ts b/packages/upload-api/src/types.ts index 9ab7059ba..58b8cc62f 100644 --- a/packages/upload-api/src/types.ts +++ b/packages/upload-api/src/types.ts @@ -65,22 +65,22 @@ export interface DebugEmail extends Email { } import { - BlobAdd, + SpaceBlobAdd, BlobAddSuccess, BlobAddFailure, - BlobList, + SpaceBlobList, BlobListSuccess, BlobListFailure, - BlobRemove, + SpaceBlobRemove, BlobRemoveSuccess, BlobRemoveFailure, - BlobGet, + SpaceBlobGet, BlobGetSuccess, BlobGetFailure, - BlobAllocate, + W3sBlobAllocate, BlobAllocateSuccess, BlobAllocateFailure, - BlobAccept, + W3sBlobAccept, BlobAcceptSuccess, BlobAcceptFailure, StoreAdd, @@ -171,9 +171,9 @@ import { PlanCreateAdminSession, PlanCreateAdminSessionSuccess, PlanCreateAdminSessionFailure, - IndexAdd, - IndexAddSuccess, - IndexAddFailure, + SpaceIndexAdd, + SpaceIndexAddSuccess, + SpaceIndexAddFailure, } from '@storacha/capabilities/types' import * as Capabilities from '@storacha/capabilities' import { RevocationsStorage } from './types/revocations.js' @@ -200,7 +200,7 @@ export type { SubscriptionsStorage } import { UsageStorage } from './types/usage.js' export type { UsageStorage } import { StorageGetError } from './types/storage.js' -import { AllocationsStorage, BlobsStorage, BlobAddInput } from './types/blob.js' +import { AllocationsStorage, BlobsStorage, BlobAddInput, RoutingService } from './types/blob.js' export type { AllocationsStorage, BlobsStorage, BlobAddInput } import { IPNIService, IndexServiceContext } from './types/index.js' import { ClaimsClientConfig } from './types/content-claims.js' @@ -326,15 +326,15 @@ export interface Service extends StorefrontService, W3sService { space: { info: ServiceMethod index: { - add: ServiceMethod + add: ServiceMethod } blob: { - add: ServiceMethod - remove: ServiceMethod - list: ServiceMethod + add: ServiceMethod + remove: ServiceMethod + list: ServiceMethod get: { 0: { - 1: ServiceMethod + 1: ServiceMethod } } } @@ -357,11 +357,11 @@ export interface W3sService { ['web3.storage']: { blob: { allocate: ServiceMethod< - BlobAllocate, + W3sBlobAllocate, BlobAllocateSuccess, BlobAllocateFailure > - accept: ServiceMethod + accept: ServiceMethod } } } @@ -376,6 +376,7 @@ export type BlobServiceContext = SpaceServiceContext & { blobsStorage: BlobsStorage agentStore: AgentStore getServiceConnection: () => ConnectionView + routingService: RoutingService } export type W3ServiceContext = SpaceServiceContext & { diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index fad0fc7b7..ccf48e7df 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -5,12 +5,22 @@ import type { Failure, DID, URI, + Capability, + Connection, + ServiceMethod, + UCANOptions, + IssuedInvocationView, + ConnectionView, } from '@ucanto/interface' import { Multihash, BlobListItem, BlobRemoveSuccess, BlobGetSuccess, + BlobAllocate, + BlobAccept, + BlobAllocateSuccess, + BlobAcceptSuccess, } from '@storacha/capabilities/types' import { MultihashDigest } from 'multiformats' @@ -84,3 +94,52 @@ export interface BlobsStorage { > createDownloadUrl: (content: MultihashDigest) => Promise> } + +export interface BlobService { + blob: { + allocate: ServiceMethod + accept: ServiceMethod + } +} + +export interface Configuration extends UCANOptions { + /** Connection to the storage node. */ + connection: ConnectionView, + /** Invocation to execute. */ + invocation: IssuedInvocationView +} + +/** + * An unavailable proof error is returned when the routing does not have a + * valid unexpired and unrevoked proof available. + */ +export interface ProofUnavailable extends Failure { + name: 'ProofUnavailable' +} + +/** + * An unavailable candidate error is returned when there are no candidates + * willing to allocate space for the given blob. + */ +export interface CandidateUnavailable extends Failure { + name: 'CandidateUnavailable' +} + +/** + * The routing service is responsible for selecting storage nodes to allocate + * blobs with. + */ +export interface RoutingService { + /** + * Selects a candidate for blob allocation from the current list of available + * storage nodes. + */ + selectBlobAllocationCandidate(digest: MultihashDigest, size: number): + Promise> + /** + * Returns information required to make an invocation to the requested storage + * node. + */ + configureInvocation(storageNode: DID, capability: C): + Promise, ProofUnavailable|Failure>> +} From 9b16598117aeafef1e5040af067e39beba42bbbe Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 1 Nov 2024 18:12:01 +0000 Subject: [PATCH 02/12] feat: progress on blob/add handler --- packages/upload-api/src/blob/accept.js | 2 + packages/upload-api/src/blob/add.js | 151 ++++++++++++++----------- packages/upload-api/src/types.ts | 2 +- packages/upload-api/src/types/blob.ts | 5 +- 4 files changed, 94 insertions(+), 66 deletions(-) diff --git a/packages/upload-api/src/blob/accept.js b/packages/upload-api/src/blob/accept.js index e50f7e3e1..e15a25345 100644 --- a/packages/upload-api/src/blob/accept.js +++ b/packages/upload-api/src/blob/accept.js @@ -95,6 +95,8 @@ export const poll = async (context, receipt) => { return { ok: {} } } + // TODO: LOOKUP IN ALLOCATIONS STORAGE AS WE DON"T HAVE THIS INVOCATION + // Otherwise we are going to lookup allocation corresponding to this http/put // in order to issue blob/accept. const [, allocation] = /** @type {API.UCANAwait} */ (put.nb.url)['ucan/await'] diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index 62f82f885..4c9d6e6b8 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -3,7 +3,6 @@ import { Receipt } from '@ucanto/core' import { ed25519 } from '@ucanto/principal' import * as Blob from '@storacha/capabilities/blob' import * as SpaceBlob from '@storacha/capabilities/space/blob' -import * as W3sBlob from '@storacha/capabilities/web3.storage/blob' import * as HTTP from '@storacha/capabilities/http' import * as API from '../types.js' @@ -32,70 +31,55 @@ const conclude = (receipt, issuer, audience = issuer) => * @returns {API.ServiceMethod} */ export function blobAddProvider(context) { - const { routingService } = context - return Server.provideAdvanced({ capability: SpaceBlob.add, handler: async ({ capability, invocation }) => { const { with: space, nb } = capability const { blob } = nb - const digest = Digest.decode(blob.digest) - - const candidateRes = await routingService.selectBlobAllocationCandidate(digest, blob.size) - if (candidateRes.error) { - return candidateRes - } - - const candidate = candidateRes.ok - const cap = Blob.allocate.create({ - with: candidate, - nb: { - blob: { - digest: blob.digest, - size: blob.size, - }, - space, - cause: invocation.link() - } + const allocation = await allocate({ + context, + blob, + space, + cause: invocation.link(), }) - - const confRes = await routingService.configureInvocation(candidate, cap) - if (confRes.error) { - return confRes - } - - const allocReceipt = await confRes.ok.invocation.execute(confRes.ok.connection) - if (allocReceipt.out.error) { - return allocReceipt.out + if (allocation.error) { + return allocation } const delivery = await put({ blob, - allocation: { receipt: allocReceipt }, + allocation: allocation.ok, }) + if (delivery.error) { + return delivery + } const acceptance = await accept({ context, + provider: allocation.ok.provider, blob, space, - delivery, + delivery: delivery.ok, }) + if (acceptance.error) { + return acceptance + } // Create a result describing the this invocation workflow let result = Server.ok({ /** @type {API.BlobAddSuccess['site']} */ site: { - 'ucan/await': ['.out.ok.site', acceptance.task.link()], + 'ucan/await': ['.out.ok.site', acceptance.ok.task.link()], }, }) - .fork(allocation.task) - .fork(delivery.task) - .fork(acceptance.task) + .fork(allocation.ok.task) + .fork(delivery.ok.task) + .fork(acceptance.ok.task) // As a temporary solution we fork all add effects that add inline // receipts so they can be delivered to the client. - const fx = [...allocation.fx, ...delivery.fx, ...acceptance.fx] + const fx = [...allocation.ok.fx, ...delivery.ok.fx, ...acceptance.ok.fx] for (const task of fx) { result = result.fork(task) } @@ -116,21 +100,57 @@ export function blobAddProvider(context) { * @param {API.Link} allocate.cause */ async function allocate({ context, blob, space, cause }) { - // 1. Create web3.storage/blob/allocate invocation and task - const allocate = W3sBlob.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), + // First we check if space has storage provider associated. If it does not + // we return `InsufficientStorage` error as storage capacity is considered + // to be 0. + const provisioned = await context.provisionsStorage.hasStorageProvider(space) + if (provisioned.error) { + return provisioned + } + + if (!provisioned.ok) { + return { + /** @type {API.AllocationError} */ + error: { + name: 'InsufficientStorage', + message: `${space} has no storage provider`, + }, + } + } + + // 1. Create blob/allocate invocation and task + const { router } = context + const digest = Digest.decode(blob.digest) + + const candidate = await router.selectBlobAllocationCandidate(digest, blob.size) + if (candidate.error) { + return candidate + } + + const cap = Blob.allocate.create({ + with: candidate.ok.did(), nb: { - blob, - cause: cause, + blob: { + digest: blob.digest, + size: blob.size, + }, space, - }, - expiration: Infinity, + cause + } }) - const task = await allocate.delegate() - const receipt = await allocate.execute(context.getServiceConnection()) + const configure = await router.configureInvocation(candidate.ok, cap, { expiration: Infinity }) + if (configure.error) { + return configure + } + + const task = await configure.ok.invocation.delegate() + const receipt = await configure.ok.invocation.execute(configure.ok.connection) + if (receipt.out.error) { + return receipt.out + } + + // TODO: ADD TO ALLOCATIONS STORAGE // 4. Create `blob/allocate` receipt as conclude invocation to inline as effect const concludeAllocate = createConcludeInvocation( @@ -139,11 +159,12 @@ async function allocate({ context, blob, space, cause }) { receipt ) - return { + return Server.ok({ + provider: candidate.ok, task, receipt, fx: [await concludeAllocate.delegate()], - } + }) } /** @@ -220,11 +241,11 @@ async function put({ blob, allocation }) { }) } - return { + return Server.ok({ task, receipt, fx: receipt ? [await conclude(receipt, blobProvider)] : [], - } + }) } /** @@ -233,26 +254,30 @@ async function put({ blob, allocation }) { * * @param {object} input * @param {API.BlobServiceContext} input.context + * @param {API.Principal} input.provider * @param {API.BlobModel} input.blob * @param {API.DIDKey} input.space * @param {object} input.delivery * @param {API.Invocation} input.delivery.task * @param {API.Receipt|null} input.delivery.receipt */ -async function accept({ context, blob, space, delivery }) { - // 1. Create web3.storage/blob/accept invocation and task - const accept = W3sBlob.accept.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), +async function accept({ context, provider, blob, space, delivery }) { + // 1. Create blob/accept invocation and task + const cap = Blob.accept.create({ + with: provider.did(), nb: { blob, space, _put: { 'ucan/await': ['.out.ok', delivery.task.link()] }, }, - expiration: Infinity, }) - const task = await accept.delegate() + + const configure = await context.router.configureInvocation(provider, cap, { expiration: Infinity }) + if (configure.error) { + return configure + } + + const task = await configure.ok.invocation.delegate() let receipt = null @@ -272,12 +297,12 @@ async function accept({ context, blob, space, delivery }) { } // If put has already succeeded, we can execute `blob/accept` right away. else if (delivery.receipt?.out.ok) { - receipt = await accept.execute(context.getServiceConnection()) + receipt = await configure.ok.invocation.execute(configure.ok.connection) } - return { + return Server.ok({ task, receipt, fx: receipt ? [await conclude(receipt, context.id)] : [], - } + }) } diff --git a/packages/upload-api/src/types.ts b/packages/upload-api/src/types.ts index 58b8cc62f..bc9c523c7 100644 --- a/packages/upload-api/src/types.ts +++ b/packages/upload-api/src/types.ts @@ -376,7 +376,7 @@ export type BlobServiceContext = SpaceServiceContext & { blobsStorage: BlobsStorage agentStore: AgentStore getServiceConnection: () => ConnectionView - routingService: RoutingService + router: RoutingService } export type W3ServiceContext = SpaceServiceContext & { diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index ccf48e7df..2527270c9 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -11,6 +11,7 @@ import type { UCANOptions, IssuedInvocationView, ConnectionView, + Principal, } from '@ucanto/interface' import { Multihash, @@ -135,11 +136,11 @@ export interface RoutingService { * storage nodes. */ selectBlobAllocationCandidate(digest: MultihashDigest, size: number): - Promise> + Promise> /** * Returns information required to make an invocation to the requested storage * node. */ - configureInvocation(storageNode: DID, capability: C): + configureInvocation(storageNode: Principal, capability: C, options?: Omit): Promise, ProofUnavailable|Failure>> } From c747f499616bc38bc59f5032f8835ed0ab9685cb Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Fri, 1 Nov 2024 18:15:59 +0000 Subject: [PATCH 03/12] refactor: tweak selection method name --- packages/upload-api/src/blob/add.js | 2 +- packages/upload-api/src/types/blob.ts | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index 4c9d6e6b8..8c94a3095 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -122,7 +122,7 @@ async function allocate({ context, blob, space, cause }) { const { router } = context const digest = Digest.decode(blob.digest) - const candidate = await router.selectBlobAllocationCandidate(digest, blob.size) + const candidate = await router.selectStorageProvider(digest, blob.size) if (candidate.error) { return candidate } diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index 2527270c9..58d0079e5 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -135,12 +135,12 @@ export interface RoutingService { * Selects a candidate for blob allocation from the current list of available * storage nodes. */ - selectBlobAllocationCandidate(digest: MultihashDigest, size: number): + selectStorageProvider(digest: MultihashDigest, size: number): Promise> /** * Returns information required to make an invocation to the requested storage * node. */ - configureInvocation(storageNode: Principal, capability: C, options?: Omit): + configureInvocation(provider: Principal, capability: C, options?: Omit): Promise, ProofUnavailable|Failure>> } From 6b0d72dee3dc9ce5320ad8de333a718d644b5c3d Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 15:40:00 +0000 Subject: [PATCH 04/12] fix: upload API test fixes --- packages/access-client/package.json | 6 +- packages/access-client/src/agent.js | 4 +- packages/access-client/src/types.ts | 2 +- packages/blob-index/package.json | 4 +- packages/capabilities/package.json | 2 +- packages/capabilities/readme.md | 2 +- packages/capabilities/src/blob.js | 2 +- packages/capabilities/src/space/blob.js | 6 +- packages/capabilities/src/types.ts | 24 +- packages/capabilities/src/utils.js | 3 +- packages/did-mailto/package.json | 2 +- packages/filecoin-api/package.json | 6 +- packages/filecoin-client/package.json | 6 +- packages/upload-api/package.json | 16 +- packages/upload-api/src/blob/accept.js | 146 ++-- packages/upload-api/src/blob/add.js | 40 +- packages/upload-api/src/blob/allocate.js | 131 --- packages/upload-api/src/blob/get.js | 6 +- packages/upload-api/src/blob/lib.js | 60 -- packages/upload-api/src/blob/list.js | 4 +- packages/upload-api/src/blob/remove.js | 26 +- packages/upload-api/src/index/add.js | 42 +- packages/upload-api/src/lib.js | 2 - packages/upload-api/src/service.js | 15 - packages/upload-api/src/types.ts | 80 +- packages/upload-api/src/types/blob.ts | 90 +-- packages/upload-api/src/types/index.ts | 16 +- packages/upload-api/src/ucan/conclude.js | 2 +- .../test/external-service/blob-retriever.js | 25 + .../test/external-service/content-claims.js | 4 +- .../upload-api/test/external-service/index.js | 39 +- .../upload-api/test/external-service/ipni.js | 34 - .../test/external-service/router.js | 78 ++ .../test/external-service/storage-node.js | 279 +++++++ packages/upload-api/test/handlers/blob.js | 93 +-- packages/upload-api/test/handlers/index.js | 84 +- packages/upload-api/test/handlers/ucan.js | 2 +- .../upload-api/test/handlers/web3.storage.js | 750 ------------------ .../test/handlers/web3.storage.spec.js | 4 - packages/upload-api/test/helpers/blob.js | 16 +- packages/upload-api/test/helpers/context.js | 9 +- packages/upload-api/test/lib.js | 13 +- .../test/storage/agent-store-tests.js | 2 +- .../test/storage/allocations-storage-tests.js | 367 --------- .../test/storage/allocations-storage.js | 125 --- .../test/storage/allocations-storage.spec.js | 3 - .../test/storage/blob-registry-tests.js | 160 ++++ .../upload-api/test/storage/blob-registry.js | 94 +++ .../test/storage/blob-registry.spec.js | 3 + .../test/storage/blobs-storage-tests.js | 74 -- .../upload-api/test/storage/blobs-storage.js | 213 ----- .../test/storage/blobs-storage.spec.js | 3 - packages/upload-api/test/storage/index.js | 12 +- .../upload-api/test/storage/usage-storage.js | 13 +- packages/upload-client/package.json | 10 +- packages/upload-client/src/blob/add.js | 16 +- packages/upload-client/src/blob/get.js | 2 +- packages/upload-client/src/blob/list.js | 4 +- packages/upload-client/src/blob/remove.js | 2 +- packages/upload-client/src/index/add.js | 4 +- packages/upload-client/src/types.ts | 68 +- packages/upload-client/test/blob.test.js | 8 +- packages/upload-client/test/dag-index.test.js | 2 +- packages/upload-client/test/index.test.js | 10 +- pnpm-lock.yaml | 439 ++++++---- 65 files changed, 1277 insertions(+), 2532 deletions(-) delete mode 100644 packages/upload-api/src/blob/allocate.js delete mode 100644 packages/upload-api/src/service.js create mode 100644 packages/upload-api/test/external-service/blob-retriever.js delete mode 100644 packages/upload-api/test/external-service/ipni.js create mode 100644 packages/upload-api/test/external-service/router.js create mode 100644 packages/upload-api/test/external-service/storage-node.js delete mode 100644 packages/upload-api/test/handlers/web3.storage.js delete mode 100644 packages/upload-api/test/handlers/web3.storage.spec.js delete mode 100644 packages/upload-api/test/storage/allocations-storage-tests.js delete mode 100644 packages/upload-api/test/storage/allocations-storage.js delete mode 100644 packages/upload-api/test/storage/allocations-storage.spec.js create mode 100644 packages/upload-api/test/storage/blob-registry-tests.js create mode 100644 packages/upload-api/test/storage/blob-registry.js create mode 100644 packages/upload-api/test/storage/blob-registry.spec.js delete mode 100644 packages/upload-api/test/storage/blobs-storage-tests.js delete mode 100644 packages/upload-api/test/storage/blobs-storage.js delete mode 100644 packages/upload-api/test/storage/blobs-storage.spec.js diff --git a/packages/access-client/package.json b/packages/access-client/package.json index 6cc9ef65a..43d65fd76 100644 --- a/packages/access-client/package.json +++ b/packages/access-client/package.json @@ -101,6 +101,8 @@ "@ipld/car": "^5.1.1", "@ipld/dag-ucan": "^3.4.0", "@scure/bip39": "^1.2.1", + "@storacha/capabilities": "workspace:^", + "@storacha/did-mailto": "workspace:^", "@storacha/one-webcrypto": "^1.0.1", "@ucanto/client": "^9.0.1", "@ucanto/core": "^10.0.1", @@ -108,8 +110,6 @@ "@ucanto/principal": "^9.0.1", "@ucanto/transport": "^9.1.1", "@ucanto/validator": "^9.0.2", - "@storacha/capabilities": "workspace:^", - "@storacha/did-mailto": "workspace:^", "bigint-mod-arith": "^3.1.2", "conf": "11.0.2", "multiformats": "^12.1.2", @@ -118,6 +118,7 @@ "uint8arrays": "^4.0.6" }, "devDependencies": { + "@storacha/eslint-config": "workspace:^", "@types/assert": "^1.5.6", "@types/inquirer": "^9.0.4", "@types/mocha": "^10.0.1", @@ -126,7 +127,6 @@ "@types/varint": "^6.0.1", "@types/ws": "^8.5.4", "@ucanto/server": "^10.0.0", - "@storacha/eslint-config": "workspace:^", "assert": "^2.0.0", "mocha": "^10.2.0", "playwright-test": "^12.3.4", diff --git a/packages/access-client/src/agent.js b/packages/access-client/src/agent.js index ff1b2cd37..511c8ebc3 100644 --- a/packages/access-client/src/agent.js +++ b/packages/access-client/src/agent.js @@ -239,7 +239,7 @@ export class Agent { } } const receipt = await this.invokeAndExecute(UCAN.revoke, { - // per https://github.com/storacha/upload-service/blob/main/packages/capabilities/src/ucan.js#L38C6-L38C6 the resource here should be + // per https://github.com/storacha/w3up/blob/main/packages/capabilities/src/ucan.js#L38C6-L38C6 the resource here should be // the current issuer - using the space DID here works for simple cases but falls apart when a delegee tries to revoke a delegation // they have re-delegated, since they don't have "ucan/revoke" capabilities on the space with: this.issuer.did(), @@ -577,7 +577,7 @@ export class Agent { // @ts-ignore capability: cap.create({ with: space, - nb: options.nb, + nb: 'nb' in options ? options.nb : undefined, }), issuer: this.issuer, proofs: [...proofs], diff --git a/packages/access-client/src/types.ts b/packages/access-client/src/types.ts index d27021273..8b8b15ba5 100644 --- a/packages/access-client/src/types.ts +++ b/packages/access-client/src/types.ts @@ -249,7 +249,7 @@ export type InvokeOptions< Match<{ can: A; with: R & Resource; nb: Caveats }, UnknownMatch> > > = UCANBasicOptions & - InferNb['nb']> & { + Omit, 'can'|'with'> & { /** * Resource for the capability, normally a Space DID * Defaults to the current selected Space diff --git a/packages/blob-index/package.json b/packages/blob-index/package.json index 3e6dd7126..a3fcddded 100644 --- a/packages/blob-index/package.json +++ b/packages/blob-index/package.json @@ -41,17 +41,17 @@ }, "dependencies": { "@ipld/dag-cbor": "^9.0.6", + "@storacha/capabilities": "workspace:^", "@storacha/one-webcrypto": "^1.0.1", "@ucanto/core": "^10.0.1", "@ucanto/interface": "^10.0.1", - "@storacha/capabilities": "workspace:^", "carstream": "^2.1.0", "multiformats": "^13.0.1", "uint8arrays": "^5.0.3" }, "devDependencies": { - "@ucanto/transport": "^9.1.1", "@storacha/eslint-config": "workspace:^", + "@ucanto/transport": "^9.1.1", "c8": "^7.14.0", "entail": "^2.1.2", "typescript": "5.2.2" diff --git a/packages/capabilities/package.json b/packages/capabilities/package.json index 8a5c9d150..db21cf111 100644 --- a/packages/capabilities/package.json +++ b/packages/capabilities/package.json @@ -109,10 +109,10 @@ "uint8arrays": "^5.0.3" }, "devDependencies": { + "@storacha/eslint-config": "workspace:^", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.0", "@types/node": "^20.8.4", - "@storacha/eslint-config": "workspace:^", "assert": "^2.0.0", "mocha": "^10.2.0", "playwright-test": "^12.3.4", diff --git a/packages/capabilities/readme.md b/packages/capabilities/readme.md index 8e5ad6431..eee87dd7f 100644 --- a/packages/capabilities/readme.md +++ b/packages/capabilities/readme.md @@ -32,7 +32,7 @@ import * as Filecoin from '@storacha/capabilities/filecoin' import * as Aggregator from '@storacha/capabilities/filecoin/aggregator' import * as DealTracker from '@storacha/capabilities/filecoin/deal-tracker' import * as Dealer from '@storacha/capabilities/filecoin/dealer' -import * as Index from '@storacha/capabilities/index' +import * as Index from '@storacha/capabilities/space/index' // This package has a "main" entrypoint but we recommend the usage of the specific imports above ``` diff --git a/packages/capabilities/src/blob.js b/packages/capabilities/src/blob.js index 44470b61f..d341e0a6c 100644 --- a/packages/capabilities/src/blob.js +++ b/packages/capabilities/src/blob.js @@ -48,7 +48,7 @@ export const allocate = capability({ /** Blob to allocate. */ blob: content, /** Link to the add blob task that initiated the allocation. */ - cause: Link, + cause: Schema.link({ version: 1 }), /** DID of the user space where the allocation takes place. */ space: SpaceDID, }), diff --git a/packages/capabilities/src/space/blob.js b/packages/capabilities/src/space/blob.js index 26f71a025..0d6b3bb67 100644 --- a/packages/capabilities/src/space/blob.js +++ b/packages/capabilities/src/space/blob.js @@ -11,7 +11,7 @@ * * @module */ -import { equals as SpaceBlob } from 'uint8arrays/equals' +import { equals as SpaceBlobCapabilities } from 'uint8arrays/equals' import { capability, Schema, fail, ok } from '@ucanto/validator' import { equalBlob, equalWith, SpaceDID } from '../utils.js' @@ -94,7 +94,7 @@ export const remove = capability({ ) } else if ( delegated.nb.digest && - !SpaceBlob(delegated.nb.digest, claimed.nb.digest) + !SpaceBlobCapabilities(delegated.nb.digest, claimed.nb.digest) ) { return fail( `Link ${ @@ -160,7 +160,7 @@ export const get = capability({ ) } else if ( delegated.nb.digest && - !SpaceBlob(delegated.nb.digest, claimed.nb.digest) + !SpaceBlobCapabilities(delegated.nb.digest, claimed.nb.digest) ) { return fail( `Link ${ diff --git a/packages/capabilities/src/types.ts b/packages/capabilities/src/types.ts index 2aa3a5a25..227bfbcd1 100644 --- a/packages/capabilities/src/types.ts +++ b/packages/capabilities/src/types.ts @@ -537,7 +537,7 @@ export interface BlobModel { } // Blob add -export interface BlobAddSuccess { +export interface SpaceBlobAddSuccess { site: UCANAwait<'.out.ok.site'> } @@ -550,39 +550,37 @@ export interface AwaitError extends Ucanto.Failure { } // TODO: We need Ucanto.Failure because provideAdvanced can't handle errors without it -export type BlobAddFailure = +export type SpaceBlobAddFailure = | BlobSizeOutsideOfSupportedRange | AwaitError | StorageGetError | Ucanto.Failure -export interface BlobListItem { +export interface BlobItem { blob: BlobModel + cause: Link insertedAt: ISO8601Date } // Blob remove -export interface BlobRemoveSuccess { +export interface SpaceBlobRemoveSuccess { size: number } // TODO: make types more specific -export type BlobRemoveFailure = Ucanto.Failure +export type SpaceBlobRemoveFailure = Ucanto.Failure // Blob list -export interface BlobListSuccess extends ListResponse {} +export interface SpaceBlobListSuccess extends ListResponse {} // TODO: make types more specific -export type BlobListFailure = Ucanto.Failure +export type SpaceBlobListFailure = Ucanto.Failure // Blob get -export interface BlobGetSuccess { - blob: { digest: Uint8Array; size: number } - cause: UnknownLink -} +export interface SpaceBlobGetSuccess extends BlobItem {} // TODO: make types more specific -export type BlobGetFailure = Ucanto.Failure +export type SpaceBlobGetFailure = Ucanto.Failure // Blob allocate export interface BlobAllocateSuccess { @@ -593,7 +591,7 @@ export interface BlobAllocateSuccess { export interface BlobAddress { url: ToString headers: Record - expiresAt: ISO8601Date + expires: number } // If user space has not enough space to allocate the blob. diff --git a/packages/capabilities/src/utils.js b/packages/capabilities/src/utils.js index 01d635bd3..27108e908 100644 --- a/packages/capabilities/src/utils.js +++ b/packages/capabilities/src/utils.js @@ -1,8 +1,7 @@ +import * as API from '@ucanto/interface' import { DID, Schema, fail, ok } from '@ucanto/validator' import { equals } from 'uint8arrays/equals' -/** @import * as API from '@ucanto/interface' */ - // e.g. did:web:storacha.network or did:web:staging.storacha.network export const ProviderDID = DID.match({ method: 'web' }) diff --git a/packages/did-mailto/package.json b/packages/did-mailto/package.json index 02a9b8f63..26685b888 100644 --- a/packages/did-mailto/package.json +++ b/packages/did-mailto/package.json @@ -38,9 +38,9 @@ "test-watch": "pnpm build && mocha --bail --timeout 10s --watch --parallel -n no-warnings -n experimental-vm-modules -n experimental-fetch --watch-files src,test" }, "devDependencies": { + "@storacha/eslint-config": "workspace:^", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", - "@storacha/eslint-config": "workspace:^", "mocha": "^10.2.0", "typescript": "5.2.2" }, diff --git a/packages/filecoin-api/package.json b/packages/filecoin-api/package.json index ec61f2f11..c7aea5aa5 100644 --- a/packages/filecoin-api/package.json +++ b/packages/filecoin-api/package.json @@ -155,26 +155,26 @@ }, "dependencies": { "@ipld/dag-ucan": "^3.4.0", + "@storacha/capabilities": "workspace:^", "@ucanto/client": "^9.0.1", "@ucanto/core": "^10.0.1", "@ucanto/interface": "^10.0.1", "@ucanto/server": "^10.0.0", "@ucanto/transport": "^9.1.1", - "@storacha/capabilities": "workspace:^", "@web3-storage/content-claims": "^5.0.0", "@web3-storage/data-segment": "^5.2.0", "fr32-sha2-256-trunc254-padded-binary-tree-multihash": "^3.3.0", "p-map": "^6.0.0" }, "devDependencies": { + "@storacha/eslint-config": "workspace:^", + "@storacha/filecoin-client": "workspace:^", "@storacha/one-webcrypto": "^1.0.1", "@types/assert": "^1.5.10", "@types/mocha": "^10.0.1", "@ucanto/client": "^9.0.1", "@ucanto/principal": "^9.0.1", "@web-std/blob": "^3.0.5", - "@storacha/eslint-config": "workspace:^", - "@storacha/filecoin-client": "workspace:^", "c8": "^10.1.2", "mocha": "^10.2.0", "multiformats": "^12.1.2", diff --git a/packages/filecoin-client/package.json b/packages/filecoin-client/package.json index 210fba532..1d4fc2807 100644 --- a/packages/filecoin-client/package.json +++ b/packages/filecoin-client/package.json @@ -55,20 +55,20 @@ ], "dependencies": { "@ipld/dag-ucan": "^3.4.0", + "@storacha/capabilities": "workspace:^", "@ucanto/client": "^9.0.1", "@ucanto/core": "^10.0.1", "@ucanto/interface": "^10.0.1", - "@ucanto/transport": "^9.1.1", - "@storacha/capabilities": "workspace:^" + "@ucanto/transport": "^9.1.1" }, "devDependencies": { "@ipld/dag-json": "^10.1.4", + "@storacha/eslint-config": "workspace:^", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", "@ucanto/principal": "^9.0.1", "@ucanto/server": "^10.0.0", "@web3-storage/data-segment": "^4.0.0", - "@storacha/eslint-config": "workspace:^", "assert": "^2.0.0", "c8": "^7.13.0", "hundreds": "^0.0.9", diff --git a/packages/upload-api/package.json b/packages/upload-api/package.json index 0cfa45f5a..e85e7ceff 100644 --- a/packages/upload-api/package.json +++ b/packages/upload-api/package.json @@ -193,30 +193,30 @@ "test-watch": "pnpm build && mocha --bail --timeout 10s --watch --parallel -n no-warnings -n experimental-vm-modules -n experimental-fetch --watch-files src,test" }, "dependencies": { + "@storacha/access": "workspace:^", + "@storacha/blob-index": "workspace:^", + "@storacha/capabilities": "workspace:^", + "@storacha/did-mailto": "workspace:^", + "@storacha/filecoin-api": "workspace:^", "@ucanto/client": "^9.0.1", "@ucanto/interface": "^10.0.1", "@ucanto/principal": "^9.0.1", "@ucanto/server": "^10.0.0", "@ucanto/transport": "^9.1.1", "@ucanto/validator": "^9.0.2", - "@storacha/access": "workspace:^", - "@storacha/blob-index": "workspace:^", - "@storacha/capabilities": "workspace:^", - "@web3-storage/content-claims": "^5.1.0", - "@storacha/did-mailto": "workspace:^", - "@storacha/filecoin-api": "workspace:^", + "@web3-storage/content-claims": "^5.1.3", "multiformats": "^12.1.2", "uint8arrays": "^5.0.3" }, "devDependencies": { "@ipld/car": "^5.1.1", "@ipld/dag-ucan": "^3.4.0", + "@storacha/blob-index": "workspace:^", + "@storacha/eslint-config": "workspace:^", "@storacha/one-webcrypto": "^1.0.1", "@types/mocha": "^10.0.1", "@ucanto/core": "^10.0.1", "@web-std/blob": "^3.0.5", - "@storacha/blob-index": "workspace:^", - "@storacha/eslint-config": "workspace:^", "@web3-storage/sigv4": "^1.0.2", "is-subset": "^0.1.1", "mocha": "^10.2.0", diff --git a/packages/upload-api/src/blob/accept.js b/packages/upload-api/src/blob/accept.js index e15a25345..45e439240 100644 --- a/packages/upload-api/src/blob/accept.js +++ b/packages/upload-api/src/blob/accept.js @@ -1,69 +1,9 @@ -import * as Server from '@ucanto/server' -import * as DID from '@ipld/dag-ucan/did' -import * as W3sBlob from '@storacha/capabilities/web3.storage/blob' -import { Assert } from '@web3-storage/content-claims/capability' -import { Invocation } from '@ucanto/core' -import * as Digest from 'multiformats/hashes/digest' +import * as Blob from '@storacha/capabilities/blob' +import { Message, Invocation } from '@ucanto/core' +import * as Transport from '@ucanto/transport/car' import * as API from '../types.js' -import { - AllocatedMemoryHadNotBeenWrittenTo, - UnsupportedCapability, -} from './lib.js' import * as HTTP from '@storacha/capabilities/http' - -/** - * @param {API.W3ServiceContext} context - * @returns {API.ServiceMethod} - */ -export function blobAcceptProvider(context) { - return Server.provideAdvanced({ - capability: W3sBlob.accept, - handler: async ({ capability }) => { - // Only service principal can perform an allocation - if (capability.with !== context.id.did()) { - return { - error: new UnsupportedCapability({ capability }), - } - } - - const { blob, space } = capability.nb - const digest = Digest.decode(blob.digest) - // If blob is not stored, we must fail - const hasBlob = await context.blobsStorage.has(digest) - if (hasBlob.error) { - return hasBlob - } else if (!hasBlob.ok) { - return { - error: new AllocatedMemoryHadNotBeenWrittenTo(), - } - } - - const createUrl = await context.blobsStorage.createDownloadUrl(digest) - if (createUrl.error) { - return createUrl - } - - const locationClaim = await Assert.location.delegate({ - issuer: context.id, - audience: DID.parse(space), - with: context.id.toDIDKey(), - nb: { - content: { digest: digest.bytes }, - location: [createUrl.ok], - }, - expiration: Infinity, - }) - - // Create result object - /** @type {API.OkBuilder} */ - const result = Server.ok({ - site: locationClaim.cid, - }) - - return result.fork(locationClaim) - }, - }) -} +import { AgentMessage } from '../lib.js' /** * Polls `blob/accept` task whenever we receive a receipt. It may error if passed @@ -72,7 +12,7 @@ export function blobAcceptProvider(context) { * * @param {API.ConcludeServiceContext} context * @param {API.Receipt} receipt - * @returns {Promise>} + * @returns {Promise>} */ export const poll = async (context, receipt) => { const ran = Invocation.isInvocation(receipt.ran) @@ -86,7 +26,7 @@ export const poll = async (context, receipt) => { } // Detect if this receipt is for an `http/put` invocation - const put = /** @type {?API.HTTPPut} */ ( + const put = /** @type {API.HTTPPut} */ ( ran.ok.capabilities.find(({ can }) => can === HTTP.put.can) ) @@ -95,8 +35,6 @@ export const poll = async (context, receipt) => { return { ok: {} } } - // TODO: LOOKUP IN ALLOCATIONS STORAGE AS WE DON"T HAVE THIS INVOCATION - // Otherwise we are going to lookup allocation corresponding to this http/put // in order to issue blob/accept. const [, allocation] = /** @type {API.UCANAwait} */ (put.nb.url)['ucan/await'] @@ -110,32 +48,58 @@ export const poll = async (context, receipt) => { return result } - const [allocate] = /** @type {[API.W3sBlobAllocate]} */ (result.ok.capabilities) + const provider = result.ok.audience + const [allocate] = /** @type {[API.BlobAllocate]} */ (result.ok.capabilities) + + const configure = await context.router.configureInvocation( + provider, + Blob.accept.create({ + with: provider.did(), + nb: { + blob: allocate.nb.blob, + space: allocate.nb.space, + _put: { + 'ucan/await': ['.out.ok', receipt.ran.link()], + } + } + }), + { + // ⚠️ We need invocation to be deterministic which is why we use exact + // same as it is on allocation which will guarantee that expiry is the + // same regardless when we received `http/put` receipt. + // + // ℹ️ This works around the fact that we index receipts by invocation link + // as opposed to task link which would not care about the expiration. + expiration: result.ok.expiration, + } + ) + if (configure.error) { + return configure + } + + const acceptReceipt = await configure.ok.invocation.execute(configure.ok.connection) - // If this is a receipt for the http/put we will perform blob/accept. - const blobAccept = await W3sBlob.accept.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: put.nb.body, - space: allocate.nb.space, - _put: { - 'ucan/await': ['.out.ok', receipt.ran.link()], - }, - }, - // ⚠️ We need invocation to be deterministic which is why we use exact - // same as it is on allocation which will guarantee that expiry is the - // same regardless when we received `http/put` receipt. - // - // ℹ️ This works around the fact that we index receipts by invocation link - // as opposed to task link which would not care about the expiration. - expiration: result.ok.expiration, + // record the invocation and the receipt + const message = await Message.build({ + invocations: [configure.ok.invocation], + receipts: [acceptReceipt] }) + const messageWrite = await context.agentStore.messages.write({ + source: await Transport.outbound.encode(message), + data: message, + index: [...AgentMessage.index(message)] + }) + if (messageWrite.error) { + return messageWrite + } - // We do not care about the result we just want receipt to be issued and - // stored. - await blobAccept.execute(context.getServiceConnection()) + const register = await context.registry.register(allocate.nb) + if (register.error) { + // it's ok if there's already a registration of this blob in this space + if (register.error.name !== 'EntryExists') { + return register + } + } return { ok: {} } } diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index 8c94a3095..7d4679df0 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -1,14 +1,15 @@ import * as Server from '@ucanto/server' -import { Receipt } from '@ucanto/core' +import { Message, Receipt } from '@ucanto/core' +import * as Transport from '@ucanto/transport/car' import { ed25519 } from '@ucanto/principal' import * as Blob from '@storacha/capabilities/blob' import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as HTTP from '@storacha/capabilities/http' import * as API from '../types.js' - import { createConcludeInvocation } from '../ucan/conclude.js' import { AwaitError } from './lib.js' import * as Digest from 'multiformats/hashes/digest' +import { AgentMessage } from '../lib.js' /** * Derives did:key principal from (blob) multihash that can be used to @@ -28,7 +29,7 @@ const conclude = (receipt, issuer, audience = issuer) => /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobAddProvider(context) { return Server.provideAdvanced({ @@ -51,16 +52,13 @@ export function blobAddProvider(context) { blob, allocation: allocation.ok, }) - if (delivery.error) { - return delivery - } const acceptance = await accept({ context, provider: allocation.ok.provider, blob, space, - delivery: delivery.ok, + delivery: delivery, }) if (acceptance.error) { return acceptance @@ -68,18 +66,18 @@ export function blobAddProvider(context) { // Create a result describing the this invocation workflow let result = Server.ok({ - /** @type {API.BlobAddSuccess['site']} */ + /** @type {API.SpaceBlobAddSuccess['site']} */ site: { 'ucan/await': ['.out.ok.site', acceptance.ok.task.link()], }, }) .fork(allocation.ok.task) - .fork(delivery.ok.task) + .fork(delivery.task) .fork(acceptance.ok.task) // As a temporary solution we fork all add effects that add inline // receipts so they can be delivered to the client. - const fx = [...allocation.ok.fx, ...delivery.ok.fx, ...acceptance.ok.fx] + const fx = [...allocation.ok.fx, ...delivery.fx, ...acceptance.ok.fx] for (const task of fx) { result = result.fork(task) } @@ -146,11 +144,21 @@ async function allocate({ context, blob, space, cause }) { const task = await configure.ok.invocation.delegate() const receipt = await configure.ok.invocation.execute(configure.ok.connection) - if (receipt.out.error) { - return receipt.out - } - // TODO: ADD TO ALLOCATIONS STORAGE + // record the invocation and the receipt, so we can retrieve it later when we + // get a http/put receipt in ucan/conclude + const message = await Message.build({ + invocations: [configure.ok.invocation], + receipts: [receipt] + }) + const messageWrite = await context.agentStore.messages.write({ + source: await Transport.outbound.encode(message), + data: message, + index: [...AgentMessage.index(message)] + }) + if (messageWrite.error) { + return messageWrite + } // 4. Create `blob/allocate` receipt as conclude invocation to inline as effect const concludeAllocate = createConcludeInvocation( @@ -241,11 +249,11 @@ async function put({ blob, allocation }) { }) } - return Server.ok({ + return { task, receipt, fx: receipt ? [await conclude(receipt, blobProvider)] : [], - }) + } } /** diff --git a/packages/upload-api/src/blob/allocate.js b/packages/upload-api/src/blob/allocate.js deleted file mode 100644 index c134bbaeb..000000000 --- a/packages/upload-api/src/blob/allocate.js +++ /dev/null @@ -1,131 +0,0 @@ -import * as Server from '@ucanto/server' -import * as W3sBlob from '@storacha/capabilities/web3.storage/blob' -import * as Digest from 'multiformats/hashes/digest' -import * as API from '../types.js' -import { - BlobSizeOutsideOfSupportedRange, - UnsupportedCapability, -} from './lib.js' - -/** - * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} - */ -export const blobAllocateProvider = (context) => - Server.provide(W3sBlob.allocate, (input) => allocate(context, input)) - -/** - * @param {API.BlobServiceContext} context - * @param {API.ProviderInput} input - */ -export const allocate = async (context, { capability }) => { - // Only service principal can perform an allocation - if (capability.with !== context.id.did()) { - return { - error: new UnsupportedCapability({ capability }), - } - } - - const { blob, cause, space } = capability.nb - const digest = Digest.decode(blob.digest) - let { size } = blob - - // We check if space has storage provider associated. If it does not - // we return `InsufficientStorage` error as storage capacity is considered - // to be 0. - const result = await context.provisionsStorage.hasStorageProvider(space) - if (result.error) { - return result - } - - if (!result.ok) { - return { - /** @type {API.AllocationError} */ - error: { - name: 'InsufficientStorage', - message: `${space} has no storage provider`, - }, - } - } - - // Verify blob is within the max upload size. - if (capability.nb.blob.size > context.maxUploadSize) { - // While blob may exceed current maxUploadSize limit it could be that limit - // was higher in the past and user had this blob uploaded already in which - // case we should not error. - const exists = await context.allocationsStorage.exists(space, digest) - if (exists.ok) { - return { ok: { size: 0 } } - } else { - return { - error: new BlobSizeOutsideOfSupportedRange( - capability.nb.blob.size, - context.maxUploadSize - ), - } - } - } - - // Allocate memory space for the blob. If memory for this blob is - // already allocated, this allocates 0 bytes. - const allocationInsert = await context.allocationsStorage.insert({ - space, - blob, - cause, - }) - - if (allocationInsert.error) { - // if the insert failed with conflict then this item has already been - // added to the space and there is no allocation change. - // If record exists but is expired, it can be re-written - if (allocationInsert.error.name === 'RecordKeyConflict') { - size = 0 - } else { - return { - error: allocationInsert.error, - } - } - } - - // Check if we already have blob stored - // TODO: this may depend on the region we want to allocate and will need - // changes in the future. - const hasBlobStore = await context.blobsStorage.has(digest) - if (hasBlobStore.error) { - return hasBlobStore - } - - // If blob is stored, we can just allocate it to the space with the allocated size - // TODO: this code path MAY lead to await failures - awaited http/put and blob/accept tasks - // are supposed to fail if path does not exists. - if (hasBlobStore.ok) { - return { - ok: { size }, - } - } - - // Get presigned URL for the write target - const expiresIn = 60 * 60 * 24 // 1 day - const expiresAt = new Date(Date.now() + expiresIn).toISOString() - const createUploadUrl = await context.blobsStorage.createUploadUrl( - digest, - blob.size, - expiresIn - ) - if (createUploadUrl.error) { - return createUploadUrl - } - - const address = { - url: createUploadUrl.ok.url.toString(), - headers: createUploadUrl.ok.headers, - expiresAt, - } - - return { - ok: { - size, - address, - }, - } -} diff --git a/packages/upload-api/src/blob/get.js b/packages/upload-api/src/blob/get.js index 1f2276c84..3f3fa9983 100644 --- a/packages/upload-api/src/blob/get.js +++ b/packages/upload-api/src/blob/get.js @@ -6,14 +6,14 @@ import { BlobNotFound } from './lib.js' /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobGetProvider(context) { return Server.provide(SpaceBlob.get, async ({ capability }) => { const digest = Digest.decode(capability.nb.digest) const space = Server.DID.parse(capability.with).did() - const res = await context.allocationsStorage.get(space, digest) - if (res.error && res.error.name === 'RecordNotFound') { + const res = await context.registry.find(space, digest) + if (res.error && res.error.name === 'EntryNotFound') { return Server.error(new BlobNotFound(digest)) } return res diff --git a/packages/upload-api/src/blob/lib.js b/packages/upload-api/src/blob/lib.js index ca4393442..9e578cfcb 100644 --- a/packages/upload-api/src/blob/lib.js +++ b/packages/upload-api/src/blob/lib.js @@ -2,48 +2,6 @@ import { Failure } from '@ucanto/server' import { base58btc } from 'multiformats/bases/base58' import * as API from '../types.js' -export const AllocatedMemoryHadNotBeenWrittenToName = - 'AllocatedMemoryHadNotBeenWrittenTo' -export class AllocatedMemoryHadNotBeenWrittenTo extends Failure { - get name() { - return AllocatedMemoryHadNotBeenWrittenToName - } - - describe() { - return `Blob not found` - } -} - -export const BlobSizeOutsideOfSupportedRangeName = - 'BlobSizeOutsideOfSupportedRange' -export class BlobSizeOutsideOfSupportedRange extends Failure { - /** - * @param {number} blobSize - * @param {number} maxUploadSize - */ - constructor(blobSize, maxUploadSize) { - super() - this.blobSize = blobSize - this.maxUploadSize = maxUploadSize - } - - get name() { - return BlobSizeOutsideOfSupportedRangeName - } - - describe() { - return `Blob size ${this.blobSize} exceeded maximum size limit: ${this.maxUploadSize}, consider splitting it into blobs that fit limit.` - } - - toJSON() { - return { - ...super.toJSON(), - maxUploadSize: this.maxUploadSize, - blobSize: this.blobSize, - } - } -} - export const AwaitErrorName = 'AwaitError' /** @@ -98,21 +56,3 @@ export class BlobNotFound extends Failure { return this.#digest.bytes } } - -export class UnsupportedCapability extends Failure { - /** - * @param {object} source - * @param {API.Capability} source.capability - */ - constructor({ capability: { with: subject, can } }) { - super() - - this.capability = { with: subject, can } - } - get name() { - return /** @type {const} */ ('UnsupportedCapability') - } - describe() { - return `${this.capability.with} does not have a "${this.capability.can}" capability provider` - } -} diff --git a/packages/upload-api/src/blob/list.js b/packages/upload-api/src/blob/list.js index cf5de9e16..756148646 100644 --- a/packages/upload-api/src/blob/list.js +++ b/packages/upload-api/src/blob/list.js @@ -4,12 +4,12 @@ import * as API from '../types.js' /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobListProvider(context) { return Server.provide(SpaceBlob.list, async ({ capability }) => { const space = capability.with const { cursor, size } = capability.nb - return await context.allocationsStorage.list(space, { size, cursor }) + return await context.registry.entries(space, { size, cursor }) }) } diff --git a/packages/upload-api/src/blob/remove.js b/packages/upload-api/src/blob/remove.js index 4611d2755..e806bc5dd 100644 --- a/packages/upload-api/src/blob/remove.js +++ b/packages/upload-api/src/blob/remove.js @@ -3,26 +3,32 @@ import * as SpaceBlob from '@storacha/capabilities/space/blob' import * as Digest from 'multiformats/hashes/digest' import * as API from '../types.js' -import { RecordNotFoundErrorName } from '../errors.js' - /** * @param {API.BlobServiceContext} context - * @returns {API.ServiceMethod} + * @returns {API.ServiceMethod} */ export function blobRemoveProvider(context) { return Server.provide(SpaceBlob.remove, async ({ capability }) => { const space = capability.with const digest = Digest.decode(capability.nb.digest) - const res = await context.allocationsStorage.remove(space, digest) - if (res.error && res.error.name === RecordNotFoundErrorName) { - return { - ok: { - size: 0, - }, + const exists = await context.registry.find(space, digest) + if (exists.error) { + if (exists.error.name === 'EntryNotFound') { + return Server.ok({ size: 0 }) + } + return exists + } + + const dereg = await context.registry.deregister(space, digest) + if (dereg.error) { + // unlikely as we just found it...but possible I guess + if (dereg.error.name === 'EntryNotFound') { + return Server.ok({ size: 0 }) } + return dereg } - return res + return Server.ok({ size: exists.ok?.blob.size }) }) } diff --git a/packages/upload-api/src/index/add.js b/packages/upload-api/src/index/add.js index 00b69792b..1046c033f 100644 --- a/packages/upload-api/src/index/add.js +++ b/packages/upload-api/src/index/add.js @@ -1,6 +1,6 @@ import * as Server from '@ucanto/server' import { ok, error } from '@ucanto/server' -import * as Index from '@storacha/capabilities/index' +import * as SpaceIndex from '@storacha/capabilities/space/index' import { ShardedDAGIndex } from '@storacha/blob-index' import { Assert } from '@web3-storage/content-claims/capability' import { concat } from 'uint8arrays' @@ -11,10 +11,10 @@ import * as API from '../types.js' * @returns {API.ServiceMethod} */ export const provide = (context) => - Server.provide(Index.add, (input) => add(input, context)) + Server.provide(SpaceIndex.add, (input) => add(input, context)) /** - * @param {API.Input} input + * @param {API.Input} input * @param {API.IndexServiceContext} context * @returns {Promise>} */ @@ -23,7 +23,7 @@ const add = async ({ capability }, context) => { const idxLink = capability.nb.index // ensure the index was stored in the agent's space - const idxAllocRes = await assertAllocated( + const idxAllocRes = await assertRegistered( context, space, idxLink.multihash, @@ -59,7 +59,7 @@ const add = async ({ capability }, context) => { // ensure indexed shards are allocated in the agent's space const shardDigests = [...idxRes.ok.shards.keys()] const shardAllocRes = await Promise.all( - shardDigests.map((s) => assertAllocated(context, space, s, 'ShardNotFound')) + shardDigests.map((s) => assertRegistered(context, space, s, 'ShardNotFound')) ) for (const res of shardAllocRes) { if (res.error) return res @@ -67,33 +67,31 @@ const add = async ({ capability }, context) => { // TODO: randomly validate slices in the index correspond to slices in the blob - const publishRes = await Promise.all([ - // publish the index data to IPNI - context.ipniService.publish(idxRes.ok), - // publish a content claim for the index - publishIndexClaim(context, { content: idxRes.ok.content, index: idxLink }), - ]) - for (const res of publishRes) { - if (res.error) return res + const publishRes = await publishIndexClaim(context, { content: idxRes.ok.content, index: idxLink }) + if (publishRes.error) { + return publishRes } return ok({}) } /** - * @param {{ allocationsStorage: import('../types.js').AllocationsStorage }} context + * @param {{ registry: import('../types/blob.js').Registry }} context * @param {API.SpaceDID} space * @param {import('multiformats').MultihashDigest} digest * @param {'IndexNotFound'|'ShardNotFound'|'SliceNotFound'} errorName * @returns {Promise>} */ -const assertAllocated = async (context, space, digest, errorName) => { - const result = await context.allocationsStorage.exists(space, digest) - if (result.error) return result - if (!result.ok) - return error( - /** @type {API.IndexNotFound|API.ShardNotFound|API.SliceNotFound} */ - ({ name: errorName, digest: digest.bytes }) - ) +const assertRegistered = async (context, space, digest, errorName) => { + const result = await context.registry.find(space, digest) + if (result.error) { + if (result.error.name === 'EntryNotFound') { + return error( + /** @type {API.IndexNotFound|API.ShardNotFound|API.SliceNotFound} */ + ({ name: errorName, digest: digest.bytes }) + ) + } + return result + } return ok({}) } diff --git a/packages/upload-api/src/lib.js b/packages/upload-api/src/lib.js index cc477da51..175ecc943 100644 --- a/packages/upload-api/src/lib.js +++ b/packages/upload-api/src/lib.js @@ -18,7 +18,6 @@ import { createService as createSubscriptionService } from './subscription.js' import { createService as createAdminService } from './admin.js' import { createService as createRateLimitService } from './rate-limit.js' import { createService as createUcanService } from './ucan.js' -import { createService as createW3sService } from './service.js' import { createService as createPlanService } from './plan.js' import { createService as createUsageService } from './usage.js' import { createService as createFilecoinService } from '@storacha/filecoin-api/storefront/service' @@ -187,7 +186,6 @@ export const createService = (context) => ({ upload: createUploadService(context), ucan: createUcanService(context), plan: createPlanService(context), - ['web3.storage']: createW3sService(context), // storefront of filecoin pipeline filecoin: createFilecoinService(context).filecoin, usage: createUsageService(context), diff --git a/packages/upload-api/src/service.js b/packages/upload-api/src/service.js deleted file mode 100644 index 50c383838..000000000 --- a/packages/upload-api/src/service.js +++ /dev/null @@ -1,15 +0,0 @@ -import { blobAllocateProvider } from './blob/allocate.js' -import { blobAcceptProvider } from './blob/accept.js' -import * as API from './types.js' - -/** - * @param {API.BlobServiceContext} context - */ -export function createService(context) { - return { - blob: { - allocate: blobAllocateProvider(context), - accept: blobAcceptProvider(context), - }, - } -} diff --git a/packages/upload-api/src/types.ts b/packages/upload-api/src/types.ts index bc9c523c7..62c2b746c 100644 --- a/packages/upload-api/src/types.ts +++ b/packages/upload-api/src/types.ts @@ -66,23 +66,17 @@ export interface DebugEmail extends Email { import { SpaceBlobAdd, - BlobAddSuccess, - BlobAddFailure, + SpaceBlobAddSuccess, + SpaceBlobAddFailure, SpaceBlobList, - BlobListSuccess, - BlobListFailure, + SpaceBlobListSuccess, + SpaceBlobListFailure, SpaceBlobRemove, - BlobRemoveSuccess, - BlobRemoveFailure, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure, SpaceBlobGet, - BlobGetSuccess, - BlobGetFailure, - W3sBlobAllocate, - BlobAllocateSuccess, - BlobAllocateFailure, - W3sBlobAccept, - BlobAcceptSuccess, - BlobAcceptFailure, + SpaceBlobGetSuccess, + SpaceBlobGetFailure, StoreAdd, StoreGet, StoreAddSuccess, @@ -200,14 +194,13 @@ export type { SubscriptionsStorage } import { UsageStorage } from './types/usage.js' export type { UsageStorage } import { StorageGetError } from './types/storage.js' -import { AllocationsStorage, BlobsStorage, BlobAddInput, RoutingService } from './types/blob.js' -export type { AllocationsStorage, BlobsStorage, BlobAddInput } -import { IPNIService, IndexServiceContext } from './types/index.js' +import { Registry as BlobRegistry, Entry as BlobEntry, RoutingService } from './types/blob.js' +export type { BlobRegistry, BlobEntry, RoutingService } +import { IndexServiceContext } from './types/index.js' import { ClaimsClientConfig } from './types/content-claims.js' import { Claim } from '@web3-storage/content-claims/client/api' export type { IndexServiceContext, - IPNIService, BlobRetriever, BlobNotFound, ShardedDAGIndex, @@ -219,7 +212,7 @@ export type { Service as ClaimsService, } from './types/content-claims.js' -export interface Service extends StorefrontService, W3sService { +export interface Service extends StorefrontService { store: { add: ServiceMethod get: ServiceMethod @@ -329,12 +322,12 @@ export interface Service extends StorefrontService, W3sService { add: ServiceMethod } blob: { - add: ServiceMethod - remove: ServiceMethod - list: ServiceMethod + add: ServiceMethod + remove: ServiceMethod + list: ServiceMethod get: { 0: { - 1: ServiceMethod + 1: ServiceMethod } } } @@ -353,39 +346,14 @@ export interface Service extends StorefrontService, W3sService { } } -export interface W3sService { - ['web3.storage']: { - blob: { - allocate: ServiceMethod< - W3sBlobAllocate, - BlobAllocateSuccess, - BlobAllocateFailure - > - accept: ServiceMethod - } - } -} - export type BlobServiceContext = SpaceServiceContext & { /** * Service signer */ id: Signer - maxUploadSize: number - allocationsStorage: AllocationsStorage - blobsStorage: BlobsStorage agentStore: AgentStore - getServiceConnection: () => ConnectionView router: RoutingService -} - -export type W3ServiceContext = SpaceServiceContext & { - /** - * Service signer - */ - id: Signer - allocationsStorage: AllocationsStorage - blobsStorage: BlobsStorage + registry: BlobRegistry } export type StoreServiceContext = SpaceServiceContext & { @@ -460,17 +428,12 @@ export interface RevocationServiceContext { } export interface ConcludeServiceContext { - /** - * Service signer - */ - id: Signer - /** * Store for invocations & receipts. */ agentStore: AgentStore - - getServiceConnection: () => ConnectionView + registry: BlobRegistry + router: RoutingService } export interface PlanServiceContext { @@ -595,12 +558,7 @@ export interface UcantoServerTestContext grantAccess: (mail: { url: string | URL }) => Promise - ipniService: IPNIService & { - query(digest: MultihashDigest): Promise> - } - carStoreBucket: CarStoreBucket & Deactivator - blobsStorage: BlobsStorage & Deactivator claimsService: ClaimsClientConfig & ClaimReader & Deactivator } diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index 58d0079e5..85d3530d3 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -1,57 +1,61 @@ import type { UnknownLink, + Link, Invocation, Result, Failure, - DID, - URI, Capability, - Connection, ServiceMethod, UCANOptions, IssuedInvocationView, ConnectionView, Principal, + Unit, } from '@ucanto/interface' import { Multihash, - BlobListItem, - BlobRemoveSuccess, - BlobGetSuccess, + BlobItem as Entry, BlobAllocate, BlobAccept, BlobAllocateSuccess, BlobAcceptSuccess, } from '@storacha/capabilities/types' import { MultihashDigest } from 'multiformats' - -import { RecordKeyConflict, ListResponse } from '../types.js' +import { ListResponse, SpaceDID } from '../types.js' import { Storage } from './storage.js' +export type { Entry } + +/** Indicates an entry was not found that matches the passed details. */ +export interface EntryNotFound extends Failure { + name: 'EntryNotFound' +} + +/** Indicates an entry has already been registered for the passed details. */ +export interface EntryExists extends Failure { + name: 'EntryExists' +} + export type TasksStorage = Storage -export interface AllocationsStorage { - get: ( - space: DID, - digest: MultihashDigest - ) => Promise> - exists: ( - space: DID, +export interface Registry { + /** Lookup an existing registration. */ + find: ( + space: SpaceDID, digest: MultihashDigest - ) => Promise> - /** Inserts an item in the table if it does not already exist. */ - insert: ( - item: BlobAddInput - ) => Promise> - list: ( - space: DID, + ) => Promise> + /** Adds an item into the registry if it does not already exist. */ + register: (item: RegistrationData) => Promise> + /** List entries in the registry for a given space. */ + entries: ( + space: SpaceDID, options?: ListOptions - ) => Promise, Failure>> - /** Removes an item from the table, returning zero on size if non existent. */ - remove: ( - space: DID, + ) => Promise, Failure>> + /** Removes an item from the registry if it exists. */ + deregister: ( + space: SpaceDID, digest: MultihashDigest - ) => Promise> + ) => Promise> } export interface ListOptions { @@ -64,38 +68,12 @@ export interface BlobModel { size: number } -export interface BlobAddInput { - space: DID - cause: UnknownLink +export interface RegistrationData { + space: SpaceDID + cause: Link blob: BlobModel } -export interface BlobAddOutput extends Omit {} - -export interface BlobsStorage { - has: (content: MultihashDigest) => Promise> - createUploadUrl: ( - content: MultihashDigest, - size: number, - /** - * The number of seconds before the presigned URL expires - */ - expiresIn: number - ) => Promise< - Result< - { - url: URL - headers: { - 'x-amz-checksum-sha256': string - 'content-length': string - } & Record - }, - Failure - > - > - createDownloadUrl: (content: MultihashDigest) => Promise> -} - export interface BlobService { blob: { allocate: ServiceMethod diff --git a/packages/upload-api/src/types/index.ts b/packages/upload-api/src/types/index.ts index 23ccdb05b..eb0ed01c8 100644 --- a/packages/upload-api/src/types/index.ts +++ b/packages/upload-api/src/types/index.ts @@ -1,20 +1,11 @@ import { MultihashDigest } from 'multiformats' -import { Failure, Result, Unit } from '@ucanto/interface' +import { Failure, Result } from '@ucanto/interface' import { ShardedDAGIndex } from '@storacha/blob-index/types' -import { AllocationsStorage } from './blob.js' +import { Registry } from './blob.js' import { ClaimsClientContext } from './content-claims.js' export type { ShardedDAGIndex, ClaimsClientContext } -/** - * Service that allows publishing a set of multihashes to IPNI for a - * pre-configured provider. - */ -export interface IPNIService { - /** Publish the multihashes in the provided index to IPNI. */ - publish(index: ShardedDAGIndex): Promise> -} - export interface BlobNotFound extends Failure { name: 'BlobNotFound' digest: Uint8Array @@ -28,7 +19,6 @@ export interface BlobRetriever { } export interface IndexServiceContext extends ClaimsClientContext { - allocationsStorage: AllocationsStorage blobRetriever: BlobRetriever - ipniService: IPNIService + registry: Registry } diff --git a/packages/upload-api/src/ucan/conclude.js b/packages/upload-api/src/ucan/conclude.js index c43efa0f1..7ca5e1d96 100644 --- a/packages/upload-api/src/ucan/conclude.js +++ b/packages/upload-api/src/ucan/conclude.js @@ -49,7 +49,7 @@ export function getConcludeReceipt(concludeFx) { /** * @param {API.Signer} id - * @param {API.Verifier} serviceDid + * @param {API.Principal} serviceDid * @param {API.Receipt} receipt */ export function createConcludeInvocation(id, serviceDid, receipt) { diff --git a/packages/upload-api/test/external-service/blob-retriever.js b/packages/upload-api/test/external-service/blob-retriever.js new file mode 100644 index 000000000..55f578468 --- /dev/null +++ b/packages/upload-api/test/external-service/blob-retriever.js @@ -0,0 +1,25 @@ +import { ok, error } from '@ucanto/core' +import * as API from '../../src/types.js' +import { BlobNotFound } from '../../src/blob.js' + +/** + * @param {API.ClaimReader} claims + * @returns {API.BlobRetriever} + */ +export const create = (claims) => { + return { + /** @type {API.BlobRetriever['stream']} */ + async stream (digest) { + const readResult = await claims.read(digest) + if (readResult.error) throw readResult.error + for (const claim of readResult.ok) { + if (claim.type === 'assert/location') { + const res = await fetch(claim.location[0]) + if (!res.body) throw new Error('missing response body') + return ok(res.body) + } + } + return error(new BlobNotFound(digest)) + } + } +} diff --git a/packages/upload-api/test/external-service/content-claims.js b/packages/upload-api/test/external-service/content-claims.js index bdaa93a00..03e71c69e 100644 --- a/packages/upload-api/test/external-service/content-claims.js +++ b/packages/upload-api/test/external-service/content-claims.js @@ -82,13 +82,13 @@ export const activate = async ({ http } = {}) => { chunks.push(chunk) } - const { headers, body } = await server.request({ + const { status, headers, body } = await server.request({ // @ts-expect-error headers: req.headers, body: new Uint8Array(await new Blob(chunks).arrayBuffer()), }) - res.writeHead(200, headers) + res.writeHead(status ?? 200, headers) res.write(body) res.end() }) diff --git a/packages/upload-api/test/external-service/index.js b/packages/upload-api/test/external-service/index.js index 3dc000b45..39b20aa21 100644 --- a/packages/upload-api/test/external-service/index.js +++ b/packages/upload-api/test/external-service/index.js @@ -1,11 +1,36 @@ -import { IPNIService } from './ipni.js' +import { ok, error } from '@ucanto/core' +import { DIDResolutionError } from '@ucanto/validator' import * as ClaimsService from './content-claims.js' +import { StorageNode } from './storage-node.js' +import * as BlobRetriever from './blob-retriever.js' +import * as Router from './router.js' /** - * @param {object} [options] - * @param {import('node:http')} [options.http] + * @param {object} config + * @param {import('@ucanto/interface').Signer} config.serviceID + * @param {import('node:http')} [config.http] */ -export const getExternalServiceImplementations = async (options) => ({ - ipniService: new IPNIService(), - claimsService: await ClaimsService.activate(options), -}) +export const getExternalServiceImplementations = async (config) => { + /** @type {import('@ucanto/interface').PrincipalResolver} */ + let principalResolver = {} + if (config.serviceID.did().startsWith('did:web')) { + principalResolver.resolveDIDKey = did => + did === config.serviceID.did() + ? ok(config.serviceID.toDIDKey()) + : error(new DIDResolutionError(did)) + } + + const claimsService = await ClaimsService.activate(config) + const blobRetriever = BlobRetriever.create(claimsService) + const storageProviders = await Promise.all([ + StorageNode.activate({ ...config, ...principalResolver, claimsService }), + StorageNode.activate({ ...config, ...principalResolver, claimsService }), + ]) + const router = Router.create(config.serviceID, storageProviders) + return { + claimsService, + storageProviders, + blobRetriever, + router + } +} diff --git a/packages/upload-api/test/external-service/ipni.js b/packages/upload-api/test/external-service/ipni.js deleted file mode 100644 index 1710383ad..000000000 --- a/packages/upload-api/test/external-service/ipni.js +++ /dev/null @@ -1,34 +0,0 @@ -import * as API from '../../src/types.js' -import { base58btc } from 'multiformats/bases/base58' -import { ok, error } from '@ucanto/core' -import { DigestMap } from '@storacha/blob-index' -import { RecordNotFound } from '../../src/errors.js' - -/** @implements {API.IPNIService} */ -export class IPNIService { - #data - - constructor() { - this.#data = new DigestMap() - } - - /** @param {import('@storacha/blob-index/types').ShardedDAGIndex} index */ - async publish(index) { - for (const [, slices] of index.shards) { - for (const [digest] of slices) { - this.#data.set(digest, true) - } - } - return ok({}) - } - - /** @param {API.MultihashDigest} digest */ - async query(digest) { - const exists = this.#data.has(digest) - if (!exists) { - const mhstr = base58btc.encode(digest.bytes) - return error(new RecordNotFound(`advert not found: ${mhstr}`)) - } - return ok({}) - } -} diff --git a/packages/upload-api/test/external-service/router.js b/packages/upload-api/test/external-service/router.js new file mode 100644 index 000000000..320aec6da --- /dev/null +++ b/packages/upload-api/test/external-service/router.js @@ -0,0 +1,78 @@ +import { ok, error, Failure } from '@ucanto/core' +import { Invocation, Delegation } from '@ucanto/core' +import { base58btc } from 'multiformats/bases/base58' + +/** + * @typedef {{ + * id: import('@ucanto/interface').Signer, + * connection: import('@ucanto/interface').Connection + * }} StorageProvider + */ + +/** @type {Map} */ +const stickySelect = new Map() + +/** + * @param {import('@ucanto/interface').Signer} serviceID + * @param {Array} storageProviders + */ +export const create = (serviceID, storageProviders) => + /** @type {import('../../src/types/blob.js').RoutingService} */ + ({ + selectStorageProvider: async (digest) => { + // ensure we pick the same provider for a given digest within a test + const key = base58btc.encode(digest.bytes) + let provider = stickySelect.get(key) + if (provider && !storageProviders.some(p => p.id.did() === provider?.did())) { + provider = undefined + } + if (!provider) { + provider = storageProviders[getRandomInt(storageProviders.length)].id + stickySelect.set(key, provider) + } + return ok(provider) + }, + configureInvocation: async (provider, capability, options) => { + const prov = storageProviders.find(p => p.id.did() === provider.did()) + if (!prov) { + return error(new ProofUnavailableError(`unknown provider: ${provider.did()}`)) + } + + const proof = await Delegation.delegate({ + issuer: prov.id, + audience: serviceID, + capabilities: [capability], + expiration: Infinity, + }) + + const invocation = Invocation.invoke({ + ...options, + issuer: serviceID, + audience: provider, + capability, + proofs: [proof], + }) + return ok({ invocation, connection: prov.connection }) + } + }) + +/** @param {number} max */ +const getRandomInt = max => Math.floor(Math.random() * max) + +export class ProofUnavailableError extends Failure { + static name = 'ProofUnavailable' + + get name() { + return ProofUnavailableError.name + } + + /** @param {string} [reason] */ + constructor (reason) { + super() + this.reason = reason + } + + describe() { + return this.reason ?? 'proof unavailable' + } +} diff --git a/packages/upload-api/test/external-service/storage-node.js b/packages/upload-api/test/external-service/storage-node.js new file mode 100644 index 000000000..3d9923546 --- /dev/null +++ b/packages/upload-api/test/external-service/storage-node.js @@ -0,0 +1,279 @@ +import * as API from '../../src/types.js' +import * as BlobCapabilities from '@storacha/capabilities/blob' +import { base64pad } from 'multiformats/bases/base64' +import { Assert } from '@web3-storage/content-claims/capability' +import { base58btc } from 'multiformats/bases/base58' +import { sha256 } from 'multiformats/hashes/sha2' +import * as Digest from 'multiformats/hashes/digest' +import { ok, error, Failure } from '@ucanto/core' +import { ed25519 } from '@ucanto/principal' +import { CAR, HTTP } from '@ucanto/transport' +import * as Server from '@ucanto/server' +import { connect } from '@ucanto/client' +import { BlobNotFound } from '../../src/blob/lib.js' + +export const MaxUploadSize = 127 * (1 << 25) +let nextPort = 8989 + +/** @param {API.MultihashDigest} digest */ +const contentKey = (digest) => { + const encodedMultihash = base58btc.encode(digest.bytes) + return `${encodedMultihash}/${encodedMultihash}.blob` +} + +export class StorageNode { + /** @param {{ http?: import('http'), claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ + static async activate(config) { + const id = await ed25519.generate() + const content = new Map() + const allocations = new Set() + /** @type {URL} */ + let baseURL + + const server = Server.create({ + id, + codec: CAR.inbound, + service: /** @type {import('../../src/types/blob.js').BlobService} */ ({ + blob: { + allocate: Server.provideAdvanced({ + capability: BlobCapabilities.allocate, + handler: ({ capability }) => { + const digest = Digest.decode(capability.nb.blob.digest) + const checksum = base64pad.baseEncode(digest.digest) + if (capability.nb.blob.size > MaxUploadSize) { + return Server.error(new BlobSizeLimitExceededError(capability.nb.blob.size)) + } + const key = contentKey(digest) + if (content.has(key)) { + return Server.ok({ size: 0 }) + } + + const size = allocations.has(key) ? 0 : capability.nb.blob.size + allocations.add(key) + + return Server.ok({ + size, + address: { + url: new URL(contentKey(digest), baseURL).toString(), + headers: { 'x-amz-checksum-sha256': checksum }, + expires: 60 * 60 * 24 + } + }) + } + }), + accept: Server.provideAdvanced({ + capability: BlobCapabilities.accept, + handler: async ({ capability }) => { + const digest = Digest.decode(capability.nb.blob.digest) + if (!content.has(contentKey(digest))) { + return Server.error(new AllocatedMemoryNotWrittenError()) + } + + const receipt = await publishLocationCommitment(config, { + space: capability.nb.space, + digest, + location: + /** @type {API.URI} */ + (new URL(contentKey(digest), baseURL).toString()) + }) + if (receipt.out.error) { + return receipt.out + } + + return Server.ok({ site: receipt.ran.link() }).fork(receipt.ran) + } + }) + } + }), + // @ts-expect-error + resolveDIDKey: config.resolveDIDKey, + validateAuthorization: () => ({ ok: {} }), + }) + + if (!config.http) { + baseURL = new URL(`http://127.0.0.1:${nextPort++}`) + const connection = connect({ id, codec: CAR.outbound, channel: server }) + return new StorageNode({ id, content, url: baseURL, connection }) + } + + const httpServer = config.http.createServer(async (request, response) => { + try { + const { pathname } = new URL(request.url ?? '/', baseURL) + if (request.method === 'POST') { + const chunks = [] + for await (const chunk of request) { + chunks.push(chunk) + } + + const { status, headers, body } = await server.request({ + headers: Object.fromEntries( + Object.entries(request.headers).map(([k, v]) => [k, String(v)]) + ), + body: new Uint8Array(await new Blob(chunks).arrayBuffer()), + }) + + response.writeHead(status ?? 200, headers) + response.write(body) + } else if (request.method === 'PUT') { + const length = parseInt(request.headers['content-length'] ?? '0') + const buffer = new Uint8Array(length) + let offset = 0 + for await (const chunk of request) { + buffer.set(chunk, offset) + offset += chunk.length + } + const digest = await sha256.digest(buffer) + const checksum = base64pad.baseEncode(digest.digest) + + if (checksum !== request.headers['x-amz-checksum-sha256']) { + response.writeHead(400, `checksum mismatch`) + } else { + content.set(contentKey(digest), buffer) + response.writeHead(200) + } + } else if (request.method === 'GET') { + const data = content.get(pathname.slice(1)) + if (data) { + response.writeHead(200) + response.write(data) + } else { + response.writeHead(404) + } + } else { + response.writeHead(405) + } + } catch (err) { + console.error(err) + response.writeHead(500) + } + + response.end() + // otherwise it keep connection lingering + response.destroy() + }) + await new Promise((resolve) => httpServer.listen(resolve)) + + // @ts-ignore - this is actually what it returns on http + const { port } = httpServer.address() + baseURL = new URL(`http://127.0.0.1:${port}`) + const channel = HTTP.open({ url: baseURL, method: 'POST' }) + const connection = connect({ id, codec: CAR.outbound, channel }) + return new StorageNode({ id, content, url: baseURL, connection, server: httpServer }) + } + + async deactivate() { + const { server } = this + if (server) { + await new Promise((resolve, reject) => { + server.closeAllConnections() + server.close((error) => { + if (error) { + reject(error) + } else { + resolve(undefined) + } + }) + }) + } + } + + /** + * @param {{ + * id: API.Signer + * url: URL + * content: Map + * connection: import('@ucanto/interface').Connection + * server?: import('http').Server + * }} options + */ + constructor({ + id, + url, + content, + connection, + server, + }) { + this.id = id + this.baseURL = url + this.content = content + this.connection = connection + this.server = server + } + + /** @param {API.MultihashDigest} digest */ + async stream(digest) { + const key = contentKey(digest) + if (!this.server) { + const url = new URL(key, this.baseURL) + const res = await fetch(url.toString()) + if (res.status === 404) return error(new BlobNotFound(digest)) + if (!res.ok || !res.body) { + throw new Error( + `serverless blob storage failed to fetch from: ${url} status: ${res.status}` + ) + } + return ok(res.body) + } + + const bytes = this.content.get(key) + if (!bytes) return error(new BlobNotFound(digest)) + + return ok( + new ReadableStream({ + pull(controller) { + controller.enqueue(bytes) + controller.close() + }, + }) + ) + } +} + +export class AllocatedMemoryNotWrittenError extends Failure { + static name = 'AllocatedMemoryHadNotBeenWrittenTo' + + get name() { + return AllocatedMemoryNotWrittenError.name + } + + describe() { + return 'Blob not found' + } +} + +export class BlobSizeLimitExceededError extends Failure { + static name = 'BlobSizeOutsideOfSupportedRange' + + get name() { + return BlobSizeLimitExceededError.name + } + + /** @param {number} size */ + constructor (size) { + super() + this.size = size + } + + describe() { + return `Blob of ${this.size} bytes, exceeds size limit of ${MaxUploadSize} bytes` + } +} + +/** + * @param {API.ClaimsClientContext} ctx + * @param {{ space: API.SpaceDID, digest: API.MultihashDigest, location: API.URI }} params + */ +const publishLocationCommitment = async (ctx, { digest, location }) => { + const { invocationConfig, connection } = ctx.claimsService + const { issuer, audience, with: resource, proofs } = invocationConfig + return await Assert.location + .invoke({ + issuer, + audience, + with: resource, + nb: { content: { digest: digest.bytes }, location: [location] }, + expiration: Infinity, + proofs, + }) + .execute(connection) +} diff --git a/packages/upload-api/test/handlers/blob.js b/packages/upload-api/test/handlers/blob.js index 4de2e079f..1ef582bd1 100644 --- a/packages/upload-api/test/handlers/blob.js +++ b/packages/upload-api/test/handlers/blob.js @@ -2,13 +2,13 @@ import * as API from '../../src/types.js' import { sha256 } from 'multiformats/hashes/sha2' import { ed25519 } from '@ucanto/principal' import { Receipt } from '@ucanto/core' -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { createServer, connect } from '../../src/lib.js' import { alice, registerSpace } from '../util.js' -import { BlobSizeOutsideOfSupportedRangeName } from '../../src/blob/lib.js' import { createConcludeInvocation } from '../../src/ucan/conclude.js' -import { parseBlobAddReceiptNext } from '../helpers/blob.js' +import { parseBlobAddReceiptNext, uploadBlob } from '../helpers/blob.js' +import { BlobSizeLimitExceededError } from '../external-service/storage-node.js' /** * @type {API.Tests} @@ -409,7 +409,7 @@ export const test = { ) const ucanConclude = await httpPutConcludeInvocation.execute(connection) if (!ucanConclude.out.ok) { - throw new Error('invocation failed', { cause: ucanConclude.out }) + throw new Error('invocation failed', { cause: ucanConclude.out.error }) } const accept = await context.agentStore.receipts.get( @@ -464,7 +464,7 @@ export const test = { assert.ok(work.allocate.receipt.out.error, 'allocation has failed') assert.equal( work.allocate.receipt.out.error?.name, - BlobSizeOutsideOfSupportedRangeName, + BlobSizeLimitExceededError.name, 'allocation failed with BlobSizeOutsideOfSupportedRange error' ) assert.ok(work.put.task, 'put task was scheduled') @@ -482,8 +482,7 @@ export const test = { // prepare data const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes + const digest = await sha256.digest(data) const size = data.byteLength // create service connection @@ -492,24 +491,13 @@ export const test = { channel: createServer(context), }) - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ + await uploadBlob({ issuer: alice, audience: context.id, with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, proofs: [proof], - }) - // Invoke `blob/add` to allocate content - const blobAdd = await blobAddInvocation.execute(connection) - if (!blobAdd.out.ok) { - throw new Error('invocation failed', { cause: blobAdd.out.error }) - } + connection + }, { digest, bytes: data }) // invoke `blob/remove` const blobRemoveInvocation = BlobCapabilities.remove.invoke({ @@ -517,7 +505,7 @@ export const test = { audience: context.id, with: spaceDid, nb: { - digest, + digest: digest.bytes, }, proofs: [proof], }) @@ -595,31 +583,14 @@ export const test = { new Uint8Array([11, 22, 34, 44, 55]), new Uint8Array([22, 34, 44, 55, 66]), ] - const receipts = [] for (const datum of data) { - const multihash = await sha256.digest(datum) - const digest = multihash.bytes - const size = datum.byteLength - const blobAdd = await BlobCapabilities.add - .invoke({ - issuer: alice, - audience: connection.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - .execute(connection) - - if (blobAdd.out.error) { - throw new Error('invocation failed', { cause: blobAdd }) - } - - receipts.push(blobAdd) + await uploadBlob({ + issuer: alice, + audience: context.id, + with: spaceDid, + proofs: [proof], + connection + }, { digest: await sha256.digest(datum), bytes: datum }) } const blobList = await BlobCapabilities.list @@ -635,7 +606,7 @@ export const test = { if (blobList.out.error) { throw new Error('invocation failed', { cause: blobList }) } - assert.equal(blobList.out.ok.size, receipts.length) + assert.equal(blobList.out.ok.size, data.length) // list order last-in-first-out const listReverse = await Promise.all( data @@ -660,27 +631,13 @@ export const test = { ] for (const datum of data) { - const multihash = await sha256.digest(datum) - const digest = multihash.bytes - const size = datum.byteLength - const blobAdd = await BlobCapabilities.add - .invoke({ - issuer: alice, - audience: connection.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - .execute(connection) - - if (blobAdd.out.error) { - throw new Error('invocation failed', { cause: blobAdd }) - } + await uploadBlob({ + issuer: alice, + audience: context.id, + with: spaceDid, + proofs: [proof], + connection + }, { digest: await sha256.digest(datum), bytes: datum }) } // Get list with page size 1 (two pages) diff --git a/packages/upload-api/test/handlers/index.js b/packages/upload-api/test/handlers/index.js index 0fc036cf5..9e0e73680 100644 --- a/packages/upload-api/test/handlers/index.js +++ b/packages/upload-api/test/handlers/index.js @@ -1,6 +1,6 @@ import * as API from '../../src/types.js' import { CAR } from '@ucanto/core' -import * as IndexCapabilities from '@storacha/capabilities/index' +import * as IndexCapabilities from '@storacha/capabilities/space/index' import { fromShardArchives } from '@storacha/blob-index/util' import { createServer, connect } from '../../src/lib.js' import { alice, randomCAR, registerSpace } from '../util.js' @@ -9,76 +9,6 @@ import * as Result from '../helpers/result.js' /** @type {API.Tests} */ export const test = { - 'index/add should publish index to IPNI service': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const contentCAR = await randomCAR(32) - const contentCARBytes = new Uint8Array(await contentCAR.arrayBuffer()) - - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // upload the content CAR to the space - await uploadBlob( - context, - { - connection, - issuer: alice, - audience: context.id, - with: spaceDid, - proofs: [proof], - }, - { - cid: contentCAR.cid, - bytes: contentCARBytes, - } - ) - - const index = await fromShardArchives(contentCAR.roots[0], [ - contentCARBytes, - ]) - const indexCAR = Result.unwrap(await index.archive()) - const indexLink = await CAR.link(indexCAR) - - // upload the index CAR to the space - await uploadBlob( - context, - { - connection, - issuer: alice, - audience: context.id, - with: spaceDid, - proofs: [proof], - }, - { - cid: indexLink, - bytes: indexCAR, - } - ) - - const indexAdd = IndexCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { index: indexLink }, - proofs: [proof], - }) - const receipt = await indexAdd.execute(connection) - Result.try(receipt.out) - - // ensure a result exists for the content root - assert.ok( - Result.unwrap(await context.ipniService.query(index.content.multihash)) - ) - - for (const shard of index.shards.values()) { - for (const slice of shard.entries()) { - // ensure a result exists for each multihash in the index - assert.ok(Result.unwrap(await context.ipniService.query(slice[0]))) - } - } - }, 'index/add should fail if index is not stored in agent space': async ( assert, context @@ -94,7 +24,6 @@ export const test = { // upload the content CAR to the space await uploadBlob( - context, { connection, issuer: alice, @@ -103,7 +32,7 @@ export const test = { proofs: [proof], }, { - cid: contentCAR.cid, + digest: contentCAR.cid.multihash, bytes: contentCARBytes, } ) @@ -146,7 +75,6 @@ export const test = { // upload the index CAR to the space await uploadBlob( - context, { connection, issuer: alice, @@ -155,7 +83,7 @@ export const test = { proofs: [proof], }, { - cid: indexLink, + digest: indexLink.multihash, bytes: indexCAR, } ) @@ -183,7 +111,6 @@ export const test = { // upload the content CAR to the space await uploadBlob( - context, { connection, issuer: alice, @@ -192,7 +119,7 @@ export const test = { proofs: [proof], }, { - cid: contentCAR.cid, + digest: contentCAR.cid.multihash, bytes: contentCARBytes, } ) @@ -205,7 +132,6 @@ export const test = { // upload the index CAR to the space await uploadBlob( - context, { connection, issuer: alice, @@ -214,7 +140,7 @@ export const test = { proofs: [proof], }, { - cid: indexLink, + digest: indexLink.multihash, bytes: indexCAR, } ) diff --git a/packages/upload-api/test/handlers/ucan.js b/packages/upload-api/test/handlers/ucan.js index 4a4313e8c..314b18277 100644 --- a/packages/upload-api/test/handlers/ucan.js +++ b/packages/upload-api/test/handlers/ucan.js @@ -3,7 +3,7 @@ import { UCAN, Console } from '@storacha/capabilities' import { Receipt } from '@ucanto/core' import { ed25519 } from '@ucanto/principal' import { sha256 } from 'multiformats/hashes/sha2' -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { createServer, connect } from '../../src/lib.js' import { alice, bob, mallory, registerSpace } from '../util.js' diff --git a/packages/upload-api/test/handlers/web3.storage.js b/packages/upload-api/test/handlers/web3.storage.js deleted file mode 100644 index c6d08a3fa..000000000 --- a/packages/upload-api/test/handlers/web3.storage.js +++ /dev/null @@ -1,750 +0,0 @@ -import * as API from '../../src/types.js' -import { equals } from 'uint8arrays' -import { Absentee } from '@ucanto/principal' -import { sha256 } from 'multiformats/hashes/sha2' -import { Assert } from '@web3-storage/content-claims/capability' -import * as BlobCapabilities from '@storacha/capabilities/blob' -import * as W3sBlobCapabilities from '@storacha/capabilities/web3.storage/blob' -import { base64pad } from 'multiformats/bases/base64' - -import { AllocatedMemoryHadNotBeenWrittenToName } from '../../src/blob/lib.js' -import { provisionProvider } from '../helpers/utils.js' -import { createServer, connect } from '../../src/lib.js' -import { alice, bob, createSpace, registerSpace } from '../util.js' -import { parseBlobAddReceiptNext } from '../helpers/blob.js' -import * as Result from '../helpers/result.js' - -/** - * @type {API.Tests} - */ -export const test = { - 'web3.storage/blob/allocate must be invoked on service did': async ( - assert, - context - ) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const serviceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - proofs: [proof], - }) - const blobAllocate = await serviceBlobAllocate.execute(connection) - assert.ok( - String(blobAllocate.out.error?.message).match( - /did:key:.*does not have.*capability provider/ - ) - ) - }, - 'web3.storage/blob/allocate allocates to space and returns presigned url': - async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const serviceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - }) - const blobAllocate = await serviceBlobAllocate.execute(connection) - if (!blobAllocate.out.ok) { - throw new Error('invocation failed', { cause: blobAllocate }) - } - - // Validate response - assert.equal(blobAllocate.out.ok.size, size) - assert.ok(blobAllocate.out.ok.address) - assert.ok(blobAllocate.out.ok.address?.headers) - assert.ok(blobAllocate.out.ok.address?.url) - assert.ok(blobAllocate.out.ok.address?.expiresAt) - assert.equal( - blobAllocate.out.ok.address?.headers?.['content-length'], - String(size) - ) - assert.deepEqual( - blobAllocate.out.ok.address?.headers?.['x-amz-checksum-sha256'], - base64pad.baseEncode(multihash.digest) - ) - - const url = - blobAllocate.out.ok.address?.url && - new URL(blobAllocate.out.ok.address?.url) - if (!url) { - throw new Error('Expected presigned url in response') - } - const signedHeaders = url.searchParams.get('X-Amz-SignedHeaders') - - assert.equal( - signedHeaders, - 'content-length;host;x-amz-checksum-sha256', - 'content-length and checksum must be part of the signature' - ) - - // Validate allocation state - const spaceAllocations = await context.allocationsStorage.list(spaceDid) - assert.ok(spaceAllocations.ok) - assert.equal(spaceAllocations.ok?.size, 1) - const allocatedEntry = spaceAllocations.ok?.results[0] - if (!allocatedEntry) { - throw new Error('Expected presigned allocatedEntry in response') - } - assert.ok(equals(allocatedEntry.blob.digest, digest)) - assert.equal(allocatedEntry.blob.size, size) - - // Validate presigned url usage - const goodPut = await fetch(url, { - method: 'PUT', - mode: 'cors', - body: data, - headers: blobAllocate.out.ok.address?.headers, - }) - - assert.equal(goodPut.status, 200, await goodPut.text()) - }, - 'web3.storage/blob/allocate does not allocate more space to already allocated content': - async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const allocation = await W3sBlobCapabilities.allocate - .invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - }) - .execute(connection) - - if (!allocation.out.ok) { - throw new Error('invocation failed', { cause: allocation.out.error }) - } - - // second blob allocate invocation - const reallocation = await W3sBlobCapabilities.allocate - .invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - nonce: 'retry', - }) - .execute(connection) - if (!reallocation.out.ok) { - throw new Error('invocation failed', { cause: reallocation.out.error }) - } - - // Validate response - assert.equal(reallocation.out.ok.size, 0) - assert.ok(!!reallocation.out.ok.address) - }, - 'web3.storage/blob/allocate can allocate to different space after write to one space': - async (assert, context) => { - const { proof: aliceProof, spaceDid: aliceSpaceDid } = - await registerSpace(alice, context) - const { proof: bobProof, spaceDid: bobSpaceDid } = await registerSpace( - bob, - context, - 'bob' - ) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocations - const aliceBlobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: aliceSpaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [aliceProof], - }) - const bobBlobAddInvocation = BlobCapabilities.add.invoke({ - issuer: bob, - audience: context.id, - with: bobSpaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [bobProof], - }) - - // invoke `web3.storage/blob/allocate` capabilities on alice space - const aliceServiceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await aliceBlobAddInvocation.delegate()).cid, - space: aliceSpaceDid, - }, - }) - const aliceBlobAllocate = await aliceServiceBlobAllocate.execute( - connection - ) - if (!aliceBlobAllocate.out.ok) { - throw new Error('invocation failed', { cause: aliceBlobAllocate }) - } - // there is address to write - assert.ok(aliceBlobAllocate.out.ok.address) - assert.equal(aliceBlobAllocate.out.ok.size, size) - - // write to presigned url - const url = - aliceBlobAllocate.out.ok.address?.url && - new URL(aliceBlobAllocate.out.ok.address?.url) - if (!url) { - throw new Error('Expected presigned url in response') - } - const goodPut = await fetch(url, { - method: 'PUT', - mode: 'cors', - body: data, - headers: aliceBlobAllocate.out.ok.address?.headers, - }) - - assert.equal(goodPut.status, 200, await goodPut.text()) - - // invoke `web3.storage/blob/allocate` capabilities on bob space - const bobServiceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await bobBlobAddInvocation.delegate()).cid, - space: bobSpaceDid, - }, - }) - const bobBlobAllocate = await bobServiceBlobAllocate.execute(connection) - if (!bobBlobAllocate.out.ok) { - throw new Error('invocation failed', { cause: bobBlobAllocate }) - } - // there is no address to write - assert.ok(!bobBlobAllocate.out.ok.address) - assert.equal(bobBlobAllocate.out.ok.size, size) - - // Validate allocation state - const aliceSpaceAllocations = await context.allocationsStorage.list( - aliceSpaceDid - ) - assert.ok(aliceSpaceAllocations.ok) - assert.equal(aliceSpaceAllocations.ok?.size, 1) - - const bobSpaceAllocations = await context.allocationsStorage.list( - bobSpaceDid - ) - assert.ok(bobSpaceAllocations.ok) - assert.equal(bobSpaceAllocations.ok?.size, 1) - }, - 'web3.storage/blob/allocate creates presigned url that can only PUT a payload with right length': - async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const longer = new Uint8Array([11, 22, 34, 44, 55, 66]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const serviceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - }) - const blobAllocate = await serviceBlobAllocate.execute(connection) - if (!blobAllocate.out.ok) { - throw new Error('invocation failed', { cause: blobAllocate }) - } - // there is address to write - assert.ok(blobAllocate.out.ok.address) - assert.equal(blobAllocate.out.ok.size, size) - - // write to presigned url - const url = - blobAllocate.out.ok.address?.url && - new URL(blobAllocate.out.ok.address?.url) - if (!url) { - throw new Error('Expected presigned url in response') - } - const contentLengthFailSignature = await fetch(url, { - method: 'PUT', - mode: 'cors', - body: longer, - headers: { - ...blobAllocate.out.ok.address?.headers, - 'content-length': longer.byteLength.toString(10), - }, - }) - - assert.equal( - contentLengthFailSignature.status >= 400, - true, - 'should fail to upload as content-length differs from that used to sign the url' - ) - }, - 'web3.storage/blob/allocate creates presigned url that can PUT a payload with exact bytes': - async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const other = new Uint8Array([10, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const serviceBlobAllocate = W3sBlobCapabilities.allocate.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - }) - const blobAllocate = await serviceBlobAllocate.execute(connection) - if (!blobAllocate.out.ok) { - throw new Error('invocation failed', { cause: blobAllocate }) - } - // there is address to write - assert.ok(blobAllocate.out.ok.address) - assert.equal(blobAllocate.out.ok.size, size) - - // write to presigned url - const url = - blobAllocate.out.ok.address?.url && - new URL(blobAllocate.out.ok.address?.url) - if (!url) { - throw new Error('Expected presigned url in response') - } - const failChecksum = await fetch(url, { - method: 'PUT', - mode: 'cors', - body: other, - headers: blobAllocate.out.ok.address?.headers, - }) - - assert.equal( - failChecksum.status, - 400, - 'should fail to upload any other data.' - ) - }, - 'web3.storage/blob/allocate disallowed if invocation fails access verification': - async (assert, context) => { - const { proof, space, spaceDid } = await createSpace(alice) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - - // invoke `web3.storage/blob/allocate` - const task = { - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - cause: (await blobAddInvocation.delegate()).cid, - space: spaceDid, - }, - } - const blobAllocate = await W3sBlobCapabilities.allocate - .invoke(task) - .execute(connection) - - assert.ok(blobAllocate.out.error) - assert.equal(blobAllocate.out.error?.message.includes('no storage'), true) - - // Register space and retry - const account = Absentee.from({ - id: 'did:mailto:test.storacha.network:alice', - }) - const providerAdd = await provisionProvider({ - service: /** @type {API.Signer>} */ (context.signer), - agent: alice, - space, - account, - connection, - }) - assert.ok(providerAdd.out.ok) - - const retryBlobAllocate = await W3sBlobCapabilities.allocate - .invoke({ - ...task, - nonce: 'retry', - }) - .execute(connection) - assert.equal(retryBlobAllocate.out.error, undefined) - }, - 'web3.storage/blob/accept returns site delegation': async ( - assert, - context - ) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const blobAdd = await blobAddInvocation.execute(connection) - if (!blobAdd.out.ok) { - throw new Error('invocation failed', { cause: blobAdd }) - } - - // parse receipt next - const next = parseBlobAddReceiptNext(blobAdd) - - /** @type {import('@storacha/capabilities/types').BlobAddress} */ - // @ts-expect-error receipt type is unknown - const address = next.allocate.receipt.out.ok.address - - // Store the blob to the address - const goodPut = await fetch(address.url, { - method: 'PUT', - mode: 'cors', - body: data, - headers: address.headers, - }) - assert.equal(goodPut.status, 200, await goodPut.text()) - - // invoke `web3.storage/blob/accept` - const serviceBlobAccept = W3sBlobCapabilities.accept.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - space: spaceDid, - _put: { 'ucan/await': ['.out.ok', next.put.task.link()] }, - }, - }) - const blobAccept = await serviceBlobAccept.execute(connection) - if (!blobAccept.out.ok) { - throw new Error('invocation failed', { cause: blobAccept }) - } - // Validate out - assert.ok(blobAccept.out.ok) - assert.ok(blobAccept.out.ok.site) - - // Validate effect - assert.equal(blobAccept.fx.fork.length, 1) - /** @type {import('@ucanto/interface').Delegation} */ - // @ts-expect-error delegation not assignable to Effect per TS understanding - const delegation = blobAccept.fx.fork[0] - assert.equal(delegation.capabilities.length, 1) - assert.ok(delegation.capabilities[0].can, Assert.location.can) - assert.ok( - equals( - // @ts-expect-error nb unknown - delegation.capabilities[0].nb.content.digest, - digest - ) - ) - // @ts-expect-error nb unknown - const locations = delegation.capabilities[0].nb.location - assert.equal(locations.length, 1) - - const loc = Result.unwrap( - await context.blobsStorage.createDownloadUrl(multihash) - ) - assert.ok(locations.includes(loc)) - }, - 'web3.storage/blob/accept fails to provide site delegation when blob was not stored': - async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - - // prepare data - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // create service connection - const connection = connect({ - id: context.id, - channel: createServer(context), - }) - - // create `blob/add` invocation - const blobAddInvocation = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const blobAdd = await blobAddInvocation.execute(connection) - if (!blobAdd.out.ok) { - throw new Error('invocation failed', { cause: blobAdd }) - } - - // parse receipt next - const next = parseBlobAddReceiptNext(blobAdd) - - // invoke `web3.storage/blob/accept` - const serviceBlobAccept = W3sBlobCapabilities.accept.invoke({ - issuer: context.id, - audience: context.id, - with: context.id.did(), - nb: { - blob: { - digest, - size, - }, - space: spaceDid, - _put: { 'ucan/await': ['.out.ok', next.put.task.link()] }, - }, - proofs: [proof], - }) - const blobAccept = await serviceBlobAccept.execute(connection) - // Validate out error - assert.ok(blobAccept.out.error) - assert.equal( - blobAccept.out.error?.name, - AllocatedMemoryHadNotBeenWrittenToName - ) - }, -} diff --git a/packages/upload-api/test/handlers/web3.storage.spec.js b/packages/upload-api/test/handlers/web3.storage.spec.js deleted file mode 100644 index 29b47be53..000000000 --- a/packages/upload-api/test/handlers/web3.storage.spec.js +++ /dev/null @@ -1,4 +0,0 @@ -import { test } from '../test.js' -import * as W3s from './web3.storage.js' - -test({ 'storacha.network/*': W3s.test }) diff --git a/packages/upload-api/test/helpers/blob.js b/packages/upload-api/test/helpers/blob.js index 61dbfbf74..0960394df 100644 --- a/packages/upload-api/test/helpers/blob.js +++ b/packages/upload-api/test/helpers/blob.js @@ -1,8 +1,8 @@ import * as API from '../../src/types.js' import { ed25519 } from '@ucanto/principal' import { Delegation, Receipt } from '@ucanto/core' -import * as W3sBlobCapabilities from '@storacha/capabilities/web3.storage/blob' import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as SpaceBlobCapabilities from '@storacha/capabilities/space/blob' import * as HTTPCapabilities from '@storacha/capabilities/http' import * as UCAN from '@storacha/capabilities/ucan' import { @@ -22,7 +22,7 @@ export function parseBlobAddReceiptNext(receipt) { // @ts-expect-error read only effect const forkInvocations = receipt.fx.fork const allocateTask = forkInvocations.find( - (fork) => fork.capabilities[0].can === W3sBlobCapabilities.allocate.can + (fork) => fork.capabilities[0].can === BlobCapabilities.allocate.can ) const concludefxs = forkInvocations.filter( (fork) => fork.capabilities[0].can === UCAN.conclude.can @@ -31,7 +31,7 @@ export function parseBlobAddReceiptNext(receipt) { (fork) => fork.capabilities[0].can === HTTPCapabilities.put.can ) const acceptTask = forkInvocations.find( - (fork) => fork.capabilities[0].can === W3sBlobCapabilities.accept.can + (fork) => fork.capabilities[0].can === BlobCapabilities.accept.can ) if (!allocateTask || !concludefxs.length || !putTask || !acceptTask) { @@ -90,27 +90,25 @@ export function parseBlobAddReceiptNext(receipt) { } /** - * @param {API.UcantoServerTestContext} context * @param {object} config * @param {API.ConnectionView} config.connection * @param {API.Signer} config.issuer * @param {API.Verifier} config.audience * @param {API.SpaceDID} config.with * @param {API.Delegation[]} config.proofs - * @param {{ cid: API.UnknownLink, bytes: Uint8Array }} content + * @param {{ digest: API.MultihashDigest, bytes: Uint8Array }} content */ export const uploadBlob = async ( - context, { connection, issuer, audience, with: resource, proofs }, content ) => { - const blobAdd = BlobCapabilities.add.invoke({ + const blobAdd = SpaceBlobCapabilities.add.invoke({ issuer, audience, with: resource, nb: { blob: { - digest: content.cid.multihash.bytes, + digest: content.digest.bytes, size: content.bytes.length, }, }, @@ -146,7 +144,7 @@ export const uploadBlob = async ( with: derivedSigner.toDIDKey(), nb: { body: { - digest: content.cid.multihash.bytes, + digest: content.digest.bytes, size: content.bytes.length, }, url: { diff --git a/packages/upload-api/test/helpers/context.js b/packages/upload-api/test/helpers/context.js index a216776dc..f3d7dbe14 100644 --- a/packages/upload-api/test/helpers/context.js +++ b/packages/upload-api/test/helpers/context.js @@ -49,7 +49,10 @@ export const createContext = async ( } = getFilecoinStoreImplementations() const email = Email.debug() - const externalServices = await getExternalServiceImplementations(options) + const externalServices = await getExternalServiceImplementations({ + ...options, + serviceID: id + }) /** @type { import('../../src/types.js').UcantoServerContext } */ const serviceContext = { @@ -61,7 +64,6 @@ export const createContext = async ( url: new URL('http://localhost:8787'), ...serviceStores, ...externalServices, - getServiceConnection: () => connection, ...createRevocationChecker({ revocationsStorage: serviceStores.revocationsStorage, }), @@ -115,6 +117,7 @@ export const createContext = async ( export const cleanupContext = (context) => Promise.all([ context.carStoreBucket.deactivate(), - context.blobsStorage.deactivate(), context.claimsService.deactivate(), + // @ts-expect-error + ...context.storageProviders.map(p => p.deactivate()), ]) diff --git a/packages/upload-api/test/lib.js b/packages/upload-api/test/lib.js index d1c932843..94b5c66a6 100644 --- a/packages/upload-api/test/lib.js +++ b/packages/upload-api/test/lib.js @@ -8,15 +8,13 @@ import * as RateLimitList from './handlers/rate-limit/list.js' import * as RateLimitRemove from './handlers/rate-limit/remove.js' import * as Store from './handlers/store.js' import * as Blob from './handlers/blob.js' -import * as Web3Storage from './handlers/web3.storage.js' import * as Ucan from './handlers/ucan.js' import * as Subscription from './handlers/subscription.js' import * as Upload from './handlers/upload.js' import * as Plan from './handlers/plan.js' import * as Usage from './handlers/usage.js' import * as Index from './handlers/index.js' -import { test as allocationsStorageTests } from './storage/allocations-storage-tests.js' -import { test as blobsStorageTests } from './storage/blobs-storage-tests.js' +import { test as blobRegistryTests } from './storage/blob-registry-tests.js' import { test as agentStoreTests } from './storage/agent-store-tests.js' import { test as delegationsStorageTests } from './storage/delegations-storage-tests.js' import { test as provisionsStorageTests } from './storage/provisions-storage-tests.js' @@ -33,7 +31,6 @@ export const test = { ...Blob.test, ...Index.test, ...Upload.test, - ...Web3Storage.test, ...Ucan.test, } @@ -43,8 +40,7 @@ export const storageTests = { ...rateLimitsStorageTests, ...revocationsStorageTests, ...plansStorageTests, - ...allocationsStorageTests, - ...blobsStorageTests, + ...blobRegistryTests, ...agentStoreTests, } @@ -60,7 +56,6 @@ export const handlerTests = { ...Store.test, ...Blob.test, ...Index.test, - ...Web3Storage.test, ...Ucan.test, ...Subscription.test, ...Upload.test, @@ -73,15 +68,13 @@ export { Upload, Blob, Index, - Web3Storage, Ucan, delegationsStorageTests, provisionsStorageTests, rateLimitsStorageTests, revocationsStorageTests, plansStorageTests, - allocationsStorageTests, - blobsStorageTests, + blobRegistryTests, agentStoreTests, DebugEmail, } diff --git a/packages/upload-api/test/storage/agent-store-tests.js b/packages/upload-api/test/storage/agent-store-tests.js index 503f5fe16..1b304d9b0 100644 --- a/packages/upload-api/test/storage/agent-store-tests.js +++ b/packages/upload-api/test/storage/agent-store-tests.js @@ -1,7 +1,7 @@ import * as API from '../../src/types.js' import { sha256 } from 'multiformats/hashes/sha2' -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { Console } from '@storacha/capabilities' import { alice, registerSpace } from '../util.js' diff --git a/packages/upload-api/test/storage/allocations-storage-tests.js b/packages/upload-api/test/storage/allocations-storage-tests.js deleted file mode 100644 index 2a25e722c..000000000 --- a/packages/upload-api/test/storage/allocations-storage-tests.js +++ /dev/null @@ -1,367 +0,0 @@ -import * as API from '../../src/types.js' - -import { sha256 } from 'multiformats/hashes/sha2' -import * as BlobCapabilities from '@storacha/capabilities/blob' -import { equals } from 'uint8arrays' - -import { - RecordKeyConflictName, - RecordNotFoundErrorName, -} from '../../src/errors.js' -import { alice, bob, registerSpace } from '../util.js' - -/** - * @type {API.Tests} - */ -export const test = { - 'should store allocations': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // invoke `blob/add` - const blobAdd = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const cause = (await blobAdd.delegate()).link() - const allocationInsert = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - - assert.ok(allocationInsert.ok) - assert.ok(allocationInsert.ok?.blob) - }, - 'should store same allocation once': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // invoke `blob/add` - const blobAdd = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const cause = (await blobAdd.delegate()).link() - const allocationInsert0 = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - assert.ok(allocationInsert0.ok) - - const allocationInsert1 = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - assert.ok(allocationInsert1.error) - assert.equal(allocationInsert1.error?.name, RecordKeyConflictName) - }, - 'should get allocations only when available': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - const allocationGet0 = await allocationsStorage.get(spaceDid, multihash) - assert.ok(allocationGet0.error) - assert.equal(allocationGet0.error?.name, RecordNotFoundErrorName) - - // invoke `blob/add` - const blobAdd = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const cause = (await blobAdd.delegate()).link() - const allocationInsert = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - - assert.ok(allocationInsert.ok) - assert.ok(allocationInsert.ok?.blob) - - const allocationGet1 = await allocationsStorage.get(spaceDid, multihash) - assert.ok(allocationGet1.ok) - assert.ok(allocationGet1.ok?.blob) - assert.equal(allocationGet1.ok?.blob.size, size) - assert.ok( - equals(digest, allocationGet1.ok?.blob.digest || new Uint8Array()) - ) - assert.ok(allocationGet1.ok?.cause) - }, - 'should verify allocations exist': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - const allocationExist0 = await allocationsStorage.exists( - spaceDid, - multihash - ) - assert.ok(!allocationExist0.error) - assert.ok(!allocationExist0.ok) - - // invoke `blob/add` - const blobAdd = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const cause = (await blobAdd.delegate()).link() - const allocationInsert = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - - assert.ok(allocationInsert.ok) - assert.ok(allocationInsert.ok?.blob) - - const allocationExist1 = await allocationsStorage.exists( - spaceDid, - multihash - ) - assert.ok(allocationExist1.ok) - assert.ok(!allocationExist1.error) - }, - 'should list all allocations in a space': async (assert, context) => { - const { proof: aliceProof, spaceDid: aliceSpaceDid } = await registerSpace( - alice, - context - ) - const { proof: bobProof, spaceDid: bobSpaceDid } = await registerSpace( - bob, - context - ) - const allocationsStorage = context.allocationsStorage - - // Data for alice - const data0 = new Uint8Array([11, 22, 34, 44, 55]) - const multihash0 = await sha256.digest(data0) - const digest0 = multihash0.bytes - const size0 = data0.byteLength - const blob0 = { - digest: digest0, - size: size0, - } - // Data for bob - const data1 = new Uint8Array([66, 77, 88, 99, 0]) - const multihash1 = await sha256.digest(data1) - const digest1 = multihash1.bytes - const size1 = data1.byteLength - const blob1 = { - digest: digest1, - size: size1, - } - - // Get alice empty allocations - const allocationsAllice0 = await allocationsStorage.list(aliceSpaceDid) - assert.ok(allocationsAllice0.ok) - assert.deepEqual(allocationsAllice0.ok?.results, []) - assert.equal(allocationsAllice0.ok?.size, 0) - - // invoke `blob/add` with alice - const aliceBlobAdd0 = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: aliceSpaceDid, - nb: { - blob: blob0, - }, - proofs: [aliceProof], - }) - const aliceInvocation = (await aliceBlobAdd0.delegate()).link() - - // Add alice allocations - const aliceAllocationInsert0 = await allocationsStorage.insert({ - space: aliceSpaceDid, - blob: blob0, - cause: aliceInvocation, - }) - assert.ok(aliceAllocationInsert0.ok) - - // invoke `blob/add` with bob - const bobBlobAdd = BlobCapabilities.add.invoke({ - issuer: bob, - audience: context.id, - with: bobSpaceDid, - nb: { - blob: blob1, - }, - proofs: [bobProof], - }) - const cause = (await bobBlobAdd.delegate()).link() - - // Add bob allocations - const bobAllocationInsert = await allocationsStorage.insert({ - space: bobSpaceDid, - blob: blob1, - cause, - }) - assert.ok(bobAllocationInsert.ok) - - const allocationsAllice1 = await allocationsStorage.list(aliceSpaceDid) - assert.ok(allocationsAllice1.ok) - assert.equal(allocationsAllice1.ok?.size, 1) - assert.equal(allocationsAllice1.ok?.results.length, 1) - assert.ok( - equals( - blob0.digest, - allocationsAllice1.ok?.results[0].blob.digest || new Uint8Array() - ) - ) - - // Add bob's data on alice alloctions - const aliceBlobAdd01 = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: aliceSpaceDid, - nb: { - blob: blob1, - }, - proofs: [aliceProof], - }) - const aliceInvocation1 = (await aliceBlobAdd01.delegate()).link() - - // Add alice allocations - const aliceAllocationInsert1 = await allocationsStorage.insert({ - space: aliceSpaceDid, - blob: blob1, - cause: aliceInvocation1, - }) - assert.ok(aliceAllocationInsert1.ok) - - const allocationsAllice2 = await allocationsStorage.list(aliceSpaceDid) - assert.ok(allocationsAllice2.ok) - assert.equal(allocationsAllice2.ok?.size, 2) - assert.equal(allocationsAllice2.ok?.results.length, 2) - assert.ok( - allocationsAllice2.ok?.results.find((res) => - equals(res.blob.digest, blob0.digest) - ) - ) - assert.ok( - allocationsAllice2.ok?.results.find((res) => - equals(res.blob.digest, blob1.digest) - ) - ) - }, - 'should fail to remove non existent allocations on a space': async ( - assert, - context - ) => { - const { spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - - const removeResult = await allocationsStorage.remove(spaceDid, multihash) - - assert.ok(removeResult.error) - assert.equal(removeResult.error?.name, RecordNotFoundErrorName) - }, - 'should remove existent allocations on a space': async (assert, context) => { - const { proof, spaceDid } = await registerSpace(alice, context) - const allocationsStorage = context.allocationsStorage - - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash = await sha256.digest(data) - const digest = multihash.bytes - const size = data.byteLength - - // invoke `blob/add` - const blobAdd = BlobCapabilities.add.invoke({ - issuer: alice, - audience: context.id, - with: spaceDid, - nb: { - blob: { - digest, - size, - }, - }, - proofs: [proof], - }) - const cause = (await blobAdd.delegate()).link() - const allocationInsert0 = await allocationsStorage.insert({ - space: spaceDid, - blob: { - digest, - size, - }, - cause, - }) - assert.ok(allocationInsert0.ok) - - const removeResult = await allocationsStorage.remove(spaceDid, multihash) - assert.ok(removeResult.ok) - assert.equal(removeResult.ok?.size, size) - }, -} diff --git a/packages/upload-api/test/storage/allocations-storage.js b/packages/upload-api/test/storage/allocations-storage.js deleted file mode 100644 index 27634c118..000000000 --- a/packages/upload-api/test/storage/allocations-storage.js +++ /dev/null @@ -1,125 +0,0 @@ -import * as Types from '../../src/types.js' -import { equals } from 'uint8arrays/equals' -import { RecordKeyConflict, RecordNotFound } from '../../src/errors.js' - -/** - * @implements {Types.AllocationsStorage} - */ -export class AllocationsStorage { - constructor() { - /** @type {(Types.BlobAddInput & Types.BlobListItem)[]} */ - this.items = [] - } - - /** - * @param {Types.BlobAddInput} input - * @returns {ReturnType} - */ - async insert({ space, cause, ...output }) { - if ( - this.items.some( - (i) => i.space === space && equals(i.blob.digest, output.blob.digest) - ) - ) { - return { - error: new RecordKeyConflict(), - } - } - this.items.unshift({ - space, - cause, - ...output, - insertedAt: new Date().toISOString(), - }) - return { ok: output } - } - - /** - * @param {Types.DID} space - * @param {Types.MultihashDigest} digest - * @returns {ReturnType} - */ - async get(space, digest) { - const item = this.items.find( - (i) => i.space === space && equals(i.blob.digest, digest.bytes) - ) - if (!item) { - return { error: new RecordNotFound() } - } - return { ok: item } - } - - /** - * @param {Types.DID} space - * @param {Types.MultihashDigest} digest - * @returns {ReturnType} - */ - async exists(space, digest) { - const item = this.items.find( - (i) => i.space === space && equals(i.blob.digest, digest.bytes) - ) - return { ok: !!item } - } - - /** - * @param {Types.DID} space - * @param {Types.MultihashDigest} digest - * @returns {ReturnType} - */ - async remove(space, digest) { - const item = this.items.find( - (i) => i.space === space && equals(i.blob.digest, digest.bytes) - ) - if (!item) { - return { error: new RecordNotFound() } - } - this.items = this.items.filter((i) => i !== item) - return { - ok: { - size: item.blob.size, - }, - } - } - - /** - * @param {Types.DID} space - * @param {Types.ListOptions} options - * @returns {ReturnType} - */ - async list( - space, - { cursor = '0', pre = false, size = this.items.length } = {} - ) { - const offset = parseInt(cursor, 10) - const items = pre ? this.items.slice(0, offset) : this.items.slice(offset) - - const matches = [...items.entries()] - .filter(([n, item]) => item.space === space) - .slice(0, size) - - if (matches.length === 0) { - return { ok: { size: 0, results: [] } } - } - - const first = matches[0] - const last = matches[matches.length - 1] - - const start = first[0] || 0 - const end = last[0] || 0 - const values = matches.map(([_, item]) => item) - - const [before, after, results] = pre - ? [`${start}`, `${end + 1}`, values] - : [`${start + offset}`, `${end + 1 + offset}`, values] - - return { - ok: { - size: values.length, - before, - after, - cursor: after, - results, - }, - } - } -} diff --git a/packages/upload-api/test/storage/allocations-storage.spec.js b/packages/upload-api/test/storage/allocations-storage.spec.js deleted file mode 100644 index 817c610f1..000000000 --- a/packages/upload-api/test/storage/allocations-storage.spec.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as AllocationsStorage from './allocations-storage-tests.js' -import { test } from '../test.js' -test({ 'in memory allocations storage': AllocationsStorage.test }) diff --git a/packages/upload-api/test/storage/blob-registry-tests.js b/packages/upload-api/test/storage/blob-registry-tests.js new file mode 100644 index 000000000..44dc82357 --- /dev/null +++ b/packages/upload-api/test/storage/blob-registry-tests.js @@ -0,0 +1,160 @@ +import * as API from '../../src/types.js' +import { sha256 } from 'multiformats/hashes/sha2' +import { equals } from 'multiformats/bytes' +import { alice, bob, randomCID, registerSpace } from '../util.js' +import { EntryExists, EntryNotFound } from './blob-registry.js' + +/** + * @type {API.Tests} + */ +export const test = { + 'should register a blob': async (assert, context) => { + const { spaceDid: space } = await registerSpace(alice, context) + const { registry } = context + const data = new Uint8Array([11, 22, 34, 44, 55]) + const digest = await sha256.digest(data) + const blob = { digest: digest.bytes, size: data.length } + const cause = await randomCID() + const registration = await registry.register({ space, blob, cause }) + assert.ok(registration.ok) + }, + 'should register same blob in the same space once': async (assert, context) => { + const { spaceDid: space } = await registerSpace(alice, context) + const { registry } = context + const data = new Uint8Array([11, 22, 34, 44, 55]) + const digest = await sha256.digest(data) + const blob = { digest: digest.bytes, size: data.length } + const cause = await randomCID() + const registration0 = await registry.register({ space, blob, cause }) + assert.ok(registration0.ok) + const registration1 = await registry.register({ space, blob, cause }) + assert.ok(registration1.error) + assert.equal(registration1.error?.name, EntryExists.name) + }, + 'should get entry only when available': async (assert, context) => { + const { spaceDid: space } = await registerSpace(alice, context) + const { registry } = context + + const data = new Uint8Array([11, 22, 34, 44, 55]) + const digest = await sha256.digest(data) + + const find0 = await registry.find(space, digest) + assert.ok(find0.error) + assert.equal(find0.error?.name, EntryNotFound.name) + + const blob = { digest: digest.bytes, size: data.length } + const cause = await randomCID() + const registration = await registry.register({ space, blob, cause }) + assert.ok(registration.ok) + + const find1 = await registry.find(space, digest) + assert.ok(find1.ok) + assert.ok(find1.ok?.blob) + assert.equal(find1.ok?.blob.size, data.length) + assert.ok(equals(digest.bytes, find1.ok?.blob.digest || new Uint8Array())) + assert.equal(find1.ok?.cause.toString(), cause.toString()) + }, + 'should list all blobs in a space': async (assert, context) => { + const { spaceDid: aliceSpace } = await registerSpace(alice, context) + const { spaceDid: bobSpace } = await registerSpace(bob, context) + const { registry } = context + + // Data for alice + const data0 = new Uint8Array([11, 22, 34, 44, 55]) + const digest0 = await sha256.digest(data0) + const blob0 = { digest: digest0.bytes, size: data0.length } + const cause0 = await randomCID() + // Data for bob + const data1 = new Uint8Array([66, 77, 88, 99, 0]) + const digest1 = await sha256.digest(data1) + const blob1 = { digest: digest1.bytes, size: data1.length } + const cause1 = await randomCID() + + // Get alice empty entries + const entriesAlice0 = await registry.entries(aliceSpace) + assert.ok(entriesAlice0.ok) + assert.deepEqual(entriesAlice0.ok?.results, []) + assert.equal(entriesAlice0.ok?.size, 0) + + // Add alice entries + const aliceReg0 = await registry.register({ + space: aliceSpace, + blob: blob0, + cause: cause0, + }) + assert.ok(aliceReg0.ok) + + // Add bob allocations + const bobReg = await registry.register({ + space: bobSpace, + blob: blob1, + cause: cause1, + }) + assert.ok(bobReg.ok) + + const entriesAlice1 = await registry.entries(aliceSpace) + assert.ok(entriesAlice1.ok) + assert.equal(entriesAlice1.ok?.size, 1) + assert.equal(entriesAlice1.ok?.results.length, 1) + assert.ok( + equals( + blob0.digest, + entriesAlice1.ok?.results[0].blob.digest || new Uint8Array() + ) + ) + + // Add bobs data to alice's space + const cause2 = await randomCID() + const aliceReg1 = await registry.register({ + space: aliceSpace, + blob: blob1, + cause: cause2, + }) + assert.ok(aliceReg1.ok) + + const entriesAlice2 = await registry.entries(aliceSpace) + assert.ok(entriesAlice2.ok) + assert.equal(entriesAlice2.ok?.size, 2) + assert.equal(entriesAlice2.ok?.results.length, 2) + assert.ok( + entriesAlice2.ok?.results.some((res) => + equals(res.blob.digest, blob0.digest) + ) + ) + assert.ok( + entriesAlice2.ok?.results.some((res) => + equals(res.blob.digest, blob1.digest) + ) + ) + }, + 'should fail to deregister non existent blob': async (assert, context) => { + const { spaceDid: space } = await registerSpace(alice, context) + const { registry } = context + const data = new Uint8Array([11, 22, 34, 44, 55]) + const digest = await sha256.digest(data) + const dereg = await registry.deregister(space, digest) + assert.ok(dereg.error) + assert.equal(dereg.error?.name, EntryNotFound.name) + }, + 'should deregister a blob': async (assert, context) => { + const { spaceDid: space } = await registerSpace(alice, context) + const { registry } = context + const data = new Uint8Array([11, 22, 34, 44, 55]) + const digest = await sha256.digest(data) + const blob = { digest: digest.bytes, size: data.length } + const cause = await randomCID() + + const reg = await registry.register({ space, blob, cause }) + assert.ok(reg.ok) + + const find0 = await registry.find(space, digest) + assert.ok(find0.ok) + + const dereg = await registry.deregister(space, digest) + assert.ok(dereg.ok) + + const find1 = await registry.find(space, digest) + assert.ok(find1.error) + assert.equal(find1.error?.name, EntryNotFound.name) + }, +} diff --git a/packages/upload-api/test/storage/blob-registry.js b/packages/upload-api/test/storage/blob-registry.js new file mode 100644 index 000000000..4baf922ba --- /dev/null +++ b/packages/upload-api/test/storage/blob-registry.js @@ -0,0 +1,94 @@ +import * as API from '../../src/types.js' +import { ok, error, Failure } from '@ucanto/core' +import { equals } from 'multiformats/bytes' + +/** @implements {API.BlobRegistry} */ +export class Registry { + constructor() { + /** @type {Map} */ + this.data = new Map() + } + + /** @type {API.BlobRegistry['register']} */ + async register ({ space, cause, blob }) { + const entries = this.data.get(space) ?? [] + if (entries.some(e => equals(e.blob.digest, blob.digest))) { + return error(new EntryExists()) + } + const insertedAt = new Date().toISOString() + this.data.set(space, [{ blob, cause, insertedAt }, ...entries]) + return ok({}) + } + + /** @type {API.BlobRegistry['find']} */ + async find (space, digest) { + const entries = this.data.get(space) ?? [] + const entry = entries.find(e => equals(e.blob.digest, digest.bytes)) + if (!entry) return error(new EntryNotFound()) + return ok(entry) + } + + /** @type {API.BlobRegistry['deregister']} */ + async deregister (space, digest) { + const entries = this.data.get(space) ?? [] + const entry = entries.find(e => equals(e.blob.digest, digest.bytes)) + if (!entry) return error(new EntryNotFound()) + this.data.set(space, entries.filter(e => e !== entry)) + return ok({}) + } + + /** @type {API.BlobRegistry['entries']} */ + async entries (space, options) { + const entries = this.data.get(space) ?? [] + const { cursor = '0', size = entries.length } = options ?? {} + const offset = parseInt(cursor, 10) + const items = entries.slice(offset) + + const matches = [...items.entries()].slice(0, size) + + if (matches.length === 0) { + return ok({ size: 0, results: [] }) + } + + const first = matches[0] + const last = matches[matches.length - 1] + + const start = first[0] || 0 + const end = last[0] || 0 + const values = matches.map(([_, item]) => item) + + const [before, after, results] = [`${start + offset}`, `${end + 1 + offset}`, values] + + return ok({ + size: values.length, + before, + after, + cursor: after, + results, + }) + } +} + +export class EntryNotFound extends Failure { + static name = /** @type {const} */ ('EntryNotFound') + + get reason() { + return this.message + } + + get name() { + return EntryNotFound.name + } +} + +export class EntryExists extends Failure { + static name = /** @type {const} */ ('EntryExists') + + get reason() { + return this.message + } + + get name() { + return EntryExists.name + } +} diff --git a/packages/upload-api/test/storage/blob-registry.spec.js b/packages/upload-api/test/storage/blob-registry.spec.js new file mode 100644 index 000000000..fefebbfd4 --- /dev/null +++ b/packages/upload-api/test/storage/blob-registry.spec.js @@ -0,0 +1,3 @@ +import * as BlobRegistry from './blob-registry-tests.js' +import { test } from '../test.js' +test({ 'in memory blob registry': BlobRegistry.test }) diff --git a/packages/upload-api/test/storage/blobs-storage-tests.js b/packages/upload-api/test/storage/blobs-storage-tests.js deleted file mode 100644 index 9596533ef..000000000 --- a/packages/upload-api/test/storage/blobs-storage-tests.js +++ /dev/null @@ -1,74 +0,0 @@ -import * as API from '../../src/types.js' -import { sha256 } from 'multiformats/hashes/sha2' -import * as Result from '../helpers/result.js' -import { equals } from 'multiformats/bytes' - -/** - * @type {API.Tests} - */ -export const test = { - 'should create valid presigned URL for blobs that can be used to write': - async (assert, context) => { - const blobsStorage = context.blobsStorage - const data = new Uint8Array([11, 22, 34, 44, 55]) - const multihash0 = await sha256.digest(data) - const digest = multihash0.bytes - const size = data.byteLength - const expiresIn = 60 * 60 * 24 // 1 day - const blob = { - digest: digest, - size: size, - } - const createUploadUrl = await blobsStorage.createUploadUrl( - multihash0, - blob.size, - expiresIn - ) - if (!createUploadUrl.ok) { - throw new Error('should create presigned url') - } - - assert.ok(createUploadUrl.ok.headers['content-length']) - assert.ok(createUploadUrl.ok.headers['x-amz-checksum-sha256']) - - // Store the blob to the address - const goodPut = await fetch(createUploadUrl.ok.url, { - method: 'PUT', - mode: 'cors', - body: data, - headers: createUploadUrl.ok.headers, - }) - assert.equal(goodPut.status, 200, await goodPut.text()) - - // check it exists - const hasBlob = await blobsStorage.has(multihash0) - assert.ok(hasBlob.ok) - }, - - 'should create valid download URL for blobs that can be used to read': async ( - assert, - { blobsStorage } - ) => { - const data = new Uint8Array([11, 22, 34, 44, 55]) - const digest = await sha256.digest(data) - const expires = 60 * 60 * 24 // 1 day - - const upload = Result.unwrap( - await blobsStorage.createUploadUrl(digest, data.length, expires) - ) - - await fetch(upload.url, { - method: 'PUT', - mode: 'cors', - body: data, - headers: upload.headers, - }) - - const downloadUrl = Result.unwrap( - await blobsStorage.createDownloadUrl(digest) - ) - - const res = await fetch(downloadUrl) - assert.ok(equals(new Uint8Array(await res.arrayBuffer()), data)) - }, -} diff --git a/packages/upload-api/test/storage/blobs-storage.js b/packages/upload-api/test/storage/blobs-storage.js deleted file mode 100644 index f1f7489dd..000000000 --- a/packages/upload-api/test/storage/blobs-storage.js +++ /dev/null @@ -1,213 +0,0 @@ -import * as Types from '../../src/types.js' -import { base64pad } from 'multiformats/bases/base64' -import { SigV4 } from '@web3-storage/sigv4' -import { base58btc } from 'multiformats/bases/base58' -import { sha256 } from 'multiformats/hashes/sha2' -import { ok, error } from '@ucanto/core' -import { BlobNotFound } from '../../src/blob/lib.js' - -/** @param {Types.MultihashDigest} digest */ -const contentKey = (digest) => { - const encodedMultihash = base58btc.encode(digest.bytes) - return `${encodedMultihash}/${encodedMultihash}.blob` -} - -/** - * @implements {Types.BlobsStorage} - * @implements {Types.BlobRetriever} - */ -export class BlobsStorage { - /** - * @param {Types.CarStoreBucketOptions & {http?: import('http')}} options - */ - static async activate({ http, ...options } = {}) { - const content = new Map() - if (http) { - const server = http.createServer(async (request, response) => { - const { pathname } = new URL(request.url || '/', url) - if (request.method === 'PUT') { - const buffer = new Uint8Array( - parseInt(request.headers['content-length'] || '0') - ) - let offset = 0 - for await (const chunk of request) { - buffer.set(chunk, offset) - offset += chunk.length - } - const hash = await sha256.digest(buffer) - const checksum = base64pad.baseEncode(hash.digest) - - if (checksum !== request.headers['x-amz-checksum-sha256']) { - response.writeHead(400, `checksum mismatch`) - } else { - content.set(pathname, buffer) - response.writeHead(200) - } - } else if (request.method === 'GET') { - const data = content.get(pathname) - if (data) { - response.writeHead(200) - response.write(data) - } else { - response.writeHead(404) - } - } else { - response.writeHead(405) - } - - response.end() - // otherwise it keep connection lingering - response.destroy() - }) - await new Promise((resolve) => server.listen(resolve)) - - // @ts-ignore - this is actually what it returns on http - const port = server.address().port - const url = new URL(`http://localhost:${port}`) - - return new BlobsStorage({ - ...options, - content, - url, - server, - }) - } else { - return new BlobsStorage({ - ...options, - content, - url: new URL(`http://localhost:8989`), - }) - } - } - - /** - * @returns {Promise} - */ - async deactivate() { - const { server } = this - if (server) { - await new Promise((resolve, reject) => { - // does not exist in node 16 - if (typeof server.closeAllConnections === 'function') { - server.closeAllConnections() - } - - server.close((error) => { - if (error) { - reject(error) - } else { - resolve(undefined) - } - }) - }) - } - } - - /** - * @param {Types.CarStoreBucketOptions & { server?: import('http').Server, url: URL, content: Map }} options - */ - constructor({ - content, - url, - server, - accessKeyId = 'id', - secretAccessKey = 'secret', - bucket = 'my-bucket', - region = 'eu-central-1', - }) { - this.server = server - this.baseURL = url - this.accessKeyId = accessKeyId - this.secretAccessKey = secretAccessKey - this.bucket = bucket - this.region = region - this.content = content - } - - /** @param {Types.MultihashDigest} digest */ - #bucketPath(digest) { - return `/${this.bucket}/${contentKey(digest)}` - } - - /** @param {Types.MultihashDigest} digest */ - async has(digest) { - return ok(this.content.has(this.#bucketPath(digest))) - } - - /** @param {Types.MultihashDigest} digest */ - async stream(digest) { - const key = this.#bucketPath(digest) - if (!this.server) { - const url = new URL(key, this.baseURL) - const res = await fetch(url.toString()) - if (res.status === 404) return error(new BlobNotFound(digest)) - if (!res.ok || !res.body) { - throw new Error( - `serverless blob storage failed to fetch from: ${url} status: ${res.status}` - ) - } - return ok(res.body) - } - - const bytes = this.content.get(key) - if (!bytes) return error(new BlobNotFound(digest)) - - return ok( - new ReadableStream({ - pull(controller) { - controller.enqueue(bytes) - controller.close() - }, - }) - ) - } - - /** - * @param {Types.MultihashDigest} digest - * @param {number} size - * @param {number} expiresIn - */ - async createUploadUrl(digest, size, expiresIn) { - const { bucket, accessKeyId, secretAccessKey, region, baseURL } = this - - // sigv4 - const sig = new SigV4({ - accessKeyId, - secretAccessKey, - region, - }) - - const checksum = base64pad.baseEncode(digest.digest) - const { search, hash } = sig.sign({ - key: contentKey(digest), - checksum, - bucket, - expires: expiresIn, - }) - - const url = new URL(baseURL) - url.search = search - url.pathname = this.#bucketPath(digest) - url.hash = hash - url.searchParams.set( - 'X-Amz-SignedHeaders', - ['content-length', 'host', 'x-amz-checksum-sha256'].join(';') - ) - - return { - ok: { - url, - headers: { - 'x-amz-checksum-sha256': checksum, - 'content-length': String(size), - }, - }, - } - } - - /** @param {Types.MultihashDigest} digest */ - async createDownloadUrl(digest) { - const url = new URL(this.#bucketPath(digest), this.baseURL) - return ok(/** @type {Types.URI} */ (url.toString())) - } -} diff --git a/packages/upload-api/test/storage/blobs-storage.spec.js b/packages/upload-api/test/storage/blobs-storage.spec.js deleted file mode 100644 index 33682e9d4..000000000 --- a/packages/upload-api/test/storage/blobs-storage.spec.js +++ /dev/null @@ -1,3 +0,0 @@ -import * as BlobsStorage from './blobs-storage-tests.js' -import { test } from '../test.js' -test({ 'in memory blobs storage': BlobsStorage.test }) diff --git a/packages/upload-api/test/storage/index.js b/packages/upload-api/test/storage/index.js index c4aab381a..3775063c8 100644 --- a/packages/upload-api/test/storage/index.js +++ b/packages/upload-api/test/storage/index.js @@ -1,5 +1,4 @@ -import { AllocationsStorage } from './allocations-storage.js' -import { BlobsStorage } from './blobs-storage.js' +import { Registry as BlobRegistry } from './blob-registry.js' import { CarStoreBucket } from './car-store-bucket.js' import { StoreTable } from './store-table.js' import { UploadTable } from './upload-table.js' @@ -21,13 +20,12 @@ import * as AgentStore from './agent-store.js' */ export async function getServiceStorageImplementations(options) { const storeTable = new StoreTable() - const allocationsStorage = new AllocationsStorage() + const registry = new BlobRegistry() const uploadTable = new UploadTable() - const blobsStorage = await BlobsStorage.activate(options) const carStoreBucket = await CarStoreBucket.activate(options) const revocationsStorage = new RevocationsStorage() const plansStorage = new PlansStorage() - const usageStorage = new UsageStorage(storeTable, allocationsStorage) + const usageStorage = new UsageStorage(storeTable, registry) const provisionsStorage = new ProvisionsStorage(options.providers) const subscriptionsStorage = new SubscriptionsStorage(provisionsStorage) const delegationsStorage = new DelegationsStorage() @@ -36,10 +34,8 @@ export async function getServiceStorageImplementations(options) { return { storeTable, - allocationsStorage, + registry, uploadTable, - blobsStorage, - blobRetriever: blobsStorage, carStoreBucket, revocationsStorage, plansStorage, diff --git a/packages/upload-api/test/storage/usage-storage.js b/packages/upload-api/test/storage/usage-storage.js index 8e571f87b..939a0d98c 100644 --- a/packages/upload-api/test/storage/usage-storage.js +++ b/packages/upload-api/test/storage/usage-storage.js @@ -4,11 +4,11 @@ export class UsageStorage { /** * @param {import('./store-table.js').StoreTable} storeTable - * @param {import('./allocations-storage.js').AllocationsStorage} allocationsStorage + * @param {import('./blob-registry.js').Registry} blobRegistry */ - constructor(storeTable, allocationsStorage) { + constructor(storeTable, blobRegistry) { this.storeTable = storeTable - this.allocationsStorage = allocationsStorage + this.blobRegistry = blobRegistry /** * @type {Record} */ @@ -21,10 +21,9 @@ export class UsageStorage { ...item, cause: item.invocation, })), - ...this.allocationsStorage.items.map((item) => ({ - ...item, - size: item.blob.size, - })), + ...[...this.blobRegistry.data.entries()].flatMap(([space, entries]) => ( + entries.map(e => ({ space, size: e.blob.size, ...e })) + )), ] } diff --git a/packages/upload-client/package.json b/packages/upload-client/package.json index d6165e03a..6e9a5a65f 100644 --- a/packages/upload-client/package.json +++ b/packages/upload-client/package.json @@ -84,27 +84,27 @@ "@ipld/dag-cbor": "^9.0.6", "@ipld/dag-ucan": "^3.4.0", "@ipld/unixfs": "^2.1.1", + "@storacha/blob-index": "workspace:^", + "@storacha/capabilities": "workspace:^", + "@storacha/filecoin-client": "workspace:^", "@ucanto/client": "^9.0.1", "@ucanto/core": "^10.0.1", "@ucanto/interface": "^10.0.1", "@ucanto/transport": "^9.1.1", - "@storacha/blob-index": "workspace:^", - "@storacha/capabilities": "workspace:^", "@web3-storage/data-segment": "^5.1.0", - "@storacha/filecoin-client": "workspace:^", "ipfs-utils": "^9.0.14", "multiformats": "^12.1.2", "p-retry": "^5.1.2", "varint": "^6.0.0" }, "devDependencies": { + "@storacha/eslint-config": "workspace:^", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", "@types/varint": "^6.0.1", "@ucanto/principal": "^9.0.1", "@ucanto/server": "^10.0.0", "@web3-storage/content-claims": "^5.0.0", - "@storacha/eslint-config": "workspace:^", "assert": "^2.0.0", "blockstore-core": "^3.0.0", "c8": "^7.13.0", @@ -113,7 +113,7 @@ "mocha": "^10.2.0", "npm-run-all": "^4.1.5", "playwright-test": "^12.3.4", - "typescript": "5.2.2" + "typescript": "5.6.3" }, "eslintConfig": { "extends": [ diff --git a/packages/upload-client/src/blob/add.js b/packages/upload-client/src/blob/add.js index a938430bd..7dce0010b 100644 --- a/packages/upload-client/src/blob/add.js +++ b/packages/upload-client/src/blob/add.js @@ -2,8 +2,8 @@ import { ed25519 } from '@ucanto/principal' import { conclude } from '@storacha/capabilities/ucan' import * as UCAN from '@storacha/capabilities/ucan' import { Delegation, Receipt } from '@ucanto/core' -import * as W3sBlobCapabilities from '@storacha/capabilities/web3.storage/blob' import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as SpaceBlobCapabilities from '@storacha/capabilities/space/blob' import * as HTTPCapabilities from '@storacha/capabilities/http' import { SpaceDID } from '@storacha/capabilities/utils' import retry, { AbortError } from 'p-retry' @@ -51,7 +51,7 @@ function parseBlobAddReceiptNext(receipt) { // @ts-expect-error read only effect const forkInvocations = receipt.fx.fork const allocateTask = forkInvocations.find( - (fork) => fork.capabilities[0].can === W3sBlobCapabilities.allocate.can + (fork) => fork.capabilities[0].can === BlobCapabilities.allocate.can ) const concludefxs = forkInvocations.filter( (fork) => fork.capabilities[0].can === UCAN.conclude.can @@ -60,7 +60,7 @@ function parseBlobAddReceiptNext(receipt) { (fork) => fork.capabilities[0].can === HTTPCapabilities.put.can ) const acceptTask = forkInvocations.find( - (fork) => fork.capabilities[0].can === W3sBlobCapabilities.accept.can + (fork) => fork.capabilities[0].can === BlobCapabilities.accept.can ) /* c8 ignore next 3 */ @@ -181,7 +181,7 @@ export async function add( const result = await retry( async () => { - return await BlobCapabilities.add + return await SpaceBlobCapabilities.add .invoke({ issuer, /* c8 ignore next */ @@ -200,7 +200,7 @@ export async function add( ) if (!result.out.ok) { - throw new Error(`failed ${BlobCapabilities.add.can} invocation`, { + throw new Error(`failed ${SpaceBlobCapabilities.add.can} invocation`, { cause: result.out.error, }) } @@ -210,7 +210,7 @@ export async function add( const { receipt: allocateReceipt } = nextTasks.allocate /* c8 ignore next 5 */ if (!allocateReceipt.out.ok) { - throw new Error(`failed ${BlobCapabilities.add.can} invocation`, { + throw new Error(`failed ${SpaceBlobCapabilities.add.can} invocation`, { cause: allocateReceipt.out.error, }) } @@ -291,7 +291,7 @@ export async function add( ) const ucanConclude = await httpPutConcludeInvocation.execute(conn) if (!ucanConclude.out.ok) { - throw new Error(`failed ${BlobCapabilities.add.can} invocation`, { + throw new Error(`failed ${SpaceBlobCapabilities.add.can} invocation`, { cause: result.out.error, }) } @@ -320,7 +320,7 @@ export async function add( } /** Returns the ability used by an invocation. */ -export const ability = BlobCapabilities.add.can +export const ability = SpaceBlobCapabilities.add.can /** * Returns required input to the invocation. diff --git a/packages/upload-client/src/blob/get.js b/packages/upload-client/src/blob/get.js index 668460974..5282ac5fd 100644 --- a/packages/upload-client/src/blob/get.js +++ b/packages/upload-client/src/blob/get.js @@ -1,4 +1,4 @@ -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { SpaceDID } from '@storacha/capabilities/utils' import { servicePrincipal, connection } from '../service.js' diff --git a/packages/upload-client/src/blob/list.js b/packages/upload-client/src/blob/list.js index 7dcc77eb5..b458412fe 100644 --- a/packages/upload-client/src/blob/list.js +++ b/packages/upload-client/src/blob/list.js @@ -1,4 +1,4 @@ -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { SpaceDID } from '@storacha/capabilities/utils' import { servicePrincipal, connection } from '../service.js' @@ -19,7 +19,7 @@ import { servicePrincipal, connection } from '../service.js' * * The issuer needs the `blob/list` delegated capability. * @param {import('../types.js').ListRequestOptions} [options] - * @returns {Promise} + * @returns {Promise} */ export async function list( { issuer, with: resource, proofs, audience }, diff --git a/packages/upload-client/src/blob/remove.js b/packages/upload-client/src/blob/remove.js index 9fa10adbf..509f71e23 100644 --- a/packages/upload-client/src/blob/remove.js +++ b/packages/upload-client/src/blob/remove.js @@ -1,4 +1,4 @@ -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import { SpaceDID } from '@storacha/capabilities/utils' import { servicePrincipal, connection } from '../service.js' diff --git a/packages/upload-client/src/index/add.js b/packages/upload-client/src/index/add.js index a06473a60..60a6dd1bc 100644 --- a/packages/upload-client/src/index/add.js +++ b/packages/upload-client/src/index/add.js @@ -1,4 +1,4 @@ -import * as IndexCapabilities from '@storacha/capabilities/index' +import * as IndexCapabilities from '@storacha/capabilities/space/index' import { SpaceDID } from '@storacha/capabilities/utils' import retry from 'p-retry' import { servicePrincipal, connection } from '../service.js' @@ -25,7 +25,7 @@ import { REQUEST_RETRIES } from '../constants.js' * The issuer needs the `index/add` delegated capability. * @param {import('../types.js').CARLink} index Index to store. * @param {import('../types.js').RequestOptions} [options] - * @returns {Promise} + * @returns {Promise} */ export async function add( { issuer, with: resource, proofs, audience }, diff --git a/packages/upload-client/src/types.ts b/packages/upload-client/src/types.ts index 5ebaa880a..878067044 100644 --- a/packages/upload-client/src/types.ts +++ b/packages/upload-client/src/types.ts @@ -21,25 +21,25 @@ import { UCANConcludeSuccess, UCANConcludeFailure, BlobModel, - BlobAdd, - BlobAddSuccess, - BlobAddFailure, + SpaceBlobAdd, + SpaceBlobAddSuccess, + SpaceBlobAddFailure, BlobAllocateSuccess, BlobAllocateFailure, BlobAcceptSuccess, BlobAcceptFailure, - BlobRemove, - BlobRemoveSuccess, - BlobRemoveFailure, - BlobList, - BlobListSuccess, - BlobListFailure, - BlobGet, - BlobGetSuccess, - BlobGetFailure, - IndexAdd, - IndexAddSuccess, - IndexAddFailure, + SpaceBlobRemove, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure, + SpaceBlobList, + SpaceBlobListSuccess, + SpaceBlobListFailure, + SpaceBlobGet, + SpaceBlobGetSuccess, + SpaceBlobGetFailure, + SpaceIndexAdd, + SpaceIndexAddSuccess, + SpaceIndexAddFailure, StoreAdd, StoreAddSuccess, StoreAddSuccessUpload, @@ -97,24 +97,24 @@ type FetchOptions = Override< export type { FetchOptions, BlobModel, - BlobAddSuccess, - BlobAddFailure, + SpaceBlobAddSuccess, + SpaceBlobAddFailure, BlobAllocateSuccess, BlobAllocateFailure, BlobAcceptSuccess, BlobAcceptFailure, - BlobRemove, - BlobRemoveSuccess, - BlobRemoveFailure, - BlobList, - BlobListSuccess, - BlobListFailure, - BlobGet, - BlobGetSuccess, - BlobGetFailure, - IndexAdd, - IndexAddSuccess, - IndexAddFailure, + SpaceBlobRemove, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure, + SpaceBlobList, + SpaceBlobListSuccess, + SpaceBlobListFailure, + SpaceBlobGet, + SpaceBlobGetSuccess, + SpaceBlobGetFailure, + SpaceIndexAdd, + SpaceIndexAddSuccess, + SpaceIndexAddFailure, StoreAdd, StoreAddSuccess, StoreAddSuccessUpload, @@ -168,17 +168,17 @@ export interface Service extends StorefrontService { } space: { blob: { - add: ServiceMethod - remove: ServiceMethod - list: ServiceMethod + add: ServiceMethod + remove: ServiceMethod + list: ServiceMethod get: { 0: { - 1: ServiceMethod + 1: ServiceMethod } } } index: { - add: ServiceMethod + add: ServiceMethod } } store: { diff --git a/packages/upload-client/test/blob.test.js b/packages/upload-client/test/blob.test.js index 39d30440f..48d66a4cc 100644 --- a/packages/upload-client/test/blob.test.js +++ b/packages/upload-client/test/blob.test.js @@ -6,10 +6,10 @@ import { provide } from '@ucanto/server' import * as CAR from '@ucanto/transport/car' import * as Signer from '@ucanto/principal/ed25519' import * as UCAN from '@storacha/capabilities/ucan' -import * as BlobCapabilities from '@storacha/capabilities/blob' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' import * as Blob from '../src/blob/index.js' import { serviceSigner } from './fixtures.js' -import { randomBytes } from './helpers/random.js' +import { randomBlock, randomBytes } from './helpers/random.js' import { mockService } from './helpers/mocks.js' import { validateAuthorization, @@ -688,6 +688,7 @@ describe('Blob.list', () => { digest: bytesHash.bytes, size: 123, }, + cause: (await randomBlock(32)).cid, insertedAt: '1970-01-01T00:00:00.000Z', }, ], @@ -767,6 +768,7 @@ describe('Blob.list', () => { digest: bytesHash[0].bytes, size: 123, }, + cause: (await randomBlock(32)).cid, insertedAt: '1970-01-01T00:00:00.000Z', }, ], @@ -779,6 +781,7 @@ describe('Blob.list', () => { digest: bytesHash[1].bytes, size: 123, }, + cause: (await randomBlock(32)).cid, insertedAt: '1970-01-01T00:00:00.000Z', }, ], @@ -1037,6 +1040,7 @@ describe('Blob.get', () => { ok: { cause: invocation.link(), blob: { digest: bytesHash.bytes, size: bytes.length }, + insertedAt: '1970-01-01T00:00:00.000Z', }, } }), diff --git a/packages/upload-client/test/dag-index.test.js b/packages/upload-client/test/dag-index.test.js index 867136ad4..88dace38c 100644 --- a/packages/upload-client/test/dag-index.test.js +++ b/packages/upload-client/test/dag-index.test.js @@ -3,7 +3,7 @@ import * as Client from '@ucanto/client' import * as Server from '@ucanto/server' import * as CAR from '@ucanto/transport/car' import * as Signer from '@ucanto/principal/ed25519' -import * as IndexCapabilities from '@storacha/capabilities/index' +import * as IndexCapabilities from '@storacha/capabilities/space/index' import * as Index from '../src/index/index.js' import { serviceSigner } from './fixtures.js' import { randomCAR } from './helpers/random.js' diff --git a/packages/upload-client/test/index.test.js b/packages/upload-client/test/index.test.js index c6282a1b0..7172c13da 100644 --- a/packages/upload-client/test/index.test.js +++ b/packages/upload-client/test/index.test.js @@ -5,8 +5,8 @@ import { provide } from '@ucanto/server' import * as CAR from '@ucanto/transport/car' import * as Signer from '@ucanto/principal/ed25519' import * as UCAN from '@storacha/capabilities/ucan' -import * as BlobCapabilities from '@storacha/capabilities/blob' -import * as IndexCapabilities from '@storacha/capabilities/index' +import * as BlobCapabilities from '@storacha/capabilities/space/blob' +import * as IndexCapabilities from '@storacha/capabilities/space/index' import * as UploadCapabilities from '@storacha/capabilities/upload' import * as StorefrontCapabilities from '@storacha/capabilities/filecoin/storefront' import { Piece } from '@web3-storage/data-segment' @@ -614,7 +614,7 @@ describe('uploadDirectory', () => { ]) function createSimpleMockUploadServer() { /** - * @type {Array>>} + * @type {Array>>} */ const invocations = [] const service = mockService({ @@ -1144,7 +1144,7 @@ describe('uploadCAR', () => { issuer: space, audience: agent, with: space.did(), - nb: /** @type {import('@storacha/capabilities/types').BlobAdd['nb']} */ ( + nb: /** @type {import('@storacha/capabilities/types').SpaceBlobAdd['nb']} */ ( nb ), expiration: Infinity, @@ -1156,7 +1156,7 @@ describe('uploadCAR', () => { issuer: space, audience: agent, with: space.did(), - nb: /** @type {import('@storacha/capabilities/types').IndexAdd['nb']} */ ( + nb: /** @type {import('@storacha/capabilities/types').SpaceIndexAdd['nb']} */ ( nb ), expiration: Infinity, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 862629c15..1e885d414 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 1.4.7 typedoc-plugin-missing-exports: specifier: ^2.1.0 - version: 2.2.0(typedoc@0.25.13(typescript@5.2.2)) + version: 2.3.0(typedoc@0.25.13(typescript@5.2.2)) devDependencies: '@arethetypeswrong/cli': specifier: ^0.15.3 @@ -57,6 +57,12 @@ importers: '@scure/bip39': specifier: ^1.2.1 version: 1.3.0 + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities + '@storacha/did-mailto': + specifier: workspace:^ + version: link:../did-mailto '@storacha/one-webcrypto': specifier: ^1.0.1 version: 1.0.1 @@ -78,12 +84,6 @@ importers: '@ucanto/validator': specifier: ^9.0.2 version: 9.0.2 - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities - '@storacha/did-mailto': - specifier: workspace:^ - version: link:../did-mailto bigint-mod-arith: specifier: ^3.1.2 version: 3.3.1 @@ -103,6 +103,9 @@ importers: specifier: ^4.0.6 version: 4.0.10 devDependencies: + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 version: 1.5.10 @@ -127,9 +130,6 @@ importers: '@ucanto/server': specifier: ^10.0.0 version: 10.0.0 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up assert: specifier: ^2.0.0 version: 2.1.0 @@ -154,6 +154,9 @@ importers: '@ipld/dag-cbor': specifier: ^9.0.6 version: 9.2.0 + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities '@storacha/one-webcrypto': specifier: ^1.0.1 version: 1.0.1 @@ -163,9 +166,6 @@ importers: '@ucanto/interface': specifier: ^10.0.1 version: 10.0.1 - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities carstream: specifier: ^2.1.0 version: 2.1.0 @@ -176,12 +176,12 @@ importers: specifier: ^5.0.3 version: 5.0.3 devDependencies: - '@ucanto/transport': - specifier: ^9.1.1 - version: 9.1.1 '@storacha/eslint-config': specifier: workspace:^ version: link:../eslint-config-w3up + '@ucanto/transport': + specifier: ^9.1.1 + version: 9.1.1 c8: specifier: ^7.14.0 version: 7.14.0 @@ -216,6 +216,9 @@ importers: specifier: ^5.0.3 version: 5.0.3 devDependencies: + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 version: 1.5.10 @@ -225,9 +228,6 @@ importers: '@types/node': specifier: ^20.8.4 version: 20.12.10 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up assert: specifier: ^2.0.0 version: 2.1.0 @@ -249,15 +249,15 @@ importers: packages/did-mailto: devDependencies: + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 version: 1.5.10 '@types/mocha': specifier: ^10.0.1 version: 10.0.6 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up mocha: specifier: ^10.2.0 version: 10.4.0 @@ -269,10 +269,10 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.9.1 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta))(eslint@8.57.0)(typescript@5.7.0-beta) '@typescript-eslint/parser': specifier: ^6.9.1 - version: 6.21.0(eslint@8.57.0)(typescript@5.3.3) + version: 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) eslint: specifier: ^8.56.0 version: 8.57.0 @@ -285,6 +285,9 @@ importers: '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities '@ucanto/client': specifier: ^9.0.1 version: 9.0.1 @@ -300,9 +303,6 @@ importers: '@ucanto/transport': specifier: ^9.1.1 version: 9.1.1 - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities '@web3-storage/content-claims': specifier: ^5.0.0 version: 5.0.0 @@ -316,6 +316,12 @@ importers: specifier: ^6.0.0 version: 6.0.0 devDependencies: + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up + '@storacha/filecoin-client': + specifier: workspace:^ + version: link:../filecoin-client '@storacha/one-webcrypto': specifier: ^1.0.1 version: 1.0.1 @@ -331,12 +337,6 @@ importers: '@web-std/blob': specifier: ^3.0.5 version: 3.0.5 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up - '@storacha/filecoin-client': - specifier: workspace:^ - version: link:../filecoin-client c8: specifier: ^10.1.2 version: 10.1.2 @@ -358,6 +358,9 @@ importers: '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities '@ucanto/client': specifier: ^9.0.1 version: 9.0.1 @@ -370,13 +373,13 @@ importers: '@ucanto/transport': specifier: ^9.1.1 version: 9.1.1 - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities devDependencies: '@ipld/dag-json': specifier: ^10.1.4 version: 10.2.0 + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 version: 1.5.10 @@ -392,9 +395,6 @@ importers: '@web3-storage/data-segment': specifier: ^4.0.0 version: 4.0.0 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up assert: specifier: ^2.0.0 version: 2.1.0 @@ -422,6 +422,21 @@ importers: packages/upload-api: dependencies: + '@storacha/access': + specifier: workspace:^ + version: link:../access-client + '@storacha/blob-index': + specifier: workspace:^ + version: link:../blob-index + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities + '@storacha/did-mailto': + specifier: workspace:^ + version: link:../did-mailto + '@storacha/filecoin-api': + specifier: workspace:^ + version: link:../filecoin-api '@ucanto/client': specifier: ^9.0.1 version: 9.0.1 @@ -440,24 +455,9 @@ importers: '@ucanto/validator': specifier: ^9.0.2 version: 9.0.2 - '@storacha/access': - specifier: workspace:^ - version: link:../access-client - '@storacha/blob-index': - specifier: workspace:^ - version: link:../blob-index - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities '@web3-storage/content-claims': - specifier: ^5.1.0 - version: 5.1.0 - '@storacha/did-mailto': - specifier: workspace:^ - version: link:../did-mailto - '@storacha/filecoin-api': - specifier: workspace:^ - version: link:../filecoin-api + specifier: ^5.1.3 + version: 5.1.3 multiformats: specifier: ^12.1.2 version: 12.1.3 @@ -471,6 +471,9 @@ importers: '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@storacha/one-webcrypto': specifier: ^1.0.1 version: 1.0.1 @@ -483,9 +486,6 @@ importers: '@web-std/blob': specifier: ^3.0.5 version: 3.0.5 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up '@web3-storage/sigv4': specifier: ^1.0.2 version: 1.0.2 @@ -513,6 +513,15 @@ importers: '@ipld/unixfs': specifier: ^2.1.1 version: 2.2.0 + '@storacha/blob-index': + specifier: workspace:^ + version: link:../blob-index + '@storacha/capabilities': + specifier: workspace:^ + version: link:../capabilities + '@storacha/filecoin-client': + specifier: workspace:^ + version: link:../filecoin-client '@ucanto/client': specifier: ^9.0.1 version: 9.0.1 @@ -525,18 +534,9 @@ importers: '@ucanto/transport': specifier: ^9.1.1 version: 9.1.1 - '@storacha/blob-index': - specifier: workspace:^ - version: link:../blob-index - '@storacha/capabilities': - specifier: workspace:^ - version: link:../capabilities '@web3-storage/data-segment': specifier: ^5.1.0 version: 5.1.0 - '@storacha/filecoin-client': - specifier: workspace:^ - version: link:../filecoin-client ipfs-utils: specifier: ^9.0.14 version: 9.0.14(encoding@0.1.13) @@ -550,6 +550,9 @@ importers: specifier: ^6.0.0 version: 6.0.0 devDependencies: + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 version: 1.5.10 @@ -568,9 +571,6 @@ importers: '@web3-storage/content-claims': specifier: ^5.0.0 version: 5.0.0 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up assert: specifier: ^2.0.0 version: 2.1.0 @@ -596,29 +596,14 @@ importers: specifier: ^12.3.4 version: 12.6.1 typescript: - specifier: 5.2.2 - version: 5.2.2 + specifier: 5.6.3 + version: 5.6.3 packages/w3up-client: dependencies: '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 - '@ucanto/client': - specifier: ^9.0.1 - version: 9.0.1 - '@ucanto/core': - specifier: ^10.0.1 - version: 10.0.1 - '@ucanto/interface': - specifier: ^10.0.1 - version: 10.0.1 - '@ucanto/principal': - specifier: ^9.0.1 - version: 9.0.1 - '@ucanto/transport': - specifier: ^9.1.1 - version: 9.1.1 '@storacha/access': specifier: workspace:^ version: link:../access-client @@ -637,6 +622,21 @@ importers: '@storacha/upload-client': specifier: workspace:^ version: link:../upload-client + '@ucanto/client': + specifier: ^9.0.1 + version: 9.0.1 + '@ucanto/core': + specifier: ^10.0.1 + version: 10.0.1 + '@ucanto/interface': + specifier: ^10.0.1 + version: 10.0.1 + '@ucanto/principal': + specifier: ^9.0.1 + version: 9.0.1 + '@ucanto/transport': + specifier: ^9.1.1 + version: 9.1.1 devDependencies: '@ipld/car': specifier: ^5.1.1 @@ -644,6 +644,12 @@ importers: '@ipld/unixfs': specifier: ^2.1.1 version: 2.2.0 + '@storacha/eslint-config': + specifier: workspace:^ + version: link:../eslint-config-w3up + '@storacha/upload-api': + specifier: workspace:^ + version: link:../upload-api '@types/assert': specifier: ^1.5.6 version: 1.5.10 @@ -662,12 +668,6 @@ importers: '@web3-storage/data-segment': specifier: ^5.0.0 version: 5.1.0 - '@storacha/eslint-config': - specifier: workspace:^ - version: link:../eslint-config-w3up - '@storacha/upload-api': - specifier: workspace:^ - version: link:../upload-api assert: specifier: ^2.0.0 version: 2.1.0 @@ -691,10 +691,10 @@ importers: version: 12.6.1 typedoc: specifier: ^0.25.3 - version: 0.25.13(typescript@5.2.2) + version: 0.25.13(typescript@5.6.3) typescript: specifier: ^5.2.2 - version: 5.2.2 + version: 5.6.3 packages: @@ -893,10 +893,18 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.24.5': resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + '@babel/helper-validator-option@7.23.5': resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} engines: {node: '>=6.9.0'} @@ -918,6 +926,11 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} + engines: {node: '>=6.0.0'} + hasBin: true + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5': resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} engines: {node: '>=6.9.0'} @@ -1432,6 +1445,10 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} @@ -1846,6 +1863,9 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -2344,20 +2364,20 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@vue/compiler-core@3.4.27': - resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} + '@vue/compiler-core@3.5.12': + resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} - '@vue/compiler-dom@3.4.27': - resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==} + '@vue/compiler-dom@3.5.12': + resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} - '@vue/compiler-sfc@3.4.27': - resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} + '@vue/compiler-sfc@3.5.12': + resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} - '@vue/compiler-ssr@3.4.27': - resolution: {integrity: sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==} + '@vue/compiler-ssr@3.5.12': + resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} - '@vue/shared@3.4.27': - resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} + '@vue/shared@3.5.12': + resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} '@web-std/blob@3.0.5': resolution: {integrity: sha512-Lm03qr0eT3PoLBuhkvFBLf0EFkAsNz/G/AYCzpOdi483aFaVX86b4iQs0OHhzHJfN5C15q17UtDbyABjlzM96A==} @@ -2371,8 +2391,8 @@ packages: '@web3-storage/content-claims@5.0.0': resolution: {integrity: sha512-HJFRFsR0qHCe0cOERsb3AjAxxzohYMMoIWaGJgrShDycnl6yqXHrGcdua1BWUDu5pmvKzwD9D7VmI8aSfrCcRA==} - '@web3-storage/content-claims@5.1.0': - resolution: {integrity: sha512-3VStFKoeieRpRU7brFjKTsAuAffQzYDIZ8F3Gh0+niw+MgzBK72osW+fftdquT8neWir34Ndu3mBUKKJ3ck1RQ==} + '@web3-storage/content-claims@5.1.3': + resolution: {integrity: sha512-X+Cpm+EmGuEvFyM8oX1NqsBkuSje836B72yuvnVmgd80XPt+McpOhM6ko7rfs9Dx9UmpiZq+998jlvBhg2W5ZA==} '@web3-storage/data-segment@4.0.0': resolution: {integrity: sha512-AnNyJp3wHMa7LBzguQzm4rmXSi8vQBz4uFs+jiXnSNtLR5dAqHfhMvi9XdWonWPYvxNvT5ZhYCSF0mpDjymqKg==} @@ -3516,6 +3536,7 @@ packages: eslint@8.57.0: resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true espree@9.6.1: @@ -4753,8 +4774,8 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - magic-string@0.30.10: - resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + magic-string@0.30.12: + resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} @@ -5072,6 +5093,10 @@ packages: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} @@ -5478,6 +5503,9 @@ packages: picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} @@ -5758,6 +5786,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -6311,6 +6343,10 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.21: resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} @@ -6654,8 +6690,8 @@ packages: peerDependencies: typedoc: '>=0.24.0' - typedoc-plugin-missing-exports@2.2.0: - resolution: {integrity: sha512-2+XR1IcyQ5UwXZVJe9NE6HrLmNufT9i5OwoIuuj79VxuA3eYq+Y6itS9rnNV1D7UeQnUSH8kISYD73gHE5zw+w==} + typedoc-plugin-missing-exports@2.3.0: + resolution: {integrity: sha512-iI9ITNNLlbsLCBBeYDyu0Qqp3GN/9AGyWNKg8bctRXuZEPT7G1L+0+MNWG9MsHcf/BFmNbXL0nQ8mC/tXRicog==} peerDependencies: typedoc: 0.24.x || 0.25.x @@ -6676,8 +6712,18 @@ packages: engines: {node: '>=14.17'} hasBin: true - uglify-js@3.17.4: - resolution: {integrity: sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} + engines: {node: '>=14.17'} + hasBin: true + + typescript@5.7.0-beta: + resolution: {integrity: sha512-opDlmEnzKdl082N5piLS43lsyugg0aORdv+XnNzMv5yP5VtBWuZhFDxU8lizmhW+PEFa/fZiShYRBxKsrkTDMQ==} + engines: {node: '>=14.17'} + hasBin: true + + uglify-js@3.19.3: + resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} hasBin: true @@ -7232,11 +7278,11 @@ snapshots: '@babel/helper-annotate-as-pure@7.22.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-compilation-targets@7.23.6': dependencies: @@ -7290,7 +7336,7 @@ snapshots: '@babel/helper-member-expression-to-functions@7.24.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-module-imports@7.24.3': dependencies: @@ -7307,7 +7353,7 @@ snapshots: '@babel/helper-optimise-call-expression@7.22.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-plugin-utils@7.24.5': {} @@ -7327,11 +7373,11 @@ snapshots: '@babel/helper-simple-access@7.24.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-skip-transparent-expression-wrappers@7.22.5': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helper-split-export-declaration@7.24.5': dependencies: @@ -7339,15 +7385,19 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} + '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-validator-identifier@7.24.5': {} + '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-option@7.23.5': {} '@babel/helper-wrap-function@7.24.5': dependencies: '@babel/helper-function-name': 7.23.0 '@babel/template': 7.24.0 - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 '@babel/helpers@7.24.5': dependencies: @@ -7368,6 +7418,10 @@ snapshots: dependencies: '@babel/types': 7.24.5 + '@babel/parser@7.26.2': + dependencies: + '@babel/types': 7.26.0 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -7989,6 +8043,11 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@colors/colors@1.5.0': @@ -8861,6 +8920,8 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -9086,7 +9147,7 @@ snapshots: '@svgr/hast-util-to-babel-ast@8.0.0': dependencies: - '@babel/types': 7.24.5 + '@babel/types': 7.26.0 entities: 4.5.0 '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': @@ -9334,13 +9395,13 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta))(eslint@8.57.0)(typescript@5.7.0-beta)': dependencies: '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 @@ -9348,22 +9409,22 @@ snapshots: ignore: 5.3.1 natural-compare: 1.4.0 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.7.0-beta) optionalDependencies: - typescript: 5.3.3 + typescript: 5.7.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) '@typescript-eslint/visitor-keys': 6.21.0 debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 optionalDependencies: - typescript: 5.3.3 + typescript: 5.7.0-beta transitivePeerDependencies: - supports-color @@ -9372,21 +9433,21 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) debug: 4.3.4(supports-color@8.1.1) eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.7.0-beta) optionalDependencies: - typescript: 5.3.3 + typescript: 5.7.0-beta transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.0-beta)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 @@ -9395,20 +9456,20 @@ snapshots: is-glob: 4.0.3 minimatch: 9.0.3 semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.3.3) + ts-api-utils: 1.3.0(typescript@5.7.0-beta) optionalDependencies: - typescript: 5.3.3 + typescript: 5.7.0-beta transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) eslint: 8.57.0 semver: 7.6.0 transitivePeerDependencies: @@ -9470,37 +9531,37 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@vue/compiler-core@3.4.27': + '@vue/compiler-core@3.5.12': dependencies: - '@babel/parser': 7.24.5 - '@vue/shared': 3.4.27 + '@babel/parser': 7.26.2 + '@vue/shared': 3.5.12 entities: 4.5.0 estree-walker: 2.0.2 - source-map-js: 1.2.0 + source-map-js: 1.2.1 - '@vue/compiler-dom@3.4.27': + '@vue/compiler-dom@3.5.12': dependencies: - '@vue/compiler-core': 3.4.27 - '@vue/shared': 3.4.27 + '@vue/compiler-core': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/compiler-sfc@3.4.27': + '@vue/compiler-sfc@3.5.12': dependencies: - '@babel/parser': 7.24.5 - '@vue/compiler-core': 3.4.27 - '@vue/compiler-dom': 3.4.27 - '@vue/compiler-ssr': 3.4.27 - '@vue/shared': 3.4.27 + '@babel/parser': 7.26.2 + '@vue/compiler-core': 3.5.12 + '@vue/compiler-dom': 3.5.12 + '@vue/compiler-ssr': 3.5.12 + '@vue/shared': 3.5.12 estree-walker: 2.0.2 - magic-string: 0.30.10 - postcss: 8.4.38 - source-map-js: 1.2.0 + magic-string: 0.30.12 + postcss: 8.4.47 + source-map-js: 1.2.1 - '@vue/compiler-ssr@3.4.27': + '@vue/compiler-ssr@3.5.12': dependencies: - '@vue/compiler-dom': 3.4.27 - '@vue/shared': 3.4.27 + '@vue/compiler-dom': 3.5.12 + '@vue/shared': 3.5.12 - '@vue/shared@3.4.27': {} + '@vue/shared@3.5.12': {} '@web-std/blob@3.0.5': dependencies: @@ -9529,14 +9590,14 @@ snapshots: carstream: 2.1.0 multiformats: 13.1.0 - '@web3-storage/content-claims@5.1.0': + '@web3-storage/content-claims@5.1.3': dependencies: '@ucanto/client': 9.0.1 '@ucanto/interface': 10.0.1 '@ucanto/server': 10.0.0 '@ucanto/transport': 9.1.1 carstream: 2.1.0 - multiformats: 13.1.0 + multiformats: 13.3.0 '@web3-storage/data-segment@4.0.0': dependencies: @@ -10434,12 +10495,12 @@ snapshots: css-tree@2.2.1: dependencies: mdn-data: 2.0.28 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-tree@2.3.1: dependencies: mdn-data: 2.0.30 - source-map-js: 1.2.0 + source-map-js: 1.2.1 css-what@6.1.0: {} @@ -10589,9 +10650,9 @@ snapshots: depcheck@1.4.7: dependencies: - '@babel/parser': 7.24.5 + '@babel/parser': 7.26.2 '@babel/traverse': 7.24.5 - '@vue/compiler-sfc': 3.4.27 + '@vue/compiler-sfc': 3.5.12 callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 @@ -11339,7 +11400,7 @@ snapshots: dependencies: foreground-child: 3.2.1 jackspeak: 3.4.3 - minimatch: 9.0.4 + minimatch: 9.0.5 minipass: 7.1.2 package-json-from-dist: 1.0.0 path-scurry: 1.11.1 @@ -11483,7 +11544,7 @@ snapshots: source-map: 0.6.1 wordwrap: 1.0.0 optionalDependencies: - uglify-js: 3.17.4 + uglify-js: 3.19.3 has-bigints@1.0.2: {} @@ -12330,9 +12391,9 @@ snapshots: lunr@2.3.9: {} - magic-string@0.30.10: + magic-string@0.30.12: dependencies: - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 make-dir@4.0.0: dependencies: @@ -12923,6 +12984,10 @@ snapshots: dependencies: brace-expansion: 2.0.1 + minimatch@9.0.5: + dependencies: + brace-expansion: 2.0.1 + minimist@1.2.8: {} minipass@7.1.2: {} @@ -13327,6 +13392,8 @@ snapshots: picocolors@1.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} pidtree@0.3.1: {} @@ -13609,6 +13676,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postcss@8.4.47: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} premove@4.0.0: {} @@ -14304,6 +14377,8 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.21: dependencies: buffer-from: 1.1.2 @@ -14555,7 +14630,7 @@ snapshots: dependencies: '@istanbuljs/schema': 0.1.3 glob: 10.4.5 - minimatch: 9.0.4 + minimatch: 9.0.5 text-table@0.2.0: {} @@ -14585,9 +14660,9 @@ snapshots: dependencies: matchit: 1.1.0 - ts-api-utils@1.3.0(typescript@5.3.3): + ts-api-utils@1.3.0(typescript@5.7.0-beta): dependencies: - typescript: 5.3.3 + typescript: 5.7.0-beta ts-expose-internals-conditionally@1.0.0-empty.0: {} @@ -14655,7 +14730,7 @@ snapshots: handlebars: 4.7.8 typedoc: 0.25.13(typescript@5.2.2) - typedoc-plugin-missing-exports@2.2.0(typedoc@0.25.13(typescript@5.2.2)): + typedoc-plugin-missing-exports@2.3.0(typedoc@0.25.13(typescript@5.2.2)): dependencies: typedoc: 0.25.13(typescript@5.2.2) @@ -14667,11 +14742,23 @@ snapshots: shiki: 0.14.7 typescript: 5.2.2 + typedoc@0.25.13(typescript@5.6.3): + dependencies: + lunr: 2.3.9 + marked: 4.3.0 + minimatch: 9.0.4 + shiki: 0.14.7 + typescript: 5.6.3 + typescript@5.2.2: {} typescript@5.3.3: {} - uglify-js@3.17.4: + typescript@5.6.3: {} + + typescript@5.7.0-beta: {} + + uglify-js@3.19.3: optional: true uint8arraylist@2.4.8: From b179910a3b5259a1da0607340d23669c30e34c9e Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 16:59:32 +0000 Subject: [PATCH 05/12] fix: tests --- packages/capabilities/src/index.js | 5 +++ .../upload-api/test/external-service/index.js | 14 ++++++-- .../test/external-service/storage-node.js | 33 ++++++++++++++----- packages/upload-client/package.json | 2 +- packages/upload-client/test/helpers/utils.js | 7 ++-- packages/w3up-client/package.json | 7 ++-- packages/w3up-client/src/capability/blob.js | 2 +- packages/w3up-client/src/capability/index.js | 2 +- packages/w3up-client/src/client.js | 4 +-- packages/w3up-client/src/types.ts | 22 ++++++------- .../w3up-client/test/capability/blob.test.js | 7 ++-- packages/w3up-client/test/client.test.js | 20 +++-------- packages/w3up-client/test/helpers/result.js | 22 +++++++++++++ pnpm-lock.yaml | 25 +++----------- 14 files changed, 99 insertions(+), 73 deletions(-) create mode 100644 packages/w3up-client/test/helpers/result.js diff --git a/packages/capabilities/src/index.js b/packages/capabilities/src/index.js index 213bf437a..63a82e415 100644 --- a/packages/capabilities/src/index.js +++ b/packages/capabilities/src/index.js @@ -20,6 +20,7 @@ import * as SpaceIndex from './space/index.js' import * as UCAN from './ucan.js' import * as Plan from './plan.js' import * as Usage from './usage.js' +import * as Blob from './blob.js' import * as SpaceBlob from './space/blob.js' import * as W3sBlob from './web3.storage/blob.js' import * as HTTP from './http.js' @@ -47,6 +48,7 @@ export { UCAN, Plan, Usage, + Blob, SpaceBlob, W3sBlob, HTTP, @@ -97,6 +99,9 @@ export const abilitiesAsStrings = [ Plan.createAdminSession.can, Usage.usage.can, Usage.report.can, + Blob.blob.can, + Blob.allocate.can, + Blob.accept.can, SpaceBlob.blob.can, SpaceBlob.add.can, SpaceBlob.remove.can, diff --git a/packages/upload-api/test/external-service/index.js b/packages/upload-api/test/external-service/index.js index 39b20aa21..89b3b3191 100644 --- a/packages/upload-api/test/external-service/index.js +++ b/packages/upload-api/test/external-service/index.js @@ -23,8 +23,18 @@ export const getExternalServiceImplementations = async (config) => { const claimsService = await ClaimsService.activate(config) const blobRetriever = BlobRetriever.create(claimsService) const storageProviders = await Promise.all([ - StorageNode.activate({ ...config, ...principalResolver, claimsService }), - StorageNode.activate({ ...config, ...principalResolver, claimsService }), + StorageNode.activate({ + ...config, + ...principalResolver, + ...(config.http ? {} : { port: 8989 }), + claimsService + }), + StorageNode.activate({ + ...config, + ...principalResolver, + ...(config.http ? {} : { port: 8990 }), + claimsService + }), ]) const router = Router.create(config.serviceID, storageProviders) return { diff --git a/packages/upload-api/test/external-service/storage-node.js b/packages/upload-api/test/external-service/storage-node.js index 3d9923546..c8d8be3f6 100644 --- a/packages/upload-api/test/external-service/storage-node.js +++ b/packages/upload-api/test/external-service/storage-node.js @@ -13,7 +13,6 @@ import { connect } from '@ucanto/client' import { BlobNotFound } from '../../src/blob/lib.js' export const MaxUploadSize = 127 * (1 << 25) -let nextPort = 8989 /** @param {API.MultihashDigest} digest */ const contentKey = (digest) => { @@ -22,7 +21,7 @@ const contentKey = (digest) => { } export class StorageNode { - /** @param {{ http?: import('http'), claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ + /** @param {{ http?: import('http'), port?: number, claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ static async activate(config) { const id = await ed25519.generate() const content = new Map() @@ -30,6 +29,17 @@ export class StorageNode { /** @type {URL} */ let baseURL + /** @param {API.MultihashDigest} digest */ + const hasContent = async digest => { + if (config.http) { + return content.has(contentKey(digest)) + } + // if no http server, the content should be available at the base URL + // a "public bucket" used in tests. + const res = await fetch(new URL(contentKey(digest), baseURL)) + return res.status === 200 + } + const server = Server.create({ id, codec: CAR.inbound, @@ -37,17 +47,17 @@ export class StorageNode { blob: { allocate: Server.provideAdvanced({ capability: BlobCapabilities.allocate, - handler: ({ capability }) => { + handler: async ({ capability }) => { const digest = Digest.decode(capability.nb.blob.digest) const checksum = base64pad.baseEncode(digest.digest) if (capability.nb.blob.size > MaxUploadSize) { return Server.error(new BlobSizeLimitExceededError(capability.nb.blob.size)) } - const key = contentKey(digest) - if (content.has(key)) { + if (await hasContent(digest)) { return Server.ok({ size: 0 }) } - + + const key = contentKey(digest) const size = allocations.has(key) ? 0 : capability.nb.blob.size allocations.add(key) @@ -65,7 +75,7 @@ export class StorageNode { capability: BlobCapabilities.accept, handler: async ({ capability }) => { const digest = Digest.decode(capability.nb.blob.digest) - if (!content.has(contentKey(digest))) { + if (!(await hasContent(digest))) { return Server.error(new AllocatedMemoryNotWrittenError()) } @@ -91,7 +101,7 @@ export class StorageNode { }) if (!config.http) { - baseURL = new URL(`http://127.0.0.1:${nextPort++}`) + baseURL = new URL(`http://127.0.0.1:${config.port ?? 8989}`) const connection = connect({ id, codec: CAR.outbound, channel: server }) return new StorageNode({ id, content, url: baseURL, connection }) } @@ -151,7 +161,12 @@ export class StorageNode { // otherwise it keep connection lingering response.destroy() }) - await new Promise((resolve) => httpServer.listen(resolve)) + await /** @type {Promise} */ (new Promise((resolve) => { + if (config.port) { + return httpServer.listen(port, resolve) + } + httpServer.listen(resolve) + })) // @ts-ignore - this is actually what it returns on http const { port } = httpServer.address() diff --git a/packages/upload-client/package.json b/packages/upload-client/package.json index 6e9a5a65f..f0736a74c 100644 --- a/packages/upload-client/package.json +++ b/packages/upload-client/package.json @@ -113,7 +113,7 @@ "mocha": "^10.2.0", "npm-run-all": "^4.1.5", "playwright-test": "^12.3.4", - "typescript": "5.6.3" + "typescript": "5.2.2" }, "eslintConfig": { "extends": [ diff --git a/packages/upload-client/test/helpers/utils.js b/packages/upload-client/test/helpers/utils.js index d1be0a5ae..4194d6cee 100644 --- a/packages/upload-client/test/helpers/utils.js +++ b/packages/upload-client/test/helpers/utils.js @@ -4,8 +4,7 @@ import { Receipt } from '@ucanto/core' import { Assert } from '@web3-storage/content-claims/capability' import * as Server from '@ucanto/server' import * as HTTP from '@storacha/capabilities/http' -import * as W3sBlobCapabilities from '@storacha/capabilities/web3.storage/blob' -import { W3sBlob } from '@storacha/capabilities' +import * as BlobCapabilities from '@storacha/capabilities/blob' import { createConcludeInvocation } from '../../src/blob/add.js' import { randomCAR } from './random.js' @@ -119,7 +118,7 @@ const setupBlobAddResponse = async function ( hasAcceptReceipt ) { const blob = invocation.capabilities[0].nb.blob - const blobAllocateTask = await W3sBlob.allocate + const blobAllocateTask = await BlobCapabilities.allocate .invoke({ issuer, audience, @@ -184,7 +183,7 @@ const setupBlobAddResponse = async function ( blobPutReceipt ).delegate() - const blobAcceptTask = await W3sBlobCapabilities.accept + const blobAcceptTask = await BlobCapabilities.accept .invoke({ issuer, audience, diff --git a/packages/w3up-client/package.json b/packages/w3up-client/package.json index 55f07cc50..66d36e95d 100644 --- a/packages/w3up-client/package.json +++ b/packages/w3up-client/package.json @@ -129,10 +129,11 @@ "prepare": "npm run build", "test": "npm-run-all -p -r mock:* test:all", "test:all": "run-s test:node test:browser", - "test:node": "hundreds -r html -r text mocha 'test/**/!(*.browser).test.js' -n experimental-vm-modules -n no-warnings -n stack-trace-limit=1000 -t 10000", + "test:node": "hundreds -r html -r text mocha 'test/**/!(*.browser).test.js' -n experimental-vm-modules -n no-warnings -n stack-trace-limit=1000 -t 10000 --bail", "test:browser": "playwright-test --runner mocha 'test/**/!(*.node).test.js'", "mock": "run-p mock:*", - "mock:bucket-200": "PORT=8989 STATUS=200 node test/helpers/bucket-server.js", + "mock:bucket-0-200": "PORT=8989 STATUS=200 node test/helpers/bucket-server.js", + "mock:bucket-1-200": "PORT=8990 STATUS=200 node test/helpers/bucket-server.js", "mock:receipts-server": "PORT=9201 node test/helpers/receipts-server.js", "coverage": "c8 report -r html && open coverage/index.html", "rc": "npm version prerelease --preid rc", @@ -171,7 +172,7 @@ "npm-run-all": "^4.1.5", "playwright-test": "^12.3.4", "typedoc": "^0.25.3", - "typescript": "^5.2.2" + "typescript": "5.2.2" }, "eslintConfig": { "extends": [ diff --git a/packages/w3up-client/src/capability/blob.js b/packages/w3up-client/src/capability/blob.js index b0cf7a70f..bd35d6f15 100644 --- a/packages/w3up-client/src/capability/blob.js +++ b/packages/w3up-client/src/capability/blob.js @@ -1,5 +1,5 @@ import { Blob } from '@storacha/upload-client' -import { Blob as BlobCapabilities } from '@storacha/capabilities' +import { SpaceBlob as BlobCapabilities } from '@storacha/capabilities' import { sha256 } from 'multiformats/hashes/sha2' import { Base } from '../base.js' diff --git a/packages/w3up-client/src/capability/index.js b/packages/w3up-client/src/capability/index.js index fd922a237..f849d2871 100644 --- a/packages/w3up-client/src/capability/index.js +++ b/packages/w3up-client/src/capability/index.js @@ -1,5 +1,5 @@ import { Index } from '@storacha/upload-client' -import { Index as IndexCapabilities } from '@storacha/capabilities' +import { SpaceIndex as IndexCapabilities } from '@storacha/capabilities' import { Base } from '../base.js' /** diff --git a/packages/w3up-client/src/client.js b/packages/w3up-client/src/client.js index 0c835e89f..40f740ce0 100644 --- a/packages/w3up-client/src/client.js +++ b/packages/w3up-client/src/client.js @@ -5,8 +5,8 @@ import { Receipt, } from '@storacha/upload-client' import { - Blob as BlobCapabilities, - Index as IndexCapabilities, + SpaceBlob as BlobCapabilities, + SpaceIndex as IndexCapabilities, Upload as UploadCapabilities, Filecoin as FilecoinCapabilities, } from '@storacha/capabilities' diff --git a/packages/w3up-client/src/types.ts b/packages/w3up-client/src/types.ts index 400fb5d5b..72a0a96f9 100644 --- a/packages/w3up-client/src/types.ts +++ b/packages/w3up-client/src/types.ts @@ -79,9 +79,9 @@ export type { export type { Abilities, ServiceAbility, - BlobAdd, - BlobList, - BlobRemove, + SpaceBlobAdd, + SpaceBlobList, + SpaceBlobRemove, StoreAdd, StoreList, StoreRemove, @@ -119,14 +119,14 @@ export type { } from '@storacha/access/types' export type { - BlobAddSuccess, - BlobAddFailure, - BlobListSuccess, - BlobListFailure, - BlobRemoveSuccess, - BlobRemoveFailure, - IndexAddSuccess, - IndexAddFailure, + SpaceBlobAddSuccess, + SpaceBlobAddFailure, + SpaceBlobListSuccess, + SpaceBlobListFailure, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure, + SpaceIndexAddSuccess, + SpaceIndexAddFailure, StoreAddSuccess, StoreGetSuccess, StoreGetFailure, diff --git a/packages/w3up-client/test/capability/blob.test.js b/packages/w3up-client/test/capability/blob.test.js index f5bc0f402..80a4c74e0 100644 --- a/packages/w3up-client/test/capability/blob.test.js +++ b/packages/w3up-client/test/capability/blob.test.js @@ -4,11 +4,12 @@ import { randomBytes } from '../helpers/random.js' import { Client } from '../../src/client.js' import * as Test from '../test.js' import { receiptsEndpoint } from '../helpers/utils.js' +import * as Result from '../helpers/result.js' export const BlobClient = Test.withContext({ 'should store a blob': async ( assert, - { connection, provisionsStorage, allocationsStorage } + { connection, provisionsStorage, registry } ) => { const alice = new Client(await AgentData.create(), { // @ts-ignore @@ -38,9 +39,7 @@ export const BlobClient = Test.withContext({ }) // TODO we should check blobsStorage as well - assert.deepEqual(await allocationsStorage.exists(space.did(), digest), { - ok: true, - }) + Result.try(await registry.find(space.did(), digest)) assert.deepEqual(digest.bytes, bytesHash.bytes) }, diff --git a/packages/w3up-client/test/client.test.js b/packages/w3up-client/test/client.test.js index 41ec2b887..cfaee56a2 100644 --- a/packages/w3up-client/test/client.test.js +++ b/packages/w3up-client/test/client.test.js @@ -15,13 +15,14 @@ import { receiptsEndpoint } from './helpers/utils.js' import { Absentee } from '@ucanto/principal' import { DIDMailto } from '../src/capability/access.js' import { confirmConfirmationUrl } from '../../upload-api/test/helpers/utils.js' +import * as Result from './helpers/result.js' /** @type {Test.Suite} */ export const testClient = { uploadFile: Test.withContext({ 'should upload a file to the service': async ( assert, - { connection, provisionsStorage, uploadTable, allocationsStorage } + { connection, provisionsStorage, uploadTable, registry } ) => { const bytes = await randomBytes(128) const file = new Blob([bytes]) @@ -61,13 +62,7 @@ export const testClient = { ok: true, }) - assert.deepEqual( - await allocationsStorage.exists(space.did(), expectedCar.cid.multihash), - { - ok: true, - } - ) - + Result.try(await registry.find(space.did(), expectedCar.cid.multihash)) assert.equal(carCID?.toString(), expectedCar.cid.toString()) assert.equal(dataCID.toString(), expectedCar.roots[0].toString()) }, @@ -144,7 +139,7 @@ export const testClient = { uploadCar: Test.withContext({ 'uploads a CAR file to the service': async ( assert, - { connection, provisionsStorage, uploadTable, allocationsStorage } + { connection, provisionsStorage, uploadTable, registry } ) => { const car = await randomCAR(32) @@ -185,12 +180,7 @@ export const testClient = { return assert.ok(carCID) } - assert.deepEqual( - await allocationsStorage.exists(space.did(), carCID.multihash), - { - ok: true, - } - ) + Result.try(await registry.find(space.did(), carCID.multihash)) }, }), getReceipt: Test.withContext({ diff --git a/packages/w3up-client/test/helpers/result.js b/packages/w3up-client/test/helpers/result.js new file mode 100644 index 000000000..1df360b81 --- /dev/null +++ b/packages/w3up-client/test/helpers/result.js @@ -0,0 +1,22 @@ +export * from '@ucanto/core/result' +import * as API from '@ucanto/interface' + +/** + * Returns contained `ok` if result is and throws `error` if result is not ok. + * + * @template T + * @param {API.Result} result + * @returns {T} + */ +export const unwrap = ({ ok, error }) => { + if (error) { + throw error + } else { + return /** @type {T} */ (ok) + } +} + +/** + * Also expose as `Result.try` which is arguably more clear. + */ +export { unwrap as try } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1e885d414..e1eef02d8 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -596,8 +596,8 @@ importers: specifier: ^12.3.4 version: 12.6.1 typescript: - specifier: 5.6.3 - version: 5.6.3 + specifier: 5.2.2 + version: 5.2.2 packages/w3up-client: dependencies: @@ -691,10 +691,10 @@ importers: version: 12.6.1 typedoc: specifier: ^0.25.3 - version: 0.25.13(typescript@5.6.3) + version: 0.25.13(typescript@5.2.2) typescript: - specifier: ^5.2.2 - version: 5.6.3 + specifier: 5.2.2 + version: 5.2.2 packages: @@ -6712,11 +6712,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.6.3: - resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} - engines: {node: '>=14.17'} - hasBin: true - typescript@5.7.0-beta: resolution: {integrity: sha512-opDlmEnzKdl082N5piLS43lsyugg0aORdv+XnNzMv5yP5VtBWuZhFDxU8lizmhW+PEFa/fZiShYRBxKsrkTDMQ==} engines: {node: '>=14.17'} @@ -14742,20 +14737,10 @@ snapshots: shiki: 0.14.7 typescript: 5.2.2 - typedoc@0.25.13(typescript@5.6.3): - dependencies: - lunr: 2.3.9 - marked: 4.3.0 - minimatch: 9.0.4 - shiki: 0.14.7 - typescript: 5.6.3 - typescript@5.2.2: {} typescript@5.3.3: {} - typescript@5.6.3: {} - typescript@5.7.0-beta: {} uglify-js@3.19.3: From d89a2a1e90100539662831d8d83fe5e43f4f3d5b Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 17:04:24 +0000 Subject: [PATCH 06/12] chor: appease formatter --- packages/access-client/src/types.ts | 2 +- packages/capabilities/src/blob.js | 10 ++-- packages/capabilities/src/types.ts | 8 ++- .../test/capabilities/blob.test.js | 50 +++++++++-------- .../src/aggregator/buffer-reducing.js | 8 ++- .../filecoin-api/src/aggregator/events.js | 2 +- .../test/context/store-implementations.js | 6 +- .../filecoin-api/test/events/aggregator.js | 5 +- packages/upload-api/src/blob/accept.js | 12 ++-- packages/upload-api/src/blob/add.js | 16 ++++-- packages/upload-api/src/index/add.js | 9 ++- packages/upload-api/src/provider-add.js | 4 +- packages/upload-api/src/types.ts | 30 ++++++++-- packages/upload-api/src/types/blob.ts | 17 ++++-- packages/upload-api/src/types/storage.ts | 5 +- packages/upload-api/src/types/usage.ts | 2 +- .../test/external-service/blob-retriever.js | 4 +- .../upload-api/test/external-service/index.js | 8 +-- .../test/external-service/router.js | 19 ++++--- .../test/external-service/storage-node.js | 54 +++++++++--------- packages/upload-api/test/handlers/blob.js | 55 +++++++++++-------- packages/upload-api/test/handlers/store.js | 4 +- packages/upload-api/test/helpers/context.js | 4 +- .../test/storage/blob-registry-tests.js | 5 +- .../upload-api/test/storage/blob-registry.js | 25 ++++++--- .../upload-api/test/storage/usage-storage.js | 6 +- packages/upload-client/src/types.ts | 24 ++++++-- 27 files changed, 244 insertions(+), 150 deletions(-) diff --git a/packages/access-client/src/types.ts b/packages/access-client/src/types.ts index 8b8b15ba5..5adc6c2a1 100644 --- a/packages/access-client/src/types.ts +++ b/packages/access-client/src/types.ts @@ -249,7 +249,7 @@ export type InvokeOptions< Match<{ can: A; with: R & Resource; nb: Caveats }, UnknownMatch> > > = UCANBasicOptions & - Omit, 'can'|'with'> & { + Omit, 'can' | 'with'> & { /** * Resource for the capability, normally a Space DID * Defaults to the current selected Space diff --git a/packages/capabilities/src/blob.js b/packages/capabilities/src/blob.js index d341e0a6c..ea113aab2 100644 --- a/packages/capabilities/src/blob.js +++ b/packages/capabilities/src/blob.js @@ -52,13 +52,12 @@ export const allocate = capability({ /** DID of the user space where the allocation takes place. */ space: SpaceDID, }), - derives: (claimed, delegated) => ( + derives: (claimed, delegated) => and(equalWith(claimed, delegated)) || and(equalBlob(claimed, delegated)) || and(checkLink(claimed.nb.cause, delegated.nb.cause, 'cause')) || and(equal(claimed.nb.space, delegated.nb.space, 'space')) || - ok({}) - ), + ok({}), }) /** @@ -78,12 +77,11 @@ export const accept = capability({ /** This task is blocked on `http/put` receipt available */ _put: Await, }), - derives: (claimed, delegated) => ( + derives: (claimed, delegated) => and(equalWith(claimed, delegated)) || and(equalBlob(claimed, delegated)) || and(equal(claimed.nb.space, delegated.nb.space, 'space')) || - ok({}) - ), + ok({}), }) // ⚠️ We export imports here so they are not omitted in generated typedefs diff --git a/packages/capabilities/src/types.ts b/packages/capabilities/src/types.ts index 227bfbcd1..dca44f00f 100644 --- a/packages/capabilities/src/types.ts +++ b/packages/capabilities/src/types.ts @@ -524,11 +524,15 @@ export type BlobAllocate = InferInvokedCapability export type BlobAccept = InferInvokedCapability export type SpaceBlob = InferInvokedCapability export type SpaceBlobAdd = InferInvokedCapability -export type SpaceBlobRemove = InferInvokedCapability +export type SpaceBlobRemove = InferInvokedCapability< + typeof SpaceBlobCaps.remove +> export type SpaceBlobList = InferInvokedCapability export type SpaceBlobGet = InferInvokedCapability export type W3sBlob = InferInvokedCapability -export type W3sBlobAllocate = InferInvokedCapability +export type W3sBlobAllocate = InferInvokedCapability< + typeof W3sBlobCaps.allocate +> export type W3sBlobAccept = InferInvokedCapability export interface BlobModel { diff --git a/packages/capabilities/test/capabilities/blob.test.js b/packages/capabilities/test/capabilities/blob.test.js index 7b897354d..1cdcb1f3f 100644 --- a/packages/capabilities/test/capabilities/blob.test.js +++ b/packages/capabilities/test/capabilities/blob.test.js @@ -9,7 +9,11 @@ import { mallory as account, bob, } from '../helpers/fixtures.js' -import { createCar, createCborCid, validateAuthorization } from '../helpers/utils.js' +import { + createCar, + createCborCid, + validateAuthorization, +} from '../helpers/utils.js' const top = () => Capability.top.delegate({ @@ -38,10 +42,10 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), - cause: await createCborCid({ now: Date.now() }) + cause: await createCborCid({ now: Date.now() }), }, proofs: [await top()], }) @@ -68,10 +72,10 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), - cause: await createCborCid({ now: Date.now() }) + cause: await createCborCid({ now: Date.now() }), }, proofs: [await blob()], }) @@ -105,10 +109,10 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), - cause: await createCborCid({ now: Date.now() }) + cause: await createCborCid({ now: Date.now() }), }, proofs: [blob], }) @@ -134,7 +138,7 @@ describe('blob capabilities', function () { audience: bob, with: account.did(), nb: { - space: space0.did() + space: space0.did(), }, proofs: [await top()], }) @@ -146,10 +150,10 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space1.did(), - cause: await createCborCid({ now: Date.now() }) + cause: await createCborCid({ now: Date.now() }), }, proofs: [blob], }) @@ -175,12 +179,12 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), _put: { - 'ucan/await': ['.out.ok', await createCborCid('receipt')] - } + 'ucan/await': ['.out.ok', await createCborCid('receipt')], + }, }, proofs: [await top()], }) @@ -207,12 +211,12 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), _put: { - 'ucan/await': ['.out.ok', await createCborCid('receipt')] - } + 'ucan/await': ['.out.ok', await createCborCid('receipt')], + }, }, proofs: [await blob()], }) @@ -246,12 +250,12 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space.did(), _put: { - 'ucan/await': ['.out.ok', await createCborCid('receipt')] - } + 'ucan/await': ['.out.ok', await createCborCid('receipt')], + }, }, proofs: [blob], }) @@ -277,7 +281,7 @@ describe('blob capabilities', function () { audience: bob, with: account.did(), nb: { - space: space0.did() + space: space0.did(), }, proofs: [await top()], }) @@ -289,12 +293,12 @@ describe('blob capabilities', function () { nb: { blob: { digest: car.cid.multihash.bytes, - size: car.bytes.length + size: car.bytes.length, }, space: space1.did(), _put: { - 'ucan/await': ['.out.ok', await createCborCid('receipt')] - } + 'ucan/await': ['.out.ok', await createCborCid('receipt')], + }, }, proofs: [blob], }) diff --git a/packages/filecoin-api/src/aggregator/buffer-reducing.js b/packages/filecoin-api/src/aggregator/buffer-reducing.js index ce695ebcd..549c5bcad 100644 --- a/packages/filecoin-api/src/aggregator/buffer-reducing.js +++ b/packages/filecoin-api/src/aggregator/buffer-reducing.js @@ -208,13 +208,17 @@ export function aggregatePieces(bufferedPieces, config) { builder.offset * BigInt(NODE_SIZE) + BigInt(builder.limit) * BigInt(Index.EntrySize) - console.log(`Used ${totalUsedSpace} bytes in ${addedBufferedPieces.length} pieces (min ${config.minAggregateSize} bytes)`) + console.log( + `Used ${totalUsedSpace} bytes in ${addedBufferedPieces.length} pieces (min ${config.minAggregateSize} bytes)` + ) // If not enough space return undefined if (totalUsedSpace < BigInt(config.minAggregateSize)) { // ...but only if not exceeded max aggregate pieces if (addedBufferedPieces.length === config.maxAggregatePieces) { - console.warn(`Building aggregate: max allowed pieces reached (${config.maxAggregatePieces})`) + console.warn( + `Building aggregate: max allowed pieces reached (${config.maxAggregatePieces})` + ) } else { return console.log('Not enough data for aggregate.') } diff --git a/packages/filecoin-api/src/aggregator/events.js b/packages/filecoin-api/src/aggregator/events.js index 63c26b3fe..79e33da12 100644 --- a/packages/filecoin-api/src/aggregator/events.js +++ b/packages/filecoin-api/src/aggregator/events.js @@ -230,7 +230,7 @@ export const handleAggregateInsertToPieceAcceptQueue = async ( const results = await map( pieces, /** @returns {Promise>} */ - async piece => { + async (piece) => { const inclusionProof = aggregateBuilder.resolveProof(piece.link) if (inclusionProof.error) return inclusionProof diff --git a/packages/filecoin-api/test/context/store-implementations.js b/packages/filecoin-api/test/context/store-implementations.js index 078401f20..1cc370bfa 100644 --- a/packages/filecoin-api/test/context/store-implementations.js +++ b/packages/filecoin-api/test/context/store-implementations.js @@ -17,7 +17,9 @@ export const getStoreImplementations = () => ({ queryFn: (items, search, options) => { const results = Array.from(items) .filter((i) => i.insertedAt > (options?.cursor ?? '')) - .filter((i) => search.status ? i.status === search.status : true) + .filter((i) => + search.status ? i.status === search.status : true + ) .sort((a, b) => (a.insertedAt > b.insertedAt ? 1 : -1)) .slice(0, options?.size ?? items.size) return { results, cursor: results.at(-1)?.insertedAt } @@ -208,7 +210,7 @@ export const getStoreImplementations = () => ({ return nItem }, }) - ), + ) ), }, dealTracker: { diff --git a/packages/filecoin-api/test/events/aggregator.js b/packages/filecoin-api/test/events/aggregator.js index a5421cf1e..2b4724789 100644 --- a/packages/filecoin-api/test/events/aggregator.js +++ b/packages/filecoin-api/test/events/aggregator.js @@ -586,7 +586,10 @@ export const test = { })) ) assert.ok(handledMessageRes.ok) - assert.equal(handledMessageRes.ok?.aggregatedPieces, config.maxAggregatePieces) + assert.equal( + handledMessageRes.ok?.aggregatedPieces, + config.maxAggregatePieces + ) await pWaitFor( () => diff --git a/packages/upload-api/src/blob/accept.js b/packages/upload-api/src/blob/accept.js index 45e439240..8f907ff02 100644 --- a/packages/upload-api/src/blob/accept.js +++ b/packages/upload-api/src/blob/accept.js @@ -60,8 +60,8 @@ export const poll = async (context, receipt) => { space: allocate.nb.space, _put: { 'ucan/await': ['.out.ok', receipt.ran.link()], - } - } + }, + }, }), { // ⚠️ We need invocation to be deterministic which is why we use exact @@ -77,17 +77,19 @@ export const poll = async (context, receipt) => { return configure } - const acceptReceipt = await configure.ok.invocation.execute(configure.ok.connection) + const acceptReceipt = await configure.ok.invocation.execute( + configure.ok.connection + ) // record the invocation and the receipt const message = await Message.build({ invocations: [configure.ok.invocation], - receipts: [acceptReceipt] + receipts: [acceptReceipt], }) const messageWrite = await context.agentStore.messages.write({ source: await Transport.outbound.encode(message), data: message, - index: [...AgentMessage.index(message)] + index: [...AgentMessage.index(message)], }) if (messageWrite.error) { return messageWrite diff --git a/packages/upload-api/src/blob/add.js b/packages/upload-api/src/blob/add.js index 7d4679df0..f547f0e94 100644 --- a/packages/upload-api/src/blob/add.js +++ b/packages/upload-api/src/blob/add.js @@ -133,11 +133,13 @@ async function allocate({ context, blob, space, cause }) { size: blob.size, }, space, - cause - } + cause, + }, }) - const configure = await router.configureInvocation(candidate.ok, cap, { expiration: Infinity }) + const configure = await router.configureInvocation(candidate.ok, cap, { + expiration: Infinity, + }) if (configure.error) { return configure } @@ -149,12 +151,12 @@ async function allocate({ context, blob, space, cause }) { // get a http/put receipt in ucan/conclude const message = await Message.build({ invocations: [configure.ok.invocation], - receipts: [receipt] + receipts: [receipt], }) const messageWrite = await context.agentStore.messages.write({ source: await Transport.outbound.encode(message), data: message, - index: [...AgentMessage.index(message)] + index: [...AgentMessage.index(message)], }) if (messageWrite.error) { return messageWrite @@ -280,7 +282,9 @@ async function accept({ context, provider, blob, space, delivery }) { }, }) - const configure = await context.router.configureInvocation(provider, cap, { expiration: Infinity }) + const configure = await context.router.configureInvocation(provider, cap, { + expiration: Infinity, + }) if (configure.error) { return configure } diff --git a/packages/upload-api/src/index/add.js b/packages/upload-api/src/index/add.js index 1046c033f..5bbf4e8e3 100644 --- a/packages/upload-api/src/index/add.js +++ b/packages/upload-api/src/index/add.js @@ -59,7 +59,9 @@ const add = async ({ capability }, context) => { // ensure indexed shards are allocated in the agent's space const shardDigests = [...idxRes.ok.shards.keys()] const shardAllocRes = await Promise.all( - shardDigests.map((s) => assertRegistered(context, space, s, 'ShardNotFound')) + shardDigests.map((s) => + assertRegistered(context, space, s, 'ShardNotFound') + ) ) for (const res of shardAllocRes) { if (res.error) return res @@ -67,7 +69,10 @@ const add = async ({ capability }, context) => { // TODO: randomly validate slices in the index correspond to slices in the blob - const publishRes = await publishIndexClaim(context, { content: idxRes.ok.content, index: idxLink }) + const publishRes = await publishIndexClaim(context, { + content: idxRes.ok.content, + index: idxLink, + }) if (publishRes.error) { return publishRes } diff --git a/packages/upload-api/src/provider-add.js b/packages/upload-api/src/provider-add.js index ae5f7f012..693f31a14 100644 --- a/packages/upload-api/src/provider-add.js +++ b/packages/upload-api/src/provider-add.js @@ -37,9 +37,7 @@ export const add = async ( } } const accountMailtoDID = - /** @type {import('@storacha/did-mailto/types').DidMailto} */ ( - accountDID - ) + /** @type {import('@storacha/did-mailto/types').DidMailto} */ (accountDID) const rateLimitResult = await ensureRateLimitAbove( rateLimits, [mailtoDidToDomain(accountMailtoDID), mailtoDidToEmail(accountMailtoDID)], diff --git a/packages/upload-api/src/types.ts b/packages/upload-api/src/types.ts index 62c2b746c..dc27b85a3 100644 --- a/packages/upload-api/src/types.ts +++ b/packages/upload-api/src/types.ts @@ -194,7 +194,11 @@ export type { SubscriptionsStorage } import { UsageStorage } from './types/usage.js' export type { UsageStorage } import { StorageGetError } from './types/storage.js' -import { Registry as BlobRegistry, Entry as BlobEntry, RoutingService } from './types/blob.js' +import { + Registry as BlobRegistry, + Entry as BlobEntry, + RoutingService, +} from './types/blob.js' export type { BlobRegistry, BlobEntry, RoutingService } import { IndexServiceContext } from './types/index.js' import { ClaimsClientConfig } from './types/content-claims.js' @@ -319,15 +323,31 @@ export interface Service extends StorefrontService { space: { info: ServiceMethod index: { - add: ServiceMethod + add: ServiceMethod< + SpaceIndexAdd, + SpaceIndexAddSuccess, + SpaceIndexAddFailure + > } blob: { add: ServiceMethod - remove: ServiceMethod - list: ServiceMethod + remove: ServiceMethod< + SpaceBlobRemove, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure + > + list: ServiceMethod< + SpaceBlobList, + SpaceBlobListSuccess, + SpaceBlobListFailure + > get: { 0: { - 1: ServiceMethod + 1: ServiceMethod< + SpaceBlobGet, + SpaceBlobGetSuccess, + SpaceBlobGetFailure + > } } } diff --git a/packages/upload-api/src/types/blob.ts b/packages/upload-api/src/types/blob.ts index 85d3530d3..b1dae4d7a 100644 --- a/packages/upload-api/src/types/blob.ts +++ b/packages/upload-api/src/types/blob.ts @@ -83,13 +83,13 @@ export interface BlobService { export interface Configuration extends UCANOptions { /** Connection to the storage node. */ - connection: ConnectionView, + connection: ConnectionView /** Invocation to execute. */ invocation: IssuedInvocationView } /** - * An unavailable proof error is returned when the routing does not have a + * An unavailable proof error is returned when the routing does not have a * valid unexpired and unrevoked proof available. */ export interface ProofUnavailable extends Failure { @@ -113,12 +113,17 @@ export interface RoutingService { * Selects a candidate for blob allocation from the current list of available * storage nodes. */ - selectStorageProvider(digest: MultihashDigest, size: number): - Promise> + selectStorageProvider( + digest: MultihashDigest, + size: number + ): Promise> /** * Returns information required to make an invocation to the requested storage * node. */ - configureInvocation(provider: Principal, capability: C, options?: Omit): - Promise, ProofUnavailable|Failure>> + configureInvocation( + provider: Principal, + capability: C, + options?: Omit + ): Promise, ProofUnavailable | Failure>> } diff --git a/packages/upload-api/src/types/storage.ts b/packages/upload-api/src/types/storage.ts index df766db6f..a252271c4 100644 --- a/packages/upload-api/src/types/storage.ts +++ b/packages/upload-api/src/types/storage.ts @@ -1,8 +1,5 @@ import type { Unit, Result } from '@ucanto/interface' -import { - StorageGetError, - StoragePutError, -} from '@storacha/capabilities/types' +import { StorageGetError, StoragePutError } from '@storacha/capabilities/types' export type { StorageGetError, StoragePutError } diff --git a/packages/upload-api/src/types/usage.ts b/packages/upload-api/src/types/usage.ts index 17862cb1f..6aff2a14e 100644 --- a/packages/upload-api/src/types/usage.ts +++ b/packages/upload-api/src/types/usage.ts @@ -27,6 +27,6 @@ export interface UsageStorage { /** The date and time when the resource was served. */ servedAt: Date, /** Identifier of the invocation that caused the egress traffic. */ - cause: UnknownLink, + cause: UnknownLink ) => Promise> } diff --git a/packages/upload-api/test/external-service/blob-retriever.js b/packages/upload-api/test/external-service/blob-retriever.js index 55f578468..8f5d50e0c 100644 --- a/packages/upload-api/test/external-service/blob-retriever.js +++ b/packages/upload-api/test/external-service/blob-retriever.js @@ -9,7 +9,7 @@ import { BlobNotFound } from '../../src/blob.js' export const create = (claims) => { return { /** @type {API.BlobRetriever['stream']} */ - async stream (digest) { + async stream(digest) { const readResult = await claims.read(digest) if (readResult.error) throw readResult.error for (const claim of readResult.ok) { @@ -20,6 +20,6 @@ export const create = (claims) => { } } return error(new BlobNotFound(digest)) - } + }, } } diff --git a/packages/upload-api/test/external-service/index.js b/packages/upload-api/test/external-service/index.js index 89b3b3191..70339b474 100644 --- a/packages/upload-api/test/external-service/index.js +++ b/packages/upload-api/test/external-service/index.js @@ -14,7 +14,7 @@ export const getExternalServiceImplementations = async (config) => { /** @type {import('@ucanto/interface').PrincipalResolver} */ let principalResolver = {} if (config.serviceID.did().startsWith('did:web')) { - principalResolver.resolveDIDKey = did => + principalResolver.resolveDIDKey = (did) => did === config.serviceID.did() ? ok(config.serviceID.toDIDKey()) : error(new DIDResolutionError(did)) @@ -27,13 +27,13 @@ export const getExternalServiceImplementations = async (config) => { ...config, ...principalResolver, ...(config.http ? {} : { port: 8989 }), - claimsService + claimsService, }), StorageNode.activate({ ...config, ...principalResolver, ...(config.http ? {} : { port: 8990 }), - claimsService + claimsService, }), ]) const router = Router.create(config.serviceID, storageProviders) @@ -41,6 +41,6 @@ export const getExternalServiceImplementations = async (config) => { claimsService, storageProviders, blobRetriever, - router + router, } } diff --git a/packages/upload-api/test/external-service/router.js b/packages/upload-api/test/external-service/router.js index 320aec6da..ee2e15b59 100644 --- a/packages/upload-api/test/external-service/router.js +++ b/packages/upload-api/test/external-service/router.js @@ -16,14 +16,17 @@ const stickySelect = new Map() * @param {import('@ucanto/interface').Signer} serviceID * @param {Array} storageProviders */ -export const create = (serviceID, storageProviders) => +export const create = (serviceID, storageProviders) => /** @type {import('../../src/types/blob.js').RoutingService} */ ({ selectStorageProvider: async (digest) => { // ensure we pick the same provider for a given digest within a test const key = base58btc.encode(digest.bytes) let provider = stickySelect.get(key) - if (provider && !storageProviders.some(p => p.id.did() === provider?.did())) { + if ( + provider && + !storageProviders.some((p) => p.id.did() === provider?.did()) + ) { provider = undefined } if (!provider) { @@ -33,9 +36,11 @@ export const create = (serviceID, storageProviders) => return ok(provider) }, configureInvocation: async (provider, capability, options) => { - const prov = storageProviders.find(p => p.id.did() === provider.did()) + const prov = storageProviders.find((p) => p.id.did() === provider.did()) if (!prov) { - return error(new ProofUnavailableError(`unknown provider: ${provider.did()}`)) + return error( + new ProofUnavailableError(`unknown provider: ${provider.did()}`) + ) } const proof = await Delegation.delegate({ @@ -53,11 +58,11 @@ export const create = (serviceID, storageProviders) => proofs: [proof], }) return ok({ invocation, connection: prov.connection }) - } + }, }) /** @param {number} max */ -const getRandomInt = max => Math.floor(Math.random() * max) +const getRandomInt = (max) => Math.floor(Math.random() * max) export class ProofUnavailableError extends Failure { static name = 'ProofUnavailable' @@ -67,7 +72,7 @@ export class ProofUnavailableError extends Failure { } /** @param {string} [reason] */ - constructor (reason) { + constructor(reason) { super() this.reason = reason } diff --git a/packages/upload-api/test/external-service/storage-node.js b/packages/upload-api/test/external-service/storage-node.js index c8d8be3f6..669507e91 100644 --- a/packages/upload-api/test/external-service/storage-node.js +++ b/packages/upload-api/test/external-service/storage-node.js @@ -30,7 +30,7 @@ export class StorageNode { let baseURL /** @param {API.MultihashDigest} digest */ - const hasContent = async digest => { + const hasContent = async (digest) => { if (config.http) { return content.has(contentKey(digest)) } @@ -51,12 +51,14 @@ export class StorageNode { const digest = Digest.decode(capability.nb.blob.digest) const checksum = base64pad.baseEncode(digest.digest) if (capability.nb.blob.size > MaxUploadSize) { - return Server.error(new BlobSizeLimitExceededError(capability.nb.blob.size)) + return Server.error( + new BlobSizeLimitExceededError(capability.nb.blob.size) + ) } if (await hasContent(digest)) { return Server.ok({ size: 0 }) } - + const key = contentKey(digest) const size = allocations.has(key) ? 0 : capability.nb.blob.size allocations.add(key) @@ -66,10 +68,10 @@ export class StorageNode { address: { url: new URL(contentKey(digest), baseURL).toString(), headers: { 'x-amz-checksum-sha256': checksum }, - expires: 60 * 60 * 24 - } + expires: 60 * 60 * 24, + }, }) - } + }, }), accept: Server.provideAdvanced({ capability: BlobCapabilities.accept, @@ -84,16 +86,16 @@ export class StorageNode { digest, location: /** @type {API.URI} */ - (new URL(contentKey(digest), baseURL).toString()) + (new URL(contentKey(digest), baseURL).toString()), }) if (receipt.out.error) { return receipt.out } return Server.ok({ site: receipt.ran.link() }).fork(receipt.ran) - } - }) - } + }, + }), + }, }), // @ts-expect-error resolveDIDKey: config.resolveDIDKey, @@ -161,19 +163,27 @@ export class StorageNode { // otherwise it keep connection lingering response.destroy() }) - await /** @type {Promise} */ (new Promise((resolve) => { - if (config.port) { - return httpServer.listen(port, resolve) - } - httpServer.listen(resolve) - })) + await /** @type {Promise} */ ( + new Promise((resolve) => { + if (config.port) { + return httpServer.listen(port, resolve) + } + httpServer.listen(resolve) + }) + ) // @ts-ignore - this is actually what it returns on http const { port } = httpServer.address() baseURL = new URL(`http://127.0.0.1:${port}`) const channel = HTTP.open({ url: baseURL, method: 'POST' }) const connection = connect({ id, codec: CAR.outbound, channel }) - return new StorageNode({ id, content, url: baseURL, connection, server: httpServer }) + return new StorageNode({ + id, + content, + url: baseURL, + connection, + server: httpServer, + }) } async deactivate() { @@ -201,13 +211,7 @@ export class StorageNode { * server?: import('http').Server * }} options */ - constructor({ - id, - url, - content, - connection, - server, - }) { + constructor({ id, url, content, connection, server }) { this.id = id this.baseURL = url this.content = content @@ -264,7 +268,7 @@ export class BlobSizeLimitExceededError extends Failure { } /** @param {number} size */ - constructor (size) { + constructor(size) { super() this.size = size } diff --git a/packages/upload-api/test/handlers/blob.js b/packages/upload-api/test/handlers/blob.js index 1ef582bd1..2bda3b980 100644 --- a/packages/upload-api/test/handlers/blob.js +++ b/packages/upload-api/test/handlers/blob.js @@ -148,7 +148,9 @@ export const test = { const firstAllocateTaskLink = firstNext.allocate.task.link() const secondAllocateTaskLink = secondNext.allocate.task.link() - if (firstAllocateTaskLink.toString() !== secondAllocateTaskLink.toString()) { + if ( + firstAllocateTaskLink.toString() !== secondAllocateTaskLink.toString() + ) { console.error('allocate receipts not equal:') console.error(firstNext.allocate.receipt) console.error(secondNext.allocate.receipt) @@ -491,13 +493,16 @@ export const test = { channel: createServer(context), }) - await uploadBlob({ - issuer: alice, - audience: context.id, - with: spaceDid, - proofs: [proof], - connection - }, { digest, bytes: data }) + await uploadBlob( + { + issuer: alice, + audience: context.id, + with: spaceDid, + proofs: [proof], + connection, + }, + { digest, bytes: data } + ) // invoke `blob/remove` const blobRemoveInvocation = BlobCapabilities.remove.invoke({ @@ -584,13 +589,16 @@ export const test = { new Uint8Array([22, 34, 44, 55, 66]), ] for (const datum of data) { - await uploadBlob({ - issuer: alice, - audience: context.id, - with: spaceDid, - proofs: [proof], - connection - }, { digest: await sha256.digest(datum), bytes: datum }) + await uploadBlob( + { + issuer: alice, + audience: context.id, + with: spaceDid, + proofs: [proof], + connection, + }, + { digest: await sha256.digest(datum), bytes: datum } + ) } const blobList = await BlobCapabilities.list @@ -631,13 +639,16 @@ export const test = { ] for (const datum of data) { - await uploadBlob({ - issuer: alice, - audience: context.id, - with: spaceDid, - proofs: [proof], - connection - }, { digest: await sha256.digest(datum), bytes: datum }) + await uploadBlob( + { + issuer: alice, + audience: context.id, + with: spaceDid, + proofs: [proof], + connection, + }, + { digest: await sha256.digest(datum), bytes: datum } + ) } // Get list with page size 1 (two pages) diff --git a/packages/upload-api/test/handlers/store.js b/packages/upload-api/test/handlers/store.js index 85072b632..0360d1680 100644 --- a/packages/upload-api/test/handlers/store.js +++ b/packages/upload-api/test/handlers/store.js @@ -405,7 +405,9 @@ export const test = { assert.equal(storeAdd.out.error?.message.includes('no storage'), true) // Register space and retry - const account = Absentee.from({ id: 'did:mailto:test.storacha.network:alice' }) + const account = Absentee.from({ + id: 'did:mailto:test.storacha.network:alice', + }) const providerAdd = await provisionProvider({ service: /** @type {API.Signer>} */ (context.signer), agent: alice, diff --git a/packages/upload-api/test/helpers/context.js b/packages/upload-api/test/helpers/context.js index f3d7dbe14..f6c5b177b 100644 --- a/packages/upload-api/test/helpers/context.js +++ b/packages/upload-api/test/helpers/context.js @@ -51,7 +51,7 @@ export const createContext = async ( const externalServices = await getExternalServiceImplementations({ ...options, - serviceID: id + serviceID: id, }) /** @type { import('../../src/types.js').UcantoServerContext } */ @@ -119,5 +119,5 @@ export const cleanupContext = (context) => context.carStoreBucket.deactivate(), context.claimsService.deactivate(), // @ts-expect-error - ...context.storageProviders.map(p => p.deactivate()), + ...context.storageProviders.map((p) => p.deactivate()), ]) diff --git a/packages/upload-api/test/storage/blob-registry-tests.js b/packages/upload-api/test/storage/blob-registry-tests.js index 44dc82357..8742b0f27 100644 --- a/packages/upload-api/test/storage/blob-registry-tests.js +++ b/packages/upload-api/test/storage/blob-registry-tests.js @@ -18,7 +18,10 @@ export const test = { const registration = await registry.register({ space, blob, cause }) assert.ok(registration.ok) }, - 'should register same blob in the same space once': async (assert, context) => { + 'should register same blob in the same space once': async ( + assert, + context + ) => { const { spaceDid: space } = await registerSpace(alice, context) const { registry } = context const data = new Uint8Array([11, 22, 34, 44, 55]) diff --git a/packages/upload-api/test/storage/blob-registry.js b/packages/upload-api/test/storage/blob-registry.js index 4baf922ba..b98bb75b1 100644 --- a/packages/upload-api/test/storage/blob-registry.js +++ b/packages/upload-api/test/storage/blob-registry.js @@ -10,9 +10,9 @@ export class Registry { } /** @type {API.BlobRegistry['register']} */ - async register ({ space, cause, blob }) { + async register({ space, cause, blob }) { const entries = this.data.get(space) ?? [] - if (entries.some(e => equals(e.blob.digest, blob.digest))) { + if (entries.some((e) => equals(e.blob.digest, blob.digest))) { return error(new EntryExists()) } const insertedAt = new Date().toISOString() @@ -21,24 +21,27 @@ export class Registry { } /** @type {API.BlobRegistry['find']} */ - async find (space, digest) { + async find(space, digest) { const entries = this.data.get(space) ?? [] - const entry = entries.find(e => equals(e.blob.digest, digest.bytes)) + const entry = entries.find((e) => equals(e.blob.digest, digest.bytes)) if (!entry) return error(new EntryNotFound()) return ok(entry) } /** @type {API.BlobRegistry['deregister']} */ - async deregister (space, digest) { + async deregister(space, digest) { const entries = this.data.get(space) ?? [] - const entry = entries.find(e => equals(e.blob.digest, digest.bytes)) + const entry = entries.find((e) => equals(e.blob.digest, digest.bytes)) if (!entry) return error(new EntryNotFound()) - this.data.set(space, entries.filter(e => e !== entry)) + this.data.set( + space, + entries.filter((e) => e !== entry) + ) return ok({}) } /** @type {API.BlobRegistry['entries']} */ - async entries (space, options) { + async entries(space, options) { const entries = this.data.get(space) ?? [] const { cursor = '0', size = entries.length } = options ?? {} const offset = parseInt(cursor, 10) @@ -57,7 +60,11 @@ export class Registry { const end = last[0] || 0 const values = matches.map(([_, item]) => item) - const [before, after, results] = [`${start + offset}`, `${end + 1 + offset}`, values] + const [before, after, results] = [ + `${start + offset}`, + `${end + 1 + offset}`, + values, + ] return ok({ size: values.length, diff --git a/packages/upload-api/test/storage/usage-storage.js b/packages/upload-api/test/storage/usage-storage.js index 939a0d98c..740521a97 100644 --- a/packages/upload-api/test/storage/usage-storage.js +++ b/packages/upload-api/test/storage/usage-storage.js @@ -21,9 +21,9 @@ export class UsageStorage { ...item, cause: item.invocation, })), - ...[...this.blobRegistry.data.entries()].flatMap(([space, entries]) => ( - entries.map(e => ({ space, size: e.blob.size, ...e })) - )), + ...[...this.blobRegistry.data.entries()].flatMap(([space, entries]) => + entries.map((e) => ({ space, size: e.blob.size, ...e })) + ), ] } diff --git a/packages/upload-client/src/types.ts b/packages/upload-client/src/types.ts index 878067044..54fedca02 100644 --- a/packages/upload-client/src/types.ts +++ b/packages/upload-client/src/types.ts @@ -169,16 +169,32 @@ export interface Service extends StorefrontService { space: { blob: { add: ServiceMethod - remove: ServiceMethod - list: ServiceMethod + remove: ServiceMethod< + SpaceBlobRemove, + SpaceBlobRemoveSuccess, + SpaceBlobRemoveFailure + > + list: ServiceMethod< + SpaceBlobList, + SpaceBlobListSuccess, + SpaceBlobListFailure + > get: { 0: { - 1: ServiceMethod + 1: ServiceMethod< + SpaceBlobGet, + SpaceBlobGetSuccess, + SpaceBlobGetFailure + > } } } index: { - add: ServiceMethod + add: ServiceMethod< + SpaceIndexAdd, + SpaceIndexAddSuccess, + SpaceIndexAddFailure + > } } store: { From 6a4d1f37d3a8636b20258bfdf2408f8061f6a8ab Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 17:35:15 +0000 Subject: [PATCH 07/12] chore: lockfile update --- pnpm-lock.yaml | 5739 +++++++++++++++++++++++++----------------------- 1 file changed, 2952 insertions(+), 2787 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e1eef02d8..9b44ef852 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,13 +17,13 @@ importers: devDependencies: '@arethetypeswrong/cli': specifier: ^0.15.3 - version: 0.15.3 + version: 0.15.4 '@docusaurus/core': specifier: ^3.0.0 - version: 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + version: 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) '@docusaurus/preset-classic': specifier: ^3.0.0 - version: 3.3.2(@algolia/client-search@4.23.3)(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.2.2) + version: 3.6.0(@algolia/client-search@5.12.0)(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.2.2) docusaurus-plugin-typedoc: specifier: ^0.21.0 version: 0.21.0(typedoc-plugin-markdown@3.17.1(typedoc@0.25.13(typescript@5.2.2)))(typedoc@0.25.13(typescript@5.2.2)) @@ -50,13 +50,13 @@ importers: dependencies: '@ipld/car': specifier: ^5.1.1 - version: 5.3.0 + version: 5.3.3 '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 '@scure/bip39': specifier: ^1.2.1 - version: 1.3.0 + version: 1.4.0 '@storacha/capabilities': specifier: workspace:^ version: link:../capabilities @@ -98,7 +98,7 @@ importers: version: 4.0.1 type-fest: specifier: ^4.9.0 - version: 4.18.2 + version: 4.26.1 uint8arrays: specifier: ^4.0.6 version: 4.0.10 @@ -108,16 +108,16 @@ importers: version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/inquirer': specifier: ^9.0.4 version: 9.0.7 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@types/node': specifier: ^20.8.4 - version: 20.12.10 + version: 20.17.6 '@types/sinon': specifier: ^10.0.19 version: 10.0.20 @@ -126,7 +126,7 @@ importers: version: 6.0.3 '@types/ws': specifier: ^8.5.4 - version: 8.5.10 + version: 8.5.13 '@ucanto/server': specifier: ^10.0.0 version: 10.0.0 @@ -135,7 +135,7 @@ importers: version: 2.1.0 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 playwright-test: specifier: ^12.3.4 version: 12.6.1 @@ -153,7 +153,7 @@ importers: dependencies: '@ipld/dag-cbor': specifier: ^9.0.6 - version: 9.2.0 + version: 9.2.2 '@storacha/capabilities': specifier: workspace:^ version: link:../capabilities @@ -168,13 +168,13 @@ importers: version: 10.0.1 carstream: specifier: ^2.1.0 - version: 2.1.0 + version: 2.2.0 multiformats: specifier: ^13.0.1 - version: 13.1.0 + version: 13.3.1 uint8arrays: specifier: ^5.0.3 - version: 5.0.3 + version: 5.1.0 devDependencies: '@storacha/eslint-config': specifier: workspace:^ @@ -211,29 +211,29 @@ importers: version: 9.0.2 '@web3-storage/data-segment': specifier: ^5.2.0 - version: 5.2.0 + version: 5.3.0 uint8arrays: specifier: ^5.0.3 - version: 5.0.3 + version: 5.1.0 devDependencies: '@storacha/eslint-config': specifier: workspace:^ version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.0 - version: 10.0.6 + version: 10.0.9 '@types/node': specifier: ^20.8.4 - version: 20.12.10 + version: 20.17.6 assert: specifier: ^2.0.0 version: 2.1.0 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 playwright-test: specifier: ^12.3.4 version: 12.6.1 @@ -254,13 +254,13 @@ importers: version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 typescript: specifier: 5.2.2 version: 5.2.2 @@ -269,16 +269,16 @@ importers: dependencies: '@typescript-eslint/eslint-plugin': specifier: ^6.9.1 - version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta))(eslint@8.57.0)(typescript@5.7.0-beta) + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.3.3))(eslint@8.57.1)(typescript@5.3.3) '@typescript-eslint/parser': specifier: ^6.9.1 - version: 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) + version: 6.21.0(eslint@8.57.1)(typescript@5.3.3) eslint: specifier: ^8.56.0 - version: 8.57.0 + version: 8.57.1 eslint-plugin-jsdoc: specifier: ^46.8.2 - version: 46.10.1(eslint@8.57.0) + version: 46.10.1(eslint@8.57.1) packages/filecoin-api: dependencies: @@ -305,10 +305,10 @@ importers: version: 9.1.1 '@web3-storage/content-claims': specifier: ^5.0.0 - version: 5.0.0 + version: 5.1.3 '@web3-storage/data-segment': specifier: ^5.2.0 - version: 5.2.0 + version: 5.3.0 fr32-sha2-256-trunc254-padded-binary-tree-multihash: specifier: ^3.3.0 version: 3.3.0 @@ -327,10 +327,10 @@ importers: version: 1.0.1 '@types/assert': specifier: ^1.5.10 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@ucanto/principal': specifier: ^9.0.1 version: 9.0.1 @@ -342,7 +342,7 @@ importers: version: 10.1.2 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 multiformats: specifier: ^12.1.2 version: 12.1.3 @@ -376,16 +376,16 @@ importers: devDependencies: '@ipld/dag-json': specifier: ^10.1.4 - version: 10.2.0 + version: 10.2.3 '@storacha/eslint-config': specifier: workspace:^ version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@ucanto/principal': specifier: ^9.0.1 version: 9.0.1 @@ -406,7 +406,7 @@ importers: version: 0.0.9 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 multiformats: specifier: ^12.1.2 version: 12.1.3 @@ -463,11 +463,11 @@ importers: version: 12.1.3 uint8arrays: specifier: ^5.0.3 - version: 5.0.3 + version: 5.1.0 devDependencies: '@ipld/car': specifier: ^5.1.1 - version: 5.3.0 + version: 5.3.3 '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 @@ -479,7 +479,7 @@ importers: version: 1.0.1 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@ucanto/core': specifier: ^10.0.1 version: 10.0.1 @@ -494,7 +494,7 @@ importers: version: 0.1.1 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 typescript: specifier: 5.2.2 version: 5.2.2 @@ -503,10 +503,10 @@ importers: dependencies: '@ipld/car': specifier: ^5.2.2 - version: 5.3.0 + version: 5.3.3 '@ipld/dag-cbor': specifier: ^9.0.6 - version: 9.2.0 + version: 9.2.2 '@ipld/dag-ucan': specifier: ^3.4.0 version: 3.4.0 @@ -536,7 +536,7 @@ importers: version: 9.1.1 '@web3-storage/data-segment': specifier: ^5.1.0 - version: 5.1.0 + version: 5.3.0 ipfs-utils: specifier: ^9.0.14 version: 9.0.14(encoding@0.1.13) @@ -555,10 +555,10 @@ importers: version: link:../eslint-config-w3up '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@types/varint': specifier: ^6.0.1 version: 6.0.3 @@ -570,7 +570,7 @@ importers: version: 10.0.0 '@web3-storage/content-claims': specifier: ^5.0.0 - version: 5.0.0 + version: 5.1.3 assert: specifier: ^2.0.0 version: 2.1.0 @@ -588,7 +588,7 @@ importers: version: 10.0.1 mocha: specifier: ^10.2.0 - version: 10.4.0 + version: 10.8.2 npm-run-all: specifier: ^4.1.5 version: 4.1.5 @@ -640,7 +640,7 @@ importers: devDependencies: '@ipld/car': specifier: ^5.1.1 - version: 5.3.0 + version: 5.3.3 '@ipld/unixfs': specifier: ^2.1.1 version: 2.2.0 @@ -652,13 +652,13 @@ importers: version: link:../upload-api '@types/assert': specifier: ^1.5.6 - version: 1.5.10 + version: 1.5.11 '@types/mocha': specifier: ^10.0.1 - version: 10.0.6 + version: 10.0.9 '@types/node': specifier: ^20.8.4 - version: 20.12.10 + version: 20.17.6 '@ucanto/server': specifier: ^10.0.0 version: 10.0.0 @@ -667,7 +667,7 @@ importers: version: 4.0.5 '@web3-storage/data-segment': specifier: ^5.0.0 - version: 5.1.0 + version: 5.3.0 assert: specifier: ^2.0.0 version: 2.1.0 @@ -679,7 +679,7 @@ importers: version: 0.0.9 mocha: specifier: ^10.1.0 - version: 10.4.0 + version: 10.8.2 multiformats: specifier: ^12.1.2 version: 12.1.3 @@ -706,8 +706,14 @@ packages: peerDependencies: search-insights: '>= 1 < 3' - '@algolia/autocomplete-preset-algolia@1.9.3': - resolution: {integrity: sha512-d4qlt6YmrLMYy95n5TB52wtNDr6EgAIPH81dvvvW8UmuWRgxEtY0NJiPwl/h95JtG2vmRM804M0DSwMCNZlzRA==} + '@algolia/autocomplete-preset-algolia@1.17.6': + resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==} + peerDependencies: + '@algolia/client-search': '>= 4.9.1 < 6' + algoliasearch: '>= 4.9.1 < 6' + + '@algolia/autocomplete-shared@1.17.6': + resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==} peerDependencies: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' @@ -718,53 +724,105 @@ packages: '@algolia/client-search': '>= 4.9.1 < 6' algoliasearch: '>= 4.9.1 < 6' - '@algolia/cache-browser-local-storage@4.23.3': - resolution: {integrity: sha512-vRHXYCpPlTDE7i6UOy2xE03zHF2C8MEFjPN2v7fRbqVpcOvAUQK81x3Kc21xyb5aSIpYCjWCZbYZuz8Glyzyyg==} + '@algolia/cache-browser-local-storage@4.24.0': + resolution: {integrity: sha512-t63W9BnoXVrGy9iYHBgObNXqYXM3tYXCjDSHeNwnsc324r4o5UiVKUiAB4THQ5z9U5hTj6qUvwg/Ez43ZD85ww==} + + '@algolia/cache-common@4.24.0': + resolution: {integrity: sha512-emi+v+DmVLpMGhp0V9q9h5CdkURsNmFC+cOS6uK9ndeJm9J4TiqSvPYVu+THUP8P/S08rxf5x2P+p3CfID0Y4g==} + + '@algolia/cache-in-memory@4.24.0': + resolution: {integrity: sha512-gDrt2so19jW26jY3/MkFg5mEypFIPbPoXsQGQWAi6TrCPsNOSEYepBMPlucqWigsmEy/prp5ug2jy/N3PVG/8w==} + + '@algolia/client-abtesting@5.12.0': + resolution: {integrity: sha512-hx4eVydkm3yrFCFxmcBtSzI/ykt0cZ6sDWch+v3JTgKpD2WtosMJU3Upv1AjQ4B6COSHCOWEX3vfFxW6OoH6aA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-account@4.24.0': + resolution: {integrity: sha512-adcvyJ3KjPZFDybxlqnf+5KgxJtBjwTPTeyG2aOyoJvx0Y8dUQAEOEVOJ/GBxX0WWNbmaSrhDURMhc+QeevDsA==} + + '@algolia/client-analytics@4.24.0': + resolution: {integrity: sha512-y8jOZt1OjwWU4N2qr8G4AxXAzaa8DBvyHTWlHzX/7Me1LX8OayfgHexqrsL4vSBcoMmVw2XnVW9MhL+Y2ZDJXg==} + + '@algolia/client-analytics@5.12.0': + resolution: {integrity: sha512-EpTsSv6IW8maCfXCDIptgT7+mQJj7pImEkcNUnxR8yUKAHzTogTXv9yGm2WXOZFVuwstd2i0sImhQ1Vz8RH/hA==} + engines: {node: '>= 14.0.0'} + + '@algolia/client-common@4.24.0': + resolution: {integrity: sha512-bc2ROsNL6w6rqpl5jj/UywlIYC21TwSSoFHKl01lYirGMW+9Eek6r02Tocg4gZ8HAw3iBvu6XQiM3BEbmEMoiA==} - '@algolia/cache-common@4.23.3': - resolution: {integrity: sha512-h9XcNI6lxYStaw32pHpB1TMm0RuxphF+Ik4o7tcQiodEdpKK+wKufY6QXtba7t3k8eseirEMVB83uFFF3Nu54A==} + '@algolia/client-common@5.12.0': + resolution: {integrity: sha512-od3WmO8qxyfNhKc+K3D17tvun3IMs/xMNmxCG9MiElAkYVbPPTRUYMkRneCpmJyQI0hNx2/EA4kZgzVfQjO86Q==} + engines: {node: '>= 14.0.0'} - '@algolia/cache-in-memory@4.23.3': - resolution: {integrity: sha512-yvpbuUXg/+0rbcagxNT7un0eo3czx2Uf0y4eiR4z4SD7SiptwYTpbuS0IHxcLHG3lq22ukx1T6Kjtk/rT+mqNg==} + '@algolia/client-insights@5.12.0': + resolution: {integrity: sha512-8alajmsYUd+7vfX5lpRNdxqv3Xx9clIHLUItyQK0Z6gwGMbVEFe6YYhgDtwslMAP0y6b0WeJEIZJMLgT7VYpRw==} + engines: {node: '>= 14.0.0'} - '@algolia/client-account@4.23.3': - resolution: {integrity: sha512-hpa6S5d7iQmretHHF40QGq6hz0anWEHGlULcTIT9tbUssWUriN9AUXIFQ8Ei4w9azD0hc1rUok9/DeQQobhQMA==} + '@algolia/client-personalization@4.24.0': + resolution: {integrity: sha512-l5FRFm/yngztweU0HdUzz1rC4yoWCFo3IF+dVIVTfEPg906eZg5BOd1k0K6rZx5JzyyoP4LdmOikfkfGsKVE9w==} - '@algolia/client-analytics@4.23.3': - resolution: {integrity: sha512-LBsEARGS9cj8VkTAVEZphjxTjMVCci+zIIiRhpFun9jGDUlS1XmhCW7CTrnaWeIuCQS/2iPyRqSy1nXPjcBLRA==} + '@algolia/client-personalization@5.12.0': + resolution: {integrity: sha512-bUV9HtfkTBgpoVhxFrMkmVPG03ZN1Rtn51kiaEtukucdk3ggjR9Qu1YUfRSU2lFgxr9qJc8lTxwfvhjCeJRcqw==} + engines: {node: '>= 14.0.0'} - '@algolia/client-common@4.23.3': - resolution: {integrity: sha512-l6EiPxdAlg8CYhroqS5ybfIczsGUIAC47slLPOMDeKSVXYG1n0qGiz4RjAHLw2aD0xzh2EXZ7aRguPfz7UKDKw==} + '@algolia/client-query-suggestions@5.12.0': + resolution: {integrity: sha512-Q5CszzGWfxbIDs9DJ/QJsL7bP6h+lJMg27KxieEnI9KGCu0Jt5iFA3GkREkgRZxRdzlHbZKkrIzhtHVbSHw/rg==} + engines: {node: '>= 14.0.0'} - '@algolia/client-personalization@4.23.3': - resolution: {integrity: sha512-3E3yF3Ocr1tB/xOZiuC3doHQBQ2zu2MPTYZ0d4lpfWads2WTKG7ZzmGnsHmm63RflvDeLK/UVx7j2b3QuwKQ2g==} + '@algolia/client-search@4.24.0': + resolution: {integrity: sha512-uRW6EpNapmLAD0mW47OXqTP8eiIx5F6qN9/x/7HHO6owL3N1IXqydGwW5nhDFBrV+ldouro2W1VX3XlcUXEFCA==} - '@algolia/client-search@4.23.3': - resolution: {integrity: sha512-P4VAKFHqU0wx9O+q29Q8YVuaowaZ5EM77rxfmGnkHUJggh28useXQdopokgwMeYw2XUht49WX5RcTQ40rZIabw==} + '@algolia/client-search@5.12.0': + resolution: {integrity: sha512-R3qzEytgVLHOGNri+bpta6NtTt7YtkvUe/QBcAmMDjW4Jk1P0eBYIPfvnzIPbINRsLxIq9fZs9uAYBgsrts4Zg==} + engines: {node: '>= 14.0.0'} '@algolia/events@4.0.1': resolution: {integrity: sha512-FQzvOCgoFXAbf5Y6mYozw2aj5KCJoA3m4heImceldzPSMbdyS4atVjJzXKMsfX3wnZTFYwkkt8/z8UesLHlSBQ==} - '@algolia/logger-common@4.23.3': - resolution: {integrity: sha512-y9kBtmJwiZ9ZZ+1Ek66P0M68mHQzKRxkW5kAAXYN/rdzgDN0d2COsViEFufxJ0pb45K4FRcfC7+33YB4BLrZ+g==} + '@algolia/ingestion@1.12.0': + resolution: {integrity: sha512-zpHo6qhR22tL8FsdSI4DvEraPDi/019HmMrCFB/TUX98yzh5ooAU7sNW0qPL1I7+S++VbBmNzJOEU9VI8tEC8A==} + engines: {node: '>= 14.0.0'} + + '@algolia/logger-common@4.24.0': + resolution: {integrity: sha512-LLUNjkahj9KtKYrQhFKCzMx0BY3RnNP4FEtO+sBybCjJ73E8jNdaKJ/Dd8A/VA4imVHP5tADZ8pn5B8Ga/wTMA==} + + '@algolia/logger-console@4.24.0': + resolution: {integrity: sha512-X4C8IoHgHfiUROfoRCV+lzSy+LHMgkoEEU1BbKcsfnV0i0S20zyy0NLww9dwVHUWNfPPxdMU+/wKmLGYf96yTg==} + + '@algolia/monitoring@1.12.0': + resolution: {integrity: sha512-i2AJZED/zf4uhxezAJUhMKoL5QoepCBp2ynOYol0N76+TSoohaMADdPnWCqOULF4RzOwrG8wWynAwBlXsAI1RQ==} + engines: {node: '>= 14.0.0'} + + '@algolia/recommend@4.24.0': + resolution: {integrity: sha512-P9kcgerfVBpfYHDfVZDvvdJv0lEoCvzNlOy2nykyt5bK8TyieYyiD0lguIJdRZZYGre03WIAFf14pgE+V+IBlw==} + + '@algolia/recommend@5.12.0': + resolution: {integrity: sha512-0jmZyKvYnB/Bj5c7WKsKedOUjnr0UtXm0LVFUdQrxXfqOqvWv9n6Vpr65UjdYG4Q49kRQxhlwtal9WJYrYymXg==} + engines: {node: '>= 14.0.0'} + + '@algolia/requester-browser-xhr@4.24.0': + resolution: {integrity: sha512-Z2NxZMb6+nVXSjF13YpjYTdvV3032YTBSGm2vnYvYPA6mMxzM3v5rsCiSspndn9rzIW4Qp1lPHBvuoKJV6jnAA==} - '@algolia/logger-console@4.23.3': - resolution: {integrity: sha512-8xoiseoWDKuCVnWP8jHthgaeobDLolh00KJAdMe9XPrWPuf1by732jSpgy2BlsLTaT9m32pHI8CRfrOqQzHv3A==} + '@algolia/requester-browser-xhr@5.12.0': + resolution: {integrity: sha512-KxwleraFuVoEGCoeW6Y1RAEbgBMS7SavqeyzWdtkJc6mXeCOJXn1iZitb8Tyn2FcpMNUKlSm0adrUTt7G47+Ow==} + engines: {node: '>= 14.0.0'} - '@algolia/recommend@4.23.3': - resolution: {integrity: sha512-9fK4nXZF0bFkdcLBRDexsnGzVmu4TSYZqxdpgBW2tEyfuSSY54D4qSRkLmNkrrz4YFvdh2GM1gA8vSsnZPR73w==} + '@algolia/requester-common@4.24.0': + resolution: {integrity: sha512-k3CXJ2OVnvgE3HMwcojpvY6d9kgKMPRxs/kVohrwF5WMr2fnqojnycZkxPoEg+bXm8fi5BBfFmOqgYztRtHsQA==} - '@algolia/requester-browser-xhr@4.23.3': - resolution: {integrity: sha512-jDWGIQ96BhXbmONAQsasIpTYWslyjkiGu0Quydjlowe+ciqySpiDUrJHERIRfELE5+wFc7hc1Q5hqjGoV7yghw==} + '@algolia/requester-fetch@5.12.0': + resolution: {integrity: sha512-FuDZXUGU1pAg2HCnrt8+q1VGHKChV/LhvjvZlLOT7e56GJie6p+EuLu4/hMKPOVuQQ8XXtrTHKIU3Lw+7O5/bQ==} + engines: {node: '>= 14.0.0'} - '@algolia/requester-common@4.23.3': - resolution: {integrity: sha512-xloIdr/bedtYEGcXCiF2muajyvRhwop4cMZo+K2qzNht0CMzlRkm8YsDdj5IaBhshqfgmBb3rTg4sL4/PpvLYw==} + '@algolia/requester-node-http@4.24.0': + resolution: {integrity: sha512-JF18yTjNOVYvU/L3UosRcvbPMGT9B+/GQWNWnenIImglzNVGpyzChkXLnrSf6uxwVNO6ESGu6oN8MqcGQcjQJw==} - '@algolia/requester-node-http@4.23.3': - resolution: {integrity: sha512-zgu++8Uj03IWDEJM3fuNl34s746JnZOWn1Uz5taV1dFyJhVM/kTNw9Ik7YJWiUNHJQXcaD8IXD1eCb0nq/aByA==} + '@algolia/requester-node-http@5.12.0': + resolution: {integrity: sha512-ncDDY7CxZhMs6LIoPl+vHFQceIBhYPY5EfuGF1V7beO0U38xfsCYEyutEFB2kRzf4D9Gqppn3iWX71sNtrKcuw==} + engines: {node: '>= 14.0.0'} - '@algolia/transporter@4.23.3': - resolution: {integrity: sha512-Wjl5gttqnf/gQKJA+dafnD0Y6Yw97yvfY8R9h0dQltX1GXTgNs1zWgvtWW0tHl1EgMdhAyw189uWiZMnL3QebQ==} + '@algolia/transporter@4.24.0': + resolution: {integrity: sha512-86nI7w6NzWxd1Zp9q3413dRshDqAzSbsQjhcDhPIatEFiZrL1/TjnHL8S7jVKFePlIMzDsZWXAXwXzcok9c5oA==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} @@ -773,8 +831,8 @@ packages: '@andrewbranch/untar.js@1.0.3': resolution: {integrity: sha512-Jh15/qVmrLGhkKJBdXlK1+9tY4lZruYjsgkDFj08ZmDiWVBLJcqkok7Z0/R0In+i1rScBpJlSvrTS2Lm41Pbnw==} - '@arethetypeswrong/cli@0.15.3': - resolution: {integrity: sha512-sIMA9ZJBWDEg1+xt5RkAEflZuf8+PO8SdKj17x6PtETuUho+qlZJg4DgmKc3q+QwQ9zOB5VLK6jVRbFdNLdUIA==} + '@arethetypeswrong/cli@0.15.4': + resolution: {integrity: sha512-YDbImAi1MGkouT7f2yAECpUMFhhA1J0EaXzIqoC5GGtK0xDgauLtcsZezm8tNq7d3wOFXH7OnY+IORYcG212rw==} engines: {node: '>=18'} hasBin: true @@ -786,42 +844,42 @@ packages: resolution: {integrity: sha512-UQFQ6SgyJ6LX42W8rHCs8KVc0JS0tzVL9ct4XYedJukskYVWTo49tNiMEK9C2HTyarbNiT/RVIRSY82vH+6sTg==} engines: {node: '>=4'} - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.4': - resolution: {integrity: sha512-vg8Gih2MLK+kOkHJp4gBEIkyaIi00jgWot2D9QOmmfLC8jINSOzmCLta6Bvz/JSBCqnegV0L80jhxkol5GWNfQ==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.5': - resolution: {integrity: sha512-tVQRucExLQ02Boi4vdPp49svNGcfL2GhdTCT9aldhXgCJVAI21EtRfBettiuLUwce/7r6bFdgs6JFkcdTiFttA==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.5': - resolution: {integrity: sha512-x32i4hEXvr+iI0NEoEfDKzlemF8AmtOP8CcrRaEcpzysWuoEb1KknpcvMsHKPONoKZiDuItklgWhB18xEhr9PA==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': - resolution: {integrity: sha512-QkBXwGgaoC2GtGZRoma6kv7Szfv06khvhFav67ZExau2RaXzy8MpHSMO2PNoP2XtmQphJQRHFfg77Bq731Yizw==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.23.6': - resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.5': - resolution: {integrity: sha512-uRc4Cv8UQWnE4NXlYTIIdM7wfFkOqlFztcC/gVXDKohKoVB3OyonfelUBaJzSwpBntZ2KYGF/9S7asCHsXwW6g==} + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.22.15': - resolution: {integrity: sha512-29FkPLFjn4TPEa3RE7GpW+qbE8tlsu3jntNYNfcGsc49LphF1PQIiD+vMZ1z1xVOKt+93khA9tc2JBs3kBjA7w==} + '@babel/helper-create-regexp-features-plugin@7.25.9': + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -831,126 +889,99 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-member-expression-to-functions@7.24.5': - resolution: {integrity: sha512-4owRteeihKWKamtqg4JmWSsEZU445xpFRXPEwp44HbgbxdWlUV1b4Agg4lkA806Lil5XM/e+FJyS0vj5T6vmcA==} + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.24.5': - resolution: {integrity: sha512-9GxeY8c2d2mdQUP1Dye0ks3VDyIMS98kt/llQ2nUId8IsWqTF0l1LkSX0/uP7l7MCDrzXS009Hyhe2gzTiGW8A==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.5': - resolution: {integrity: sha512-xjNLDopRzW2o6ba0gKbkZq5YWEBaK3PCyTOY1K2P/O07LGMhMqlMXPxwN4S5/RhWuCobT8z0jrlKGlYmeR1OhQ==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.22.20': - resolution: {integrity: sha512-pBGyV4uBqOns+0UvhsTO8qgl8hO89PmiDYv+/COyp1aeMcmfrfruz+/nCMFiYyFF/Knn0yfrC85ZzNFjembFTw==} + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.1': - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.5': - resolution: {integrity: sha512-uH3Hmf5q5n7n8mz7arjUlDOCbttY/DW4DYhE6FUsjKJ/oYC1kQQUvwEQWxRwUpX9qQKRXeqLwWxrqilMrf32sQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} - engines: {node: '>=6.9.0'} - - '@babel/helper-split-export-declaration@7.24.5': - resolution: {integrity: sha512-5CHncttXohrHk8GWOFCcCl4oRD9fKosWlIRgWm4ql9VYioKm52Mk2xsmoohvm7f3JoiLSM5ZgJuRaf5QZZYd3Q==} + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.1': - resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} '@babel/helper-string-parser@7.25.9': resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.5': - resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} - engines: {node: '>=6.9.0'} - - '@babel/helper-wrap-function@7.24.5': - resolution: {integrity: sha512-/xxzuNvgRl4/HLNKvnFwdhdgN3cpLxgLROeLDl83Yx0AJ1SGvq1ak0OszTOjDfiB8Vx03eJbeDWh9r+jCCWttw==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.5': - resolution: {integrity: sha512-CiQmBMMpMQHwM5m01YnrM6imUG1ebgYJ+fAIW4FZe6m4qHTPaRHti+R8cggAwkdz4oXhtO4/K9JWlh+8hIfR2Q==} + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.5': - resolution: {integrity: sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.5': - resolution: {integrity: sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/parser@7.26.2': resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5': - resolution: {integrity: sha512-LdXRi1wEMTrHVR4Zc9F8OewC3vdm5h4QB6L71zy6StmYeqGi1b3ttIO8UC+BfZKcH9jdr4aI249rBkm+3+YvHw==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1': - resolution: {integrity: sha512-y4HqEnkelJIOQGd+3g1bTeKsA5c6qM7eOn7VggGVbBc0y8MLSKHacwcIE2PplNlQSj0PqS9rrXL/nkPVK+kUNg==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1': - resolution: {integrity: sha512-Hj791Ii4ci8HqnaKHAlLNs+zaLXb0EzSDhiAWp5VNlyvCNymYfacs64pxTxbH1znW/NcArSmwpmG9IKE/TUVVQ==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1': - resolution: {integrity: sha512-m9m/fXsXLiHfwdgydIFnpk+7jlVbnvlK5B2EKiPdLUb6WX654ZaaEWJUjk8TftRbZpK0XibovlLWX4KIZhV6jw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -961,104 +992,31 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-async-generators@7.8.4': - resolution: {integrity: sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-properties@7.12.13': - resolution: {integrity: sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-class-static-block@7.14.5': - resolution: {integrity: sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.24.1': - resolution: {integrity: sha512-IuwnI5XnuF189t91XbxmXeCDz3qs6iDRO7GJ++wcfgeXNs/8FmIlKcpDSXNVyuLQxlwvskmI3Ct73wUODkJBlQ==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-attributes@7.24.1': - resolution: {integrity: sha512-zhQTMH0X2nVLnb04tz+s7AMuasX8U0FnpE+nHTOhSOINjWMnopoZTxtIKsd45n4GQ/HIZLyfIpoul8e2m0DnRA==} - engines: {node: '>=6.9.0'} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-meta@7.10.4': - resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-json-strings@7.8.3': - resolution: {integrity: sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-jsx@7.24.1': - resolution: {integrity: sha512-2eCtxZXf+kbkMIsXS4poTvT4Yu5rXiRa+9xGVT56raghjmBTKMpFNc9R4IDiB4emao9eO22Ox7CxuJG7BgExqA==} + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4': - resolution: {integrity: sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3': - resolution: {integrity: sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-numeric-separator@7.10.4': - resolution: {integrity: sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-object-rest-spread@7.8.3': - resolution: {integrity: sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-catch-binding@7.8.3': - resolution: {integrity: sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-optional-chaining@7.8.3': - resolution: {integrity: sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-private-property-in-object@7.14.5': - resolution: {integrity: sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==} + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-top-level-await@7.14.5': - resolution: {integrity: sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.24.1': - resolution: {integrity: sha512-Yhnmvy5HZEnHUty6i++gcfH1/l68AHnItFHnaCv6hn9dNh0hQvvQJsxpi4BMBFN5DLeHBuucT/0DgzXif/OyRw==} + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1069,338 +1027,350 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.24.1': - resolution: {integrity: sha512-ngT/3NkRhsaep9ck9uj2Xhv9+xB1zShY3tM3g6om4xxCELwCDN4g4Aq5dRn48+0hasAql7s2hdBOysCfNpr4fw==} + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.3': - resolution: {integrity: sha512-Qe26CMYVjpQxJ8zxM1340JFNjZaF+ISWpr1Kt/jGo+ZTUzKkfw/pphEWbRCb+lmSM6k/TOgfYLvmbHkUQ0asIg==} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.1': - resolution: {integrity: sha512-AawPptitRXp1y0n4ilKcGbRYWfbbzFWz2NqNu7dacYDtFtz0CMjG64b3LQsb3KIgnf4/obcUL78hfaOS7iCUfw==} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.1': - resolution: {integrity: sha512-TWWC18OShZutrv9C6mye1xwtam+uNi2bnTOCBUd5sZxyHOiWbU6ztSROofIMrK84uweEZC219POICK/sTYwfgg==} + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.5': - resolution: {integrity: sha512-sMfBc3OxghjC95BkYrYocHL3NaOplrcaunblzwXhGmlPwpmfsxr4vK+mBBt49r+S240vahmv+kUxkeKgs+haCw==} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.1': - resolution: {integrity: sha512-OMLCXi0NqvJfORTaPQBwqLXHhb93wkBKZ4aNwMl6WtehO7ar+cmp+89iPEQPqxAnxsOKTaMcs3POz3rKayJ72g==} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.4': - resolution: {integrity: sha512-B8q7Pz870Hz/q9UgP8InNpY01CSLDSCyqX7zcRuv3FcPl87A2G17lASroHWaCtbdIcbYzOZ7kWmXFKbijMSmFg==} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.5': - resolution: {integrity: sha512-gWkLP25DFj2dwe9Ck8uwMOpko4YsqyfZJrOmqqcegeDYEbp7rmn4U6UQZNj08UF6MaX39XenSpKRCvpDRBtZ7Q==} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.1': - resolution: {integrity: sha512-5pJGVIUfJpOS+pAqBQd+QMaTD2vCL/HcePooON6pDpHgRp4gNRmzyHTPIkXntwKsq3ayUFVfJaIKPw2pOkOcTw==} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.5': - resolution: {integrity: sha512-SZuuLyfxvsm+Ah57I/i1HVjveBENYK9ue8MJ7qkc7ndoNjqquJiElzA7f5yaAXjyW2hKojosOTAQQRX50bPSVg==} + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.1': - resolution: {integrity: sha512-p7uUxgSoZwZ2lPNMzUkqCts3xlp8n+o05ikjy7gbtFJSt9gdU88jAmtfmOxHM14noQXBxfgzf2yRWECiNVhTCw==} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.1': - resolution: {integrity: sha512-msyzuUnvsjsaSaocV6L7ErfNsa5nDWL1XKNnDePLgmz+WdU4w/J8+AxBMrWfi9m4IxfL5sZQKUPQKDQeeAT6lA==} + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.1': - resolution: {integrity: sha512-av2gdSTyXcJVdI+8aFZsCAtR29xJt0S5tas+Ef8NvBNmD1a+N/3ecMLeMBgfcK+xzsjdLDT6oHt+DFPyeqUbDA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.1': - resolution: {integrity: sha512-U1yX13dVBSwS23DEAqU+Z/PkwE9/m7QQy8Y9/+Tdb8UWYaGNDYwTLi19wqIAiROr8sXVum9A/rtiH5H0boUcTw==} + '@babel/plugin-transform-exponentiation-operator@7.25.9': + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.1': - resolution: {integrity: sha512-Ft38m/KFOyzKw2UaJFkWG9QnHPG/Q/2SkOrRk4pNBPg5IPZ+dOxcmkK5IyuBcxiNPyyYowPGUReyBvrvZs7IlQ==} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.1': - resolution: {integrity: sha512-OxBdcnF04bpdQdR3i4giHZNZQn7cm8RQKcSwA17wAAqEELo1ZOwp5FFgeptWUQXFyT9kwHo10aqqauYkRZPCAg==} + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.1': - resolution: {integrity: sha512-BXmDZpPlh7jwicKArQASrj8n22/w6iymRnvHYYd2zO30DbE277JO20/7yXJT3QxDPtiQiOxQBbZH4TpivNXIxA==} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.1': - resolution: {integrity: sha512-U7RMFmRvoasscrIFy5xA4gIp8iWnWubnKkKuUGJjsuOH7GfbMkB+XZzeslx2kLdEGdOJDamEmCqOks6e8nv8DQ==} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.1': - resolution: {integrity: sha512-zn9pwz8U7nCqOYIiBaOxoQOtYmMODXTJnkxG4AtX8fPmnCRYWBOHD0qcpwS9e2VDSp1zNJYpdnFMIKb8jmwu6g==} + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.1': - resolution: {integrity: sha512-OhN6J4Bpz+hIBqItTeWJujDOfNP+unqv/NJgyhlpSqgBTPm37KkMmZV6SYcOj+pnDbdcl1qRGV/ZiIjX9Iy34w==} + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.1': - resolution: {integrity: sha512-4ojai0KysTWXzHseJKa1XPNXKRbuUrhkOPY4rEGeR+7ChlJVKxFa3H3Bz+7tWaGKgJAXUWKOGmltN+u9B3+CVg==} + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.1': - resolution: {integrity: sha512-lAxNHi4HVtjnHd5Rxg3D5t99Xm6H7b04hUS7EHIXcUl2EV4yl1gWdqZrNzXnSrHveL9qMdbODlLF55mvgjAfaQ==} + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.1': - resolution: {integrity: sha512-szog8fFTUxBfw0b98gEWPaEqF42ZUD/T3bkynW/wtgx2p/XCP55WEsb+VosKceRSd6njipdZvNogqdtI4Q0chw==} + '@babel/plugin-transform-modules-commonjs@7.25.9': + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.1': - resolution: {integrity: sha512-mqQ3Zh9vFO1Tpmlt8QPnbwGHzNz3lpNEMxQb1kAemn/erstyqw1r9KeOlOfo3y6xAnFEcOv2tSyrXfmMk+/YZA==} + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.1': - resolution: {integrity: sha512-tuA3lpPj+5ITfcCluy6nWonSL7RvaG0AOTeAuvXqEKS34lnLzXpDb0dcP6K8jD0zWZFNDVly90AGFJPnm4fOYg==} + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5': - resolution: {integrity: sha512-YgLLKmS3aUBhHaxp5hi1WJTgOUb/NCuDHzGT9z9WTt3YG+CPRhJs6nprbStx6DnWM4dh6gt7SU3sZodbZ08adQ==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.1': - resolution: {integrity: sha512-/rurytBM34hYy0HKZQyA0nHbQgQNFm4Q/BOc9Hflxi2X3twRof7NaE5W46j4kQitm7SvACVRXsa6N/tSZxvPug==} + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1': - resolution: {integrity: sha512-iQ+caew8wRrhCikO5DrUYx0mrmdhkaELgFa+7baMcVuhxIkN7oxt06CZ51D65ugIb1UWRQ8oQe+HXAVM6qHFjw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.1': - resolution: {integrity: sha512-7GAsGlK4cNL2OExJH1DzmDeKnRv/LXq0eLUSvudrehVA5Rgg4bIrqEUW29FbKMBRT0ztSqisv7kjP+XIC4ZMNw==} + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.5': - resolution: {integrity: sha512-7EauQHszLGM3ay7a161tTQH7fj+3vVM/gThlz5HpFtnygTxjrlvoeq7MPVA1Vy9Q555OB8SnAOsMkLShNkkrHA==} + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.1': - resolution: {integrity: sha512-oKJqR3TeI5hSLRxudMjFQ9re9fBVUU0GICqM3J1mi8MqlhVr6hC/ZN4ttAyMuQR6EZZIY6h/exe5swqGNNIkWQ==} + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.1': - resolution: {integrity: sha512-oBTH7oURV4Y+3EUrf6cWn1OHio3qG/PVwO5J03iSJmBg6m2EhKjkAu/xuaXaYwWW9miYtvbWv4LNf0AmR43LUA==} + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.5': - resolution: {integrity: sha512-xWCkmwKT+ihmA6l7SSTpk8e4qQl/274iNbSKRRS8mpqFR32ksy36+a+LWY8OXCCEefF8WFlnOHVsaDI2231wBg==} + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.5': - resolution: {integrity: sha512-9Co00MqZ2aoky+4j2jhofErthm6QVLKbpQrvz20c3CH9KQCLHyNB+t2ya4/UrRpQGR+Wrwjg9foopoeSdnHOkA==} + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.24.1': - resolution: {integrity: sha512-tGvisebwBO5em4PaYNqt4fkw56K2VALsAbAakY0FjTYqJp7gfdrgr7YX76Or8/cpik0W6+tj3rZ0uHU9Oil4tw==} + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.5': - resolution: {integrity: sha512-JM4MHZqnWR04jPMujQDTBVRnqxpLLpx2tkn7iPn+Hmsc0Gnb79yvRWOkvqFOx3Z7P7VxiRIR22c4eGSNj87OBQ==} + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.1': - resolution: {integrity: sha512-LetvD7CrHmEx0G442gOomRr66d7q8HzzGGr4PMHGr+5YIm6++Yke+jxj246rpvsbyhJwCLxcTn6zW1P1BSenqA==} + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-constant-elements@7.24.1': - resolution: {integrity: sha512-QXp1U9x0R7tkiGB0FOk8o74jhnap0FlZ5gNkRIWdG3eP+SvMFg118e1zaWewDzgABb106QSKpVsD3Wgd8t6ifA==} + '@babel/plugin-transform-react-constant-elements@7.25.9': + resolution: {integrity: sha512-Ncw2JFsJVuvfRsa2lSHiC55kETQVLSnsYGQ1JDDwkUeWGTL/8Tom8aLTnlqgoeuopWrbbGndrc9AlLYrIosrow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.24.1': - resolution: {integrity: sha512-mvoQg2f9p2qlpDQRBC7M3c3XTr0k7cp/0+kFKKO/7Gtu0LSw16eKB+Fabe2bDT/UpsyasTBBkAnbdsLrkD5XMw==} + '@babel/plugin-transform-react-display-name@7.25.9': + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.22.5': - resolution: {integrity: sha512-bDhuzwWMuInwCYeDeMzyi7TaBgRQei6DqxhbyniL7/VG4RSS7HtSL2QbY4eESy1KJqlWt8g3xeEBGPuo+XqC8A==} + '@babel/plugin-transform-react-jsx-development@7.25.9': + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.23.4': - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.24.1': - resolution: {integrity: sha512-+pWEAaDJvSm9aFvJNpLiM2+ktl2Sn2U5DdyiWdZBxmLc6+xGt88dvFqsHiAiDS+8WqUwbDfkKz9jRxK3M0k+kA==} + '@babel/plugin-transform-react-pure-annotations@7.25.9': + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.1': - resolution: {integrity: sha512-sJwZBCzIBE4t+5Q4IGLaaun5ExVMRY0lYwos/jNecjMrVCygCdph3IKv0tkP5Fc87e/1+bebAmEAGBfnRD+cnw==} + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.1': - resolution: {integrity: sha512-JAclqStUfIwKN15HrsQADFgeZt+wexNQ0uLhuqvqAUFoqPMjEcFCYZBhq0LUdz6dZK/mD+rErhW71fbx8RYElg==} + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-runtime@7.24.3': - resolution: {integrity: sha512-J0BuRPNlNqlMTRJ72eVptpt9VcInbxO6iP3jaxr+1NPhC0UkKL+6oeX6VXMEYdADnuqmMmsBspt4d5w8Y/TCbQ==} + '@babel/plugin-transform-runtime@7.25.9': + resolution: {integrity: sha512-nZp7GlEl+yULJrClz0SwHPqir3lc0zsPrDHQUcxGspSL7AKrexNSEfTbfqnDNJUO13bgKyfuOLMF8Xqtu8j3YQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.1': - resolution: {integrity: sha512-LyjVB1nsJ6gTTUKRjRWx9C1s9hE7dLfP/knKdrfeH9UPtAGjYGgxIbFfx7xyLIEWs7Xe1Gnf8EWiUqfjLhInZA==} + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.1': - resolution: {integrity: sha512-KjmcIM+fxgY+KxPVbjelJC6hrH1CgtPmTvdXAfn3/a9CnWGSTY7nH4zm5+cjmWJybdcPSsD0++QssDsjcpe47g==} + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.1': - resolution: {integrity: sha512-9v0f1bRXgPVcPrngOQvLXeGNNVLc8UjMVfebo9ka0WF3/7+aVUHmaJVT3sa0XCzEFioPfPHZiOcYG9qOsH63cw==} + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.1': - resolution: {integrity: sha512-WRkhROsNzriarqECASCNu/nojeXCDTE/F2HmRgOzi7NGvyfYGq1NEjKBK3ckLfRgGc6/lPAqP0vDOSw3YtG34g==} + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.5': - resolution: {integrity: sha512-UTGnhYVZtTAjdwOTzT+sCyXmTn8AhaxOS/MjG9REclZ6ULHWF9KoCZur0HSGU7hk8PdBFKKbYe6+gqdXWz84Jg==} + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.5': - resolution: {integrity: sha512-E0VWu/hk83BIFUWnsKZ4D81KXjN5L3MobvevOHErASk9IPwKHOkTgvqzvNo1yP/ePJWqqK2SpUR5z+KQbl6NVw==} + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.1': - resolution: {integrity: sha512-RlkVIcWT4TLI96zM660S877E7beKlQw7Ig+wqkKBiWfj0zH5Q4h50q6er4wzZKRNSYpfo6ILJ+hrJAGSX2qcNw==} + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.1': - resolution: {integrity: sha512-Ss4VvlfYV5huWApFsF8/Sq0oXnGO+jB+rijFEFugTd3cwSObUSnUi88djgR5528Csl0uKlrI331kRqe56Ov2Ng==} + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.1': - resolution: {integrity: sha512-2A/94wgZgxfTsiLaQ2E36XAOdcZmGAaEEgVmxQWwZXWkGhvoHbaqXcKnU8zny4ycpu3vNqg0L/PcCiYtHtA13g==} + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.1': - resolution: {integrity: sha512-fqj4WuzzS+ukpgerpAoOnMfQXwUHFxXUZUE84oL2Kao2N8uSlvcpnAidKASgsNgzZHBsHWvcm8s9FPWUhAb8fA==} + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.5': - resolution: {integrity: sha512-UGK2ifKtcC8i5AI4cH+sbLLuLc2ktYSFJgBAXorKAsHUZmrQ1q6aQ6i3BvU24wWs2AAKqQB6kq3N9V9Gw1HiMQ==} + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -1410,39 +1380,32 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-react@7.24.1': - resolution: {integrity: sha512-eFa8up2/8cZXLIpkafhaADTXSnl7IsUFCYenRWrARBz0/qZwcT0RBXpys0LJU4+WfPoF2ZG6ew6s2V6izMCwRA==} + '@babel/preset-react@7.25.9': + resolution: {integrity: sha512-D3to0uSPiWE7rBrdIICCd0tJSIGpLaaGptna2+w7Pft5xMqLpA1sz99DK5TZ1TjGbdQ/VI1eCSZ06dv3lT4JOw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-typescript@7.24.1': - resolution: {integrity: sha512-1DBaMmRDpuYQBPWD8Pf/WEwCrtgRHxsZnP4mIy9G/X+hFfbI47Q2G4t1Paakld84+qsk2fSsUPMKg71jkoOOaQ==} + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime-corejs3@7.24.5': - resolution: {integrity: sha512-GWO0mgzNMLWaSYM4z4NVIuY0Cd1fl8cPnuetuddu5w/qGuvt5Y7oUi/kvvQGK9xgOkFJDQX2heIvTRn/OQ1XTg==} - engines: {node: '>=6.9.0'} - - '@babel/runtime@7.24.5': - resolution: {integrity: sha512-Nms86NXrsaeU9vbBJKni6gXiEXZ4CVpYVzEjDH9Sb8vmZ3UljyA1GSOJl/6LGPO8EHLuSF9H+IxNXHPX8QHJ4g==} + '@babel/runtime-corejs3@7.26.0': + resolution: {integrity: sha512-YXHu5lN8kJCb1LOb9PgV6pvak43X2h4HvRApcN5SdWeaItQOzfn1hgP6jasD6KWQyJDBxrVmA9o9OivlnNJK/w==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.5': - resolution: {integrity: sha512-7aaBLeDQ4zYcUFDUD41lJc1fG8+5IU9DaNSJAgal866FGvmD5EbWQgnEC6kO1gGLsX0esNkfnJSndbTXA3r7UA==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.5': - resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} '@babel/types@7.26.0': @@ -1460,11 +1423,11 @@ packages: resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} - '@docsearch/css@3.6.0': - resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} + '@docsearch/css@3.6.3': + resolution: {integrity: sha512-3uvbg8E7rhqE1C4oBAK3tGlS2qfhi9zpfZgH/yjDPF73vd9B41urVIKujF4rczcF4E3qs34SedhehiDJ4UdNBA==} - '@docsearch/react@3.6.0': - resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} + '@docsearch/react@3.6.3': + resolution: {integrity: sha512-2munr4uBuZq1PG+Ge+F+ldIdxb3Wi8OmEIv2tQQb4RvEvvph+xtQkxwHzVIEnt5s+HecwucuXwB+3JhcZboFLg==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -1480,93 +1443,108 @@ packages: search-insights: optional: true - '@docusaurus/core@3.3.2': - resolution: {integrity: sha512-PzKMydKI3IU1LmeZQDi+ut5RSuilbXnA8QdowGeJEgU8EJjmx3rBHNT1LxQxOVqNEwpWi/csLwd9bn7rUjggPA==} + '@docusaurus/babel@3.6.0': + resolution: {integrity: sha512-7CsoQFiadoq7AHSUIQNkI/lGfg9AQ2ZBzsf9BqfZGXkHwWDy6twuohEaG0PgQv1npSRSAB2dioVxhRSErnqKNA==} + engines: {node: '>=18.0'} + + '@docusaurus/bundler@3.6.0': + resolution: {integrity: sha512-o5T9HXkPKH0OQAifTxEXaebcO8kaz3tU1+wlIShZ2DKJHlsyWX3N4rToWBHroWnV/ZCT2XN3kLRzXASqrnb9Tw==} + engines: {node: '>=18.0'} + peerDependencies: + '@docusaurus/faster': 3.5.2 + peerDependenciesMeta: + '@docusaurus/faster': + optional: true + + '@docusaurus/core@3.6.0': + resolution: {integrity: sha512-lvRgMoKJJSRDt9+HhAqFcICV4kp/mw1cJJrLxIw4Q2XZnFGM1XUuwcbuaqWmGog+NcOLZaPCcCtZbn60EMCtjQ==} engines: {node: '>=18.0'} hasBin: true peerDependencies: + '@mdx-js/react': ^3.0.0 react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/cssnano-preset@3.3.2': - resolution: {integrity: sha512-+5+epLk/Rp4vFML4zmyTATNc3Is+buMAL6dNjrMWahdJCJlMWMPd/8YfU+2PA57t8mlSbhLJ7vAZVy54cd1vRQ==} + '@docusaurus/cssnano-preset@3.6.0': + resolution: {integrity: sha512-h3jlOXqqzNSoU+C4CZLNpFtD+v2xr1UBf4idZpwMgqid9r6lb5GS7tWKnQnauio6OipacbHbDXEX3JyT1PlDkg==} engines: {node: '>=18.0'} - '@docusaurus/logger@3.3.2': - resolution: {integrity: sha512-Ldu38GJ4P8g4guN7d7pyCOJ7qQugG7RVyaxrK8OnxuTlaImvQw33aDRwaX2eNmX8YK6v+//Z502F4sOZbHHCHQ==} + '@docusaurus/logger@3.6.0': + resolution: {integrity: sha512-BcQhoXilXW0607cH/kO6P5Gt5KxCGfoJ+QDKNf3yO2S09/RsITlW+0QljXPbI3DklTrHrhRDmgGk1yX4nUhWTA==} engines: {node: '>=18.0'} - '@docusaurus/mdx-loader@3.3.2': - resolution: {integrity: sha512-AFRxj/aOk3/mfYDPxE3wTbrjeayVRvNSZP7mgMuUlrb2UlPRbSVAFX1k2RbgAJrnTSwMgb92m2BhJgYRfptN3g==} + '@docusaurus/mdx-loader@3.6.0': + resolution: {integrity: sha512-GhRzL1Af/AdSSrGesSPOU/iP/aXadTGmVKuysCxZDrQR2RtBtubQZ9aw+KvdFVV7R4K/CsbgD6J5oqrXlEPk3Q==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/module-type-aliases@3.3.2': - resolution: {integrity: sha512-b/XB0TBJah5yKb4LYuJT4buFvL0MGAb0+vJDrJtlYMguRtsEBkf2nWl5xP7h4Dlw6ol0hsHrCYzJ50kNIOEclw==} + '@docusaurus/module-type-aliases@3.6.0': + resolution: {integrity: sha512-szTrIN/6/fuk0xkf3XbRfdTFJzRQ8d1s3sQj5++58wltrT7v3yn1149oc9ryYjMpRcbsarGloQwMu7ofPe4XPg==} peerDependencies: react: '*' react-dom: '*' - '@docusaurus/plugin-content-blog@3.3.2': - resolution: {integrity: sha512-fJU+dmqp231LnwDJv+BHVWft8pcUS2xVPZdeYH6/ibH1s2wQ/sLcmUrGWyIv/Gq9Ptj8XWjRPMghlxghuPPoxg==} + '@docusaurus/plugin-content-blog@3.6.0': + resolution: {integrity: sha512-o4aT1/E0Ldpzs/hQff5uyoSriAhS/yqBhqSn+fvSw465AaqRsva6O7CZSYleuBq6x2bewyE3QJq2PcTiHhAd8g==} engines: {node: '>=18.0'} peerDependencies: + '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-content-docs@3.3.2': - resolution: {integrity: sha512-Dm1ri2VlGATTN3VGk1ZRqdRXWa1UlFubjaEL6JaxaK7IIFqN/Esjpl+Xw10R33loHcRww/H76VdEeYayaL76eg==} + '@docusaurus/plugin-content-docs@3.6.0': + resolution: {integrity: sha512-c5gZOxocJKO/Zev2MEZInli+b+VNswDGuKHE6QtFgidhAJonwjh2kwj967RvWFaMMk62HlLJLZ+IGK2XsVy4Aw==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-content-pages@3.3.2': - resolution: {integrity: sha512-EKc9fQn5H2+OcGER8x1aR+7URtAGWySUgULfqE/M14+rIisdrBstuEZ4lUPDRrSIexOVClML82h2fDS+GSb8Ew==} + '@docusaurus/plugin-content-pages@3.6.0': + resolution: {integrity: sha512-RKHhJrfkadHc7+tt1cP48NWifOrhkSRMPdXNYytzhoQrXlP6Ph+3tfQ4/n+nT0S3Y9+wwRxYqRqA380ZLt+QtQ==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-debug@3.3.2': - resolution: {integrity: sha512-oBIBmwtaB+YS0XlmZ3gCO+cMbsGvIYuAKkAopoCh0arVjtlyPbejzPrHuCoRHB9G7abjNZw7zoONOR8+8LM5+Q==} + '@docusaurus/plugin-debug@3.6.0': + resolution: {integrity: sha512-o8T1Rl94COLdSlKvjYLQpRJQRU8WWZ8EX1B0yV0dQLNN8reyH7MQW+6z1ig4sQFfH3pnjPWVGHfuEjcib5m7Eg==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-google-analytics@3.3.2': - resolution: {integrity: sha512-jXhrEIhYPSClMBK6/IA8qf1/FBoxqGXZvg7EuBax9HaK9+kL3L0TJIlatd8jQJOMtds8mKw806TOCc3rtEad1A==} + '@docusaurus/plugin-google-analytics@3.6.0': + resolution: {integrity: sha512-kgRFbfpi6Hshj75YUztKyEMtI/kw0trPRwoTN4g+W1NK99R/vh8phTvhBTIMnDbetU79795LkwfG0rZ/ce6zWQ==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-google-gtag@3.3.2': - resolution: {integrity: sha512-vcrKOHGbIDjVnNMrfbNpRQR1x6Jvcrb48kVzpBAOsKbj9rXZm/idjVAXRaewwobHdOrJkfWS/UJoxzK8wyLRBQ==} + '@docusaurus/plugin-google-gtag@3.6.0': + resolution: {integrity: sha512-nqu4IfjaO4UX+dojHL2BxHRS+sKj31CIMWYo49huQ3wTET0Oc3u/WGTaKd3ShTPDhkgiRhTOSTPUwJWrU55nHg==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-google-tag-manager@3.3.2': - resolution: {integrity: sha512-ldkR58Fdeks0vC+HQ+L+bGFSJsotQsipXD+iKXQFvkOfmPIV6QbHRd7IIcm5b6UtwOiK33PylNS++gjyLUmaGw==} + '@docusaurus/plugin-google-tag-manager@3.6.0': + resolution: {integrity: sha512-OU6c5xI0nOVbEc9eImGvvsgNWe4vGm97t/W3aLHjWsHyNk3uwFNBQMHRvBUwAi9k/K3kyC5E7DWnc67REhdLOw==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/plugin-sitemap@3.3.2': - resolution: {integrity: sha512-/ZI1+bwZBhAgC30inBsHe3qY9LOZS+79fRGkNdTcGHRMcdAp6Vw2pCd1gzlxd/xU+HXsNP6cLmTOrggmRp3Ujg==} + '@docusaurus/plugin-sitemap@3.6.0': + resolution: {integrity: sha512-YB5XMdf9FjLhgbHY/cDbYhVxsgcpPIjxY9769HUgFOB7GVzItTLOR71W035R1BiR2CA5QAn3XOSg36WLRxlhQQ==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/preset-classic@3.3.2': - resolution: {integrity: sha512-1SDS7YIUN1Pg3BmD6TOTjhB7RSBHJRpgIRKx9TpxqyDrJ92sqtZhomDc6UYoMMLQNF2wHFZZVGFjxJhw2VpL+Q==} + '@docusaurus/preset-classic@3.6.0': + resolution: {integrity: sha512-kpGNdQzr/Dpm7o3b1iaQrz4DMDx3WIeBbl4V4P4maa2zAQkTdlaP4CMgA5oKrRrpqPLnQFsUM/b+qf2glhl2Tw==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 @@ -1577,39 +1555,40 @@ packages: peerDependencies: react: '*' - '@docusaurus/theme-classic@3.3.2': - resolution: {integrity: sha512-gepHFcsluIkPb4Im9ukkiO4lXrai671wzS3cKQkY9BXQgdVwsdPf/KS0Vs4Xlb0F10fTz+T3gNjkxNEgSN9M0A==} + '@docusaurus/theme-classic@3.6.0': + resolution: {integrity: sha512-sAXNfwPL6uRD+BuHuKXZfAXud7SS7IK/JdrPuzyQxdO1gJKzI5GFfe1ED1QoJDNWJWJ01JHE5rSnwYLEADc2rQ==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/theme-common@3.3.2': - resolution: {integrity: sha512-kXqSaL/sQqo4uAMQ4fHnvRZrH45Xz2OdJ3ABXDS7YVGPSDTBC8cLebFrRR4YF9EowUHto1UC/EIklJZQMG/usA==} + '@docusaurus/theme-common@3.6.0': + resolution: {integrity: sha512-frjlYE5sRs+GuPs4XXlp9aMLI2O4H5FPpznDAXBrCm+8EpWRiIb443ePMxM3IyMCQ5bwFlki0PI9C+r4apstnw==} engines: {node: '>=18.0'} peerDependencies: + '@docusaurus/plugin-content-docs': '*' react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/theme-search-algolia@3.3.2': - resolution: {integrity: sha512-qLkfCl29VNBnF1MWiL9IyOQaHxUvicZp69hISyq/xMsNvFKHFOaOfk9xezYod2Q9xx3xxUh9t/QPigIei2tX4w==} + '@docusaurus/theme-search-algolia@3.6.0': + resolution: {integrity: sha512-4IwRUkxjrisR8LXBHeE4d2btraWdMficbgiVL3UHvJURmyvgzMBZQP8KrK8rjdXeu8SuRxSmeV6NSVomRvdbEg==} engines: {node: '>=18.0'} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/theme-translations@3.3.2': - resolution: {integrity: sha512-bPuiUG7Z8sNpGuTdGnmKl/oIPeTwKr0AXLGu9KaP6+UFfRZiyWbWE87ti97RrevB2ffojEdvchNujparR3jEZQ==} + '@docusaurus/theme-translations@3.6.0': + resolution: {integrity: sha512-L555X8lWE3fv8VaF0Bc1VnAgi10UvRKFcvADHiYR7Gj37ItaWP5i7xLHsSw7fi/SHTXe5wfIeCFNqUYHyCOHAQ==} engines: {node: '>=18.0'} - '@docusaurus/types@3.3.2': - resolution: {integrity: sha512-5p201S7AZhliRxTU7uMKtSsoC8mgPA9bs9b5NQg1IRdRxJfflursXNVsgc3PcMqiUTul/v1s3k3rXXFlRE890w==} + '@docusaurus/types@3.6.0': + resolution: {integrity: sha512-jADLgoZGWhAzThr+mRiyuFD4OUzt6jHnb7NRArRKorgxckqUBaPyFOau9hhbcSTHtU6ceyeWjN7FDt7uG2Hplw==} peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - '@docusaurus/utils-common@3.3.2': - resolution: {integrity: sha512-QWFTLEkPYsejJsLStgtmetMFIA3pM8EPexcZ4WZ7b++gO5jGVH7zsipREnCHzk6+eDgeaXfkR6UPaTt86bp8Og==} + '@docusaurus/utils-common@3.6.0': + resolution: {integrity: sha512-diUDNfbw33GaZMmKwdTckT2IBfVouXLXRD+zphH9ywswuaEIKqixvuf5g41H7MBBrlMsxhna3uTMoB4B/OPDcA==} engines: {node: '>=18.0'} peerDependencies: '@docusaurus/types': '*' @@ -1617,12 +1596,12 @@ packages: '@docusaurus/types': optional: true - '@docusaurus/utils-validation@3.3.2': - resolution: {integrity: sha512-itDgFs5+cbW9REuC7NdXals4V6++KifgVMzoGOOOSIifBQw+8ULhy86u5e1lnptVL0sv8oAjq2alO7I40GR7pA==} + '@docusaurus/utils-validation@3.6.0': + resolution: {integrity: sha512-CRHiKKJEKA0GFlfOf71JWHl7PtwOyX0+Zg9ep9NFEZv6Lcx3RJ9nhl7p8HRjPL6deyYceavM//BsfW4pCI4BtA==} engines: {node: '>=18.0'} - '@docusaurus/utils@3.3.2': - resolution: {integrity: sha512-f4YMnBVymtkSxONv4Y8js3Gez9IgHX+Lcg6YRMOjVbq8sgCcdYK1lf6SObAuz5qB/mxiSK7tW0M9aaiIaUSUJg==} + '@docusaurus/utils@3.6.0': + resolution: {integrity: sha512-VKczAutI4mptiAw/WcYEu5WeVhQ6Q1zdIUl64SGw9K++9lziH+Kt10Ee8l2dMpRkiUk6zzK20kMNlX2WCUwXYQ==} engines: {node: '>=18.0'} peerDependencies: '@docusaurus/types': '*' @@ -1766,22 +1745,22 @@ packages: cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@hapi/hoek@9.3.0': @@ -1790,8 +1769,8 @@ packages: '@hapi/topo@5.1.0': resolution: {integrity: sha512-foQZKJig7Ob0BMAYBfcJk8d77QtOe7Wo4ox7ff1lQYoNNAb6jwcY1ncdoy2e9wQZzvNy7ODZCYJkK8kzmcAnAg==} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -1803,24 +1782,20 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@ipld/car@5.3.0': - resolution: {integrity: sha512-OB8LVvJeVAFFGluNIkZeDZ/aGeoekFKsuIvNT9I5sJIb5WekQuW5+lekjQ7Z7mZ7DBKuke/kI4jBT1j0/akU1w==} - engines: {node: '>=16.0.0', npm: '>=7.0.0'} - - '@ipld/dag-cbor@9.2.0': - resolution: {integrity: sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA==} + '@ipld/car@5.3.3': + resolution: {integrity: sha512-4vgV5Ml4HCJ2iTx7vYhu0ui+Xxo1HQTtVeYgD+JKd5Wij8TlOFZnxOSickqpLcuf1fdGEStgqVItx15UWfzDYA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@ipld/dag-cbor@9.2.1': - resolution: {integrity: sha512-nyY48yE7r3dnJVlxrdaimrbloh4RokQaNRdI//btfTkcTEZbpmSrbYcBQ4VKTf8ZxXAOUJy4VsRpkJo+y9RTnA==} + '@ipld/dag-cbor@9.2.2': + resolution: {integrity: sha512-uIEOuruCqKTP50OBWwgz4Js2+LhiBQaxc57cnP71f45b1mHEAo1OCR1Zn/TbvSW/mV1x+JqhacIktkKyaYqhCw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@ipld/dag-json@10.2.0': - resolution: {integrity: sha512-O9YLUrl3d3WbVz7v1WkajFkyfOLEe2Fep+wor4fgVe0ywxzrivrj437NiPcVyB+2EDdFn/Q7tCHFf8YVhDf8ZA==} + '@ipld/dag-json@10.2.3': + resolution: {integrity: sha512-itacv1j1hvYgLox2B42Msn70QLzcr0MEo5yGIENuw2SM/lQzq9bmBiMky+kDsIrsqqblKTXcHBZnnmK7D4a6ZQ==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@ipld/dag-pb@4.1.0': - resolution: {integrity: sha512-LJU451Drqs5zjFm7jI4Hs3kHlilOqkjcSfPiQgVsZnWaYb2C7YdfhnclrVn/X+ucKejlU9BL3+gXFCZUXkMuCg==} + '@ipld/dag-pb@4.1.3': + resolution: {integrity: sha512-ueULCaaSCcD+dQga6nKiRr+RSeVgdiYiEPKVUu5iQMNYDN+9osd0KpR3UDd9uQQ+6RWuv9L34SchfEwj7YIbOA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} '@ipld/dag-ucan@3.4.0': @@ -1860,9 +1835,6 @@ packages: '@jridgewell/source-map@0.3.6': resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} @@ -1872,11 +1844,11 @@ packages: '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} - '@mdx-js/mdx@3.0.1': - resolution: {integrity: sha512-eIQ4QTrOWyL3LWEe/bu6Taqzq2HQvHcyTMaOrI95P2/LmJE7AsfPfgJGuFLPVqBUE1BC1rik3VIhU+s9u72arA==} + '@mdx-js/mdx@3.1.0': + resolution: {integrity: sha512-/QxEhPAvGwbQmy1Px8F899L5Uc2KZ6JtXwlCgJmjSTBedwOZkByYcBG4GceIGPXRDsmfxhHazuS+hlOShRLeDw==} - '@mdx-js/react@3.0.1': - resolution: {integrity: sha512-9ZrPIU4MGf6et1m1ov3zKf+q9+deetI51zprKB1D/z3NOb+rUxxtEl3mCjW5wTGh6VhRdwPueh1oRzi6ezkA8A==} + '@mdx-js/react@3.1.0': + resolution: {integrity: sha512-QjHtSaoameoalGnKDT3FoIl4+9RwyTmo9ZJGBdLOks/YOiWHoRDI3PUwEzOE7kEmGcV3AFcp9K6dYu9rEuKLAQ==} peerDependencies: '@types/react': '>=16' react: '>=16' @@ -1885,15 +1857,16 @@ packages: resolution: {integrity: sha512-6vId1C46ra3R1sbJUOFCZnsUIveR9oF20yhPmAFxPm0JfrX3/ZRCgP3YDrBzlGoEppOXnA9czHeYc0T9mB6hbA==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - '@noble/curves@1.4.0': - resolution: {integrity: sha512-p+4cb332SFCrReJkCYe8Xzm0OWi4Jji5jVdIZRL/PmacmDkFNw6MrrV+gGpiPxLHbV+zKFRywUWbaseT+tZRXg==} + '@noble/curves@1.6.0': + resolution: {integrity: sha512-TlaHRXDehJuRNR9TfZDNQ45mMEd5dwUwmicsafcIX4SsNiqnCHKjE/1alYPd/lDRVhxdhUAlv8uEhMCI5zjIJQ==} + engines: {node: ^14.21.3 || >=16} '@noble/ed25519@1.7.3': resolution: {integrity: sha512-iR8GBkDt0Q3GyaVcIu7mSsVIqnFbkbRzGLWlvhwunacoLwt4J3swfKhfaM6rN6WY+TBGoYT1GtT1mIh2/jGbRQ==} - '@noble/hashes@1.4.0': - resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} - engines: {node: '>= 16'} + '@noble/hashes@1.5.0': + resolution: {integrity: sha512-1j6kQFb7QRru7eKN3ZDvRcP13rugwdxZqCjbiAVZfIJwgj2A65UmT4TgARXGlXgnRkORLTDTrO19ZErt7+QXgA==} + engines: {node: ^14.21.3 || >=16} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1922,15 +1895,15 @@ packages: resolution: {integrity: sha512-YcPQ8a0jwYU9bTdJDpXjMi7Brhkr1mXsXrUJvjqM2mQDgkRiz8jFaQGOdaLxgjtUfQgZhKy/O3cG/YwmgKaxLA==} engines: {node: '>=12.22.0'} - '@pnpm/npm-conf@2.2.2': - resolution: {integrity: sha512-UA91GwWPhFExt3IizW6bOeY/pQ0BkuNwKjk9iQW9KqxluGCrg4VenZ0/L+2Y0+ZOtme72EVvg6v0zo3AMQRCeA==} + '@pnpm/npm-conf@2.3.1': + resolution: {integrity: sha512-c83qWb22rNRuB0UaVCI0uRPNRr8Z0FWnEIvT47jiHAmOIUHbBOg5XvV7pM5x+rKn9HRpjxquDbXYSXr3fAKFcw==} engines: {node: '>=12'} '@polka/url@0.5.0': resolution: {integrity: sha512-oZLYFEAzUKyi3SKnXvj32ZCEGH6RDnao7COuCVhDydMS9NrCSVXhM79VaKyP5+Zc33m0QXEd2DN3UkU7OsHcfw==} - '@polka/url@1.0.0-next.25': - resolution: {integrity: sha512-j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ==} + '@polka/url@1.0.0-next.28': + resolution: {integrity: sha512-8LduaNlMZGwdZ6qWrKlfa+2M4gahzFkprZiAt2TF8uS0qQgBizKXpXURqvTJ4WtmupWxaLqjRb2UCTe72mu+Aw==} '@protobufjs/aspromise@1.1.2': resolution: {integrity: sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==} @@ -1962,11 +1935,11 @@ packages: '@protobufjs/utf8@1.1.0': resolution: {integrity: sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==} - '@scure/base@1.1.6': - resolution: {integrity: sha512-ok9AWwhcgYuGG3Zfhyqg+zwl+Wn5uE+dwC0NV/2qQkx4dABbb/bx96vWu8NSj+BNjjSjno+JRYRjle1jV08k3g==} + '@scure/base@1.1.9': + resolution: {integrity: sha512-8YKhl8GHiNI/pU2VMaofa2Tor7PJRAjwQLBBuilkJ9L5+13yVbC7JO/wS7piioAvPSwR3JKM1IJ/u4xQzbcXKg==} - '@scure/bip39@1.3.0': - resolution: {integrity: sha512-disdg7gHuTDZtY+ZdkmLpPCk7fxZSu3gBiEGuoC1XYxv9cGx3Z6cpTggCgW6odSOOIXCiDjuGejW+aJKCY/pIQ==} + '@scure/bip39@1.4.0': + resolution: {integrity: sha512-BEEm6p8IueV/ZTfQLp/0vhw4NPnT9oWf5+28nvmeUICjP99f4vr2d+qc7AVGDDtwRep6ifR43Yed9ERVmiITzw==} '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -1992,23 +1965,20 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@sinonjs/commons@2.0.0': - resolution: {integrity: sha512-uLa0j859mMrg2slwQYdO/AkrOfmH+X6LTVmNTS9CqexuE2IvVORIkSpJLqePAbEnKJ77aMmCwr1NUZ57120Xcg==} - '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@sinonjs/fake-timers@11.2.2': - resolution: {integrity: sha512-G2piCSxQ7oWOxwGSAyFHfPIsyeJGXYtc6mFbnFA+kRXkiEnTl8c/8jul2S329iFBnDI9HGoeWWAZvuvOkZccgw==} + '@sinonjs/fake-timers@11.3.1': + resolution: {integrity: sha512-EVJO7nW5M/F5Tur0Rf2z/QoMo+1Ia963RiMtapiQrEWvY0iBUvADo8Beegwjpnle5BHkyHuoxSTW3jF43H1XRA==} - '@sinonjs/samsam@8.0.0': - resolution: {integrity: sha512-Bp8KUVlLp8ibJZrnvq2foVhP0IVX2CIprMJPK0vqGqgrDa0OHVKeZyBykqskkrdxV6yKBPmGasO8LVjAKR3Gew==} + '@sinonjs/samsam@8.0.2': + resolution: {integrity: sha512-v46t/fwnhejRSFTGqbpn9u+LQ9xJDse10gNnPgAcxgdoCDMXj/G2asWAC/8Qs+BAZDicX+MNZouXT1A7c83kVw==} - '@sinonjs/text-encoding@0.7.2': - resolution: {integrity: sha512-sXXKG+uL9IrKqViTtao2Ws6dy0znu9sOaP1di/jKGW1M6VssO8vlpXCQcpZ+jisQ1tTFAC5Jo/EOzFbggBagFQ==} + '@sinonjs/text-encoding@0.7.3': + resolution: {integrity: sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==} '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} @@ -2105,8 +2075,8 @@ packages: '@types/acorn@4.0.6': resolution: {integrity: sha512-veQTnWP+1D/xbxVrPC3zHnCZRjSrKfhbMUlEA43iMZLu7EsnTtkJklIuwrCPbOi8YkvDQAiW05VQQFvvz9oieQ==} - '@types/assert@1.5.10': - resolution: {integrity: sha512-qEO+AUgYab7GVbeDDgUNCU3o0aZUoIMpNAe+w5LDbRxfxQX7vQAdDgwj1AroX+i8KaV56FWg0srXlSZROnsrIQ==} + '@types/assert@1.5.11': + resolution: {integrity: sha512-FjS1mxq2dlGr9N4z72/DO+XmyRS3ZZIoVn998MEopAN/OmyN28F4yumRL5pOw2z+hbFLuWGYuF2rrw5p11xM5A==} '@types/body-parser@1.19.5': resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} @@ -2126,17 +2096,20 @@ packages: '@types/eslint-scope@3.7.7': resolution: {integrity: sha512-MzMFlSLBqNF2gcHWO0G1vP/YQyfvrxZ0bF+u7mzUdZ1/xK4A4sru+nraZz5i3iEIk1l1uyicaDVTB4QbbEkAYg==} - '@types/eslint@8.56.10': - resolution: {integrity: sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==} + '@types/eslint@9.6.1': + resolution: {integrity: sha512-FXx2pKgId/WyYo2jXw63kk7/+TY7u7AziEJxJAnSFzHlqTAS3Ync6SvgYAN/k4/PQpnnVuzoMuVnByKK2qp0ag==} '@types/estree-jsx@1.0.5': resolution: {integrity: sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/express-serve-static-core@4.19.0': - resolution: {integrity: sha512-bGyep3JqPCRry1wq+O5n7oiBgGWmeIJXPjXXCo8EK0u8duZGSYar7cGqd3ML2JUsLGeB7fmc06KYo9fLGWqPvQ==} + '@types/express-serve-static-core@4.19.6': + resolution: {integrity: sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A==} + + '@types/express-serve-static-core@5.0.1': + resolution: {integrity: sha512-CRICJIl0N5cXDONAdlTv5ShATZ4HEwk6kDDIW2/w9qOWKg+NU/5F8wYRWCrONad0/UKkloNSmmyN/wX4rtpbVA==} '@types/express@4.17.21': resolution: {integrity: sha512-ejlPM315qwLpaQlQDTjPdsUFSc6ZsP4AN6AlWnogPjQ7CVi7PYF3YVz+CY3jE2pwYf7E/7HlDAN0rV2GxTG0HQ==} @@ -2159,8 +2132,8 @@ packages: '@types/http-errors@2.0.4': resolution: {integrity: sha512-D0CFMMtydbJAegzOyHjtiKPLlvnm3iTZyZRSZoLq2mRhDdmLfIWOCYPfQJ4cu2erKghU++QvjcUjp/5h7hESpA==} - '@types/http-proxy@1.17.14': - resolution: {integrity: sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==} + '@types/http-proxy@1.17.15': + resolution: {integrity: sha512-25g5atgiVNTIv0LBDTg1H74Hvayx0ajtJPLLcYE3whFv75J0pWNtOBzaXJQgDTmrX1bx5U9YC2w/n65BN1HwRQ==} '@types/inquirer@9.0.7': resolution: {integrity: sha512-Q0zyBupO6NxGRZut/JdmqYKOnN95Eg5V8Csg3PGKkP+FnvsUZx1jAyK7fztIszxxMuoBA6E3KXWvdZVXIpx60g==} @@ -2177,8 +2150,8 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} - '@types/mdast@4.0.3': - resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==} + '@types/mdast@4.0.4': + resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} @@ -2189,8 +2162,8 @@ packages: '@types/minimatch@3.0.5': resolution: {integrity: sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==} - '@types/mocha@10.0.6': - resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==} + '@types/mocha@10.0.9': + resolution: {integrity: sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q==} '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} @@ -2201,20 +2174,20 @@ packages: '@types/node@17.0.45': resolution: {integrity: sha512-w+tIMs3rq2afQdsPJlODhoUEKzFP1ayaoyl1CcnwtIlsVe7K7bA1NGm4s3PraqTLlXnbIN84zuBlxBWo1u9BLw==} - '@types/node@20.12.10': - resolution: {integrity: sha512-Eem5pH9pmWBHoGAT8Dr5fdc5rYA+4NAovdM4EktRPVAAiJhmWWfQrA0cFhAbOsQdSfIHjAud6YdkbL69+zSKjw==} + '@types/node@20.17.6': + resolution: {integrity: sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==} '@types/parse-json@4.0.2': resolution: {integrity: sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw==} - '@types/prismjs@1.26.4': - resolution: {integrity: sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==} + '@types/prismjs@1.26.5': + resolution: {integrity: sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==} - '@types/prop-types@15.7.12': - resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} + '@types/prop-types@15.7.13': + resolution: {integrity: sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==} - '@types/qs@6.9.15': - resolution: {integrity: sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg==} + '@types/qs@6.9.16': + resolution: {integrity: sha512-7i+zxXdPD0T4cKDuxCUXJ4wHcsJLwENa6Z3dCu8cfCK743OGy5Nu1RmAGqDPsoTDINVEcdXKRvR/zre+P2Ku1A==} '@types/range-parser@1.2.7': resolution: {integrity: sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==} @@ -2228,8 +2201,8 @@ packages: '@types/react-router@5.1.20': resolution: {integrity: sha512-jGjmu/ZqS7FjSH6owMcD5qpq19+1RS9DeVRqfl1FeBMxTDQAGwlMWOcs52NDoXaNKyG3d1cYQFMs9rCrb88o9Q==} - '@types/react@18.3.1': - resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} + '@types/react@18.3.12': + resolution: {integrity: sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==} '@types/retry@0.12.0': resolution: {integrity: sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==} @@ -2264,23 +2237,23 @@ packages: '@types/through@0.0.33': resolution: {integrity: sha512-HsJ+z3QuETzP3cswwtzt2vEIiHBk/dCcHGhbmG5X3ecnwFD/lPrMpliGXxSCg03L9AhrdwA4Oz/qfspkDW+xGQ==} - '@types/unist@2.0.10': - resolution: {integrity: sha512-IfYcSBWE3hLpBg8+X2SEa8LVkJdJEkT2Ese2aaLs3ptGdVtABxndrMaxuFlQ1qdFf9Q5rDvDpxI3WwgvKFAsQA==} + '@types/unist@2.0.11': + resolution: {integrity: sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA==} - '@types/unist@3.0.2': - resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==} + '@types/unist@3.0.3': + resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} '@types/varint@6.0.3': resolution: {integrity: sha512-DHukoGWdJ2aYkveZJTB2rN2lp6m7APzVsoJQ7j/qy1fQxyamJTPD5xQzCMoJ2Qtgn0mE3wWeNOpbTyBFvF+dyA==} - '@types/ws@8.5.10': - resolution: {integrity: sha512-vmQSUcfalpIq0R9q7uTo2lXs6eGIpt9wtnLdMv9LVpIjCA/+ufZRozlVoVelIYixx1ugCBKDhn89vnsEGOCx9A==} + '@types/ws@8.5.13': + resolution: {integrity: sha512-osM/gWBTPKgHV8XkTunnegTRIsvF6owmf5w+JtAfOw472dptdm0dlGv4xCt6GwQRcC2XVOvvRE/0bAoQcL2QkA==} '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} '@typescript-eslint/eslint-plugin@6.21.0': resolution: {integrity: sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==} @@ -2388,20 +2361,14 @@ packages: '@web3-storage/content-claims@4.0.5': resolution: {integrity: sha512-+WpCkTN8aRfUCrCm0kOMZad+FRnFymVDFvS6/+PJMPGP17cci1/c5lqYdrjFV+5MkhL+BkUJVtRTx02G31FHmQ==} - '@web3-storage/content-claims@5.0.0': - resolution: {integrity: sha512-HJFRFsR0qHCe0cOERsb3AjAxxzohYMMoIWaGJgrShDycnl6yqXHrGcdua1BWUDu5pmvKzwD9D7VmI8aSfrCcRA==} - '@web3-storage/content-claims@5.1.3': resolution: {integrity: sha512-X+Cpm+EmGuEvFyM8oX1NqsBkuSje836B72yuvnVmgd80XPt+McpOhM6ko7rfs9Dx9UmpiZq+998jlvBhg2W5ZA==} '@web3-storage/data-segment@4.0.0': resolution: {integrity: sha512-AnNyJp3wHMa7LBzguQzm4rmXSi8vQBz4uFs+jiXnSNtLR5dAqHfhMvi9XdWonWPYvxNvT5ZhYCSF0mpDjymqKg==} - '@web3-storage/data-segment@5.1.0': - resolution: {integrity: sha512-FYdmtKvNiVz+maZ++k4PdD43rfJW5DeagLpstq2y84CyOKNRBWbHLCZ/Ec5zT9iGI+0WgsCGbpC/WlG0jlrnhA==} - - '@web3-storage/data-segment@5.2.0': - resolution: {integrity: sha512-Jr/bdweoEQ0lWIaNuFcYxM6BHYmXHBWwfXygHyp370agkAdU+dIFIbm+tX+66XP/1YmEUi4JI2I80psDtoJ++Q==} + '@web3-storage/data-segment@5.3.0': + resolution: {integrity: sha512-zFJ4m+pEKqtKatJNsFrk/2lHeFSbkXZ6KKXjBe7/2ayA9wAar7T/unewnOcZrrZTnCWmaxKsXWqdMFy9bXK9dw==} '@web3-storage/sigv4@1.0.2': resolution: {integrity: sha512-ZUXKK10NmuQgPkqByhb1H3OQxkIM0CIn2BMPhGQw7vQw8WIzrBkk9IJiAVfJ/UVBFrf6uzPbx2lEBLt4diCMnQ==} @@ -2464,11 +2431,6 @@ packages: resolution: {integrity: sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==} engines: {node: '>= 0.6'} - acorn-import-assertions@1.9.0: - resolution: {integrity: sha512-cmMwop9x+8KFhxvKrKfPYmN6/pKTYYHBqLa0DfvVZcKMJWNyWLnaqND7dx/qn66R7ewM1UX5XMaDVP5wlVTaVA==} - peerDependencies: - acorn: ^8 - acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -2478,12 +2440,12 @@ packages: resolution: {integrity: sha512-M0EUka6rb+QC4l9Z3T0nJEzNOO7JcoJlYMrBlyBCiFSXRyxjLKayd4TbQs2FDRWQU1h9FR7QVNHt+PEaoNL5rQ==} engines: {node: '>=0.4.0'} - acorn-walk@8.3.2: - resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -2498,10 +2460,6 @@ packages: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} - aggregate-error@4.0.1: - resolution: {integrity: sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==} - engines: {node: '>=12'} - ajv-formats@2.1.1: resolution: {integrity: sha512-Wx0Kx52hxE7C18hkMEggYlEifqWZtYaRgouJor+WMdPnQyEK13vgEWyVNup7SoeeoLMsr4kf5h6dOW11I15MUA==} peerDependencies: @@ -2523,31 +2481,39 @@ packages: ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} - ajv@8.13.0: - resolution: {integrity: sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==} + ajv@8.17.1: + resolution: {integrity: sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==} - algoliasearch-helper@3.19.0: - resolution: {integrity: sha512-AaSb5DZDMZmDQyIy6lf4aL0OZGgyIdqvLIIvSuVQOIOqfhrYSY7TvotIFI2x0Q3cP3xUpTd7lI1astUC4aXBJw==} + algoliasearch-helper@3.22.5: + resolution: {integrity: sha512-lWvhdnc+aKOKx8jyA3bsdEgHzm/sglC4cYdMG4xSQyRiPLJVJtH/IVYZG3Hp6PkTEhQqhyVYkeP9z2IlcHJsWw==} peerDependencies: algoliasearch: '>= 3.1 < 6' - algoliasearch@4.23.3: - resolution: {integrity: sha512-Le/3YgNvjW9zxIQMRhUHuhiUjAlKY/zsdZpfq4dlLqg6mEm0nL6yk+7f2hDOtLpxsgE4jSzDmvHL7nXdBp5feg==} + algoliasearch@4.24.0: + resolution: {integrity: sha512-bf0QV/9jVejssFBmz2HQLxUadxk574t4iwjCKp5E7NBzwKkrDEhKPISIIjAU/p6K5qDx3qoeh4+26zWN1jmw3g==} + + algoliasearch@5.12.0: + resolution: {integrity: sha512-psGBRYdGgik8I6m28iAB8xpubvjEt7UQU+w5MAJUA2324WHiGoHap5BPkkjB14rMaXeRts6pmOsrVIglGyOVwg==} + engines: {node: '>= 14.0.0'} ansi-align@3.0.1: resolution: {integrity: sha512-IOfwwBF5iczOjp/WeY4YxyjqAFMQoZufdQWDd19SEExbVLNXqvpzSJ/M7Za4/sCPmQ0+GRquoA7bGcINcxew6w==} - ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} + ansi-colors@4.1.3: + resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@4.3.2: + resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} + engines: {node: '>=8'} + ansi-escapes@5.0.0: resolution: {integrity: sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==} engines: {node: '>=12'} - ansi-escapes@6.2.1: - resolution: {integrity: sha512-4nJ3yixlEthEJ9Rk4vPcdBRkZvQZlYyu8j4/Mqz5sgIkddmEnH2Yj2ZrnP9S3tQOvSNRUIgVNF/1yPpRAGNRig==} - engines: {node: '>=14.16'} + ansi-escapes@7.0.0: + resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==} + engines: {node: '>=18'} ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} @@ -2558,8 +2524,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-sequence-parser@1.1.1: @@ -2577,8 +2543,8 @@ packages: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} - ansicolors@0.3.2: - resolution: {integrity: sha512-QXu7BPrP29VllRxH8GwB7x5iX5qWKAAMLqKQGWTeLWVlNHNOpVMJ91dsxQAIWXpjuW5wqvxu3Jd/nRjrJ+0pqg==} + any-promise@1.3.0: + resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} any-signal@3.0.1: resolution: {integrity: sha512-xgZgJtKEa9YmDqXodIgl7Fl1C8yNXr8w6gXjqK3LW4GcEiYT+6AQfJSE/8SPsEpLLmcvbv8YU+qet94UewHxqg==} @@ -2626,8 +2592,8 @@ packages: assert@2.1.0: resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} - astring@1.8.6: - resolution: {integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg==} + astring@1.9.0: + resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true at-least-node@1.0.0: @@ -2637,8 +2603,8 @@ packages: atomically@2.0.3: resolution: {integrity: sha512-kU6FmrwZ3Lx7/7y3hPS5QnbJfaohcIul5fGqf7ok+4KklIEk9tJ0C2IQPdacSbVUWv6zVHXEBWoWd6NrVMT7Cw==} - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -2648,8 +2614,8 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - babel-loader@9.1.3: - resolution: {integrity: sha512-xG3ST4DglodGf8qSwv0MdeWLhrDsw/32QMdTO5T1ZIp9gQur0HkCyFs7Awskr10JKXFXwpAhiCuYX5oGXnRGbw==} + babel-loader@9.2.1: + resolution: {integrity: sha512-fqe8naHt46e0yIdkjUZYqddSXfej3AHajX+CSO5X7oy0EmPc6o5Xh+RClNoHjnieWz9AW4kZxW9yyFMhVB1QLA==} engines: {node: '>= 14.15.0'} peerDependencies: '@babel/core': ^7.12.0 @@ -2663,8 +2629,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -2703,8 +2669,8 @@ packages: resolution: {integrity: sha512-5ZZB5nh6kErcjZ/CTK6lCwTIGlPdkTXbD8+2xLC4Fm0WGh7g2e2lW2bfURw7mvnPtSX1xV+sN4V2ndowSgIiHQ==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - body-parser@1.20.2: - resolution: {integrity: sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==} + body-parser@1.20.3: + resolution: {integrity: sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==} engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} bonjour-service@1.2.1: @@ -2727,8 +2693,8 @@ packages: brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} - braces@3.0.2: - resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} browser-readablestream-to-it@1.0.3: @@ -2737,8 +2703,8 @@ packages: browser-stdout@1.3.1: resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2817,21 +2783,17 @@ packages: caniuse-api@3.0.0: resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} - caniuse-lite@1.0.30001616: - resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} - - cardinal@2.1.1: - resolution: {integrity: sha512-JSr5eOgoEymtYHBjNWyjrMqet9Am2miJhlfKNdqLp6zoeAh0KN5dRAcxlecj5mAJrmQomgiOBj35xHLrFjqBpw==} - hasBin: true + caniuse-lite@1.0.30001677: + resolution: {integrity: sha512-fmfjsOlJUpMWu+mAAtZZZHz7UEwsUxIIvu1TJfO1HqFQvB/B+ii0xr9B5HpbZY/mC4XZ8SvjHJqtAY6pDPQEog==} carstream@1.1.1: resolution: {integrity: sha512-cgn3TqHo6SPsHBTfM5QgXngv6HtwgO1bKCHcdS35vBrweLcYrIG/+UboCbvnIGA0k8NtAYl/DvDdej/9pZGZxQ==} - carstream@2.1.0: - resolution: {integrity: sha512-4kYIT1Y+GW/+o6wxS2tZlKnnINcgm4ceODBmyoLNaiQ17G2FNmzvUnQnVQkugC4NORTMCzD6KZEMT534XMJ4Yw==} + carstream@2.2.0: + resolution: {integrity: sha512-/gHkK0lQjmGM45fhdx8JD+x7a1XS1qUk3T9xWWSt3oZiWPLq4u/lnDstp+N55K7hqTKKlb0CCr43EHTrlbmJSQ==} - cborg@4.2.0: - resolution: {integrity: sha512-q6cFW5m3KxfP/9xGI3yGLaC1l5DP6DWM9IvjiJojnIwohL5CQDl02EXViPV852mOfQo+7PJGPN01MI87vFGzyA==} + cborg@4.2.6: + resolution: {integrity: sha512-77vo4KlSwfjCIXcyZUVei4l2gdjesSCeYSx4U/Upwix7pcWZq8uw21sVRpjwn7mjEi//ieJPTj1MRWDHmud1Rg==} hasBin: true ccount@2.0.1: @@ -2872,16 +2834,12 @@ packages: resolution: {integrity: sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==} engines: {node: '>= 6'} - chokidar@3.5.3: - resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} - engines: {node: '>= 8.10.0'} - chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} - chrome-trace-event@1.0.3: - resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==} + chrome-trace-event@1.0.4: + resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} ci-info@3.9.0: @@ -2896,10 +2854,6 @@ packages: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} - clean-stack@4.2.0: - resolution: {integrity: sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==} - engines: {node: '>=12'} - cli-boxes@3.0.0: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} @@ -2908,12 +2862,17 @@ packages: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + cli-highlight@2.1.11: + resolution: {integrity: sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==} + engines: {node: '>=8.0.0', npm: '>=5.0.0'} + hasBin: true + cli-spinners@2.9.2: resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} engines: {node: '>=6'} - cli-table3@0.6.4: - resolution: {integrity: sha512-Lm3L0p+/npIQWNIiyF/nAn7T5dnOwR3xNTHXYEBFBFVPXzCVNZ5lqEC/1eo/EVfpDsQ1I+TX4ORPQgp+UI0CRw==} + cli-table3@0.6.5: + resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} cli-truncate@3.1.0: @@ -2998,8 +2957,8 @@ packages: resolution: {integrity: sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==} engines: {node: '>= 0.6'} - compression@1.7.4: - resolution: {integrity: sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==} + compression@1.7.5: + resolution: {integrity: sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q==} engines: {node: '>= 0.8.0'} concat-map@0.0.1: @@ -3020,8 +2979,9 @@ packages: resolution: {integrity: sha512-U73+6lQFmfiNPrYbXqr6kZ1i1wiRqXnp2nhMsINseWXO8lDau0LGEffJ8kQi4EjLZympVgRdvqjAgiZ1tgzDDA==} engines: {node: '>=0.8'} - consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} + consola@3.2.3: + resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} + engines: {node: ^14.18.0 || >=16.10.0} content-disposition@0.5.2: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} @@ -3041,8 +3001,8 @@ packages: cookie-signature@1.0.6: resolution: {integrity: sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==} - cookie@0.6.0: - resolution: {integrity: sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==} + cookie@0.7.1: + resolution: {integrity: sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==} engines: {node: '>= 0.6'} copy-file@11.0.0: @@ -3059,14 +3019,14 @@ packages: peerDependencies: webpack: ^5.1.0 - core-js-compat@3.37.0: - resolution: {integrity: sha512-vYq4L+T8aS5UuFg4UwDhc7YNRWVeVZwltad9C/jV3R2LgVOpS9BDr7l/WL6BN0dbV3k1XejPTHqqEzJgsa0frA==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} - core-js-pure@3.37.0: - resolution: {integrity: sha512-d3BrpyFr5eD4KcbRvQ3FTUx/KWmaDesr7+a3+1+P46IUnNoEt+oiLijPINZMEon7w9oGkIINWxrBAU9DEciwFQ==} + core-js-pure@3.39.0: + resolution: {integrity: sha512-7fEcWwKI4rJinnK+wLTezeg2smbFFdSBP6E2kQZNbnzM2s1rpKQ6aaRteZSSg7FLU3P0HGGVo/gbpfanU36urg==} - core-js@3.37.0: - resolution: {integrity: sha512-fu5vHevQ8ZG4og+LXug8ulUtVxjOcEYvifJr7L5Bfq9GOztVqsKd9/59hUk2ZSbCrS3BqUr3EpaYGIYzq7g3Ug==} + core-js@3.39.0: + resolution: {integrity: sha512-raM0ew0/jJUqkJ0E6e8UDtl+y/7ktFivgWvqw8dNSQeNWoSDLvQ1H/RN3aPXB9tBd4/FhyR4RDPGhsNIMsAn7g==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3088,8 +3048,8 @@ packages: typescript: optional: true - cpy@11.0.1: - resolution: {integrity: sha512-VIvf1QNOHnIZ5QT8zWxNJq+YYIpbFhgeMwnVngX+AhhUQd3Rns3x6gcvb0fGpNxZQ0q629mX6+GvDtvbO/Hutg==} + cpy@11.1.0: + resolution: {integrity: sha512-QGHetPSSuprVs+lJmMDcivvrBwTKASzXQ5qxFvRC2RFESjjod71bDvFvhxTjDgkNjrrb72AI6JPjfYwxrIy33A==} engines: {node: '>=18'} cross-spawn@6.0.5: @@ -3237,6 +3197,15 @@ packages: supports-color: optional: true + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + decamelize@4.0.0: resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} engines: {node: '>=10'} @@ -3319,17 +3288,14 @@ packages: engines: {node: '>= 4.2.1'} hasBin: true - detect-port@1.5.1: - resolution: {integrity: sha512-aBzdj76lueB6uUst5iAs7+0H/oOjqI5D16XUWxlWMIMROhcM0rfsNVk93zTngq1dDNpoXRr++Sus7ETAExppAQ==} + detect-port@1.6.1: + resolution: {integrity: sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q==} + engines: {node: '>= 4.0.0'} hasBin: true devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} - engines: {node: '>=0.3.1'} - diff@5.2.0: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} @@ -3402,11 +3368,11 @@ packages: resolution: {integrity: sha512-M9qw6oUILGVrcENMSRRefE1MbHPIz0h79EKIeJWK9v563aT9Qkh8aEHPO1H5vi970wPirNY+jO9OpFoLiMsMGA==} engines: {node: '>=6'} - electron-to-chromium@1.4.757: - resolution: {integrity: sha512-jftDaCknYSSt/+KKeXzH3LX5E2CvRLm75P3Hj+J/dv3CL0qUYcOt13d5FN1NiL5IJbbhzHrb3BomeG2tkSlZmw==} + electron-to-chromium@1.5.50: + resolution: {integrity: sha512-eMVObiUQ2LdgeO1F/ySTXsvqvxb6ZH2zPGaMYsWzRDdOddUa77tdmI0ltg+L16UpbWdhPmuF3wIQYyQq65WfZw==} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} + emoji-regex@10.4.0: + resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -3421,18 +3387,22 @@ packages: resolution: {integrity: sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==} engines: {node: '>= 4'} - emoticon@4.0.1: - resolution: {integrity: sha512-dqx7eA9YaqyvYtUhJwT4rC1HIp82j5ybS1/vQ42ur+jBe17dJMwZE4+gvL1XadSFfxaPFFGt3Xsw+Y8akThDlw==} + emoticon@4.1.0: + resolution: {integrity: sha512-VWZfnxqwNcc51hIy/sbOdEem6D+cVtpPzEEtVAFdaas30+1dgkyaOQ4sQ6Bp0tOMqWO1v+HQfYaoodOkdhK6SQ==} encodeurl@1.0.2: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encodeurl@2.0.0: + resolution: {integrity: sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg==} + engines: {node: '>= 0.8'} + encoding@0.1.13: resolution: {integrity: sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==} - enhanced-resolve@5.16.0: - resolution: {integrity: sha512-O+QWCviPNSSLAD9Ucn8Awv+poAkqn3T1XY5/N7kR7rQO9yfSGWkYZDwpJ+iKF7B8rxaQKWngSqACpgzeapSyoA==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} engines: {node: '>=10.13.0'} entail@2.1.2: @@ -3450,6 +3420,10 @@ packages: resolution: {integrity: sha512-dtJUTepzMW3Lm/NPxRf3wP4642UWhjL2sQxc+ym2YMj1m/H2zDNQOlezafzkHwn6sMstjHTwG6iQQsctDW/b1A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + err-code@3.0.1: resolution: {integrity: sha512-GiaH0KJUewYok+eeY05IIgjtAe4Yltygk9Wqp1V5yVWLdhf0hYZchRjNIT9bb0mSwRcIusT3cx7PJUf3zEIfUA==} @@ -3468,8 +3442,8 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-module-lexer@1.5.2: - resolution: {integrity: sha512-l60ETUTmLqbVbVHv1J4/qj+M8nq7AwMzEcg3kmJDt9dCNrTk+yHcYFf/Kw75pMDwd9mPcIGCG5LcS20SxYRzFA==} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} @@ -3483,6 +3457,12 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esast-util-from-estree@2.0.0: + resolution: {integrity: sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ==} + + esast-util-from-js@2.0.1: + resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild-plugin-wasm@1.1.0: resolution: {integrity: sha512-0bQ6+1tUbySSnxzn5jnXHMDvYnT0cN/Wd4Syk8g/sqAIJUg7buTIi22svS3Qz6ssx895NT+TgLPb33xi1OkZig==} engines: {node: '>=0.10.0'} @@ -3492,8 +3472,8 @@ packages: engines: {node: '>=12'} hasBin: true - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-goat@4.0.0: @@ -3533,8 +3513,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true @@ -3548,8 +3528,8 @@ packages: engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -3573,11 +3553,14 @@ packages: estree-util-is-identifier-name@3.0.0: resolution: {integrity: sha512-hFtqIDZTIUZ9BXLb8y4pYGyk6+wekIivNVTcmvk8NoOh+VeRn5y6cEHzbURrWbfp1fIqdVipilzj+lfaadNZmg==} + estree-util-scope@1.0.0: + resolution: {integrity: sha512-2CAASclonf+JFWBNJPndcOpA8EMJwa0Q8LUFJEKqXLW6+qBvbFZuF5gItbQOs/umBUkjviCSDCbBwU2cXbmrhQ==} + estree-util-to-js@2.0.0: resolution: {integrity: sha512-WDF+xj5rRWmD5tj6bIqRi6CkLIXbbNQUcxQHzGysQzvHmdYG2G7p/Tf0J0gpxGgkeMZNTIjT/AoSvC9Xehcgdg==} - estree-util-value-to-estree@3.1.1: - resolution: {integrity: sha512-5mvUrF2suuv5f5cGDnDphIy4/gW86z82kl5qG6mM9z04SEQI4FB5Apmaw/TGEf3l55nLtMs5s51dmhUzvAHQCA==} + estree-util-value-to-estree@3.2.1: + resolution: {integrity: sha512-Vt2UOjyPbNQQgT5eJh+K5aATti0OjCIAGc9SgMdOFYbohuifsWclR74l0iZTJwePMgWYdX1hlVS+dedH9XV8kw==} estree-util-visit@2.0.0: resolution: {integrity: sha512-m5KgiH85xAhhW8Wta0vShLcUvOsh3LLPI2YVwcbio1l7E09NTLL1EyMZFM1OyWowoH0skScNbhOPl4kcBgzTww==} @@ -3637,8 +3620,8 @@ packages: resolution: {integrity: sha512-A5EmesHW6rfnZ9ysHQjPdJRni0SRar0tjtG5MNtm9n5TUvsYU8oozprtRD4AqHxcZWWlVuAmQo2nWKfN9oyjTw==} engines: {node: '>=0.10.0'} - express@4.19.2: - resolution: {integrity: sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==} + express@4.21.1: + resolution: {integrity: sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ==} engines: {node: '>= 0.10.0'} extend-shallow@2.0.1: @@ -3664,8 +3647,8 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fast-url-parser@1.1.3: - resolution: {integrity: sha512-5jOCVXADYNuRkKFzNJ0dCCewsZiYo0dz8QNYljkOpFC6r2U4OBmKtvm/Tsuh4w1YYdDqDb31a8TVhBJ2OJKdqQ==} + fast-uri@3.0.3: + resolution: {integrity: sha512-aLrHthzCjH5He4Z2H9YZ+v6Ujb9ocRuW6ZzkJQOrTxleEijANq4v1TsaPaVG1PZcuurEzrLcWRyYBYXD5cEiaw==} fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} @@ -3684,6 +3667,10 @@ packages: fflate@0.8.2: resolution: {integrity: sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + file-entry-cache@6.0.1: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3698,12 +3685,12 @@ packages: resolution: {integrity: sha512-pjmC+bkIF8XI7fWaH8KxHcZL3DPybs1roSKP4rKDvy20tAWwIObE4+JIseG2byfGKhud5ZnM4YSGKBz7Sh0ndQ==} engines: {node: '>= 0.4.0'} - fill-range@7.0.1: - resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - finalhandler@1.2.0: - resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} + finalhandler@1.3.1: + resolution: {integrity: sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==} engines: {node: '>= 0.8'} find-cache-dir@4.0.0: @@ -3737,8 +3724,8 @@ packages: flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} - follow-redirects@1.15.6: - resolution: {integrity: sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -3753,8 +3740,8 @@ packages: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} fork-ts-checker-webpack-plugin@6.5.3: @@ -3923,8 +3910,8 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} gopd@1.0.1: @@ -4002,14 +3989,14 @@ packages: hast-util-parse-selector@4.0.0: resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==} - hast-util-raw@9.0.3: - resolution: {integrity: sha512-ICWvVOF2fq4+7CMmtCPD5CM4QKjPbHpPotE6+8tDooV0ZuyJVUzHsrNX+O5NaRbieTf0F7FfeBOMAwi6Td0+yQ==} + hast-util-raw@9.0.4: + resolution: {integrity: sha512-LHE65TD2YiNsHD3YuXcKPHXPLuYh/gjp12mOfU8jxSrm1f/yJpsb0F/KKljS6U9LJoP0Ux+tCe8iJ2AsPzTdgA==} hast-util-to-estree@3.1.0: resolution: {integrity: sha512-lfX5g6hqVh9kjS/B9E2gSkvHH4SZNiQFiqWS0x9fENzEl+8W12RqdRxX6d/Cwxi30tPQs3bIO+aolQJNp1bIyw==} - hast-util-to-jsx-runtime@2.3.0: - resolution: {integrity: sha512-H/y0+IWPdsLLS738P8tDnrQ8Z+dj12zQQ6WC11TIM21C8WFVoIxcqWXf2H3hiTVZjF1AWqoimGwrTWecWrnmRQ==} + hast-util-to-jsx-runtime@2.3.2: + resolution: {integrity: sha512-1ngXYb+V9UT5h+PxNRa1O1FYguZK/XL+gkeqvp7EdHlB9oHUG0eYRo/vY5inBdcqo3RkPMC58/H94HvkbfGdyg==} hast-util-to-parse5@8.0.0: resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==} @@ -4024,6 +4011,9 @@ packages: resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} hasBin: true + highlight.js@10.7.3: + resolution: {integrity: sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==} + history@4.10.1: resolution: {integrity: sha512-36nwAD620w12kuzPAsyINPWJqlNbij+hpK1k9XRloDtym8mxzGYl2c17LnV6IAGB2Dmg4tEa7G7DlawS0+qjew==} @@ -4063,8 +4053,8 @@ packages: html-void-elements@3.0.0: resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - html-webpack-plugin@5.6.0: - resolution: {integrity: sha512-iwaY4wzbe48AfKLZ/Cc8k0L+FKG6oSNRaZ8x5A/T/IVDGyXcbHncM9TdDa93wn0FsSm82FhTKW7f3vS61thXAw==} + html-webpack-plugin@5.6.3: + resolution: {integrity: sha512-QSf1yjtSAsmf7rYBV7XX86uua4W/vkhIt0xNXKbsi2foEeW7vjJQz4bhnpL3xH+l1ryl1680uNv968Z+X6jSYg==} engines: {node: '>=10.13.0'} peerDependencies: '@rspack/core': 0.x || 1.x @@ -4098,8 +4088,8 @@ packages: http-parser-js@0.5.8: resolution: {integrity: sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==} - http-proxy-middleware@2.0.6: - resolution: {integrity: sha512-ya/UeJ6HVBYxrgYotAZo1KvPWlgB48kUJLDePFeneHsVujFaW5WNj2NgWCAE//B1Dl02BIfYlpNgBy8Kf8Rjmw==} + http-proxy-middleware@2.0.7: + resolution: {integrity: sha512-fgVY8AV7qU7z/MmXJ/rxwbrtQH4jBQ9m7kp3llF0liB7glmFeVZFBepQb32T3y8n8k2+AEYuMPCpinYW+/CuRA==} engines: {node: '>=12.0.0'} peerDependencies: '@types/express': ^4.17.13 @@ -4148,8 +4138,8 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} image-size@1.1.1: @@ -4176,12 +4166,8 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} - indent-string@5.0.0: - resolution: {integrity: sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==} - engines: {node: '>=12'} - - infima@0.2.0-alpha.43: - resolution: {integrity: sha512-2uw57LvUqW0rK/SWYnd/2rRfxNA5DDNOh33jxF7fy46VWoNhGxiUQyVZHbBMjQ33mQem0cjdDVwgWVAmlRfgyQ==} + infima@0.2.0-alpha.45: + resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==} engines: {node: '>=12'} inflight@1.0.6: @@ -4204,8 +4190,8 @@ packages: inline-style-parser@0.1.1: resolution: {integrity: sha512-7NXolsK4CAS5+xvdj5OMMbI962hU/wvwoxk+LWR9Ek9bVtyuuYScDN6eS0rUm6TxApFpw7CX1o4uJzcd4AyD3Q==} - inline-style-parser@0.2.3: - resolution: {integrity: sha512-qlD8YNDqyTKTyuITrDOffsl6Tdhv+UC4hcdAVuQsK4IMQ99nSgd1MIA/Q+jQYoh9r3hVUXhYh7urSRmXPkW04g==} + inline-style-parser@0.2.4: + resolution: {integrity: sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q==} interface-blockstore@4.0.1: resolution: {integrity: sha512-ROWKGJls7vLeFaQtI3hZVCJOkUoZ05xAi2t2qysM4d7dwVKrfm5jUOqWh8JgLL7Iup3XqJ0mKXXZuwJ3s03RSw==} @@ -4286,8 +4272,9 @@ packages: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} @@ -4395,9 +4382,6 @@ packages: resolution: {integrity: sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==} engines: {node: '>=0.10.0'} - is-reference@3.0.2: - resolution: {integrity: sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==} - is-regex@1.1.4: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} @@ -4525,8 +4509,8 @@ packages: resolution: {integrity: sha512-ItoBy3dPlNKnhjHR8e7nfabfZzH4Jy2OMPvayYH3XHy4YNqSVKmWTIxhz7KX4UMBsLChlIJZ+5j6csJgrYGQtw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - it-parallel@3.0.7: - resolution: {integrity: sha512-aIIc2t8knfER/mQu4uEHaAYZrnj/2Tdp+Vj6BA94Gi7xghx1kblvpyrLkCYO9K+eDyPS1cE3Vfhh9a20MEmzXA==} + it-parallel@3.0.8: + resolution: {integrity: sha512-URLhs6eG4Hdr4OdvgBBPDzOjBeSSmI+Kqex2rv/aAyYClME26RYHirLVhZsZP5M+ZP6M34iRlXk8Wlqtezuqpg==} it-pipe@2.0.5: resolution: {integrity: sha512-y85nW1N6zoiTnkidr2EAyC+ZVzc7Mwt2p+xt2a2ooG1ThFakSpNw1Kxm+7F13Aivru96brJhjQVRQNU+w0yozw==} @@ -4561,12 +4545,12 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true - joi@17.13.1: - resolution: {integrity: sha512-vaBlIKCyo4FCUtCm7Eu4QZd/q02bWcxfUO6YSXAZOWF6gzcLBeba8kwotUdYJjDLW8Cz8RywsSOqiNJZW0mNvg==} + joi@17.13.3: + resolution: {integrity: sha512-otDA4ldcIx+ZXsKHWmp0YizCweVRZG96J10b0FevjfuncLO1oX59THoAmHkNubYJ+9gWsYsp5k8v4ib6oDv1fA==} js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -4583,13 +4567,9 @@ packages: resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} engines: {node: '>=12.0.0'} - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -4618,8 +4598,8 @@ packages: engines: {node: '>=6'} hasBin: true - jsonc-parser@3.2.1: - resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} + jsonc-parser@3.3.1: + resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==} jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} @@ -4650,8 +4630,8 @@ packages: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} - launch-editor@2.6.1: - resolution: {integrity: sha512-eB/uXmFVpY4zezmGp5XtU21kwo7GBbKB+EQ+UZeWtGb9yAM5xt/Evk+lYH3eRNAtId+ej4u7TYPFZ07w4s7rRw==} + launch-editor@2.9.1: + resolution: {integrity: sha512-Gcnl4Bd+hRO9P9icCP/RVVT2o8SFlPXofuCxvA2SaZuH45whSvf5p8x5oih5ftLiVhEI4sp5xDY+R+b3zJBh5w==} leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} @@ -4665,8 +4645,8 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} lines-and-columns@1.2.4: @@ -4698,8 +4678,8 @@ packages: resolution: {integrity: sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==} engines: {node: '>=8.9.0'} - loader-utils@3.2.1: - resolution: {integrity: sha512-ZvFw1KWS3GVyYBYb7qkmRM/WwL2TQQBxgCK62rlvm4WpVQ23Nb4tYjApUlfjrEGvOs7KHEsmyUn75OHZrJMWPw==} + loader-utils@3.3.1: + resolution: {integrity: sha512-FMJTLMXfCLMLfJxcX9PFqX5qD88Z5MRGaZCVzfuqeZSPsyiBzs+pahDQjbIWz2QIzPZz0NX9Zy4FX3lmK6YHIg==} engines: {node: '>= 12.13.0'} locate-path@3.0.0: @@ -4767,10 +4747,6 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lru-cache@6.0.0: - resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} - engines: {node: '>=10'} - lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} @@ -4785,14 +4761,17 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} - markdown-table@3.0.3: - resolution: {integrity: sha512-Z1NL3Tb1M9wH4XESsCDEksWoKTdlUafKc4pt0GRwjUyXaCFZ+dc3g2erqB6zm3szA2IUSi7VnPI+o/9jnxh9hw==} + markdown-table@2.0.0: + resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} + + markdown-table@3.0.4: + resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} - marked-terminal@6.2.0: - resolution: {integrity: sha512-ubWhwcBFHnXsjYNsu+Wndpg0zhY4CahSpPlA70PlO0rR9r2sZpkyU+rkCsOWH+KMEkx847UpALON+HWgxowFtw==} + marked-terminal@7.2.1: + resolution: {integrity: sha512-rQ1MoMFXZICWNsKMiiHwP/Z+92PLKskTPXj+e7uwXmuMPkNn7iTqC+IvDekVm1MPeC9wYQeLxeFaOvudRR/XbQ==} engines: {node: '>=16.0.0'} peerDependencies: - marked: '>=1 <12' + marked: '>=1 <15' marked@4.3.0: resolution: {integrity: sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==} @@ -4814,14 +4793,14 @@ packages: mdast-util-find-and-replace@3.0.1: resolution: {integrity: sha512-SG21kZHGC3XRTSUhtofZkBzZTJNM5ecCi0SK2IMKmSXR8vO3peL+kb1O0z7Zl83jKtutG4k5Wv/W7V3/YHvzPA==} - mdast-util-from-markdown@2.0.0: - resolution: {integrity: sha512-n7MTOr/z+8NAX/wmhhDji8O3bRvPTV/U0oTCaZJkjhPSKTPhS3xufVhKGF8s1pJ7Ox4QgoIU7KHseh09S+9rTA==} + mdast-util-from-markdown@2.0.2: + resolution: {integrity: sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA==} mdast-util-frontmatter@2.0.1: resolution: {integrity: sha512-LRqI9+wdgC25P0URIJY9vwocIzCcksduHQ9OF2joxQoyTNVduwLAFUzjoopuRJbJAReaKrNQKAZKL3uCMugWJA==} - mdast-util-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-FyzMsduZZHSc3i0Px3PQcBT4WJY/X/RCtEJKuybiC6sjPqLv7h1yqAkmILZtuxMSsUyaLUWNp71+vQH2zqp5cg==} + mdast-util-gfm-autolink-literal@2.0.1: + resolution: {integrity: sha512-5HVP2MKaP6L+G6YaxPNjuL0BPrq9orG3TsrZ9YXbA3vDw/ACI4MEsnoDpn6ZNm7GnZgtAcONJyPhOP8tNJQavQ==} mdast-util-gfm-footnote@2.0.0: resolution: {integrity: sha512-5jOT2boTSVkMnQ7LTrd6n/18kqwjmuYqo7JUPe+tRCY6O7dAuTFMtTPauYYrMPpox9hlN0uOx/FL8XvEfG9/mQ==} @@ -4838,11 +4817,11 @@ packages: mdast-util-gfm@3.0.0: resolution: {integrity: sha512-dgQEX5Amaq+DuUqf26jJqSK9qgixgd6rYDHAv4aTBuA92cTknZlKpPfa86Z/s8Dj8xsAQpFfBmPUHWJBWqS4Bw==} - mdast-util-mdx-expression@2.0.0: - resolution: {integrity: sha512-fGCu8eWdKUKNu5mohVGkhBXCXGnOTLuFqOvGMvdikr+J1w7lDJgxThOKpwRWzzbyXAU2hhSwsmssOY4yTokluw==} + mdast-util-mdx-expression@2.0.1: + resolution: {integrity: sha512-J6f+9hUp+ldTZqKRSg7Vw5V6MqjATc+3E4gf3CFNcuZNWD8XdyI6zQ8GqH7f8169MM6P7hMBRDVGnn7oHB9kXQ==} - mdast-util-mdx-jsx@3.1.2: - resolution: {integrity: sha512-eKMQDeywY2wlHc97k5eD8VC+9ASMjN8ItEZQNGwJ6E0XWKiW/Z0V5/H8pvoXUf+y+Mj0VIgeRRbujBmFn4FTyA==} + mdast-util-mdx-jsx@3.1.3: + resolution: {integrity: sha512-bfOjvNt+1AcbPLTFMFWY149nJz0OjmewJs3LQQ5pIyVGxP4CdOqNVJL6kTaM5c68p8q82Xv3nCyFfUnuEcH3UQ==} mdast-util-mdx@3.0.0: resolution: {integrity: sha512-JfbYLAW7XnYTTbUsmpu0kdBUVe+yKVJZBItEjwyYJiDJuZ9w4eeaqks4HQO+R7objWgS2ymV60GYpI14Ug554w==} @@ -4853,11 +4832,11 @@ packages: mdast-util-phrasing@4.1.0: resolution: {integrity: sha512-TqICwyvJJpBwvGAMZjj4J2n0X8QWp21b9l0o7eXyVJ25YNWYbJDVIyD1bZXE6WtV6RmKJVYmQAKWa0zWOABz2w==} - mdast-util-to-hast@13.1.0: - resolution: {integrity: sha512-/e2l/6+OdGp/FB+ctrJ9Avz71AN/GRH3oi/3KAx/kMnoUsD6q0woXlDT8lLEeViVKE7oZxE7RXzvO3T8kF2/sA==} + mdast-util-to-hast@13.2.0: + resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - mdast-util-to-markdown@2.1.0: - resolution: {integrity: sha512-SR2VnIEdVNCJbP6y7kVTJgPLifdr8WEU440fQec7qHoHOUz/oJ2jmNRqdDQ3rbiStOXb2mCDGTuwsK5OPUgYlQ==} + mdast-util-to-markdown@2.1.2: + resolution: {integrity: sha512-xj68wMTvGXVOKonmog6LwyJKrYXZPvlwabaryTjLh9LuvovB/KAH+kvi8Gjj+7rJjsFi23nkUxRQv1KqSroMqA==} mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} @@ -4880,8 +4859,8 @@ packages: resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} engines: {node: '>= 0.10.0'} - merge-descriptors@1.0.1: - resolution: {integrity: sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==} + merge-descriptors@1.0.3: + resolution: {integrity: sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ==} merge-options@3.0.4: resolution: {integrity: sha512-2Sug1+knBjkaMsMgf1ctR1Ujx+Ayku4EdJN4Z+C2+JzoeF7A3OZ9KM2GY0CpQS51NR61LTurMJrRKPhSs3ZRTQ==} @@ -4904,29 +4883,29 @@ packages: micromark-core-commonmark@2.0.1: resolution: {integrity: sha512-CUQyKr1e///ZODyD1U3xit6zXwy1a8q2a1S1HKtIlmgvurrEpaw/Y9y6KSIbF8P59cn/NjzHyO+Q2fAyYLQrAA==} - micromark-extension-directive@3.0.0: - resolution: {integrity: sha512-61OI07qpQrERc+0wEysLHMvoiO3s2R56x5u7glHq2Yqq6EHbH4dW25G9GfDdGCDYqA21KE6DWgNSzxSwHc2hSg==} + micromark-extension-directive@3.0.2: + resolution: {integrity: sha512-wjcXHgk+PPdmvR58Le9d7zQYWy+vKEU9Se44p2CrCDPiLr2FMyiT4Fyb5UFKFC66wGB3kPlgD7q3TnoqPS7SZA==} micromark-extension-frontmatter@2.0.0: resolution: {integrity: sha512-C4AkuM3dA58cgZha7zVnuVxBhDsbttIMiytjgsM2XbHAB2faRVaHRle40558FBN+DJcrLNCoqG5mlrpdU4cRtg==} - micromark-extension-gfm-autolink-literal@2.0.0: - resolution: {integrity: sha512-rTHfnpt/Q7dEAK1Y5ii0W8bhfJlVJFnJMHIPisfPK3gpVNuOP0VnRl96+YJ3RYWV/P4gFeQoGKNlT3RhuvpqAg==} + micromark-extension-gfm-autolink-literal@2.1.0: + resolution: {integrity: sha512-oOg7knzhicgQ3t4QCjCWgTmfNhvQbDDnJeVu9v81r7NltNCVmhPy1fJRX27pISafdjL+SVc4d3l48Gb6pbRypw==} - micromark-extension-gfm-footnote@2.0.0: - resolution: {integrity: sha512-6Rzu0CYRKDv3BfLAUnZsSlzx3ak6HAoI85KTiijuKIz5UxZxbUI+pD6oHgw+6UtQuiRwnGRhzMmPRv4smcz0fg==} + micromark-extension-gfm-footnote@2.1.0: + resolution: {integrity: sha512-/yPhxI1ntnDNsiHtzLKYnE3vf9JZ6cAisqVDauhp4CEHxlb4uoOTxOCJ+9s51bIB8U1N1FJ1RXOKTIlD5B/gqw==} - micromark-extension-gfm-strikethrough@2.0.0: - resolution: {integrity: sha512-c3BR1ClMp5fxxmwP6AoOY2fXO9U8uFMKs4ADD66ahLTNcwzSCyRVU4k7LPV5Nxo/VJiR4TdzxRQY2v3qIUceCw==} + micromark-extension-gfm-strikethrough@2.1.0: + resolution: {integrity: sha512-ADVjpOOkjz1hhkZLlBiYA9cR2Anf8F4HqZUO6e5eDcPQd0Txw5fxLzzxnEkSkfnD0wziSGiv7sYhk/ktvbf1uw==} - micromark-extension-gfm-table@2.0.0: - resolution: {integrity: sha512-PoHlhypg1ItIucOaHmKE8fbin3vTLpDOUg8KAr8gRCF1MOZI9Nquq2i/44wFvviM4WuxJzc3demT8Y3dkfvYrw==} + micromark-extension-gfm-table@2.1.0: + resolution: {integrity: sha512-Ub2ncQv+fwD70/l4ou27b4YzfNaCJOvyX4HxXU15m7mpYY+rjuWzsLIPZHJL253Z643RpbcP1oeIJlQ/SKW67g==} micromark-extension-gfm-tagfilter@2.0.0: resolution: {integrity: sha512-xHlTOmuCSotIA8TW1mDIM6X2O1SiX5P9IuDtqGonFhEK0qgRI4yeC6vMxEV2dgyr2TiD+2PQ10o+cOhdVAcwfg==} - micromark-extension-gfm-task-list-item@2.0.1: - resolution: {integrity: sha512-cY5PzGcnULaN5O7T+cOzfMoHjBW7j+T9D2sucA5d/KbsBTPcYdebm9zUd9zzdgJGCwahV+/W78Z3nbulBYVbTw==} + micromark-extension-gfm-task-list-item@2.1.0: + resolution: {integrity: sha512-qIBZhqxqI6fjLDYFTBIa4eivDMnP+OZqsNwmQ3xNLE4Cxwc+zfQEfbs6tzAo2Hjq+bh6q5F+Z8/cksrLFYWQQw==} micromark-extension-gfm@3.0.0: resolution: {integrity: sha512-vsKArQsicm7t0z2GugkCKtZehqUm31oeGBV/KVSorWSy8ZlNAv7ytjFhvaryUiCUJYqs+NoE6AFhpQvBTM6Q4w==} @@ -4934,8 +4913,8 @@ packages: micromark-extension-mdx-expression@3.0.0: resolution: {integrity: sha512-sI0nwhUDz97xyzqJAbHQhp5TfaxEvZZZ2JDqUo+7NvyIYG6BZ5CPPqj2ogUoPJlmXHBnyZUzISg9+oUmU6tUjQ==} - micromark-extension-mdx-jsx@3.0.0: - resolution: {integrity: sha512-uvhhss8OGuzR4/N17L1JwvmJIpPhAd8oByMawEKx6NVdBCbesjH4t+vjEp3ZXft9DwvlKSD07fCeI44/N0Vf2w==} + micromark-extension-mdx-jsx@3.0.1: + resolution: {integrity: sha512-vNuFb9czP8QCtAQcEJn0UJQJZA8Dk6DXKBqx+bg/w0WGuSxDxNr7hErW89tHUY31dUW4NqEOWwmEUNhjTFmHkg==} micromark-extension-mdx-md@2.0.0: resolution: {integrity: sha512-EpAiszsB3blw4Rpba7xTOUptcFeBFi+6PY8VnJ2hhimH+vCQDirWgsMpz7w1XcZE7LVrSAUGb9VJpG9ghlYvYQ==} @@ -4952,8 +4931,8 @@ packages: micromark-factory-label@2.0.0: resolution: {integrity: sha512-RR3i96ohZGde//4WSe/dJsxOX6vxIg9TimLAS3i4EhBAFx8Sm5SmqVfR8E87DPSR31nEAjZfbt91OMZWcNgdZw==} - micromark-factory-mdx-expression@2.0.1: - resolution: {integrity: sha512-F0ccWIUHRLRrYp5TC9ZYXmZo+p2AM13ggbsW4T0b5CRKP8KHVRB8t4pwtBgTxtjRmwrK0Irwm7vs2JOZabHZfg==} + micromark-factory-mdx-expression@2.0.2: + resolution: {integrity: sha512-5E5I2pFzJyg2CtemqAbcyCktpHXuJbABnsb32wX2U8IQKhhVFBqkcZR5LRm1WVoFqa4kTueZK4abep7wdo9nrw==} micromark-factory-space@1.1.0: resolution: {integrity: sha512-cRzEj7c0OL4Mw2v6nwzttyOZe8XY/Z8G0rzmWQZTBi/jjwyw/U4uqKtUORXQrR5bAZZnbTI/feRV/R7hc4jQYQ==} @@ -5028,6 +5007,10 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mime-db@1.33.0: resolution: {integrity: sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==} engines: {node: '>= 0.6'} @@ -5036,6 +5019,10 @@ packages: resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} engines: {node: '>= 0.6'} + mime-db@1.53.0: + resolution: {integrity: sha512-oHlN/w+3MQ3rba9rqFr6V/ypF10LSkdwUysQL7GkXoTgIWeV+tcXGA852TBxH+gsh8UWoyhR1hKcoMJTuWflpg==} + engines: {node: '>= 0.6'} + mime-types@2.1.18: resolution: {integrity: sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==} engines: {node: '>= 0.6'} @@ -5065,8 +5052,8 @@ packages: resolution: {integrity: sha512-e5ISH9xMYU0DzrT+jl8q2ze9D6eWBto+I8CNpe+VI+K2J/F/k3PdkdTdz4wvGVH4NTpo+NRYTVIuMQEMMcsLqg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - mini-css-extract-plugin@2.9.0: - resolution: {integrity: sha512-Zs1YsZVfemekSZG+44vBsYTLQORkPMwnlv+aehcxK/NLKC+EGhDB39/YePYYqx/sTk6NnYpuqikhSn7+JIevTA==} + mini-css-extract-plugin@2.9.2: + resolution: {integrity: sha512-GJuACcS//jtq4kCtd5ii/M0SZf7OZRH+BxdqXZHaJfb8TJiVl+NgQRPwiYt2EuqeSkNydn/7vP+bcE27C5mb9w==} engines: {node: '>= 12.13.0'} peerDependencies: webpack: ^5.0.0 @@ -5077,8 +5064,8 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@5.0.1: - resolution: {integrity: sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==} + minimatch@5.1.6: + resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} minimatch@7.4.6: @@ -5089,10 +5076,6 @@ packages: resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -5104,8 +5087,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mocha@10.4.0: - resolution: {integrity: sha512-eqhGB8JKapEYcC4ytX/xrzKforgEc3j1pGlAXVy3eRwrtAy5/nIfT1SvgGzfN0XZZxeLq0aQWkOUAmqIJiv+bA==} + mocha@10.8.2: + resolution: {integrity: sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==} engines: {node: '>= 14.0.0'} hasBin: true @@ -5138,11 +5121,8 @@ packages: resolution: {integrity: sha512-eajQ/ZH7qXZQR2AgtfpmSMizQzmyYVmCql7pdhldPuYQi4atACekbJaQplk6dWyIi10jCaFnd6pqvcEFXjbaJw==} engines: {node: '>=16.0.0', npm: '>=7.0.0'} - multiformats@13.1.0: - resolution: {integrity: sha512-HzdtdBwxsIkzpeXzhQ5mAhhuxcHbjEHH+JQoxt7hG/2HGFjjwyolLo7hbaexcnhoEuV4e0TNJ8kkpMjiEYY4VQ==} - - multiformats@13.3.0: - resolution: {integrity: sha512-CBiqvsufgmpo01VT5ze94O+uc+Pbf6f/sThlvWss0sBZmAOu6GQn5usrYV2sf2mr17FWYc0rO8c/CNe2T90QAA==} + multiformats@13.3.1: + resolution: {integrity: sha512-QxowxTNwJ3r5RMctoGA5p13w5RbRT2QDkoM+yFlqfLiioBp78nhDjnRLvmSBI9+KAqN4VdgOVWM9c0CHd86m3g==} multimatch@5.0.0: resolution: {integrity: sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==} @@ -5152,13 +5132,16 @@ packages: resolution: {integrity: sha512-/sF3ee6zvScXMb1XFJ8gDsSnY+X8PbOyjIuBhtgis10W2Jx4ZjIhikUCIF9c4gpJxVnQIsPAFrSwTCuAjicP6g==} engines: {node: '>=8.0.0'} + mz@2.7.0: + resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - nanoid@5.0.7: - resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} + nanoid@5.0.8: + resolution: {integrity: sha512-TcJPw+9RV9dibz1hHUzlLVy8N4X9TnwirAjrU08Juo6BNKggzVfP2ZJ/3ZUSq15Xl5i85i+Z89XBO90pB2PghQ==} engines: {node: ^18 || >=20} hasBin: true @@ -5174,6 +5157,10 @@ packages: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} + negotiator@0.6.4: + resolution: {integrity: sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w==} + engines: {node: '>= 0.6'} + neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} @@ -5203,8 +5190,8 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -5240,12 +5227,19 @@ packages: nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + null-loader@4.0.1: + resolution: {integrity: sha512-pxqVbi4U6N26lq+LmgIbB5XATP0VdZKOG25DhHi8btMmJJefGArFyDg1yc4U3hWCJbMqSrw0qyrz1UQX+qYXqg==} + engines: {node: '>= 10.13.0'} + peerDependencies: + webpack: ^4.0.0 || ^5.0.0 + object-assign@4.1.1: resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} engines: {node: '>=0.10.0'} - object-inspect@1.13.1: - resolution: {integrity: sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==} + object-inspect@1.13.2: + resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} + engines: {node: '>= 0.4'} object-is@1.1.6: resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} @@ -5319,9 +5313,9 @@ packages: p-fifo@1.0.0: resolution: {integrity: sha512-IjoCxXW48tqdtDFz6fqo5q1UfFVjjVZe8TC1QRflvNUJtNfCUhxOUw6MOVZhDPjqhSzc26xKdugsO17gmzd5+A==} - p-filter@3.0.0: - resolution: {integrity: sha512-QtoWLjXAW++uTX67HZQz1dbTpqBfiidsB6VtQUC9iR85S120+s0T5sO6s+B5MLzFcZkrEd/DGMmCjR+f2Qpxwg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + p-filter@4.1.0: + resolution: {integrity: sha512-37/tPdZ3oJwHaS3gNJdenCDB3Tz26i9sjhnguBtvN0vYlRIiDNnvTWkuh+0hETV9rLPdJ3rlL3yVOYPIAnM8rw==} + engines: {node: '>=18'} p-limit@2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} @@ -5351,14 +5345,14 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} - p-map@5.5.0: - resolution: {integrity: sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==} - engines: {node: '>=12'} - p-map@6.0.0: resolution: {integrity: sha512-T8BatKGY+k5rU+Q/GTYgrEf2r4xRMevAN5mtXc2aPc4rS1j3s+vWTaO2Wag94neXuCAUAs8cxBL9EeB5EA6diw==} engines: {node: '>=16'} + p-map@7.0.2: + resolution: {integrity: sha512-z4cYYMMdKHzw4O5UkWJImbZynVIo0lSGTXc7bzB1e/rrDqkgGUNysK/o4bTr+0+xKvvLoTyGqYC4Fgljy9qe1Q==} + engines: {node: '>=18'} + p-queue@7.4.1: resolution: {integrity: sha512-vRpMXmIkYF2/1hLBKisKeVYJZ8S2tZ0zEAmIJgdVKP2nq0nh4qCdf8bgw+ZgKrkh71AOCaqzwbJJk1WtdcF3VA==} engines: {node: '>=12'} @@ -5375,8 +5369,8 @@ packages: resolution: {integrity: sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==} engines: {node: '>=12'} - p-timeout@6.1.2: - resolution: {integrity: sha512-UbD77BuZ9Bc9aABo74gfXhNvzC9Tx7SxtHSh1fxvx3jTLLYvmVhiQZZrJzqqU0jKbN32kb5VOKiLEQI/3bIjgQ==} + p-timeout@6.1.3: + resolution: {integrity: sha512-UJUyfKbwvr/uZSV6btANfb+0t/mOhKV/KXcCUTp8FcQI+v/0d+wXqH4htrW0E4rR6WiEO/EPvUFiV9D5OI4vlw==} engines: {node: '>=14.16'} p-try@2.2.0: @@ -5387,8 +5381,8 @@ packages: resolution: {integrity: sha512-lwx6u1CotQYPVju77R+D0vFomni/AqRfqLmqQ8hekklqZ6gAY9rONh7lBQ0uxWMkC2AuX9b2DVAl8To0NyP1JA==} engines: {node: '>=12'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} package-json@8.1.1: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} @@ -5419,11 +5413,20 @@ packages: resolution: {integrity: sha512-1Y1A//QUXEZK7YKz+rD9WydcE1+EuPr6ZBgKecAB8tmoW6UFv0NREVJe1p+jRxtThkcbbKkfwIbWJe/IeE6m2Q==} engines: {node: '>=0.10.0'} - parse5-htmlparser2-tree-adapter@7.0.0: - resolution: {integrity: sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==} + parse5-htmlparser2-tree-adapter@6.0.1: + resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5@5.1.1: + resolution: {integrity: sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==} + + parse5@6.0.1: + resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} @@ -5473,17 +5476,17 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} - path-to-regexp@0.1.7: - resolution: {integrity: sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==} + path-to-regexp@0.1.10: + resolution: {integrity: sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w==} - path-to-regexp@1.8.0: - resolution: {integrity: sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==} + path-to-regexp@1.9.0: + resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} - path-to-regexp@2.2.1: - resolution: {integrity: sha512-gu9bD6Ta5bwGrrU8muHzVOBFFREpp2iRkVfhBJahwJ6p6Xw20SjT0MxLnwkjOibQmGSYhiUnf2FLe7k+jcFmGQ==} + path-to-regexp@3.3.0: + resolution: {integrity: sha512-qyCH421YQPS2WFDxDjftfc1ZR5WKQzVzqsp4n9M2kQhVOo/ByahFoUNJfl58kOcEGfQ//7weFTDhm+ss8Ecxgw==} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@3.0.0: resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==} @@ -5497,12 +5500,6 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - periscopic@3.1.0: - resolution: {integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==} - - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -5751,8 +5748,8 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-sort-media-queries@5.2.0: @@ -5782,10 +5779,6 @@ packages: peerDependencies: postcss: ^8.4.31 - postcss@8.4.38: - resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} - engines: {node: ^10 || ^12 || >=14} - postcss@8.4.47: resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} @@ -5811,8 +5804,8 @@ packages: resolution: {integrity: sha512-28iF6xPQrP8Oa6uxE6a1biz+lWeTOAPKggvjB8HAs6nVMKZwf5bG++632Dx614hIWgUPkgivRfG+a8uAXGTIbA==} engines: {node: '>=4'} - prism-react-renderer@2.3.1: - resolution: {integrity: sha512-Rdf+HzBLR7KYjzpJ1rSoxT9ioO85nZngQEoFIhL07XhtJHlCU3SOz0GJ6+qvMyQe0Se+BV3qpe6Yd/NmQF5Juw==} + prism-react-renderer@2.4.0: + resolution: {integrity: sha512-327BsVCD/unU4CNLZTWVHyUHKnsqcvj2qbPlQ8MiBE2eq2rgctjigPA1Gp9HLF83kZ20zNN6jgizHJeEsyFYOw==} peerDependencies: react: '>=16.0.0' @@ -5840,17 +5833,14 @@ packages: proto-list@1.2.4: resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==} - protobufjs@7.2.6: - resolution: {integrity: sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==} + protobufjs@7.4.0: + resolution: {integrity: sha512-mRUWCc3KUU4w1jU8sGxICXH/gNS94DvI1gxqDvBzhj1JpcsimQkYiOJfwsPUykUI5ZaspFbSgmBLER8IrQ3tqw==} engines: {node: '>=12.0.0'} proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} - punycode@1.4.1: - resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} - punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -5859,8 +5849,8 @@ packages: resolution: {integrity: sha512-FLpr4flz5xZTSJxSeaheeMKN/EDzMdK7b8PTOC6a5PYFKTucWbdqjgqaEyH0shFiSJrVB1+Qqi4Tk19ccU6Aug==} engines: {node: '>=12.20'} - qs@6.11.0: - resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==} + qs@6.13.0: + resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} engines: {node: '>=0.6'} queue-microtask@1.2.3: @@ -5930,8 +5920,8 @@ packages: react-is@16.13.1: resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==} - react-json-view-lite@1.4.0: - resolution: {integrity: sha512-wh6F6uJyYAmQ4fK0e8dSQMEWuvTs2Wr3el3sLD9bambX1+pSWUVXIz1RFaoy3TI1mZ0FqdpKq9YgbgTTgyrmXA==} + react-json-view-lite@1.5.0: + resolution: {integrity: sha512-nWqA1E4jKPklL2jvHWs6s+7Na0qNgw9HCP6xehdQJeg6nPBTFZgGwyko9Q0oj+jQWKTTVRS30u0toM5wiuL3iw==} engines: {node: '>=14'} peerDependencies: react: ^16.13.1 || ^17.0.0 || ^18.0.0 @@ -5988,15 +5978,24 @@ packages: resolution: {integrity: sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw==} engines: {node: '>= 0.10'} + recma-build-jsx@1.0.0: + resolution: {integrity: sha512-8GtdyqaBcDfva+GUKDr3nev3VpKAhup1+RvkMvUxURHpW7QyIvk9F5wz7Vzo06CEMSilw6uArgRqhpiUcWp8ew==} + + recma-jsx@1.0.0: + resolution: {integrity: sha512-5vwkv65qWwYxg+Atz95acp8DMu1JDSqdGkA2Of1j6rCreyFUE/gp15fC8MnGEuG1W68UKjM6x6+YTWIh7hZM/Q==} + + recma-parse@1.0.0: + resolution: {integrity: sha512-OYLsIGBB5Y5wjnSnQW6t3Xg7q3fQ7FWbw/vcXtORTnyaSFscOtABg+7Pnz6YZ6c27fG1/aN8CjfwoUEUIdwqWQ==} + + recma-stringify@1.0.0: + resolution: {integrity: sha512-cjwII1MdIIVloKvC9ErQ+OgAtwHBmcZ0Bg4ciz78FtbT8In39aAYbaA7zvxQ61xVMSPE8WxhLwLbhif4Js2C+g==} + recursive-readdir@2.2.3: resolution: {integrity: sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==} engines: {node: '>=6.0.0'} - redeyed@2.1.1: - resolution: {integrity: sha512-FNpGGo1DycYAdnrKFxCMmKYgo/mILAqtRYbkdQD8Ep/Hk2PQ5+aEAEx+IU713RTDmuBaH0c8P5ZozurNu5ObRQ==} - - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} regenerate@1.4.2: @@ -6008,12 +6007,12 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} engines: {node: '>=4'} registry-auth-token@5.0.2: @@ -6024,13 +6023,19 @@ packages: resolution: {integrity: sha512-+crtS5QjFRqFCoQmvGduwYWEBng99ZvmFvF+cUJkGYF1L1BfU8C6Zp9T7f5vPAwyLkUExpvK+ANVZmGU49qi4Q==} engines: {node: '>=12'} - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} hasBin: true rehype-raw@7.0.0: resolution: {integrity: sha512-/aE8hCfKlQeA8LmyeyQvQF3eBiLRGNlfBJEvWH7ivp9sBqs7TNqBL5X3v157rM4IFETqDnIOO+z5M/biZbo9Ww==} + rehype-recma@1.0.0: + resolution: {integrity: sha512-lqA4rGUf1JmacCNWWZx0Wv1dHqMwxzsDWYMTowuplHF3xH0N/MmrZ/G3BDZnzAkRmxDadujCjaKM2hqYdCBOGw==} + relateurl@0.2.7: resolution: {integrity: sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==} engines: {node: '>= 0.10'} @@ -6048,14 +6053,14 @@ packages: remark-gfm@4.0.0: resolution: {integrity: sha512-U92vJgBPkbw4Zfu/IiW2oTZLSL3Zpv+uI7My2eq8JxKgqraFdU8YUGicEJCEgSbeaG+QDFqIcwwfMTOEelPxuA==} - remark-mdx@3.0.1: - resolution: {integrity: sha512-3Pz3yPQ5Rht2pM5R+0J2MrGoBSrzf+tJG94N+t/ilfdh8YLyyKYtidAYwTveB20BoHAcwIopOUqhcmh2F7hGYA==} + remark-mdx@3.1.0: + resolution: {integrity: sha512-Ngl/H3YXyBV9RcRNdlYsZujAmhsxwzxpDzpDEhFBVAGthS4GDgnctpDjgFl/ULx5UEDzqtW1cyBSNKqYYrqLBA==} remark-parse@11.0.0: resolution: {integrity: sha512-FCxlKLNGknS5ba/1lmpYijMUzX2esxW5xQqjWxw2eHFfS2MSdaHVINFmhjo+qN1WhZhNimq0dZATN9pH0IDrpA==} - remark-rehype@11.1.0: - resolution: {integrity: sha512-z3tJrAs2kIs1AqIIy6pzHmAHlF1hWQ+OdY4/hv+Wxe35EhyLKcajL33iUEn3ScxtFox9nUvRufR/Zre8Q08H/g==} + remark-rehype@11.1.1: + resolution: {integrity: sha512-g/osARvjkBXb6Wo0XvAeXQohVta8i84ACbenPpoSsxTOQH/Ae0/RGP4WZgnMH5pMLpsj4FG7OHmcIcXxpza8eQ==} remark-stringify@11.0.0: resolution: {integrity: sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw==} @@ -6063,6 +6068,10 @@ packages: renderkid@3.0.0: resolution: {integrity: sha512-q/7VIQA8lmM1hF+jn+sFSPWGlMkSAeNYcPLmDQx2zzuiDfaLrOmumR8iaUKlenFgh0XRPIUeSPlH3A+AW3Z5pg==} + repeat-string@1.6.1: + resolution: {integrity: sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==} + engines: {node: '>=0.10'} + require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -6118,8 +6127,8 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} + rfdc@1.4.1: + resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} @@ -6129,8 +6138,8 @@ packages: rtl-detect@1.1.2: resolution: {integrity: sha512-PGMBq03+TTG/p/cRB7HCLKJ1MgDIi07+QU1faSjiYRfmY5UsAttV9Hs08jDAHVwcOwmVLcSJkpwyfXszVjWfIQ==} - rtlcss@4.1.1: - resolution: {integrity: sha512-/oVHgBtnPNcggP2aVXQjSy6N1mMAfHg4GSag0QtZBlD5bdDgAHwr4pydqJGd+SUCu9260+Pjqbjwtvu7EMH1KQ==} + rtlcss@4.3.0: + resolution: {integrity: sha512-FI+pHEn7Wc4NqKXMXFM+VAYKEj/mRIcW4h24YVwVtyjI+EqGrLc2Hx/Ny0lrZ21cBWU2goLy36eqMcNj3AQJig==} engines: {node: '>=12.0.0'} hasBin: true @@ -6161,8 +6170,8 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} - sax@1.3.0: - resolution: {integrity: sha512-0s+oAmw9zLl1V1cS9BtZN7JAd0cW5e0QH4W3LWEK6a4LaLEA2OTpGYWDY+6XasBLtz6wkm3u1xRw95mRuJ59WA==} + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} scheduler@0.23.2: resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} @@ -6179,8 +6188,8 @@ packages: resolution: {integrity: sha512-L0jRsrPpjdckP3oPug3/VxNKt2trR8TcabrM6FOAAlvC/9Phcmm+cuAgTlxBqdBR1WJx7Naj9WHw+aOmheSVbw==} engines: {node: '>= 12.13.0'} - search-insights@2.13.0: - resolution: {integrity: sha512-Orrsjf9trHHxFRuo9/rzm0KIWmgzE8RMlZMzuhZOJ01Rnz3D0YBAe+V6473t6/H6c7irs6Lt48brULAiRWb3Vw==} + search-insights@2.17.2: + resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} @@ -6208,30 +6217,27 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.6.0: - resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true - send@0.18.0: - resolution: {integrity: sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==} + send@0.19.0: + resolution: {integrity: sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==} engines: {node: '>= 0.8.0'} - serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - serialize-javascript@6.0.2: resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==} - serve-handler@6.1.5: - resolution: {integrity: sha512-ijPFle6Hwe8zfmBxJdE+5fta53fdIY0lHISJvuikXB3VYFafRjMRpOffSPvCYsbKyBA7pvy9oYr/BT1O3EArlg==} + serve-handler@6.1.6: + resolution: {integrity: sha512-x5RL9Y2p5+Sh3D38Fh9i/iQ5ZK+e4xuXRd/pGbM4D13tgo/MGwbttUk8emytcr1YYzBYs+apnUngBDFYfpjPuQ==} serve-index@1.9.1: resolution: {integrity: sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==} engines: {node: '>= 0.8.0'} - serve-static@1.15.0: - resolution: {integrity: sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==} + serve-static@1.16.2: + resolution: {integrity: sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==} engines: {node: '>= 0.8.0'} set-function-length@1.2.2: @@ -6304,8 +6310,8 @@ packages: sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} - sitemap@7.1.1: - resolution: {integrity: sha512-mK3aFtjz4VdJN0igpIJrinf3EO8U8mxOPsTBzSsy06UtjZQJ3YY3o3Xa7zSc5nMqcMrRwlChHZ18Kxg0caiPBg==} + sitemap@7.1.2: + resolution: {integrity: sha512-ARCqzHJ0p4gWt+j7NlU5eDlIO9+Rkr/JhPFZKKQ1l5GCus7rJH4UdrlVAh0xC/gDS/Qir2UMxqYNHtsKr2rpCw==} engines: {node: '>=12.0.0', npm: '>=5.6.0'} hasBin: true @@ -6339,10 +6345,6 @@ packages: resolution: {integrity: sha512-0xtkGhWCC9MGt/EzgnvbbbKhqWjl1+/rncmhTh5qCpbYguXh6S/qwePfv/JQ8jePXXmqingylxoC49pCkSPIbA==} engines: {node: '>= 6.3.0'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} - engines: {node: '>=0.10.0'} - source-map-js@1.2.1: resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} @@ -6376,8 +6378,8 @@ packages: spdx-expression-parse@4.0.0: resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.17: - resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} + spdx-license-ids@3.0.20: + resolution: {integrity: sha512-jg25NiDV/1fLtSgEgyvVyDunvaNHbuwF9lfNV17gSmPFAlYzdfNBlLtLzXTevwkPj7DhGbmN9VnmJIgLnhvaBw==} spdy-transport@3.0.0: resolution: {integrity: sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==} @@ -6496,8 +6498,8 @@ packages: style-to-object@0.4.4: resolution: {integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg==} - style-to-object@1.0.6: - resolution: {integrity: sha512-khxq+Qm3xEyZfKd/y9L3oIWQimxuc4STrQKtQn8aSDRHb8mFgpukgX1hdzfrMEW6JCjyJ8p89x+IUMVnCBI1PA==} + style-to-object@1.0.8: + resolution: {integrity: sha512-xT47I/Eo0rwJmaXC4oilDGDWLohVhR6o/xAQcPQN8q6QBuZVL8qMYL85kLmST5cPjAorwvqIA4qXTRQoYHaL6g==} stylehacks@6.1.1: resolution: {integrity: sha512-gSTTEQ670cJNoaeIp9KX6lZmm8LJ3jPB5yJmX8Zq/wQxOsAFXV3qjWzHas3YYk1qesuVIyYWWUpZ0vSE/dTSGg==} @@ -6517,8 +6519,8 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} - supports-hyperlinks@3.0.0: - resolution: {integrity: sha512-QBDPHyPQDRTy9ku4URNGY5Lah8PAaXs6tAAwp55sL5WCsSW7GIfdf6W5ixfziW+t7wh3GVvHyHHyQ1ESsoRvaA==} + supports-hyperlinks@3.1.0: + resolution: {integrity: sha512-2rn0BZ+/f7puLOHZm1HOJfwBggfaHXUpPUSSG/SWM4TWp5KCfmNYwnC3hruy2rZlMnmWZ+QAGpZfchu3f3695A==} engines: {node: '>=14.18'} supports-preserve-symlinks-flag@1.0.0: @@ -6528,8 +6530,8 @@ packages: svg-parser@2.0.4: resolution: {integrity: sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ==} - svgo@3.2.0: - resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} + svgo@3.3.2: + resolution: {integrity: sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==} engines: {node: '>=14.0.0'} hasBin: true @@ -6568,8 +6570,8 @@ packages: uglify-js: optional: true - terser@5.31.0: - resolution: {integrity: sha512-Q1JFAoUKE5IMfI4Z/lkE/E6+SwgzO+x4tq4v1AyBLRj8VSYvRO6A/rQrPg1yud4g0En9EKI1TvFRF2tQFcoUkg==} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true @@ -6584,6 +6586,13 @@ packages: text-table@0.2.0: resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + thenify-all@1.6.0: + resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} + engines: {node: '>=0.8'} + + thenify@3.3.1: + resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} + thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -6593,10 +6602,6 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -6622,8 +6627,8 @@ packages: resolution: {integrity: sha512-kr8SKKw94OI+xTGOkfsvwZQ8mWoikZDd2n8XZHjJVZUARZT+4/VV6cacRS6CLsH9bNm+HFIPU1Zx4CnNnb4qlQ==} engines: {node: '>=6'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -6631,8 +6636,8 @@ packages: ts-expose-internals-conditionally@1.0.0-empty.0: resolution: {integrity: sha512-F8m9NOF6ZhdOClDVdlM8gj3fDCav4ZIFSs/EI3ksQbAAXVSCN/Jh5OCJDDZWBuBy9psFc6jULGDlPwjMYMhJDw==} - tslib@2.6.2: - resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -6642,10 +6647,18 @@ packages: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} + type-detect@4.1.0: + resolution: {integrity: sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==} + engines: {node: '>=4'} + type-fest@0.20.2: resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} engines: {node: '>=10'} + type-fest@0.21.3: + resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} + engines: {node: '>=10'} + type-fest@1.4.0: resolution: {integrity: sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==} engines: {node: '>=10'} @@ -6658,8 +6671,8 @@ packages: resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} engines: {node: '>=14.16'} - type-fest@4.18.2: - resolution: {integrity: sha512-+suCYpfJLAe4OXS6+PPXjW3urOS4IoP9waSiLuXfLgqZODKw/aWwASvzqE886wA0kQgGy0mIWyhd87VpqIy6Xg==} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} type-is@1.6.18: @@ -6712,11 +6725,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - typescript@5.7.0-beta: - resolution: {integrity: sha512-opDlmEnzKdl082N5piLS43lsyugg0aORdv+XnNzMv5yP5VtBWuZhFDxU8lizmhW+PEFa/fZiShYRBxKsrkTDMQ==} - engines: {node: '>=14.17'} - hasBin: true - uglify-js@3.19.3: resolution: {integrity: sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ==} engines: {node: '>=0.8.0'} @@ -6728,17 +6736,17 @@ packages: uint8arrays@4.0.10: resolution: {integrity: sha512-AnJNUGGDJAgFw/eWu/Xb9zrVKEGlwJJCaeInlf3BkecE/zcTobk5YXYIPNQJO1q5Hh1QZrQQHf0JvcHqz2hqoA==} - uint8arrays@5.0.3: - resolution: {integrity: sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ==} + uint8arrays@5.1.0: + resolution: {integrity: sha512-vA6nFepEmlSKkMBnLBaUMVvAC4G3CTmO58C12y4sq6WPDOR7mOFYOi7GlrQ4djeSbP6JG9Pv9tJDM97PedRSww==} unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + undici-types@6.19.8: + resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - unicode-canonical-property-names-ecmascript@2.0.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} unicode-emoji-modifier-base@1.0.0: @@ -6749,8 +6757,8 @@ packages: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -6761,8 +6769,8 @@ packages: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} - unified@11.0.4: - resolution: {integrity: sha512-apMPnyLjAX+ty4OrNap7yumyVAMlKx5IWU2wlzzUdYJO9A8f1p9m/gywF/GM2ZDFcjQPrx59Mc90KwmxsoklxQ==} + unified@11.0.5: + resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} unique-string@3.0.0: resolution: {integrity: sha512-VGXBUVwxKMBUznyffQweQABPRRW1vHZAbadFZud4pLFAqRGvv/96vafgjWFqzourzr8YonlQiPgH0YCJfawoGQ==} @@ -6777,9 +6785,6 @@ packages: unist-util-position@5.0.0: resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - unist-util-remove-position@5.0.0: - resolution: {integrity: sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==} - unist-util-stringify-position@4.0.0: resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} @@ -6797,8 +6802,8 @@ packages: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - update-browserslist-db@1.0.15: - resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -6846,8 +6851,8 @@ packages: engines: {node: '>=8'} hasBin: true - v8-to-istanbul@9.2.0: - resolution: {integrity: sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==} + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} validate-npm-package-license@3.0.4: @@ -6867,14 +6872,14 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vfile-location@5.0.2: - resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==} + vfile-location@5.0.3: + resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} vfile-message@4.0.2: resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - vfile@6.0.1: - resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==} + vfile@6.0.3: + resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} vscode-oniguruma@1.7.0: resolution: {integrity: sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==} @@ -6887,8 +6892,8 @@ packages: engines: {node: '>=0.1.95'} hasBin: true - watchpack@2.4.1: - resolution: {integrity: sha512-8wrBCMtVhqcXP2Sup1ctSkga6uc2Bx0IIvKyT7yTFier5AXHooSI+QyQQAtTb7+E0IUCCKyTFmXqdqgum2XWGg==} + watchpack@2.4.2: + resolution: {integrity: sha512-TnbFSbcOCcDgjZ4piURLCbJ3nJhznVh9kw6F6iokjiFPl8ONxe9A6nMDVXDiNbrSfLILs6vB07F7wLBrwPYzJw==} engines: {node: '>=10.13.0'} wbuf@1.7.3: @@ -6935,12 +6940,16 @@ packages: resolution: {integrity: sha512-+4zXKdx7UnO+1jaN4l2lHVD+mFvnlZQP/6ljaJVb4SZiwIKeUnrT5l0gkT8z+n4hKpC+jpOv6O9R+gLtag7pSA==} engines: {node: '>=10.0.0'} + webpack-merge@6.0.1: + resolution: {integrity: sha512-hXXvrjtx2PLYx4qruKl+kyRSLc52V+cCvMxRjmKwoA+CBbbF5GfIBtR6kCvl0fYGqTUPKB+1ktVmTHqMOzgCBg==} + engines: {node: '>=18.0.0'} + webpack-sources@3.2.3: resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} engines: {node: '>=10.13.0'} - webpack@5.91.0: - resolution: {integrity: sha512-rzVwlLeBWHJbmgTC/8TvAcu5vpJNII+MelQpylD4jNERPwpBJOE2lEcko1zJX3QJeLjTTAnQxn/OJ8bjDzVQaw==} + webpack@5.96.1: + resolution: {integrity: sha512-l2LlBSvVZGhL4ZrPwyr8+37AunkcYj5qh8o6u2/2rzoPc8gxFJkLj1WxNgooi9pnoc06jh0BjuXnamM4qlujZA==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -6949,9 +6958,9 @@ packages: webpack-cli: optional: true - webpackbar@5.0.2: - resolution: {integrity: sha512-BmFJo7veBDgQzfWXl/wwYXr/VFus0614qZ8i9znqcl9fnEdiVkdbi0TedLQ6xAK92HZHDJ0QmyQ0fmuZPAgCYQ==} - engines: {node: '>=12'} + webpackbar@6.0.1: + resolution: {integrity: sha512-TnErZpmuKdwWBdMoexjio3KKX6ZtoKHRVvLIU0A47R0VVBDtx3ZyOJDktgYixhoJokZTYTt1Z37OkO9pnGJa9Q==} + engines: {node: '>=14.21.3'} peerDependencies: webpack: 3 || 4 || 5 @@ -6966,8 +6975,8 @@ packages: whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} - when-exit@2.1.2: - resolution: {integrity: sha512-u9J+toaf3CCxCAzM/484qNAxQE75rFdVgiFEEV8Xps2gzYhf0tx73s1WXDQhkwV17E3MxRMz40m7Ekd2/121Lg==} + when-exit@2.1.3: + resolution: {integrity: sha512-uVieSTccFIr/SFQdFWN/fFaQYmV37OKtuaGphMAzi4DmmUlrvRBJW5WSLkHyjNQY/ePJMz3LoiX9R3yy1Su6Hw==} which-boxed-primitive@1.0.2: resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} @@ -6999,8 +7008,8 @@ packages: wordwrap@1.0.0: resolution: {integrity: sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==} - workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} + workerpool@6.5.1: + resolution: {integrity: sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==} wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} @@ -7016,8 +7025,8 @@ packages: write-file-atomic@3.0.3: resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - ws@7.5.9: - resolution: {integrity: sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==} + ws@7.5.10: + resolution: {integrity: sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ==} engines: {node: '>=8.3.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7028,8 +7037,8 @@ packages: utf-8-validate: optional: true - ws@8.17.0: - resolution: {integrity: sha512-uJq6108EgZMAl20KagGkzCKfMEjxmKvZHG7Tlq0Z6nOky7YF7aq4mOx6xK8TJ/i1LeK4Qus7INktacctDgY8Ow==} + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -7055,9 +7064,6 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yallist@4.0.0: - resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} - yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -7066,10 +7072,6 @@ packages: resolution: {integrity: sha512-2eHWfjaoXgTBC2jNM1LRef62VQa0umtvRiDSk6HSzW7RvS5YtkabJrwYLLEKWBc8a5U2PTSCs+dJjUTJdlHsWQ==} engines: {node: '>= 14'} - yargs-parser@20.2.4: - resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} - engines: {node: '>=10'} - yargs-parser@20.2.9: resolution: {integrity: sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==} engines: {node: '>=10'} @@ -7094,8 +7096,8 @@ packages: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} - yocto-queue@1.0.0: - resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + yocto-queue@1.1.1: + resolution: {integrity: sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==} engines: {node: '>=12.20'} zwitch@2.0.4: @@ -7103,941 +7105,974 @@ packages: snapshots: - '@algolia/autocomplete-core@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-core@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) + '@algolia/autocomplete-plugin-algolia-insights': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - search-insights - '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0)': + '@algolia/autocomplete-plugin-algolia-insights@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - search-insights: 2.13.0 + '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) + search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - algoliasearch - '@algolia/autocomplete-preset-algolia@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': + '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': + dependencies: + '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 + + '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': dependencies: - '@algolia/autocomplete-shared': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 - '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)': + '@algolia/autocomplete-shared@1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)': dependencies: - '@algolia/client-search': 4.23.3 - algoliasearch: 4.23.3 + '@algolia/client-search': 5.12.0 + algoliasearch: 5.12.0 - '@algolia/cache-browser-local-storage@4.23.3': + '@algolia/cache-browser-local-storage@4.24.0': dependencies: - '@algolia/cache-common': 4.23.3 + '@algolia/cache-common': 4.24.0 - '@algolia/cache-common@4.23.3': {} + '@algolia/cache-common@4.24.0': {} - '@algolia/cache-in-memory@4.23.3': + '@algolia/cache-in-memory@4.24.0': dependencies: - '@algolia/cache-common': 4.23.3 + '@algolia/cache-common': 4.24.0 - '@algolia/client-account@4.23.3': + '@algolia/client-abtesting@5.12.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/client-analytics@4.23.3': + '@algolia/client-account@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-common@4.23.3': + '@algolia/client-analytics@4.24.0': dependencies: - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/client-personalization@4.23.3': + '@algolia/client-analytics@5.12.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/client-search@4.23.3': + '@algolia/client-common@4.24.0': dependencies: - '@algolia/client-common': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/events@4.0.1': {} + '@algolia/client-common@5.12.0': {} - '@algolia/logger-common@4.23.3': {} + '@algolia/client-insights@5.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/logger-console@4.23.3': + '@algolia/client-personalization@4.24.0': dependencies: - '@algolia/logger-common': 4.23.3 + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/recommend@4.23.3': + '@algolia/client-personalization@5.12.0': dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/requester-browser-xhr@4.23.3': + '@algolia/client-query-suggestions@5.12.0': dependencies: - '@algolia/requester-common': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/requester-common@4.23.3': {} + '@algolia/client-search@4.24.0': + dependencies: + '@algolia/client-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/transporter': 4.24.0 - '@algolia/requester-node-http@4.23.3': + '@algolia/client-search@5.12.0': dependencies: - '@algolia/requester-common': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@algolia/transporter@4.23.3': + '@algolia/events@4.0.1': {} + + '@algolia/ingestion@1.12.0': dependencies: - '@algolia/cache-common': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/requester-common': 4.23.3 + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 - '@ampproject/remapping@2.3.0': + '@algolia/logger-common@4.24.0': {} + + '@algolia/logger-console@4.24.0': + dependencies: + '@algolia/logger-common': 4.24.0 + + '@algolia/monitoring@1.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + + '@algolia/recommend@4.24.0': + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + '@algolia/recommend@5.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 + + '@algolia/requester-browser-xhr@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-browser-xhr@5.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + + '@algolia/requester-common@4.24.0': {} + + '@algolia/requester-fetch@5.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + + '@algolia/requester-node-http@4.24.0': + dependencies: + '@algolia/requester-common': 4.24.0 + + '@algolia/requester-node-http@5.12.0': + dependencies: + '@algolia/client-common': 5.12.0 + + '@algolia/transporter@4.24.0': + dependencies: + '@algolia/cache-common': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/requester-common': 4.24.0 + + '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 '@andrewbranch/untar.js@1.0.3': {} - '@arethetypeswrong/cli@0.15.3': + '@arethetypeswrong/cli@0.15.4': dependencies: '@arethetypeswrong/core': 0.15.1 chalk: 4.1.2 - cli-table3: 0.6.4 + cli-table3: 0.6.5 commander: 10.0.1 marked: 9.1.6 - marked-terminal: 6.2.0(marked@9.1.6) - semver: 7.6.0 + marked-terminal: 7.2.1(marked@9.1.6) + semver: 7.6.3 '@arethetypeswrong/core@0.15.1': dependencies: '@andrewbranch/untar.js': 1.0.3 fflate: 0.8.2 - semver: 7.6.0 + semver: 7.6.3 ts-expose-internals-conditionally: 1.0.0-empty.0 typescript: 5.3.3 validate-npm-package-name: 5.0.1 '@arr/every@1.0.1': {} - '@babel/code-frame@7.24.2': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.24.5 - picocolors: 1.0.0 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/compat-data@7.24.4': {} + '@babel/compat-data@7.26.2': {} - '@babel/core@7.24.5': + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helpers': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.5': + '@babel/generator@7.26.2': dependencies: - '@babel/types': 7.24.5 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.22.5': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: '@babel/types': 7.26.0 - '@babel/helper-builder-binary-assignment-operator-visitor@7.22.15': + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': dependencies: + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color - '@babel/helper-compilation-targets@7.23.6': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.24.4 - '@babel/helper-validator-option': 7.23.5 - browserslist: 4.23.0 + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-create-regexp-features-plugin@7.22.15(@babel/core@7.24.5)': + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - regexpu-core: 5.3.2 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.5)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - debug: 4.3.4(supports-color@8.1.1) + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7(supports-color@8.1.1) lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-function-name@7.23.0': - dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.5 - - '@babel/helper-hoist-variables@7.22.5': - dependencies: - '@babel/types': 7.24.5 - - '@babel/helper-member-expression-to-functions@7.24.5': + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-imports@7.24.3': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/types': 7.24.5 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color - '@babel/helper-module-transforms@7.24.5(@babel/core@7.24.5)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-simple-access': 7.24.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/helper-optimise-call-expression@7.22.5': + '@babel/helper-optimise-call-expression@7.25.9': dependencies: '@babel/types': 7.26.0 - '@babel/helper-plugin-utils@7.24.5': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-remap-async-to-generator@7.22.20(@babel/core@7.24.5)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-wrap-function': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.5)': + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.24.5 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/helper-simple-access@7.24.5': + '@babel/helper-simple-access@7.25.9': dependencies: + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 - - '@babel/helper-split-export-declaration@7.24.5': - dependencies: - '@babel/types': 7.24.5 - - '@babel/helper-string-parser@7.24.1': {} + transitivePeerDependencies: + - supports-color '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.24.5': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-option@7.25.9': {} - '@babel/helper-wrap-function@7.24.5': + '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/helper-function-name': 7.23.0 - '@babel/template': 7.24.0 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 '@babel/types': 7.26.0 - - '@babel/helpers@7.24.5': - dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.5 - '@babel/types': 7.24.5 transitivePeerDependencies: - supports-color - '@babel/highlight@7.24.5': - dependencies: - '@babel/helper-validator-identifier': 7.24.5 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.0.0 - - '@babel/parser@7.24.5': + '@babel/helpers@7.26.0': dependencies: - '@babel/types': 7.24.5 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@babel/parser@7.26.2': dependencies: '@babel/types': 7.26.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.5)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-import-assertions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 - '@babel/plugin-syntax-import-attributes@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.5)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.5)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.5)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-arrow-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 - '@babel/plugin-transform-async-generator-functions@7.24.3(@babel/core@7.24.5)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-async-to-generator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-remap-async-to-generator': 7.22.20(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-block-scoped-functions@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-block-scoping@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-class-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-class-static-block@7.24.4(@babel/core@7.24.5)': + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-classes@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) - '@babel/helper-split-export-declaration': 7.24.5 - globals: 11.12.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-computed-properties@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/template': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-destructuring@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-dotall-regex@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-duplicate-keys@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-dynamic-import@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-exponentiation-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.22.15 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-export-namespace-from@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-for-of@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-function-name@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-json-strings@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-logical-assignment-operators@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-member-expression-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-amd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-commonjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-simple-access': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-modules-systemjs@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-identifier': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-modules-umd@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-transforms': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-named-capturing-groups-regex@7.22.5(@babel/core@7.24.5)': + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-new-target@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-numeric-separator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-object-rest-spread@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-object-super@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-constant-elements@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-optional-catch-binding@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-optional-chaining@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-parameters@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-private-methods@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-private-property-in-object@7.24.5(@babel/core@7.24.5)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 - '@babel/plugin-transform-property-literals@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-constant-elements@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-display-name@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-runtime@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-react-jsx-development@7.22.5(@babel/core@7.24.5)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.5)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/types': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-react-pure-annotations@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-regenerator@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - regenerator-transform: 0.15.2 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-reserved-words@7.24.1(@babel/core@7.24.5)': + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-runtime@7.24.3(@babel/core@7.24.5)': + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.5 - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) - semver: 6.3.1 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-shorthand-properties@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-spread@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - - '@babel/plugin-transform-sticky-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-template-literals@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-typeof-symbol@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-typescript@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-create-class-features-plugin': 7.24.5(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - '@babel/plugin-syntax-typescript': 7.24.1(@babel/core@7.24.5) - - '@babel/plugin-transform-unicode-escapes@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-property-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/plugin-transform-unicode-sets-regex@7.24.1(@babel/core@7.24.5)': - dependencies: - '@babel/core': 7.24.5 - '@babel/helper-create-regexp-features-plugin': 7.22.15(@babel/core@7.24.5) - '@babel/helper-plugin-utils': 7.24.5 - - '@babel/preset-env@7.24.5(@babel/core@7.24.5)': - dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-compilation-targets': 7.23.6 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.5) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.5) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.5) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-import-assertions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-attributes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.5) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.5) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.5) - '@babel/plugin-transform-arrow-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-async-generator-functions': 7.24.3(@babel/core@7.24.5) - '@babel/plugin-transform-async-to-generator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoped-functions': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-block-scoping': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-class-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-class-static-block': 7.24.4(@babel/core@7.24.5) - '@babel/plugin-transform-classes': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-computed-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-destructuring': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-dotall-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-duplicate-keys': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-dynamic-import': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-exponentiation-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-export-namespace-from': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-for-of': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-function-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-json-strings': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-logical-assignment-operators': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-member-expression-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-amd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-systemjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-umd': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-named-capturing-groups-regex': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-new-target': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-numeric-separator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-object-rest-spread': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-object-super': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-catch-binding': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-optional-chaining': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-parameters': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-private-methods': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-private-property-in-object': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-property-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-regenerator': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-reserved-words': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-shorthand-properties': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-spread': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-sticky-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-template-literals': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typeof-symbol': 7.24.5(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-escapes': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-property-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-regex': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-unicode-sets-regex': 7.24.1(@babel/core@7.24.5) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.5) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.5) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.5) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.37.0 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.5)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/types': 7.24.5 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.0 esutils: 2.0.3 - '@babel/preset-react@7.24.1(@babel/core@7.24.5)': + '@babel/preset-react@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-transform-react-display-name': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx': 7.23.4(@babel/core@7.24.5) - '@babel/plugin-transform-react-jsx-development': 7.22.5(@babel/core@7.24.5) - '@babel/plugin-transform-react-pure-annotations': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/preset-typescript@7.24.1(@babel/core@7.24.5)': + '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@babel/helper-plugin-utils': 7.24.5 - '@babel/helper-validator-option': 7.23.5 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-modules-commonjs': 7.24.1(@babel/core@7.24.5) - '@babel/plugin-transform-typescript': 7.24.5(@babel/core@7.24.5) - - '@babel/regjsgen@0.8.0': {} + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/runtime-corejs3@7.24.5': + '@babel/runtime-corejs3@7.26.0': dependencies: - core-js-pure: 3.37.0 + core-js-pure: 3.39.0 regenerator-runtime: 0.14.1 - '@babel/runtime@7.24.5': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.0': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 - '@babel/traverse@7.24.5': + '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.24.5 - '@babel/parser': 7.24.5 - '@babel/types': 7.24.5 - debug: 4.3.4(supports-color@8.1.1) + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 + debug: 4.3.7(supports-color@8.1.1) globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.5': - dependencies: - '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.24.5 - to-fast-properties: 2.0.0 - '@babel/types@7.26.0': dependencies: '@babel/helper-string-parser': 7.25.9 @@ -8050,100 +8085,149 @@ snapshots: '@discoveryjs/json-ext@0.5.7': {} - '@docsearch/css@3.6.0': {} + '@docsearch/css@3.6.3': {} - '@docsearch/react@3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)': + '@docsearch/react@3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)': dependencies: - '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3)(search-insights@2.13.0) - '@algolia/autocomplete-preset-algolia': 1.9.3(@algolia/client-search@4.23.3)(algoliasearch@4.23.3) - '@docsearch/css': 3.6.0 - algoliasearch: 4.23.3 + '@algolia/autocomplete-core': 1.9.3(@algolia/client-search@5.12.0)(algoliasearch@5.12.0)(search-insights@2.17.2) + '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.12.0)(algoliasearch@5.12.0) + '@docsearch/css': 3.6.3 + algoliasearch: 5.12.0 optionalDependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - search-insights: 2.13.0 + search-insights: 2.17.2 transitivePeerDependencies: - '@algolia/client-search' - '@docusaurus/core@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@babel/core': 7.24.5 - '@babel/generator': 7.24.5 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.5) - '@babel/plugin-transform-runtime': 7.24.3(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-react': 7.24.1(@babel/core@7.24.5) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.5) - '@babel/runtime': 7.24.5 - '@babel/runtime-corejs3': 7.24.5 - '@babel/traverse': 7.24.5 - '@docusaurus/cssnano-preset': 3.3.2 - '@docusaurus/logger': 3.3.2 - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - autoprefixer: 10.4.19(postcss@8.4.38) - babel-loader: 9.1.3(@babel/core@7.24.5)(webpack@5.91.0) + '@docusaurus/babel@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2)': + dependencies: + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-transform-runtime': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) + '@babel/runtime': 7.26.0 + '@babel/runtime-corejs3': 7.26.0 + '@babel/traverse': 7.25.9 + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) babel-plugin-dynamic-import-node: 2.3.3 + fs-extra: 11.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - '@docusaurus/types' + - '@swc/core' + - esbuild + - supports-color + - typescript + - uglify-js + - webpack-cli + + '@docusaurus/bundler@3.6.0(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@babel/core': 7.26.0 + '@docusaurus/babel': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/cssnano-preset': 3.6.0 + '@docusaurus/logger': 3.6.0 + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + autoprefixer: 10.4.20(postcss@8.4.47) + babel-loader: 9.2.1(@babel/core@7.26.0)(webpack@5.96.1) + clean-css: 5.3.3 + copy-webpack-plugin: 11.0.0(webpack@5.96.1) + css-loader: 6.11.0(webpack@5.96.1) + css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.96.1) + cssnano: 6.1.2(postcss@8.4.47) + file-loader: 6.2.0(webpack@5.96.1) + html-minifier-terser: 7.2.0 + mini-css-extract-plugin: 2.9.2(webpack@5.96.1) + null-loader: 4.0.1(webpack@5.96.1) + postcss: 8.4.47 + postcss-loader: 7.3.4(postcss@8.4.47)(typescript@5.2.2)(webpack@5.96.1) + react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.2.2)(webpack@5.96.1) + terser-webpack-plugin: 5.3.10(webpack@5.96.1) + tslib: 2.8.1 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) + webpack: 5.96.1 + webpackbar: 6.0.1(webpack@5.96.1) + transitivePeerDependencies: + - '@parcel/css' + - '@rspack/core' + - '@swc/core' + - '@swc/css' + - acorn + - csso + - esbuild + - eslint + - lightningcss + - react + - react-dom + - supports-color + - typescript + - uglify-js + - vue-template-compiler + - webpack-cli + + '@docusaurus/core@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@docusaurus/babel': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/bundler': 3.6.0(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) boxen: 6.2.1 chalk: 4.1.2 chokidar: 3.6.0 - clean-css: 5.3.3 - cli-table3: 0.6.4 + cli-table3: 0.6.5 combine-promises: 1.2.0 commander: 5.1.0 - copy-webpack-plugin: 11.0.0(webpack@5.91.0) - core-js: 3.37.0 - css-loader: 6.11.0(webpack@5.91.0) - css-minimizer-webpack-plugin: 5.0.1(clean-css@5.3.3)(webpack@5.91.0) - cssnano: 6.1.2(postcss@8.4.38) + core-js: 3.39.0 del: 6.1.1 - detect-port: 1.5.1 + detect-port: 1.6.1 escape-html: 1.0.3 eta: 2.2.0 eval: 0.1.8 - file-loader: 6.2.0(webpack@5.91.0) fs-extra: 11.2.0 - html-minifier-terser: 7.2.0 html-tags: 3.3.1 - html-webpack-plugin: 5.6.0(webpack@5.91.0) + html-webpack-plugin: 5.6.3(webpack@5.96.1) leven: 3.1.0 lodash: 4.17.21 - mini-css-extract-plugin: 2.9.0(webpack@5.91.0) p-map: 4.0.0 - postcss: 8.4.38 - postcss-loader: 7.3.4(postcss@8.4.38)(typescript@5.2.2)(webpack@5.91.0) prompts: 2.4.2 react: 18.3.1 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.2.2)(webpack@5.91.0) + react-dev-utils: 12.0.1(eslint@8.57.1)(typescript@5.2.2)(webpack@5.96.1) react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.91.0) + react-loadable-ssr-addon-v5-slorber: 1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.96.1) react-router: 5.3.4(react@18.3.1) react-router-config: 5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) rtl-detect: 1.1.2 - semver: 7.6.0 - serve-handler: 6.1.5 + semver: 7.6.3 + serve-handler: 6.1.6 shelljs: 0.8.5 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) - tslib: 2.6.2 + tslib: 2.8.1 update-notifier: 6.0.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - webpack: 5.91.0 + webpack: 5.96.1 webpack-bundle-analyzer: 4.10.2 - webpack-dev-server: 4.15.2(webpack@5.91.0) - webpack-merge: 5.10.0 - webpackbar: 5.0.2(webpack@5.91.0) + webpack-dev-server: 4.15.2(webpack@5.96.1) + webpack-merge: 6.0.1 transitivePeerDependencies: + - '@docusaurus/faster' - '@docusaurus/types' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8157,28 +8241,28 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/cssnano-preset@3.3.2': + '@docusaurus/cssnano-preset@3.6.0': dependencies: - cssnano-preset-advanced: 6.1.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-sort-media-queries: 5.2.0(postcss@8.4.38) - tslib: 2.6.2 + cssnano-preset-advanced: 6.1.2(postcss@8.4.47) + postcss: 8.4.47 + postcss-sort-media-queries: 5.2.0(postcss@8.4.47) + tslib: 2.8.1 - '@docusaurus/logger@3.3.2': + '@docusaurus/logger@3.6.0': dependencies: chalk: 4.1.2 - tslib: 2.6.2 + tslib: 2.8.1 - '@docusaurus/mdx-loader@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/mdx-loader@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/logger': 3.3.2 - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@mdx-js/mdx': 3.0.1 + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@slorber/remark-comment': 1.0.0 escape-html: 1.0.3 - estree-util-value-to-estree: 3.1.1 - file-loader: 6.2.0(webpack@5.91.0) + estree-util-value-to-estree: 3.2.1 + file-loader: 6.2.0(webpack@5.96.1) fs-extra: 11.2.0 image-size: 1.1.1 mdast-util-mdx: 3.0.0 @@ -8191,26 +8275,27 @@ snapshots: remark-frontmatter: 5.0.0 remark-gfm: 4.0.0 stringify-object: 3.3.0 - tslib: 2.6.2 - unified: 11.0.4 + tslib: 2.8.1 + unified: 11.0.5 unist-util-visit: 5.0.0 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - vfile: 6.0.1 - webpack: 5.91.0 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) + vfile: 6.0.3 + webpack: 5.96.1 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' + - acorn - esbuild - supports-color - typescript - uglify-js - webpack-cli - '@docusaurus/module-type-aliases@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/module-type-aliases@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 '@types/react-router-dom': 5.3.3 react: 18.3.1 @@ -8219,20 +8304,23 @@ snapshots: react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' transitivePeerDependencies: - '@swc/core' + - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/plugin-content-blog@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.3.2 - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/plugin-content-blog@3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) cheerio: 1.0.0-rc.12 feed: 4.2.2 fs-extra: 11.2.0 @@ -8241,15 +8329,18 @@ snapshots: react-dom: 18.3.1(react@18.3.1) reading-time: 1.5.0 srcset: 4.0.0 - tslib: 2.6.2 + tslib: 2.8.1 unist-util-visit: 5.0.0 utility-types: 3.11.0 - webpack: 5.91.0 + webpack: 5.96.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8263,16 +8354,17 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-docs@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.3.2 - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/module-type-aliases': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) '@types/react-router-config': 5.0.11 combine-promises: 1.2.0 fs-extra: 11.2.0 @@ -8280,14 +8372,17 @@ snapshots: lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 utility-types: 3.11.0 - webpack: 5.91.0 + webpack: 5.96.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8301,23 +8396,26 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-content-pages@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-content-pages@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 - webpack: 5.91.0 + tslib: 2.8.1 + webpack: 5.96.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8331,21 +8429,24 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-debug@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-debug@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - react-json-view-lite: 1.4.0(react@18.3.1) - tslib: 2.6.2 + react-json-view-lite: 1.5.0(react@18.3.1) + tslib: 2.8.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8359,19 +8460,22 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-analytics@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-google-analytics@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8385,20 +8489,23 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-gtag@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-google-gtag@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) '@types/gtag.js': 0.0.12 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8412,19 +8519,22 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-google-tag-manager@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-google-tag-manager@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8438,24 +8548,27 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/plugin-sitemap@3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/plugin-sitemap@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.3.2 - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) fs-extra: 11.2.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - sitemap: 7.1.1 - tslib: 2.6.2 + sitemap: 7.1.2 + tslib: 2.8.1 transitivePeerDependencies: + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' + - acorn - bufferutil - csso - debug @@ -8469,30 +8582,33 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/preset-classic@3.3.2(@algolia/client-search@4.23.3)(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-blog': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-debug': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-analytics': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-gtag': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-google-tag-manager': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-sitemap': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-classic': 3.3.2(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-search-algolia': 3.3.2(@algolia/client-search@4.23.3)(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.2.2) - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/preset-classic@3.6.0(@algolia/client-search@5.12.0)(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.2.2)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-blog': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-pages': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-debug': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-google-analytics': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-google-gtag': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-google-tag-manager': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-sitemap': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-classic': 3.6.0(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-search-algolia': 3.6.0(@algolia/client-search@5.12.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.2.2) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) transitivePeerDependencies: - '@algolia/client-search' + - '@docusaurus/faster' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -8509,44 +8625,47 @@ snapshots: '@docusaurus/react-loadable@6.0.0(react@18.3.1)': dependencies: - '@types/react': 18.3.1 + '@types/react': 18.3.12 react: 18.3.1 - '@docusaurus/theme-classic@3.3.2(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': - dependencies: - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-translations': 3.3.2 - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@mdx-js/react': 3.0.1(@types/react@18.3.1)(react@18.3.1) + '@docusaurus/theme-classic@3.6.0(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + dependencies: + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/module-type-aliases': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-blog': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/plugin-content-pages': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-translations': 3.6.0 + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@mdx-js/react': 3.1.0(@types/react@18.3.12)(react@18.3.1) clsx: 2.1.1 copy-text-to-clipboard: 3.2.0 - infima: 0.2.0-alpha.43 + infima: 0.2.0-alpha.45 lodash: 4.17.21 nprogress: 0.2.0 - postcss: 8.4.38 - prism-react-renderer: 2.3.1(react@18.3.1) + postcss: 8.4.47 + prism-react-renderer: 2.4.0(react@18.3.1) prismjs: 1.29.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-router-dom: 5.3.4(react@18.3.1) - rtlcss: 4.1.1 - tslib: 2.6.2 + rtlcss: 4.3.0 + tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: + - '@docusaurus/faster' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -8560,72 +8679,64 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-common@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': + '@docusaurus/theme-common@3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2)': dependencies: - '@docusaurus/mdx-loader': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/module-type-aliases': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/plugin-content-blog': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-docs': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/plugin-content-pages': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/mdx-loader': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/module-type-aliases': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 '@types/react-router-config': 5.0.11 clsx: 2.1.1 parse-numeric-range: 1.3.0 - prism-react-renderer: 2.3.1(react@18.3.1) + prism-react-renderer: 2.4.0(react@18.3.1) react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: - '@docusaurus/types' - - '@parcel/css' - - '@rspack/core' - '@swc/core' - - '@swc/css' - - bufferutil - - csso - - debug + - acorn - esbuild - - eslint - - lightningcss - supports-color - typescript - uglify-js - - utf-8-validate - - vue-template-compiler - webpack-cli - '@docusaurus/theme-search-algolia@3.3.2(@algolia/client-search@4.23.3)(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@types/react@18.3.1)(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0)(typescript@5.2.2)': - dependencies: - '@docsearch/react': 3.6.0(@algolia/client-search@4.23.3)(@types/react@18.3.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.13.0) - '@docusaurus/core': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/logger': 3.3.2 - '@docusaurus/plugin-content-docs': 3.3.2(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(eslint@8.57.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) - '@docusaurus/theme-translations': 3.3.2 - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-validation': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - algoliasearch: 4.23.3 - algoliasearch-helper: 3.19.0(algoliasearch@4.23.3) + '@docusaurus/theme-search-algolia@3.6.0(@algolia/client-search@5.12.0)(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(@types/react@18.3.12)(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2)(typescript@5.2.2)': + dependencies: + '@docsearch/react': 3.6.3(@algolia/client-search@5.12.0)(@types/react@18.3.12)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(search-insights@2.17.2) + '@docusaurus/core': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/logger': 3.6.0 + '@docusaurus/plugin-content-docs': 3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-common': 3.6.0(@docusaurus/plugin-content-docs@3.6.0(@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1))(acorn@8.14.0)(eslint@8.57.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2))(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(typescript@5.2.2) + '@docusaurus/theme-translations': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-validation': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + algoliasearch: 4.24.0 + algoliasearch-helper: 3.22.5(algoliasearch@4.24.0) clsx: 2.1.1 eta: 2.2.0 fs-extra: 11.2.0 lodash: 4.17.21 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) - tslib: 2.6.2 + tslib: 2.8.1 utility-types: 3.11.0 transitivePeerDependencies: - '@algolia/client-search' + - '@docusaurus/faster' - '@docusaurus/types' + - '@mdx-js/react' - '@parcel/css' - '@rspack/core' - '@swc/core' - '@swc/css' - '@types/react' + - acorn - bufferutil - csso - debug @@ -8640,45 +8751,48 @@ snapshots: - vue-template-compiler - webpack-cli - '@docusaurus/theme-translations@3.3.2': + '@docusaurus/theme-translations@3.6.0': dependencies: fs-extra: 11.2.0 - tslib: 2.6.2 + tslib: 2.8.1 - '@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': + '@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)': dependencies: - '@mdx-js/mdx': 3.0.1 + '@mdx-js/mdx': 3.1.0(acorn@8.14.0) '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 commander: 5.1.0 - joi: 17.13.1 + joi: 17.13.3 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) react-helmet-async: 1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) utility-types: 3.11.0 - webpack: 5.91.0 + webpack: 5.96.1 webpack-merge: 5.10.0 transitivePeerDependencies: - '@swc/core' + - acorn - esbuild - supports-color - uglify-js - webpack-cli - '@docusaurus/utils-common@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': + '@docusaurus/utils-common@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))': dependencies: - tslib: 2.6.2 + tslib: 2.8.1 optionalDependencies: - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - '@docusaurus/utils-validation@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2)': + '@docusaurus/utils-validation@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2)': dependencies: - '@docusaurus/logger': 3.3.2 - '@docusaurus/utils': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) - joi: 17.13.1 + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2) + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + fs-extra: 11.2.0 + joi: 17.13.3 js-yaml: 4.1.0 - tslib: 2.6.2 + lodash: 4.17.21 + tslib: 2.8.1 transitivePeerDependencies: - '@docusaurus/types' - '@swc/core' @@ -8688,29 +8802,30 @@ snapshots: - uglify-js - webpack-cli - '@docusaurus/utils@3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2)': + '@docusaurus/utils@3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(typescript@5.2.2)': dependencies: - '@docusaurus/logger': 3.3.2 - '@docusaurus/utils-common': 3.3.2(@docusaurus/types@3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) + '@docusaurus/logger': 3.6.0 + '@docusaurus/utils-common': 3.6.0(@docusaurus/types@3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)) '@svgr/webpack': 8.1.0(typescript@5.2.2) escape-string-regexp: 4.0.0 - file-loader: 6.2.0(webpack@5.91.0) + file-loader: 6.2.0(webpack@5.96.1) fs-extra: 11.2.0 github-slugger: 1.5.0 globby: 11.1.0 gray-matter: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.6 js-yaml: 4.1.0 lodash: 4.17.21 - micromatch: 4.0.5 + micromatch: 4.0.8 prompts: 2.4.2 resolve-pathname: 3.0.0 shelljs: 0.8.5 - tslib: 2.6.2 - url-loader: 4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0) - webpack: 5.91.0 + tslib: 2.8.1 + url-loader: 4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1) + utility-types: 3.11.0 + webpack: 5.96.1 optionalDependencies: - '@docusaurus/types': 3.3.2(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + '@docusaurus/types': 3.6.0(acorn@8.14.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) transitivePeerDependencies: - '@swc/core' - esbuild @@ -8722,7 +8837,7 @@ snapshots: '@es-joy/jsdoccomment@0.41.0': dependencies: comment-parser: 1.4.1 - esquery: 1.5.0 + esquery: 1.6.0 jsdoc-type-pratt-parser: 4.0.0 '@esbuild/android-arm64@0.19.5': @@ -8791,20 +8906,20 @@ snapshots: '@esbuild/win32-x64@0.19.5': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -8812,7 +8927,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} '@hapi/hoek@9.3.0': {} @@ -8820,10 +8935,10 @@ snapshots: dependencies: '@hapi/hoek': 9.3.0 - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -8832,46 +8947,41 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@ipld/car@5.3.0': + '@ipld/car@5.3.3': dependencies: - '@ipld/dag-cbor': 9.2.0 - cborg: 4.2.0 - multiformats: 13.1.0 + '@ipld/dag-cbor': 9.2.2 + cborg: 4.2.6 + multiformats: 13.3.1 varint: 6.0.0 - '@ipld/dag-cbor@9.2.0': + '@ipld/dag-cbor@9.2.2': dependencies: - cborg: 4.2.0 - multiformats: 13.1.0 + cborg: 4.2.6 + multiformats: 13.3.1 - '@ipld/dag-cbor@9.2.1': + '@ipld/dag-json@10.2.3': dependencies: - cborg: 4.2.0 - multiformats: 13.3.0 + cborg: 4.2.6 + multiformats: 13.3.1 - '@ipld/dag-json@10.2.0': + '@ipld/dag-pb@4.1.3': dependencies: - cborg: 4.2.0 - multiformats: 13.1.0 - - '@ipld/dag-pb@4.1.0': - dependencies: - multiformats: 13.1.0 + multiformats: 13.3.1 '@ipld/dag-ucan@3.4.0': dependencies: - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-json': 10.2.0 + '@ipld/dag-cbor': 9.2.2 + '@ipld/dag-json': 10.2.3 multiformats: 11.0.2 '@ipld/unixfs@2.2.0': dependencies: - '@ipld/dag-pb': 4.1.0 + '@ipld/dag-pb': 4.1.3 '@multiformats/murmur3': 2.1.8 '@perma/map': 1.0.3 actor: 2.3.1 multiformats: 11.0.2 - protobufjs: 7.2.6 + protobufjs: 7.4.0 rabin-rs: 2.1.0 '@isaacs/cliui@8.0.2': @@ -8894,14 +9004,14 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.10 - '@types/yargs': 17.0.32 + '@types/node': 20.17.6 + '@types/yargs': 17.0.33 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} @@ -8913,63 +9023,63 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@leichtgewicht/ip-codec@2.0.5': {} - '@mdx-js/mdx@3.0.1': + '@mdx-js/mdx@3.1.0(acorn@8.14.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 '@types/mdx': 2.0.13 collapse-white-space: 2.1.0 devlop: 1.1.0 - estree-util-build-jsx: 3.0.1 estree-util-is-identifier-name: 3.0.0 - estree-util-to-js: 2.0.0 + estree-util-scope: 1.0.0 estree-walker: 3.0.3 - hast-util-to-estree: 3.1.0 - hast-util-to-jsx-runtime: 2.3.0 + hast-util-to-jsx-runtime: 2.3.2 markdown-extensions: 2.0.0 - periscopic: 3.1.0 - remark-mdx: 3.0.1 + recma-build-jsx: 1.0.0 + recma-jsx: 1.0.0(acorn@8.14.0) + recma-stringify: 1.0.0 + rehype-recma: 1.0.0 + remark-mdx: 3.1.0 remark-parse: 11.0.0 - remark-rehype: 11.1.0 + remark-rehype: 11.1.1 source-map: 0.7.4 - unified: 11.0.4 + unified: 11.0.5 unist-util-position-from-estree: 2.0.0 unist-util-stringify-position: 4.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 transitivePeerDependencies: + - acorn - supports-color - '@mdx-js/react@3.0.1(@types/react@18.3.1)(react@18.3.1)': + '@mdx-js/react@3.1.0(@types/react@18.3.12)(react@18.3.1)': dependencies: '@types/mdx': 2.0.13 - '@types/react': 18.3.1 + '@types/react': 18.3.12 react: 18.3.1 '@multiformats/murmur3@2.1.8': dependencies: - multiformats: 13.1.0 + multiformats: 13.3.1 murmurhash3js-revisited: 3.0.0 - '@noble/curves@1.4.0': + '@noble/curves@1.6.0': dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@noble/ed25519@1.7.3': {} - '@noble/hashes@1.4.0': {} + '@noble/hashes@1.5.0': {} '@nodelib/fs.scandir@2.1.5': dependencies: @@ -8997,7 +9107,7 @@ snapshots: dependencies: graceful-fs: 4.2.10 - '@pnpm/npm-conf@2.2.2': + '@pnpm/npm-conf@2.3.1': dependencies: '@pnpm/config.env-replace': 1.1.0 '@pnpm/network.ca-file': 1.0.2 @@ -9005,7 +9115,7 @@ snapshots: '@polka/url@0.5.0': {} - '@polka/url@1.0.0-next.25': {} + '@polka/url@1.0.0-next.28': {} '@protobufjs/aspromise@1.1.2': {} @@ -9030,12 +9140,12 @@ snapshots: '@protobufjs/utf8@1.1.0': {} - '@scure/base@1.1.6': {} + '@scure/base@1.1.9': {} - '@scure/bip39@1.3.0': + '@scure/bip39@1.4.0': dependencies: - '@noble/hashes': 1.4.0 - '@scure/base': 1.1.6 + '@noble/hashes': 1.5.0 + '@scure/base': 1.1.9 '@sideway/address@4.1.5': dependencies: @@ -9053,10 +9163,6 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@sinonjs/commons@2.0.0': - dependencies: - type-detect: 4.0.8 - '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -9065,17 +9171,17 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers@11.2.2': + '@sinonjs/fake-timers@11.3.1': dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/samsam@8.0.0': + '@sinonjs/samsam@8.0.2': dependencies: - '@sinonjs/commons': 2.0.0 + '@sinonjs/commons': 3.0.1 lodash.get: 4.4.2 - type-detect: 4.0.8 + type-detect: 4.1.0 - '@sinonjs/text-encoding@0.7.2': {} + '@sinonjs/text-encoding@0.7.3': {} '@slorber/remark-comment@1.0.0': dependencies: @@ -9085,54 +9191,54 @@ snapshots: '@storacha/one-webcrypto@1.0.1': {} - '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-remove-jsx-attribute@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-remove-jsx-empty-expression@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-replace-jsx-attribute-value@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-svg-dynamic-title@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-svg-em-dimensions@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-transform-react-native-svg@8.1.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.24.5)': + '@svgr/babel-plugin-transform-svg-component@8.0.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 - '@svgr/babel-preset@8.1.0(@babel/core@7.24.5)': + '@svgr/babel-preset@8.1.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.24.5) - '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.24.5) - '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@svgr/babel-plugin-add-jsx-attribute': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-attribute': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-remove-jsx-empty-expression': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-replace-jsx-attribute-value': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-dynamic-title': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-svg-em-dimensions': 8.0.0(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-react-native-svg': 8.1.0(@babel/core@7.26.0) + '@svgr/babel-plugin-transform-svg-component': 8.0.0(@babel/core@7.26.0) '@svgr/core@8.1.0(typescript@5.2.2)': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) camelcase: 6.3.0 cosmiconfig: 8.3.6(typescript@5.2.2) snake-case: 3.0.4 @@ -9147,8 +9253,8 @@ snapshots: '@svgr/plugin-jsx@8.1.0(@svgr/core@8.1.0(typescript@5.2.2))': dependencies: - '@babel/core': 7.24.5 - '@svgr/babel-preset': 8.1.0(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@svgr/babel-preset': 8.1.0(@babel/core@7.26.0) '@svgr/core': 8.1.0(typescript@5.2.2) '@svgr/hast-util-to-babel-ast': 8.0.0 svg-parser: 2.0.4 @@ -9160,17 +9266,17 @@ snapshots: '@svgr/core': 8.1.0(typescript@5.2.2) cosmiconfig: 8.3.6(typescript@5.2.2) deepmerge: 4.3.1 - svgo: 3.2.0 + svgo: 3.3.2 transitivePeerDependencies: - typescript '@svgr/webpack@8.1.0(typescript@5.2.2)': dependencies: - '@babel/core': 7.24.5 - '@babel/plugin-transform-react-constant-elements': 7.24.1(@babel/core@7.24.5) - '@babel/preset-env': 7.24.5(@babel/core@7.24.5) - '@babel/preset-react': 7.24.1(@babel/core@7.24.5) - '@babel/preset-typescript': 7.24.1(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-constant-elements': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-react': 7.25.9(@babel/core@7.26.0) + '@babel/preset-typescript': 7.26.0(@babel/core@7.26.0) '@svgr/core': 8.1.0(typescript@5.2.2) '@svgr/plugin-jsx': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2)) '@svgr/plugin-svgo': 8.1.0(@svgr/core@8.1.0(typescript@5.2.2))(typescript@5.2.2) @@ -9186,27 +9292,27 @@ snapshots: '@types/acorn@4.0.6': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 - '@types/assert@1.5.10': {} + '@types/assert@1.5.11': {} '@types/body-parser@1.19.5': dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/bonjour@3.5.13': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/connect-history-api-fallback@1.5.4': dependencies: - '@types/express-serve-static-core': 4.19.0 - '@types/node': 20.12.10 + '@types/express-serve-static-core': 5.0.1 + '@types/node': 20.17.6 '@types/connect@3.4.38': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/debug@4.1.12': dependencies: @@ -9214,39 +9320,46 @@ snapshots: '@types/eslint-scope@3.7.7': dependencies: - '@types/eslint': 8.56.10 - '@types/estree': 1.0.5 + '@types/eslint': 9.6.1 + '@types/estree': 1.0.6 - '@types/eslint@8.56.10': + '@types/eslint@9.6.1': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 '@types/estree-jsx@1.0.5': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 + + '@types/estree@1.0.6': {} - '@types/estree@1.0.5': {} + '@types/express-serve-static-core@4.19.6': + dependencies: + '@types/node': 20.17.6 + '@types/qs': 6.9.16 + '@types/range-parser': 1.2.7 + '@types/send': 0.17.4 - '@types/express-serve-static-core@4.19.0': + '@types/express-serve-static-core@5.0.1': dependencies: - '@types/node': 20.12.10 - '@types/qs': 6.9.15 + '@types/node': 20.17.6 + '@types/qs': 6.9.16 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 '@types/express@4.17.21': dependencies: '@types/body-parser': 1.19.5 - '@types/express-serve-static-core': 4.19.0 - '@types/qs': 6.9.15 + '@types/express-serve-static-core': 4.19.6 + '@types/qs': 6.9.16 '@types/serve-static': 1.15.7 '@types/gtag.js@0.0.12': {} '@types/hast@3.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 '@types/history@4.7.11': {} @@ -9256,9 +9369,9 @@ snapshots: '@types/http-errors@2.0.4': {} - '@types/http-proxy@1.17.14': + '@types/http-proxy@1.17.15': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/inquirer@9.0.7': dependencies: @@ -9277,9 +9390,9 @@ snapshots: '@types/json-schema@7.0.15': {} - '@types/mdast@4.0.3': + '@types/mdast@4.0.4': dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 '@types/mdx@2.0.13': {} @@ -9287,50 +9400,50 @@ snapshots: '@types/minimatch@3.0.5': {} - '@types/mocha@10.0.6': {} + '@types/mocha@10.0.9': {} '@types/ms@0.7.34': {} '@types/node-forge@1.3.11': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/node@17.0.45': {} - '@types/node@20.12.10': + '@types/node@20.17.6': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/parse-json@4.0.2': {} - '@types/prismjs@1.26.4': {} + '@types/prismjs@1.26.5': {} - '@types/prop-types@15.7.12': {} + '@types/prop-types@15.7.13': {} - '@types/qs@6.9.15': {} + '@types/qs@6.9.16': {} '@types/range-parser@1.2.7': {} '@types/react-router-config@5.0.11': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 '@types/react-router': 5.1.20 '@types/react-router-dom@5.3.3': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 '@types/react-router': 5.1.20 '@types/react-router@5.1.20': dependencies: '@types/history': 4.7.11 - '@types/react': 18.3.1 + '@types/react': 18.3.12 - '@types/react@18.3.1': + '@types/react@18.3.12': dependencies: - '@types/prop-types': 15.7.12 + '@types/prop-types': 15.7.13 csstype: 3.1.3 '@types/retry@0.12.0': {} @@ -9339,14 +9452,14 @@ snapshots: '@types/sax@1.2.7': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/semver@7.5.8': {} '@types/send@0.17.4': dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/serve-index@1.9.4': dependencies: @@ -9355,7 +9468,7 @@ snapshots: '@types/serve-static@1.15.7': dependencies: '@types/http-errors': 2.0.4 - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/send': 0.17.4 '@types/sinon@10.0.20': @@ -9366,60 +9479,60 @@ snapshots: '@types/sockjs@0.3.36': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/through@0.0.33': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 - '@types/unist@2.0.10': {} + '@types/unist@2.0.11': {} - '@types/unist@3.0.2': {} + '@types/unist@3.0.3': {} '@types/varint@6.0.3': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 - '@types/ws@8.5.10': + '@types/ws@8.5.13': dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.32': + '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta))(eslint@8.57.0)(typescript@5.7.0-beta)': + '@typescript-eslint/eslint-plugin@6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.3.3))(eslint@8.57.1)(typescript@5.3.3)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.3.3) '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) + '@typescript-eslint/type-utils': 6.21.0(eslint@8.57.1)(typescript@5.3.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.7.0-beta) + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.3.3) optionalDependencies: - typescript: 5.7.0-beta + typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': + '@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.3.3)': dependencies: '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 optionalDependencies: - typescript: 5.7.0-beta + typescript: 5.3.3 transitivePeerDependencies: - supports-color @@ -9428,45 +9541,45 @@ snapshots: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - '@typescript-eslint/type-utils@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': + '@typescript-eslint/type-utils@6.21.0(eslint@8.57.1)(typescript@5.3.3)': dependencies: - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.7.0-beta) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.7.0-beta) + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + '@typescript-eslint/utils': 6.21.0(eslint@8.57.1)(typescript@5.3.3) + debug: 4.3.7(supports-color@8.1.1) + eslint: 8.57.1 + ts-api-utils: 1.4.0(typescript@5.3.3) optionalDependencies: - typescript: 5.7.0-beta + typescript: 5.3.3 transitivePeerDependencies: - supports-color '@typescript-eslint/types@6.21.0': {} - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.7.0-beta)': + '@typescript-eslint/typescript-estree@6.21.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 6.21.0 '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.7.0-beta) + semver: 7.6.3 + ts-api-utils: 1.4.0(typescript@5.3.3) optionalDependencies: - typescript: 5.7.0-beta + typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.7.0-beta)': + '@typescript-eslint/utils@6.21.0(eslint@8.57.1)(typescript@5.3.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.7.0-beta) - eslint: 8.57.0 - semver: 7.6.0 + '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.3.3) + eslint: 8.57.1 + semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript @@ -9483,8 +9596,8 @@ snapshots: '@ucanto/core@10.0.1': dependencies: - '@ipld/car': 5.3.0 - '@ipld/dag-cbor': 9.2.0 + '@ipld/car': 5.3.3 + '@ipld/dag-cbor': 9.2.2 '@ipld/dag-ucan': 3.4.0 '@ucanto/interface': 10.0.1 multiformats: 11.0.2 @@ -9497,9 +9610,9 @@ snapshots: '@ucanto/principal@9.0.1': dependencies: '@ipld/dag-ucan': 3.4.0 - '@noble/curves': 1.4.0 + '@noble/curves': 1.6.0 '@noble/ed25519': 1.7.3 - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@ucanto/interface': 10.0.1 multiformats: 11.0.2 one-webcrypto: 1.0.3 @@ -9518,8 +9631,8 @@ snapshots: '@ucanto/validator@9.0.2': dependencies: - '@ipld/car': 5.3.0 - '@ipld/dag-cbor': 9.2.0 + '@ipld/car': 5.3.3 + '@ipld/dag-cbor': 9.2.2 '@ucanto/core': 10.0.1 '@ucanto/interface': 10.0.1 multiformats: 11.0.2 @@ -9576,45 +9689,30 @@ snapshots: carstream: 1.1.1 multiformats: 12.1.3 - '@web3-storage/content-claims@5.0.0': - dependencies: - '@ucanto/client': 9.0.1 - '@ucanto/interface': 10.0.1 - '@ucanto/server': 10.0.0 - '@ucanto/transport': 9.1.1 - carstream: 2.1.0 - multiformats: 13.1.0 - '@web3-storage/content-claims@5.1.3': dependencies: '@ucanto/client': 9.0.1 '@ucanto/interface': 10.0.1 '@ucanto/server': 10.0.0 '@ucanto/transport': 9.1.1 - carstream: 2.1.0 - multiformats: 13.3.0 + carstream: 2.2.0 + multiformats: 13.3.1 '@web3-storage/data-segment@4.0.0': dependencies: - '@ipld/dag-cbor': 9.2.0 - multiformats: 11.0.2 - sync-multihash-sha2: 1.0.0 - - '@web3-storage/data-segment@5.1.0': - dependencies: - '@ipld/dag-cbor': 9.2.0 + '@ipld/dag-cbor': 9.2.2 multiformats: 11.0.2 sync-multihash-sha2: 1.0.0 - '@web3-storage/data-segment@5.2.0': + '@web3-storage/data-segment@5.3.0': dependencies: - '@ipld/dag-cbor': 9.2.1 - multiformats: 13.3.0 + '@ipld/dag-cbor': 9.2.2 + multiformats: 13.3.1 sync-multihash-sha2: 1.0.0 '@web3-storage/sigv4@1.0.2': dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 '@webassemblyjs/ast@1.12.1': dependencies: @@ -9704,21 +9802,19 @@ snapshots: mime-types: 2.1.35 negotiator: 0.6.3 - acorn-import-assertions@1.9.0(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.11.3 - - acorn-jsx@5.3.2(acorn@8.11.3): - dependencies: - acorn: 8.11.3 + acorn: 8.14.0 acorn-loose@8.4.0: dependencies: - acorn: 8.11.3 + acorn: 8.14.0 - acorn-walk@8.3.2: {} + acorn-walk@8.3.4: + dependencies: + acorn: 8.14.0 - acorn@8.11.3: {} + acorn@8.14.0: {} actor@2.3.1: {} @@ -9729,22 +9825,17 @@ snapshots: clean-stack: 2.2.0 indent-string: 4.0.0 - aggregate-error@4.0.1: - dependencies: - clean-stack: 4.2.0 - indent-string: 5.0.0 - - ajv-formats@2.1.1(ajv@8.13.0): + ajv-formats@2.1.1(ajv@8.17.1): optionalDependencies: - ajv: 8.13.0 + ajv: 8.17.1 ajv-keywords@3.5.2(ajv@6.12.6): dependencies: ajv: 6.12.6 - ajv-keywords@5.1.0(ajv@8.13.0): + ajv-keywords@5.1.0(ajv@8.17.1): dependencies: - ajv: 8.13.0 + ajv: 8.17.1 fast-deep-equal: 3.1.3 ajv@6.12.6: @@ -9754,53 +9845,75 @@ snapshots: json-schema-traverse: 0.4.1 uri-js: 4.4.1 - ajv@8.13.0: + ajv@8.17.1: dependencies: fast-deep-equal: 3.1.3 + fast-uri: 3.0.3 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 - uri-js: 4.4.1 - algoliasearch-helper@3.19.0(algoliasearch@4.23.3): + algoliasearch-helper@3.22.5(algoliasearch@4.24.0): dependencies: '@algolia/events': 4.0.1 - algoliasearch: 4.23.3 - - algoliasearch@4.23.3: - dependencies: - '@algolia/cache-browser-local-storage': 4.23.3 - '@algolia/cache-common': 4.23.3 - '@algolia/cache-in-memory': 4.23.3 - '@algolia/client-account': 4.23.3 - '@algolia/client-analytics': 4.23.3 - '@algolia/client-common': 4.23.3 - '@algolia/client-personalization': 4.23.3 - '@algolia/client-search': 4.23.3 - '@algolia/logger-common': 4.23.3 - '@algolia/logger-console': 4.23.3 - '@algolia/recommend': 4.23.3 - '@algolia/requester-browser-xhr': 4.23.3 - '@algolia/requester-common': 4.23.3 - '@algolia/requester-node-http': 4.23.3 - '@algolia/transporter': 4.23.3 + algoliasearch: 4.24.0 + + algoliasearch@4.24.0: + dependencies: + '@algolia/cache-browser-local-storage': 4.24.0 + '@algolia/cache-common': 4.24.0 + '@algolia/cache-in-memory': 4.24.0 + '@algolia/client-account': 4.24.0 + '@algolia/client-analytics': 4.24.0 + '@algolia/client-common': 4.24.0 + '@algolia/client-personalization': 4.24.0 + '@algolia/client-search': 4.24.0 + '@algolia/logger-common': 4.24.0 + '@algolia/logger-console': 4.24.0 + '@algolia/recommend': 4.24.0 + '@algolia/requester-browser-xhr': 4.24.0 + '@algolia/requester-common': 4.24.0 + '@algolia/requester-node-http': 4.24.0 + '@algolia/transporter': 4.24.0 + + algoliasearch@5.12.0: + dependencies: + '@algolia/client-abtesting': 5.12.0 + '@algolia/client-analytics': 5.12.0 + '@algolia/client-common': 5.12.0 + '@algolia/client-insights': 5.12.0 + '@algolia/client-personalization': 5.12.0 + '@algolia/client-query-suggestions': 5.12.0 + '@algolia/client-search': 5.12.0 + '@algolia/ingestion': 1.12.0 + '@algolia/monitoring': 1.12.0 + '@algolia/recommend': 5.12.0 + '@algolia/requester-browser-xhr': 5.12.0 + '@algolia/requester-fetch': 5.12.0 + '@algolia/requester-node-http': 5.12.0 ansi-align@3.0.1: dependencies: string-width: 4.2.3 - ansi-colors@4.1.1: {} + ansi-colors@4.1.3: {} + + ansi-escapes@4.3.2: + dependencies: + type-fest: 0.21.3 ansi-escapes@5.0.0: dependencies: type-fest: 1.4.0 - ansi-escapes@6.2.1: {} + ansi-escapes@7.0.0: + dependencies: + environment: 1.1.0 ansi-html-community@0.0.8: {} ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-sequence-parser@1.1.1: {} @@ -9814,7 +9927,7 @@ snapshots: ansi-styles@6.2.1: {} - ansicolors@0.3.2: {} + any-promise@1.3.0: {} any-signal@3.0.1: {} @@ -9865,61 +9978,61 @@ snapshots: object.assign: 4.1.5 util: 0.12.5 - astring@1.8.6: {} + astring@1.9.0: {} at-least-node@1.0.0: {} atomically@2.0.3: dependencies: stubborn-fs: 1.2.5 - when-exit: 2.1.2 + when-exit: 2.1.3 - autoprefixer@10.4.19(postcss@8.4.38): + autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001616 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001677 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.38 + picocolors: 1.1.1 + postcss: 8.4.47 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: dependencies: possible-typed-array-names: 1.0.0 - babel-loader@9.1.3(@babel/core@7.24.5)(webpack@5.91.0): + babel-loader@9.2.1(@babel/core@7.26.0)(webpack@5.96.1): dependencies: - '@babel/core': 7.24.5 + '@babel/core': 7.26.0 find-cache-dir: 4.0.0 schema-utils: 4.2.0 - webpack: 5.91.0 + webpack: 5.96.1 babel-plugin-dynamic-import-node@2.3.3: dependencies: object.assign: 4.1.5 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.5): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): dependencies: - '@babel/compat-data': 7.24.4 - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.5): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) - core-js-compat: 3.37.0 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.5): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0): dependencies: - '@babel/core': 7.24.5 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.5) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -9954,7 +10067,7 @@ snapshots: it-take: 2.0.1 multiformats: 11.0.2 - body-parser@1.20.2: + body-parser@1.20.3: dependencies: bytes: 3.1.2 content-type: 1.0.5 @@ -9964,7 +10077,7 @@ snapshots: http-errors: 2.0.0 iconv-lite: 0.4.24 on-finished: 2.4.1 - qs: 6.11.0 + qs: 6.13.0 raw-body: 2.5.2 type-is: 1.6.18 unpipe: 1.0.0 @@ -10009,20 +10122,20 @@ snapshots: dependencies: balanced-match: 1.0.2 - braces@3.0.2: + braces@3.0.3: dependencies: - fill-range: 7.0.1 + fill-range: 7.1.1 browser-readablestream-to-it@1.0.3: {} browser-stdout@1.3.1: {} - browserslist@4.23.0: + browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001616 - electron-to-chromium: 1.4.757 - node-releases: 2.0.14 - update-browserslist-db: 1.0.15(browserslist@4.23.0) + caniuse-lite: 1.0.30001677 + electron-to-chromium: 1.5.50 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.2) buffer-from@1.1.2: {} @@ -10042,12 +10155,12 @@ snapshots: '@bcoe/v8-coverage': 0.2.3 '@istanbuljs/schema': 0.1.3 find-up: 5.0.0 - foreground-child: 3.2.1 + foreground-child: 3.3.0 istanbul-lib-coverage: 3.2.2 istanbul-lib-report: 3.0.1 istanbul-reports: 3.1.7 test-exclude: 7.0.1 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -10062,7 +10175,7 @@ snapshots: istanbul-reports: 3.1.7 rimraf: 3.0.2 test-exclude: 6.0.0 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 yargs: 16.2.0 yargs-parser: 20.2.9 @@ -10077,7 +10190,7 @@ snapshots: istanbul-reports: 3.1.7 rimraf: 3.0.2 test-exclude: 6.0.0 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 yargs: 17.7.2 yargs-parser: 21.1.1 @@ -10108,7 +10221,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.2 + tslib: 2.8.1 camelcase@6.3.0: {} @@ -10118,31 +10231,26 @@ snapshots: caniuse-api@3.0.0: dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001616 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001677 lodash.memoize: 4.1.2 lodash.uniq: 4.5.0 - caniuse-lite@1.0.30001616: {} - - cardinal@2.1.1: - dependencies: - ansicolors: 0.3.2 - redeyed: 2.1.1 + caniuse-lite@1.0.30001677: {} carstream@1.1.1: dependencies: - '@ipld/dag-cbor': 9.2.0 + '@ipld/dag-cbor': 9.2.2 multiformats: 12.1.3 uint8arraylist: 2.4.8 - carstream@2.1.0: + carstream@2.2.0: dependencies: - '@ipld/dag-cbor': 9.2.0 - multiformats: 13.1.0 + '@ipld/dag-cbor': 9.2.2 + multiformats: 13.3.1 uint8arraylist: 2.4.8 - cborg@4.2.0: {} + cborg@4.2.6: {} ccount@2.0.1: {} @@ -10185,25 +10293,13 @@ snapshots: domhandler: 5.0.3 domutils: 3.1.0 htmlparser2: 8.0.2 - parse5: 7.1.2 - parse5-htmlparser2-tree-adapter: 7.0.0 - - chokidar@3.5.3: - dependencies: - anymatch: 3.1.3 - braces: 3.0.2 - glob-parent: 5.1.2 - is-binary-path: 2.1.0 - is-glob: 4.0.3 - normalize-path: 3.0.0 - readdirp: 3.6.0 - optionalDependencies: - fsevents: 2.3.3 + parse5: 7.2.1 + parse5-htmlparser2-tree-adapter: 7.1.0 chokidar@3.6.0: dependencies: anymatch: 3.1.3 - braces: 3.0.2 + braces: 3.0.3 glob-parent: 5.1.2 is-binary-path: 2.1.0 is-glob: 4.0.3 @@ -10212,7 +10308,7 @@ snapshots: optionalDependencies: fsevents: 2.3.3 - chrome-trace-event@1.0.3: {} + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -10222,19 +10318,24 @@ snapshots: clean-stack@2.2.0: {} - clean-stack@4.2.0: - dependencies: - escape-string-regexp: 5.0.0 - cli-boxes@3.0.0: {} cli-cursor@4.0.0: dependencies: restore-cursor: 4.0.0 + cli-highlight@2.1.11: + dependencies: + chalk: 4.1.2 + highlight.js: 10.7.3 + mz: 2.7.0 + parse5: 5.1.1 + parse5-htmlparser2-tree-adapter: 6.0.1 + yargs: 16.2.0 + cli-spinners@2.9.2: {} - cli-table3@0.6.4: + cli-table3@0.6.5: dependencies: string-width: 4.2.3 optionalDependencies: @@ -10305,16 +10406,16 @@ snapshots: compressible@2.0.18: dependencies: - mime-db: 1.52.0 + mime-db: 1.53.0 - compression@1.7.4: + compression@1.7.5: dependencies: - accepts: 1.3.8 - bytes: 3.0.0 + bytes: 3.1.2 compressible: 2.0.18 debug: 2.6.9 + negotiator: 0.6.4 on-headers: 1.0.2 - safe-buffer: 5.1.2 + safe-buffer: 5.2.1 vary: 1.1.2 transitivePeerDependencies: - supports-color @@ -10323,14 +10424,14 @@ snapshots: conf@11.0.2: dependencies: - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) atomically: 2.0.3 debounce-fn: 5.1.2 dot-prop: 7.2.0 env-paths: 3.0.0 json-schema-typed: 8.0.1 - semver: 7.6.0 + semver: 7.6.3 config-chain@1.1.13: dependencies: @@ -10347,7 +10448,7 @@ snapshots: connect-history-api-fallback@2.0.0: {} - consola@2.15.3: {} + consola@3.2.3: {} content-disposition@0.5.2: {} @@ -10361,7 +10462,7 @@ snapshots: cookie-signature@1.0.6: {} - cookie@0.6.0: {} + cookie@0.7.1: {} copy-file@11.0.0: dependencies: @@ -10370,7 +10471,7 @@ snapshots: copy-text-to-clipboard@3.2.0: {} - copy-webpack-plugin@11.0.0(webpack@5.91.0): + copy-webpack-plugin@11.0.0(webpack@5.96.1): dependencies: fast-glob: 3.3.2 glob-parent: 6.0.2 @@ -10378,15 +10479,15 @@ snapshots: normalize-path: 3.0.0 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0 + webpack: 5.96.1 - core-js-compat@3.37.0: + core-js-compat@3.39.0: dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 - core-js-pure@3.37.0: {} + core-js-pure@3.39.0: {} - core-js@3.37.0: {} + core-js@3.39.0: {} core-util-is@1.0.3: {} @@ -10415,14 +10516,14 @@ snapshots: optionalDependencies: typescript: 5.2.2 - cpy@11.0.1: + cpy@11.1.0: dependencies: copy-file: 11.0.0 - globby: 13.2.2 + globby: 14.0.2 junk: 4.0.1 - micromatch: 4.0.5 - p-filter: 3.0.0 - p-map: 6.0.0 + micromatch: 4.0.8 + p-filter: 4.1.0 + p-map: 7.0.2 cross-spawn@6.0.5: dependencies: @@ -10442,32 +10543,32 @@ snapshots: dependencies: type-fest: 1.4.0 - css-declaration-sorter@7.2.0(postcss@8.4.38): + css-declaration-sorter@7.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - css-loader@6.11.0(webpack@5.91.0): + css-loader@6.11.0(webpack@5.96.1): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-modules-extract-imports: 3.1.0(postcss@8.4.38) - postcss-modules-local-by-default: 4.0.5(postcss@8.4.38) - postcss-modules-scope: 3.2.0(postcss@8.4.38) - postcss-modules-values: 4.0.0(postcss@8.4.38) + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-modules-extract-imports: 3.1.0(postcss@8.4.47) + postcss-modules-local-by-default: 4.0.5(postcss@8.4.47) + postcss-modules-scope: 3.2.0(postcss@8.4.47) + postcss-modules-values: 4.0.0(postcss@8.4.47) postcss-value-parser: 4.2.0 - semver: 7.6.0 + semver: 7.6.3 optionalDependencies: - webpack: 5.91.0 + webpack: 5.96.1 - css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.91.0): + css-minimizer-webpack-plugin@5.0.1(clean-css@5.3.3)(webpack@5.96.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 - cssnano: 6.1.2(postcss@8.4.38) + cssnano: 6.1.2(postcss@8.4.47) jest-worker: 29.7.0 - postcss: 8.4.38 + postcss: 8.4.47 schema-utils: 4.2.0 serialize-javascript: 6.0.2 - webpack: 5.91.0 + webpack: 5.96.1 optionalDependencies: clean-css: 5.3.3 @@ -10501,60 +10602,60 @@ snapshots: cssesc@3.0.0: {} - cssnano-preset-advanced@6.1.2(postcss@8.4.38): - dependencies: - autoprefixer: 10.4.19(postcss@8.4.38) - browserslist: 4.23.0 - cssnano-preset-default: 6.1.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-discard-unused: 6.0.5(postcss@8.4.38) - postcss-merge-idents: 6.0.3(postcss@8.4.38) - postcss-reduce-idents: 6.0.3(postcss@8.4.38) - postcss-zindex: 6.0.2(postcss@8.4.38) - - cssnano-preset-default@6.1.2(postcss@8.4.38): - dependencies: - browserslist: 4.23.0 - css-declaration-sorter: 7.2.0(postcss@8.4.38) - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-calc: 9.0.1(postcss@8.4.38) - postcss-colormin: 6.1.0(postcss@8.4.38) - postcss-convert-values: 6.1.0(postcss@8.4.38) - postcss-discard-comments: 6.0.2(postcss@8.4.38) - postcss-discard-duplicates: 6.0.3(postcss@8.4.38) - postcss-discard-empty: 6.0.3(postcss@8.4.38) - postcss-discard-overridden: 6.0.2(postcss@8.4.38) - postcss-merge-longhand: 6.0.5(postcss@8.4.38) - postcss-merge-rules: 6.1.1(postcss@8.4.38) - postcss-minify-font-values: 6.1.0(postcss@8.4.38) - postcss-minify-gradients: 6.0.3(postcss@8.4.38) - postcss-minify-params: 6.1.0(postcss@8.4.38) - postcss-minify-selectors: 6.0.4(postcss@8.4.38) - postcss-normalize-charset: 6.0.2(postcss@8.4.38) - postcss-normalize-display-values: 6.0.2(postcss@8.4.38) - postcss-normalize-positions: 6.0.2(postcss@8.4.38) - postcss-normalize-repeat-style: 6.0.2(postcss@8.4.38) - postcss-normalize-string: 6.0.2(postcss@8.4.38) - postcss-normalize-timing-functions: 6.0.2(postcss@8.4.38) - postcss-normalize-unicode: 6.1.0(postcss@8.4.38) - postcss-normalize-url: 6.0.2(postcss@8.4.38) - postcss-normalize-whitespace: 6.0.2(postcss@8.4.38) - postcss-ordered-values: 6.0.2(postcss@8.4.38) - postcss-reduce-initial: 6.1.0(postcss@8.4.38) - postcss-reduce-transforms: 6.0.2(postcss@8.4.38) - postcss-svgo: 6.0.3(postcss@8.4.38) - postcss-unique-selectors: 6.0.4(postcss@8.4.38) - - cssnano-utils@4.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - cssnano@6.1.2(postcss@8.4.38): - dependencies: - cssnano-preset-default: 6.1.2(postcss@8.4.38) - lilconfig: 3.1.1 - postcss: 8.4.38 + cssnano-preset-advanced@6.1.2(postcss@8.4.47): + dependencies: + autoprefixer: 10.4.20(postcss@8.4.47) + browserslist: 4.24.2 + cssnano-preset-default: 6.1.2(postcss@8.4.47) + postcss: 8.4.47 + postcss-discard-unused: 6.0.5(postcss@8.4.47) + postcss-merge-idents: 6.0.3(postcss@8.4.47) + postcss-reduce-idents: 6.0.3(postcss@8.4.47) + postcss-zindex: 6.0.2(postcss@8.4.47) + + cssnano-preset-default@6.1.2(postcss@8.4.47): + dependencies: + browserslist: 4.24.2 + css-declaration-sorter: 7.2.0(postcss@8.4.47) + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 + postcss-calc: 9.0.1(postcss@8.4.47) + postcss-colormin: 6.1.0(postcss@8.4.47) + postcss-convert-values: 6.1.0(postcss@8.4.47) + postcss-discard-comments: 6.0.2(postcss@8.4.47) + postcss-discard-duplicates: 6.0.3(postcss@8.4.47) + postcss-discard-empty: 6.0.3(postcss@8.4.47) + postcss-discard-overridden: 6.0.2(postcss@8.4.47) + postcss-merge-longhand: 6.0.5(postcss@8.4.47) + postcss-merge-rules: 6.1.1(postcss@8.4.47) + postcss-minify-font-values: 6.1.0(postcss@8.4.47) + postcss-minify-gradients: 6.0.3(postcss@8.4.47) + postcss-minify-params: 6.1.0(postcss@8.4.47) + postcss-minify-selectors: 6.0.4(postcss@8.4.47) + postcss-normalize-charset: 6.0.2(postcss@8.4.47) + postcss-normalize-display-values: 6.0.2(postcss@8.4.47) + postcss-normalize-positions: 6.0.2(postcss@8.4.47) + postcss-normalize-repeat-style: 6.0.2(postcss@8.4.47) + postcss-normalize-string: 6.0.2(postcss@8.4.47) + postcss-normalize-timing-functions: 6.0.2(postcss@8.4.47) + postcss-normalize-unicode: 6.1.0(postcss@8.4.47) + postcss-normalize-url: 6.0.2(postcss@8.4.47) + postcss-normalize-whitespace: 6.0.2(postcss@8.4.47) + postcss-ordered-values: 6.0.2(postcss@8.4.47) + postcss-reduce-initial: 6.1.0(postcss@8.4.47) + postcss-reduce-transforms: 6.0.2(postcss@8.4.47) + postcss-svgo: 6.0.3(postcss@8.4.47) + postcss-unique-selectors: 6.0.4(postcss@8.4.47) + + cssnano-utils@4.0.2(postcss@8.4.47): + dependencies: + postcss: 8.4.47 + + cssnano@6.1.2(postcss@8.4.47): + dependencies: + cssnano-preset-default: 6.1.2(postcss@8.4.47) + lilconfig: 3.1.2 + postcss: 8.4.47 csso@5.0.5: dependencies: @@ -10590,9 +10691,13 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.4(supports-color@8.1.1): + debug@4.3.4: dependencies: ms: 2.1.2 + + debug@4.3.7(supports-color@8.1.1): + dependencies: + ms: 2.1.3 optionalDependencies: supports-color: 8.1.1 @@ -10646,16 +10751,16 @@ snapshots: depcheck@1.4.7: dependencies: '@babel/parser': 7.26.2 - '@babel/traverse': 7.24.5 + '@babel/traverse': 7.25.9 '@vue/compiler-sfc': 3.5.12 callsite: 1.0.0 camelcase: 6.3.0 cosmiconfig: 7.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) deps-regex: 0.2.0 findup-sync: 5.0.0 - ignore: 5.3.1 - is-core-module: 2.13.1 + ignore: 5.3.2 + is-core-module: 2.15.1 js-yaml: 3.14.1 json5: 2.2.3 lodash: 4.17.21 @@ -10666,7 +10771,7 @@ snapshots: require-package-name: 2.0.1 resolve: 1.22.8 resolve-from: 5.0.0 - semver: 7.6.0 + semver: 7.6.3 yargs: 16.2.0 transitivePeerDependencies: - supports-color @@ -10692,10 +10797,10 @@ snapshots: transitivePeerDependencies: - supports-color - detect-port@1.5.1: + detect-port@1.6.1: dependencies: address: 1.2.2 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -10703,8 +10808,6 @@ snapshots: dependencies: dequal: 2.0.3 - diff@5.0.0: {} - diff@5.2.0: {} dir-glob@3.0.1: @@ -10765,7 +10868,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 dot-prop@6.0.1: dependencies: @@ -10785,9 +10888,9 @@ snapshots: dependencies: encoding: 0.1.13 - electron-to-chromium@1.4.757: {} + electron-to-chromium@1.5.50: {} - emoji-regex@10.3.0: {} + emoji-regex@10.4.0: {} emoji-regex@8.0.0: {} @@ -10797,15 +10900,17 @@ snapshots: emojis-list@3.0.0: {} - emoticon@4.0.1: {} + emoticon@4.1.0: {} encodeurl@1.0.2: {} + encodeurl@2.0.0: {} + encoding@0.1.13: dependencies: iconv-lite: 0.6.3 - enhanced-resolve@5.16.0: + enhanced-resolve@5.17.1: dependencies: graceful-fs: 4.2.11 tapable: 2.2.1 @@ -10824,6 +10929,8 @@ snapshots: env-paths@3.0.0: {} + environment@1.1.0: {} + err-code@3.0.1: {} error-ex@1.3.2: @@ -10863,10 +10970,10 @@ snapshots: is-string: 1.0.7 is-typed-array: 1.1.13 is-weakref: 1.0.2 - object-inspect: 1.13.1 + object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -10885,7 +10992,7 @@ snapshots: es-errors@1.3.0: {} - es-module-lexer@1.5.2: {} + es-module-lexer@1.5.4: {} es-object-atoms@1.0.0: dependencies: @@ -10903,6 +11010,20 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esast-util-from-estree@2.0.0: + dependencies: + '@types/estree-jsx': 1.0.5 + devlop: 1.1.0 + estree-util-visit: 2.0.0 + unist-util-position-from-estree: 2.0.0 + + esast-util-from-js@2.0.1: + dependencies: + '@types/estree-jsx': 1.0.5 + acorn: 8.14.0 + esast-util-from-estree: 2.0.0 + vfile-message: 4.0.2 + esbuild-plugin-wasm@1.1.0: {} esbuild@0.19.5: @@ -10930,7 +11051,7 @@ snapshots: '@esbuild/win32-ia32': 0.19.5 '@esbuild/win32-x64': 0.19.5 - escalade@3.1.2: {} + escalade@3.2.0: {} escape-goat@4.0.0: {} @@ -10942,17 +11063,17 @@ snapshots: escape-string-regexp@5.0.0: {} - eslint-plugin-jsdoc@46.10.1(eslint@8.57.0): + eslint-plugin-jsdoc@46.10.1(eslint@8.57.1): dependencies: '@es-joy/jsdoccomment': 0.41.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 8.57.0 - esquery: 1.5.0 + eslint: 8.57.1 + esquery: 1.6.0 is-builtin-module: 3.2.1 - semver: 7.6.0 + semver: 7.6.3 spdx-expression-parse: 4.0.0 transitivePeerDependencies: - supports-color @@ -10969,26 +11090,26 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 - esquery: 1.5.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 file-entry-cache: 6.0.1 @@ -10996,7 +11117,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -11014,13 +11135,13 @@ snapshots: espree@9.6.1: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.4.3 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -11034,7 +11155,7 @@ snapshots: estree-util-attach-comments@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-util-build-jsx@3.0.1: dependencies: @@ -11045,27 +11166,31 @@ snapshots: estree-util-is-identifier-name@3.0.0: {} + estree-util-scope@1.0.0: + dependencies: + '@types/estree': 1.0.6 + devlop: 1.1.0 + estree-util-to-js@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 - astring: 1.8.6 + astring: 1.9.0 source-map: 0.7.4 - estree-util-value-to-estree@3.1.1: + estree-util-value-to-estree@3.2.1: dependencies: - '@types/estree': 1.0.5 - is-plain-obj: 4.1.0 + '@types/estree': 1.0.6 estree-util-visit@2.0.0: dependencies: '@types/estree-jsx': 1.0.5 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 estree-walker@2.0.2: {} estree-walker@3.0.3: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 esutils@2.0.3: {} @@ -11075,7 +11200,7 @@ snapshots: eval@0.1.8: dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 require-like: 0.1.2 eventemitter3@4.0.7: {} @@ -11130,34 +11255,34 @@ snapshots: dependencies: homedir-polyfill: 1.0.3 - express@4.19.2: + express@4.21.1: dependencies: accepts: 1.3.8 array-flatten: 1.1.1 - body-parser: 1.20.2 + body-parser: 1.20.3 content-disposition: 0.5.4 content-type: 1.0.5 - cookie: 0.6.0 + cookie: 0.7.1 cookie-signature: 1.0.6 debug: 2.6.9 depd: 2.0.0 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 etag: 1.8.1 - finalhandler: 1.2.0 + finalhandler: 1.3.1 fresh: 0.5.2 http-errors: 2.0.0 - merge-descriptors: 1.0.1 + merge-descriptors: 1.0.3 methods: 1.1.2 on-finished: 2.4.1 parseurl: 1.3.3 - path-to-regexp: 0.1.7 + path-to-regexp: 0.1.10 proxy-addr: 2.0.7 - qs: 6.11.0 + qs: 6.13.0 range-parser: 1.2.1 safe-buffer: 5.2.1 - send: 0.18.0 - serve-static: 1.15.0 + send: 0.19.0 + serve-static: 1.16.2 setprototypeof: 1.2.0 statuses: 2.0.1 type-is: 1.6.18 @@ -11182,15 +11307,13 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} fast-levenshtein@2.0.6: {} - fast-url-parser@1.1.3: - dependencies: - punycode: 1.4.1 + fast-uri@3.0.3: {} fastq@1.17.1: dependencies: @@ -11210,26 +11333,30 @@ snapshots: fflate@0.8.2: {} + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@6.0.1: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.91.0): + file-loader@6.2.0(webpack@5.96.1): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.91.0 + webpack: 5.96.1 filesize@8.0.7: {} - fill-range@7.0.1: + fill-range@7.1.1: dependencies: to-regex-range: 5.0.1 - finalhandler@1.2.0: + finalhandler@1.3.1: dependencies: debug: 2.6.9 - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 on-finished: 2.4.1 parseurl: 1.3.3 @@ -11261,7 +11388,7 @@ snapshots: dependencies: detect-file: 1.0.0 is-glob: 4.0.3 - micromatch: 4.0.5 + micromatch: 4.0.8 resolve-dir: 1.0.1 flat-cache@3.2.0: @@ -11274,7 +11401,7 @@ snapshots: flatted@3.3.1: {} - follow-redirects@1.15.6: {} + follow-redirects@1.15.9: {} for-each@0.3.3: dependencies: @@ -11285,14 +11412,14 @@ snapshots: cross-spawn: 7.0.3 signal-exit: 3.0.7 - foreground-child@3.2.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.2.2)(webpack@5.91.0): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.1)(typescript@5.2.2)(webpack@5.96.1): dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.2 '@types/json-schema': 7.0.15 chalk: 4.1.2 chokidar: 3.6.0 @@ -11303,12 +11430,12 @@ snapshots: memfs: 3.5.3 minimatch: 3.1.2 schema-utils: 2.7.0 - semver: 7.6.0 + semver: 7.6.3 tapable: 1.1.3 typescript: 5.2.2 - webpack: 5.91.0 + webpack: 5.96.1 optionalDependencies: - eslint: 8.57.0 + eslint: 8.57.1 form-data-encoder@2.1.4: {} @@ -11393,11 +11520,11 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 glob@7.2.3: @@ -11414,7 +11541,7 @@ snapshots: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.0.1 + minimatch: 5.1.6 once: 1.4.0 global-dirs@3.0.1: @@ -11461,7 +11588,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -11469,7 +11596,7 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 @@ -11477,15 +11604,15 @@ snapshots: dependencies: dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 4.0.0 - globby@14.0.1: + globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -11528,7 +11655,7 @@ snapshots: hamt-sharding@3.0.6: dependencies: sparse-array: 1.3.2 - uint8arrays: 5.0.3 + uint8arrays: 5.1.0 handle-thing@2.0.1: {} @@ -11568,37 +11695,37 @@ snapshots: hast-util-from-parse5@8.0.1: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 devlop: 1.1.0 hastscript: 8.0.0 property-information: 6.5.0 - vfile: 6.0.1 - vfile-location: 5.0.2 + vfile: 6.0.3 + vfile-location: 5.0.3 web-namespaces: 2.0.1 hast-util-parse-selector@4.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw@9.0.3: + hast-util-raw@9.0.4: dependencies: '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 '@ungap/structured-clone': 1.2.0 hast-util-from-parse5: 8.0.1 hast-util-to-parse5: 8.0.0 html-void-elements: 3.0.0 - mdast-util-to-hast: 13.1.0 - parse5: 7.1.2 + mdast-util-to-hast: 13.2.0 + parse5: 7.2.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 web-namespaces: 2.0.1 zwitch: 2.0.4 hast-util-to-estree@3.1.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 comma-separated-tokens: 2.0.3 @@ -11606,8 +11733,8 @@ snapshots: estree-util-attach-comments: 3.0.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 @@ -11617,21 +11744,21 @@ snapshots: transitivePeerDependencies: - supports-color - hast-util-to-jsx-runtime@2.3.0: + hast-util-to-jsx-runtime@2.3.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@types/hast': 3.0.4 - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 comma-separated-tokens: 2.0.3 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 hast-util-whitespace: 3.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 property-information: 6.5.0 space-separated-tokens: 2.0.2 - style-to-object: 1.0.6 + style-to-object: 1.0.8 unist-util-position: 5.0.0 vfile-message: 4.0.2 transitivePeerDependencies: @@ -11661,9 +11788,11 @@ snapshots: he@1.2.0: {} + highlight.js@10.7.3: {} + history@4.10.1: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 loose-envify: 1.4.0 resolve-pathname: 3.0.0 tiny-invariant: 1.3.3 @@ -11699,7 +11828,7 @@ snapshots: he: 1.2.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.0 + terser: 5.36.0 html-minifier-terser@7.2.0: dependencies: @@ -11709,13 +11838,13 @@ snapshots: entities: 4.5.0 param-case: 3.0.4 relateurl: 0.2.7 - terser: 5.31.0 + terser: 5.36.0 html-tags@3.3.1: {} html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.91.0): + html-webpack-plugin@5.6.3(webpack@5.96.1): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -11723,7 +11852,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.91.0 + webpack: 5.96.1 htmlparser2@6.1.0: dependencies: @@ -11760,13 +11889,13 @@ snapshots: http-parser-js@0.5.8: {} - http-proxy-middleware@2.0.6(@types/express@4.17.21): + http-proxy-middleware@2.0.7(@types/express@4.17.21): dependencies: - '@types/http-proxy': 1.17.14 + '@types/http-proxy': 1.17.15 http-proxy: 1.18.1 is-glob: 4.0.3 is-plain-obj: 3.0.0 - micromatch: 4.0.5 + micromatch: 4.0.8 optionalDependencies: '@types/express': 4.17.21 transitivePeerDependencies: @@ -11775,7 +11904,7 @@ snapshots: http-proxy@1.18.1: dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.6 + follow-redirects: 1.15.9 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -11803,13 +11932,13 @@ snapshots: dependencies: safer-buffer: 2.1.2 - icss-utils@5.1.0(postcss@8.4.38): + icss-utils@5.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 ieee754@1.2.1: {} - ignore@5.3.1: {} + ignore@5.3.2: {} image-size@1.1.1: dependencies: @@ -11828,9 +11957,7 @@ snapshots: indent-string@4.0.0: {} - indent-string@5.0.0: {} - - infima@0.2.0-alpha.43: {} + infima@0.2.0-alpha.45: {} inflight@1.0.6: dependencies: @@ -11847,7 +11974,7 @@ snapshots: inline-style-parser@0.1.1: {} - inline-style-parser@0.2.3: {} + inline-style-parser@0.2.4: {} interface-blockstore@4.0.1: dependencies: @@ -11874,8 +12001,8 @@ snapshots: ipfs-unixfs-exporter@10.0.1: dependencies: - '@ipld/dag-cbor': 9.2.0 - '@ipld/dag-pb': 4.1.0 + '@ipld/dag-cbor': 9.2.2 + '@ipld/dag-pb': 4.1.3 '@multiformats/murmur3': 2.1.8 err-code: 3.0.1 hamt-sharding: 3.0.6 @@ -11883,7 +12010,7 @@ snapshots: ipfs-unixfs: 9.0.1 it-last: 2.0.1 it-map: 2.0.1 - it-parallel: 3.0.7 + it-parallel: 3.0.8 it-pipe: 2.0.5 it-pushable: 3.2.3 multiformats: 11.0.2 @@ -11893,7 +12020,7 @@ snapshots: ipfs-unixfs@9.0.1: dependencies: err-code: 3.0.1 - protobufjs: 7.2.6 + protobufjs: 7.4.0 ipfs-utils@9.0.14(encoding@0.1.13): dependencies: @@ -11958,7 +12085,7 @@ snapshots: dependencies: ci-info: 3.9.0 - is-core-module@2.13.1: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -12034,10 +12161,6 @@ snapshots: dependencies: isobject: 3.0.1 - is-reference@3.0.2: - dependencies: - '@types/estree': 1.0.5 - is-regex@1.1.4: dependencies: call-bind: 1.0.7 @@ -12133,7 +12256,7 @@ snapshots: dependencies: it-pushable: 3.2.3 - it-parallel@3.0.7: + it-parallel@3.0.8: dependencies: p-defer: 4.0.1 @@ -12169,7 +12292,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.10 + '@types/node': 20.17.6 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -12177,20 +12300,20 @@ snapshots: jest-worker@27.5.1: dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 merge-stream: 2.0.0 supports-color: 8.1.1 jest-worker@29.7.0: dependencies: - '@types/node': 20.12.10 + '@types/node': 20.17.6 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@1.21.0: {} + jiti@1.21.6: {} - joi@17.13.1: + joi@17.13.3: dependencies: '@hapi/hoek': 9.3.0 '@hapi/topo': 5.1.0 @@ -12211,9 +12334,7 @@ snapshots: jsdoc-type-pratt-parser@4.0.0: {} - jsesc@0.5.0: {} - - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -12231,7 +12352,7 @@ snapshots: json5@2.2.3: {} - jsonc-parser@3.2.1: {} + jsonc-parser@3.3.1: {} jsonfile@6.1.0: dependencies: @@ -12257,9 +12378,9 @@ snapshots: dependencies: package-json: 8.1.1 - launch-editor@2.6.1: + launch-editor@2.9.1: dependencies: - picocolors: 1.0.0 + picocolors: 1.1.1 shell-quote: 1.8.1 leven@3.1.0: {} @@ -12271,7 +12392,7 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.1: {} + lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -12279,7 +12400,7 @@ snapshots: dependencies: chalk: 5.3.0 commander: 11.0.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 execa: 7.2.0 lilconfig: 2.1.0 listr2: 6.6.1 @@ -12297,7 +12418,7 @@ snapshots: colorette: 2.0.20 eventemitter3: 5.0.1 log-update: 5.0.1 - rfdc: 1.3.1 + rfdc: 1.4.1 wrap-ansi: 8.1.0 load-json-file@4.0.0: @@ -12315,7 +12436,7 @@ snapshots: emojis-list: 3.0.0 json5: 2.2.3 - loader-utils@3.2.1: {} + loader-utils@3.3.1: {} locate-path@3.0.0: dependencies: @@ -12370,7 +12491,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 lowercase-keys@3.0.0: {} @@ -12380,10 +12501,6 @@ snapshots: dependencies: yallist: 3.1.1 - lru-cache@6.0.0: - dependencies: - yallist: 4.0.0 - lunr@2.3.9: {} magic-string@0.30.12: @@ -12392,21 +12509,26 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 markdown-extensions@2.0.0: {} - markdown-table@3.0.3: {} + markdown-table@2.0.0: + dependencies: + repeat-string: 1.6.1 + + markdown-table@3.0.4: {} - marked-terminal@6.2.0(marked@9.1.6): + marked-terminal@7.2.1(marked@9.1.6): dependencies: - ansi-escapes: 6.2.1 - cardinal: 2.1.1 + ansi-escapes: 7.0.0 + ansi-regex: 6.1.0 chalk: 5.3.0 - cli-table3: 0.6.4 + cli-highlight: 2.1.11 + cli-table3: 0.6.5 marked: 9.1.6 node-emoji: 2.1.3 - supports-hyperlinks: 3.0.0 + supports-hyperlinks: 3.1.0 marked@4.3.0: {} @@ -12418,11 +12540,11 @@ snapshots: mdast-util-directive@3.0.0: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.1 stringify-entities: 4.0.4 unist-util-visit-parents: 6.0.1 @@ -12431,15 +12553,15 @@ snapshots: mdast-util-find-and-replace@3.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 escape-string-regexp: 5.0.0 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 - mdast-util-from-markdown@2.0.0: + mdast-util-from-markdown@2.0.2: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 decode-named-character-reference: 1.0.2 devlop: 1.1.0 mdast-util-to-string: 4.0.0 @@ -12455,18 +12577,18 @@ snapshots: mdast-util-frontmatter@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 escape-string-regexp: 5.0.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 micromark-extension-frontmatter: 2.0.0 transitivePeerDependencies: - supports-color - mdast-util-gfm-autolink-literal@2.0.0: + mdast-util-gfm-autolink-literal@2.0.1: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 ccount: 2.0.1 devlop: 1.1.0 mdast-util-find-and-replace: 3.0.1 @@ -12474,77 +12596,76 @@ snapshots: mdast-util-gfm-footnote@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 micromark-util-normalize-identifier: 2.0.0 transitivePeerDependencies: - supports-color mdast-util-gfm-strikethrough@2.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm-table@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - markdown-table: 3.0.3 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + markdown-table: 3.0.4 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm-task-list-item@2.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-gfm@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-gfm-autolink-literal: 2.0.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-gfm-autolink-literal: 2.0.1 mdast-util-gfm-footnote: 2.0.0 mdast-util-gfm-strikethrough: 2.0.0 mdast-util-gfm-table: 2.0.0 mdast-util-gfm-task-list-item: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-expression@2.0.0: + mdast-util-mdx-expression@2.0.1: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color - mdast-util-mdx-jsx@3.1.2: + mdast-util-mdx-jsx@3.1.3: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 ccount: 2.0.1 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 parse-entities: 4.0.1 stringify-entities: 4.0.4 - unist-util-remove-position: 5.0.0 unist-util-stringify-position: 4.0.0 vfile-message: 4.0.2 transitivePeerDependencies: @@ -12552,11 +12673,11 @@ snapshots: mdast-util-mdx@3.0.0: dependencies: - mdast-util-from-markdown: 2.0.0 - mdast-util-mdx-expression: 2.0.0 - mdast-util-mdx-jsx: 3.1.2 + mdast-util-from-markdown: 2.0.2 + mdast-util-mdx-expression: 2.0.1 + mdast-util-mdx-jsx: 3.1.3 mdast-util-mdxjs-esm: 2.0.1 - mdast-util-to-markdown: 2.1.0 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color @@ -12564,44 +12685,45 @@ snapshots: dependencies: '@types/estree-jsx': 1.0.5 '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 devlop: 1.1.0 - mdast-util-from-markdown: 2.0.0 - mdast-util-to-markdown: 2.1.0 + mdast-util-from-markdown: 2.0.2 + mdast-util-to-markdown: 2.1.2 transitivePeerDependencies: - supports-color mdast-util-phrasing@4.1.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 unist-util-is: 6.0.0 - mdast-util-to-hast@13.1.0: + mdast-util-to-hast@13.2.0: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 '@ungap/structured-clone': 1.2.0 devlop: 1.1.0 micromark-util-sanitize-uri: 2.0.0 trim-lines: 3.0.1 unist-util-position: 5.0.0 unist-util-visit: 5.0.0 - vfile: 6.0.1 + vfile: 6.0.3 - mdast-util-to-markdown@2.1.0: + mdast-util-to-markdown@2.1.2: dependencies: - '@types/mdast': 4.0.3 - '@types/unist': 3.0.2 + '@types/mdast': 4.0.4 + '@types/unist': 3.0.3 longest-streak: 3.1.0 mdast-util-phrasing: 4.1.0 mdast-util-to-string: 4.0.0 + micromark-util-classify-character: 2.0.0 micromark-util-decode-string: 2.0.0 unist-util-visit: 5.0.0 zwitch: 2.0.4 mdast-util-to-string@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdn-data@2.0.28: {} @@ -12615,7 +12737,7 @@ snapshots: memorystream@0.3.1: {} - merge-descriptors@1.0.1: {} + merge-descriptors@1.0.3: {} merge-options@3.0.4: dependencies: @@ -12648,7 +12770,7 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-directive@3.0.0: + micromark-extension-directive@3.0.2: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 @@ -12665,14 +12787,14 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-gfm-autolink-literal@2.0.0: + micromark-extension-gfm-autolink-literal@2.1.0: dependencies: micromark-util-character: 2.1.0 micromark-util-sanitize-uri: 2.0.0 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-gfm-footnote@2.0.0: + micromark-extension-gfm-footnote@2.1.0: dependencies: devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -12683,7 +12805,7 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-gfm-strikethrough@2.0.0: + micromark-extension-gfm-strikethrough@2.1.0: dependencies: devlop: 1.1.0 micromark-util-chunked: 2.0.0 @@ -12692,7 +12814,7 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-gfm-table@2.0.0: + micromark-extension-gfm-table@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 @@ -12704,7 +12826,7 @@ snapshots: dependencies: micromark-util-types: 2.0.0 - micromark-extension-gfm-task-list-item@2.0.1: + micromark-extension-gfm-task-list-item@2.1.0: dependencies: devlop: 1.1.0 micromark-factory-space: 2.0.0 @@ -12714,35 +12836,36 @@ snapshots: micromark-extension-gfm@3.0.0: dependencies: - micromark-extension-gfm-autolink-literal: 2.0.0 - micromark-extension-gfm-footnote: 2.0.0 - micromark-extension-gfm-strikethrough: 2.0.0 - micromark-extension-gfm-table: 2.0.0 + micromark-extension-gfm-autolink-literal: 2.1.0 + micromark-extension-gfm-footnote: 2.1.0 + micromark-extension-gfm-strikethrough: 2.1.0 + micromark-extension-gfm-table: 2.1.0 micromark-extension-gfm-tagfilter: 2.0.0 - micromark-extension-gfm-task-list-item: 2.0.1 + micromark-extension-gfm-task-list-item: 2.1.0 micromark-util-combine-extensions: 2.0.0 micromark-util-types: 2.0.0 micromark-extension-mdx-expression@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 - micromark-factory-mdx-expression: 2.0.1 + micromark-factory-mdx-expression: 2.0.2 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-extension-mdx-jsx@3.0.0: + micromark-extension-mdx-jsx@3.0.1: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 estree-util-is-identifier-name: 3.0.0 - micromark-factory-mdx-expression: 2.0.1 + micromark-factory-mdx-expression: 2.0.2 micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 + micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 vfile-message: 4.0.2 @@ -12753,7 +12876,7 @@ snapshots: micromark-extension-mdxjs-esm@3.0.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 micromark-util-character: 2.1.0 @@ -12765,10 +12888,10 @@ snapshots: micromark-extension-mdxjs@3.0.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) micromark-extension-mdx-expression: 3.0.0 - micromark-extension-mdx-jsx: 3.0.0 + micromark-extension-mdx-jsx: 3.0.1 micromark-extension-mdx-md: 2.0.0 micromark-extension-mdxjs-esm: 3.0.0 micromark-util-combine-extensions: 2.0.0 @@ -12787,10 +12910,11 @@ snapshots: micromark-util-symbol: 2.0.0 micromark-util-types: 2.0.0 - micromark-factory-mdx-expression@2.0.1: + micromark-factory-mdx-expression@2.0.2: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 devlop: 1.1.0 + micromark-factory-space: 2.0.0 micromark-util-character: 2.1.0 micromark-util-events-to-acorn: 2.0.2 micromark-util-symbol: 2.0.0 @@ -12863,8 +12987,8 @@ snapshots: micromark-util-events-to-acorn@2.0.2: dependencies: '@types/acorn': 4.0.6 - '@types/estree': 1.0.5 - '@types/unist': 3.0.2 + '@types/estree': 1.0.6 + '@types/unist': 3.0.3 devlop: 1.1.0 estree-util-visit: 2.0.0 micromark-util-symbol: 2.0.0 @@ -12905,7 +13029,7 @@ snapshots: micromark@4.0.0: dependencies: '@types/debug': 4.1.12 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) decode-named-character-reference: 1.0.2 devlop: 1.1.0 micromark-core-commonmark: 2.0.1 @@ -12926,13 +13050,20 @@ snapshots: micromatch@4.0.5: dependencies: - braces: 3.0.2 + braces: 3.0.3 + picomatch: 2.3.1 + + micromatch@4.0.8: + dependencies: + braces: 3.0.3 picomatch: 2.3.1 mime-db@1.33.0: {} mime-db@1.52.0: {} + mime-db@1.53.0: {} + mime-types@2.1.18: dependencies: mime-db: 1.33.0 @@ -12951,11 +13082,11 @@ snapshots: mimic-response@4.0.0: {} - mini-css-extract-plugin@2.9.0(webpack@5.91.0): + mini-css-extract-plugin@2.9.2(webpack@5.96.1): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.91.0 + webpack: 5.96.1 minimalistic-assert@1.0.1: {} @@ -12963,7 +13094,7 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@5.0.1: + minimatch@5.1.6: dependencies: brace-expansion: 2.0.1 @@ -12975,10 +13106,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -12987,27 +13114,27 @@ snapshots: minipass@7.1.2: {} - mocha@10.4.0: + mocha@10.8.2: dependencies: - ansi-colors: 4.1.1 + ansi-colors: 4.1.3 browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 + chokidar: 3.6.0 + debug: 4.3.7(supports-color@8.1.1) + diff: 5.2.0 escape-string-regexp: 4.0.0 find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 js-yaml: 4.1.0 log-symbols: 4.1.0 - minimatch: 5.0.1 + minimatch: 5.1.6 ms: 2.1.3 - serialize-javascript: 6.0.0 + serialize-javascript: 6.0.2 strip-json-comments: 3.1.1 supports-color: 8.1.1 - workerpool: 6.2.1 + workerpool: 6.5.1 yargs: 16.2.0 - yargs-parser: 20.2.4 + yargs-parser: 20.2.9 yargs-unparser: 2.0.0 mri@1.2.0: {} @@ -13029,9 +13156,7 @@ snapshots: multiformats@12.1.3: {} - multiformats@13.1.0: {} - - multiformats@13.3.0: {} + multiformats@13.3.1: {} multimatch@5.0.0: dependencies: @@ -13043,9 +13168,15 @@ snapshots: murmurhash3js-revisited@3.0.0: {} + mz@2.7.0: + dependencies: + any-promise: 1.3.0 + object-assign: 4.1.1 + thenify-all: 1.6.0 + nanoid@3.3.7: {} - nanoid@5.0.7: {} + nanoid@5.0.8: {} native-fetch@3.0.0(node-fetch@2.7.0(encoding@0.1.13)): dependencies: @@ -13055,6 +13186,8 @@ snapshots: negotiator@0.6.3: {} + negotiator@0.6.4: {} + neo-async@2.6.2: {} nice-try@1.0.5: {} @@ -13062,15 +13195,15 @@ snapshots: nise@5.1.9: dependencies: '@sinonjs/commons': 3.0.1 - '@sinonjs/fake-timers': 11.2.2 - '@sinonjs/text-encoding': 0.7.2 + '@sinonjs/fake-timers': 11.3.1 + '@sinonjs/text-encoding': 0.7.3 just-extend: 6.2.0 - path-to-regexp: 6.2.2 + path-to-regexp: 6.3.0 no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.2 + tslib: 2.8.1 node-emoji@2.1.3: dependencies: @@ -13087,7 +13220,7 @@ snapshots: node-forge@1.3.1: {} - node-releases@2.0.14: {} + node-releases@2.0.18: {} normalize-package-data@2.5.0: dependencies: @@ -13128,9 +13261,15 @@ snapshots: dependencies: boolbase: 1.0.0 + null-loader@4.0.1(webpack@5.96.1): + dependencies: + loader-utils: 2.0.4 + schema-utils: 3.3.0 + webpack: 5.96.1 + object-assign@4.1.1: {} - object-inspect@1.13.1: {} + object-inspect@1.13.2: {} object-is@1.1.6: dependencies: @@ -13205,16 +13344,16 @@ snapshots: p-event@6.0.1: dependencies: - p-timeout: 6.1.2 + p-timeout: 6.1.3 p-fifo@1.0.0: dependencies: fast-fifo: 1.3.2 p-defer: 3.0.0 - p-filter@3.0.0: + p-filter@4.1.0: dependencies: - p-map: 5.5.0 + p-map: 7.0.2 p-limit@2.3.0: dependencies: @@ -13226,7 +13365,7 @@ snapshots: p-limit@4.0.0: dependencies: - yocto-queue: 1.0.0 + yocto-queue: 1.1.1 p-locate@3.0.0: dependencies: @@ -13244,12 +13383,10 @@ snapshots: dependencies: aggregate-error: 3.1.0 - p-map@5.5.0: - dependencies: - aggregate-error: 4.0.1 - p-map@6.0.0: {} + p-map@7.0.2: {} + p-queue@7.4.1: dependencies: eventemitter3: 5.0.1 @@ -13267,27 +13404,27 @@ snapshots: p-timeout@5.1.0: {} - p-timeout@6.1.2: {} + p-timeout@6.1.3: {} p-try@2.2.0: {} p-wait-for@5.0.2: dependencies: - p-timeout: 6.1.2 + p-timeout: 6.1.3 - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} package-json@8.1.1: dependencies: got: 12.6.1 registry-auth-token: 5.0.2 registry-url: 6.0.1 - semver: 7.6.0 + semver: 7.6.3 param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 parent-module@1.0.1: dependencies: @@ -13295,7 +13432,7 @@ snapshots: parse-entities@4.0.1: dependencies: - '@types/unist': 2.0.10 + '@types/unist': 2.0.11 character-entities: 2.0.2 character-entities-legacy: 3.0.0 character-reference-invalid: 2.0.1 @@ -13311,7 +13448,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -13320,12 +13457,20 @@ snapshots: parse-passwd@1.0.0: {} - parse5-htmlparser2-tree-adapter@7.0.0: + parse5-htmlparser2-tree-adapter@6.0.1: + dependencies: + parse5: 6.0.1 + + parse5-htmlparser2-tree-adapter@7.1.0: dependencies: domhandler: 5.0.3 - parse5: 7.1.2 + parse5: 7.2.1 + + parse5@5.1.1: {} - parse5@7.1.2: + parse5@6.0.1: {} + + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -13334,7 +13479,7 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 path-browserify@1.0.1: {} @@ -13361,15 +13506,15 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 - path-to-regexp@0.1.7: {} + path-to-regexp@0.1.10: {} - path-to-regexp@1.8.0: + path-to-regexp@1.9.0: dependencies: isarray: 0.0.1 - path-to-regexp@2.2.1: {} + path-to-regexp@3.3.0: {} - path-to-regexp@6.2.2: {} + path-to-regexp@6.3.0: {} path-type@3.0.0: dependencies: @@ -13379,14 +13524,6 @@ snapshots: path-type@5.0.0: {} - periscopic@3.1.0: - dependencies: - '@types/estree': 1.0.5 - estree-walker: 3.0.3 - is-reference: 3.0.2 - - picocolors@1.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -13415,20 +13552,20 @@ snapshots: c8: 8.0.1 camelcase: 8.0.0 chokidar: 3.6.0 - cpy: 11.0.1 + cpy: 11.1.0 esbuild: 0.19.5 esbuild-plugin-wasm: 1.1.0 events: 3.3.0 execa: 8.0.1 exit-hook: 4.0.0 - globby: 14.0.1 + globby: 14.0.2 kleur: 4.1.5 lilconfig: 2.1.0 lodash: 4.17.21 merge-options: 3.0.4 - nanoid: 5.0.7 + nanoid: 5.0.8 ora: 7.0.1 - p-timeout: 6.1.2 + p-timeout: 6.1.3 path-browserify: 1.0.1 playwright-core: 1.39.0 polka: 0.5.2 @@ -13442,7 +13579,7 @@ snapshots: tempy: 3.1.0 test-exclude: 6.0.0 util: 0.12.5 - v8-to-istanbul: 9.2.0 + v8-to-istanbul: 9.3.0 please-upgrade-node@3.2.0: dependencies: @@ -13455,221 +13592,215 @@ snapshots: possible-typed-array-names@1.0.0: {} - postcss-calc@9.0.1(postcss@8.4.38): + postcss-calc@9.0.1(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-colormin@6.1.0(postcss@8.4.38): + postcss-colormin@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 colord: 2.9.3 - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-convert-values@6.1.0(postcss@8.4.38): + postcss-convert-values@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 + browserslist: 4.24.2 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-discard-comments@6.0.2(postcss@8.4.38): + postcss-discard-comments@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-discard-duplicates@6.0.3(postcss@8.4.38): + postcss-discard-duplicates@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-discard-empty@6.0.3(postcss@8.4.38): + postcss-discard-empty@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-discard-overridden@6.0.2(postcss@8.4.38): + postcss-discard-overridden@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-discard-unused@6.0.5(postcss@8.4.38): + postcss-discard-unused@6.0.5(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-loader@7.3.4(postcss@8.4.38)(typescript@5.2.2)(webpack@5.91.0): + postcss-loader@7.3.4(postcss@8.4.47)(typescript@5.2.2)(webpack@5.96.1): dependencies: cosmiconfig: 8.3.6(typescript@5.2.2) - jiti: 1.21.0 - postcss: 8.4.38 - semver: 7.6.0 - webpack: 5.91.0 + jiti: 1.21.6 + postcss: 8.4.47 + semver: 7.6.3 + webpack: 5.96.1 transitivePeerDependencies: - typescript - postcss-merge-idents@6.0.3(postcss@8.4.38): + postcss-merge-idents@6.0.3(postcss@8.4.47): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-merge-longhand@6.0.5(postcss@8.4.38): + postcss-merge-longhand@6.0.5(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - stylehacks: 6.1.1(postcss@8.4.38) + stylehacks: 6.1.1(postcss@8.4.47) - postcss-merge-rules@6.1.1(postcss@8.4.38): + postcss-merge-rules@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-minify-font-values@6.1.0(postcss@8.4.38): + postcss-minify-font-values@6.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-gradients@6.0.3(postcss@8.4.38): + postcss-minify-gradients@6.0.3(postcss@8.4.47): dependencies: colord: 2.9.3 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-params@6.1.0(postcss@8.4.38): + postcss-minify-params@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.0 - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 + browserslist: 4.24.2 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-minify-selectors@6.0.4(postcss@8.4.38): + postcss-minify-selectors@6.0.4(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-modules-extract-imports@3.1.0(postcss@8.4.38): + postcss-modules-extract-imports@3.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-modules-local-by-default@4.0.5(postcss@8.4.38): + postcss-modules-local-by-default@4.0.5(postcss@8.4.47): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 postcss-value-parser: 4.2.0 - postcss-modules-scope@3.2.0(postcss@8.4.38): + postcss-modules-scope@3.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-modules-values@4.0.0(postcss@8.4.38): + postcss-modules-values@4.0.0(postcss@8.4.47): dependencies: - icss-utils: 5.1.0(postcss@8.4.38) - postcss: 8.4.38 + icss-utils: 5.1.0(postcss@8.4.47) + postcss: 8.4.47 - postcss-normalize-charset@6.0.2(postcss@8.4.38): + postcss-normalize-charset@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 - postcss-normalize-display-values@6.0.2(postcss@8.4.38): + postcss-normalize-display-values@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-positions@6.0.2(postcss@8.4.38): + postcss-normalize-positions@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-repeat-style@6.0.2(postcss@8.4.38): + postcss-normalize-repeat-style@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-string@6.0.2(postcss@8.4.38): + postcss-normalize-string@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-timing-functions@6.0.2(postcss@8.4.38): + postcss-normalize-timing-functions@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-unicode@6.1.0(postcss@8.4.38): + postcss-normalize-unicode@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 + browserslist: 4.24.2 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-url@6.0.2(postcss@8.4.38): + postcss-normalize-url@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-normalize-whitespace@6.0.2(postcss@8.4.38): + postcss-normalize-whitespace@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-ordered-values@6.0.2(postcss@8.4.38): + postcss-ordered-values@6.0.2(postcss@8.4.47): dependencies: - cssnano-utils: 4.0.2(postcss@8.4.38) - postcss: 8.4.38 + cssnano-utils: 4.0.2(postcss@8.4.47) + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-reduce-idents@6.0.3(postcss@8.4.38): + postcss-reduce-idents@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-reduce-initial@6.1.0(postcss@8.4.38): + postcss-reduce-initial@6.1.0(postcss@8.4.47): dependencies: - browserslist: 4.23.0 + browserslist: 4.24.2 caniuse-api: 3.0.0 - postcss: 8.4.38 + postcss: 8.4.47 - postcss-reduce-transforms@6.0.2(postcss@8.4.38): + postcss-reduce-transforms@6.0.2(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - postcss-selector-parser@6.0.16: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-sort-media-queries@5.2.0(postcss@8.4.38): + postcss-sort-media-queries@5.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 sort-css-media-queries: 2.2.0 - postcss-svgo@6.0.3(postcss@8.4.38): + postcss-svgo@6.0.3(postcss@8.4.47): dependencies: - postcss: 8.4.38 + postcss: 8.4.47 postcss-value-parser: 4.2.0 - svgo: 3.2.0 + svgo: 3.3.2 - postcss-unique-selectors@6.0.4(postcss@8.4.38): + postcss-unique-selectors@6.0.4(postcss@8.4.47): dependencies: - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 postcss-value-parser@4.2.0: {} - postcss-zindex@6.0.2(postcss@8.4.38): - dependencies: - postcss: 8.4.38 - - postcss@8.4.38: + postcss-zindex@6.0.2(postcss@8.4.47): dependencies: - nanoid: 3.3.7 - picocolors: 1.0.0 - source-map-js: 1.2.0 + postcss: 8.4.47 postcss@8.4.47: dependencies: @@ -13690,9 +13821,9 @@ snapshots: pretty-time@1.1.0: {} - prism-react-renderer@2.3.1(react@18.3.1): + prism-react-renderer@2.4.0(react@18.3.1): dependencies: - '@types/prismjs': 1.26.4 + '@types/prismjs': 1.26.5 clsx: 2.1.1 react: 18.3.1 @@ -13717,7 +13848,7 @@ snapshots: proto-list@1.2.4: {} - protobufjs@7.2.6: + protobufjs@7.4.0: dependencies: '@protobufjs/aspromise': 1.1.2 '@protobufjs/base64': 1.1.2 @@ -13729,7 +13860,7 @@ snapshots: '@protobufjs/path': 1.1.2 '@protobufjs/pool': 1.1.0 '@protobufjs/utf8': 1.1.0 - '@types/node': 20.12.10 + '@types/node': 20.17.6 long: 5.2.3 proxy-addr@2.0.7: @@ -13737,15 +13868,13 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 - punycode@1.4.1: {} - punycode@2.3.1: {} pupa@3.1.0: dependencies: escape-goat: 4.0.0 - qs@6.11.0: + qs@6.13.0: dependencies: side-channel: 1.0.6 @@ -13781,24 +13910,24 @@ snapshots: minimist: 1.2.8 strip-json-comments: 2.0.1 - react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.2.2)(webpack@5.91.0): + react-dev-utils@12.0.1(eslint@8.57.1)(typescript@5.2.2)(webpack@5.96.1): dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.26.2 address: 1.2.2 - browserslist: 4.23.0 + browserslist: 4.24.2 chalk: 4.1.2 cross-spawn: 7.0.3 detect-port-alt: 1.1.6 escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.2.2)(webpack@5.91.0) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.1)(typescript@5.2.2)(webpack@5.96.1) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 immer: 9.0.21 is-root: 2.1.0 - loader-utils: 3.2.1 + loader-utils: 3.3.1 open: 8.4.2 pkg-up: 3.1.0 prompts: 2.4.2 @@ -13807,7 +13936,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.91.0 + webpack: 5.96.1 optionalDependencies: typescript: 5.2.2 transitivePeerDependencies: @@ -13827,7 +13956,7 @@ snapshots: react-helmet-async@1.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 invariant: 2.2.4 prop-types: 15.8.1 react: 18.3.1 @@ -13844,15 +13973,15 @@ snapshots: react-is@16.13.1: {} - react-json-view-lite@1.4.0(react@18.3.1): + react-json-view-lite@1.5.0(react@18.3.1): dependencies: react: 18.3.1 - react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.91.0): + react-loadable-ssr-addon-v5-slorber@1.0.1(@docusaurus/react-loadable@6.0.0(react@18.3.1))(webpack@5.96.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 react-loadable: '@docusaurus/react-loadable@6.0.0(react@18.3.1)' - webpack: 5.91.0 + webpack: 5.96.1 react-native-fetch-api@3.0.0: dependencies: @@ -13860,13 +13989,13 @@ snapshots: react-router-config@5.1.1(react-router@5.3.4(react@18.3.1))(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 react: 18.3.1 react-router: 5.3.4(react@18.3.1) react-router-dom@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 history: 4.10.1 loose-envify: 1.4.0 prop-types: 15.8.1 @@ -13877,11 +14006,11 @@ snapshots: react-router@5.3.4(react@18.3.1): dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 history: 4.10.1 hoist-non-react-statics: 3.3.2 loose-envify: 1.4.0 - path-to-regexp: 1.8.0 + path-to-regexp: 1.9.0 prop-types: 15.8.1 react: 18.3.1 react-is: 16.13.1 @@ -13924,15 +14053,41 @@ snapshots: dependencies: resolve: 1.22.8 - recursive-readdir@2.2.3: + recma-build-jsx@1.0.0: dependencies: - minimatch: 3.1.2 + '@types/estree': 1.0.6 + estree-util-build-jsx: 3.0.1 + vfile: 6.0.3 - redeyed@2.1.1: + recma-jsx@1.0.0(acorn@8.14.0): dependencies: - esprima: 4.0.1 + acorn-jsx: 5.3.2(acorn@8.14.0) + estree-util-to-js: 2.0.0 + recma-parse: 1.0.0 + recma-stringify: 1.0.0 + unified: 11.0.5 + transitivePeerDependencies: + - acorn + + recma-parse@1.0.0: + dependencies: + '@types/estree': 1.0.6 + esast-util-from-js: 2.0.1 + unified: 11.0.5 + vfile: 6.0.3 + + recma-stringify@1.0.0: + dependencies: + '@types/estree': 1.0.6 + estree-util-to-js: 2.0.0 + unified: 11.0.5 + vfile: 6.0.3 + + recursive-readdir@2.2.3: + dependencies: + minimatch: 3.1.2 - regenerate-unicode-properties@10.1.1: + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -13942,82 +14097,92 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.5 + '@babel/runtime': 7.26.0 - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - regexpu-core@5.3.2: + regexpu-core@6.1.1: dependencies: - '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.2 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 + unicode-match-property-value-ecmascript: 2.2.0 registry-auth-token@5.0.2: dependencies: - '@pnpm/npm-conf': 2.2.2 + '@pnpm/npm-conf': 2.3.1 registry-url@6.0.1: dependencies: rc: 1.2.8 - regjsparser@0.9.1: + regjsgen@0.8.0: {} + + regjsparser@0.11.2: dependencies: - jsesc: 0.5.0 + jsesc: 3.0.2 rehype-raw@7.0.0: dependencies: '@types/hast': 3.0.4 - hast-util-raw: 9.0.3 - vfile: 6.0.1 + hast-util-raw: 9.0.4 + vfile: 6.0.3 + + rehype-recma@1.0.0: + dependencies: + '@types/estree': 1.0.6 + '@types/hast': 3.0.4 + hast-util-to-estree: 3.1.0 + transitivePeerDependencies: + - supports-color relateurl@0.2.7: {} remark-directive@3.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-directive: 3.0.0 - micromark-extension-directive: 3.0.0 - unified: 11.0.4 + micromark-extension-directive: 3.0.2 + unified: 11.0.5 transitivePeerDependencies: - supports-color remark-emoji@4.0.1: dependencies: - '@types/mdast': 4.0.3 - emoticon: 4.0.1 + '@types/mdast': 4.0.4 + emoticon: 4.1.0 mdast-util-find-and-replace: 3.0.1 node-emoji: 2.1.3 - unified: 11.0.4 + unified: 11.0.5 remark-frontmatter@5.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-frontmatter: 2.0.1 micromark-extension-frontmatter: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color remark-gfm@4.0.0: dependencies: - '@types/mdast': 4.0.3 + '@types/mdast': 4.0.4 mdast-util-gfm: 3.0.0 micromark-extension-gfm: 3.0.0 remark-parse: 11.0.0 remark-stringify: 11.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-mdx@3.0.1: + remark-mdx@3.1.0: dependencies: mdast-util-mdx: 3.0.0 micromark-extension-mdxjs: 3.0.0 @@ -14026,26 +14191,26 @@ snapshots: remark-parse@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-from-markdown: 2.0.0 + '@types/mdast': 4.0.4 + mdast-util-from-markdown: 2.0.2 micromark-util-types: 2.0.0 - unified: 11.0.4 + unified: 11.0.5 transitivePeerDependencies: - supports-color - remark-rehype@11.1.0: + remark-rehype@11.1.1: dependencies: '@types/hast': 3.0.4 - '@types/mdast': 4.0.3 - mdast-util-to-hast: 13.1.0 - unified: 11.0.4 - vfile: 6.0.1 + '@types/mdast': 4.0.4 + mdast-util-to-hast: 13.2.0 + unified: 11.0.5 + vfile: 6.0.3 remark-stringify@11.0.0: dependencies: - '@types/mdast': 4.0.3 - mdast-util-to-markdown: 2.1.0 - unified: 11.0.4 + '@types/mdast': 4.0.4 + mdast-util-to-markdown: 2.1.2 + unified: 11.0.5 renderkid@3.0.0: dependencies: @@ -14055,6 +14220,8 @@ snapshots: lodash: 4.17.21 strip-ansi: 6.0.1 + repeat-string@1.6.1: {} + require-directory@2.1.1: {} require-from-string@2.0.2: {} @@ -14080,7 +14247,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -14097,7 +14264,7 @@ snapshots: reusify@1.0.4: {} - rfdc@1.3.1: {} + rfdc@1.4.1: {} rimraf@3.0.2: dependencies: @@ -14105,11 +14272,11 @@ snapshots: rtl-detect@1.1.2: {} - rtlcss@4.1.1: + rtlcss@4.3.0: dependencies: - escalade: 3.1.2 - picocolors: 1.0.0 - postcss: 8.4.38 + escalade: 3.2.0 + picocolors: 1.1.1 + postcss: 8.4.47 strip-json-comments: 3.1.1 run-parallel@1.2.0: @@ -14118,7 +14285,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.2 + tslib: 2.8.1 sade@1.8.1: dependencies: @@ -14143,7 +14310,7 @@ snapshots: safer-buffer@2.1.2: {} - sax@1.3.0: {} + sax@1.4.1: {} scheduler@0.23.2: dependencies: @@ -14164,11 +14331,11 @@ snapshots: schema-utils@4.2.0: dependencies: '@types/json-schema': 7.0.15 - ajv: 8.13.0 - ajv-formats: 2.1.1(ajv@8.13.0) - ajv-keywords: 5.1.0(ajv@8.13.0) + ajv: 8.17.1 + ajv-formats: 2.1.1(ajv@8.17.1) + ajv-keywords: 5.1.0(ajv@8.17.1) - search-insights@2.13.0: {} + search-insights@2.17.2: {} section-matter@1.0.0: dependencies: @@ -14186,17 +14353,15 @@ snapshots: semver-diff@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 semver@5.7.2: {} semver@6.3.1: {} - semver@7.6.0: - dependencies: - lru-cache: 6.0.0 + semver@7.6.3: {} - send@0.18.0: + send@0.19.0: dependencies: debug: 2.6.9 depd: 2.0.0 @@ -14214,23 +14379,18 @@ snapshots: transitivePeerDependencies: - supports-color - serialize-javascript@6.0.0: - dependencies: - randombytes: 2.1.0 - serialize-javascript@6.0.2: dependencies: randombytes: 2.1.0 - serve-handler@6.1.5: + serve-handler@6.1.6: dependencies: bytes: 3.0.0 content-disposition: 0.5.2 - fast-url-parser: 1.1.3 mime-types: 2.1.18 minimatch: 3.1.2 path-is-inside: 1.0.2 - path-to-regexp: 2.2.1 + path-to-regexp: 3.3.0 range-parser: 1.2.0 serve-index@1.9.1: @@ -14245,12 +14405,12 @@ snapshots: transitivePeerDependencies: - supports-color - serve-static@1.15.0: + serve-static@1.16.2: dependencies: - encodeurl: 1.0.2 + encodeurl: 2.0.0 escape-html: 1.0.3 parseurl: 1.3.3 - send: 0.18.0 + send: 0.19.0 transitivePeerDependencies: - supports-color @@ -14303,7 +14463,7 @@ snapshots: shiki@0.14.7: dependencies: ansi-sequence-parser: 1.1.1 - jsonc-parser: 3.2.1 + jsonc-parser: 3.3.1 vscode-oniguruma: 1.7.0 vscode-textmate: 8.0.0 @@ -14312,7 +14472,7 @@ snapshots: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - object-inspect: 1.13.1 + object-inspect: 1.13.2 signal-exit@3.0.7: {} @@ -14322,25 +14482,25 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 '@sinonjs/fake-timers': 10.3.0 - '@sinonjs/samsam': 8.0.0 + '@sinonjs/samsam': 8.0.2 diff: 5.2.0 nise: 5.1.9 supports-color: 7.2.0 sirv@2.0.4: dependencies: - '@polka/url': 1.0.0-next.25 + '@polka/url': 1.0.0-next.28 mrmime: 2.0.0 totalist: 3.0.1 sisteransi@1.0.5: {} - sitemap@7.1.1: + sitemap@7.1.2: dependencies: '@types/node': 17.0.45 '@types/sax': 1.2.7 arg: 5.0.2 - sax: 1.3.0 + sax: 1.4.1 skin-tone@2.0.0: dependencies: @@ -14360,7 +14520,7 @@ snapshots: snake-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.2 + tslib: 2.8.1 sockjs@0.3.24: dependencies: @@ -14370,8 +14530,6 @@ snapshots: sort-css-media-queries@2.2.0: {} - source-map-js@1.2.0: {} - source-map-js@1.2.1: {} source-map-support@0.5.21: @@ -14390,25 +14548,25 @@ snapshots: spdx-correct@3.2.0: dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.20 spdx-exceptions@2.5.0: {} spdx-expression-parse@3.0.1: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.20 spdx-expression-parse@4.0.0: dependencies: spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 + spdx-license-ids: 3.0.20 - spdx-license-ids@3.0.17: {} + spdx-license-ids@3.0.20: {} spdy-transport@3.0.0: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) detect-node: 2.1.0 hpack.js: 2.1.6 obuf: 1.1.2 @@ -14419,7 +14577,7 @@ snapshots: spdy@4.0.2: dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.7(supports-color@8.1.1) handle-thing: 2.0.1 http-deceiver: 1.2.7 select-hose: 2.0.0 @@ -14467,7 +14625,7 @@ snapshots: string-width@6.1.0: dependencies: eastasianwidth: 0.2.0 - emoji-regex: 10.3.0 + emoji-regex: 10.4.0 strip-ansi: 7.1.0 string.prototype.padend@3.1.6: @@ -14521,7 +14679,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 strip-bom-string@1.0.0: {} @@ -14541,15 +14699,15 @@ snapshots: dependencies: inline-style-parser: 0.1.1 - style-to-object@1.0.6: + style-to-object@1.0.8: dependencies: - inline-style-parser: 0.2.3 + inline-style-parser: 0.2.4 - stylehacks@6.1.1(postcss@8.4.38): + stylehacks@6.1.1(postcss@8.4.47): dependencies: - browserslist: 4.23.0 - postcss: 8.4.38 - postcss-selector-parser: 6.0.16 + browserslist: 4.24.2 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 supports-color@5.5.0: dependencies: @@ -14563,7 +14721,7 @@ snapshots: dependencies: has-flag: 4.0.0 - supports-hyperlinks@3.0.0: + supports-hyperlinks@3.1.0: dependencies: has-flag: 4.0.0 supports-color: 7.2.0 @@ -14572,7 +14730,7 @@ snapshots: svg-parser@2.0.4: {} - svgo@3.2.0: + svgo@3.3.2: dependencies: '@trysound/sax': 0.2.0 commander: 7.2.0 @@ -14580,11 +14738,11 @@ snapshots: css-tree: 2.3.1 css-what: 6.1.0 csso: 5.0.5 - picocolors: 1.0.0 + picocolors: 1.1.1 sync-multihash-sha2@1.0.0: dependencies: - '@noble/hashes': 1.4.0 + '@noble/hashes': 1.5.0 tapable@1.1.3: {} @@ -14599,19 +14757,19 @@ snapshots: type-fest: 2.19.0 unique-string: 3.0.0 - terser-webpack-plugin@5.3.10(webpack@5.91.0): + terser-webpack-plugin@5.3.10(webpack@5.96.1): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 - terser: 5.31.0 - webpack: 5.91.0 + terser: 5.36.0 + webpack: 5.96.1 - terser@5.31.0: + terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.11.3 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -14629,14 +14787,20 @@ snapshots: text-table@0.2.0: {} + thenify-all@1.6.0: + dependencies: + thenify: 3.3.1 + + thenify@3.3.1: + dependencies: + any-promise: 1.3.0 + thunky@1.1.0: {} tiny-invariant@1.3.3: {} tiny-warning@1.0.3: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -14655,13 +14819,13 @@ snapshots: dependencies: matchit: 1.1.0 - ts-api-utils@1.3.0(typescript@5.7.0-beta): + ts-api-utils@1.4.0(typescript@5.3.3): dependencies: - typescript: 5.7.0-beta + typescript: 5.3.3 ts-expose-internals-conditionally@1.0.0-empty.0: {} - tslib@2.6.2: {} + tslib@2.8.1: {} type-check@0.4.0: dependencies: @@ -14669,15 +14833,19 @@ snapshots: type-detect@4.0.8: {} + type-detect@4.1.0: {} + type-fest@0.20.2: {} + type-fest@0.21.3: {} + type-fest@1.4.0: {} type-fest@2.19.0: {} type-fest@3.13.1: {} - type-fest@4.18.2: {} + type-fest@4.26.1: {} type-is@1.6.18: dependencies: @@ -14733,7 +14901,7 @@ snapshots: dependencies: lunr: 2.3.9 marked: 4.3.0 - minimatch: 9.0.4 + minimatch: 9.0.5 shiki: 0.14.7 typescript: 5.2.2 @@ -14741,22 +14909,20 @@ snapshots: typescript@5.3.3: {} - typescript@5.7.0-beta: {} - uglify-js@3.19.3: optional: true uint8arraylist@2.4.8: dependencies: - uint8arrays: 5.0.3 + uint8arrays: 5.1.0 uint8arrays@4.0.10: dependencies: multiformats: 12.1.3 - uint8arrays@5.0.3: + uint8arrays@5.1.0: dependencies: - multiformats: 13.1.0 + multiformats: 13.3.1 unbox-primitive@1.0.2: dependencies: @@ -14765,32 +14931,32 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@5.26.5: {} + undici-types@6.19.8: {} - unicode-canonical-property-names-ecmascript@2.0.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-emoji-modifier-base@1.0.0: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} unicode-property-aliases-ecmascript@2.1.0: {} unicorn-magic@0.1.0: {} - unified@11.0.4: + unified@11.0.5: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 bail: 2.0.2 devlop: 1.1.0 extend: 3.0.2 is-plain-obj: 4.1.0 trough: 2.2.0 - vfile: 6.0.1 + vfile: 6.0.3 unique-string@3.0.0: dependencies: @@ -14798,33 +14964,28 @@ snapshots: unist-util-is@6.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-position-from-estree@2.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-position@5.0.0: dependencies: - '@types/unist': 3.0.2 - - unist-util-remove-position@5.0.0: - dependencies: - '@types/unist': 3.0.2 - unist-util-visit: 5.0.0 + '@types/unist': 3.0.3 unist-util-stringify-position@4.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-visit-parents@6.0.1: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit@5.0.0: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-is: 6.0.0 unist-util-visit-parents: 6.0.1 @@ -14832,11 +14993,11 @@ snapshots: unpipe@1.0.0: {} - update-browserslist-db@1.0.15(browserslist@4.23.0): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.23.0 - escalade: 3.1.2 - picocolors: 1.0.0 + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 update-notifier@6.0.2: dependencies: @@ -14851,7 +15012,7 @@ snapshots: is-yarn-global: 0.4.1 latest-version: 7.0.0 pupa: 3.1.0 - semver: 7.6.0 + semver: 7.6.3 semver-diff: 4.0.0 xdg-basedir: 5.1.0 @@ -14859,14 +15020,14 @@ snapshots: dependencies: punycode: 2.3.1 - url-loader@4.1.1(file-loader@6.2.0(webpack@5.91.0))(webpack@5.91.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@5.96.1))(webpack@5.96.1): dependencies: loader-utils: 2.0.4 mime-types: 2.1.35 schema-utils: 3.3.0 - webpack: 5.91.0 + webpack: 5.96.1 optionalDependencies: - file-loader: 6.2.0(webpack@5.91.0) + file-loader: 6.2.0(webpack@5.96.1) util-deprecate@1.0.2: {} @@ -14893,7 +15054,7 @@ snapshots: kleur: 4.1.5 sade: 1.8.1 - v8-to-istanbul@9.2.0: + v8-to-istanbul@9.3.0: dependencies: '@jridgewell/trace-mapping': 0.3.25 '@types/istanbul-lib-coverage': 2.0.6 @@ -14912,20 +15073,19 @@ snapshots: vary@1.1.2: {} - vfile-location@5.0.2: + vfile-location@5.0.3: dependencies: - '@types/unist': 3.0.2 - vfile: 6.0.1 + '@types/unist': 3.0.3 + vfile: 6.0.3 vfile-message@4.0.2: dependencies: - '@types/unist': 3.0.2 + '@types/unist': 3.0.3 unist-util-stringify-position: 4.0.0 - vfile@6.0.1: + vfile@6.0.3: dependencies: - '@types/unist': 3.0.2 - unist-util-stringify-position: 4.0.0 + '@types/unist': 3.0.3 vfile-message: 4.0.2 vscode-oniguruma@1.7.0: {} @@ -14937,7 +15097,7 @@ snapshots: exec-sh: 0.2.2 minimist: 1.2.8 - watchpack@2.4.1: + watchpack@2.4.2: dependencies: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 @@ -14961,31 +15121,31 @@ snapshots: webpack-bundle-analyzer@4.10.2: dependencies: '@discoveryjs/json-ext': 0.5.7 - acorn: 8.11.3 - acorn-walk: 8.3.2 + acorn: 8.14.0 + acorn-walk: 8.3.4 commander: 7.2.0 debounce: 1.2.1 escape-string-regexp: 4.0.0 gzip-size: 6.0.0 html-escaper: 2.0.2 opener: 1.5.2 - picocolors: 1.0.0 + picocolors: 1.1.1 sirv: 2.0.4 - ws: 7.5.9 + ws: 7.5.10 transitivePeerDependencies: - bufferutil - utf-8-validate - webpack-dev-middleware@5.3.4(webpack@5.91.0): + webpack-dev-middleware@5.3.4(webpack@5.96.1): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.91.0 + webpack: 5.96.1 - webpack-dev-server@4.15.2(webpack@5.91.0): + webpack-dev-server@4.15.2(webpack@5.96.1): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -14993,20 +15153,20 @@ snapshots: '@types/serve-index': 1.9.4 '@types/serve-static': 1.15.7 '@types/sockjs': 0.3.36 - '@types/ws': 8.5.10 + '@types/ws': 8.5.13 ansi-html-community: 0.0.8 bonjour-service: 1.2.1 chokidar: 3.6.0 colorette: 2.0.20 - compression: 1.7.4 + compression: 1.7.5 connect-history-api-fallback: 2.0.0 default-gateway: 6.0.3 - express: 4.19.2 + express: 4.21.1 graceful-fs: 4.2.11 html-entities: 2.5.2 - http-proxy-middleware: 2.0.6(@types/express@4.17.21) + http-proxy-middleware: 2.0.7(@types/express@4.17.21) ipaddr.js: 2.2.0 - launch-editor: 2.6.1 + launch-editor: 2.9.1 open: 8.4.2 p-retry: 4.6.2 rimraf: 3.0.2 @@ -15015,10 +15175,10 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.4(webpack@5.91.0) - ws: 8.17.0 + webpack-dev-middleware: 5.3.4(webpack@5.96.1) + ws: 8.18.0 optionalDependencies: - webpack: 5.91.0 + webpack: 5.96.1 transitivePeerDependencies: - bufferutil - debug @@ -15031,21 +15191,26 @@ snapshots: flat: 5.0.2 wildcard: 2.0.1 + webpack-merge@6.0.1: + dependencies: + clone-deep: 4.0.1 + flat: 5.0.2 + wildcard: 2.0.1 + webpack-sources@3.2.3: {} - webpack@5.91.0: + webpack@5.96.1: dependencies: '@types/eslint-scope': 3.7.7 - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 '@webassemblyjs/ast': 1.12.1 '@webassemblyjs/wasm-edit': 1.12.1 '@webassemblyjs/wasm-parser': 1.12.1 - acorn: 8.11.3 - acorn-import-assertions: 1.9.0(acorn@8.11.3) - browserslist: 4.23.0 - chrome-trace-event: 1.0.3 - enhanced-resolve: 5.16.0 - es-module-lexer: 1.5.2 + acorn: 8.14.0 + browserslist: 4.24.2 + chrome-trace-event: 1.0.4 + enhanced-resolve: 5.17.1 + es-module-lexer: 1.5.4 eslint-scope: 5.1.1 events: 3.3.0 glob-to-regexp: 0.4.1 @@ -15056,21 +15221,25 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.91.0) - watchpack: 2.4.1 + terser-webpack-plugin: 5.3.10(webpack@5.96.1) + watchpack: 2.4.2 webpack-sources: 3.2.3 transitivePeerDependencies: - '@swc/core' - esbuild - uglify-js - webpackbar@5.0.2(webpack@5.91.0): + webpackbar@6.0.1(webpack@5.96.1): dependencies: + ansi-escapes: 4.3.2 chalk: 4.1.2 - consola: 2.15.3 + consola: 3.2.3 + figures: 3.2.0 + markdown-table: 2.0.0 pretty-time: 1.1.0 std-env: 3.7.0 - webpack: 5.91.0 + webpack: 5.96.1 + wrap-ansi: 7.0.0 websocket-driver@0.7.4: dependencies: @@ -15085,7 +15254,7 @@ snapshots: tr46: 0.0.3 webidl-conversions: 3.0.1 - when-exit@2.1.2: {} + when-exit@2.1.3: {} which-boxed-primitive@1.0.2: dependencies: @@ -15121,7 +15290,7 @@ snapshots: wordwrap@1.0.0: {} - workerpool@6.2.1: {} + workerpool@6.5.1: {} wrap-ansi@7.0.0: dependencies: @@ -15144,28 +15313,24 @@ snapshots: signal-exit: 3.0.7 typedarray-to-buffer: 3.1.5 - ws@7.5.9: {} + ws@7.5.10: {} - ws@8.17.0: {} + ws@8.18.0: {} xdg-basedir@5.1.0: {} xml-js@1.6.11: dependencies: - sax: 1.3.0 + sax: 1.4.1 y18n@5.0.8: {} yallist@3.1.1: {} - yallist@4.0.0: {} - yaml@1.10.2: {} yaml@2.3.1: {} - yargs-parser@20.2.4: {} - yargs-parser@20.2.9: {} yargs-parser@21.1.1: {} @@ -15180,7 +15345,7 @@ snapshots: yargs@16.2.0: dependencies: cliui: 7.0.4 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -15190,7 +15355,7 @@ snapshots: yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 @@ -15199,6 +15364,6 @@ snapshots: yocto-queue@0.1.0: {} - yocto-queue@1.0.0: {} + yocto-queue@1.1.1: {} zwitch@2.0.4: {} From b035b6d5221be4c44fee25f936a7800a32ee9249 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 17:42:31 +0000 Subject: [PATCH 08/12] chore: fix ci --- .github/workflows/w3up-client.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/w3up-client.yml b/.github/workflows/w3up-client.yml index e5c713b4b..23ce08fa5 100644 --- a/.github/workflows/w3up-client.yml +++ b/.github/workflows/w3up-client.yml @@ -37,7 +37,7 @@ jobs: node-version: ${{ matrix.node_version }} registry-url: https://registry.npmjs.org/ cache: 'pnpm' - - run: pnpm --filter '@storacha/client' install + - run: pnpm --filter '@storacha/client...' install - run: pnpm --filter '@storacha/client' attw - uses: ./packages/w3up-client/.github/actions/test with: From 0e77fde238821403c33d35d53ada4384b2c69724 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 17:44:56 +0000 Subject: [PATCH 09/12] fix: warnings --- packages/w3up-client/src/account.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/w3up-client/src/account.js b/packages/w3up-client/src/account.js index bfa52a7bd..ababbfe48 100644 --- a/packages/w3up-client/src/account.js +++ b/packages/w3up-client/src/account.js @@ -242,8 +242,8 @@ export class AccountPlan { * or when the abort signal is aborted. * * @param {object} [options] - * @param {number} [options.interval=1000] - The polling interval in milliseconds (default is 1000ms). - * @param {number} [options.timeout=900000] - The maximum time to wait in milliseconds before throwing a timeout error (default is 15 minutes). + * @param {number} [options.interval] - The polling interval in milliseconds (default is 1000ms). + * @param {number} [options.timeout] - The maximum time to wait in milliseconds before throwing a timeout error (default is 15 minutes). * @param {AbortSignal} [options.signal] - An optional AbortSignal to cancel the waiting process. * @returns {Promise} - Resolves once a payment plan is selected within the timeout. * @throws {Error} - Throws an error if there is an issue retrieving the payment plan or if the timeout is exceeded. From edfd9295fecc65afbdc085c0dc726a0f14cc8df6 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 17:54:35 +0000 Subject: [PATCH 10/12] docs: redo rename undo --- packages/access-client/src/agent.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/access-client/src/agent.js b/packages/access-client/src/agent.js index 511c8ebc3..5fc067ef9 100644 --- a/packages/access-client/src/agent.js +++ b/packages/access-client/src/agent.js @@ -239,7 +239,7 @@ export class Agent { } } const receipt = await this.invokeAndExecute(UCAN.revoke, { - // per https://github.com/storacha/w3up/blob/main/packages/capabilities/src/ucan.js#L38C6-L38C6 the resource here should be + // per https://github.com/storacha/upload-service/blob/main/packages/capabilities/src/ucan.js#L38C6-L38C6 the resource here should be // the current issuer - using the space DID here works for simple cases but falls apart when a delegee tries to revoke a delegation // they have re-delegated, since they don't have "ucan/revoke" capabilities on the space with: this.issuer.did(), From 689904e6aca25bc6efde181448f4d5a68869854d Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 20:50:45 +0000 Subject: [PATCH 11/12] fix: reset bucket after use --- .../test/external-service/storage-node.js | 2 ++ packages/w3up-client/package.json | 18 +++++++++--------- .../w3up-client/test/helpers/bucket-server.js | 4 ++++ pnpm-lock.yaml | 2 +- 4 files changed, 16 insertions(+), 10 deletions(-) diff --git a/packages/upload-api/test/external-service/storage-node.js b/packages/upload-api/test/external-service/storage-node.js index 669507e91..2cd0962a3 100644 --- a/packages/upload-api/test/external-service/storage-node.js +++ b/packages/upload-api/test/external-service/storage-node.js @@ -199,6 +199,8 @@ export class StorageNode { } }) }) + } else { + await fetch(new URL('/reset', this.baseURL), { method: 'POST' }) } } diff --git a/packages/w3up-client/package.json b/packages/w3up-client/package.json index 66d36e95d..a0b36bee1 100644 --- a/packages/w3up-client/package.json +++ b/packages/w3up-client/package.json @@ -141,33 +141,33 @@ }, "dependencies": { "@ipld/dag-ucan": "^3.4.0", - "@ucanto/client": "^9.0.1", - "@ucanto/core": "^10.0.1", - "@ucanto/interface": "^10.0.1", - "@ucanto/principal": "^9.0.1", - "@ucanto/transport": "^9.1.1", "@storacha/access": "workspace:^", "@storacha/blob-index": "workspace:^", "@storacha/capabilities": "workspace:^", "@storacha/did-mailto": "workspace:^", "@storacha/filecoin-client": "workspace:^", - "@storacha/upload-client": "workspace:^" + "@storacha/upload-client": "workspace:^", + "@ucanto/client": "^9.0.1", + "@ucanto/core": "^10.0.1", + "@ucanto/interface": "^10.0.1", + "@ucanto/principal": "^9.0.1", + "@ucanto/transport": "^9.1.1" }, "devDependencies": { "@ipld/car": "^5.1.1", "@ipld/unixfs": "^2.1.1", + "@storacha/eslint-config": "workspace:^", + "@storacha/upload-api": "workspace:^", "@types/assert": "^1.5.6", "@types/mocha": "^10.0.1", "@types/node": "^20.8.4", "@ucanto/server": "^10.0.0", "@web3-storage/content-claims": "^4.0.4", "@web3-storage/data-segment": "^5.0.0", - "@storacha/eslint-config": "workspace:^", - "@storacha/upload-api": "workspace:^", "assert": "^2.0.0", "c8": "^7.13.0", "hundreds": "^0.0.9", - "mocha": "^10.1.0", + "mocha": "^10.8.2", "multiformats": "^12.1.2", "npm-run-all": "^4.1.5", "playwright-test": "^12.3.4", diff --git a/packages/w3up-client/test/helpers/bucket-server.js b/packages/w3up-client/test/helpers/bucket-server.js index 72120c013..671a311f6 100644 --- a/packages/w3up-client/test/helpers/bucket-server.js +++ b/packages/w3up-client/test/helpers/bucket-server.js @@ -11,6 +11,10 @@ const server = createServer(async (req, res) => { res.setHeader('Access-Control-Allow-Methods', '*') res.setHeader('Access-Control-Allow-Headers', '*') if (req.method === 'OPTIONS') return res.end() + if (req.method === 'POST' && req.url === '/reset') { + data.clear() + return res.end() + } res.statusCode = status if (status === 200) { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 9b44ef852..2c40dc54a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -678,7 +678,7 @@ importers: specifier: ^0.0.9 version: 0.0.9 mocha: - specifier: ^10.1.0 + specifier: ^10.8.2 version: 10.8.2 multiformats: specifier: ^12.1.2 From ae0508c390505bda3a960aec4dc397de9a389dd4 Mon Sep 17 00:00:00 2001 From: Alan Shaw Date: Mon, 4 Nov 2024 22:45:41 +0000 Subject: [PATCH 12/12] refactor: storage node service --- .../upload-api/test/external-service/index.js | 23 +- .../test/external-service/storage-node.js | 333 ++++++++++-------- 2 files changed, 206 insertions(+), 150 deletions(-) diff --git a/packages/upload-api/test/external-service/index.js b/packages/upload-api/test/external-service/index.js index 70339b474..73e767d46 100644 --- a/packages/upload-api/test/external-service/index.js +++ b/packages/upload-api/test/external-service/index.js @@ -1,7 +1,7 @@ import { ok, error } from '@ucanto/core' import { DIDResolutionError } from '@ucanto/validator' import * as ClaimsService from './content-claims.js' -import { StorageNode } from './storage-node.js' +import { BrowserStorageNode, StorageNode } from './storage-node.js' import * as BlobRetriever from './blob-retriever.js' import * as Router from './router.js' @@ -22,18 +22,27 @@ export const getExternalServiceImplementations = async (config) => { const claimsService = await ClaimsService.activate(config) const blobRetriever = BlobRetriever.create(claimsService) - const storageProviders = await Promise.all([ + const storageProviders = await Promise.all(config.http ? [ StorageNode.activate({ - ...config, - ...principalResolver, - ...(config.http ? {} : { port: 8989 }), + http: config.http, claimsService, + ...principalResolver, }), StorageNode.activate({ - ...config, + http: config.http, + claimsService, + ...principalResolver, + }), + ] : [ + BrowserStorageNode.activate({ + port: 8989, + claimsService, ...principalResolver, - ...(config.http ? {} : { port: 8990 }), + }), + BrowserStorageNode.activate({ + port: 8990, claimsService, + ...principalResolver, }), ]) const router = Router.create(config.serviceID, storageProviders) diff --git a/packages/upload-api/test/external-service/storage-node.js b/packages/upload-api/test/external-service/storage-node.js index 2cd0962a3..dc3c44f5b 100644 --- a/packages/upload-api/test/external-service/storage-node.js +++ b/packages/upload-api/test/external-service/storage-node.js @@ -10,7 +10,19 @@ import { ed25519 } from '@ucanto/principal' import { CAR, HTTP } from '@ucanto/transport' import * as Server from '@ucanto/server' import { connect } from '@ucanto/client' -import { BlobNotFound } from '../../src/blob/lib.js' + +/** + * @typedef {{ +* has: (digest: API.MultihashDigest) => Promise +* get: (digest: API.MultihashDigest) => Promise +* set: (digest: API.MultihashDigest, bytes: Uint8Array) => Promise +* }} ContentStore +* @typedef {{ +* has: (digest: API.MultihashDigest) => Promise +* add: (digest: API.MultihashDigest) => Promise +* }} AllocationStore +* @typedef {import('../../src/types/blob.js').BlobService} BlobService +*/ export const MaxUploadSize = 127 * (1 << 25) @@ -20,95 +32,179 @@ const contentKey = (digest) => { return `${encodedMultihash}/${encodedMultihash}.blob` } -export class StorageNode { - /** @param {{ http?: import('http'), port?: number, claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ - static async activate(config) { +/** @param {string} key */ +const contentDigest = (key) => + Digest.decode(base58btc.decode(key.split('/').pop()?.replace('.blob', '') ?? '')) + +/** + * @param {{ + * baseURL: () => URL + * claimsService: API.ClaimsClientConfig + * contentStore: Omit + * allocationStore: AllocationStore + * }} config + * @returns {BlobService} + */ +const createService = ({ baseURL, claimsService, contentStore, allocationStore }) => ({ + blob: { + allocate: Server.provideAdvanced({ + capability: BlobCapabilities.allocate, + handler: async ({ capability }) => { + const digest = Digest.decode(capability.nb.blob.digest) + const checksum = base64pad.baseEncode(digest.digest) + if (capability.nb.blob.size > MaxUploadSize) { + return error(new BlobSizeLimitExceededError(capability.nb.blob.size)) + } + if (await contentStore.has(digest)) { + return ok({ size: 0 }) + } + + const size = await allocationStore.has(digest) ? 0 : capability.nb.blob.size + await allocationStore.add(digest) + + return ok({ + size, + address: { + url: new URL(contentKey(digest), baseURL()).toString(), + headers: { 'x-amz-checksum-sha256': checksum }, + expires: 60 * 60 * 24, + }, + }) + }, + }), + accept: Server.provideAdvanced({ + capability: BlobCapabilities.accept, + handler: async ({ capability }) => { + const digest = Digest.decode(capability.nb.blob.digest) + if (!(await contentStore.has(digest))) { + return error(new AllocatedMemoryNotWrittenError()) + } + + const receipt = await publishLocationCommitment({ claimsService }, { + space: capability.nb.space, + digest, + location: + /** @type {API.URI} */ + (new URL(contentKey(digest), baseURL()).toString()), + }) + if (receipt.out.error) { + return receipt.out + } + + return Server.ok({ site: receipt.ran.link() }).fork(receipt.ran) + }, + }), + }, +}) + +// The browser storage node has an external bucket where data is sent, started +// before the browser tests begin. +export class BrowserStorageNode { + /** @param {{ port?: number, claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ + static async activate({ claimsService, resolveDIDKey, port }) { const id = await ed25519.generate() - const content = new Map() - const allocations = new Set() - /** @type {URL} */ - let baseURL + const baseURL = new URL(`http://127.0.0.1:${port ?? 8989}`) - /** @param {API.MultihashDigest} digest */ - const hasContent = async (digest) => { - if (config.http) { - return content.has(contentKey(digest)) + const contentStore = { + /** @param {API.MultihashDigest} digest */ + has: async (digest) => { + const res = await fetch(new URL(contentKey(digest), baseURL)) + return res.status === 200 + }, + /** @param {API.MultihashDigest} digest */ + get: async (digest) => { + const res = await fetch(new URL(contentKey(digest), baseURL)) + return res.status === 200 + ? new Uint8Array(await res.arrayBuffer()) + : undefined } - // if no http server, the content should be available at the base URL - // a "public bucket" used in tests. - const res = await fetch(new URL(contentKey(digest), baseURL)) - return res.status === 200 + } + + const allocations = new Set() + const allocationStore = { + /** @param {API.MultihashDigest} digest */ + has: async (digest) => allocations.has(contentKey(digest)), + /** @param {API.MultihashDigest} digest */ + add: async (digest) => { allocations.add(contentKey(digest)) } } const server = Server.create({ id, codec: CAR.inbound, - service: /** @type {import('../../src/types/blob.js').BlobService} */ ({ - blob: { - allocate: Server.provideAdvanced({ - capability: BlobCapabilities.allocate, - handler: async ({ capability }) => { - const digest = Digest.decode(capability.nb.blob.digest) - const checksum = base64pad.baseEncode(digest.digest) - if (capability.nb.blob.size > MaxUploadSize) { - return Server.error( - new BlobSizeLimitExceededError(capability.nb.blob.size) - ) - } - if (await hasContent(digest)) { - return Server.ok({ size: 0 }) - } - - const key = contentKey(digest) - const size = allocations.has(key) ? 0 : capability.nb.blob.size - allocations.add(key) - - return Server.ok({ - size, - address: { - url: new URL(contentKey(digest), baseURL).toString(), - headers: { 'x-amz-checksum-sha256': checksum }, - expires: 60 * 60 * 24, - }, - }) - }, - }), - accept: Server.provideAdvanced({ - capability: BlobCapabilities.accept, - handler: async ({ capability }) => { - const digest = Digest.decode(capability.nb.blob.digest) - if (!(await hasContent(digest))) { - return Server.error(new AllocatedMemoryNotWrittenError()) - } - - const receipt = await publishLocationCommitment(config, { - space: capability.nb.space, - digest, - location: - /** @type {API.URI} */ - (new URL(contentKey(digest), baseURL).toString()), - }) - if (receipt.out.error) { - return receipt.out - } - - return Server.ok({ site: receipt.ran.link() }).fork(receipt.ran) - }, - }), - }, - }), + service: createService({ baseURL: () => baseURL, claimsService, contentStore, allocationStore }), // @ts-expect-error - resolveDIDKey: config.resolveDIDKey, + resolveDIDKey, validateAuthorization: () => ({ ok: {} }), }) - if (!config.http) { - baseURL = new URL(`http://127.0.0.1:${config.port ?? 8989}`) - const connection = connect({ id, codec: CAR.outbound, channel: server }) - return new StorageNode({ id, content, url: baseURL, connection }) + const connection = connect({ id, codec: CAR.outbound, channel: server }) + + return new BrowserStorageNode({ id, baseURL, connection }) + } + + /** + * @param {{ + * id: API.Signer + * connection: import('@ucanto/interface').ConnectionView + * baseURL: URL + * }} config + */ + constructor({ id, baseURL, connection }) { + this.id = id + this.baseURL = baseURL + this.connection = connection + } + + async deactivate() { + try { + await fetch(new URL('/reset', this.baseURL), { method: 'POST' }) + } catch {} + } +} + +export class StorageNode { + /** @param {{ http: import('http'), claimsService: API.ClaimsClientConfig } & import('@ucanto/interface').PrincipalResolver} config */ + static async activate({ http, claimsService, resolveDIDKey }) { + const id = await ed25519.generate() + /** @type {URL} */ + let baseURL + + const content = new Map() + const contentStore = { + /** @param {API.MultihashDigest} digest */ + has: async (digest) => content.has(contentKey(digest)), + /** @param {API.MultihashDigest} digest */ + get: async (digest) => content.get(contentKey(digest)), + /** + * @param {API.MultihashDigest} digest + * @param {Uint8Array} bytes + */ + set: async (digest, bytes) => { content.set(contentKey(digest), bytes) } + } + + const allocations = new Set() + const allocationStore = { + /** @param {API.MultihashDigest} digest */ + has: async (digest) => allocations.has(contentKey(digest)), + /** @param {API.MultihashDigest} digest */ + add: async (digest) => { allocations.add(contentKey(digest)) } } - const httpServer = config.http.createServer(async (request, response) => { + const server = Server.create({ + id, + codec: CAR.inbound, + service: createService({ + baseURL: () => baseURL, + claimsService, + contentStore, + allocationStore + }), + // @ts-expect-error + resolveDIDKey, + validateAuthorization: () => ({ ok: {} }), + }) + + const httpServer = http.createServer(async (request, response) => { try { const { pathname } = new URL(request.url ?? '/', baseURL) if (request.method === 'POST') { @@ -140,11 +236,11 @@ export class StorageNode { if (checksum !== request.headers['x-amz-checksum-sha256']) { response.writeHead(400, `checksum mismatch`) } else { - content.set(contentKey(digest), buffer) + await contentStore.set(digest, buffer) response.writeHead(200) } } else if (request.method === 'GET') { - const data = content.get(pathname.slice(1)) + const data = await contentStore.get(contentDigest(pathname)) if (data) { response.writeHead(200) response.write(data) @@ -163,90 +259,41 @@ export class StorageNode { // otherwise it keep connection lingering response.destroy() }) - await /** @type {Promise} */ ( - new Promise((resolve) => { - if (config.port) { - return httpServer.listen(port, resolve) - } - httpServer.listen(resolve) - }) - ) + await new Promise((resolve) => httpServer.listen(resolve)) // @ts-ignore - this is actually what it returns on http const { port } = httpServer.address() baseURL = new URL(`http://127.0.0.1:${port}`) const channel = HTTP.open({ url: baseURL, method: 'POST' }) const connection = connect({ id, codec: CAR.outbound, channel }) - return new StorageNode({ - id, - content, - url: baseURL, - connection, - server: httpServer, - }) - } - async deactivate() { - const { server } = this - if (server) { - await new Promise((resolve, reject) => { - server.closeAllConnections() - server.close((error) => { - if (error) { - reject(error) - } else { - resolve(undefined) - } - }) - }) - } else { - await fetch(new URL('/reset', this.baseURL), { method: 'POST' }) - } + return new StorageNode({ id, connection, server: httpServer }) } /** * @param {{ * id: API.Signer - * url: URL - * content: Map - * connection: import('@ucanto/interface').Connection - * server?: import('http').Server - * }} options + * connection: import('@ucanto/interface').ConnectionView + * server: import('http').Server + * }} config */ - constructor({ id, url, content, connection, server }) { + constructor({ id, connection, server }) { this.id = id - this.baseURL = url - this.content = content this.connection = connection this.server = server } - /** @param {API.MultihashDigest} digest */ - async stream(digest) { - const key = contentKey(digest) - if (!this.server) { - const url = new URL(key, this.baseURL) - const res = await fetch(url.toString()) - if (res.status === 404) return error(new BlobNotFound(digest)) - if (!res.ok || !res.body) { - throw new Error( - `serverless blob storage failed to fetch from: ${url} status: ${res.status}` - ) - } - return ok(res.body) - } - - const bytes = this.content.get(key) - if (!bytes) return error(new BlobNotFound(digest)) - - return ok( - new ReadableStream({ - pull(controller) { - controller.enqueue(bytes) - controller.close() - }, + async deactivate() { + await new Promise((resolve, reject) => { + this.server.closeAllConnections() + this.server.close((error) => { + if (error) { + reject(error) + } else { + resolve(undefined) + } }) - ) + }) } }