{"version":3,"file":"blob.mjs","names":["#client","#numShards","#cache","#secondarySlivers","columnSize"],"sources":["../../../src/files/readers/blob.ts"],"sourcesContent":["// Copyright (c) Mysten Labs, Inc.\n// SPDX-License-Identifier: Apache-2.0\nimport { ClientCache } from '@mysten/sui/client';\nimport type { FileReader } from '../file.js';\nimport type { WalrusClient } from '../../client.js';\nimport { getSizes, getSourceSymbols } from '../../utils/index.js';\nimport { QuiltReader } from './quilt.js';\nimport { SliverData } from '../../utils/bcs.js';\n\nexport interface BlobReaderOptions {\n\tclient: WalrusClient;\n\tblobId: string;\n\tnumShards: number;\n}\n\nexport class BlobReader implements FileReader {\n\tblobId: string;\n\n\t#cache = new ClientCache();\n\n\t#client: WalrusClient;\n\t#secondarySlivers = new Map<number, Uint8Array | Promise<Uint8Array>>();\n\thasStartedLoadingFullBlob = false;\n\t#numShards: number;\n\n\tconstructor({ client, blobId, numShards }: BlobReaderOptions) {\n\t\tthis.#client = client;\n\t\tthis.blobId = blobId;\n\t\tthis.#numShards = numShards;\n\t}\n\n\tasync getIdentifier() {\n\t\treturn null;\n\t}\n\n\tasync getTags() {\n\t\treturn {};\n\t}\n\n\tgetQuiltReader() {\n\t\treturn new QuiltReader({ blob: this });\n\t}\n\n\tasync getBytes() {\n\t\treturn this.#cache.read(['getBytes'], async () => {\n\t\t\tthis.hasStartedLoadingFullBlob = true;\n\t\t\ttry {\n\t\t\t\tconst blob = await this.#client.readBlob({ blobId: this.blobId });\n\t\t\t\treturn blob;\n\t\t\t} catch (error) {\n\t\t\t\tthis.hasStartedLoadingFullBlob = false;\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t});\n\t}\n\n\tgetMetadata() {\n\t\treturn this.#cache.read(['getMetadata'], () =>\n\t\t\tthis.#client.getBlobMetadata({ blobId: this.blobId }),\n\t\t);\n\t}\n\n\tasync getColumnSize() {\n\t\treturn this.#cache.read(['getColumnSize'], async () => {\n\t\t\tconst loadingSlivers = [...this.#secondarySlivers.values()];\n\n\t\t\tif (loadingSlivers.length > 0) {\n\t\t\t\tconst sliver = await Promise.any(loadingSlivers).catch(() => null);\n\n\t\t\t\tif (sliver) {\n\t\t\t\t\treturn sliver.length;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (this.hasStartedLoadingFullBlob) {\n\t\t\t\tconst blob = await this.getBytes();\n\t\t\t\tconst { columnSize } = getSizes(blob.length, this.#numShards);\n\t\t\t\treturn columnSize;\n\t\t\t}\n\n\t\t\tconst metadata = await this.getMetadata();\n\t\t\tconst { columnSize } = getSizes(\n\t\t\t\tNumber(metadata.metadata.V1.unencoded_length),\n\t\t\t\tthis.#numShards,\n\t\t\t);\n\n\t\t\treturn columnSize;\n\t\t});\n\t}\n\n\tasync getSymbolSize() {\n\t\tconst columnSize = await this.getColumnSize();\n\t\tconst { primarySymbols } = getSourceSymbols(this.#numShards);\n\n\t\tif (columnSize % primarySymbols !== 0) {\n\t\t\tthrow new Error('column size should be divisible by primary symbols');\n\t\t}\n\n\t\treturn columnSize / primarySymbols;\n\t}\n\n\tasync getRowSize() {\n\t\tconst symbolSize = await this.getSymbolSize();\n\t\tconst { secondarySymbols } = getSourceSymbols(this.#numShards);\n\t\treturn symbolSize * secondarySymbols;\n\t}\n\n\tasync getSecondarySliver({ sliverIndex, signal }: { sliverIndex: number; signal?: AbortSignal }) {\n\t\tif (this.#secondarySlivers.has(sliverIndex)) {\n\t\t\treturn this.#secondarySlivers.get(sliverIndex)!;\n\t\t}\n\n\t\tconst sliverPromise = this.#client\n\t\t\t.getSecondarySliver({\n\t\t\t\tblobId: this.blobId,\n\t\t\t\tindex: sliverIndex,\n\t\t\t\tsignal,\n\t\t\t})\n\t\t\t.then((sliver) => SliverData.parse(sliver).symbols.data);\n\n\t\tthis.#secondarySlivers.set(sliverIndex, sliverPromise);\n\n\t\ttry {\n\t\t\tconst sliver = await sliverPromise;\n\t\t\tthis.#secondarySlivers.set(sliverIndex, sliver);\n\t\t\treturn sliver;\n\t\t} catch (error) {\n\t\t\tthis.#secondarySlivers.delete(sliverIndex);\n\t\t\tthrow error;\n\t\t}\n\t}\n}\n"],"mappings":";;;;;;AAeA,IAAa,aAAb,MAA8C;CAG7C,SAAS,IAAI,aAAa;CAE1B;CACA,oCAAoB,IAAI,KAA+C;CAEvE;CAEA,YAAY,EAAE,QAAQ,QAAQ,aAAgC;mCAHlC;AAI3B,QAAKA,SAAU;AACf,OAAK,SAAS;AACd,QAAKC,YAAa;;CAGnB,MAAM,gBAAgB;AACrB,SAAO;;CAGR,MAAM,UAAU;AACf,SAAO,EAAE;;CAGV,iBAAiB;AAChB,SAAO,IAAI,YAAY,EAAE,MAAM,MAAM,CAAC;;CAGvC,MAAM,WAAW;AAChB,SAAO,MAAKC,MAAO,KAAK,CAAC,WAAW,EAAE,YAAY;AACjD,QAAK,4BAA4B;AACjC,OAAI;AAEH,WADa,MAAM,MAAKF,OAAQ,SAAS,EAAE,QAAQ,KAAK,QAAQ,CAAC;YAEzD,OAAO;AACf,SAAK,4BAA4B;AACjC,UAAM;;IAEN;;CAGH,cAAc;AACb,SAAO,MAAKE,MAAO,KAAK,CAAC,cAAc,QACtC,MAAKF,OAAQ,gBAAgB,EAAE,QAAQ,KAAK,QAAQ,CAAC,CACrD;;CAGF,MAAM,gBAAgB;AACrB,SAAO,MAAKE,MAAO,KAAK,CAAC,gBAAgB,EAAE,YAAY;GACtD,MAAM,iBAAiB,CAAC,GAAG,MAAKC,iBAAkB,QAAQ,CAAC;AAE3D,OAAI,eAAe,SAAS,GAAG;IAC9B,MAAM,SAAS,MAAM,QAAQ,IAAI,eAAe,CAAC,YAAY,KAAK;AAElE,QAAI,OACH,QAAO,OAAO;;AAIhB,OAAI,KAAK,2BAA2B;IAEnC,MAAM,EAAE,6BAAe,UADV,MAAM,KAAK,UAAU,EACG,QAAQ,MAAKF,UAAW;AAC7D,WAAOG;;GAGR,MAAM,WAAW,MAAM,KAAK,aAAa;GACzC,MAAM,EAAE,eAAe,SACtB,OAAO,SAAS,SAAS,GAAG,iBAAiB,EAC7C,MAAKH,UACL;AAED,UAAO;IACN;;CAGH,MAAM,gBAAgB;EACrB,MAAM,aAAa,MAAM,KAAK,eAAe;EAC7C,MAAM,EAAE,mBAAmB,iBAAiB,MAAKA,UAAW;AAE5D,MAAI,aAAa,mBAAmB,EACnC,OAAM,IAAI,MAAM,qDAAqD;AAGtE,SAAO,aAAa;;CAGrB,MAAM,aAAa;EAClB,MAAM,aAAa,MAAM,KAAK,eAAe;EAC7C,MAAM,EAAE,qBAAqB,iBAAiB,MAAKA,UAAW;AAC9D,SAAO,aAAa;;CAGrB,MAAM,mBAAmB,EAAE,aAAa,UAAyD;AAChG,MAAI,MAAKE,iBAAkB,IAAI,YAAY,CAC1C,QAAO,MAAKA,iBAAkB,IAAI,YAAY;EAG/C,MAAM,gBAAgB,MAAKH,OACzB,mBAAmB;GACnB,QAAQ,KAAK;GACb,OAAO;GACP;GACA,CAAC,CACD,MAAM,WAAW,WAAW,MAAM,OAAO,CAAC,QAAQ,KAAK;AAEzD,QAAKG,iBAAkB,IAAI,aAAa,cAAc;AAEtD,MAAI;GACH,MAAM,SAAS,MAAM;AACrB,SAAKA,iBAAkB,IAAI,aAAa,OAAO;AAC/C,UAAO;WACC,OAAO;AACf,SAAKA,iBAAkB,OAAO,YAAY;AAC1C,SAAM"}