UNPKG

graphile-settings

Version:
62 lines (61 loc) 2.25 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.Uploader = void 0; const s3_streamer_1 = __importDefault(require("@launchql/s3-streamer")); const upload_names_1 = __importDefault(require("@launchql/upload-names")); class Uploader { opts; streamerInstance; constructor(opts) { this.opts = opts; const { bucketName, awsRegion, awsSecretKey, awsAccessKey, minioEndpoint } = this.opts; this.streamerInstance = new s3_streamer_1.default({ defaultBucket: bucketName, awsRegion, awsSecretKey, awsAccessKey, minioEndpoint, }); } async resolveUpload(upload, _args, _context, info) { const { uploadPlugin: { tags, type } } = info; const readStream = upload.createReadStream(); const { filename } = upload; const rand = Math.random().toString(36).substring(2, 7) + Math.random().toString(36).substring(2, 7); const key = `${rand}-${(0, upload_names_1.default)(filename)}`; const result = await this.streamerInstance.upload({ readStream, filename, key, bucket: this.opts.bucketName }); const url = result.upload.Location; const { contentType, magic: { charset } } = result; const typ = type || tags.type; const allowedMimes = tags.mime ? tags.mime.trim().split(',').map((a) => a.trim()) : typ === 'image' ? ['image/jpg', 'image/jpeg', 'image/png', 'image/svg+xml'] : []; if (allowedMimes.length && !allowedMimes.includes(contentType)) { throw new Error(`UPLOAD_MIMETYPE ${allowedMimes.join(',')}`); } switch (typ) { case 'image': case 'upload': return { filename, mime: contentType, url }; case 'attachment': default: return url; } } } exports.Uploader = Uploader;