podchat-browser
Version:
Javascript SDK to use POD's Chat Service - Browser Only
147 lines (123 loc) • 6 kB
JavaScript
"use strict";
var _typeof = require("@babel/runtime/helpers/typeof");
Object.defineProperty(exports, "__esModule", {
value: true
});
exports["default"] = void 0;
var tus = _interopRequireWildcard(require("tus-js-client"));
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
var upload = {};
function UploadMethods(app) {
function sendResumableFileMessage(params, callbacks) {
init(params, callbacks);
start(params.uniqueId);
}
function init(params, callbacks) {
var file = params.file,
userGroupHash = params.userGroupHash,
threadId = params.threadId,
uniqueId = params.uniqueId,
fileObject = params.fileObject,
originalFileName = params.originalFileName;
upload[uniqueId] = new tus.Upload(file, {
// endpoint: props.data.upload_url,
// endpoint: "https://podspace.pod.ir/api/usergroups/" + userGroupHash + "/files",
endpoint: app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + "/api/files/resumable_upload",
retryDelays: [0, 3000, 5000, 10000, 20000, 30000, 40000, 50000, 60000],
// crossDomain: false,
chunkSize: 1024 * 1024 * 5,
// chunkSize: 102400,
// overridePatchMethod:true,
// mode: 'cors',
// cache: 'no-cache',
// credentials: 'same-origin',
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token // "Content-Type": "application/offset+octet-stream",
// "Access-Control-Allow-Origin": "*",
// "Access-Control-Allow-Methods": "GET,POST,HEAD,PUT,PATCH,DELETE,OPTIONS,DELETE",
},
// redirect: 'follow',
// referrerPolicy: 'no-referrer',
metadata: {
userGroupHash: userGroupHash,
name: file.name
},
onError: function onError(error) {},
onProgress: function onProgress(bytesUploaded, bytesTotal) {
var percentage = (bytesUploaded / bytesTotal * 100).toFixed(0);
if (percentage > upload[uniqueId].last_percentage) {
app.chatEvents.fireEvent('fileUploadEvents', {
threadId: threadId,
uniqueId: uniqueId,
state: 'UPLOADING',
progress: percentage,
fileInfo: {
fileName: originalFileName,
fileSize: fileObject.size
},
fileObject: fileObject
});
}
upload[uniqueId].last_percentage = percentage;
},
onSuccess: function onSuccess() {
fetch(app.sdkParams.SERVICE_ADDRESSES.PODSPACE_FILESERVER_ADDRESS + "/api/files/uploaded_file_info/" + upload[uniqueId].url.split("/").pop(), {
headers: {
'Authorization': 'Bearer ' + app.sdkParams.token
}
}).then(function (serverPromise) {
serverPromise.json().then(function (result) {
callbacks && callbacks(result);
});
});
delete upload[uniqueId];
},
onShouldRetry: function onShouldRetry(err, retryAttempt, options) {
var status = err.originalResponse ? err.originalResponse.getStatus() : 0; // Do not retry if the status is a 403.
if (status === 400 || status === 401) {
return false;
} // For any other status code, we retry.
return true;
}
});
}
function resume(uniqueId) {
var _upload$uniqueId, _upload$uniqueId2;
// Check if there are any previous uploads to continue.
(_upload$uniqueId = upload[uniqueId]) === null || _upload$uniqueId === void 0 ? void 0 : _upload$uniqueId.findPreviousUploads().then(function (previousUploads) {
// Found previous uploads so we select the first one.
if (previousUploads.length) {
upload[uniqueId].resumeFromPreviousUpload(previousUploads[0]);
}
});
(_upload$uniqueId2 = upload[uniqueId]) === null || _upload$uniqueId2 === void 0 ? void 0 : _upload$uniqueId2.start();
}
function start(uniqueId) {
var _upload$uniqueId3;
upload[uniqueId].findPreviousUploads().then(function (previousUploads) {
// Found previous uploads so we select the first one.
if (previousUploads.length) {
upload[uniqueId].resumeFromPreviousUpload(previousUploads[0]);
}
});
(_upload$uniqueId3 = upload[uniqueId]) === null || _upload$uniqueId3 === void 0 ? void 0 : _upload$uniqueId3.start();
}
function pause(uniqueId) {
var _upload$uniqueId4;
(_upload$uniqueId4 = upload[uniqueId]) === null || _upload$uniqueId4 === void 0 ? void 0 : _upload$uniqueId4.abort();
}
function abort(uniqueId) {
var _upload$uniqueId5;
(_upload$uniqueId5 = upload[uniqueId]) === null || _upload$uniqueId5 === void 0 ? void 0 : _upload$uniqueId5.abort();
}
return {
sendResumableFileMessage: sendResumableFileMessage,
resume: resume,
start: start,
pause: pause,
abort: abort
};
}
var _default = UploadMethods;
exports["default"] = _default;