UNPKG

@moonset/util

Version:
50 lines 5.15 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.S3AssetUploader = void 0; const fs = require("fs"); const uuid_1 = require("uuid"); const constants_1 = require("./constants"); /** * A SDK based S3 Asset uploader. * * We don't use CDK way since CloudFormation stacks have limitations (200 by * default) and not suitable for high throughput requests. More context can be * found here: https://github.com/MoonsetJS/Moonset/issues/73 */ class S3AssetUploader { /** * Setting the S3 bucket and Moonset related information. * Every asset will be tagged with its Moonset session and Moonset id. */ constructor(bucket, prefix, moonsetSession, moonsetId, sdk) { this.bucket = bucket; this.prefix = prefix; this.moonsetSession = moonsetSession; this.moonsetId = moonsetId; this.sdk = sdk; } /** * Upload local file to S3. */ async uploadFile(file) { return await this.uploadData(fs.createReadStream(file)); } /** * Upload string type data to S3. */ async uploadData(body) { const s3 = this.sdk.s3(); const key = `${this.prefix}/${uuid_1.v4()}`; const params = { Bucket: this.bucket, Key: key, Body: body, Tagging: `${constants_1.CommonConstants.MOONSET_SESSION}=${this.moonsetSession}&` + `${constants_1.CommonConstants.MOONSET_ID}=${this.moonsetId}`, }; await s3.upload(params).promise(); return `s3://${this.bucket}/${key}`; } } exports.S3AssetUploader = S3AssetUploader; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiczMtYXNzZXQtdXBsb2FkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzMy1hc3NldC11cGxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSx5QkFBeUI7QUFDekIsK0JBQWdDO0FBQ2hDLDJDQUFrRDtBQUdsRDs7Ozs7O0dBTUc7QUFDSCxNQUFhLGVBQWU7SUFDMUI7OztTQUdLO0lBQ0wsWUFDYyxNQUFjLEVBQ2QsTUFBYyxFQUNkLGNBQXNCLEVBQ3RCLFNBQWlCLEVBQ2pCLEdBQVM7UUFKVCxXQUFNLEdBQU4sTUFBTSxDQUFRO1FBQ2QsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQUNkLG1CQUFjLEdBQWQsY0FBYyxDQUFRO1FBQ3RCLGNBQVMsR0FBVCxTQUFTLENBQVE7UUFDakIsUUFBRyxHQUFILEdBQUcsQ0FBTTtJQUN2QixDQUFDO0lBRUQ7O1NBRUs7SUFDTCxLQUFLLENBQUMsVUFBVSxDQUFDLElBQVk7UUFDM0IsT0FBTyxNQUFNLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7SUFDMUQsQ0FBQztJQUVEOztTQUVLO0lBQ0wsS0FBSyxDQUFDLFVBQVUsQ0FBQyxJQUFtQjtRQUNsQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxDQUFDLE1BQU0sSUFBSSxTQUFJLEVBQUUsRUFBRSxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHO1lBQ2IsTUFBTSxFQUFFLElBQUksQ0FBQyxNQUFNO1lBQ25CLEdBQUcsRUFBRSxHQUFHO1lBQ1IsSUFBSSxFQUFFLElBQUk7WUFDVixPQUFPLEVBQUUsR0FBRywyQkFBRSxDQUFDLGVBQWUsSUFBSSxJQUFJLENBQUMsY0FBYyxHQUFHO2dCQUNsRCxHQUFHLDJCQUFFLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxTQUFTLEVBQUU7U0FDM0MsQ0FBQztRQUNGLE1BQU0sRUFBRSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNsQyxPQUFPLFFBQVEsSUFBSSxDQUFDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQztJQUN0QyxDQUFDO0NBQ0Y7QUFwQ0QsMENBb0NDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0ICogYXMgUzMgZnJvbSAnYXdzLXNkay9jbGllbnRzL3MzJztcbmltcG9ydCAqIGFzIGZzIGZyb20gJ2ZzJztcbmltcG9ydCB7djQgYXMgdXVpZH0gZnJvbSAndXVpZCc7XG5pbXBvcnQge0NvbW1vbkNvbnN0YW50cyBhcyBDQ30gZnJvbSAnLi9jb25zdGFudHMnO1xuaW1wb3J0IHtJU0RLfSBmcm9tICcuL3Nkay11dGlscyc7XG5cbi8qKlxuICogQSBTREsgYmFzZWQgUzMgQXNzZXQgdXBsb2FkZXIuXG4gKlxuICogV2UgZG9uJ3QgdXNlIENESyB3YXkgc2luY2UgQ2xvdWRGb3JtYXRpb24gc3RhY2tzIGhhdmUgbGltaXRhdGlvbnMgKDIwMCBieVxuICogZGVmYXVsdCkgYW5kIG5vdCBzdWl0YWJsZSBmb3IgaGlnaCB0aHJvdWdocHV0IHJlcXVlc3RzLiBNb3JlIGNvbnRleHQgY2FuIGJlXG4gKiBmb3VuZCBoZXJlOiBodHRwczovL2dpdGh1Yi5jb20vTW9vbnNldEpTL01vb25zZXQvaXNzdWVzLzczXG4gKi9cbmV4cG9ydCBjbGFzcyBTM0Fzc2V0VXBsb2FkZXIge1xuICAvKipcbiAgICAgKiBTZXR0aW5nIHRoZSBTMyBidWNrZXQgYW5kIE1vb25zZXQgcmVsYXRlZCBpbmZvcm1hdGlvbi5cbiAgICAgKiBFdmVyeSBhc3NldCB3aWxsIGJlIHRhZ2dlZCB3aXRoIGl0cyBNb29uc2V0IHNlc3Npb24gYW5kIE1vb25zZXQgaWQuXG4gICAgICovXG4gIGNvbnN0cnVjdG9yKFxuICAgICAgICBwcml2YXRlIGJ1Y2tldDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIHByZWZpeDogc3RyaW5nLFxuICAgICAgICBwcml2YXRlIG1vb25zZXRTZXNzaW9uOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgbW9vbnNldElkOiBzdHJpbmcsXG4gICAgICAgIHByaXZhdGUgc2RrOiBJU0RLKSB7XG4gIH1cblxuICAvKipcbiAgICAgKiBVcGxvYWQgbG9jYWwgZmlsZSB0byBTMy5cbiAgICAgKi9cbiAgYXN5bmMgdXBsb2FkRmlsZShmaWxlOiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIHJldHVybiBhd2FpdCB0aGlzLnVwbG9hZERhdGEoZnMuY3JlYXRlUmVhZFN0cmVhbShmaWxlKSk7XG4gIH1cblxuICAvKipcbiAgICAgKiBVcGxvYWQgc3RyaW5nIHR5cGUgZGF0YSB0byBTMy5cbiAgICAgKi9cbiAgYXN5bmMgdXBsb2FkRGF0YShib2R5OiBTMy5UeXBlcy5Cb2R5KTogUHJvbWlzZTxzdHJpbmc+IHtcbiAgICBjb25zdCBzMyA9IHRoaXMuc2RrLnMzKCk7XG4gICAgY29uc3Qga2V5ID0gYCR7dGhpcy5wcmVmaXh9LyR7dXVpZCgpfWA7XG4gICAgY29uc3QgcGFyYW1zID0ge1xuICAgICAgQnVja2V0OiB0aGlzLmJ1Y2tldCxcbiAgICAgIEtleToga2V5LFxuICAgICAgQm9keTogYm9keSxcbiAgICAgIFRhZ2dpbmc6IGAke0NDLk1PT05TRVRfU0VTU0lPTn09JHt0aGlzLm1vb25zZXRTZXNzaW9ufSZgICtcbiAgICAgICAgICAgIGAke0NDLk1PT05TRVRfSUR9PSR7dGhpcy5tb29uc2V0SWR9YCxcbiAgICB9O1xuICAgIGF3YWl0IHMzLnVwbG9hZChwYXJhbXMpLnByb21pc2UoKTtcbiAgICByZXR1cm4gYHMzOi8vJHt0aGlzLmJ1Y2tldH0vJHtrZXl9YDtcbiAgfVxufVxuIl19