synapse-react-client
Version:
[](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client) [](https://badge.fury.io/js/synaps
73 lines • 3.7 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.testDownloadSpeed = void 0;
var SynapseClient_1 = require("../SynapseClient");
var synapseTypes_1 = require("../synapseTypes/");
var ESTIMATED_CORS_TIME_MS = 200;
var ESTIMATED_DOWNLOAD_SPEED_EXPIRE_TIME_KEY = 'ESTIMATED_DOWNLOAD_SPEED_EXPIRE_TIME';
var ESTIMATED_DOWNLOAD_SPEED_KEY = 'ESTIMATED_DOWNLOAD_SPEED';
var TEST_FILE_ENTITY_ID = 'syn12600511';
/**
* Return the estimated download speed (bytes/second). Result is cached.
* Result is crude estimate since it's a single test file (small sample, only ~2MB), but is a valid test (since it's a Synapse file on s3).
* The intent is to let the user know if the package download will take many hours to download.
* @param accessToken
*/
var testDownloadSpeed = function (accessToken) {
return new Promise(function (resolve, reject) {
// check cache
var cachedSpeedExpireTime = localStorage.getItem(ESTIMATED_DOWNLOAD_SPEED_EXPIRE_TIME_KEY);
var cachedSpeed = localStorage.getItem(ESTIMATED_DOWNLOAD_SPEED_KEY);
if (cachedSpeedExpireTime && cachedSpeed) {
// is this value expired?
var now = new Date().getTime();
if (now < Number(cachedSpeedExpireTime)) {
resolve(Number(cachedSpeed));
return;
}
}
/**
* 1. Get the test File Entity
* 2. Get the file handle and presigned URL associated to the latest version of the test File Entity
* 3. Start the timer and fetch the file content using that presigned URL
*/
(0, SynapseClient_1.getEntity)(accessToken, TEST_FILE_ENTITY_ID)
.then(function (entity) {
var fileEntity = entity;
var fileHandleAssociationList = [
{
associateObjectId: fileEntity.id,
associateObjectType: synapseTypes_1.FileHandleAssociateType.FileEntity,
fileHandleId: fileEntity.dataFileHandleId,
},
];
var request = {
includeFileHandles: true,
includePreSignedURLs: true,
includePreviewPreSignedURLs: false,
requestedFiles: fileHandleAssociationList,
};
(0, SynapseClient_1.getFiles)(request, accessToken).then(function (data) {
var presignedUrl = data.requestedFiles[0].preSignedURL;
// we know this file exists
var fileHandle = data.requestedFiles[0].fileHandle;
// start test!
var startMs = new Date().getTime();
return (0, SynapseClient_1.getFileHandleContent)(fileHandle, presignedUrl).then(function () {
// console.log(`Transferred ${fileHandle.contentSize/1000000} MB in ${((new Date().getTime() - startMs - ESTIMATED_CORS_TIME_MS)/1000)} seconds`)
// bytes/second
var result = fileHandle.contentSize /
((new Date().getTime() - startMs - ESTIMATED_CORS_TIME_MS) / 1000);
// save result in cache (for 5 minutes)
var now = new Date().getTime();
localStorage.setItem(ESTIMATED_DOWNLOAD_SPEED_EXPIRE_TIME_KEY, (now + 1000 * 60 * 5).toString());
localStorage.setItem(ESTIMATED_DOWNLOAD_SPEED_KEY, result.toString());
resolve(result);
});
});
})
.catch(function (err) { return reject(err); });
});
};
exports.testDownloadSpeed = testDownloadSpeed;
//# sourceMappingURL=testDownloadSpeed.js.map