UNPKG

fc-toolkit

Version:

fc-toolkit

77 lines 7.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.initInvoker = void 0; const FCClient = require('@alicloud/fc2'); const uuid = require('uuid/v4'); const omitBy = require('lodash.omitby'); const isNil = require('lodash.isnil'); const common_1 = require("../common"); const constants_1 = require("../constants"); const storage_1 = require("../storage"); function initInvoker(options) { const storageType = options.aws ? 'aws' : 'oss'; const storageClient = storage_1.getClientByType(storageType, options.oss || options.aws); const fcClient = new FCClient(options.fc.accountId, options.fc); const ossThreshold = options.ossThreshold || constants_1.MAX_RAW_PAYLOAD_SIZE; return async (serviceName, functionName, body, headers = {}) => { const isBuffer = Buffer.isBuffer(body); if (typeof body !== 'string' && !isBuffer) { throw new Error('invoke body must be string or Buffr'); } let type = 'direct'; let rawData; let ossKey; if (!options.noOSS && common_1.sizeof(body) > ossThreshold) { ossKey = uuid(); type = 'oss'; await common_1.retryWrapper(() => storageClient.put(ossKey, body)); } else { rawData = isBuffer ? body.toString('base64') : body; } const params = JSON.stringify(omitBy({ storeType: type, ossKey, body: rawData, isBuffer, headers, ossType: storageType, }, (v) => v === undefined)); const res = await common_1.retryWrapper(async (bail) => { try { const { data } = await fcClient.invokeFunction(serviceName, functionName, params); if (typeof data === 'object' && !isNil(data.errorMessage) && !isNil(data.errorType) && !isNil(data.stackTrace)) { const error = new Error(data.errorMessage); error.errorType = data.errorType; error.stackTrace = data.stackTrace; bail(error); return; } return data; } catch (err) { if (err.name === 'ECONNRESETError' || String(err.name) .toLowerCase() .indexOf('throttle') > -1) { throw err; } bail(err); } }); const result = typeof res === 'string' ? JSON.parse(res) : res; if (result.storeType === 'oss' && !options.noOSS) { const retBody = (await common_1.retryWrapper(() => storageClient.getAsBuffer(result.body))).content; storageClient.del(result.body).catch(console.error); return result.isBuffer ? retBody : retBody.toString(); } return result.isBuffer ? Buffer.from(result.body, 'base64') : result.body; }; } exports.initInvoker = initInvoker; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52b2tlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2J1ZmZlclN1cHBvcnQvaW52b2tlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLE1BQU0sUUFBUSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMxQyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDaEMsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUV0QyxzQ0FBaUQ7QUFDakQsNENBQW9EO0FBQ3BELHdDQUE2QztBQW1DN0MsU0FBZ0IsV0FBVyxDQUFDLE9BQTRCO0lBRXRELE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDO0lBQ2hELE1BQU0sYUFBYSxHQUFHLHlCQUFlLENBQ25DLFdBQVcsRUFDWCxPQUFPLENBQUMsR0FBSSxJQUFJLE9BQU8sQ0FBQyxHQUFJLENBQzdCLENBQUM7SUFDRixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsRUFBRSxDQUFDLFNBQVMsRUFBRSxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDaEUsTUFBTSxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksSUFBSSxnQ0FBb0IsQ0FBQztJQUVsRSxPQUFPLEtBQUssRUFDVixXQUFtQixFQUNuQixZQUFvQixFQUNwQixJQUFxQixFQUNyQixVQUFlLEVBQUUsRUFDUyxFQUFFO1FBQzVCLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxPQUFPLElBQUksS0FBSyxRQUFRLElBQUksQ0FBQyxRQUFRLEVBQUU7WUFDekMsTUFBTSxJQUFJLEtBQUssQ0FBQyxxQ0FB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