UNPKG

synapse-react-client

Version:

[![Build Status](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client.svg?branch=main)](https://travis-ci.com/Sage-Bionetworks/Synapse-React-Client) [![npm version](https://badge.fury.io/js/synapse-react-client.svg)](https://badge.fury.io/js/synaps

73 lines 3.7 kB
"use strict"; 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