{"version":3,"file":"blob.mjs","names":["#reader","#client","#blobStatus","#cache"],"sources":["../../src/files/blob.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\n\nimport type { WalrusClient } from '../client.js';\nimport type { BlobReader } from './readers/blob.js';\nimport { WalrusFile } from './file.js';\nimport { ClientCache } from '@mysten/sui/client';\n\nexport class WalrusBlob {\n\t#reader: BlobReader;\n\t#client: WalrusClient;\n\t#cache = new ClientCache();\n\n\tconstructor({ reader, client }: { reader: BlobReader; client: WalrusClient }) {\n\t\tthis.#reader = reader;\n\t\tthis.#client = client;\n\t}\n\n\t// Get the blob as a file (i.e. do not use Quilt encoding)\n\tasFile() {\n\t\treturn new WalrusFile({ reader: this.#reader });\n\t}\n\n\tasync blobId(): Promise<string | null> {\n\t\treturn this.#reader.blobId;\n\t}\n\n\t// Gets quilt-based files associated with this blob.\n\tasync files(\n\t\tfilters: {\n\t\t\tids?: string[];\n\t\t\ttags?: { [tagName: string]: string }[];\n\t\t\tidentifiers?: string[];\n\t\t} = {},\n\t) {\n\t\tconst quiltReader = await this.#reader.getQuiltReader();\n\t\tconst index = await quiltReader.readIndex();\n\n\t\tconst files = [];\n\n\t\tfor (const patch of index) {\n\t\t\tif (filters.ids && !filters.ids.includes(patch.patchId)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (filters.identifiers && !filters.identifiers.includes(patch.identifier)) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tfilters.tags &&\n\t\t\t\t!filters.tags.some((tags) =>\n\t\t\t\t\tObject.entries(tags).every(([tagName, tagValue]) => patch.tags[tagName] === tagValue),\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tfiles.push(new WalrusFile({ reader: quiltReader.readerForPatchId(patch.patchId) }));\n\t\t}\n\n\t\treturn files;\n\t}\n\n\tasync #blobStatus() {\n\t\treturn this.#cache.read(['blobStatus', this.#reader.blobId], () =>\n\t\t\tthis.#client.getVerifiedBlobStatus({ blobId: this.#reader.blobId }),\n\t\t);\n\t}\n\n\tasync exists() {\n\t\tconst status = await this.#blobStatus();\n\t\treturn status.type === 'permanent' || status.type === 'deletable';\n\t}\n\n\tasync storedUntil() {\n\t\tconst status = await this.#blobStatus();\n\n\t\tif (status.type === 'permanent') {\n\t\t\treturn status.endEpoch;\n\t\t}\n\n\t\treturn null;\n\t}\n}\n"],"mappings":";;;;AAQA,IAAa,aAAb,MAAwB;CACvB;CACA;CACA,SAAS,IAAI,aAAa;CAE1B,YAAY,EAAE,QAAQ,UAAwD;AAC7E,QAAKA,SAAU;AACf,QAAKC,SAAU;;CAIhB,SAAS;AACR,SAAO,IAAI,WAAW,EAAE,QAAQ,MAAKD,QAAS,CAAC;;CAGhD,MAAM,SAAiC;AACtC,SAAO,MAAKA,OAAQ;;CAIrB,MAAM,MACL,UAII,EAAE,EACL;EACD,MAAM,cAAc,MAAM,MAAKA,OAAQ,gBAAgB;EACvD,MAAM,QAAQ,MAAM,YAAY,WAAW;EAE3C,MAAM,QAAQ,EAAE;AAEhB,OAAK,MAAM,SAAS,OAAO;AAC1B,OAAI,QAAQ,OAAO,CAAC,QAAQ,IAAI,SAAS,MAAM,QAAQ,CACtD;AAGD,OAAI,QAAQ,eAAe,CAAC,QAAQ,YAAY,SAAS,MAAM,WAAW,CACzE;AAGD,OACC,QAAQ,QACR,CAAC,QAAQ,KAAK,MAAM,SACnB,OAAO,QAAQ,KAAK,CAAC,OAAO,CAAC,SAAS,cAAc,MAAM,KAAK,aAAa,SAAS,CACrF,CAED;AAGD,SAAM,KAAK,IAAI,WAAW,EAAE,QAAQ,YAAY,iBAAiB,MAAM,QAAQ,EAAE,CAAC,CAAC;;AAGpF,SAAO;;CAGR,OAAME,aAAc;AACnB,SAAO,MAAKC,MAAO,KAAK,CAAC,cAAc,MAAKH,OAAQ,OAAO,QAC1D,MAAKC,OAAQ,sBAAsB,EAAE,QAAQ,MAAKD,OAAQ,QAAQ,CAAC,CACnE;;CAGF,MAAM,SAAS;EACd,MAAM,SAAS,MAAM,MAAKE,YAAa;AACvC,SAAO,OAAO,SAAS,eAAe,OAAO,SAAS;;CAGvD,MAAM,cAAc;EACnB,MAAM,SAAS,MAAM,MAAKA,YAAa;AAEvC,MAAI,OAAO,SAAS,YACnB,QAAO,OAAO;AAGf,SAAO"}