fc-toolkit
Version:
fc-toolkit
77 lines • 7.11 kB
JavaScript
;
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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