@cloudnux/local-cloud-provider 0.11.0 → 0.14.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/dev-console-plugin/index.d.ts +37 -2
- package/dist/dev-console-plugin/index.js +452 -249
- package/dist/dev-console-plugin/index.js.map +1 -1
- package/dist/index.js +191 -90
- package/dist/index.js.map +1 -1
- package/dist/queue-plugin/index.d.ts +2 -1
- package/dist/queue-plugin/index.js +187 -102
- package/dist/queue-plugin/index.js.map +1 -1
- package/dist/schedule-plugin/index.js +193 -118
- package/dist/schedule-plugin/index.js.map +1 -1
- package/dist/websocket-plugin/index.d.ts +10 -3
- package/dist/websocket-plugin/index.js +1063 -11
- package/dist/websocket-plugin/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/services/event-broker.ts","../../../../node_modules/lodash-es/_freeGlobal.js","../../../../node_modules/lodash-es/_root.js","../../../../node_modules/lodash-es/_Symbol.js","../../../../node_modules/lodash-es/_getRawTag.js","../../../../node_modules/lodash-es/_objectToString.js","../../../../node_modules/lodash-es/_baseGetTag.js","../../../../node_modules/lodash-es/isObjectLike.js","../../../../node_modules/lodash-es/isSymbol.js","../../../../node_modules/lodash-es/_arrayMap.js","../../../../node_modules/lodash-es/isArray.js","../../../../node_modules/lodash-es/_baseToString.js","../../../../node_modules/lodash-es/_trimmedEndIndex.js","../../../../node_modules/lodash-es/_baseTrim.js","../../../../node_modules/lodash-es/isObject.js","../../../../node_modules/lodash-es/isFunction.js","../../../../node_modules/lodash-es/_coreJsData.js","../../../../node_modules/lodash-es/_isMasked.js","../../../../node_modules/lodash-es/_toSource.js","../../../../node_modules/lodash-es/_baseIsNative.js","../../../../node_modules/lodash-es/_getValue.js","../../../../node_modules/lodash-es/_getNative.js","../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../node_modules/lodash-es/_isIndex.js","../../../../node_modules/lodash-es/eq.js","../../../../node_modules/lodash-es/isLength.js","../../../../node_modules/lodash-es/_baseIsArguments.js","../../../../node_modules/lodash-es/isArguments.js","../../../../node_modules/lodash-es/_isKey.js","../../../../node_modules/lodash-es/_nativeCreate.js","../../../../node_modules/lodash-es/_hashClear.js","../../../../node_modules/lodash-es/_hashDelete.js","../../../../node_modules/lodash-es/_hashGet.js","../../../../node_modules/lodash-es/_hashHas.js","../../../../node_modules/lodash-es/_hashSet.js","../../../../node_modules/lodash-es/_Hash.js","../../../../node_modules/lodash-es/_listCacheClear.js","../../../../node_modules/lodash-es/_assocIndexOf.js","../../../../node_modules/lodash-es/_listCacheDelete.js","../../../../node_modules/lodash-es/_listCacheGet.js","../../../../node_modules/lodash-es/_listCacheHas.js","../../../../node_modules/lodash-es/_listCacheSet.js","../../../../node_modules/lodash-es/_ListCache.js","../../../../node_modules/lodash-es/_Map.js","../../../../node_modules/lodash-es/_mapCacheClear.js","../../../../node_modules/lodash-es/_isKeyable.js","../../../../node_modules/lodash-es/_getMapData.js","../../../../node_modules/lodash-es/_mapCacheDelete.js","../../../../node_modules/lodash-es/_mapCacheGet.js","../../../../node_modules/lodash-es/_mapCacheHas.js","../../../../node_modules/lodash-es/_mapCacheSet.js","../../../../node_modules/lodash-es/_MapCache.js","../../../../node_modules/lodash-es/memoize.js","../../../../node_modules/lodash-es/_memoizeCapped.js","../../../../node_modules/lodash-es/_stringToPath.js","../../../../node_modules/lodash-es/toString.js","../../../../node_modules/lodash-es/_castPath.js","../../../../node_modules/lodash-es/_toKey.js","../../../../node_modules/lodash-es/_baseSlice.js","../../../../node_modules/lodash-es/_castSlice.js","../../../../node_modules/lodash-es/_hasUnicode.js","../../../../node_modules/lodash-es/_asciiToArray.js","../../../../node_modules/lodash-es/_unicodeToArray.js","../../../../node_modules/lodash-es/_stringToArray.js","../../../../node_modules/lodash-es/_hasPath.js","../../../../node_modules/lodash-es/_baseHas.js","../../../../node_modules/lodash-es/has.js","../../../../node_modules/lodash-es/_charsEndIndex.js","../../../../node_modules/lodash-es/_charsStartIndex.js","../../../../node_modules/lodash-es/trim.js","../../../utils/src/config/env.ts","../../../utils/src/auth/token.ts","../../../utils/src/logging/index.ts","../../../utils/src/logging/types.ts","../../../utils/src/logging/error-to-string.ts","../src/services/storage.ts","../src/services/locations.ts","../src/services/functions.ts","../src/services/websocket.ts","../src/router/index.ts","../src/index.ts"],"sourcesContent":["import axios from 'axios';\n\nimport { env } from \"@cloudnux/utils\";\n\nimport { EventBrokerService, EventMessage, PeekOptions, PublishOptions, ReadOptions } from \"@cloudnux/core-cloud-provider\";\n/**\n * Create an HTTP-based event broker service \n * Communicates with a message queue system over HTTP endpoints\n * @returns HTTP event broker service implementation\n */\nexport function createLocalEventBrokerService(): EventBrokerService {\n // Get base URL from environment variables or use default\n const baseURL = env(\"DEV_CLOUD_EVENT_BROKER_URL\", 'http://localhost:3000');\n\n /**\n * Get the full URL for a queue\n * @param queueName Queue name\n * @returns Full URL for the queue endpoint\n */\n function getQueueUrl(queueName: string): string {\n // If queue name already contains a full URL, use it as is\n if (queueName.startsWith('http://') || queueName.startsWith('https://')) {\n return queueName;\n }\n\n // Otherwise, append it to the base URL\n return `${baseURL}/${queueName}`;\n }\n\n /**\n * Parse response data into EventMessage format\n * @param data Response data\n * @returns EventMessage object\n */\n function parseMessage(data: any): EventMessage {\n // Handle string body\n const body = typeof data.body === 'object'\n ? JSON.stringify(data.body)\n : data.body ?? '';\n\n return {\n id: data.id ?? data.messageId ?? '',\n body,\n attributes: data.attributes ?? {},\n receiptHandle: data.receiptHandle ?? data.id ?? '',\n publishedAt: data.publishedAt ? new Date(data.publishedAt) : new Date()\n };\n }\n\n return {\n /**\n * Publish a message to an HTTP queue endpoint\n * @param target Target queue name or URL\n * @param message Message to publish\n * @param options Optional publishing options\n * @returns Promise resolving when publishing is complete\n */\n async publish(target: string, message: string | Record<string, any>, options?: PublishOptions): Promise<void> {\n const queueUrl = getQueueUrl(target);\n const headers: Record<string, string> = {};\n\n // Add message attributes as headers\n if (options?.attributes) {\n Object.entries(options.attributes).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n // Add FIFO properties as headers if specified\n if (options?.messageGroupId) {\n headers['x-message-group-id'] = options.messageGroupId;\n }\n\n if (options?.messageDeduplicationId) {\n headers['x-message-deduplication-id'] = options.messageDeduplicationId;\n }\n\n if (options?.delaySeconds) {\n headers['x-delay-seconds'] = options.delaySeconds.toString();\n }\n\n // Prepare message body\n const body = typeof message === 'string' ? message : message;\n\n // Send POST request to publish the message\n await axios.post(queueUrl, body, { headers });\n },\n\n /**\n * Peek at messages in a queue without removing them\n * @param source Source queue name or URL\n * @param options Optional reading options\n * @returns Promise containing the peeked message(s)\n */\n async peek(source: string, options?: PeekOptions): Promise<EventMessage[]> {\n const queueUrl = getQueueUrl(source);\n const params: Record<string, string> = {\n peek: 'true'\n };\n\n // Add options as query parameters\n if (options?.maxMessages) {\n params.maxMessages = options.maxMessages.toString();\n }\n\n if (options?.waitTimeSeconds) {\n params.waitTimeSeconds = options.waitTimeSeconds.toString();\n }\n\n // Send GET request to peek at messages\n const response = await axios.get(queueUrl, { params });\n\n // Parse response data\n const messages = Array.isArray(response.data)\n ? response.data.map(parseMessage)\n : response.data ? [parseMessage(response.data)] : [];\n\n return messages;\n },\n\n /**\n * Read and remove message(s) from a queue\n * @param source Source queue name or URL\n * @param options Optional reading options\n * @returns Promise containing the read message(s)\n */\n async read(source: string, options?: ReadOptions): Promise<EventMessage[]> {\n const queueUrl = getQueueUrl(source);\n const params: Record<string, string> = {};\n\n // Add options as query parameters\n if (options?.maxMessages) {\n params.maxMessages = options.maxMessages.toString();\n }\n\n if (options?.waitTimeSeconds) {\n params.waitTimeSeconds = options.waitTimeSeconds.toString();\n }\n\n if (options?.visibilityTimeout) {\n params.visibilityTimeout = options.visibilityTimeout.toString();\n }\n\n // Send DELETE request to read and remove messages\n // DELETE is used to indicate that messages should be removed after reading\n const response = await axios.delete(queueUrl, { params });\n\n // Parse response data\n const messages = Array.isArray(response.data)\n ? response.data.map(parseMessage)\n : response.data ? [parseMessage(response.data)] : [];\n\n return messages;\n }\n };\n}","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nexport default charsEndIndex;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nexport default charsStartIndex;\n","import baseToString from './_baseToString.js';\nimport baseTrim from './_baseTrim.js';\nimport castSlice from './_castSlice.js';\nimport charsEndIndex from './_charsEndIndex.js';\nimport charsStartIndex from './_charsStartIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n}\n\nexport default trim;\n","import { has, trim } from \"lodash-es\";\n\n//import dotenv from \"dotenv\";\n\n\n// if (__DEV__) {\n// dotenv.config({\n// path: __ENV_PATH__\n// })\n// }\n\n//function _env(key: keyof EnvKeys, defaultValue?: string): string;\nfunction _env(key: string, defaultValue?: string): string {\n return has(process.env, key)\n ? (process.env[key] ?? \"\")\n : (defaultValue ?? \"\");\n}\n\n//function int(key: keyof EnvKeys, defaultValue?: number): number;\nfunction int(key: string, defaultValue?: number): number {\n if (!has(process.env, key)) {\n return defaultValue ?? 0;\n }\n const value = process.env[key] ?? \"0\";\n return parseInt(value, 10);\n}\n\n//function float(key: keyof EnvKeys, defaultValue?: number): number;\nfunction float(key: string, defaultValue?: number): number {\n if (!has(process.env, key)) {\n return defaultValue ?? 0;\n }\n\n const value = process.env[key] ?? \"0\";\n return parseFloat(value);\n}\n\n//function bool(key: keyof EnvKeys, defaultValue?: boolean): boolean;\nfunction bool(key: string, defaultValue?: boolean): boolean {\n if (!has(process.env, key)) {\n return defaultValue ?? false;\n }\n\n const value = process.env[key];\n return value === 'true';\n}\n\n//function json<T = any>(key: keyof EnvKeys, defaultValue?: T): T\nfunction json<T = any>(key: string, defaultValue?: T) {\n if (!has(process.env, key)) {\n return defaultValue ?? {};\n }\n\n const value = process.env[key] ?? \"{}\";\n try {\n return JSON.parse(value);\n } catch (error: any) {\n throw new Error(`Invalid json environment variable ${key}: ${error.message}`);\n }\n}\n\n//function array(key: keyof EnvKeys, defaultValue?: []): string[];\nfunction array(key: string, defaultValue?: []): Array<any> {\n if (!has(process.env, key)) {\n return defaultValue ?? [];\n }\n\n let value = process.env[key] ?? \"\";\n\n if (value.startsWith('[') && value.endsWith(']')) {\n value = value.substring(1, value.length - 1);\n }\n\n return value.split(',').map((v) => {\n return trim(trim(v, ' '), '\"');\n });\n}\n\n//function date(key: keyof EnvKeys, defaultValue?: Date): Date;\nfunction date(key: string, defaultValue?: Date): Date {\n if (!has(process.env, key)) {\n return defaultValue ?? new Date();\n }\n\n const value = process.env[key] ?? Date()\n return new Date(value);\n}\n\nconst utils = {\n\n int,\n\n float,\n\n bool,\n\n json,\n\n array,\n\n date,\n\n /**\n * Gets a value from env that matches oneOf provided values\n * @param {string} key\n * @param {string[]} expectedValues\n * @param {string|undefined} defaultValue\n * @returns {string|undefined}\n */\n oneOf(key: string, expectedValues: string[], defaultValue?: string): string {\n if (!expectedValues) {\n throw new Error(`env.oneOf requires expectedValues`);\n }\n\n if (defaultValue && !expectedValues.includes(defaultValue)) {\n throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);\n }\n\n const rawValue = env(key as any, defaultValue);\n return expectedValues.includes(rawValue) ? rawValue : (defaultValue ?? \"\");\n },\n};\n\nexport const env = Object.assign(_env, utils);","import * as crypto from 'crypto';\n\n// Custom JWT implementation without dependencies\ninterface JWTOptions {\n audience?: string | string[];\n expiresIn?: string | number;\n notBefore?: string | number;\n jwtid?: string;\n issuer?: string;\n ignoreExpiration?: boolean;\n}\n\ninterface JWTPayload {\n aud?: string | string[];\n exp?: number;\n nbf?: number;\n jti?: string;\n iss?: string;\n iat: number;\n [key: string]: any;\n}\n\n/**\n * Parses a time string like \"1h\" or \"100ms\" to milliseconds\n */\nfunction parseTimeToMs(time: string | number): number {\n if (typeof time === 'number') return time * 1000; // Assuming number input is in seconds\n\n const match = time.match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d)$/);\n if (!match) return 0;\n\n const value = parseFloat(match[1]);\n const unit = match[2];\n\n switch (unit) {\n case 'ms': return value;\n case 's': return value * 1000;\n case 'm': return value * 60 * 1000;\n case 'h': return value * 60 * 60 * 1000;\n case 'd': return value * 24 * 60 * 60 * 1000;\n default: return 0;\n }\n}\n\n/**\n * Base64Url encode a string or buffer\n */\nfunction base64UrlEncode(input: string | Buffer): string {\n const str = typeof input === 'string' ? input : input.toString('base64');\n return str\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\n/**\n * Base64Url decode a string to Buffer\n */\nfunction base64UrlDecode(input: string): Buffer {\n let str = input\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n // Add padding if needed\n while (str.length % 4) {\n str += '=';\n }\n\n return Buffer.from(str, 'base64');\n}\n\n/**\n * Create a JWT\n */\nfunction createAccessToken(\n claims: Record<string, string>,\n privateKey: string,\n expiresIn: string = \"1h\"\n): string {\n const now = Math.floor(Date.now() / 1000);\n\n // Create header\n const header = {\n alg: 'HS256',\n typ: 'JWT'\n };\n\n // Create payload with claims and standard JWT fields\n const payload: JWTPayload = {\n ...claims,\n aud: [\"*\"],\n iat: now,\n iss: \"vcg-identity\",\n jti: Date.now().toString()\n };\n\n // Add expiration\n if (expiresIn) {\n const expiryMs = parseTimeToMs(expiresIn);\n payload.exp = now + Math.floor(expiryMs / 1000);\n }\n\n // Add not before\n const notBefore = \"100ms\";\n if (notBefore) {\n const notBeforeMs = parseTimeToMs(notBefore);\n payload.nbf = now + Math.floor(notBeforeMs / 1000);\n }\n\n // Encode header and payload\n const encodedHeader = base64UrlEncode(JSON.stringify(header));\n const encodedPayload = base64UrlEncode(JSON.stringify(payload));\n\n // Create signature\n const signatureInput = `${encodedHeader}.${encodedPayload}`;\n const signature = crypto\n .createHmac('sha256', privateKey)\n .update(signatureInput)\n .digest();\n\n const encodedSignature = base64UrlEncode(signature);\n\n // Return complete JWT\n return `${encodedHeader}.${encodedPayload}.${encodedSignature}`;\n}\n\n/**\n * Generate a UUID v4 without dependencies\n */\nfunction createRefreshToken(): string {\n const bytes = crypto.randomBytes(16);\n\n // Set version (4) and variant (RFC4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant RFC4122\n\n // Convert to hex without dashes\n return bytes.toString('hex');\n}\n\n/**\n * Decode a JWT token without verification\n */\nfunction decode(token: string): JWTPayload | null {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n\n const payload = JSON.parse(\n base64UrlDecode(parts[1]).toString('utf8')\n );\n\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Verify a JWT token without dependencies\n */\nfunction verify(token: string, privateKey: string, options: JWTOptions = {}): Promise<JWTPayload> {\n return new Promise((resolve, reject) => {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return reject(new Error('Invalid token format'));\n }\n\n const [encodedHeader, encodedPayload, encodedSignature] = parts;\n\n // Verify signature\n const signatureInput = `${encodedHeader}.${encodedPayload}`;\n const expectedSignature = crypto\n .createHmac('sha256', privateKey)\n .update(signatureInput)\n .digest();\n\n const providedSignature = base64UrlDecode(encodedSignature);\n\n const signatureValid = crypto.timingSafeEqual(\n expectedSignature,\n providedSignature\n );\n\n if (!signatureValid) {\n return reject(new Error('Invalid signature'));\n }\n\n // Decode payload\n const payload = JSON.parse(\n base64UrlDecode(encodedPayload).toString('utf8')\n );\n\n // Verify expiration\n if (!options.ignoreExpiration && payload.exp) {\n const now = Math.floor(Date.now() / 1000);\n if (now >= payload.exp) {\n return reject(new Error('Token expired'));\n }\n }\n\n // Verify not before\n if (payload.nbf) {\n const now = Math.floor(Date.now() / 1000);\n if (now < payload.nbf) {\n return reject(new Error('Token not yet valid'));\n }\n }\n\n // Verify issuer\n if (options.issuer && payload.iss !== options.issuer) {\n return reject(new Error('Invalid issuer'));\n }\n\n // Verify audience\n if (options.audience) {\n const audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n const tokenAudiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n const validAudience = audiences.some(aud =>\n tokenAudiences.includes(aud)\n );\n\n if (!validAudience) {\n return reject(new Error('Invalid audience'));\n }\n }\n\n resolve(payload);\n } catch (error) {\n reject(error);\n }\n });\n}\n\n\nexport const tokenUtils = {\n createAccessToken,\n createRefreshToken,\n decodeAccessToken: decode,\n verifyAccessToken: verify,\n}","import chalk from \"chalk\";\nimport { EOL } from \"os\";\n\nimport { env } from \"../config\";\nimport { Logger, logLevels } from \"./types\";\nimport { errorToString } from \"./error-to-string\";\n\nconst currentLogLevel = logLevels[env('LOG_LEVEL')?.toLowerCase() as keyof typeof logLevels] ?? logLevels.info;\nlet module = \"default\";\nlet requestId = \"\";\n\n// export const logger: Logger = {\n// fatal: (message: unknown, meta?: Record<string, any>) => {\n// if (currentLogLevel >= logLevels.fatal) {\n// console.error({\n// level: 'fatal',\n// message: errorToString(message),\n// timestamp: new Date().toISOString(),\n// module,\n// requestId,\n// ...meta\n// });\n// }\n// },\n// error: (message: unknown, meta?: Record<string, any>) => {\n// if (currentLogLevel >= logLevels.error) {\n// console.error({\n// level: 'error',\n// message: errorToString(message),\n// timestamp: new Date().toISOString(),\n// module,\n// requestId,\n// ...meta\n// });\n// }\n// },\n// warn: (message: unknown, meta?: Record<string, any>) => {\n// if (currentLogLevel >= logLevels.warn) {\n// console.warn({\n// level: 'warn',\n// message: errorToString(message),\n// timestamp: new Date().toISOString(),\n// module,\n// requestId,\n// ...meta\n// });\n// }\n// },\n// info: (message: unknown, meta?: Record<string, any>) => {\n// if (currentLogLevel >= logLevels.info) {\n// console.info({\n// level: 'info',\n// message: errorToString(message),\n// timestamp: new Date().toISOString(),\n// module,\n// requestId,\n// ...meta\n// });\n// }\n// },\n// debug: (message: unknown, meta?: Record<string, any>) => {\n// if (currentLogLevel >= logLevels.debug) {\n// console.log({\n// level: 'debug',\n// message: errorToString(message),\n// timestamp: new Date().toISOString(),\n// module,\n// requestId,\n// ...meta\n// });\n// }\n// }\n// };\n\nexport function initializeLogger(moduleName: string, requestIdValue: string = \"\") {\n module = moduleName;\n requestId = requestIdValue;\n}\n\nexport const logger: Logger = {\n fatal: (message: unknown, meta?: Record<string, any>) => {\n if (currentLogLevel >= logLevels.fatal) {\n console.error(\n `[${new Date().toTimeString()}]`,\n `${chalk.bgRed.white(\" fatal \")} - ${module || \"unknown module\"} - ${requestId || \"no request ID\"} - ${EOL}`,\n errorToString(message),\n meta ? `${EOL}${JSON.stringify(meta, null, 2)}` : \"\"\n );\n }\n },\n error: (message: unknown, meta?: Record<string, any>) => {\n if (currentLogLevel >= logLevels.error) {\n console.error(\n `[${new Date().toTimeString()}]`,\n `${chalk.bgRed.white(\" error \")} - ${module || \"unknown module\"} - ${requestId || \"no request ID\"} - ${EOL}`,\n errorToString(message),\n meta ? `${EOL}${JSON.stringify(meta, null, 2)}` : \"\"\n );\n }\n },\n warn: (message: unknown, meta?: Record<string, any>) => {\n if (currentLogLevel >= logLevels.warn) {\n console.warn(\n `[${new Date().toTimeString()}]`,\n `${chalk.bgYellow.black(\" warn \")} - ${module || \"unknown module\"} - ${requestId || \"no request ID\"} - ${EOL}`,\n errorToString(message),\n meta ? `${EOL}${JSON.stringify(meta, null, 2)}` : \"\"\n );\n }\n },\n info: (message: unknown, meta?: Record<string, any>) => {\n if (currentLogLevel >= logLevels.info) {\n console.info(\n `[${new Date().toTimeString()}]`,\n `${chalk.bgBlue.white(\" info \")} - ${module || \"unknown module\"} - ${requestId || \"no request ID\"} - ${EOL}`,\n message,\n meta ? `${EOL}${JSON.stringify(meta, null, 2)}` : \"\"\n );\n }\n },\n debug: (message: unknown, meta?: Record<string, any>) => {\n if (currentLogLevel >= logLevels.debug) {\n console.debug(\n `[${new Date().toTimeString()}]`,\n `${chalk.bgWhite.black(\" debug \")} - ${module || \"unknown module\"} - ${requestId || \"no request ID\"} - ${EOL}`,\n message,\n meta ? `${EOL}${JSON.stringify(meta, null, 2)}` : \"\"\n );\n }\n }\n}","export const logLevels = {\n fatal: -1,\n error: 0,\n warn: 1,\n info: 2,\n debug: 3\n};\n\nexport type Logger = {\n fatal: (message: string, meta?: Record<string, any>) => void;\n error: (message: string, meta?: Record<string, any>) => void;\n warn: (message: string, meta?: Record<string, any>) => void;\n info: (message: string, meta?: Record<string, any>) => void;\n debug: (message: string, meta?: Record<string, any>) => void;\n}","export const errorToString = (error: unknown): string => {\n // Handle null or undefined\n if (error === null) return 'Null error';\n if (error === undefined) return 'Undefined error';\n\n // Handle Error objects\n if (error instanceof Error) {\n return [\n `Name: ${error.name}`,\n `Message: ${error.message}`,\n `Stack: ${error.stack || 'No stack trace available'}`,\n // Handle additional properties that might exist on custom errors\n ...Object.entries(error)\n .filter(([key]) => !['name', 'message', 'stack'].includes(key))\n .map(([key, value]) => `${key}: ${JSON.stringify(value)}`)\n ].join('\\n');\n }\n\n // Handle strings\n if (typeof error === 'string') return error;\n\n // Handle objects\n if (typeof error === 'object') {\n try {\n return JSON.stringify(error, null, 2);\n } catch {\n return `[Object that cannot be stringified: ${Object.prototype.toString.call(error)}]`;\n }\n }\n\n // Handle other primitives\n return String(error);\n};\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { env, logger } from \"@cloudnux/utils\";\n\nimport { StorageService, StorageWriteOptions, StorageWriteResult } from \"@cloudnux/core-cloud-provider\";\n\n// Use fs.promises for async file operations\nconst { mkdir, writeFile, readFile, unlink, access } = fs.promises;\n\n/**\n * Create a local storage service that uses the filesystem\n * @returns Local filesystem storage service implementation\n */\nexport function createLocalStorageService(): StorageService {\n // Get base directory from environment variables or use default\n const baseDir = env(\"DEV_CLOUD_STORAGE_BUCKET\", path.join(process.cwd(), '.local-storage'))!;\n\n // Create base directory if it doesn't exist\n if (!fs.existsSync(baseDir)) {\n fs.mkdirSync(baseDir, { recursive: true });\n }\n\n /**\n * Ensures the directory for a file exists\n * @param filePath Path to the file\n */\n async function ensureDirectoryExists(filePath: string): Promise<void> {\n const directory = path.dirname(filePath);\n try {\n await access(directory);\n } catch {\n // Directory doesn't exist, create it\n await mkdir(directory, { recursive: true });\n }\n }\n\n /**\n * Get the full path to a file\n * @param bucket Bucket name (folder)\n * @param filePath Relative path within the storage\n * @returns Absolute file path\n */\n function getFullPath(bucket: string, filePath: string): string {\n // Normalize the path to prevent directory traversal\n const normalizedPath = path.normalize(filePath).replace(/^(\\.\\.(\\/|\\\\|$))+/, '');\n const bucketPath = path.join(baseDir, bucket);\n\n // Create bucket directory if it doesn't exist\n if (!fs.existsSync(bucketPath)) {\n fs.mkdirSync(bucketPath, { recursive: true });\n }\n\n return path.join(bucketPath, normalizedPath);\n }\n\n /**\n * Write metadata for a file\n * @param filePath Path to the file\n * @param options File options\n */\n async function writeMetadata(filePath: string, options?: StorageWriteOptions): Promise<void> {\n if (!options) return;\n\n const metadataPath = `${filePath}.metadata.json`;\n const metadata = {\n contentType: options.contentType,\n acl: options.acl,\n metadata: options.metadata,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n await writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');\n }\n\n return {\n /**\n * Read data from local filesystem\n * @param filePath Path to the file\n * @param bucket Bucket (folder) name\n * @returns Promise containing the file data\n */\n async read(filePath: string, bucket: string): Promise<Buffer> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n\n try {\n return await readFile(fullPath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`File not found: ${filePath} in bucket ${bucket}`);\n }\n throw error;\n }\n },\n\n /**\n * Write data to local filesystem\n * @param filePath Path where to store the file\n * @param data Data to write\n * @param bucket Bucket (folder) name\n * @param options Optional configuration for the write operation\n * @returns Promise resolving with the result including URL of the stored file\n */\n async write(filePath: string, data: Buffer | string, bucket: string, options?: StorageWriteOptions): Promise<StorageWriteResult> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n\n // Ensure directory exists\n await ensureDirectoryExists(fullPath);\n\n // Write the file\n await writeFile(fullPath, data);\n\n // Write metadata if options are provided\n if (options) {\n await writeMetadata(fullPath, options);\n }\n\n // Create URL\n const fileUrl = `file://${fullPath}`;\n\n return {\n url: fileUrl,\n bucket,\n key: filePath\n };\n },\n\n /**\n * Delete file from local filesystem\n * @param filePath Path to the file to delete\n * @param bucket Bucket (folder) name\n * @returns Promise resolving when delete is complete\n */\n async delete(filePath: string, bucket: string): Promise<void> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n const metadataPath = `${fullPath}.metadata.json`;\n\n try {\n await unlink(fullPath);\n\n // Try to delete metadata file if it exists\n try {\n await unlink(metadataPath);\n } catch (error) {\n // Ignore error if metadata file doesn't exist\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n logger.warn('Error deleting metadata file:', { error });\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`File not found: ${filePath} in bucket ${bucket}`);\n }\n throw error;\n }\n }\n };\n}","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport {\n LocationService,\n LocationAddress,\n LocationSuggestion,\n SuggestionParams,\n ReverseGeocodeParams,\n Coordinates,\n RouteResult,\n RoutePoint\n} from \"@cloudnux/core-cloud-provider\";\nimport { env, logger } from \"@cloudnux/utils\";\n\n// Use fs.promises for async file operations\nconst { readFile, writeFile, access, mkdir } = fs.promises;\n\n/**\n * Internal structure for storing location data\n */\ninterface StoredLocation {\n placeId: string;\n title: string;\n subtitle?: string;\n coordinates: Coordinates;\n\n // Address components\n street?: string;\n streetNumber?: string;\n city?: string;\n district?: string;\n region?: string;\n postalCode?: string;\n country?: string;\n countryCode?: string;\n\n // Full address\n fullAddress: string;\n\n // Metadata\n placeType?: string;\n categories?: string[];\n}\n\n/**\n * Mock location data for testing - Central Stockholm locations\n */\nconst DEFAULT_MOCK_LOCATIONS: Record<string, StoredLocation> = {\n 'place-001': {\n placeId: 'place-001',\n title: 'Gamla Stan',\n subtitle: 'Old Town, Stockholm',\n coordinates: {\n lat: 59.3254,\n lng: 18.0716\n },\n street: 'Gamla Stan',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 27',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Gamla Stan, 111 27 Stockholm, Sweden',\n placeType: 'locality',\n categories: ['historical', 'tourist_attraction', 'landmark']\n },\n 'place-002': {\n placeId: 'place-002',\n title: 'Kungliga Slottet',\n subtitle: 'Royal Palace of Stockholm',\n coordinates: {\n lat: 59.3268,\n lng: 18.0718\n },\n street: 'Slottsbacken',\n streetNumber: '1',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 30',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Slottsbacken 1, 111 30 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['tourist_attraction', 'landmark', 'palace']\n },\n 'place-003': {\n placeId: 'place-003',\n title: 'Espresso House Kungsträdgården',\n subtitle: 'Coffee shop in central Stockholm',\n coordinates: {\n lat: 59.3311,\n lng: 18.0720\n },\n street: 'Kungsträdgården',\n streetNumber: '18',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 47',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Kungsträdgården 18, 111 47 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['cafe', 'coffee_shop', 'food']\n },\n 'place-004': {\n placeId: 'place-004',\n title: 'ICA Nära Stureplan',\n subtitle: 'Grocery store',\n coordinates: {\n lat: 59.3372,\n lng: 18.0737\n },\n street: 'Humlegårdsgatan',\n streetNumber: '17',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '114 46',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Humlegårdsgatan 17, 114 46 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['grocery', 'supermarket', 'food']\n },\n 'place-005': {\n placeId: 'place-005',\n title: 'Stockholm Central Station',\n subtitle: 'Main railway station',\n coordinates: {\n lat: 59.3303,\n lng: 18.0604\n },\n street: 'Centralplan',\n streetNumber: '15',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 20',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Centralplan 15, 111 20 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['train_station', 'transport', 'travel']\n },\n 'place-006': {\n placeId: 'place-006',\n title: 'Fotografiska',\n subtitle: 'Photography museum',\n coordinates: {\n lat: 59.3188,\n lng: 18.0860\n },\n street: 'Stadsgårdshamnen',\n streetNumber: '22',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '116 45',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Stadsgårdshamnen 22, 116 45 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'art', 'photography', 'cultural']\n },\n 'place-007': {\n placeId: 'place-007',\n title: 'IKEA City',\n subtitle: 'Furniture store in central Stockholm',\n coordinates: {\n lat: 59.3378,\n lng: 18.0597\n },\n street: 'Sveavägen',\n streetNumber: '44',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 34',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Sveavägen 44, 111 34 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['furniture', 'shopping', 'home_goods']\n },\n 'place-008': {\n placeId: 'place-008',\n title: 'Skansen',\n subtitle: 'Open-air museum and zoo',\n coordinates: {\n lat: 59.3263,\n lng: 18.1066\n },\n street: 'Djurgårdsslätten',\n streetNumber: '49-51',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '115 21',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Djurgårdsslätten 49-51, 115 21 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'park', 'tourist_attraction', 'zoo']\n },\n 'place-009': {\n placeId: 'place-009',\n title: 'Drop Coffee',\n subtitle: 'Specialty coffee roastery',\n coordinates: {\n lat: 59.3149,\n lng: 18.0608\n },\n street: 'Wollmar Yxkullsgatan',\n streetNumber: '10',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '118 50',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Wollmar Yxkullsgatan 10, 118 50 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['cafe', 'coffee_shop', 'food']\n },\n 'place-010': {\n placeId: 'place-010',\n title: 'Vasa Museum',\n subtitle: 'Maritime museum',\n coordinates: {\n lat: 59.3280,\n lng: 18.0914\n },\n street: 'Galärvarvsvägen',\n streetNumber: '14',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '115 21',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Galärvarvsvägen 14, 115 21 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'tourist_attraction', 'historical']\n }\n};\n\n/**\n * Calculate distance between two coordinates in meters using Haversine formula\n * @param lat1 Latitude of first point\n * @param lon1 Longitude of first point\n * @param lat2 Latitude of second point\n * @param lon2 Longitude of second point\n * @returns Distance in meters\n */\nfunction calculateDistance(lat1: number, lon1: number, lat2: number, lon2: number): number {\n const R = 6371000; // Radius of the Earth in meters\n const dLat = (lat2 - lat1) * Math.PI / 180;\n const dLon = (lon2 - lon1) * Math.PI / 180;\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n const distance = R * c; // Distance in meters\n return distance;\n}\n\n/**\n * Convert stored location to LocationSuggestion\n */\nfunction toLocationSuggestion(location: StoredLocation, distance?: number): LocationSuggestion {\n return {\n title: location.title,\n subtitle: location.subtitle,\n coordinates: location.coordinates,\n placeId: location.placeId,\n placeType: location.placeType,\n distance,\n provider: 'local',\n rawData: location\n };\n}\n\n/**\n * Convert stored location to LocationAddress\n */\nfunction toLocationAddress(location: StoredLocation): LocationAddress {\n return {\n fullAddress: location.fullAddress,\n street: location.street,\n streetNumber: location.streetNumber,\n city: location.city,\n district: location.district,\n region: location.region,\n postalCode: location.postalCode,\n country: location.country,\n countryCode: location.countryCode,\n coordinates: location.coordinates,\n placeType: location.placeType,\n provider: 'local',\n rawData: location\n };\n}\n\n/**\n * Create a local mock location service\n * @returns Local mock location service implementation\n */\nexport function createLocalLocationService(): LocationService {\n // Get base directory from environment variables or use default\n const baseDir = env(\"DEV_CLOUD_LOCATION_PATH\", path.join(process.cwd(), '.develop', '.local-location'))!;\n const placesFilePath = path.join(baseDir, 'places.json');\n\n /**\n * Load places data from file or use default mock data\n * @returns Places data\n */\n async function loadPlaces(): Promise<Record<string, StoredLocation>> {\n try {\n // Create directory if it doesn't exist\n try {\n await access(baseDir);\n } catch {\n await mkdir(baseDir, { recursive: true });\n }\n\n // Try to load from file\n try {\n await access(placesFilePath);\n const data = await readFile(placesFilePath, 'utf8');\n return JSON.parse(data);\n } catch {\n // File doesn't exist, create it with default data\n await writeFile(placesFilePath, JSON.stringify(DEFAULT_MOCK_LOCATIONS, null, 2), 'utf8');\n logger.info(`Created default places file at: ${placesFilePath}`);\n return DEFAULT_MOCK_LOCATIONS;\n }\n } catch (error) {\n logger.warn(`Error loading places data: ${String(error)}`);\n return DEFAULT_MOCK_LOCATIONS;\n }\n }\n\n return {\n /**\n * Get autocomplete suggestions for search box\n * Use case: User types \"Stock...\" → Show [\"Stockholm\", \"Stockton\", ...]\n */\n async getSuggestions(params: SuggestionParams): Promise<LocationSuggestion[]> {\n const places = await loadPlaces();\n const queryLower = params.query.toLowerCase();\n\n // Filter places by query\n const results = Object.values(places).filter(place => {\n // Match by title, subtitle, or address\n const matchesQuery =\n place.title.toLowerCase().includes(queryLower) ||\n (place.subtitle?.toLowerCase().includes(queryLower)) ||\n place.fullAddress.toLowerCase().includes(queryLower) ||\n (place.city?.toLowerCase().includes(queryLower));\n\n // Match by place types if provided\n const matchesPlaceTypes = !params.placeTypes ||\n params.placeTypes.includes(place.placeType || '');\n\n return matchesQuery && matchesPlaceTypes;\n });\n\n // Calculate distances if bias position is provided\n let resultsWithDistance: Array<{ place: StoredLocation; distance?: number }>;\n\n if (params.biasPosition) {\n resultsWithDistance = results.map(place => ({\n place,\n distance: calculateDistance(\n params.biasPosition!.lat,\n params.biasPosition!.lng,\n place.coordinates.lat,\n place.coordinates.lng\n )\n }));\n\n // Sort by distance\n resultsWithDistance.sort((a, b) => (a.distance || 0) - (b.distance || 0));\n } else {\n // Sort by relevance (simple alphabetical for now)\n results.sort((a, b) => a.title.localeCompare(b.title));\n resultsWithDistance = results.map(place => ({ place }));\n }\n\n // Limit results\n const maxResults = params.maxResults || 5;\n const limitedResults = resultsWithDistance.slice(0, maxResults);\n\n // Convert to LocationSuggestion\n return limitedResults.map(({ place, distance }) =>\n toLocationSuggestion(place, distance)\n );\n },\n\n /**\n * Get address from coordinates (reverse geocoding)\n * Use case: User clicks \"Get my location\" → Show \"Drottninggatan 10, Stockholm\"\n */\n async reverseGeocode(params: ReverseGeocodeParams): Promise<LocationAddress> {\n const places = await loadPlaces();\n\n // Find the closest place to the given coordinates\n const placesWithDistance = Object.values(places).map(place => ({\n place,\n distance: calculateDistance(\n params.coordinates.lat,\n params.coordinates.lng,\n place.coordinates.lat,\n place.coordinates.lng\n )\n }));\n\n // Sort by distance and get the closest\n placesWithDistance.sort((a, b) => a.distance - b.distance);\n\n const closest = placesWithDistance[0];\n\n if (!closest) {\n throw new Error('No places found near the given coordinates');\n }\n\n return toLocationAddress(closest.place);\n },\n\n /**\n * Get detailed location info if suggestion doesn't have coordinates\n * Use case: User selects suggestion → Need full coordinates\n */\n async getLocationDetails(placeId: string): Promise<LocationAddress> {\n const places = await loadPlaces();\n const place = places[placeId];\n\n if (!place) {\n throw new Error(`Place not found: ${placeId}`);\n }\n\n return toLocationAddress(place);\n },\n\n /**\n * Calculate route between origin and destination with optional waypoints\n * Use case: User plans trip → Show route on map + details\n */\n async calculateRoute(\n origin: Coordinates,\n destination: Coordinates,\n waypoints?: Coordinates[]\n // avoidTolls parameter not used in mock implementation\n ): Promise<RouteResult> {\n // Build array of all points: origin -> waypoints -> destination\n const allPoints: Coordinates[] = [origin, ...(waypoints || []), destination];\n\n // Calculate total distance and generate route coordinates\n let totalDistanceKm = 0;\n const allCoordinates: Coordinates[] = [];\n const legs: RouteResult['legs'] = [];\n\n for (let i = 0; i < allPoints.length - 1; i++) {\n const start = allPoints[i];\n const end = allPoints[i + 1];\n\n // Calculate distance for this leg\n const legDistanceMeters = calculateDistance(start.lat, start.lng, end.lat, end.lng);\n const legDistanceKm = legDistanceMeters / 1000;\n totalDistanceKm += legDistanceKm;\n\n // Generate intermediate points for smoother route visualization\n const legCoordinates: Coordinates[] = [];\n const numIntermediatePoints = 10;\n\n for (let j = 0; j <= numIntermediatePoints; j++) {\n const fraction = j / numIntermediatePoints;\n legCoordinates.push({\n lat: start.lat + (end.lat - start.lat) * fraction,\n lng: start.lng + (end.lng - start.lng) * fraction\n });\n }\n\n // Estimate duration: average speed of 50 km/h\n const legDurationMinutes = (legDistanceKm / 50) * 60;\n\n legs.push({\n distanceKm: legDistanceKm,\n durationMinutes: legDurationMinutes,\n coordinates: legCoordinates,\n startPosition: start,\n endPosition: end\n });\n\n // Add leg coordinates to all coordinates (skip first point of subsequent legs to avoid duplicates)\n if (i === 0) {\n allCoordinates.push(...legCoordinates);\n } else {\n allCoordinates.push(...legCoordinates.slice(1));\n }\n }\n\n // Calculate total duration based on total distance\n const totalDurationMinutes = (totalDistanceKm / 50) * 60;\n\n // Sample points along the route for corridor search\n const sampledPoints: RoutePoint[] = [];\n const sampleInterval = Math.max(1, Math.floor(allCoordinates.length / 20)); // ~20 samples\n let accumulatedDistance = 0;\n\n for (let i = 0; i < allCoordinates.length; i += sampleInterval) {\n if (i > 0) {\n const prev = allCoordinates[i - sampleInterval] || allCoordinates[i - 1];\n const curr = allCoordinates[i];\n accumulatedDistance += calculateDistance(prev.lat, prev.lng, curr.lat, curr.lng) / 1000;\n }\n\n sampledPoints.push({\n lat: allCoordinates[i].lat,\n lng: allCoordinates[i].lng,\n distanceFromStartKm: accumulatedDistance\n });\n }\n\n // Calculate bounding box\n const lats = allCoordinates.map(c => c.lat);\n const lngs = allCoordinates.map(c => c.lng);\n const bbox: [number, number, number, number] = [\n Math.min(...lngs), // minLng\n Math.min(...lats), // minLat\n Math.max(...lngs), // maxLng\n Math.max(...lats) // maxLat\n ];\n\n logger.info(`Calculated route: ${totalDistanceKm.toFixed(2)}km, ${totalDurationMinutes.toFixed(0)}min, ${legs.length} legs`);\n\n return {\n totalDistanceKm,\n totalDurationMinutes,\n coordinates: allCoordinates,\n sampledPoints,\n bbox,\n legs\n };\n }\n };\n}\n","import * as querystring from \"querystring\"\n\nimport \"fastify-raw-body\";\nimport { FastifyRequest, FastifyReply } from \"fastify\";\n\nimport { env, tokenUtils } from \"@cloudnux/utils\";\nimport { EventFunctionContext, EventRequest, FunctionsService, HTTPAuth, HttpFunctionContext, HttpMethod, HTTPRequest, ScheduleFunctionContext, ScheduleRequest, WebSocketFunctionContext, WebSocketRequest } from \"@cloudnux/core-cloud-provider\";\n\nimport { QueueMessage } from \"../queue-plugin/types\";\nimport { ScheduledJob, JobExecution } from \"../schedule-plugin/types\";\nimport { WebSocketEvent } from \"../websocket-plugin/types\";\n\n\nconst getFullUrlFromRequest = (request: FastifyRequest) => {\n // Get protocol (http/https)\n const protocol = request.protocol;\n\n // Get hostname\n const hostname = request.hostname;\n\n // Get port (may be undefined if using standard ports 80/443)\n const port = request.raw.socket.localPort;\n\n // Build the host part with port if non-standard\n let hostWithPort = hostname;\n if (port &&\n !((protocol === 'http' && port === 80) ||\n (protocol === 'https' && port === 443))) {\n hostWithPort = `${hostname}:${port}`;\n }\n\n // Get the path including query parameters\n const url = request.url;\n\n // Construct the full URL\n return `${protocol}://${hostWithPort}${url}`;\n\n}\n\nexport function createLocalFunctionsService(): FunctionsService {\n return {\n createHttRequest(request: FastifyRequest) {\n const rawBody = request.rawBody;\n const isAuth = env(\"DEV_IDENTITY\")\n\n const index = request.raw.rawHeaders ? request.raw.rawHeaders?.indexOf('Authorization') : -1;\n const authorization = index !== -1 ? request.raw.rawHeaders[index + 1] : null;\n\n // Remove \"bearer\" prefix and trim whitespace\n const token = authorization ? authorization.replace(/^bearer\\s+/i, '') : null;\n const httpRequest: HTTPRequest = {\n body: String(rawBody),\n headers: request.headers,\n method: request.method as HttpMethod,\n url: getFullUrlFromRequest(request),\n matchingKey: request.routeOptions.url,\n params: request.params as Record<string, string>,\n rawQueryString: querystring.stringify(request.query as any),\n host: request.hostname,\n requestId: request.id,\n };\n\n const jwtClaims = token && tokenUtils.decodeAccessToken(token) as Record<string, string>;\n const httpAuth: HTTPAuth | undefined = isAuth ? {\n appId: env(\"DEV_APP_ID\"),\n memberId: env(\"DEV_MEMBER_ID\"),\n customerId: env(\"DEV_CUSTOMER_ID\"),\n identity: env(\"DEV_IDENTITY\") as HTTPAuth[\"identity\"],\n token: token ?? \"\",\n claims: {\n app_id: env(\"DEV_APP_ID\"),\n member_id: env(\"DEV_MEMBER_ID\"),\n customer_id: env(\"DEV_CUSTOMER_ID\"),\n identity: env(\"DEV_IDENTITY\", \"facebook\" as const)\n }\n } : jwtClaims ? {\n token: token,\n claims: jwtClaims,\n appId: jwtClaims.app_id,\n memberId: jwtClaims.member_id,\n customerId: jwtClaims.customer_id,\n identity: jwtClaims.identity as HTTPAuth[\"identity\"]\n } : undefined;\n\n return [httpRequest, httpAuth];\n },\n createScheduleRequest: (job: ScheduledJob, execution: JobExecution) => {\n const scheduleName = job.name\n const scheduleRequest: ScheduleRequest = {\n name: scheduleName,\n requestId: execution.id\n }\n return [scheduleRequest]\n },\n createEventRequest: (message: QueueMessage) => {\n\n const eventRequest: EventRequest = {\n body: message.payload,\n attributes: message.attributes,\n requestId: message.id,\n timestamp: message.timestamp,\n attempts: message.attempts\n }\n return [eventRequest];\n },\n\n buildHttpResponse: (context: HttpFunctionContext, _: FastifyRequest, reply: FastifyReply) => {\n reply\n .headers(context.response.headers ?? {})\n .status(context.response.status)\n .send(context.response.body);\n },\n buildScheduleResponse: (context: ScheduleFunctionContext) => {\n if (context.response.status === \"error\") {\n throw new Error(JSON.stringify(context.response.body));\n }\n return context.response.body;\n },\n buildEventResponse: (context: EventFunctionContext) => {\n if (context.response.status === \"error\") {\n throw new Error(JSON.stringify(context.response.body));\n }\n return context.response.body;\n },\n\n createWebSocketRequest: (connectionId: string, event: WebSocketEvent, data?: any) => {\n const wsRequest: WebSocketRequest = {\n connectionId,\n event,\n path: \"\",\n body: data,\n };\n return [wsRequest];\n },\n buildWebSocketResponse: (context: WebSocketFunctionContext) => {\n if (context.response.status === \"error\") {\n throw new Error(JSON.stringify(context.response.body));\n }\n return context.response.body;\n }\n }\n\n}","import { WebSocketService } from \"@cloudnux/core-cloud-provider\";\nimport { WebSocketManager } from \"../websocket-plugin/types\";\n\nlet _manager: WebSocketManager | null = null;\n\nexport function setWebSocketManager(manager: WebSocketManager) {\n _manager = manager;\n}\n\nexport function createLocalWebSocketService(): WebSocketService {\n return {\n async sendToClient(connectionId: string, data: any): Promise<void> {\n if (!_manager) {\n throw new Error(\"WebSocket plugin not initialized\");\n }\n return _manager.sendToClient(connectionId, data);\n }\n };\n}\n","import Fastify, { FastifyInstance } from \"fastify\";\nimport fastifyRawBody from \"fastify-raw-body\";\nimport cors from '@fastify/cors';\nimport fastifyPrintRoutes from 'fastify-print-routes';\n\nimport { setWebSocketManager } from \"../services/websocket\";\n\nexport type RouterInstance = FastifyInstance\n\n// Create a reusable router function\nexport function createRouter(options: { logger?: boolean } = {}): RouterInstance {\n const fastify = Fastify({\n maxParamLength: 1000,\n logger: options.logger ? {\n transport: {\n target: 'pino-pretty',\n options: {\n colorize: true,\n translateTime: 'HH:MM:ss Z',\n ignore: 'pid,hostname',\n },\n }\n } : undefined\n });\n\n fastify.register(fastifyRawBody, {\n field: 'rawBody',\n encoding: 'utf8',\n });\n\n //TODO: get config from the nux.config\n fastify.register(cors, {});\n\n fastify.register(fastifyPrintRoutes);\n\n fastify.addHook('onReady', () => {\n setWebSocketManager(fastify.websockets);\n });\n\n return fastify;\n}\n","import { CloudProvider } from \"@cloudnux/core-cloud-provider\";\n\nimport { createLocalEventBrokerService } from \"./services/event-broker\";\nimport { createLocalStorageService } from \"./services/storage\";\nimport { createLocalLocationService } from \"./services/locations\";\nimport { createLocalFunctionsService } from \"./services/functions\";\nimport { createLocalWebSocketService } from \"./services/websocket\";\n\nexport const localCloudProvider: CloudProvider = {\n name: \"local-cloud-provider\",\n\n createStorageService: createLocalStorageService,\n createLocationService: createLocalLocationService,\n createEventBrokerService: createLocalEventBrokerService,\n createFunctionsService: createLocalFunctionsService,\n createWebSocketService: createLocalWebSocketService\n};\n\nexport * from \"./router\";"],"mappings":"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","names":["objectProto","nativeObjectToString","symToStringTag","array","funcProto","objectProto","funcToString","hasOwnProperty","array","array","array","MAX_SAFE_INTEGER","objectProto","hasOwnProperty","objectProto","hasOwnProperty","objectProto","hasOwnProperty","HASH_UNDEFINED","array","INFINITY","array","array","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","path","objectProto","hasOwnProperty","path","fs","path","readFile","writeFile","access","mkdir"]}
|
|
1
|
+
{"version":3,"sources":["../src/logging/pretty-writer.ts","../../../../node_modules/lodash-es/_freeGlobal.js","../../../../node_modules/lodash-es/_root.js","../../../../node_modules/lodash-es/_Symbol.js","../../../../node_modules/lodash-es/_getRawTag.js","../../../../node_modules/lodash-es/_objectToString.js","../../../../node_modules/lodash-es/_baseGetTag.js","../../../../node_modules/lodash-es/isObjectLike.js","../../../../node_modules/lodash-es/isSymbol.js","../../../../node_modules/lodash-es/_arrayMap.js","../../../../node_modules/lodash-es/isArray.js","../../../../node_modules/lodash-es/_baseToString.js","../../../../node_modules/lodash-es/_trimmedEndIndex.js","../../../../node_modules/lodash-es/_baseTrim.js","../../../../node_modules/lodash-es/isObject.js","../../../../node_modules/lodash-es/isFunction.js","../../../../node_modules/lodash-es/_coreJsData.js","../../../../node_modules/lodash-es/_isMasked.js","../../../../node_modules/lodash-es/_toSource.js","../../../../node_modules/lodash-es/_baseIsNative.js","../../../../node_modules/lodash-es/_getValue.js","../../../../node_modules/lodash-es/_getNative.js","../../../../node_modules/lodash-es/_baseFindIndex.js","../../../../node_modules/lodash-es/_baseIsNaN.js","../../../../node_modules/lodash-es/_strictIndexOf.js","../../../../node_modules/lodash-es/_baseIndexOf.js","../../../../node_modules/lodash-es/_isIndex.js","../../../../node_modules/lodash-es/eq.js","../../../../node_modules/lodash-es/isLength.js","../../../../node_modules/lodash-es/_baseIsArguments.js","../../../../node_modules/lodash-es/isArguments.js","../../../../node_modules/lodash-es/_isKey.js","../../../../node_modules/lodash-es/_nativeCreate.js","../../../../node_modules/lodash-es/_hashClear.js","../../../../node_modules/lodash-es/_hashDelete.js","../../../../node_modules/lodash-es/_hashGet.js","../../../../node_modules/lodash-es/_hashHas.js","../../../../node_modules/lodash-es/_hashSet.js","../../../../node_modules/lodash-es/_Hash.js","../../../../node_modules/lodash-es/_listCacheClear.js","../../../../node_modules/lodash-es/_assocIndexOf.js","../../../../node_modules/lodash-es/_listCacheDelete.js","../../../../node_modules/lodash-es/_listCacheGet.js","../../../../node_modules/lodash-es/_listCacheHas.js","../../../../node_modules/lodash-es/_listCacheSet.js","../../../../node_modules/lodash-es/_ListCache.js","../../../../node_modules/lodash-es/_Map.js","../../../../node_modules/lodash-es/_mapCacheClear.js","../../../../node_modules/lodash-es/_isKeyable.js","../../../../node_modules/lodash-es/_getMapData.js","../../../../node_modules/lodash-es/_mapCacheDelete.js","../../../../node_modules/lodash-es/_mapCacheGet.js","../../../../node_modules/lodash-es/_mapCacheHas.js","../../../../node_modules/lodash-es/_mapCacheSet.js","../../../../node_modules/lodash-es/_MapCache.js","../../../../node_modules/lodash-es/memoize.js","../../../../node_modules/lodash-es/_memoizeCapped.js","../../../../node_modules/lodash-es/_stringToPath.js","../../../../node_modules/lodash-es/toString.js","../../../../node_modules/lodash-es/_castPath.js","../../../../node_modules/lodash-es/_toKey.js","../../../../node_modules/lodash-es/_baseSlice.js","../../../../node_modules/lodash-es/_castSlice.js","../../../../node_modules/lodash-es/_hasUnicode.js","../../../../node_modules/lodash-es/_asciiToArray.js","../../../../node_modules/lodash-es/_unicodeToArray.js","../../../../node_modules/lodash-es/_stringToArray.js","../../../../node_modules/lodash-es/_hasPath.js","../../../../node_modules/lodash-es/_baseHas.js","../../../../node_modules/lodash-es/has.js","../../../../node_modules/lodash-es/_charsEndIndex.js","../../../../node_modules/lodash-es/_charsStartIndex.js","../../../../node_modules/lodash-es/trim.js","../../../utils/src/config/env.ts","../../../utils/src/auth/token.ts","../../../utils/src/logging/types.ts","../../../utils/src/logging/error-to-string.ts","../../../utils/src/logging/writer.ts","../../../utils/src/logging/index.ts","../src/services/event-broker.ts","../src/services/storage.ts","../src/services/locations.ts","../src/services/functions.ts","../src/services/websocket.ts","../src/router/index.ts","../src/index.ts"],"sourcesContent":["import chalk from \"chalk\";\nimport { EOL } from \"os\";\nimport { setWriter } from \"@cloudnux/utils\";\nimport type { LogWriter, LogEntry } from \"@cloudnux/utils\";\n\nconst levelColor: Record<string, (s: string) => string> = {\n fatal: chalk.bgRed.white,\n error: chalk.red,\n warn: chalk.yellow,\n info: chalk.cyan,\n debug: chalk.gray,\n trace: chalk.white,\n};\n\nfunction formatTime(ms: number): string {\n return new Date(ms).toTimeString().slice(0, 8);\n}\n\nfunction formatMeta(meta: Record<string, unknown>): string {\n const { req, res, ...rest } = meta as any;\n const lines: string[] = [];\n\n if (req) {\n const reqParts = [`${req.method} ${req.url}`];\n if (req.remoteAddress) reqParts.push(`from ${req.remoteAddress}:${req.remotePort ?? \"\"}`);\n if (req.headers) reqParts.push(`headers=${JSON.stringify(req.headers, null, 2)}`);\n if (req.body !== undefined) reqParts.push(`body=${typeof req.body === \"string\" ? req.body : JSON.stringify(req.body, null, 2)}`);\n lines.push(chalk.dim(\" req: \" + reqParts.join(\" \")));\n }\n if (res) {\n const resParts = [`${res.statusCode}`];\n if (res.headers) resParts.push(`headers=${JSON.stringify(res.headers, null, 2)}`);\n if (res.body !== undefined) resParts.push(`body=${typeof res.body === \"string\" ? res.body : JSON.stringify(res.body, null, 2)}`);\n lines.push(chalk.dim(\" res: \" + resParts.join(\" \")));\n }\n if (Object.keys(rest).length) {\n lines.push(chalk.dim(\" \" + JSON.stringify(rest, null, 2)));\n }\n\n return lines.length ? EOL + lines.join(EOL) : \"\";\n}\n\nconst prettyWriter: LogWriter = (entry: LogEntry) => {\n const color = levelColor[entry.levelName] ?? chalk.white;\n const time = chalk.dim(formatTime(entry.time));\n const level = color(entry.levelName.toUpperCase().padEnd(5));\n const module = chalk.magenta(entry.module);\n const reqId = entry.reqId ? chalk.dim(`[${entry.reqId}]`) + \" \" : \"\";\n const meta = entry.meta ? formatMeta(entry.meta) : \"\";\n\n process.stdout.write(`${time} ${level} ${module} ${reqId}- ${entry.msg}${meta}${EOL}`);\n};\n\nsetWriter(prettyWriter);\n","/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\n\nexport default freeGlobal;\n","import freeGlobal from './_freeGlobal.js';\n\n/** Detect free variable `self`. */\nvar freeSelf = typeof self == 'object' && self && self.Object === Object && self;\n\n/** Used as a reference to the global object. */\nvar root = freeGlobal || freeSelf || Function('return this')();\n\nexport default root;\n","import root from './_root.js';\n\n/** Built-in value references. */\nvar Symbol = root.Symbol;\n\nexport default Symbol;\n","import Symbol from './_Symbol.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * A specialized version of `baseGetTag` which ignores `Symbol.toStringTag` values.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the raw `toStringTag`.\n */\nfunction getRawTag(value) {\n var isOwn = hasOwnProperty.call(value, symToStringTag),\n tag = value[symToStringTag];\n\n try {\n value[symToStringTag] = undefined;\n var unmasked = true;\n } catch (e) {}\n\n var result = nativeObjectToString.call(value);\n if (unmasked) {\n if (isOwn) {\n value[symToStringTag] = tag;\n } else {\n delete value[symToStringTag];\n }\n }\n return result;\n}\n\nexport default getRawTag;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar nativeObjectToString = objectProto.toString;\n\n/**\n * Converts `value` to a string using `Object.prototype.toString`.\n *\n * @private\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n */\nfunction objectToString(value) {\n return nativeObjectToString.call(value);\n}\n\nexport default objectToString;\n","import Symbol from './_Symbol.js';\nimport getRawTag from './_getRawTag.js';\nimport objectToString from './_objectToString.js';\n\n/** `Object#toString` result references. */\nvar nullTag = '[object Null]',\n undefinedTag = '[object Undefined]';\n\n/** Built-in value references. */\nvar symToStringTag = Symbol ? Symbol.toStringTag : undefined;\n\n/**\n * The base implementation of `getTag` without fallbacks for buggy environments.\n *\n * @private\n * @param {*} value The value to query.\n * @returns {string} Returns the `toStringTag`.\n */\nfunction baseGetTag(value) {\n if (value == null) {\n return value === undefined ? undefinedTag : nullTag;\n }\n return (symToStringTag && symToStringTag in Object(value))\n ? getRawTag(value)\n : objectToString(value);\n}\n\nexport default baseGetTag;\n","/**\n * Checks if `value` is object-like. A value is object-like if it's not `null`\n * and has a `typeof` result of \"object\".\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is object-like, else `false`.\n * @example\n *\n * _.isObjectLike({});\n * // => true\n *\n * _.isObjectLike([1, 2, 3]);\n * // => true\n *\n * _.isObjectLike(_.noop);\n * // => false\n *\n * _.isObjectLike(null);\n * // => false\n */\nfunction isObjectLike(value) {\n return value != null && typeof value == 'object';\n}\n\nexport default isObjectLike;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar symbolTag = '[object Symbol]';\n\n/**\n * Checks if `value` is classified as a `Symbol` primitive or object.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.\n * @example\n *\n * _.isSymbol(Symbol.iterator);\n * // => true\n *\n * _.isSymbol('abc');\n * // => false\n */\nfunction isSymbol(value) {\n return typeof value == 'symbol' ||\n (isObjectLike(value) && baseGetTag(value) == symbolTag);\n}\n\nexport default isSymbol;\n","/**\n * A specialized version of `_.map` for arrays without support for iteratee\n * shorthands.\n *\n * @private\n * @param {Array} [array] The array to iterate over.\n * @param {Function} iteratee The function invoked per iteration.\n * @returns {Array} Returns the new mapped array.\n */\nfunction arrayMap(array, iteratee) {\n var index = -1,\n length = array == null ? 0 : array.length,\n result = Array(length);\n\n while (++index < length) {\n result[index] = iteratee(array[index], index, array);\n }\n return result;\n}\n\nexport default arrayMap;\n","/**\n * Checks if `value` is classified as an `Array` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an array, else `false`.\n * @example\n *\n * _.isArray([1, 2, 3]);\n * // => true\n *\n * _.isArray(document.body.children);\n * // => false\n *\n * _.isArray('abc');\n * // => false\n *\n * _.isArray(_.noop);\n * // => false\n */\nvar isArray = Array.isArray;\n\nexport default isArray;\n","import Symbol from './_Symbol.js';\nimport arrayMap from './_arrayMap.js';\nimport isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** Used to convert symbols to primitives and strings. */\nvar symbolProto = Symbol ? Symbol.prototype : undefined,\n symbolToString = symbolProto ? symbolProto.toString : undefined;\n\n/**\n * The base implementation of `_.toString` which doesn't convert nullish\n * values to empty strings.\n *\n * @private\n * @param {*} value The value to process.\n * @returns {string} Returns the string.\n */\nfunction baseToString(value) {\n // Exit early for strings to avoid a performance hit in some environments.\n if (typeof value == 'string') {\n return value;\n }\n if (isArray(value)) {\n // Recursively convert values (susceptible to call stack limits).\n return arrayMap(value, baseToString) + '';\n }\n if (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default baseToString;\n","/** Used to match a single whitespace character. */\nvar reWhitespace = /\\s/;\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace\n * character of `string`.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {number} Returns the index of the last non-whitespace character.\n */\nfunction trimmedEndIndex(string) {\n var index = string.length;\n\n while (index-- && reWhitespace.test(string.charAt(index))) {}\n return index;\n}\n\nexport default trimmedEndIndex;\n","import trimmedEndIndex from './_trimmedEndIndex.js';\n\n/** Used to match leading whitespace. */\nvar reTrimStart = /^\\s+/;\n\n/**\n * The base implementation of `_.trim`.\n *\n * @private\n * @param {string} string The string to trim.\n * @returns {string} Returns the trimmed string.\n */\nfunction baseTrim(string) {\n return string\n ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '')\n : string;\n}\n\nexport default baseTrim;\n","/**\n * Checks if `value` is the\n * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)\n * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an object, else `false`.\n * @example\n *\n * _.isObject({});\n * // => true\n *\n * _.isObject([1, 2, 3]);\n * // => true\n *\n * _.isObject(_.noop);\n * // => true\n *\n * _.isObject(null);\n * // => false\n */\nfunction isObject(value) {\n var type = typeof value;\n return value != null && (type == 'object' || type == 'function');\n}\n\nexport default isObject;\n","import baseGetTag from './_baseGetTag.js';\nimport isObject from './isObject.js';\n\n/** `Object#toString` result references. */\nvar asyncTag = '[object AsyncFunction]',\n funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n proxyTag = '[object Proxy]';\n\n/**\n * Checks if `value` is classified as a `Function` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a function, else `false`.\n * @example\n *\n * _.isFunction(_);\n * // => true\n *\n * _.isFunction(/abc/);\n * // => false\n */\nfunction isFunction(value) {\n if (!isObject(value)) {\n return false;\n }\n // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 9 which returns 'object' for typed arrays and other constructors.\n var tag = baseGetTag(value);\n return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag;\n}\n\nexport default isFunction;\n","import root from './_root.js';\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\n\nexport default coreJsData;\n","import coreJsData from './_coreJsData.js';\n\n/** Used to detect methods masquerading as native. */\nvar maskSrcKey = (function() {\n var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');\n return uid ? ('Symbol(src)_1.' + uid) : '';\n}());\n\n/**\n * Checks if `func` has its source masked.\n *\n * @private\n * @param {Function} func The function to check.\n * @returns {boolean} Returns `true` if `func` is masked, else `false`.\n */\nfunction isMasked(func) {\n return !!maskSrcKey && (maskSrcKey in func);\n}\n\nexport default isMasked;\n","/** Used for built-in method references. */\nvar funcProto = Function.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to convert.\n * @returns {string} Returns the source code.\n */\nfunction toSource(func) {\n if (func != null) {\n try {\n return funcToString.call(func);\n } catch (e) {}\n try {\n return (func + '');\n } catch (e) {}\n }\n return '';\n}\n\nexport default toSource;\n","import isFunction from './isFunction.js';\nimport isMasked from './_isMasked.js';\nimport isObject from './isObject.js';\nimport toSource from './_toSource.js';\n\n/**\n * Used to match `RegExp`\n * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).\n */\nvar reRegExpChar = /[\\\\^$.*+?()[\\]{}|]/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used for built-in method references. */\nvar funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to resolve the decompiled source of functions. */\nvar funcToString = funcProto.toString;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Used to detect if a method is native. */\nvar reIsNative = RegExp('^' +\n funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\\\$&')\n .replace(/hasOwnProperty|(function).*?(?=\\\\\\()| for .+?(?=\\\\\\])/g, '$1.*?') + '$'\n);\n\n/**\n * The base implementation of `_.isNative` without bad shim checks.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a native function,\n * else `false`.\n */\nfunction baseIsNative(value) {\n if (!isObject(value) || isMasked(value)) {\n return false;\n }\n var pattern = isFunction(value) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\nexport default baseIsNative;\n","/**\n * Gets the value at `key` of `object`.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {string} key The key of the property to get.\n * @returns {*} Returns the property value.\n */\nfunction getValue(object, key) {\n return object == null ? undefined : object[key];\n}\n\nexport default getValue;\n","import baseIsNative from './_baseIsNative.js';\nimport getValue from './_getValue.js';\n\n/**\n * Gets the native function at `key` of `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {string} key The key of the method to get.\n * @returns {*} Returns the function if it's native, else `undefined`.\n */\nfunction getNative(object, key) {\n var value = getValue(object, key);\n return baseIsNative(value) ? value : undefined;\n}\n\nexport default getNative;\n","/**\n * The base implementation of `_.findIndex` and `_.findLastIndex` without\n * support for iteratee shorthands.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {Function} predicate The function invoked per iteration.\n * @param {number} fromIndex The index to search from.\n * @param {boolean} [fromRight] Specify iterating from right to left.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseFindIndex(array, predicate, fromIndex, fromRight) {\n var length = array.length,\n index = fromIndex + (fromRight ? 1 : -1);\n\n while ((fromRight ? index-- : ++index < length)) {\n if (predicate(array[index], index, array)) {\n return index;\n }\n }\n return -1;\n}\n\nexport default baseFindIndex;\n","/**\n * The base implementation of `_.isNaN` without support for number objects.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.\n */\nfunction baseIsNaN(value) {\n return value !== value;\n}\n\nexport default baseIsNaN;\n","/**\n * A specialized version of `_.indexOf` which performs strict equality\n * comparisons of values, i.e. `===`.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction strictIndexOf(array, value, fromIndex) {\n var index = fromIndex - 1,\n length = array.length;\n\n while (++index < length) {\n if (array[index] === value) {\n return index;\n }\n }\n return -1;\n}\n\nexport default strictIndexOf;\n","import baseFindIndex from './_baseFindIndex.js';\nimport baseIsNaN from './_baseIsNaN.js';\nimport strictIndexOf from './_strictIndexOf.js';\n\n/**\n * The base implementation of `_.indexOf` without `fromIndex` bounds checks.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} value The value to search for.\n * @param {number} fromIndex The index to search from.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction baseIndexOf(array, value, fromIndex) {\n return value === value\n ? strictIndexOf(array, value, fromIndex)\n : baseFindIndex(array, baseIsNaN, fromIndex);\n}\n\nexport default baseIndexOf;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/**\n * Checks if `value` is a valid array-like index.\n *\n * @private\n * @param {*} value The value to check.\n * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.\n * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.\n */\nfunction isIndex(value, length) {\n var type = typeof value;\n length = length == null ? MAX_SAFE_INTEGER : length;\n\n return !!length &&\n (type == 'number' ||\n (type != 'symbol' && reIsUint.test(value))) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\n\nexport default isIndex;\n","/**\n * Performs a\n * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * comparison between two values to determine if they are equivalent.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to compare.\n * @param {*} other The other value to compare.\n * @returns {boolean} Returns `true` if the values are equivalent, else `false`.\n * @example\n *\n * var object = { 'a': 1 };\n * var other = { 'a': 1 };\n *\n * _.eq(object, object);\n * // => true\n *\n * _.eq(object, other);\n * // => false\n *\n * _.eq('a', 'a');\n * // => true\n *\n * _.eq('a', Object('a'));\n * // => false\n *\n * _.eq(NaN, NaN);\n * // => true\n */\nfunction eq(value, other) {\n return value === other || (value !== value && other !== other);\n}\n\nexport default eq;\n","/** Used as references for various `Number` constants. */\nvar MAX_SAFE_INTEGER = 9007199254740991;\n\n/**\n * Checks if `value` is a valid array-like length.\n *\n * **Note:** This method is loosely based on\n * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.\n * @example\n *\n * _.isLength(3);\n * // => true\n *\n * _.isLength(Number.MIN_VALUE);\n * // => false\n *\n * _.isLength(Infinity);\n * // => false\n *\n * _.isLength('3');\n * // => false\n */\nfunction isLength(value) {\n return typeof value == 'number' &&\n value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;\n}\n\nexport default isLength;\n","import baseGetTag from './_baseGetTag.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** `Object#toString` result references. */\nvar argsTag = '[object Arguments]';\n\n/**\n * The base implementation of `_.isArguments`.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n */\nfunction baseIsArguments(value) {\n return isObjectLike(value) && baseGetTag(value) == argsTag;\n}\n\nexport default baseIsArguments;\n","import baseIsArguments from './_baseIsArguments.js';\nimport isObjectLike from './isObjectLike.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/** Built-in value references. */\nvar propertyIsEnumerable = objectProto.propertyIsEnumerable;\n\n/**\n * Checks if `value` is likely an `arguments` object.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Lang\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is an `arguments` object,\n * else `false`.\n * @example\n *\n * _.isArguments(function() { return arguments; }());\n * // => true\n *\n * _.isArguments([1, 2, 3]);\n * // => false\n */\nvar isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) {\n return isObjectLike(value) && hasOwnProperty.call(value, 'callee') &&\n !propertyIsEnumerable.call(value, 'callee');\n};\n\nexport default isArguments;\n","import isArray from './isArray.js';\nimport isSymbol from './isSymbol.js';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/;\n\n/**\n * Checks if `value` is a property name and not a property path.\n *\n * @private\n * @param {*} value The value to check.\n * @param {Object} [object] The object to query keys on.\n * @returns {boolean} Returns `true` if `value` is a property name, else `false`.\n */\nfunction isKey(value, object) {\n if (isArray(value)) {\n return false;\n }\n var type = typeof value;\n if (type == 'number' || type == 'symbol' || type == 'boolean' ||\n value == null || isSymbol(value)) {\n return true;\n }\n return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||\n (object != null && value in Object(object));\n}\n\nexport default isKey;\n","import getNative from './_getNative.js';\n\n/* Built-in method references that are verified to be native. */\nvar nativeCreate = getNative(Object, 'create');\n\nexport default nativeCreate;\n","import nativeCreate from './_nativeCreate.js';\n\n/**\n * Removes all key-value entries from the hash.\n *\n * @private\n * @name clear\n * @memberOf Hash\n */\nfunction hashClear() {\n this.__data__ = nativeCreate ? nativeCreate(null) : {};\n this.size = 0;\n}\n\nexport default hashClear;\n","/**\n * Removes `key` and its value from the hash.\n *\n * @private\n * @name delete\n * @memberOf Hash\n * @param {Object} hash The hash to modify.\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction hashDelete(key) {\n var result = this.has(key) && delete this.__data__[key];\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default hashDelete;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Gets the hash value for `key`.\n *\n * @private\n * @name get\n * @memberOf Hash\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction hashGet(key) {\n var data = this.__data__;\n if (nativeCreate) {\n var result = data[key];\n return result === HASH_UNDEFINED ? undefined : result;\n }\n return hasOwnProperty.call(data, key) ? data[key] : undefined;\n}\n\nexport default hashGet;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * Checks if a hash value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf Hash\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction hashHas(key) {\n var data = this.__data__;\n return nativeCreate ? (data[key] !== undefined) : hasOwnProperty.call(data, key);\n}\n\nexport default hashHas;\n","import nativeCreate from './_nativeCreate.js';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/**\n * Sets the hash `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf Hash\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the hash instance.\n */\nfunction hashSet(key, value) {\n var data = this.__data__;\n this.size += this.has(key) ? 0 : 1;\n data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\n}\n\nexport default hashSet;\n","import hashClear from './_hashClear.js';\nimport hashDelete from './_hashDelete.js';\nimport hashGet from './_hashGet.js';\nimport hashHas from './_hashHas.js';\nimport hashSet from './_hashSet.js';\n\n/**\n * Creates a hash object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction Hash(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `Hash`.\nHash.prototype.clear = hashClear;\nHash.prototype['delete'] = hashDelete;\nHash.prototype.get = hashGet;\nHash.prototype.has = hashHas;\nHash.prototype.set = hashSet;\n\nexport default Hash;\n","/**\n * Removes all key-value entries from the list cache.\n *\n * @private\n * @name clear\n * @memberOf ListCache\n */\nfunction listCacheClear() {\n this.__data__ = [];\n this.size = 0;\n}\n\nexport default listCacheClear;\n","import eq from './eq.js';\n\n/**\n * Gets the index at which the `key` is found in `array` of key-value pairs.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {*} key The key to search for.\n * @returns {number} Returns the index of the matched value, else `-1`.\n */\nfunction assocIndexOf(array, key) {\n var length = array.length;\n while (length--) {\n if (eq(array[length][0], key)) {\n return length;\n }\n }\n return -1;\n}\n\nexport default assocIndexOf;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype;\n\n/** Built-in value references. */\nvar splice = arrayProto.splice;\n\n/**\n * Removes `key` and its value from the list cache.\n *\n * @private\n * @name delete\n * @memberOf ListCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction listCacheDelete(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n return false;\n }\n var lastIndex = data.length - 1;\n if (index == lastIndex) {\n data.pop();\n } else {\n splice.call(data, index, 1);\n }\n --this.size;\n return true;\n}\n\nexport default listCacheDelete;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Gets the list cache value for `key`.\n *\n * @private\n * @name get\n * @memberOf ListCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction listCacheGet(key) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n return index < 0 ? undefined : data[index][1];\n}\n\nexport default listCacheGet;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Checks if a list cache value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf ListCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction listCacheHas(key) {\n return assocIndexOf(this.__data__, key) > -1;\n}\n\nexport default listCacheHas;\n","import assocIndexOf from './_assocIndexOf.js';\n\n/**\n * Sets the list cache `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf ListCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the list cache instance.\n */\nfunction listCacheSet(key, value) {\n var data = this.__data__,\n index = assocIndexOf(data, key);\n\n if (index < 0) {\n ++this.size;\n data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\n}\n\nexport default listCacheSet;\n","import listCacheClear from './_listCacheClear.js';\nimport listCacheDelete from './_listCacheDelete.js';\nimport listCacheGet from './_listCacheGet.js';\nimport listCacheHas from './_listCacheHas.js';\nimport listCacheSet from './_listCacheSet.js';\n\n/**\n * Creates an list cache object.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction ListCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `ListCache`.\nListCache.prototype.clear = listCacheClear;\nListCache.prototype['delete'] = listCacheDelete;\nListCache.prototype.get = listCacheGet;\nListCache.prototype.has = listCacheHas;\nListCache.prototype.set = listCacheSet;\n\nexport default ListCache;\n","import getNative from './_getNative.js';\nimport root from './_root.js';\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map');\n\nexport default Map;\n","import Hash from './_Hash.js';\nimport ListCache from './_ListCache.js';\nimport Map from './_Map.js';\n\n/**\n * Removes all key-value entries from the map.\n *\n * @private\n * @name clear\n * @memberOf MapCache\n */\nfunction mapCacheClear() {\n this.size = 0;\n this.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\n\nexport default mapCacheClear;\n","/**\n * Checks if `value` is suitable for use as unique object key.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is suitable, else `false`.\n */\nfunction isKeyable(value) {\n var type = typeof value;\n return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')\n ? (value !== '__proto__')\n : (value === null);\n}\n\nexport default isKeyable;\n","import isKeyable from './_isKeyable.js';\n\n/**\n * Gets the data for `map`.\n *\n * @private\n * @param {Object} map The map to query.\n * @param {string} key The reference key.\n * @returns {*} Returns the map data.\n */\nfunction getMapData(map, key) {\n var data = map.__data__;\n return isKeyable(key)\n ? data[typeof key == 'string' ? 'string' : 'hash']\n : data.map;\n}\n\nexport default getMapData;\n","import getMapData from './_getMapData.js';\n\n/**\n * Removes `key` and its value from the map.\n *\n * @private\n * @name delete\n * @memberOf MapCache\n * @param {string} key The key of the value to remove.\n * @returns {boolean} Returns `true` if the entry was removed, else `false`.\n */\nfunction mapCacheDelete(key) {\n var result = getMapData(this, key)['delete'](key);\n this.size -= result ? 1 : 0;\n return result;\n}\n\nexport default mapCacheDelete;\n","import getMapData from './_getMapData.js';\n\n/**\n * Gets the map value for `key`.\n *\n * @private\n * @name get\n * @memberOf MapCache\n * @param {string} key The key of the value to get.\n * @returns {*} Returns the entry value.\n */\nfunction mapCacheGet(key) {\n return getMapData(this, key).get(key);\n}\n\nexport default mapCacheGet;\n","import getMapData from './_getMapData.js';\n\n/**\n * Checks if a map value for `key` exists.\n *\n * @private\n * @name has\n * @memberOf MapCache\n * @param {string} key The key of the entry to check.\n * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.\n */\nfunction mapCacheHas(key) {\n return getMapData(this, key).has(key);\n}\n\nexport default mapCacheHas;\n","import getMapData from './_getMapData.js';\n\n/**\n * Sets the map `key` to `value`.\n *\n * @private\n * @name set\n * @memberOf MapCache\n * @param {string} key The key of the value to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns the map cache instance.\n */\nfunction mapCacheSet(key, value) {\n var data = getMapData(this, key),\n size = data.size;\n\n data.set(key, value);\n this.size += data.size == size ? 0 : 1;\n return this;\n}\n\nexport default mapCacheSet;\n","import mapCacheClear from './_mapCacheClear.js';\nimport mapCacheDelete from './_mapCacheDelete.js';\nimport mapCacheGet from './_mapCacheGet.js';\nimport mapCacheHas from './_mapCacheHas.js';\nimport mapCacheSet from './_mapCacheSet.js';\n\n/**\n * Creates a map cache object to store key-value pairs.\n *\n * @private\n * @constructor\n * @param {Array} [entries] The key-value pairs to cache.\n */\nfunction MapCache(entries) {\n var index = -1,\n length = entries == null ? 0 : entries.length;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\n// Add methods to `MapCache`.\nMapCache.prototype.clear = mapCacheClear;\nMapCache.prototype['delete'] = mapCacheDelete;\nMapCache.prototype.get = mapCacheGet;\nMapCache.prototype.has = mapCacheHas;\nMapCache.prototype.set = mapCacheSet;\n\nexport default MapCache;\n","import MapCache from './_MapCache.js';\n\n/** Error message constants. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/**\n * Creates a function that memoizes the result of `func`. If `resolver` is\n * provided, it determines the cache key for storing the result based on the\n * arguments provided to the memoized function. By default, the first argument\n * provided to the memoized function is used as the map cache key. The `func`\n * is invoked with the `this` binding of the memoized function.\n *\n * **Note:** The cache is exposed as the `cache` property on the memoized\n * function. Its creation may be customized by replacing the `_.memoize.Cache`\n * constructor with one whose instances implement the\n * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)\n * method interface of `clear`, `delete`, `get`, `has`, and `set`.\n *\n * @static\n * @memberOf _\n * @since 0.1.0\n * @category Function\n * @param {Function} func The function to have its output memoized.\n * @param {Function} [resolver] The function to resolve the cache key.\n * @returns {Function} Returns the new memoized function.\n * @example\n *\n * var object = { 'a': 1, 'b': 2 };\n * var other = { 'c': 3, 'd': 4 };\n *\n * var values = _.memoize(_.values);\n * values(object);\n * // => [1, 2]\n *\n * values(other);\n * // => [3, 4]\n *\n * object.a = 2;\n * values(object);\n * // => [1, 2]\n *\n * // Modify the result cache.\n * values.cache.set(object, ['a', 'b']);\n * values(object);\n * // => ['a', 'b']\n *\n * // Replace `_.memoize.Cache`.\n * _.memoize.Cache = WeakMap;\n */\nfunction memoize(func, resolver) {\n if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {\n throw new TypeError(FUNC_ERROR_TEXT);\n }\n var memoized = function() {\n var args = arguments,\n key = resolver ? resolver.apply(this, args) : args[0],\n cache = memoized.cache;\n\n if (cache.has(key)) {\n return cache.get(key);\n }\n var result = func.apply(this, args);\n memoized.cache = cache.set(key, result) || cache;\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Expose `MapCache`.\nmemoize.Cache = MapCache;\n\nexport default memoize;\n","import memoize from './memoize.js';\n\n/** Used as the maximum memoize cache size. */\nvar MAX_MEMOIZE_SIZE = 500;\n\n/**\n * A specialized version of `_.memoize` which clears the memoized function's\n * cache when it exceeds `MAX_MEMOIZE_SIZE`.\n *\n * @private\n * @param {Function} func The function to have its output memoized.\n * @returns {Function} Returns the new memoized function.\n */\nfunction memoizeCapped(func) {\n var result = memoize(func, function(key) {\n if (cache.size === MAX_MEMOIZE_SIZE) {\n cache.clear();\n }\n return key;\n });\n\n var cache = result.cache;\n return result;\n}\n\nexport default memoizeCapped;\n","import memoizeCapped from './_memoizeCapped.js';\n\n/** Used to match property names within property paths. */\nvar rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\n\n/** Used to match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/**\n * Converts `string` to a property path array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the property path array.\n */\nvar stringToPath = memoizeCapped(function(string) {\n var result = [];\n if (string.charCodeAt(0) === 46 /* . */) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, subString) {\n result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\n\nexport default stringToPath;\n","import baseToString from './_baseToString.js';\n\n/**\n * Converts `value` to a string. An empty string is returned for `null`\n * and `undefined` values. The sign of `-0` is preserved.\n *\n * @static\n * @memberOf _\n * @since 4.0.0\n * @category Lang\n * @param {*} value The value to convert.\n * @returns {string} Returns the converted string.\n * @example\n *\n * _.toString(null);\n * // => ''\n *\n * _.toString(-0);\n * // => '-0'\n *\n * _.toString([1, 2, 3]);\n * // => '1,2,3'\n */\nfunction toString(value) {\n return value == null ? '' : baseToString(value);\n}\n\nexport default toString;\n","import isArray from './isArray.js';\nimport isKey from './_isKey.js';\nimport stringToPath from './_stringToPath.js';\nimport toString from './toString.js';\n\n/**\n * Casts `value` to a path array if it's not one.\n *\n * @private\n * @param {*} value The value to inspect.\n * @param {Object} [object] The object to query keys on.\n * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value, object) {\n if (isArray(value)) {\n return value;\n }\n return isKey(value, object) ? [value] : stringToPath(toString(value));\n}\n\nexport default castPath;\n","import isSymbol from './isSymbol.js';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/**\n * Converts `value` to a string key if it's not a string or symbol.\n *\n * @private\n * @param {*} value The value to inspect.\n * @returns {string|symbol} Returns the key.\n */\nfunction toKey(value) {\n if (typeof value == 'string' || isSymbol(value)) {\n return value;\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\n\nexport default toKey;\n","/**\n * The base implementation of `_.slice` without an iteratee call guard.\n *\n * @private\n * @param {Array} array The array to slice.\n * @param {number} [start=0] The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the slice of `array`.\n */\nfunction baseSlice(array, start, end) {\n var index = -1,\n length = array.length;\n\n if (start < 0) {\n start = -start > length ? 0 : (length + start);\n }\n end = end > length ? length : end;\n if (end < 0) {\n end += length;\n }\n length = start > end ? 0 : ((end - start) >>> 0);\n start >>>= 0;\n\n var result = Array(length);\n while (++index < length) {\n result[index] = array[index + start];\n }\n return result;\n}\n\nexport default baseSlice;\n","import baseSlice from './_baseSlice.js';\n\n/**\n * Casts `array` to a slice if it's needed.\n *\n * @private\n * @param {Array} array The array to inspect.\n * @param {number} start The start position.\n * @param {number} [end=array.length] The end position.\n * @returns {Array} Returns the cast slice.\n */\nfunction castSlice(array, start, end) {\n var length = array.length;\n end = end === undefined ? length : end;\n return (!start && end >= length) ? array : baseSlice(array, start, end);\n}\n\nexport default castSlice;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsZWJ = '\\\\u200d';\n\n/** Used to detect strings with [zero-width joiners or code points from the astral planes](http://eev.ee/blog/2015/09/12/dark-corners-of-unicode/). */\nvar reHasUnicode = RegExp('[' + rsZWJ + rsAstralRange + rsComboRange + rsVarRange + ']');\n\n/**\n * Checks if `string` contains Unicode symbols.\n *\n * @private\n * @param {string} string The string to inspect.\n * @returns {boolean} Returns `true` if a symbol is found, else `false`.\n */\nfunction hasUnicode(string) {\n return reHasUnicode.test(string);\n}\n\nexport default hasUnicode;\n","/**\n * Converts an ASCII `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction asciiToArray(string) {\n return string.split('');\n}\n\nexport default asciiToArray;\n","/** Used to compose unicode character classes. */\nvar rsAstralRange = '\\\\ud800-\\\\udfff',\n rsComboMarksRange = '\\\\u0300-\\\\u036f',\n reComboHalfMarksRange = '\\\\ufe20-\\\\ufe2f',\n rsComboSymbolsRange = '\\\\u20d0-\\\\u20ff',\n rsComboRange = rsComboMarksRange + reComboHalfMarksRange + rsComboSymbolsRange,\n rsVarRange = '\\\\ufe0e\\\\ufe0f';\n\n/** Used to compose unicode capture groups. */\nvar rsAstral = '[' + rsAstralRange + ']',\n rsCombo = '[' + rsComboRange + ']',\n rsFitz = '\\\\ud83c[\\\\udffb-\\\\udfff]',\n rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',\n rsNonAstral = '[^' + rsAstralRange + ']',\n rsRegional = '(?:\\\\ud83c[\\\\udde6-\\\\uddff]){2}',\n rsSurrPair = '[\\\\ud800-\\\\udbff][\\\\udc00-\\\\udfff]',\n rsZWJ = '\\\\u200d';\n\n/** Used to compose unicode regexes. */\nvar reOptMod = rsModifier + '?',\n rsOptVar = '[' + rsVarRange + ']?',\n rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',\n rsSeq = rsOptVar + reOptMod + rsOptJoin,\n rsSymbol = '(?:' + [rsNonAstral + rsCombo + '?', rsCombo, rsRegional, rsSurrPair, rsAstral].join('|') + ')';\n\n/** Used to match [string symbols](https://mathiasbynens.be/notes/javascript-unicode). */\nvar reUnicode = RegExp(rsFitz + '(?=' + rsFitz + ')|' + rsSymbol + rsSeq, 'g');\n\n/**\n * Converts a Unicode `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction unicodeToArray(string) {\n return string.match(reUnicode) || [];\n}\n\nexport default unicodeToArray;\n","import asciiToArray from './_asciiToArray.js';\nimport hasUnicode from './_hasUnicode.js';\nimport unicodeToArray from './_unicodeToArray.js';\n\n/**\n * Converts `string` to an array.\n *\n * @private\n * @param {string} string The string to convert.\n * @returns {Array} Returns the converted array.\n */\nfunction stringToArray(string) {\n return hasUnicode(string)\n ? unicodeToArray(string)\n : asciiToArray(string);\n}\n\nexport default stringToArray;\n","import castPath from './_castPath.js';\nimport isArguments from './isArguments.js';\nimport isArray from './isArray.js';\nimport isIndex from './_isIndex.js';\nimport isLength from './isLength.js';\nimport toKey from './_toKey.js';\n\n/**\n * Checks if `path` exists on `object`.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @param {Function} hasFunc The function to check properties.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n */\nfunction hasPath(object, path, hasFunc) {\n path = castPath(path, object);\n\n var index = -1,\n length = path.length,\n result = false;\n\n while (++index < length) {\n var key = toKey(path[index]);\n if (!(result = object != null && hasFunc(object, key))) {\n break;\n }\n object = object[key];\n }\n if (result || ++index != length) {\n return result;\n }\n length = object == null ? 0 : object.length;\n return !!length && isLength(length) && isIndex(key, length) &&\n (isArray(object) || isArguments(object));\n}\n\nexport default hasPath;\n","/** Used for built-in method references. */\nvar objectProto = Object.prototype;\n\n/** Used to check objects for own properties. */\nvar hasOwnProperty = objectProto.hasOwnProperty;\n\n/**\n * The base implementation of `_.has` without support for deep paths.\n *\n * @private\n * @param {Object} [object] The object to query.\n * @param {Array|string} key The key to check.\n * @returns {boolean} Returns `true` if `key` exists, else `false`.\n */\nfunction baseHas(object, key) {\n return object != null && hasOwnProperty.call(object, key);\n}\n\nexport default baseHas;\n","import baseHas from './_baseHas.js';\nimport hasPath from './_hasPath.js';\n\n/**\n * Checks if `path` is a direct property of `object`.\n *\n * @static\n * @since 0.1.0\n * @memberOf _\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path to check.\n * @returns {boolean} Returns `true` if `path` exists, else `false`.\n * @example\n *\n * var object = { 'a': { 'b': 2 } };\n * var other = _.create({ 'a': _.create({ 'b': 2 }) });\n *\n * _.has(object, 'a');\n * // => true\n *\n * _.has(object, 'a.b');\n * // => true\n *\n * _.has(object, ['a', 'b']);\n * // => true\n *\n * _.has(other, 'a');\n * // => false\n */\nfunction has(object, path) {\n return object != null && hasPath(object, path, baseHas);\n}\n\nexport default has;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimEnd` to get the index of the last string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the last unmatched string symbol.\n */\nfunction charsEndIndex(strSymbols, chrSymbols) {\n var index = strSymbols.length;\n\n while (index-- && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nexport default charsEndIndex;\n","import baseIndexOf from './_baseIndexOf.js';\n\n/**\n * Used by `_.trim` and `_.trimStart` to get the index of the first string symbol\n * that is not found in the character symbols.\n *\n * @private\n * @param {Array} strSymbols The string symbols to inspect.\n * @param {Array} chrSymbols The character symbols to find.\n * @returns {number} Returns the index of the first unmatched string symbol.\n */\nfunction charsStartIndex(strSymbols, chrSymbols) {\n var index = -1,\n length = strSymbols.length;\n\n while (++index < length && baseIndexOf(chrSymbols, strSymbols[index], 0) > -1) {}\n return index;\n}\n\nexport default charsStartIndex;\n","import baseToString from './_baseToString.js';\nimport baseTrim from './_baseTrim.js';\nimport castSlice from './_castSlice.js';\nimport charsEndIndex from './_charsEndIndex.js';\nimport charsStartIndex from './_charsStartIndex.js';\nimport stringToArray from './_stringToArray.js';\nimport toString from './toString.js';\n\n/**\n * Removes leading and trailing whitespace or specified characters from `string`.\n *\n * @static\n * @memberOf _\n * @since 3.0.0\n * @category String\n * @param {string} [string=''] The string to trim.\n * @param {string} [chars=whitespace] The characters to trim.\n * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.\n * @returns {string} Returns the trimmed string.\n * @example\n *\n * _.trim(' abc ');\n * // => 'abc'\n *\n * _.trim('-_-abc-_-', '_-');\n * // => 'abc'\n *\n * _.map([' foo ', ' bar '], _.trim);\n * // => ['foo', 'bar']\n */\nfunction trim(string, chars, guard) {\n string = toString(string);\n if (string && (guard || chars === undefined)) {\n return baseTrim(string);\n }\n if (!string || !(chars = baseToString(chars))) {\n return string;\n }\n var strSymbols = stringToArray(string),\n chrSymbols = stringToArray(chars),\n start = charsStartIndex(strSymbols, chrSymbols),\n end = charsEndIndex(strSymbols, chrSymbols) + 1;\n\n return castSlice(strSymbols, start, end).join('');\n}\n\nexport default trim;\n","import { has, trim } from \"lodash-es\";\n\n//import dotenv from \"dotenv\";\n// if (__DEV__) {\n// dotenv.config({\n// path: __ENV_PATH__\n// })\n// }\n\n//function _env(key: keyof EnvKeys, defaultValue?: string): string;\nfunction _env(key: string, defaultValue?: string): string {\n return has(process.env, key)\n ? (process.env[key] ?? \"\")\n : (defaultValue ?? \"\");\n}\n\n//function int(key: keyof EnvKeys, defaultValue?: number): number;\nfunction int(key: string, defaultValue?: number): number {\n if (!has(process.env, key)) {\n return defaultValue ?? 0;\n }\n const value = process.env[key] ?? \"0\";\n return parseInt(value, 10);\n}\n\n//function float(key: keyof EnvKeys, defaultValue?: number): number;\nfunction float(key: string, defaultValue?: number): number {\n if (!has(process.env, key)) {\n return defaultValue ?? 0;\n }\n\n const value = process.env[key] ?? \"0\";\n return parseFloat(value);\n}\n\n//function bool(key: keyof EnvKeys, defaultValue?: boolean): boolean;\nfunction bool(key: string, defaultValue?: boolean): boolean {\n if (!has(process.env, key)) {\n return defaultValue ?? false;\n }\n\n const value = process.env[key];\n return value === 'true';\n}\n\n//function json<T = any>(key: keyof EnvKeys, defaultValue?: T): T\nfunction json<T = any>(key: string, defaultValue?: T) {\n if (!has(process.env, key)) {\n return defaultValue ?? {};\n }\n\n const value = process.env[key] ?? \"{}\";\n try {\n return JSON.parse(value);\n } catch (error: any) {\n throw new Error(`Invalid json environment variable ${key}: ${error.message}`);\n }\n}\n\n//function array(key: keyof EnvKeys, defaultValue?: []): string[];\nfunction array(key: string, defaultValue?: []): Array<any> {\n if (!has(process.env, key)) {\n return defaultValue ?? [];\n }\n\n let value = process.env[key] ?? \"\";\n\n if (value.startsWith('[') && value.endsWith(']')) {\n value = value.substring(1, value.length - 1);\n }\n\n return value.split(',').map((v) => {\n return trim(trim(v, ' '), '\"');\n });\n}\n\n//function date(key: keyof EnvKeys, defaultValue?: Date): Date;\nfunction date(key: string, defaultValue?: Date): Date {\n if (!has(process.env, key)) {\n return defaultValue ?? new Date();\n }\n\n const value = process.env[key] ?? Date()\n return new Date(value);\n}\n\nconst utils = {\n\n int,\n\n float,\n\n bool,\n\n json,\n\n array,\n\n date,\n\n /**\n * Gets a value from env that matches oneOf provided values\n * @param {string} key\n * @param {string[]} expectedValues\n * @param {string|undefined} defaultValue\n * @returns {string|undefined}\n */\n oneOf(key: string, expectedValues: string[], defaultValue?: string): string {\n if (!expectedValues) {\n throw new Error(`env.oneOf requires expectedValues`);\n }\n\n if (defaultValue && !expectedValues.includes(defaultValue)) {\n throw new Error(`env.oneOf requires defaultValue to be included in expectedValues`);\n }\n\n const rawValue = env(key as any, defaultValue);\n return expectedValues.includes(rawValue) ? rawValue : (defaultValue ?? \"\");\n },\n};\n\nexport const env = Object.assign(_env, utils);","import * as crypto from 'crypto';\n\n// Custom JWT implementation without dependencies\ninterface JWTOptions {\n audience?: string | string[];\n expiresIn?: string | number;\n notBefore?: string | number;\n jwtid?: string;\n issuer?: string;\n ignoreExpiration?: boolean;\n}\n\ninterface JWTPayload {\n aud?: string | string[];\n exp?: number;\n nbf?: number;\n jti?: string;\n iss?: string;\n iat: number;\n [key: string]: any;\n}\n\n/**\n * Parses a time string like \"1h\" or \"100ms\" to milliseconds\n */\nfunction parseTimeToMs(time: string | number): number {\n if (typeof time === 'number') return time * 1000; // Assuming number input is in seconds\n\n const match = time.match(/^(\\d+(?:\\.\\d+)?)\\s*(ms|s|m|h|d)$/);\n if (!match) return 0;\n\n const value = parseFloat(match[1]);\n const unit = match[2];\n\n switch (unit) {\n case 'ms': return value;\n case 's': return value * 1000;\n case 'm': return value * 60 * 1000;\n case 'h': return value * 60 * 60 * 1000;\n case 'd': return value * 24 * 60 * 60 * 1000;\n default: return 0;\n }\n}\n\n/**\n * Base64Url encode a string or buffer\n */\nfunction base64UrlEncode(input: string | Buffer): string {\n const str = typeof input === 'string' ? input : input.toString('base64');\n return str\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\n/**\n * Base64Url decode a string to Buffer\n */\nfunction base64UrlDecode(input: string): Buffer {\n let str = input\n .replace(/-/g, '+')\n .replace(/_/g, '/');\n\n // Add padding if needed\n while (str.length % 4) {\n str += '=';\n }\n\n return Buffer.from(str, 'base64');\n}\n\n/**\n * Create a JWT\n */\nfunction createAccessToken(\n claims: Record<string, string>,\n privateKey: string,\n expiresIn: string = \"1h\"\n): string {\n const now = Math.floor(Date.now() / 1000);\n\n // Create header\n const header = {\n alg: 'HS256',\n typ: 'JWT'\n };\n\n // Create payload with claims and standard JWT fields\n const payload: JWTPayload = {\n ...claims,\n aud: [\"*\"],\n iat: now,\n iss: \"vcg-identity\",\n jti: Date.now().toString()\n };\n\n // Add expiration\n if (expiresIn) {\n const expiryMs = parseTimeToMs(expiresIn);\n payload.exp = now + Math.floor(expiryMs / 1000);\n }\n\n // Add not before\n const notBefore = \"100ms\";\n if (notBefore) {\n const notBeforeMs = parseTimeToMs(notBefore);\n payload.nbf = now + Math.floor(notBeforeMs / 1000);\n }\n\n // Encode header and payload\n const encodedHeader = base64UrlEncode(JSON.stringify(header));\n const encodedPayload = base64UrlEncode(JSON.stringify(payload));\n\n // Create signature\n const signatureInput = `${encodedHeader}.${encodedPayload}`;\n const signature = crypto\n .createHmac('sha256', privateKey)\n .update(signatureInput)\n .digest();\n\n const encodedSignature = base64UrlEncode(signature);\n\n // Return complete JWT\n return `${encodedHeader}.${encodedPayload}.${encodedSignature}`;\n}\n\n/**\n * Generate a UUID v4 without dependencies\n */\nfunction createRefreshToken(): string {\n const bytes = crypto.randomBytes(16);\n\n // Set version (4) and variant (RFC4122)\n bytes[6] = (bytes[6] & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8] & 0x3f) | 0x80; // variant RFC4122\n\n // Convert to hex without dashes\n return bytes.toString('hex');\n}\n\n/**\n * Decode a JWT token without verification\n */\nfunction decode(token: string): JWTPayload | null {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) return null;\n\n const payload = JSON.parse(\n base64UrlDecode(parts[1]).toString('utf8')\n );\n\n return payload;\n } catch {\n return null;\n }\n}\n\n/**\n * Verify a JWT token without dependencies\n */\nfunction verify(token: string, privateKey: string, options: JWTOptions = {}): Promise<JWTPayload> {\n return new Promise((resolve, reject) => {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return reject(new Error('Invalid token format'));\n }\n\n const [encodedHeader, encodedPayload, encodedSignature] = parts;\n\n // Verify signature\n const signatureInput = `${encodedHeader}.${encodedPayload}`;\n const expectedSignature = crypto\n .createHmac('sha256', privateKey)\n .update(signatureInput)\n .digest();\n\n const providedSignature = base64UrlDecode(encodedSignature);\n\n const signatureValid = crypto.timingSafeEqual(\n expectedSignature,\n providedSignature\n );\n\n if (!signatureValid) {\n return reject(new Error('Invalid signature'));\n }\n\n // Decode payload\n const payload = JSON.parse(\n base64UrlDecode(encodedPayload).toString('utf8')\n );\n\n // Verify expiration\n if (!options.ignoreExpiration && payload.exp) {\n const now = Math.floor(Date.now() / 1000);\n if (now >= payload.exp) {\n return reject(new Error('Token expired'));\n }\n }\n\n // Verify not before\n if (payload.nbf) {\n const now = Math.floor(Date.now() / 1000);\n if (now < payload.nbf) {\n return reject(new Error('Token not yet valid'));\n }\n }\n\n // Verify issuer\n if (options.issuer && payload.iss !== options.issuer) {\n return reject(new Error('Invalid issuer'));\n }\n\n // Verify audience\n if (options.audience) {\n const audiences = Array.isArray(options.audience) ? options.audience : [options.audience];\n const tokenAudiences = Array.isArray(payload.aud) ? payload.aud : [payload.aud];\n\n const validAudience = audiences.some(aud =>\n tokenAudiences.includes(aud)\n );\n\n if (!validAudience) {\n return reject(new Error('Invalid audience'));\n }\n }\n\n resolve(payload);\n } catch (error) {\n reject(error);\n }\n });\n}\n\n\nexport const tokenUtils = {\n createAccessToken,\n createRefreshToken,\n decodeAccessToken: decode,\n verifyAccessToken: verify,\n}","export const logLevels = {\n fatal: -1,\n error: 0,\n warn: 1,\n info: 2,\n debug: 3,\n trace: 4,\n};\n\nexport type Logger = {\n level: string;\n fatal: (mergeObject: Record<string, any> | string, msg?: string) => void;\n error: (mergeObject: Record<string, any> | string, msg?: string) => void;\n warn: (mergeObject: Record<string, any> | string, msg?: string) => void;\n info: (mergeObject: Record<string, any> | string, msg?: string) => void;\n debug: (mergeObject: Record<string, any> | string, msg?: string) => void;\n trace: (mergeObject: Record<string, any> | string, msg?: string) => void;\n silent: (mergeObject: Record<string, any> | string, msg?: string) => void;\n child: (bindings: Record<string, string>) => Logger;\n}","const safeJsonStringify = (value: unknown): string => {\n const seen = new WeakSet<object>();\n\n return JSON.stringify(value, (key, currentValue: unknown) => {\n if (key === 'constructor') return undefined;\n\n if (typeof currentValue === 'object' && currentValue !== null) {\n if (seen.has(currentValue)) return '[Circular]';\n seen.add(currentValue);\n }\n\n return currentValue;\n });\n};\n\nconst hasOwnConstructorProp = (value: unknown): boolean => {\n if (typeof value !== 'object' || value === null) return false;\n\n return Object.prototype.hasOwnProperty.call(value, 'constructor');\n};\n\nexport const errorToString = (error: unknown): string => {\n // Handle null or undefined\n if (error === null) return 'Null error';\n if (error === undefined) return 'Undefined error';\n\n // Handle Error objects\n if (error instanceof Error) {\n return [\n `Name: ${error.name}`,\n `Message: ${error.message}`,\n `Stack: ${error.stack || 'No stack trace available'}`,\n // Handle additional properties that might exist on custom errors\n ...Object.entries(error)\n .filter(\n ([key, value]) =>\n !['name', 'message', 'stack'].includes(key) && !hasOwnConstructorProp(value)\n )\n .map(([key, value]) => `${key}: ${safeJsonStringify(value)}`)\n ].join('\\n');\n }\n\n // Handle strings\n if (typeof error === 'string') return error;\n\n // Handle objects\n if (typeof error === 'object') {\n try {\n return JSON.stringify(\n error,\n (key, value: unknown) => {\n if (key === 'constructor') return undefined;\n return value;\n },\n 2\n );\n } catch {\n return `[Object that cannot be stringified: ${Object.prototype.toString.call(error)}]`;\n }\n }\n\n // Handle other primitives\n return String(error);\n};\n","import { EOL } from \"os\";\n\nexport type LogEntry = {\n level: number;\n levelName: string;\n time: number;\n module: string;\n reqId: string;\n msg: string;\n meta?: Record<string, unknown>;\n};\n\nexport type LogWriter = (entry: LogEntry) => void;\n\nconst jsonWriter: LogWriter = (entry) => {\n process.stdout.write(JSON.stringify(entry) + EOL);\n};\n\nlet _writer: LogWriter = jsonWriter;\n\nexport function setWriter(writer: LogWriter): void {\n _writer = writer;\n}\n\nexport function getWriter(): LogWriter {\n return _writer;\n}\n","import { env } from \"../config\";\nimport { Logger, logLevels } from \"./types\";\nimport { errorToString } from \"./error-to-string\";\nimport { getWriter } from \"./writer\";\n\nexport { setWriter, getWriter } from \"./writer\";\nexport type { LogWriter, LogEntry } from \"./writer\";\n\nconst levelValues = {\n fatal: 70,\n error: 60,\n warn: 50,\n info: 40,\n debug: 30,\n trace: 20,\n} as const;\n\ntype LevelName = keyof typeof levelValues;\n\nlet currentLogLevel = 2;\nlet _module = \"default\";\nlet _requestId = \"\";\n\nexport function initializeLogger(moduleName: string, requestIdValue: string = \"\") {\n _module = moduleName;\n _requestId = requestIdValue;\n}\n\nfunction writeLine(level: LevelName, mergeObject: Record<string, any> | null, msg: string, bindings: Record<string, string>) {\n getWriter()({\n level: levelValues[level],\n levelName: level,\n time: Date.now(),\n module: bindings.module || _module,\n reqId: bindings.reqId || _requestId,\n msg: level === \"error\" || level === \"fatal\" ? errorToString(msg) : msg,\n ...(mergeObject ? { meta: mergeObject } : {}),\n });\n}\n\nfunction createLogger(bindings: Record<string, string> = {}): Logger & { child: (b: Record<string, string>) => ReturnType<typeof createLogger> } {\n const currentLogLevelName = (env(\"LOG_LEVEL\")?.toLowerCase() ?? \"info\") as keyof typeof logLevels;\n currentLogLevel = logLevels[currentLogLevelName] ?? logLevels.info;\n\n return {\n level: currentLogLevelName,\n fatal: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.fatal) {\n typeof mergeObject === \"string\" || mergeObject instanceof Error\n ? writeLine(\"fatal\", null, mergeObject as any, bindings)\n : writeLine(\"fatal\", mergeObject, msg ?? \"\", bindings);\n }\n },\n error: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.error) {\n typeof mergeObject === \"string\" || mergeObject instanceof Error\n ? writeLine(\"error\", null, mergeObject as any, bindings)\n : writeLine(\"error\", mergeObject, msg ?? \"\", bindings);\n }\n },\n warn: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.warn) {\n typeof mergeObject === \"string\"\n ? writeLine(\"warn\", null, mergeObject, bindings)\n : writeLine(\"warn\", mergeObject, msg ?? \"\", bindings);\n }\n },\n info: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.info) {\n typeof mergeObject === \"string\"\n ? writeLine(\"info\", null, mergeObject, bindings)\n : writeLine(\"info\", mergeObject, msg ?? \"\", bindings);\n }\n },\n debug: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.debug) {\n typeof mergeObject === \"string\"\n ? writeLine(\"debug\", null, mergeObject, bindings)\n : writeLine(\"debug\", mergeObject, msg ?? \"\", bindings);\n }\n },\n trace: (mergeObject: Record<string, any> | string, msg?: string) => {\n if (currentLogLevel >= logLevels.trace) {\n typeof mergeObject === \"string\"\n ? writeLine(\"trace\", null, mergeObject, bindings)\n : writeLine(\"trace\", mergeObject, msg ?? \"\", bindings);\n }\n },\n silent: () => { },\n child: (childBindings: Record<string, string>) =>\n createLogger({ ...bindings, ...childBindings }),\n };\n}\n\nexport const logger = createLogger();\n","import axios from 'axios';\n\nimport { env } from \"@cloudnux/utils\";\n\nimport { EventBrokerService, EventMessage, PeekOptions, PublishOptions, ReadOptions } from \"@cloudnux/core-cloud-provider\";\n/**\n * Create an HTTP-based event broker service \n * Communicates with a message queue system over HTTP endpoints\n * @returns HTTP event broker service implementation\n */\nexport function createLocalEventBrokerService(): EventBrokerService {\n // Get base URL from environment variables or use default\n const baseURL = env(\"DEV_CLOUD_EVENT_BROKER_URL\", 'http://localhost:3000');\n\n /**\n * Get the full URL for a queue\n * @param queueName Queue name\n * @returns Full URL for the queue endpoint\n */\n function getQueueUrl(queueName: string): string {\n // If queue name already contains a full URL, use it as is\n if (queueName.startsWith('http://') || queueName.startsWith('https://')) {\n return queueName;\n }\n\n // Otherwise, append it to the base URL\n return `${baseURL}/${queueName}`;\n }\n\n /**\n * Parse response data into EventMessage format\n * @param data Response data\n * @returns EventMessage object\n */\n function parseMessage(data: any): EventMessage {\n // Handle string body\n const body = typeof data.body === 'object'\n ? JSON.stringify(data.body)\n : data.body ?? '';\n\n return {\n id: data.id ?? data.messageId ?? '',\n body,\n attributes: data.attributes ?? {},\n receiptHandle: data.receiptHandle ?? data.id ?? '',\n publishedAt: data.publishedAt ? new Date(data.publishedAt) : new Date()\n };\n }\n\n return {\n /**\n * Publish a message to an HTTP queue endpoint\n * @param target Target queue name or URL\n * @param message Message to publish\n * @param options Optional publishing options\n * @returns Promise resolving when publishing is complete\n */\n async publish(target: string, message: string | Record<string, any>, options?: PublishOptions): Promise<void> {\n if (!target)\n throw new Error(\"Target queue name or URL is required for publishing a message.\");\n const queueUrl = getQueueUrl(target);\n const headers: Record<string, string> = {};\n\n // Add message attributes as headers\n if (options?.attributes) {\n Object.entries(options.attributes).forEach(([key, value]) => {\n headers[key] = value;\n });\n }\n\n // Add FIFO properties as headers if specified\n if (options?.messageGroupId) {\n headers['x-message-group-id'] = options.messageGroupId;\n }\n\n if (options?.messageDeduplicationId) {\n headers['x-message-deduplication-id'] = options.messageDeduplicationId;\n }\n\n if (options?.delaySeconds) {\n headers['x-delay-seconds'] = options.delaySeconds.toString();\n }\n\n // Prepare message body\n const body = typeof message === 'string' ? message : message;\n\n // Send POST request to publish the message\n await axios.post(queueUrl, body, { headers });\n },\n\n /**\n * Peek at messages in a queue without removing them\n * @param source Source queue name or URL\n * @param options Optional reading options\n * @returns Promise containing the peeked message(s)\n */\n async peek(source: string, options?: PeekOptions): Promise<EventMessage[]> {\n const queueUrl = getQueueUrl(source);\n const params: Record<string, string> = {\n peek: 'true'\n };\n\n // Add options as query parameters\n if (options?.maxMessages) {\n params.maxMessages = options.maxMessages.toString();\n }\n\n if (options?.waitTimeSeconds) {\n params.waitTimeSeconds = options.waitTimeSeconds.toString();\n }\n\n // Send GET request to peek at messages\n const response = await axios.get(queueUrl, { params });\n\n // Parse response data\n const messages = Array.isArray(response.data)\n ? response.data.map(parseMessage)\n : response.data ? [parseMessage(response.data)] : [];\n\n return messages;\n },\n\n /**\n * Read and remove message(s) from a queue\n * @param source Source queue name or URL\n * @param options Optional reading options\n * @returns Promise containing the read message(s)\n */\n async read(source: string, options?: ReadOptions): Promise<EventMessage[]> {\n const queueUrl = getQueueUrl(source);\n const params: Record<string, string> = {};\n\n // Add options as query parameters\n if (options?.maxMessages) {\n params.maxMessages = options.maxMessages.toString();\n }\n\n if (options?.waitTimeSeconds) {\n params.waitTimeSeconds = options.waitTimeSeconds.toString();\n }\n\n if (options?.visibilityTimeout) {\n params.visibilityTimeout = options.visibilityTimeout.toString();\n }\n\n // Send DELETE request to read and remove messages\n // DELETE is used to indicate that messages should be removed after reading\n const response = await axios.delete(queueUrl, { params });\n\n // Parse response data\n const messages = Array.isArray(response.data)\n ? response.data.map(parseMessage)\n : response.data ? [parseMessage(response.data)] : [];\n\n return messages;\n }\n };\n}","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { env, logger } from \"@cloudnux/utils\";\n\nimport { StorageService, StorageWriteOptions, StorageWriteResult } from \"@cloudnux/core-cloud-provider\";\n\n// Use fs.promises for async file operations\nconst { mkdir, writeFile, readFile, unlink, access } = fs.promises;\n\n/**\n * Create a local storage service that uses the filesystem\n * @returns Local filesystem storage service implementation\n */\nexport function createLocalStorageService(): StorageService {\n // Get base directory from environment variables or use default\n const baseDir = env(\"DEV_CLOUD_STORAGE_BUCKET\", path.join(process.cwd(), '.local-storage'))!;\n\n // Create base directory if it doesn't exist\n if (!fs.existsSync(baseDir)) {\n fs.mkdirSync(baseDir, { recursive: true });\n }\n\n /**\n * Ensures the directory for a file exists\n * @param filePath Path to the file\n */\n async function ensureDirectoryExists(filePath: string): Promise<void> {\n const directory = path.dirname(filePath);\n try {\n await access(directory);\n } catch {\n // Directory doesn't exist, create it\n await mkdir(directory, { recursive: true });\n }\n }\n\n /**\n * Get the full path to a file\n * @param bucket Bucket name (folder)\n * @param filePath Relative path within the storage\n * @returns Absolute file path\n */\n function getFullPath(bucket: string, filePath: string): string {\n // Normalize the path to prevent directory traversal\n const normalizedPath = path.normalize(filePath).replace(/^(\\.\\.(\\/|\\\\|$))+/, '');\n const bucketPath = path.join(baseDir, bucket);\n\n // Create bucket directory if it doesn't exist\n if (!fs.existsSync(bucketPath)) {\n fs.mkdirSync(bucketPath, { recursive: true });\n }\n\n return path.join(bucketPath, normalizedPath);\n }\n\n /**\n * Write metadata for a file\n * @param filePath Path to the file\n * @param options File options\n */\n async function writeMetadata(filePath: string, options?: StorageWriteOptions): Promise<void> {\n if (!options) return;\n\n const metadataPath = `${filePath}.metadata.json`;\n const metadata = {\n contentType: options.contentType,\n acl: options.acl,\n metadata: options.metadata,\n createdAt: new Date().toISOString(),\n updatedAt: new Date().toISOString()\n };\n\n await writeFile(metadataPath, JSON.stringify(metadata, null, 2), 'utf8');\n }\n\n return {\n /**\n * Read data from local filesystem\n * @param filePath Path to the file\n * @param bucket Bucket (folder) name\n * @returns Promise containing the file data\n */\n async read(filePath: string, bucket: string): Promise<Buffer> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n\n try {\n return await readFile(fullPath);\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`File not found: ${filePath} in bucket ${bucket}`);\n }\n throw error;\n }\n },\n\n /**\n * Write data to local filesystem\n * @param filePath Path where to store the file\n * @param data Data to write\n * @param bucket Bucket (folder) name\n * @param options Optional configuration for the write operation\n * @returns Promise resolving with the result including URL of the stored file\n */\n async write(filePath: string, data: Buffer | string, bucket: string, options?: StorageWriteOptions): Promise<StorageWriteResult> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n\n // Ensure directory exists\n await ensureDirectoryExists(fullPath);\n\n // Write the file\n await writeFile(fullPath, data);\n\n // Write metadata if options are provided\n if (options) {\n await writeMetadata(fullPath, options);\n }\n\n // Create URL\n const fileUrl = `file://${fullPath}`;\n\n return {\n url: fileUrl,\n bucket,\n key: filePath\n };\n },\n\n /**\n * Delete file from local filesystem\n * @param filePath Path to the file to delete\n * @param bucket Bucket (folder) name\n * @returns Promise resolving when delete is complete\n */\n async delete(filePath: string, bucket: string): Promise<void> {\n if (!bucket) {\n throw new Error('Bucket name is required');\n }\n\n const fullPath = getFullPath(bucket, filePath);\n const metadataPath = `${fullPath}.metadata.json`;\n\n try {\n await unlink(fullPath);\n\n // Try to delete metadata file if it exists\n try {\n await unlink(metadataPath);\n } catch (error) {\n // Ignore error if metadata file doesn't exist\n if ((error as NodeJS.ErrnoException).code !== 'ENOENT') {\n logger.warn({ error }, 'Error deleting metadata file:');\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === 'ENOENT') {\n throw new Error(`File not found: ${filePath} in bucket ${bucket}`);\n }\n throw error;\n }\n }\n };\n}","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport {\n LocationService,\n LocationAddress,\n LocationSuggestion,\n SuggestionParams,\n ReverseGeocodeParams,\n Coordinates,\n RouteResult,\n RoutePoint\n} from \"@cloudnux/core-cloud-provider\";\nimport { env, logger } from \"@cloudnux/utils\";\n\n// Use fs.promises for async file operations\nconst { readFile, writeFile, access, mkdir } = fs.promises;\n\n/**\n * Internal structure for storing location data\n */\ninterface StoredLocation {\n placeId: string;\n title: string;\n subtitle?: string;\n coordinates: Coordinates;\n\n // Address components\n street?: string;\n streetNumber?: string;\n city?: string;\n district?: string;\n region?: string;\n postalCode?: string;\n country?: string;\n countryCode?: string;\n\n // Full address\n fullAddress: string;\n\n // Metadata\n placeType?: string;\n categories?: string[];\n}\n\n/**\n * Mock location data for testing - Central Stockholm locations\n */\nconst DEFAULT_MOCK_LOCATIONS: Record<string, StoredLocation> = {\n 'place-001': {\n placeId: 'place-001',\n title: 'Gamla Stan',\n subtitle: 'Old Town, Stockholm',\n coordinates: {\n lat: 59.3254,\n lng: 18.0716\n },\n street: 'Gamla Stan',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 27',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Gamla Stan, 111 27 Stockholm, Sweden',\n placeType: 'locality',\n categories: ['historical', 'tourist_attraction', 'landmark']\n },\n 'place-002': {\n placeId: 'place-002',\n title: 'Kungliga Slottet',\n subtitle: 'Royal Palace of Stockholm',\n coordinates: {\n lat: 59.3268,\n lng: 18.0718\n },\n street: 'Slottsbacken',\n streetNumber: '1',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 30',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Slottsbacken 1, 111 30 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['tourist_attraction', 'landmark', 'palace']\n },\n 'place-003': {\n placeId: 'place-003',\n title: 'Espresso House Kungsträdgården',\n subtitle: 'Coffee shop in central Stockholm',\n coordinates: {\n lat: 59.3311,\n lng: 18.0720\n },\n street: 'Kungsträdgården',\n streetNumber: '18',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 47',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Kungsträdgården 18, 111 47 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['cafe', 'coffee_shop', 'food']\n },\n 'place-004': {\n placeId: 'place-004',\n title: 'ICA Nära Stureplan',\n subtitle: 'Grocery store',\n coordinates: {\n lat: 59.3372,\n lng: 18.0737\n },\n street: 'Humlegårdsgatan',\n streetNumber: '17',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '114 46',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Humlegårdsgatan 17, 114 46 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['grocery', 'supermarket', 'food']\n },\n 'place-005': {\n placeId: 'place-005',\n title: 'Stockholm Central Station',\n subtitle: 'Main railway station',\n coordinates: {\n lat: 59.3303,\n lng: 18.0604\n },\n street: 'Centralplan',\n streetNumber: '15',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 20',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Centralplan 15, 111 20 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['train_station', 'transport', 'travel']\n },\n 'place-006': {\n placeId: 'place-006',\n title: 'Fotografiska',\n subtitle: 'Photography museum',\n coordinates: {\n lat: 59.3188,\n lng: 18.0860\n },\n street: 'Stadsgårdshamnen',\n streetNumber: '22',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '116 45',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Stadsgårdshamnen 22, 116 45 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'art', 'photography', 'cultural']\n },\n 'place-007': {\n placeId: 'place-007',\n title: 'IKEA City',\n subtitle: 'Furniture store in central Stockholm',\n coordinates: {\n lat: 59.3378,\n lng: 18.0597\n },\n street: 'Sveavägen',\n streetNumber: '44',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '111 34',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Sveavägen 44, 111 34 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['furniture', 'shopping', 'home_goods']\n },\n 'place-008': {\n placeId: 'place-008',\n title: 'Skansen',\n subtitle: 'Open-air museum and zoo',\n coordinates: {\n lat: 59.3263,\n lng: 18.1066\n },\n street: 'Djurgårdsslätten',\n streetNumber: '49-51',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '115 21',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Djurgårdsslätten 49-51, 115 21 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'park', 'tourist_attraction', 'zoo']\n },\n 'place-009': {\n placeId: 'place-009',\n title: 'Drop Coffee',\n subtitle: 'Specialty coffee roastery',\n coordinates: {\n lat: 59.3149,\n lng: 18.0608\n },\n street: 'Wollmar Yxkullsgatan',\n streetNumber: '10',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '118 50',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Wollmar Yxkullsgatan 10, 118 50 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['cafe', 'coffee_shop', 'food']\n },\n 'place-010': {\n placeId: 'place-010',\n title: 'Vasa Museum',\n subtitle: 'Maritime museum',\n coordinates: {\n lat: 59.3280,\n lng: 18.0914\n },\n street: 'Galärvarvsvägen',\n streetNumber: '14',\n city: 'Stockholm',\n region: 'Stockholm County',\n postalCode: '115 21',\n country: 'Sweden',\n countryCode: 'SWE',\n fullAddress: 'Galärvarvsvägen 14, 115 21 Stockholm, Sweden',\n placeType: 'poi',\n categories: ['museum', 'tourist_attraction', 'historical']\n }\n};\n\n/**\n * Calculate distance between two coordinates in meters using Haversine formula\n * @param lat1 Latitude of first point\n * @param lon1 Longitude of first point\n * @param lat2 Latitude of second point\n * @param lon2 Longitude of second point\n * @returns Distance in meters\n */\nfunction calculateDistance(lat1: number, lon1: number, lat2: number, lon2: number): number {\n const R = 6371000; // Radius of the Earth in meters\n const dLat = (lat2 - lat1) * Math.PI / 180;\n const dLon = (lon2 - lon1) * Math.PI / 180;\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(lat1 * Math.PI / 180) * Math.cos(lat2 * Math.PI / 180) *\n Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n const distance = R * c; // Distance in meters\n return distance;\n}\n\n/**\n * Convert stored location to LocationSuggestion\n */\nfunction toLocationSuggestion(location: StoredLocation, distance?: number): LocationSuggestion {\n return {\n title: location.title,\n subtitle: location.subtitle,\n coordinates: location.coordinates,\n placeId: location.placeId,\n placeType: location.placeType,\n distance,\n provider: 'local',\n rawData: location\n };\n}\n\n/**\n * Convert stored location to LocationAddress\n */\nfunction toLocationAddress(location: StoredLocation): LocationAddress {\n return {\n fullAddress: location.fullAddress,\n street: location.street,\n streetNumber: location.streetNumber,\n city: location.city,\n district: location.district,\n region: location.region,\n postalCode: location.postalCode,\n country: location.country,\n countryCode: location.countryCode,\n coordinates: location.coordinates,\n placeType: location.placeType,\n provider: 'local',\n rawData: location\n };\n}\n\n/**\n * Create a local mock location service\n * @returns Local mock location service implementation\n */\nexport function createLocalLocationService(): LocationService {\n // Get base directory from environment variables or use default\n const baseDir = env(\"DEV_CLOUD_LOCATION_PATH\", path.join(process.cwd(), '.develop', '.local-location'))!;\n const placesFilePath = path.join(baseDir, 'places.json');\n\n /**\n * Load places data from file or use default mock data\n * @returns Places data\n */\n async function loadPlaces(): Promise<Record<string, StoredLocation>> {\n try {\n // Create directory if it doesn't exist\n try {\n await access(baseDir);\n } catch {\n await mkdir(baseDir, { recursive: true });\n }\n\n // Try to load from file\n try {\n await access(placesFilePath);\n const data = await readFile(placesFilePath, 'utf8');\n return JSON.parse(data);\n } catch {\n // File doesn't exist, create it with default data\n await writeFile(placesFilePath, JSON.stringify(DEFAULT_MOCK_LOCATIONS, null, 2), 'utf8');\n logger.info(`Created default places file at: ${placesFilePath}`);\n return DEFAULT_MOCK_LOCATIONS;\n }\n } catch (error) {\n logger.warn(`Error loading places data: ${String(error)}`);\n return DEFAULT_MOCK_LOCATIONS;\n }\n }\n\n return {\n /**\n * Get autocomplete suggestions for search box\n * Use case: User types \"Stock...\" → Show [\"Stockholm\", \"Stockton\", ...]\n */\n async getSuggestions(params: SuggestionParams): Promise<LocationSuggestion[]> {\n const places = await loadPlaces();\n const queryLower = params.query.toLowerCase();\n\n // Filter places by query\n const results = Object.values(places).filter(place => {\n // Match by title, subtitle, or address\n const matchesQuery =\n place.title.toLowerCase().includes(queryLower) ||\n (place.subtitle?.toLowerCase().includes(queryLower)) ||\n place.fullAddress.toLowerCase().includes(queryLower) ||\n (place.city?.toLowerCase().includes(queryLower));\n\n // Match by place types if provided\n const matchesPlaceTypes = !params.placeTypes ||\n params.placeTypes.includes(place.placeType || '');\n\n return matchesQuery && matchesPlaceTypes;\n });\n\n // Calculate distances if bias position is provided\n let resultsWithDistance: Array<{ place: StoredLocation; distance?: number }>;\n\n if (params.biasPosition) {\n resultsWithDistance = results.map(place => ({\n place,\n distance: calculateDistance(\n params.biasPosition!.lat,\n params.biasPosition!.lng,\n place.coordinates.lat,\n place.coordinates.lng\n )\n }));\n\n // Sort by distance\n resultsWithDistance.sort((a, b) => (a.distance || 0) - (b.distance || 0));\n } else {\n // Sort by relevance (simple alphabetical for now)\n results.sort((a, b) => a.title.localeCompare(b.title));\n resultsWithDistance = results.map(place => ({ place }));\n }\n\n // Limit results\n const maxResults = params.maxResults || 5;\n const limitedResults = resultsWithDistance.slice(0, maxResults);\n\n // Convert to LocationSuggestion\n return limitedResults.map(({ place, distance }) =>\n toLocationSuggestion(place, distance)\n );\n },\n\n /**\n * Get address from coordinates (reverse geocoding)\n * Use case: User clicks \"Get my location\" → Show \"Drottninggatan 10, Stockholm\"\n */\n async reverseGeocode(params: ReverseGeocodeParams): Promise<LocationAddress> {\n const places = await loadPlaces();\n\n // Find the closest place to the given coordinates\n const placesWithDistance = Object.values(places).map(place => ({\n place,\n distance: calculateDistance(\n params.coordinates.lat,\n params.coordinates.lng,\n place.coordinates.lat,\n place.coordinates.lng\n )\n }));\n\n // Sort by distance and get the closest\n placesWithDistance.sort((a, b) => a.distance - b.distance);\n\n const closest = placesWithDistance[0];\n\n if (!closest) {\n throw new Error('No places found near the given coordinates');\n }\n\n return toLocationAddress(closest.place);\n },\n\n /**\n * Get detailed location info if suggestion doesn't have coordinates\n * Use case: User selects suggestion → Need full coordinates\n */\n async getLocationDetails(placeId: string): Promise<LocationAddress> {\n const places = await loadPlaces();\n const place = places[placeId];\n\n if (!place) {\n throw new Error(`Place not found: ${placeId}`);\n }\n\n return toLocationAddress(place);\n },\n\n /**\n * Calculate route between origin and destination with optional waypoints\n * Use case: User plans trip → Show route on map + details\n */\n async calculateRoute(\n origin: Coordinates,\n destination: Coordinates,\n waypoints?: Coordinates[]\n // avoidTolls parameter not used in mock implementation\n ): Promise<RouteResult> {\n // Build array of all points: origin -> waypoints -> destination\n const allPoints: Coordinates[] = [origin, ...(waypoints || []), destination];\n\n // Calculate total distance and generate route coordinates\n let totalDistanceKm = 0;\n const allCoordinates: Coordinates[] = [];\n const legs: RouteResult['legs'] = [];\n\n for (let i = 0; i < allPoints.length - 1; i++) {\n const start = allPoints[i];\n const end = allPoints[i + 1];\n\n // Calculate distance for this leg\n const legDistanceMeters = calculateDistance(start.lat, start.lng, end.lat, end.lng);\n const legDistanceKm = legDistanceMeters / 1000;\n totalDistanceKm += legDistanceKm;\n\n // Generate intermediate points for smoother route visualization\n const legCoordinates: Coordinates[] = [];\n const numIntermediatePoints = 10;\n\n for (let j = 0; j <= numIntermediatePoints; j++) {\n const fraction = j / numIntermediatePoints;\n legCoordinates.push({\n lat: start.lat + (end.lat - start.lat) * fraction,\n lng: start.lng + (end.lng - start.lng) * fraction\n });\n }\n\n // Estimate duration: average speed of 50 km/h\n const legDurationMinutes = (legDistanceKm / 50) * 60;\n\n legs.push({\n distanceKm: legDistanceKm,\n durationMinutes: legDurationMinutes,\n coordinates: legCoordinates,\n startPosition: start,\n endPosition: end\n });\n\n // Add leg coordinates to all coordinates (skip first point of subsequent legs to avoid duplicates)\n if (i === 0) {\n allCoordinates.push(...legCoordinates);\n } else {\n allCoordinates.push(...legCoordinates.slice(1));\n }\n }\n\n // Calculate total duration based on total distance\n const totalDurationMinutes = (totalDistanceKm / 50) * 60;\n\n // Sample points along the route for corridor search\n const sampledPoints: RoutePoint[] = [];\n const sampleInterval = Math.max(1, Math.floor(allCoordinates.length / 20)); // ~20 samples\n let accumulatedDistance = 0;\n\n for (let i = 0; i < allCoordinates.length; i += sampleInterval) {\n if (i > 0) {\n const prev = allCoordinates[i - sampleInterval] || allCoordinates[i - 1];\n const curr = allCoordinates[i];\n accumulatedDistance += calculateDistance(prev.lat, prev.lng, curr.lat, curr.lng) / 1000;\n }\n\n sampledPoints.push({\n lat: allCoordinates[i].lat,\n lng: allCoordinates[i].lng,\n distanceFromStartKm: accumulatedDistance\n });\n }\n\n // Calculate bounding box\n const lats = allCoordinates.map(c => c.lat);\n const lngs = allCoordinates.map(c => c.lng);\n const bbox: [number, number, number, number] = [\n Math.min(...lngs), // minLng\n Math.min(...lats), // minLat\n Math.max(...lngs), // maxLng\n Math.max(...lats) // maxLat\n ];\n\n logger.info(`Calculated route: ${totalDistanceKm.toFixed(2)}km, ${totalDurationMinutes.toFixed(0)}min, ${legs.length} legs`);\n\n return {\n totalDistanceKm,\n totalDurationMinutes,\n coordinates: allCoordinates,\n sampledPoints,\n bbox,\n legs\n };\n }\n };\n}\n","import * as querystring from \"querystring\"\n\nimport \"fastify-raw-body\";\nimport { FastifyRequest, FastifyReply } from \"fastify\";\n\nimport { env, logger, tokenUtils } from \"@cloudnux/utils\";\nimport { EventBatchItemResult, EventFunctionContext, EventRequest, FunctionsService, HTTPAuth, HttpFunctionContext, HttpMethod, HTTPRequest, ScheduleFunctionContext, ScheduleRequest, WebSocketFunctionContext, WebSocketRequest } from \"@cloudnux/core-cloud-provider\";\n\nimport { QueueMessage } from \"../queue-plugin/types\";\nimport { ScheduledJob, JobExecution } from \"../schedule-plugin/types\";\nimport { WebSocketEvent } from \"../websocket-plugin/types\";\n\n\nconst getFullUrlFromRequest = (request: FastifyRequest) => {\n // Get protocol (http/https)\n const protocol = request.protocol;\n\n // Get hostname\n const hostname = request.hostname;\n\n // Get port (may be undefined if using standard ports 80/443)\n const port = request.raw.socket.localPort;\n\n // Build the host part with port if non-standard\n let hostWithPort = hostname;\n if (port &&\n !((protocol === 'http' && port === 80) ||\n (protocol === 'https' && port === 443))) {\n hostWithPort = `${hostname}:${port}`;\n }\n\n // Get the path including query parameters\n const url = request.url;\n\n // Construct the full URL\n return `${protocol}://${hostWithPort}${url}`;\n\n}\n\nexport function createLocalFunctionsService(): FunctionsService {\n return {\n createHttRequest(request: FastifyRequest) {\n const rawBody = request.rawBody;\n const isAuth = env(\"DEV_IDENTITY\")\n\n const index = request.raw.rawHeaders ? request.raw.rawHeaders?.indexOf('Authorization') : -1;\n const authorization = index !== -1 ? request.raw.rawHeaders[index + 1] : null;\n\n // Remove \"bearer\" prefix and trim whitespace\n const token = authorization ? authorization.replace(/^bearer\\s+/i, '') : null;\n const httpRequest: HTTPRequest = {\n body: String(rawBody),\n headers: request.headers,\n method: request.method as HttpMethod,\n url: getFullUrlFromRequest(request),\n matchingKey: request.routeOptions.url,\n params: request.params as Record<string, string>,\n rawQueryString: querystring.stringify(request.query as any),\n host: request.hostname,\n requestId: request.id,\n };\n\n const jwtClaims = token && tokenUtils.decodeAccessToken(token) as Record<string, string>;\n const httpAuth: HTTPAuth | undefined = isAuth ? {\n appId: env(\"DEV_APP_ID\"),\n memberId: env(\"DEV_MEMBER_ID\"),\n customerId: env(\"DEV_CUSTOMER_ID\"),\n identity: env(\"DEV_IDENTITY\") as HTTPAuth[\"identity\"],\n token: token ?? \"\",\n claims: {\n app_id: env(\"DEV_APP_ID\"),\n member_id: env(\"DEV_MEMBER_ID\"),\n customer_id: env(\"DEV_CUSTOMER_ID\"),\n identity: env(\"DEV_IDENTITY\", \"facebook\" as const)\n }\n } : jwtClaims ? {\n token: token,\n claims: jwtClaims,\n appId: jwtClaims.app_id,\n memberId: jwtClaims.member_id,\n customerId: jwtClaims.customer_id,\n identity: jwtClaims.identity as HTTPAuth[\"identity\"]\n } : undefined;\n\n return [httpRequest, httpAuth];\n },\n createScheduleRequest: (job: ScheduledJob, execution: JobExecution) => {\n const scheduleName = job.name\n const scheduleRequest: ScheduleRequest = {\n name: scheduleName,\n requestId: execution.id\n }\n return [scheduleRequest]\n },\n createEventRequest: (message: QueueMessage) => {\n const eventRequest: EventRequest = {\n body: message.payload,\n attributes: {\n ...message.attributes,\n messageId: message.id,\n },\n requestId: message.id,\n timestamp: message.timestamp,\n attempts: message.attempts\n }\n return [eventRequest];\n },\n createWebSocketRequest: (connectionId: string, event: WebSocketEvent, data: any, request: FastifyRequest) => {\n logger.info(request.params as any);\n const wsRequest: WebSocketRequest = {\n connectionId,\n event,\n url: getFullUrlFromRequest(request),\n params: request.params as Record<string, string>,\n body: data,\n queryString: request.query as Record<string, string>,\n headers: request.headers,\n requestId: request.id\n };\n return [wsRequest];\n },\n\n buildHttpResponse: (context: HttpFunctionContext, _: FastifyRequest, reply: FastifyReply) => {\n reply\n .headers(context.response.headers ?? {})\n .status(context.response.status)\n .send(context.response.body);\n },\n buildScheduleResponse: (context: ScheduleFunctionContext) => {\n if (context.response.status === \"error\") {\n throw new Error(JSON.stringify(context.response.body));\n }\n return context.response.body;\n },\n buildEventResponse: async (context: EventFunctionContext): Promise<EventBatchItemResult> => {\n if (context.response.status === \"error\") {\n const { messageId } = context.attributes<{ messageId: string }>();\n return { failureId: messageId };\n }\n return undefined;\n },\n buildWebSocketResponse: (context: WebSocketFunctionContext, _, __, ___, ____, reply: FastifyReply) => {\n if (context.response.status === \"error\") {\n if (reply) {\n return reply\n .status(context.response.statusCode ?? 500)\n .send(context.response.body);\n }\n return undefined;\n }\n return undefined;\n }\n }\n}","import { WebSocketService } from \"@cloudnux/core-cloud-provider\";\nimport { WebSocketManager } from \"../websocket-plugin/types\";\n\nlet _manager: WebSocketManager | null = null;\n\nexport function setWebSocketManager(manager: WebSocketManager) {\n _manager = manager;\n}\n\nexport function createLocalWebSocketService(): WebSocketService {\n return {\n async sendToClient(connectionId: string, data: any): Promise<void> {\n if (!_manager) {\n throw new Error(\"WebSocket plugin not initialized\");\n }\n return _manager.sendToClient(connectionId, data);\n },\n async disconnect(connectionId: string): Promise<void> {\n if (!_manager) {\n throw new Error(\"WebSocket plugin not initialized\");\n }\n return _manager.disconnect(connectionId);\n },\n };\n}\n","import Fastify, { FastifyInstance } from \"fastify\";\nimport fastifyRawBody from \"fastify-raw-body\";\nimport cors from '@fastify/cors';\nimport fastifyPrintRoutes from 'fastify-print-routes';\nimport { logger } from \"@cloudnux/utils\";\n\nimport { setWebSocketManager } from \"../services/websocket\";\nexport type RouterInstance = FastifyInstance\n\n// Create a reusable router function\nexport function createRouter(options: { logger?: boolean } = {}): RouterInstance {\n const fastify = Fastify({\n maxParamLength: 1000,\n ...(options.logger ? { loggerInstance: logger as any } : {}),\n });\n\n fastify.register(fastifyRawBody, {\n field: 'rawBody',\n encoding: 'utf8',\n });\n\n //TODO: get config from the nux.config\n fastify.register(cors, {\n \"methods\": [\"GET\", \"POST\", \"PUT\", \"DELETE\", \"PATCH\", \"OPTIONS\"],\n });\n\n fastify.register(fastifyPrintRoutes);\n\n fastify.addHook('onReady', () => {\n setWebSocketManager(fastify.websockets);\n });\n\n return fastify;\n}\n","import { CloudProvider } from \"@cloudnux/core-cloud-provider\";\nimport \"./logging/pretty-writer\";\n\nimport { createLocalEventBrokerService } from \"./services/event-broker\";\nimport { createLocalStorageService } from \"./services/storage\";\nimport { createLocalLocationService } from \"./services/locations\";\nimport { createLocalFunctionsService } from \"./services/functions\";\nimport { createLocalWebSocketService } from \"./services/websocket\";\n\nexport const localCloudProvider: CloudProvider = {\n name: \"local-cloud-provider\",\n\n createStorageService: createLocalStorageService,\n createLocationService: createLocalLocationService,\n createEventBrokerService: createLocalEventBrokerService,\n createFunctionsService: createLocalFunctionsService,\n createWebSocketService: createLocalWebSocketService\n};\n\nexport * from \"./router\";"],"mappings":"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","names":["EOL","objectProto","nativeObjectToString","symToStringTag","array","funcProto","objectProto","funcToString","hasOwnProperty","array","array","array","MAX_SAFE_INTEGER","objectProto","hasOwnProperty","objectProto","hasOwnProperty","objectProto","hasOwnProperty","HASH_UNDEFINED","array","INFINITY","array","array","rsAstralRange","rsComboMarksRange","reComboHalfMarksRange","rsComboSymbolsRange","rsComboRange","rsVarRange","rsZWJ","path","objectProto","hasOwnProperty","path","EOL","fs","path","readFile","writeFile","access","mkdir"]}
|