diff --git a/packages/api/package.json b/packages/api/package.json index 50c703aeb1..fdde6b9fa3 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -33,8 +33,9 @@ "@ucanto/server": "^9.0.1", "@web3-storage/access": "^18.2.0", "@web3-storage/car-block-validator": "^1.2.0", + "@web3-storage/content-claims": "^4.0.4", "@web3-storage/upload-client": "^13.2.0", - "@web3-storage/w3up-client": "^12.5.0", + "@web3-storage/w3up-client": "^12.5.1", "cardex": "^1.0.0", "ipfs-car": "^0.6.1", "it-last": "^2.0.0", @@ -47,7 +48,7 @@ "regexparam": "^2.0.0", "toucan-js": "^2.7.0", "ucan-storage": "^1.3.0", - "uint8arrays": "^3.0.0" + "uint8arrays": "5.0.2" }, "devDependencies": { "@cloudflare/workers-types": "^3.17.0", @@ -67,7 +68,7 @@ "carbites": "^1.0.6", "delay": "^5.0.0", "dotenv": "^10.0.0", - "esbuild": "^0.13.13", + "esbuild": "^0.20.2", "execa": "^5.1.1", "git-rev-sync": "^3.0.1", "ipfs-unixfs-importer": "^9.0.3", diff --git a/packages/api/src/bindings.d.ts b/packages/api/src/bindings.d.ts index 04da3d1ec3..31ba46662d 100644 --- a/packages/api/src/bindings.d.ts +++ b/packages/api/src/bindings.d.ts @@ -8,6 +8,7 @@ import { DBClient } from './utils/db-client.js' import { LinkdexApi } from './utils/linkdex.js' import { Logging } from './utils/logs.js' import { Client as W3upClient } from '@web3-storage/w3up-client' +import * as contentClaims from '@web3-storage/content-claims/client' export type RuntimeEnvironmentName = 'test' | 'dev' | 'staging' | 'production' @@ -142,6 +143,10 @@ export interface AuthOptions { checkHasPsaAccess?: boolean } +export interface ContentClaimsClient { + read: typeof contentClaims.read +} + export interface RouteContext { params: Record db: DBClient @@ -158,6 +163,7 @@ export interface RouteContext { W3_NFTSTORAGE_SPACE?: string W3_NFTSTORAGE_ENABLE_W3UP_FOR_EMAILS?: string w3up?: W3upClient + contentClaims?: ContentClaimsClient } export type Handler = ( diff --git a/packages/api/src/routes/nfts-get.js b/packages/api/src/routes/nfts-get.js index fe4c6ad3ea..beb7afaee3 100644 --- a/packages/api/src/routes/nfts-get.js +++ b/packages/api/src/routes/nfts-get.js @@ -3,6 +3,7 @@ import { JSONResponse } from '../utils/json-response.js' import { checkAuth, validate } from '../utils/auth.js' import { parseCid } from '../utils/utils.js' import { toNFTResponse } from '../utils/db-transforms.js' +import { getW3upDeals } from '../utils/w3up.js' /** * @typedef {import('../bindings').Deal} Deal @@ -13,8 +14,15 @@ export const nftGet = async (event, ctx) => { const { params, db } = ctx const { user } = checkAuth(ctx) const cid = parseCid(params.cid) - const nft = await db.getUpload(cid.sourceCid, user.id) + const [nft, w3upDeals] = await Promise.all([ + db.getUpload(cid.sourceCid, user.id), + ctx.w3up && ctx.contentClaims + ? getW3upDeals(ctx.w3up, ctx.contentClaims, cid.contentCid) + : [], + ]) if (nft) { + // merge deals from dagcargo with deals from w3up + nft.deals = [...nft?.deals, ...(w3upDeals || [])] return new JSONResponse({ ok: true, value: toNFTResponse(nft, cid.sourceCid), diff --git a/packages/api/src/routes/nfts-upload.js b/packages/api/src/routes/nfts-upload.js index d13f42021a..6f36eaea09 100644 --- a/packages/api/src/routes/nfts-upload.js +++ b/packages/api/src/routes/nfts-upload.js @@ -189,7 +189,6 @@ export async function uploadCarWithStat( if (stat.structure === 'Partial') { checkDagStructureTask = async () => { - // @ts-expect-error - I'm not sure why this started failing TODO debug further const info = await w3up.capability.upload.get(stat.rootCid) if (info.shards && info.shards.length > 1) { const structure = await ctx.linkdexApi.getDagStructureForCars( diff --git a/packages/api/src/utils/context.js b/packages/api/src/utils/context.js index 4b43242e54..bd4f4726ad 100644 --- a/packages/api/src/utils/context.js +++ b/packages/api/src/utils/context.js @@ -9,6 +9,7 @@ import { Service } from 'ucan-storage/service' import { LinkdexApi } from './linkdex.js' import { createW3upClientFromConfig } from './w3up.js' import { DID } from '@ucanto/core' +import * as contentClaims from '@web3-storage/content-claims/client' /** * Obtains a route context object. @@ -105,6 +106,7 @@ export async function getContext(event, params) { r2Uploader, log, ucanService, + contentClaims, w3up, } } diff --git a/packages/api/src/utils/db-client.js b/packages/api/src/utils/db-client.js index cd8159934f..e8988d61f6 100644 --- a/packages/api/src/utils/db-client.js +++ b/packages/api/src/utils/db-client.js @@ -429,7 +429,7 @@ export class DBClient { const cids = uploads?.map((u) => u.content_cid) - const deals = await this.getDealsForCids(cids) + const deals = await this.getDealsFromDagcargoFDW(cids) return uploads?.map((u) => { return { @@ -515,7 +515,7 @@ export class DBClient { * @returns {Promise} */ async getDeals(cid) { - const deals = await this.getDealsForCids([cid]) + const deals = await this.getDealsFromDagcargoFDW([cid]) return deals[cid] ? deals[cid] : [] } @@ -527,7 +527,7 @@ export class DBClient { * * @param {string[]} cids */ - async getDealsForCids(cids = []) { + async getDealsFromDagcargoFDW(cids = []) { try { const rsp = await this.client.rpc('find_deals_by_content_cids', { cids, diff --git a/packages/api/src/utils/w3up.js b/packages/api/src/utils/w3up.js index 8aff4a3758..00bc17b32e 100644 --- a/packages/api/src/utils/w3up.js +++ b/packages/api/src/utils/w3up.js @@ -7,6 +7,7 @@ import { identity } from 'multiformats/hashes/identity' import { CarReader } from '@ipld/car' import { importDAG } from '@ucanto/core/delegation' import * as W3upClient from '@web3-storage/w3up-client' +import { parseLink } from '@ucanto/core' import { connect } from '@ucanto/client' import { CAR, HTTP } from '@ucanto/transport' @@ -106,3 +107,95 @@ export async function createW3upClientFromConfig(options) { await w3up.addSpace(await parseW3Proof(options.proof)) return w3up } + +/** + * + * @param {W3upClient.Client} client + * @param {{read: typeof import('@web3-storage/content-claims/client').read}} contentClaimsClient + * @param {import('@web3-storage/upload-client/types').UploadListItem} upload + * @returns {Promise[]>} + */ +async function getFilecoinInfos(client, contentClaimsClient, upload) { + return await Promise.all( + // for each shard of the upload + upload.shards + ? upload.shards.map(async (shard) => { + // find the equivalent piece link + const pieceClaims = await contentClaimsClient.read(shard) + const pieceClaim = + /** @type {import('@web3-storage/content-claims/client/api').EqualsClaim} */ ( + pieceClaims.find((c) => c.type === 'assert/equals') + ) + if (pieceClaim) { + const pieceLink = pieceClaim.equals + // and get filecoin info for it + const filecoinInfo = await client.capability.filecoin.info( + /** @type {import('@web3-storage/access').PieceLink} */ ( + pieceLink + ) + ) + return filecoinInfo.out + } else { + return { + error: { + name: 'PieceLinkClaimNotFound', + message: `could not find piece link equivalent of ${shard}`, + }, + } + } + }) + : [] + ) +} + +/** + * + * @param {W3upClient.Client | undefined} client + * @param {{read: typeof import('@web3-storage/content-claims/client').read}} contentClaimsClient + * @param {string} contentCid + * @returns {Promise} + */ +export async function getW3upDeals(client, contentClaimsClient, contentCid) { + if (client) { + const link = parseLink(contentCid) + // get the upload + let upload + try { + upload = await client.capability.upload.get(link) + } catch (e) { + console.error('error getting upload', e) + return [] + } + const filecoinInfoResults = await getFilecoinInfos( + client, + contentClaimsClient, + upload + ) + /** + * @type {import('../bindings').Deal[]} + */ + const filecoinInfos = [] + for (const result of filecoinInfoResults) { + if (result.ok) { + const info = result.ok + for (const deal of info.deals) { + filecoinInfos.push({ + pieceCid: info.piece.toString(), + status: 'published', + batchRootCid: deal.aggregate.toString(), + miner: deal.provider, + chainDealID: Number(deal.aux.dataSource.dealID), + // TODO: figure this out + datamodelSelector: '', + }) + } + } else { + // @ts-expect-error - in practice this will just be undefined if message doesn't exist + console.warn(`error getting filecoininfo: ${result.error.message}`) + } + } + return filecoinInfos + } else { + return [] + } +} diff --git a/packages/api/test/nfts-get.spec.js b/packages/api/test/nfts-get.spec.js index 34c4f02eb2..151ee62ad2 100644 --- a/packages/api/test/nfts-get.spec.js +++ b/packages/api/test/nfts-get.spec.js @@ -1,13 +1,146 @@ import test from 'ava' +import { createServer } from 'node:http' +import { ed25519 } from '@ucanto/principal' +import { delegate, parseLink } from '@ucanto/core' +import { base64 } from 'multiformats/bases/base64' import { createClientWithUser } from './scripts/helpers.js' import { fixtures } from './scripts/fixtures.js' import { getMiniflareContext, setupMiniflareContext, } from './scripts/test-context.js' +import { + createMockW3up, + locate, + encodeDelegationAsCid, +} from './utils/w3up-testing.js' + +const nftStorageSpace = ed25519.generate() +const nftStorageApiPrincipal = ed25519.generate() +const nftStorageAccountEmailAllowListedForW3up = 'test+w3up@dev.nft.storage' +const mockW3upDID = 'did:web:test.web3.storage' +/** + * @type {import('@web3-storage/access').PieceLink} + */ +const mockPieceLink = parseLink( + 'bafkzcibeslzwmewd4pugjanyiayot5m76a67dvdir25v6ms6kbuozy2sxotplrrrce' +) +/** + * @type {import('@web3-storage/access').FilecoinInfoAcceptedDeal[]} + */ +const mockDeals = [ + { + aggregate: parseLink( + 'bafkzcibcaapen7lfjgljzi523a5rau2l5pwpwseita6uunqy5otrlxa2l2pouca' + ), + aux: { + dataSource: { + dealID: BigInt(1), + }, + dataType: BigInt(1), + }, + provider: 'f01240', + }, +] +const cidWithShards = parseLink( + 'bafybeiccy35oi3gajocq5bbg7pnaxb3kv5ibtdz3tc3kari53qhbjotzey' +) +const mockW3up = Promise.resolve( + (async function () { + const server = createServer( + await createMockW3up({ + did: mockW3upDID, + // @ts-expect-error not returning a full upload get response for now + async onHandleUploadGet(invocation) { + if (invocation.capability.nb.root?.equals(cidWithShards)) { + return { + // grabbed this shard CID from staging, it should correspond to a piece named bafkzcibeslzwmewd4pugjanyiayot5m76a67dvdir25v6ms6kbuozy2sxotplrrrce + shards: [ + parseLink( + 'bagbaieragf62xatg3bqrfafdy3lpk2fte7526kvxnltqsnhjr45cz6jjk7mq' + ), + ], + } + } else { + return { + shards: [], + } + } + }, + async onHandleFilecoinInfo(invocation) { + if (invocation.capability.nb.piece.equals(mockPieceLink)) { + return { + deals: mockDeals, + aggregates: [], + piece: mockPieceLink, + } + } else { + return undefined + } + }, + }) + ) + server.listen(0) + await new Promise((resolve) => + server.addListener('listening', () => resolve(undefined)) + ) + return { + server, + } + })() +) test.before(async (t) => { - await setupMiniflareContext(t) + await setupMiniflareContext(t, { + overrides: { + W3UP_URL: locate((await mockW3up).server).url.toString(), + W3UP_DID: mockW3upDID, + W3_NFTSTORAGE_SPACE: (await nftStorageSpace).did(), + W3_NFTSTORAGE_PRINCIPAL: ed25519.format(await nftStorageApiPrincipal), + W3_NFTSTORAGE_PROOF: ( + await encodeDelegationAsCid( + await delegate({ + issuer: await nftStorageSpace, + audience: await nftStorageApiPrincipal, + capabilities: [ + { can: 'upload/get', with: (await nftStorageSpace).did() }, + { can: 'filecoin/info', with: (await nftStorageSpace).did() }, + ], + }) + ) + ).toString(base64), + W3_NFTSTORAGE_ENABLE_W3UP_FOR_EMAILS: JSON.stringify([ + nftStorageAccountEmailAllowListedForW3up, + ]), + }, + }) +}) + +test.serial('should fetch deal details from w3up', async (t) => { + const cid = cidWithShards.toString() + const client = await createClientWithUser(t) + const mf = getMiniflareContext(t) + await client.addPin({ + cid, + name: 'test-filecoin-info', + }) + + const res = await mf.dispatchFetch(`http://miniflare.test/${cid}`, { + headers: { Authorization: `Bearer ${client.token}` }, + }) + const { ok, value } = await res.json() + t.assert(ok) + t.deepEqual( + value.deals, + mockDeals.map((deal) => ({ + pieceCid: mockPieceLink.toString(), + status: 'published', + datamodelSelector: '', + batchRootCid: deal.aggregate.toString(), + miner: deal.provider, + chainDealID: Number(deal.aux.dataSource.dealID), + })) + ) }) test.serial('should return proper response for cid v1', async (t) => { diff --git a/packages/api/test/utils/w3up-testing.js b/packages/api/test/utils/w3up-testing.js index 0df210ff6f..f6ed4c958e 100644 --- a/packages/api/test/utils/w3up-testing.js +++ b/packages/api/test/utils/w3up-testing.js @@ -42,6 +42,8 @@ export async function encodeDelegationAsCid(delegation) { * create a RequestListener that can be a mock up.web3.storage * @param {object} [options] - options * @param {string} options.did + * @param {(invocation: import('@ucanto/server').ProviderInput>) => Promise} [options.onHandleFilecoinInfo] - called in the filecoin/info handler and the result is returned + * @param {(invocation: import('@ucanto/server').ProviderInput>) => Promise} [options.onHandleUploadGet] - called in the upload/get handler and the result is returned * @param {(invocation: import('@ucanto/server').ProviderInput>) => Promise} [options.onHandleStoreAdd] - called at start of store/add handler * @param {(invocation: import('@ucanto/server').ProviderInput>) => Promise} [options.onHandleUploadAdd] - called at start of upload/add handler */ @@ -55,6 +57,21 @@ export async function createMockW3up( ok: {}, } }), + info: Server.provide(Filecoin.info, async (invocation) => { + const result = await options.onHandleFilecoinInfo?.(invocation) + if (result) { + return { + ok: result, + } + } else { + return { + error: { + name: 'UnexpectedError', + message: `onFilecoinInfo was not defined or return ${result}`, + }, + } + } + }), }, store: { add: Server.provide(Store.add, async (invocation) => { @@ -82,6 +99,22 @@ export async function createMockW3up( ok: success, } }), + + get: Server.provide(Upload.get, async (invocation) => { + const result = await options.onHandleUploadGet?.(invocation) + if (result) { + return { + ok: result, + } + } else { + return { + error: { + name: 'UnexpectedError', + message: `onUploadGet was not defined or return ${result}`, + }, + } + } + }), }, } const serverId = (await ed25519.generate()).withDID( diff --git a/packages/website/lib/api.js b/packages/website/lib/api.js index 3c0f54e687..110dea1d45 100644 --- a/packages/website/lib/api.js +++ b/packages/website/lib/api.js @@ -111,6 +111,29 @@ export async function getNfts({ limit, before }) { } } +/** + * Get NFTs + * + * @param {{cid: string }} query + */ +export async function getNft({ cid }) { + const res = await fetch(`${API}/cid/${cid}`, { + method: 'GET', + headers: { + 'Content-Type': 'application/json', + Authorization: 'Bearer ' + (await getToken()), + }, + }) + + const body = await res.json() + + if (body.ok) { + return body.value + } else { + throw new Error(body.error.message) + } +} + export async function getUserTags() { const res = await fetch(`${API}/user/tags`, { method: 'GET', diff --git a/packages/website/pages/files.js b/packages/website/pages/files.js index cff3f4f853..660b3c49e3 100644 --- a/packages/website/pages/files.js +++ b/packages/website/pages/files.js @@ -1,7 +1,7 @@ -import { API, getNfts, getToken } from '../lib/api.js' +import { API, getNft, getNfts, getToken } from '../lib/api.js' import { useQuery, useQueryClient } from 'react-query' import { CID } from 'multiformats/cid' -import { VscQuestion } from 'react-icons/vsc' +import { VscLoading, VscQuestion } from 'react-icons/vsc' import Button from '../components/button.js' import Tooltip from '../components/tooltip.js' import Loading from '../components/loading' @@ -110,7 +110,19 @@ export default function Files({ user }) { */ const TableItem = ({ nft }) => { const [showAllDeals, setShowAllDeals] = useState(false) - const deals = nft.deals + const [loadW3upDeals, setLoadW3upDeals] = useState(false) + const { status: w3upDealsStatus, data: w3upDeals } = useQuery( + ['w3updeals', nft.cid], + async () => { + const fetchedNft = await getNft(nft) + return fetchedNft.deals + }, + { + enabled: loadW3upDeals, + refetchOnWindowFocus: false, + } + ) + const deals = [...nft.deals, ...(w3upDeals || [])] .filter((/** @type {any} */ d) => d.status !== 'queued') .map( ( @@ -165,30 +177,65 @@ export default function Files({ user }) { const dealsHidden = deals.splice(3) - if (!nft.deals.length) { - deals.push( - - Queuing - - The content from this upload is being aggregated for redundant - storage on Filecoin. Filecoin deals will be active within 48 - hours of upload. While Queuing, data is still available on the - IPFS network. - - } - overlayClassName="ns-tooltip" - id="all-deals-queued-tooltip" + if (!deals.length) { + if (w3upDealsStatus === 'success' || w3upDealsStatus === 'error') { + deals.push( + - - - - ) + Queuing + + The content from this upload is being aggregated for redundant + storage on Filecoin. Filecoin deals will be active within 48 + hours of upload. While Queuing, data is still available on the + IPFS network. + + } + overlayClassName="ns-tooltip" + id="all-deals-queued-tooltip" + > + + + + ) + } else { + deals.push( + + {w3upDealsStatus === 'loading' ? ( +
+ +
+ ) : ( + Check for Filecoin deals for this upload.
} + overlayClassName="ns-tooltip" + id="load-w3up-deals-tooltip" + > + + + )} + + ) + } } return ( diff --git a/yarn.lock b/yarn.lock index 494194d01a..e17259135e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2251,6 +2251,121 @@ escape-string-regexp "^4.0.0" rollup-plugin-node-polyfills "^0.2.1" +"@esbuild/aix-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz#a70f4ac11c6a1dfc18b8bbb13284155d933b9537" + integrity sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g== + +"@esbuild/android-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz#db1c9202a5bc92ea04c7b6840f1bbe09ebf9e6b9" + integrity sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg== + +"@esbuild/android-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.20.2.tgz#3b488c49aee9d491c2c8f98a909b785870d6e995" + integrity sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w== + +"@esbuild/android-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.20.2.tgz#3b1628029e5576249d2b2d766696e50768449f98" + integrity sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg== + +"@esbuild/darwin-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz#6e8517a045ddd86ae30c6608c8475ebc0c4000bb" + integrity sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA== + +"@esbuild/darwin-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz#90ed098e1f9dd8a9381695b207e1cff45540a0d0" + integrity sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA== + +"@esbuild/freebsd-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz#d71502d1ee89a1130327e890364666c760a2a911" + integrity sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw== + +"@esbuild/freebsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz#aa5ea58d9c1dd9af688b8b6f63ef0d3d60cea53c" + integrity sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw== + +"@esbuild/linux-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz#055b63725df678379b0f6db9d0fa85463755b2e5" + integrity sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A== + +"@esbuild/linux-arm@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz#76b3b98cb1f87936fbc37f073efabad49dcd889c" + integrity sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg== + +"@esbuild/linux-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz#c0e5e787c285264e5dfc7a79f04b8b4eefdad7fa" + integrity sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig== + +"@esbuild/linux-loong64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz#a6184e62bd7cdc63e0c0448b83801001653219c5" + integrity sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ== + +"@esbuild/linux-mips64el@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz#d08e39ce86f45ef8fc88549d29c62b8acf5649aa" + integrity sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA== + +"@esbuild/linux-ppc64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz#8d252f0b7756ffd6d1cbde5ea67ff8fd20437f20" + integrity sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg== + +"@esbuild/linux-riscv64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz#19f6dcdb14409dae607f66ca1181dd4e9db81300" + integrity sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg== + +"@esbuild/linux-s390x@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz#3c830c90f1a5d7dd1473d5595ea4ebb920988685" + integrity sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ== + +"@esbuild/linux-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz#86eca35203afc0d9de0694c64ec0ab0a378f6fff" + integrity sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw== + +"@esbuild/netbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz#e771c8eb0e0f6e1877ffd4220036b98aed5915e6" + integrity sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ== + +"@esbuild/openbsd-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz#9a795ae4b4e37e674f0f4d716f3e226dd7c39baf" + integrity sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ== + +"@esbuild/sunos-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz#7df23b61a497b8ac189def6e25a95673caedb03f" + integrity sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w== + +"@esbuild/win32-arm64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz#f1ae5abf9ca052ae11c1bc806fb4c0f519bacf90" + integrity sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ== + +"@esbuild/win32-ia32@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz#241fe62c34d8e8461cd708277813e1d0ba55ce23" + integrity sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ== + +"@esbuild/win32-x64@0.20.2": + version "0.20.2" + resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz#9c907b21e30a52db959ba4f80bb01a0cc403d5cc" + integrity sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ== + "@eslint/eslintrc@^1.3.1": version "1.3.1" resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-1.3.1.tgz#de0807bfeffc37b964a7d0400e0c348ce5a2543d" @@ -2555,7 +2670,7 @@ cborg "^1.6.0" multiformats "^9.5.4" -"@ipld/dag-cbor@^9.0.0", "@ipld/dag-cbor@^9.0.5", "@ipld/dag-cbor@^9.0.6", "@ipld/dag-cbor@^9.0.7": +"@ipld/dag-cbor@^9.0.0", "@ipld/dag-cbor@^9.0.3", "@ipld/dag-cbor@^9.0.5", "@ipld/dag-cbor@^9.0.6", "@ipld/dag-cbor@^9.0.7": version "9.2.0" resolved "https://registry.yarnpkg.com/@ipld/dag-cbor/-/dag-cbor-9.2.0.tgz#3a3f0bee02d7e1c2f15582e896843d5b00fbba9f" integrity sha512-N14oMy0q4gM6OuZkIpisKe0JBSjf1Jb39VI+7jMLiWX9124u1Z3Fdj/Tag1NA0cVxxqWDh0CqsjcVfOKtelPDA== @@ -5496,6 +5611,25 @@ "@ucanto/core" "^9.0.0" "@ucanto/interface" "^9.0.0" +"@ucanto/client@^9.0.1": + version "9.0.1" + resolved "https://registry.yarnpkg.com/@ucanto/client/-/client-9.0.1.tgz#ecff79d4f1f56915db11cb6be083764b612afe2b" + integrity sha512-cV8w3AnaZaYCdUmyFFICj8YhFckDoy2DvWgAzGDMkPz0WbUW4lw9Tjm4hEE8x5kiP47wYej/pHKWCcoELiU0qw== + dependencies: + "@ucanto/core" "^10.0.0" + "@ucanto/interface" "^10.0.0" + +"@ucanto/core@^10.0.0": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@ucanto/core/-/core-10.0.1.tgz#3df9c875742e8c38461d628878a94b4a1c8a3b4f" + integrity sha512-1BfUaJu0/c9Rl/WdZSDbScJJLsPsPe1g4ynl5kubUj3xDD/lyp/Q12PQVQ2X7hDiWwkpwmxCkRMkOxwc70iNKQ== + dependencies: + "@ipld/car" "^5.1.0" + "@ipld/dag-cbor" "^9.0.0" + "@ipld/dag-ucan" "^3.4.0" + "@ucanto/interface" "^10.0.1" + multiformats "^11.0.2" + "@ucanto/core@^9.0.0", "@ucanto/core@^9.0.1": version "9.0.1" resolved "https://registry.yarnpkg.com/@ucanto/core/-/core-9.0.1.tgz#5de481c5d63acc50e287580ee06ac6f2872036ec" @@ -5507,6 +5641,14 @@ "@ucanto/interface" "^9.0.0" multiformats "^11.0.2" +"@ucanto/interface@^10.0.0", "@ucanto/interface@^10.0.1": + version "10.0.1" + resolved "https://registry.yarnpkg.com/@ucanto/interface/-/interface-10.0.1.tgz#939f62237e8b0c1cf0e7f7f2c4753fe3bbfc505b" + integrity sha512-+Vr/N4mLsdynV9/bqtdFiq7WsUf3265/Qx2aHJmPtXo9/QvWKthJtpe0g8U4NWkWpVfqIFvyAO2db6D9zWQfQw== + dependencies: + "@ipld/dag-ucan" "^3.4.0" + multiformats "^11.0.2" + "@ucanto/interface@^9.0.0": version "9.0.0" resolved "https://registry.yarnpkg.com/@ucanto/interface/-/interface-9.0.0.tgz#0ba5d1fcfe8a80d829805408d5fda54c344701c1" @@ -5528,6 +5670,16 @@ multiformats "^11.0.2" one-webcrypto "^1.0.3" +"@ucanto/server@^10.0.0": + version "10.0.0" + resolved "https://registry.yarnpkg.com/@ucanto/server/-/server-10.0.0.tgz#b3409c38cb792319418d7b7519fa890e89c025dd" + integrity sha512-JMDMT3tFRE0S1cdtx/Hhh7v9FizV6IS0fPrh6pcli7AzKvXVy8Xu6EQ/66Fax4AQM2tkGxNNxjj2wHM7P4CqAg== + dependencies: + "@ucanto/core" "^10.0.0" + "@ucanto/interface" "^10.0.0" + "@ucanto/principal" "^9.0.0" + "@ucanto/validator" "^9.0.1" + "@ucanto/server@^9.0.1": version "9.0.1" resolved "https://registry.yarnpkg.com/@ucanto/server/-/server-9.0.1.tgz#949d38bd2dad30991220f5839608434d400c0bfc" @@ -5546,6 +5698,14 @@ "@ucanto/core" "^9.0.1" "@ucanto/interface" "^9.0.0" +"@ucanto/transport@^9.1.1": + version "9.1.1" + resolved "https://registry.yarnpkg.com/@ucanto/transport/-/transport-9.1.1.tgz#05f1246982a46365d051242d750948e07be29376" + integrity sha512-3CR17nEemOVaTuMZa6waWgVL4sLxSPcxYvpaNeJ6NZo1rfsqdyRXOtbVV/RcI2BtUL0Cao6JM6P9+gdghfc5ng== + dependencies: + "@ucanto/core" "^10.0.0" + "@ucanto/interface" "^10.0.0" + "@ucanto/validator@^9.0.0", "@ucanto/validator@^9.0.1": version "9.0.1" resolved "https://registry.yarnpkg.com/@ucanto/validator/-/validator-9.0.1.tgz#ab6458e4400365645119f1b843805fca80ea46b3" @@ -5691,6 +5851,18 @@ multiformats "9.9.0" uint8arrays "^3.1.1" +"@web3-storage/content-claims@^4.0.4": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@web3-storage/content-claims/-/content-claims-4.0.4.tgz#f92d74979baa4fdaba0fb6a75d393e1da8fc8843" + integrity sha512-zt5psR3SkLbPPHzGzhFXYSJEssDl/ELYbNhEez+tNZLZiagv3Vl0RSt+x3CFFgR5ovO6Zn+pLJJcMjpMiHw0Yw== + dependencies: + "@ucanto/client" "^9.0.1" + "@ucanto/interface" "^10.0.0" + "@ucanto/server" "^10.0.0" + "@ucanto/transport" "^9.1.1" + carstream "^1.0.2" + multiformats "^12.0.1" + "@web3-storage/data-segment@^3.2.0": version "3.2.0" resolved "https://registry.yarnpkg.com/@web3-storage/data-segment/-/data-segment-3.2.0.tgz#62d109a01fb800486c270e65fb2e482a4bc40b47" @@ -5731,26 +5903,6 @@ resolved "https://registry.yarnpkg.com/@web3-storage/multipart-parser/-/multipart-parser-1.0.0.tgz#6b69dc2a32a5b207ba43e556c25cc136a56659c4" integrity sha512-BEO6al7BYqcnfX15W2cnGR+Q566ACXAT9UQykORCWW80lmkpWsnEob6zJS1ZVBKsSJC8+7vJkHwlp+lXG1UCdw== -"@web3-storage/upload-client@^13.1.0": - version "13.1.0" - resolved "https://registry.yarnpkg.com/@web3-storage/upload-client/-/upload-client-13.1.0.tgz#e29beb5ab0991682c28bcfe8c318aca42e43041c" - integrity sha512-RK67hUFviFG7KdupTwbMJCPdIsGEBSzpllybIOzbip3FKVH4fKDq4Sb2kXLptXeeqQfPJ86uRTmFtHTAVGVbZw== - dependencies: - "@ipld/car" "^5.2.2" - "@ipld/dag-cbor" "^9.0.6" - "@ipld/dag-ucan" "^3.4.0" - "@ipld/unixfs" "^2.1.1" - "@ucanto/client" "^9.0.0" - "@ucanto/interface" "^9.0.0" - "@ucanto/transport" "^9.1.0" - "@web3-storage/capabilities" "^13.2.0" - "@web3-storage/data-segment" "^5.1.0" - "@web3-storage/filecoin-client" "^3.3.0" - ipfs-utils "^9.0.14" - multiformats "^12.1.2" - p-retry "^5.1.2" - varint "^6.0.0" - "@web3-storage/upload-client@^13.2.0": version "13.2.0" resolved "https://registry.yarnpkg.com/@web3-storage/upload-client/-/upload-client-13.2.0.tgz#b6781344f405d84a6575d4880c3abe73e20d8e67" @@ -5771,10 +5923,10 @@ p-retry "^5.1.2" varint "^6.0.0" -"@web3-storage/w3up-client@^12.5.0": - version "12.5.0" - resolved "https://registry.yarnpkg.com/@web3-storage/w3up-client/-/w3up-client-12.5.0.tgz#67663f6c024bb7d198b2030f7752b139e5d3f9ae" - integrity sha512-SLpXXgA0TZJNSGtLHeq2kF+uwaHYfsH5068utikeRccCXJRrKQnCN1y2FpCe01H4SjLMTIQK13vga6DgSfJiuA== +"@web3-storage/w3up-client@^12.5.1": + version "12.5.1" + resolved "https://registry.yarnpkg.com/@web3-storage/w3up-client/-/w3up-client-12.5.1.tgz#a5722c9b8ca0e1ea2c1a2b7c7749512938eda16d" + integrity sha512-fv53VEWOcDxNi2qsE5uHvOWDXbXstlYQ505uMN5vcpdetxo3FcxIkVqGBIIQDpsXLyloRNA8+ZXOy8+rKeOPVw== dependencies: "@ipld/dag-ucan" "^3.4.0" "@ucanto/client" "^9.0.0" @@ -5786,7 +5938,7 @@ "@web3-storage/capabilities" "^13.2.0" "@web3-storage/did-mailto" "^2.1.0" "@web3-storage/filecoin-client" "^3.3.0" - "@web3-storage/upload-client" "^13.1.0" + "@web3-storage/upload-client" "^13.2.0" "@webassemblyjs/ast@1.11.1": version "1.11.1" @@ -7729,6 +7881,15 @@ cardex@^1.0.0: uint8arrays "^3.0.0" varint "^6.0.0" +carstream@^1.0.2: + version "1.1.1" + resolved "https://registry.yarnpkg.com/carstream/-/carstream-1.1.1.tgz#4a088015d0b39436baa9e1afc205c0284bd1d111" + integrity sha512-cgn3TqHo6SPsHBTfM5QgXngv6HtwgO1bKCHcdS35vBrweLcYrIG/+UboCbvnIGA0k8NtAYl/DvDdej/9pZGZxQ== + dependencies: + "@ipld/dag-cbor" "^9.0.3" + multiformats "^12.0.1" + uint8arraylist "^2.4.3" + case-sensitive-paths-webpack-plugin@^2.3.0: version "2.4.0" resolved "https://registry.yarnpkg.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz#db64066c6422eed2e08cc14b986ca43796dbc6d4" @@ -9805,11 +9966,6 @@ esbuild-android-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-android-64/-/esbuild-android-64-0.14.51.tgz#414a087cb0de8db1e347ecca6c8320513de433db" integrity sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ== -esbuild-android-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.13.15.tgz#3fc3ff0bab76fe35dd237476b5d2b32bb20a3d44" - integrity sha512-m602nft/XXeO8YQPUDVoHfjyRVPdPgjyyXOxZ44MK/agewFFkPa8tUo6lAzSWh5Ui5PB4KR9UIFTSBKh/RrCmg== - esbuild-android-arm64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.27.tgz#e7d6430555e8e9c505fd87266bbc709f25f1825c" @@ -9820,11 +9976,6 @@ esbuild-android-arm64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-android-arm64/-/esbuild-android-arm64-0.14.51.tgz#55de3bce2aab72bcd2b606da4318ad00fb9c8151" integrity sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A== -esbuild-darwin-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.13.15.tgz#8e9169c16baf444eacec60d09b24d11b255a8e72" - integrity sha512-ihOQRGs2yyp7t5bArCwnvn2Atr6X4axqPpEdCFPVp7iUj4cVSdisgvEKdNR7yH3JDjW6aQDw40iQFoTqejqxvQ== - esbuild-darwin-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.27.tgz#4dc7484127564e89b4445c0a560a3cb50b3d68e1" @@ -9835,11 +9986,6 @@ esbuild-darwin-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-darwin-64/-/esbuild-darwin-64-0.14.51.tgz#4259f23ed6b4cea2ec8a28d87b7fb9801f093754" integrity sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA== -esbuild-darwin-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.13.15.tgz#1b07f893b632114f805e188ddfca41b2b778229a" - integrity sha512-i1FZssTVxUqNlJ6cBTj5YQj4imWy3m49RZRnHhLpefFIh0To05ow9DTrXROTE1urGTQCloFUXTX8QfGJy1P8dQ== - esbuild-darwin-arm64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.27.tgz#469e59c665f84a8ed323166624c5e7b9b2d22ac1" @@ -9850,11 +9996,6 @@ esbuild-darwin-arm64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.51.tgz#d77b4366a71d84e530ba019d540b538b295d494a" integrity sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow== -esbuild-freebsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.13.15.tgz#0b8b7eca1690c8ec94c75680c38c07269c1f4a85" - integrity sha512-G3dLBXUI6lC6Z09/x+WtXBXbOYQZ0E8TDBqvn7aMaOCzryJs8LyVXKY4CPnHFXZAbSwkCbqiPuSQ1+HhrNk7EA== - esbuild-freebsd-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.27.tgz#895df03bf5f87094a56c9a5815bf92e591903d70" @@ -9865,11 +10006,6 @@ esbuild-freebsd-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.51.tgz#27b6587b3639f10519c65e07219d249b01f2ad38" integrity sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g== -esbuild-freebsd-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.13.15.tgz#2e1a6c696bfdcd20a99578b76350b41db1934e52" - integrity sha512-KJx0fzEDf1uhNOZQStV4ujg30WlnwqUASaGSFPhznLM/bbheu9HhqZ6mJJZM32lkyfGJikw0jg7v3S0oAvtvQQ== - esbuild-freebsd-arm64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.27.tgz#0b72a41a6b8655e9a8c5608f2ec1afdcf6958441" @@ -9880,11 +10016,6 @@ esbuild-freebsd-arm64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.51.tgz#63c435917e566808c71fafddc600aca4d78be1ec" integrity sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg== -esbuild-linux-32@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.13.15.tgz#6fd39f36fc66dd45b6b5f515728c7bbebc342a69" - integrity sha512-ZvTBPk0YWCLMCXiFmD5EUtB30zIPvC5Itxz0mdTu/xZBbbHJftQgLWY49wEPSn2T/TxahYCRDWun5smRa0Tu+g== - esbuild-linux-32@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.27.tgz#43b8ba3803b0bbe7f051869c6a8bf6de1e95de28" @@ -9895,11 +10026,6 @@ esbuild-linux-32@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-32/-/esbuild-linux-32-0.14.51.tgz#c3da774143a37e7f11559b9369d98f11f997a5d9" integrity sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w== -esbuild-linux-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.13.15.tgz#9cb8e4bcd7574e67946e4ee5f1f1e12386bb6dd3" - integrity sha512-eCKzkNSLywNeQTRBxJRQ0jxRCl2YWdMB3+PkWFo2BBQYC5mISLIVIjThNtn6HUNqua1pnvgP5xX0nHbZbPj5oA== - esbuild-linux-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.27.tgz#dc8072097327ecfadba1735562824ce8c05dd0bd" @@ -9910,11 +10036,6 @@ esbuild-linux-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-64/-/esbuild-linux-64-0.14.51.tgz#5d92b67f674e02ae0b4a9de9a757ba482115c4ae" integrity sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA== -esbuild-linux-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.13.15.tgz#3891aa3704ec579a1b92d2a586122e5b6a2bfba1" - integrity sha512-bYpuUlN6qYU9slzr/ltyLTR9YTBS7qUDymO8SV7kjeNext61OdmqFAzuVZom+OLW1HPHseBfJ/JfdSlx8oTUoA== - esbuild-linux-arm64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.27.tgz#c52b58cbe948426b1559910f521b0a3f396f10b8" @@ -9925,11 +10046,6 @@ esbuild-linux-arm64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.51.tgz#dac84740516e859d8b14e1ecc478dd5241b10c93" integrity sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw== -esbuild-linux-arm@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.13.15.tgz#8a00e99e6a0c6c9a6b7f334841364d8a2b4aecfe" - integrity sha512-wUHttDi/ol0tD8ZgUMDH8Ef7IbDX+/UsWJOXaAyTdkT7Yy9ZBqPg8bgB/Dn3CZ9SBpNieozrPRHm0BGww7W/jA== - esbuild-linux-arm@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.27.tgz#df869dbd67d4ee3a04b3c7273b6bd2b233e78a18" @@ -9940,11 +10056,6 @@ esbuild-linux-arm@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-arm/-/esbuild-linux-arm-0.14.51.tgz#b3ae7000696cd53ed95b2b458554ff543a60e106" integrity sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg== -esbuild-linux-mips64le@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.13.15.tgz#36b07cc47c3d21e48db3bb1f4d9ef8f46aead4f7" - integrity sha512-KlVjIG828uFPyJkO/8gKwy9RbXhCEUeFsCGOJBepUlpa7G8/SeZgncUEz/tOOUJTcWMTmFMtdd3GElGyAtbSWg== - esbuild-linux-mips64le@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.27.tgz#a2b646d9df368b01aa970a7b8968be6dd6b01d19" @@ -9955,11 +10066,6 @@ esbuild-linux-mips64le@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.51.tgz#dad10770fac94efa092b5a0643821c955a9dd385" integrity sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A== -esbuild-linux-ppc64le@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.13.15.tgz#f7e6bba40b9a11eb9dcae5b01550ea04670edad2" - integrity sha512-h6gYF+OsaqEuBjeesTBtUPw0bmiDu7eAeuc2OEH9S6mV9/jPhPdhOWzdeshb0BskRZxPhxPOjqZ+/OqLcxQwEQ== - esbuild-linux-ppc64le@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.27.tgz#9a21af766a0292578a3009c7408b8509cac7cefd" @@ -9990,11 +10096,6 @@ esbuild-linux-s390x@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.51.tgz#c9e7791170a3295dba79b93aa452beb9838a8625" integrity sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw== -esbuild-netbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.13.15.tgz#a2fedc549c2b629d580a732d840712b08d440038" - integrity sha512-3+yE9emwoevLMyvu+iR3rsa+Xwhie7ZEHMGDQ6dkqP/ndFzRHkobHUKTe+NCApSqG5ce2z4rFu+NX/UHnxlh3w== - esbuild-netbsd-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.27.tgz#482a587cdbd18a6c264a05136596927deb46c30a" @@ -10005,11 +10106,6 @@ esbuild-netbsd-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.51.tgz#0abd40b8c2e37fda6f5cc41a04cb2b690823d891" integrity sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A== -esbuild-openbsd-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.13.15.tgz#b22c0e5806d3a1fbf0325872037f885306b05cd7" - integrity sha512-wTfvtwYJYAFL1fSs8yHIdf5GEE4NkbtbXtjLWjM3Cw8mmQKqsg8kTiqJ9NJQe5NX/5Qlo7Xd9r1yKMMkHllp5g== - esbuild-openbsd-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.27.tgz#e99f8cdc63f1628747b63edd124d53cf7796468d" @@ -10020,11 +10116,6 @@ esbuild-openbsd-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.51.tgz#4adba0b7ea7eb1428bb00d8e94c199a949b130e8" integrity sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA== -esbuild-sunos-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.13.15.tgz#d0b6454a88375ee8d3964daeff55c85c91c7cef4" - integrity sha512-lbivT9Bx3t1iWWrSnGyBP9ODriEvWDRiweAs69vI+miJoeKwHWOComSRukttbuzjZ8r1q0mQJ8Z7yUsDJ3hKdw== - esbuild-sunos-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.27.tgz#8611d825bcb8239c78d57452e83253a71942f45c" @@ -10035,11 +10126,6 @@ esbuild-sunos-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-sunos-64/-/esbuild-sunos-64-0.14.51.tgz#4b8a6d97dfedda30a6e39607393c5c90ebf63891" integrity sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA== -esbuild-windows-32@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.13.15.tgz#c96d0b9bbb52f3303322582ef8e4847c5ad375a7" - integrity sha512-fDMEf2g3SsJ599MBr50cY5ve5lP1wyVwTe6aLJsM01KtxyKkB4UT+fc5MXQFn3RLrAIAZOG+tHC+yXObpSn7Nw== - esbuild-windows-32@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.27.tgz#c06374206d4d92dd31d4fda299b09f51a35e82f6" @@ -10050,11 +10136,6 @@ esbuild-windows-32@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-windows-32/-/esbuild-windows-32-0.14.51.tgz#d31d8ca0c1d314fb1edea163685a423b62e9ac17" integrity sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg== -esbuild-windows-64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.13.15.tgz#1f79cb9b1e1bb02fb25cd414cb90d4ea2892c294" - integrity sha512-9aMsPRGDWCd3bGjUIKG/ZOJPKsiztlxl/Q3C1XDswO6eNX/Jtwu4M+jb6YDH9hRSUflQWX0XKAfWzgy5Wk54JQ== - esbuild-windows-64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.27.tgz#756631c1d301dfc0d1a887deed2459ce4079582f" @@ -10065,11 +10146,6 @@ esbuild-windows-64@0.14.51: resolved "https://registry.yarnpkg.com/esbuild-windows-64/-/esbuild-windows-64-0.14.51.tgz#7d3c09c8652d222925625637bdc7e6c223e0085d" integrity sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA== -esbuild-windows-arm64@0.13.15: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.13.15.tgz#482173070810df22a752c686509c370c3be3b3c3" - integrity sha512-zzvyCVVpbwQQATaf3IG8mu1IwGEiDxKkYUdA4FpoCHi1KtPa13jeScYDjlW0Qh+ebWzpKfR2ZwvqAQkSWNcKjA== - esbuild-windows-arm64@0.14.27: version "0.14.27" resolved "https://registry.yarnpkg.com/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.27.tgz#ad7e187193dcd18768b16065a950f4441d7173f4" @@ -10132,28 +10208,34 @@ esbuild@0.14.51: esbuild-windows-64 "0.14.51" esbuild-windows-arm64 "0.14.51" -esbuild@^0.13.13: - version "0.13.15" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.13.15.tgz#db56a88166ee373f87dbb2d8798ff449e0450cdf" - integrity sha512-raCxt02HBKv8RJxE8vkTSCXGIyKHdEdGfUmiYb8wnabnaEmHzyW7DCHb5tEN0xU8ryqg5xw54mcwnYkC4x3AIw== +esbuild@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.20.2.tgz#9d6b2386561766ee6b5a55196c6d766d28c87ea1" + integrity sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g== optionalDependencies: - esbuild-android-arm64 "0.13.15" - esbuild-darwin-64 "0.13.15" - esbuild-darwin-arm64 "0.13.15" - esbuild-freebsd-64 "0.13.15" - esbuild-freebsd-arm64 "0.13.15" - esbuild-linux-32 "0.13.15" - esbuild-linux-64 "0.13.15" - esbuild-linux-arm "0.13.15" - esbuild-linux-arm64 "0.13.15" - esbuild-linux-mips64le "0.13.15" - esbuild-linux-ppc64le "0.13.15" - esbuild-netbsd-64 "0.13.15" - esbuild-openbsd-64 "0.13.15" - esbuild-sunos-64 "0.13.15" - esbuild-windows-32 "0.13.15" - esbuild-windows-64 "0.13.15" - esbuild-windows-arm64 "0.13.15" + "@esbuild/aix-ppc64" "0.20.2" + "@esbuild/android-arm" "0.20.2" + "@esbuild/android-arm64" "0.20.2" + "@esbuild/android-x64" "0.20.2" + "@esbuild/darwin-arm64" "0.20.2" + "@esbuild/darwin-x64" "0.20.2" + "@esbuild/freebsd-arm64" "0.20.2" + "@esbuild/freebsd-x64" "0.20.2" + "@esbuild/linux-arm" "0.20.2" + "@esbuild/linux-arm64" "0.20.2" + "@esbuild/linux-ia32" "0.20.2" + "@esbuild/linux-loong64" "0.20.2" + "@esbuild/linux-mips64el" "0.20.2" + "@esbuild/linux-ppc64" "0.20.2" + "@esbuild/linux-riscv64" "0.20.2" + "@esbuild/linux-s390x" "0.20.2" + "@esbuild/linux-x64" "0.20.2" + "@esbuild/netbsd-x64" "0.20.2" + "@esbuild/openbsd-x64" "0.20.2" + "@esbuild/sunos-x64" "0.20.2" + "@esbuild/win32-arm64" "0.20.2" + "@esbuild/win32-ia32" "0.20.2" + "@esbuild/win32-x64" "0.20.2" escalade@^3.1.1: version "3.1.1" @@ -18208,16 +18290,11 @@ prettier-linter-helpers@^1.0.0: dependencies: fast-diff "^1.1.2" -prettier@2.5.1, prettier@^2.5.1: +prettier@2.5.1, "prettier@>=2.2.1 <=2.3.0", prettier@^2.5.1: version "2.5.1" resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a" integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg== -"prettier@>=2.2.1 <=2.3.0": - version "2.3.0" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.0.tgz#b6a5bf1284026ae640f17f7ff5658a7567fc0d18" - integrity sha512-kXtO4s0Lz/DW/IJ9QdWhAf7/NmPWQXkFr/r/WkR3vyI+0v8amTDxiaQSLzs8NBlytfLWX/7uQUMIW677yLKl4w== - pretty-error@^2.1.1: version "2.1.2" resolved "https://registry.yarnpkg.com/pretty-error/-/pretty-error-2.1.2.tgz#be89f82d81b1c86ec8fdfbc385045882727f93b6" @@ -21703,6 +21780,20 @@ uglify-js@^3.1.4: resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.17.0.tgz#55bd6e9d19ce5eef0d5ad17cd1f587d85b180a85" integrity sha512-aTeNPVmgIMPpm1cxXr2Q/nEbvkmV8yq66F3om7X3P/cvOXQ0TMQ64Wk63iyT1gPlmdmGzjGpyLh1f3y8MZWXGg== +uint8arraylist@^2.4.3: + version "2.4.8" + resolved "https://registry.yarnpkg.com/uint8arraylist/-/uint8arraylist-2.4.8.tgz#5a4d17f4defd77799cb38e93fd5db0f0dceddc12" + integrity sha512-vc1PlGOzglLF0eae1M8mLRTBivsvrGsdmJ5RbK3e+QRvRLOZfZhQROTwH/OfyF3+ZVUg9/8hE8bmKP2CvP9quQ== + dependencies: + uint8arrays "^5.0.1" + +uint8arrays@5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.0.2.tgz#f05479bcd521d37c2e7710b24132a460b0ac80e3" + integrity sha512-S0GaeR+orZt7LaqzTRs4ZP8QqzAauJ+0d4xvP2lJTA99jIkKsE2FgDs4tGF/K/z5O9I/2W5Yvrh7IuqNeYH+0Q== + dependencies: + multiformats "^13.0.0" + uint8arrays@^2.0.5, uint8arrays@^2.1.3, uint8arrays@^2.1.5: version "2.1.10" resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-2.1.10.tgz#34d023c843a327c676e48576295ca373c56e286a" @@ -21731,6 +21822,13 @@ uint8arrays@^4.0.6: dependencies: multiformats "^12.0.1" +uint8arrays@^5.0.1: + version "5.0.3" + resolved "https://registry.yarnpkg.com/uint8arrays/-/uint8arrays-5.0.3.tgz#92b894d9c4269ba97c51544d6e1f279fe6f80d1f" + integrity sha512-6LBuKji28kHjgPJMkQ6GDaBb1lRwIhyOYq6pDGwYMoDPfImE9SkuYENVmR0yu9yGgs2clHUSY9fKDukR+AXfqQ== + dependencies: + multiformats "^13.0.0" + unbox-primitive@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"