UNPKG

js-isp

Version:

58 lines (57 loc) 1.97 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.Bucket = void 0; const bucket_1 = require("./did/bucket"); const agent_1 = require("@dfinity/agent"); class Bucket { constructor(canisterId, agent) { this.bucketCanisterId = canisterId; this.BucketActor = agent_1.Actor.createActor(bucket_1.idlFactory, { agent, canisterId }); } async getFile(decodeArr, length) { const File = new Uint8Array(length); for (let i = 0; i < decodeArr.length; i++) { let slice = decodeArr[i]; let start = 0; for (let j = 0; j < i; j++) { start += decodeArr[j].length; } File.set(slice, start); } return File; } async get_file(fileKey) { try { const queryPromiseArr = []; const dataArr = []; let fileSize = 0; const chunkNumber = Number(await this.BucketActor.getFileTotalIndex(fileKey)); for (let i = 0; i < chunkNumber; i++) { queryPromiseArr.push(this.BucketActor.get(fileKey, BigInt(i))); } const res = (await Promise.all(queryPromiseArr)); if (res[0][0]) { const fileType = res[0][0][1]; res.forEach(e => { if (e[0]) { dataArr.push(e[0][0]); fileSize += e[0][0].length; } }); const metadata = await this.getFile(dataArr, fileSize); if (fileType === "text/plain") return new TextDecoder().decode(metadata); return new Blob([metadata.buffer], { type: fileType, }); } else { throw new Error("have no data"); } } catch (e) { throw e; } } } exports.Bucket = Bucket;