biketrack-app/node_modules/@ethersphere/bee-js/dist/cjs/feed/retrievable.js

73 lines
2.9 KiB
JavaScript

"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.areAllSequentialFeedsUpdateRetrievable = void 0;
const index_1 = require("./index");
const uint64_1 = require("../utils/uint64");
const hex_1 = require("../utils/hex");
function makeNumericIndex(index) {
if (index instanceof Uint8Array) {
return (0, uint64_1.readUint64BigEndian)(index);
}
if (typeof index === 'string') {
return parseInt(index);
}
if (typeof index === 'number') {
return index;
}
throw new TypeError('Unknown type of index!');
}
/**
* Function that checks if a chunk is retrievable by actually downloading it.
* The /stewardship/{reference} endpoint does not support verification of chunks, but only manifest's references.
*
* @param bee
* @param ref
* @param options
*/
function isChunkRetrievable(bee, ref, options) {
return __awaiter(this, void 0, void 0, function* () {
try {
yield bee.downloadChunk(ref, options);
return true;
}
catch (e) {
const err = e;
if (err.status === 404) {
return false;
}
throw e;
}
});
}
/**
* Creates array of references for all sequence updates chunk up to the given index.
*
* @param owner
* @param topic
* @param index
*/
function getAllSequenceUpdateReferences(owner, topic, index) {
const numIndex = makeNumericIndex(index);
const updateReferences = new Array(numIndex + 1);
for (let i = 0; i <= numIndex; i++) {
updateReferences[i] = (0, hex_1.bytesToHex)((0, index_1.getFeedUpdateChunkReference)(owner, topic, i));
}
return updateReferences;
}
function areAllSequentialFeedsUpdateRetrievable(bee, owner, topic, index, options) {
return __awaiter(this, void 0, void 0, function* () {
const chunkRetrievablePromises = getAllSequenceUpdateReferences(owner, topic, index).map((ref) => __awaiter(this, void 0, void 0, function* () { return isChunkRetrievable(bee, ref, options); }));
return (yield Promise.all(chunkRetrievablePromises)).every(result => result);
});
}
exports.areAllSequentialFeedsUpdateRetrievable = areAllSequentialFeedsUpdateRetrievable;