fc-toolkit
Version:
fc-toolkit
109 lines • 9.27 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.initReceiver = void 0;
const path = require('path');
const uuid = require('uuid/v4');
const isPlainObject = require('lodash.isplainobject');
const isNil = require('lodash.isnil');
const omitBy = require('lodash.omitby');
const common_1 = require("../common");
const constants_1 = require("../constants");
const storage_1 = require("../storage");
const types_1 = require("../types");
const config_1 = require("../config");
function initReceiver(noOSS = false, ossType = types_1.StorageEngine.ALIYUN_OSS, ossThreshold = 0) {
const fcConfig = config_1.loadConfigWithEnvs(ossType);
const storageOptions = fcConfig[ossType] || {};
const storageClient = storage_1.getClientByType(ossType, storageOptions);
const receive = async (event, context = {}) => {
var _a;
const logger = (_a = context.logger) !== null && _a !== void 0 ? _a : console;
let storeType;
let ossKey;
let body;
let headers;
let isBuffer;
if (typeof event === 'string' || Buffer.isBuffer(event)) {
try {
const eventParsed = JSON.parse(event.toString());
storeType = eventParsed.storeType;
ossKey = eventParsed.ossKey;
body = eventParsed.body;
headers = eventParsed.headers;
isBuffer = eventParsed.isBuffer;
}
catch (err) {
throw new Error(`Parse event string error: ${err.message}`);
}
}
else if (isPlainObject(event)) {
storeType = event.storeType;
ossKey = event.ossKey;
body = event.body;
headers = event.headers;
isBuffer = event.isBuffer || false;
}
else {
throw new Error('Unsupported event data type, should be a plain object or a string');
}
if (storeType === 'oss' && !noOSS) {
if (isNil(ossKey)) {
throw new Error('Option `ossKey` is required using object storage');
}
if (typeof ossKey !== 'string') {
throw new Error('Option `ossKey` must be a string');
}
const resp = await common_1.retryWrapper(() => storageClient.getAsBuffer(ossKey));
if (!resp) {
throw new Error(`oss:${ossKey} get empty content`);
}
const content = resp.content;
const cleanup = () => storageClient.del(ossKey).catch(logger.error);
return omitBy({
headers,
body: isBuffer ? content : content.toString(),
storeType,
cleanup,
}, (v) => v === undefined);
}
return omitBy({
headers,
body: isBuffer ? Buffer.from(body, 'base64') : body,
cleanup: () => Promise.resolve(void 0),
}, (v) => v === undefined);
};
const reply = (callback) => {
return async (returnValue, directReturn = false, meta) => {
const isBuffer = Buffer.isBuffer(returnValue);
if (typeof returnValue !== 'string' && !isBuffer) {
throw new Error('return value must be string or Buffer');
}
if (!noOSS &&
!directReturn &&
common_1.sizeof(returnValue) > (ossThreshold || constants_1.MAX_RAW_PAYLOAD_SIZE)) {
const filePath = uuid();
const body = {
storeType: 'oss',
isBuffer,
body: filePath,
meta,
};
const ossMeta = new Map();
ossMeta.set('length', Buffer.byteLength(returnValue));
await common_1.retryWrapper(() => storageClient.put(filePath, returnValue, { meta: ossMeta }));
return callback(null, body);
}
callback(null, {
storeType: 'direct',
isBuffer,
body: isBuffer
? returnValue.toString('base64')
: returnValue,
meta,
});
};
};
return { receive, reply };
}
exports.initReceiver = initReceiver;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVjZWl2ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvYnVmZmVyU3VwcG9ydC9yZWNlaXZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDN0IsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ2hDLE1BQU0sYUFBYSxHQUFHLE9BQU8sQ0FBQyxzQkFBc0IsQ0FBQyxDQUFDO0FBQ3RELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN0QyxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFFeEMsc0NBQWlEO0FBQ2pELDRDQUFvRDtBQUNwRCx3Q0FBNkM7QUFDN0Msb0NBQXlDO0FBQ3pDLHNDQUErQztBQStDL0MsU0FBZ0IsWUFBWSxDQUMxQixRQUFpQixLQUFLLEVBQ3RCLFVBQXlCLHFCQUFhLENBQUMsVUFBVSxFQUNqRCxlQUF1QixDQUFDO0lBUXhCLE1BQU0sUUFBUSxHQUFHLDJCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzdDLE1BQU0sY0FBYyxHQUFHLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSyxFQUFVLENBQUM7SUFDeEQsTUFBTSxhQUFhLEdBQUcseUJBQWUsQ0FBQyxPQUFPLEVBQUUsY0FBYyxDQUFDLENBQUM7SUFFL0QsTUFBTSxPQUFPLEdBQUcsS0FBSyxFQUNuQixLQUE4QyxFQUM5QyxVQUE0QixFQUFFLEVBQ0gsRUFBRTs7UUFDN0IsTUFBTSxNQUFNLFNBQUcsT0FBTyxDQUFDLE1BQU0sbUNBQUksT0FBTyxDQUFDO1FBQ3pDLElBQUksU0FBaUIsQ0FBQztRQUN0QixJQUFJLE1BQTBCLENBQUM7UUFDL0IsSUFBSSxJQUFTLENBQUM7UUFDZCxJQUFJLE9BQVksQ0FBQztRQUNqQixJQUFJLFFBQWlCLENBQUM7UUFHdEIsSUFBSSxP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