UNPKG

@azure/functions

Version:
1,028 lines (945 loc) 130 kB
/******/ (() => { // webpackBootstrap /******/ "use strict"; /******/ var __webpack_modules__ = ({ /***/ "./src/InvocationContext.ts": /*!**********************************!*\ !*** ./src/InvocationContext.ts ***! \**********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _InvocationContext_userLogHandler, _InvocationContextExtraInputs_inputs, _InvocationContextExtraOutputs_outputs; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.InvocationContext = void 0; const fallbackLogHandler_1 = __webpack_require__(/*! ./utils/fallbackLogHandler */ "./src/utils/fallbackLogHandler.ts"); class InvocationContext { constructor(init) { var _a, _b, _c, _d; _InvocationContext_userLogHandler.set(this, void 0); init = init || {}; const fallbackString = 'unknown'; this.invocationId = init.invocationId || fallbackString; this.functionName = init.functionName || fallbackString; this.extraInputs = new InvocationContextExtraInputs(); this.extraOutputs = new InvocationContextExtraOutputs(); this.retryContext = init.retryContext; this.traceContext = init.traceContext; this.triggerMetadata = init.triggerMetadata; this.options = { trigger: ((_a = init.options) === null || _a === void 0 ? void 0 : _a.trigger) || { name: fallbackString, type: fallbackString, }, return: (_b = init.options) === null || _b === void 0 ? void 0 : _b.return, extraInputs: ((_c = init.options) === null || _c === void 0 ? void 0 : _c.extraInputs) || [], extraOutputs: ((_d = init.options) === null || _d === void 0 ? void 0 : _d.extraOutputs) || [], }; __classPrivateFieldSet(this, _InvocationContext_userLogHandler, init.logHandler || fallbackLogHandler_1.fallbackLogHandler, "f"); } log(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'information', ...args); } trace(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'trace', ...args); } debug(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'debug', ...args); } info(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'information', ...args); } warn(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'warning', ...args); } error(...args) { __classPrivateFieldGet(this, _InvocationContext_userLogHandler, "f").call(this, 'error', ...args); } } exports.InvocationContext = InvocationContext; _InvocationContext_userLogHandler = new WeakMap(); class InvocationContextExtraInputs { constructor() { _InvocationContextExtraInputs_inputs.set(this, {}); } get(inputOrName) { const name = typeof inputOrName === 'string' ? inputOrName : inputOrName.name; return __classPrivateFieldGet(this, _InvocationContextExtraInputs_inputs, "f")[name]; } set(inputOrName, value) { const name = typeof inputOrName === 'string' ? inputOrName : inputOrName.name; __classPrivateFieldGet(this, _InvocationContextExtraInputs_inputs, "f")[name] = value; } } _InvocationContextExtraInputs_inputs = new WeakMap(); class InvocationContextExtraOutputs { constructor() { _InvocationContextExtraOutputs_outputs.set(this, {}); } get(outputOrName) { const name = typeof outputOrName === 'string' ? outputOrName : outputOrName.name; return __classPrivateFieldGet(this, _InvocationContextExtraOutputs_outputs, "f")[name]; } set(outputOrName, value) { const name = typeof outputOrName === 'string' ? outputOrName : outputOrName.name; __classPrivateFieldGet(this, _InvocationContextExtraOutputs_outputs, "f")[name] = value; } } _InvocationContextExtraOutputs_outputs = new WeakMap(); /***/ }), /***/ "./src/InvocationModel.ts": /*!********************************!*\ !*** ./src/InvocationModel.ts ***! \********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var _InvocationModel_instances, _InvocationModel_isDone, _InvocationModel_coreCtx, _InvocationModel_functionName, _InvocationModel_bindings, _InvocationModel_triggerType, _InvocationModel_convertOutput, _InvocationModel_log, _InvocationModel_systemLog, _InvocationModel_userLog; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.InvocationModel = void 0; const util_1 = __webpack_require__(/*! util */ "util"); const constants_1 = __webpack_require__(/*! ./constants */ "./src/constants.ts"); const fromRpcBindings_1 = __webpack_require__(/*! ./converters/fromRpcBindings */ "./src/converters/fromRpcBindings.ts"); const fromRpcContext_1 = __webpack_require__(/*! ./converters/fromRpcContext */ "./src/converters/fromRpcContext.ts"); const fromRpcTriggerMetadata_1 = __webpack_require__(/*! ./converters/fromRpcTriggerMetadata */ "./src/converters/fromRpcTriggerMetadata.ts"); const fromRpcTypedData_1 = __webpack_require__(/*! ./converters/fromRpcTypedData */ "./src/converters/fromRpcTypedData.ts"); const toCamelCase_1 = __webpack_require__(/*! ./converters/toCamelCase */ "./src/converters/toCamelCase.ts"); const toRpcHttp_1 = __webpack_require__(/*! ./converters/toRpcHttp */ "./src/converters/toRpcHttp.ts"); const toRpcTypedData_1 = __webpack_require__(/*! ./converters/toRpcTypedData */ "./src/converters/toRpcTypedData.ts"); const errors_1 = __webpack_require__(/*! ./errors */ "./src/errors.ts"); const httpProxy_1 = __webpack_require__(/*! ./http/httpProxy */ "./src/http/httpProxy.ts"); const HttpRequest_1 = __webpack_require__(/*! ./http/HttpRequest */ "./src/http/HttpRequest.ts"); const InvocationContext_1 = __webpack_require__(/*! ./InvocationContext */ "./src/InvocationContext.ts"); const setup_1 = __webpack_require__(/*! ./setup */ "./src/setup.ts"); const isTrigger_1 = __webpack_require__(/*! ./utils/isTrigger */ "./src/utils/isTrigger.ts"); const nonNull_1 = __webpack_require__(/*! ./utils/nonNull */ "./src/utils/nonNull.ts"); class InvocationModel { constructor(coreCtx) { _InvocationModel_instances.add(this); _InvocationModel_isDone.set(this, false); _InvocationModel_coreCtx.set(this, void 0); _InvocationModel_functionName.set(this, void 0); _InvocationModel_bindings.set(this, void 0); _InvocationModel_triggerType.set(this, void 0); __classPrivateFieldSet(this, _InvocationModel_coreCtx, coreCtx, "f"); __classPrivateFieldSet(this, _InvocationModel_functionName, (0, nonNull_1.nonNullProp)(coreCtx.metadata, 'name'), "f"); __classPrivateFieldSet(this, _InvocationModel_bindings, (0, nonNull_1.nonNullProp)(coreCtx.metadata, 'bindings'), "f"); const triggerBinding = (0, nonNull_1.nonNullValue)(Object.values(__classPrivateFieldGet(this, _InvocationModel_bindings, "f")).find((b) => (0, isTrigger_1.isTrigger)(b.type)), 'triggerBinding'); __classPrivateFieldSet(this, _InvocationModel_triggerType, (0, nonNull_1.nonNullProp)(triggerBinding, 'type'), "f"); } // eslint-disable-next-line @typescript-eslint/require-await getArguments() { return __awaiter(this, void 0, void 0, function* () { const req = __classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").request; const context = new InvocationContext_1.InvocationContext({ invocationId: (0, nonNull_1.nonNullProp)(__classPrivateFieldGet(this, _InvocationModel_coreCtx, "f"), 'invocationId'), functionName: __classPrivateFieldGet(this, _InvocationModel_functionName, "f"), logHandler: (level, ...args) => __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_userLog).call(this, level, ...args), retryContext: (0, fromRpcContext_1.fromRpcRetryContext)(req.retryContext), traceContext: (0, fromRpcContext_1.fromRpcTraceContext)(req.traceContext), triggerMetadata: (0, fromRpcTriggerMetadata_1.fromRpcTriggerMetadata)(req.triggerMetadata, __classPrivateFieldGet(this, _InvocationModel_triggerType, "f")), options: (0, fromRpcBindings_1.fromRpcBindings)(__classPrivateFieldGet(this, _InvocationModel_bindings, "f")), }); const inputs = []; if (req.inputData) { for (const binding of req.inputData) { const bindingName = (0, nonNull_1.nonNullProp)(binding, 'name'); const rpcBinding = __classPrivateFieldGet(this, _InvocationModel_bindings, "f")[bindingName]; if (!rpcBinding) { throw new errors_1.AzFuncSystemError(`Failed to find binding "${bindingName}" in bindings "${Object.keys(__classPrivateFieldGet(this, _InvocationModel_bindings, "f")).join(', ')}".`); } const bindingType = rpcBinding.type; let input; if ((0, isTrigger_1.isHttpTrigger)(bindingType) && setup_1.enableHttpStream) { const proxyRequest = yield (0, httpProxy_1.waitForProxyRequest)(__classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").invocationId); input = (0, HttpRequest_1.createStreamRequest)(proxyRequest, (0, nonNull_1.nonNullProp)(req, 'triggerMetadata')); } else { input = (0, fromRpcTypedData_1.fromRpcTypedData)(binding.data); } if ((0, isTrigger_1.isTimerTrigger)(bindingType)) { input = (0, toCamelCase_1.toCamelCaseValue)(input); } if ((0, isTrigger_1.isTrigger)(bindingType)) { inputs.push(input); } else { context.extraInputs.set(bindingName, input); } } } return { context, inputs }; }); } invokeFunction(context, inputs, handler) { return __awaiter(this, void 0, void 0, function* () { try { return yield Promise.resolve(handler(...inputs, context)); } finally { __classPrivateFieldSet(this, _InvocationModel_isDone, true, "f"); } }); } getResponse(context, result) { return __awaiter(this, void 0, void 0, function* () { const response = { invocationId: __classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").invocationId }; response.outputData = []; let usedReturnValue = false; for (const [name, binding] of Object.entries(__classPrivateFieldGet(this, _InvocationModel_bindings, "f"))) { if (binding.direction === 'out') { if (name === constants_1.returnBindingKey) { response.returnValue = yield __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_convertOutput).call(this, context.invocationId, binding, result); usedReturnValue = true; } else { const outputValue = yield __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_convertOutput).call(this, context.invocationId, binding, context.extraOutputs.get(name)); if ((0, nonNull_1.isDefined)(outputValue)) { response.outputData.push({ name, data: outputValue }); } } } } // This allows the return value of non-HTTP triggered functions to be passed back // to the host, even if no explicit output binding is set. In most cases, this is ignored, // but e.g., Durable uses this to pass orchestrator state back to the Durable extension, w/o // an explicit output binding. See here for more details: https://github.com/Azure/azure-functions-nodejs-library/pull/25 if (!usedReturnValue && !(0, isTrigger_1.isHttpTrigger)(__classPrivateFieldGet(this, _InvocationModel_triggerType, "f"))) { response.returnValue = (0, toRpcTypedData_1.toRpcTypedData)(result); } return response; }); } } exports.InvocationModel = InvocationModel; _InvocationModel_isDone = new WeakMap(), _InvocationModel_coreCtx = new WeakMap(), _InvocationModel_functionName = new WeakMap(), _InvocationModel_bindings = new WeakMap(), _InvocationModel_triggerType = new WeakMap(), _InvocationModel_instances = new WeakSet(), _InvocationModel_convertOutput = function _InvocationModel_convertOutput(invocationId, binding, value) { var _a; return __awaiter(this, void 0, void 0, function* () { if (((_a = binding.type) === null || _a === void 0 ? void 0 : _a.toLowerCase()) === 'http') { return (0, toRpcHttp_1.toRpcHttp)(invocationId, value); } else { return (0, toRpcTypedData_1.toRpcTypedData)(value); } }); }, _InvocationModel_log = function _InvocationModel_log(level, logCategory, ...args) { __classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").log(level, logCategory, (0, util_1.format)(...args)); }, _InvocationModel_systemLog = function _InvocationModel_systemLog(level, ...args) { __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_log).call(this, level, 'system', ...args); }, _InvocationModel_userLog = function _InvocationModel_userLog(level, ...args) { if (__classPrivateFieldGet(this, _InvocationModel_isDone, "f") && __classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").state !== 'postInvocationHooks') { let badAsyncMsg = "Warning: Unexpected call to 'log' on the context object after function execution has completed. Please check for asynchronous calls that are not awaited. "; badAsyncMsg += `Function name: ${__classPrivateFieldGet(this, _InvocationModel_functionName, "f")}. Invocation Id: ${__classPrivateFieldGet(this, _InvocationModel_coreCtx, "f").invocationId}.`; __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_systemLog).call(this, 'warning', badAsyncMsg); } __classPrivateFieldGet(this, _InvocationModel_instances, "m", _InvocationModel_log).call(this, level, 'user', ...args); }; /***/ }), /***/ "./src/ProgrammingModel.ts": /*!*********************************!*\ !*** ./src/ProgrammingModel.ts ***! \*********************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.ProgrammingModel = void 0; const constants_1 = __webpack_require__(/*! ./constants */ "./src/constants.ts"); const httpProxy_1 = __webpack_require__(/*! ./http/httpProxy */ "./src/http/httpProxy.ts"); const InvocationModel_1 = __webpack_require__(/*! ./InvocationModel */ "./src/InvocationModel.ts"); const setup_1 = __webpack_require__(/*! ./setup */ "./src/setup.ts"); class ProgrammingModel { constructor() { this.name = '@azure/functions'; this.version = constants_1.version; } getInvocationModel(coreCtx) { return new InvocationModel_1.InvocationModel(coreCtx); } getCapabilities(workerCapabilities) { return __awaiter(this, void 0, void 0, function* () { (0, setup_1.lockSetup)(); if (setup_1.enableHttpStream) { const httpUri = yield (0, httpProxy_1.setupHttpProxy)(); workerCapabilities.HttpUri = httpUri; } Object.assign(workerCapabilities, setup_1.capabilities); return workerCapabilities; }); } } exports.ProgrammingModel = ProgrammingModel; /***/ }), /***/ "./src/addBindingName.ts": /*!*******************************!*\ !*** ./src/addBindingName.ts ***! \*******************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.addBindingName = void 0; const getRandomHexString_1 = __webpack_require__(/*! ./utils/getRandomHexString */ "./src/utils/getRandomHexString.ts"); /** * If the host spawns multiple workers, it expects the metadata (including binding name) to be the same across workers. * That means we need to generate binding names in a deterministic fashion, so we'll do that using a string hash of the binding data * A few considerations: * 1. We will include the binding type in the name to make it more readable * 2. Users can manually specify the name themselves and we will respect that * 3. The only time the hash should cause a conflict is if a single function has duplicate bindings. Not sure why someone would do that, but we will throw an error at function registration time * More info here: https://github.com/Azure/azure-functions-nodejs-worker/issues/638 */ function addBindingName(binding, suffix) { if (!binding.name) { let bindingType = binding.type; if (!bindingType.toLowerCase().endsWith(suffix.toLowerCase())) { bindingType += suffix; } binding.name = bindingType + (0, getRandomHexString_1.getStringHash)(JSON.stringify(binding)); } return binding; } exports.addBindingName = addBindingName; /***/ }), /***/ "./src/app.ts": /*!********************!*\ !*** ./src/app.ts ***! \********************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. var __rest = (this && this.__rest) || function (s, e) { var t = {}; for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0) t[p] = s[p]; if (s != null && typeof Object.getOwnPropertySymbols === "function") for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) { if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i])) t[p[i]] = s[p[i]]; } return t; }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.generic = exports.webPubSub = exports.mySql = exports.sql = exports.warmup = exports.cosmosDB = exports.eventGrid = exports.eventHub = exports.serviceBusTopic = exports.serviceBusQueue = exports.storageQueue = exports.storageBlob = exports.timer = exports.http = exports.deleteRequest = exports.patch = exports.post = exports.put = exports.get = exports.setup = exports.hook = void 0; const toCoreFunctionMetadata_1 = __webpack_require__(/*! ./converters/toCoreFunctionMetadata */ "./src/converters/toCoreFunctionMetadata.ts"); const output = __webpack_require__(/*! ./output */ "./src/output.ts"); const ProgrammingModel_1 = __webpack_require__(/*! ./ProgrammingModel */ "./src/ProgrammingModel.ts"); const trigger = __webpack_require__(/*! ./trigger */ "./src/trigger.ts"); const tryGetCoreApiLazy_1 = __webpack_require__(/*! ./utils/tryGetCoreApiLazy */ "./src/utils/tryGetCoreApiLazy.ts"); exports.hook = __webpack_require__(/*! ./hooks/registerHook */ "./src/hooks/registerHook.ts"); var setup_1 = __webpack_require__(/*! ./setup */ "./src/setup.ts"); Object.defineProperty(exports, "setup", ({ enumerable: true, get: function () { return setup_1.setup; } })); let hasSetModel = false; function setProgrammingModel() { const coreApi = (0, tryGetCoreApiLazy_1.tryGetCoreApiLazy)(); if (!coreApi) { console.warn('WARNING: Failed to detect the Azure Functions runtime. Switching "@azure/functions" package to test mode - not all features are supported.'); } else { coreApi.setProgrammingModel(new ProgrammingModel_1.ProgrammingModel()); } hasSetModel = true; } function convertToHttpOptions(optionsOrHandler, method) { const options = typeof optionsOrHandler === 'function' ? { handler: optionsOrHandler } : optionsOrHandler; options.methods = [method]; return options; } function convertToGenericOptions(options, triggerMethod) { const { handler, return: ret, trigger, extraInputs, extraOutputs, retry } = options, triggerOptions = __rest(options, ["handler", "return", "trigger", "extraInputs", "extraOutputs", "retry"]); return { trigger: trigger !== null && trigger !== void 0 ? trigger : triggerMethod(triggerOptions), return: ret, retry, extraInputs, extraOutputs, handler, }; } function get(name, optionsOrHandler) { http(name, convertToHttpOptions(optionsOrHandler, 'GET')); } exports.get = get; function put(name, optionsOrHandler) { http(name, convertToHttpOptions(optionsOrHandler, 'PUT')); } exports.put = put; function post(name, optionsOrHandler) { http(name, convertToHttpOptions(optionsOrHandler, 'POST')); } exports.post = post; function patch(name, optionsOrHandler) { http(name, convertToHttpOptions(optionsOrHandler, 'PATCH')); } exports.patch = patch; function deleteRequest(name, optionsOrHandler) { http(name, convertToHttpOptions(optionsOrHandler, 'DELETE')); } exports.deleteRequest = deleteRequest; function http(name, options) { options.return || (options.return = output.http({})); generic(name, convertToGenericOptions(options, trigger.http)); } exports.http = http; function timer(name, options) { generic(name, convertToGenericOptions(options, trigger.timer)); } exports.timer = timer; function storageBlob(name, options) { generic(name, convertToGenericOptions(options, trigger.storageBlob)); } exports.storageBlob = storageBlob; function storageQueue(name, options) { generic(name, convertToGenericOptions(options, trigger.storageQueue)); } exports.storageQueue = storageQueue; function serviceBusQueue(name, options) { generic(name, convertToGenericOptions(options, trigger.serviceBusQueue)); } exports.serviceBusQueue = serviceBusQueue; function serviceBusTopic(name, options) { generic(name, convertToGenericOptions(options, trigger.serviceBusTopic)); } exports.serviceBusTopic = serviceBusTopic; function eventHub(name, options) { generic(name, convertToGenericOptions(options, trigger.eventHub)); } exports.eventHub = eventHub; function eventGrid(name, options) { generic(name, convertToGenericOptions(options, trigger.eventGrid)); } exports.eventGrid = eventGrid; function cosmosDB(name, options) { // eslint-disable-next-line @typescript-eslint/no-unsafe-argument generic(name, convertToGenericOptions(options, trigger.cosmosDB)); } exports.cosmosDB = cosmosDB; function warmup(name, options) { generic(name, convertToGenericOptions(options, trigger.warmup)); } exports.warmup = warmup; function sql(name, options) { generic(name, convertToGenericOptions(options, trigger.sql)); } exports.sql = sql; function mySql(name, options) { generic(name, convertToGenericOptions(options, trigger.mySql)); } exports.mySql = mySql; function webPubSub(name, options) { generic(name, convertToGenericOptions(options, trigger.webPubSub)); } exports.webPubSub = webPubSub; function generic(name, options) { if (!hasSetModel) { setProgrammingModel(); } const coreApi = (0, tryGetCoreApiLazy_1.tryGetCoreApiLazy)(); if (!coreApi) { console.warn(`WARNING: Skipping call to register function "${name}" because the "@azure/functions" package is in test mode.`); } else { coreApi.registerFunction((0, toCoreFunctionMetadata_1.toCoreFunctionMetadata)(name, options), options.handler); } } exports.generic = generic; /***/ }), /***/ "./src/constants.ts": /*!**************************!*\ !*** ./src/constants.ts ***! \**************************/ /***/ ((__unused_webpack_module, exports) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.returnBindingKey = exports.version = void 0; exports.version = '4.7.0'; exports.returnBindingKey = '$return'; /***/ }), /***/ "./src/converters/fromRpcBindings.ts": /*!*******************************************!*\ !*** ./src/converters/fromRpcBindings.ts ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.fromRpcBindings = void 0; const constants_1 = __webpack_require__(/*! ../constants */ "./src/constants.ts"); const isTrigger_1 = __webpack_require__(/*! ../utils/isTrigger */ "./src/utils/isTrigger.ts"); const nonNull_1 = __webpack_require__(/*! ../utils/nonNull */ "./src/utils/nonNull.ts"); function fromRpcBindings(bindings) { let trigger; let returnBinding; const extraInputs = []; const extraOutputs = []; for (const [name, binding] of Object.entries((0, nonNull_1.nonNullValue)(bindings, 'bindings'))) { if ((0, isTrigger_1.isTrigger)(binding.type)) { trigger = fromRpcBinding(name, binding); } else if (name === constants_1.returnBindingKey) { returnBinding = fromRpcBinding(name, binding); } else if (binding.direction === 'in') { extraInputs.push(fromRpcBinding(name, binding)); } else if (binding.direction === 'out') { extraOutputs.push(fromRpcBinding(name, binding)); } } return { trigger: (0, nonNull_1.nonNullValue)(trigger, 'trigger'), return: returnBinding, extraInputs, extraOutputs, }; } exports.fromRpcBindings = fromRpcBindings; function fromRpcBinding(name, binding) { return Object.assign(Object.assign({}, binding), { type: (0, nonNull_1.nonNullProp)(binding, 'type'), name }); } /***/ }), /***/ "./src/converters/fromRpcContext.ts": /*!******************************************!*\ !*** ./src/converters/fromRpcContext.ts ***! \******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.fromRpcTraceContext = exports.fromRpcRetryContext = void 0; const nonNull_1 = __webpack_require__(/*! ../utils/nonNull */ "./src/utils/nonNull.ts"); function fromRpcRetryContext(retryContext) { if (!retryContext) { return undefined; } else { const result = { retryCount: (0, nonNull_1.nonNullProp)(retryContext, 'retryCount'), maxRetryCount: (0, nonNull_1.nonNullProp)(retryContext, 'maxRetryCount'), }; if (retryContext.exception) { result.exception = fromRpcException(retryContext.exception); } return result; } } exports.fromRpcRetryContext = fromRpcRetryContext; function fromRpcException(exception) { const result = {}; (0, nonNull_1.copyPropIfDefined)(exception, result, 'message'); (0, nonNull_1.copyPropIfDefined)(exception, result, 'source'); (0, nonNull_1.copyPropIfDefined)(exception, result, 'stackTrace'); return result; } function fromRpcTraceContext(traceContext) { if (!traceContext) { return undefined; } else { const result = {}; (0, nonNull_1.copyPropIfDefined)(traceContext, result, 'traceParent'); (0, nonNull_1.copyPropIfDefined)(traceContext, result, 'traceState'); if (traceContext.attributes) { result.attributes = traceContext.attributes; } return result; } } exports.fromRpcTraceContext = fromRpcTraceContext; /***/ }), /***/ "./src/converters/fromRpcNullable.ts": /*!*******************************************!*\ !*** ./src/converters/fromRpcNullable.ts ***! \*******************************************/ /***/ ((__unused_webpack_module, exports) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.fromNullableMapping = void 0; function fromNullableMapping(nullableMapping, originalMapping) { var _a; let converted = {}; if (nullableMapping && Object.keys(nullableMapping).length > 0) { for (const key in nullableMapping) { converted[key] = ((_a = nullableMapping[key]) === null || _a === void 0 ? void 0 : _a.value) || ''; } } else if (originalMapping && Object.keys(originalMapping).length > 0) { converted = originalMapping; } return converted; } exports.fromNullableMapping = fromNullableMapping; /***/ }), /***/ "./src/converters/fromRpcTriggerMetadata.ts": /*!**************************************************!*\ !*** ./src/converters/fromRpcTriggerMetadata.ts ***! \**************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.fromRpcTriggerMetadata = void 0; const isTrigger_1 = __webpack_require__(/*! ../utils/isTrigger */ "./src/utils/isTrigger.ts"); const fromRpcTypedData_1 = __webpack_require__(/*! ./fromRpcTypedData */ "./src/converters/fromRpcTypedData.ts"); const toCamelCase_1 = __webpack_require__(/*! ./toCamelCase */ "./src/converters/toCamelCase.ts"); function fromRpcTriggerMetadata(triggerMetadata, triggerType) { // For http and timer triggers, we will avoid using `triggerMetadata` for a few reasons: // 1. It uses `toCamelCase` methods, which can lead to weird casing bugs // 2. It's generally a large medley of properties that is difficult for us to document/type // 3. We can represent that information on the request & timer objects instead if (!triggerMetadata || (0, isTrigger_1.isHttpTrigger)(triggerType) || (0, isTrigger_1.isTimerTrigger)(triggerType)) { return undefined; } else { const result = {}; for (const [key, value] of Object.entries(triggerMetadata)) { result[(0, toCamelCase_1.toCamelCaseKey)(key)] = (0, toCamelCase_1.toCamelCaseValue)((0, fromRpcTypedData_1.fromRpcTypedData)(value)); } return result; } } exports.fromRpcTriggerMetadata = fromRpcTriggerMetadata; /***/ }), /***/ "./src/converters/fromRpcTypedData.ts": /*!********************************************!*\ !*** ./src/converters/fromRpcTypedData.ts ***! \********************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.fromRpcTypedData = void 0; const HttpRequest_1 = __webpack_require__(/*! ../http/HttpRequest */ "./src/http/HttpRequest.ts"); const nonNull_1 = __webpack_require__(/*! ../utils/nonNull */ "./src/utils/nonNull.ts"); function fromRpcTypedData(data) { if (!data) { return undefined; } else if ((0, nonNull_1.isDefined)(data.string)) { return tryJsonParse(data.string); } else if ((0, nonNull_1.isDefined)(data.json)) { return JSON.parse(data.json); } else if ((0, nonNull_1.isDefined)(data.bytes)) { return Buffer.from(data.bytes); } else if ((0, nonNull_1.isDefined)(data.stream)) { return Buffer.from(data.stream); } else if ((0, nonNull_1.isDefined)(data.http)) { return new HttpRequest_1.HttpRequest(data.http); } else if ((0, nonNull_1.isDefined)(data.int)) { return data.int; } else if ((0, nonNull_1.isDefined)(data.double)) { return data.double; } else if (data.collectionBytes && (0, nonNull_1.isDefined)(data.collectionBytes.bytes)) { return data.collectionBytes.bytes.map((d) => Buffer.from(d)); } else if (data.collectionString && (0, nonNull_1.isDefined)(data.collectionString.string)) { return data.collectionString.string.map(tryJsonParse); } else if (data.collectionDouble && (0, nonNull_1.isDefined)(data.collectionDouble.double)) { return data.collectionDouble.double; } else if (data.collectionSint64 && (0, nonNull_1.isDefined)(data.collectionSint64.sint64)) { return data.collectionSint64.sint64; } else { return undefined; } } exports.fromRpcTypedData = fromRpcTypedData; function tryJsonParse(data) { try { return JSON.parse(data); } catch (_a) { return data; } } /***/ }), /***/ "./src/converters/toCamelCase.ts": /*!***************************************!*\ !*** ./src/converters/toCamelCase.ts ***! \***************************************/ /***/ ((__unused_webpack_module, exports) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toCamelCaseKey = exports.toCamelCaseValue = void 0; function toCamelCaseValue(data) { if (typeof data !== 'object' || data === null) { return data; } else if (Array.isArray(data)) { return data.map(toCamelCaseValue); } else { const result = {}; for (const [key, value] of Object.entries(data)) { result[toCamelCaseKey(key)] = toCamelCaseValue(value); } return result; } } exports.toCamelCaseValue = toCamelCaseValue; function toCamelCaseKey(key) { return key.charAt(0).toLowerCase() + key.slice(1); } exports.toCamelCaseKey = toCamelCaseKey; /***/ }), /***/ "./src/converters/toCoreFunctionMetadata.ts": /*!**************************************************!*\ !*** ./src/converters/toCoreFunctionMetadata.ts ***! \**************************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toCoreFunctionMetadata = void 0; const constants_1 = __webpack_require__(/*! ../constants */ "./src/constants.ts"); const errors_1 = __webpack_require__(/*! ../errors */ "./src/errors.ts"); const isTrigger_1 = __webpack_require__(/*! ../utils/isTrigger */ "./src/utils/isTrigger.ts"); const toRpcDuration_1 = __webpack_require__(/*! ./toRpcDuration */ "./src/converters/toRpcDuration.ts"); function toCoreFunctionMetadata(name, options) { const bindings = {}; const bindingNames = []; const trigger = options.trigger; bindings[trigger.name] = Object.assign(Object.assign({}, trigger), { direction: 'in', type: (0, isTrigger_1.isTrigger)(trigger.type) ? trigger.type : trigger.type + 'Trigger' }); bindingNames.push(trigger.name); if (options.extraInputs) { for (const input of options.extraInputs) { bindings[input.name] = Object.assign(Object.assign({}, input), { direction: 'in' }); bindingNames.push(input.name); } } if (options.return) { bindings[constants_1.returnBindingKey] = Object.assign(Object.assign({}, options.return), { direction: 'out' }); bindingNames.push(constants_1.returnBindingKey); } if (options.extraOutputs) { for (const output of options.extraOutputs) { bindings[output.name] = Object.assign(Object.assign({}, output), { direction: 'out' }); bindingNames.push(output.name); } } const dupeBindings = bindingNames.filter((v, i) => bindingNames.indexOf(v) !== i); if (dupeBindings.length > 0) { throw new errors_1.AzFuncSystemError(`Duplicate bindings found for function "${name}". Remove a duplicate binding or manually specify the "name" property to make it unique.`); } let retryOptions; if (options.retry) { retryOptions = Object.assign(Object.assign({}, options.retry), { retryStrategy: options.retry.strategy, delayInterval: (0, toRpcDuration_1.toRpcDuration)(options.retry.delayInterval, 'retry.delayInterval'), maximumInterval: (0, toRpcDuration_1.toRpcDuration)(options.retry.maximumInterval, 'retry.maximumInterval'), minimumInterval: (0, toRpcDuration_1.toRpcDuration)(options.retry.minimumInterval, 'retry.minimumInterval') }); } return { name, bindings, retryOptions }; } exports.toCoreFunctionMetadata = toCoreFunctionMetadata; /***/ }), /***/ "./src/converters/toRpcDuration.ts": /*!*****************************************!*\ !*** ./src/converters/toRpcDuration.ts ***! \*****************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toRpcDuration = void 0; const errors_1 = __webpack_require__(/*! ../errors */ "./src/errors.ts"); const nonNull_1 = __webpack_require__(/*! ../utils/nonNull */ "./src/utils/nonNull.ts"); function toRpcDuration(dateTime, propertyName) { if ((0, nonNull_1.isDefined)(dateTime)) { try { let timeInMilliseconds; if (typeof dateTime === 'object') { const minutes = (dateTime.minutes || 0) + (dateTime.hours || 0) * 60; const seconds = (dateTime.seconds || 0) + minutes * 60; timeInMilliseconds = (dateTime.milliseconds || 0) + seconds * 1000; } else if (typeof dateTime === 'number') { timeInMilliseconds = dateTime; } if ((0, nonNull_1.isDefined)(timeInMilliseconds) && timeInMilliseconds >= 0) { return { seconds: Math.round(timeInMilliseconds / 1000), }; } } catch (_a) { // fall through } throw new errors_1.AzFuncSystemError(`A 'number' or 'Duration' object was expected instead of a '${typeof dateTime}'. Cannot parse value of '${propertyName}'.`); } return undefined; } exports.toRpcDuration = toRpcDuration; /***/ }), /***/ "./src/converters/toRpcHttp.ts": /*!*************************************!*\ !*** ./src/converters/toRpcHttp.ts ***! \*************************************/ /***/ (function(__unused_webpack_module, exports, __webpack_require__) { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toRpcHttp = void 0; const errors_1 = __webpack_require__(/*! ../errors */ "./src/errors.ts"); const httpProxy_1 = __webpack_require__(/*! ../http/httpProxy */ "./src/http/httpProxy.ts"); const HttpResponse_1 = __webpack_require__(/*! ../http/HttpResponse */ "./src/http/HttpResponse.ts"); const setup_1 = __webpack_require__(/*! ../setup */ "./src/setup.ts"); const toRpcHttpCookie_1 = __webpack_require__(/*! ./toRpcHttpCookie */ "./src/converters/toRpcHttpCookie.ts"); const toRpcTypedData_1 = __webpack_require__(/*! ./toRpcTypedData */ "./src/converters/toRpcTypedData.ts"); function toRpcHttp(invocationId, data) { return __awaiter(this, void 0, void 0, function* () { if (data === null || data === undefined) { return data; } else if (typeof data !== 'object') { throw new errors_1.AzFuncSystemError('The HTTP response must be an object with optional properties "body", "status", "headers", and "cookies".'); } const response = data instanceof HttpResponse_1.HttpResponse ? data : new HttpResponse_1.HttpResponse(data); if (setup_1.enableHttpStream) { // send http data over http proxy instead of rpc yield (0, httpProxy_1.sendProxyResponse)(invocationId, response); return; } const rpcResponse = {}; rpcResponse.statusCode = response.status.toString(); rpcResponse.headers = {}; for (const [key, value] of response.headers.entries()) { rpcResponse.headers[key] = value; } rpcResponse.cookies = []; for (const cookie of response.cookies) { rpcResponse.cookies.push((0, toRpcHttpCookie_1.toRpcHttpCookie)(cookie)); } rpcResponse.enableContentNegotiation = response.enableContentNegotiation; const bodyBytes = yield response.arrayBuffer(); rpcResponse.body = (0, toRpcTypedData_1.toRpcTypedData)(bodyBytes); return { http: rpcResponse }; }); } exports.toRpcHttp = toRpcHttp; /***/ }), /***/ "./src/converters/toRpcHttpCookie.ts": /*!*******************************************!*\ !*** ./src/converters/toRpcHttpCookie.ts ***! \*******************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toRpcHttpCookie = void 0; const toRpcNullable_1 = __webpack_require__(/*! ./toRpcNullable */ "./src/converters/toRpcNullable.ts"); /** * From RFC specifications for 'Set-Cookie' response header: https://www.rfc-editor.org/rfc/rfc6265.txt * @param inputCookie */ function toRpcHttpCookie(inputCookie) { // Resolve RpcHttpCookie.SameSite enum, a one-off let rpcSameSite = 'none'; if (inputCookie && inputCookie.sameSite) { const sameSite = inputCookie.sameSite.toLocaleLowerCase(); if (sameSite === 'lax') { rpcSameSite = 'lax'; } else if (sameSite === 'strict') { rpcSameSite = 'strict'; } else if (sameSite === 'none') { rpcSameSite = 'explicitNone'; } } const rpcCookie = { name: inputCookie && (0, toRpcNullable_1.toRpcString)(inputCookie.name, 'cookie.name'), value: inputCookie && (0, toRpcNullable_1.toRpcString)(inputCookie.value, 'cookie.value'), domain: (0, toRpcNullable_1.toNullableString)(inputCookie && inputCookie.domain, 'cookie.domain'), path: (0, toRpcNullable_1.toNullableString)(inputCookie && inputCookie.path, 'cookie.path'), expires: (0, toRpcNullable_1.toNullableTimestamp)(inputCookie && inputCookie.expires, 'cookie.expires'), secure: (0, toRpcNullable_1.toNullableBool)(inputCookie && inputCookie.secure, 'cookie.secure'), httpOnly: (0, toRpcNullable_1.toNullableBool)(inputCookie && inputCookie.httpOnly, 'cookie.httpOnly'), sameSite: rpcSameSite, maxAge: (0, toRpcNullable_1.toNullableDouble)(inputCookie && inputCookie.maxAge, 'cookie.maxAge'), }; return rpcCookie; } exports.toRpcHttpCookie = toRpcHttpCookie; /***/ }), /***/ "./src/converters/toRpcNullable.ts": /*!*****************************************!*\ !*** ./src/converters/toRpcNullable.ts ***! \*****************************************/ /***/ ((__unused_webpack_module, exports, __webpack_require__) => { // Copyright (c) .NET Foundation. All rights reserved. // Licensed under the MIT License. Object.defineProperty(exports, "__esModule", ({ value: true })); exports.toNullableTimestamp = exports.toNullableString = exports.toRpcString = exports.toNullableDouble = exports.toNullableBool = void 0; const errors_1 = __webpack_require__(/*! ../errors */ "./src/errors.ts"); const nonNull_1 = __webpack_require__(/*! ../utils/nonNull */ "./src/utils/nonNull.ts"); /** * Converts boolean input to an 'INullableBool' to be sent through the RPC layer. * Input that is not a boolean but is also not null or undefined logs a function app level warning. * @param nullable Input to be converted to an INullableBool if it is a valid boolean * @param propertyName The name of the property that the caller will assign the output to. Used for debugging. */ function toNullableBool(nullable, propertyName) { if (typeof nullable === 'boolean') { return { value: nullable, }; } if ((0, nonNull_1.isDefined)(nullable)) { throw new errors_1.AzFuncSystemError(`A 'boolean'