graphile-settings
Version:
graphile settings
62 lines (61 loc) • 2.25 kB
JavaScript
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;
;