UNPKG

fc-toolkit

Version:

fc-toolkit

109 lines 9.27 kB
"use strict"; 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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