UNPKG

resolve-upload-local

Version:
108 lines (88 loc) 2.6 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.default = exports.uploadFormData = exports.upload = void 0; var _fs = _interopRequireDefault(require("fs")); var _request = _interopRequireDefault(require("request")); var _v = _interopRequireDefault(require("uuid/v4")); var _crypto = _interopRequireDefault(require("crypto")); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } const createPresignedPut = async (pool, dir) => { const uploadId = (0, _v.default)(); const uploadUrl = `http://localhost:3000/uploader?dir=${dir}&uploadId=${uploadId}`; return { uploadUrl, uploadId }; }; const upload = (uploadUrl, filePath) => { const fileSizeInBytes = _fs.default.statSync(filePath).size; const fileStream = _fs.default.createReadStream(filePath); return new Promise((resolve, reject) => _request.default.put({ headers: { 'Content-Length': fileSizeInBytes }, uri: uploadUrl, body: fileStream }, (error, _, body) => { error ? reject(error) : body ? reject(body) : resolve(); })); }; exports.upload = upload; const createPresignedPost = async (pool, dir) => { const uploadId = (0, _v.default)(); const form = { url: `http://localhost:3000/uploader?dir=${dir}&uploadId=${uploadId}`, fields: {} }; return { form, uploadId }; }; const uploadFormData = (form, filePath) => { const fileStream = _fs.default.createReadStream(filePath); return new Promise((resolve, reject) => _request.default.post({ url: form.url, formData: { file: fileStream } }, error => { error ? reject(error) : resolve(); })); }; exports.uploadFormData = uploadFormData; const createToken = ({ secretKey }, { dir, expireTime = 3600 }) => { const payload = Buffer.from(JSON.stringify({ dir, expireTime: Date.now() + expireTime * 1000 })).toString('base64').replace(/=/g, ''); const signature = _crypto.default.createHmac('md5', secretKey).update(payload).digest('hex'); return `${payload}*${signature}`; }; const createUploadAdapter = pool => { const { directory, bucket, secretKey } = pool; return Object.freeze({ createPresignedPut: createPresignedPut.bind(null, pool), createPresignedPost: createPresignedPost.bind(null, pool), createToken: createToken.bind(null, pool), upload: upload, uploadFormData: uploadFormData, directory, bucket, secretKey }); }; var _default = createUploadAdapter; exports.default = _default; //# sourceMappingURL=index.js.map