@ahmadissa/cloudworker-proxy 1.1.131 → 1.1.132

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.
Files changed (42) hide show
  1. package/dist/index.js +5 -5
  2. package/dist/index.js.map +4 -4
  3. package/package.json +1 -1
  4. package/dist/src/constants.d.ts +0 -21
  5. package/dist/src/encryption/aes.d.ts +0 -11
  6. package/dist/src/encryption/hash.d.ts +0 -2
  7. package/dist/src/handlers/basic-auth.d.ts +0 -17
  8. package/dist/src/handlers/bodySizeLimit.d.ts +0 -3
  9. package/dist/src/handlers/cache.d.ts +0 -5
  10. package/dist/src/handlers/cloudfunction.d.ts +0 -6
  11. package/dist/src/handlers/cors.d.ts +0 -10
  12. package/dist/src/handlers/gcpCloudrun.d.ts +0 -11
  13. package/dist/src/handlers/geo-decorator.d.ts +0 -1
  14. package/dist/src/handlers/headers.d.ts +0 -4
  15. package/dist/src/handlers/index.d.ts +0 -1
  16. package/dist/src/handlers/jwt-refresh.d.ts +0 -6
  17. package/dist/src/handlers/jwt.d.ts +0 -17
  18. package/dist/src/handlers/kv-storage-binding.d.ts +0 -8
  19. package/dist/src/handlers/kv-storage.d.ts +0 -13
  20. package/dist/src/handlers/lambda.d.ts +0 -6
  21. package/dist/src/handlers/loadbalancer.d.ts +0 -3
  22. package/dist/src/handlers/logger.d.ts +0 -1
  23. package/dist/src/handlers/oauth2.d.ts +0 -23
  24. package/dist/src/handlers/origin.d.ts +0 -1
  25. package/dist/src/handlers/rate-limit.d.ts +0 -5
  26. package/dist/src/handlers/recaptcha.d.ts +0 -5
  27. package/dist/src/handlers/recaptchav3.d.ts +0 -14
  28. package/dist/src/handlers/response.d.ts +0 -5
  29. package/dist/src/handlers/s3.d.ts +0 -9
  30. package/dist/src/handlers/signature.d.ts +0 -3
  31. package/dist/src/handlers/split.d.ts +0 -3
  32. package/dist/src/handlers/transform.d.ts +0 -4
  33. package/dist/src/handlers/user-input-validation.d.ts +0 -4
  34. package/dist/src/index.d.ts +0 -3
  35. package/dist/src/loggers/chunker.d.ts +0 -21
  36. package/dist/src/loggers/flatten.d.ts +0 -2
  37. package/dist/src/loggers/http.d.ts +0 -5
  38. package/dist/src/loggers/kinesis.d.ts +0 -5
  39. package/dist/src/proxy-hono.d.ts +0 -13
  40. package/dist/src/services/cache.d.ts +0 -7
  41. package/dist/src/services/kv-storage.d.ts +0 -27
  42. package/dist/src/utils.d.ts +0 -11
package/dist/index.js.map CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../node_modules/cloudworker-router/src/parser.js", "../node_modules/cloudworker-router/src/resolver.js", "../node_modules/cloudworker-router/src/constants.js", "../node_modules/cloudworker-router/src/context.js", "../node_modules/cloudworker-router/src/index.js", "../node_modules/lodash.get/index.js", "../node_modules/aws4fetch/dist/aws4fetch.umd.js", "../node_modules/lodash.set/index.js", "../node_modules/cookie/index.js", "../node_modules/shortid/lib/random/random-from-seed.js", "../node_modules/shortid/lib/alphabet.js", "../node_modules/shortid/lib/random/random-byte-browser.js", "../node_modules/shortid/node_modules/nanoid/format.browser.js", "../node_modules/shortid/lib/generate.js", "../node_modules/shortid/lib/build.js", "../node_modules/shortid/lib/is-valid.js", "../node_modules/shortid/lib/util/cluster-worker-id-browser.js", "../node_modules/shortid/lib/index.js", "../node_modules/shortid/index.js", "../src/index.ts", "../src/handlers/basic-auth.ts", "../src/services/cache.ts", "../src/encryption/hash.ts", "../src/utils.ts", "../src/handlers/cache.ts", "../src/handlers/cors.ts", "../src/handlers/geo-decorator.ts", "../src/handlers/jwt.ts", "../src/services/kv-storage.ts", "../src/constants.ts", "../src/handlers/kv-storage.ts", "../src/handlers/kv-storage-binding.ts", "../src/handlers/lambda.ts", "../src/handlers/loadbalancer.ts", "../src/handlers/logger.ts", "../package.json", "../src/loggers/chunker.ts", "../src/loggers/flatten.ts", "../src/loggers/http.ts", "../src/loggers/kinesis.ts", "../src/handlers/oauth2.ts", "../src/handlers/jwt-refresh.ts", "../src/encryption/aes.ts", "../src/handlers/origin.ts", "../src/handlers/response.ts", "../src/handlers/rate-limit.ts", "../src/handlers/s3.ts", "../src/handlers/signature.ts", "../src/handlers/split.ts", "../src/handlers/transform.ts", "../src/handlers/recaptcha.ts", "../src/handlers/recaptchav3.ts", "../src/handlers/user-input-validation.ts", "../src/handlers/cloudfunction.ts", "../node_modules/jose/dist/browser/runtime/webcrypto.js", "../node_modules/jose/dist/browser/lib/buffer_utils.js", "../node_modules/jose/dist/browser/runtime/base64url.js", "../node_modules/jose/dist/browser/util/errors.js", "../node_modules/jose/dist/browser/runtime/random.js", "../node_modules/jose/dist/browser/lib/crypto_key.js", "../node_modules/jose/dist/browser/lib/invalid_key_input.js", "../node_modules/jose/dist/browser/runtime/is_key_like.js", "../node_modules/jose/dist/browser/lib/is_disjoint.js", "../node_modules/jose/dist/browser/lib/is_object.js", "../node_modules/jose/dist/browser/runtime/check_key_length.js", "../node_modules/jose/dist/browser/runtime/asn1.js", "../node_modules/jose/dist/browser/key/import.js", "../node_modules/jose/dist/browser/lib/check_key_type.js", "../node_modules/jose/dist/browser/lib/validate_crit.js", "../node_modules/jose/dist/browser/jwe/flattened/encrypt.js", "../node_modules/jose/dist/browser/runtime/subtle_dsa.js", "../node_modules/jose/dist/browser/runtime/get_sign_verify_key.js", "../node_modules/jose/dist/browser/lib/epoch.js", "../node_modules/jose/dist/browser/lib/secs.js", "../node_modules/jose/dist/browser/runtime/sign.js", "../node_modules/jose/dist/browser/jws/flattened/sign.js", "../node_modules/jose/dist/browser/jws/compact/sign.js", "../node_modules/jose/dist/browser/jwt/produce.js", "../node_modules/jose/dist/browser/jwt/sign.js", "../node_modules/jose/dist/browser/jwks/remote.js", "../node_modules/redaxios/src/index.js", "../src/handlers/gcpAuth.js", "../src/handlers/gcpCloudrun.ts", "../src/handlers/headers.ts", "../src/handlers/bodySizeLimit.ts", "../src/handlers/index.ts"],
4
- "sourcesContent": ["function parseRoute({\n host = '.*',\n path = '.*',\n excludePath = null,\n method = ['.*'],\n handler,\n protocol = '.*',\n handlerName,\n headers = {},\n data,\n}) {\n const hostVariables = [];\n const pathVariables = [];\n\n const hostRegexpString = host\n // Replace any variables in the host\n .replace(/(:([^.]+))/g, ($1, $2, $3) => {\n hostVariables.push($3);\n return '([^.]+)';\n });\n\n // Then parse the variables in the path\n const pathRegexpString = path.replace(/(:([^/]+))/g, ($1, $2, $3) => {\n // Check for wildcard parameters\n if ($3.slice(-1) === '*') {\n pathVariables.push($3.slice(0, $3.length - 1));\n return '(.*)';\n }\n\n pathVariables.push($3);\n return '([^/]*)';\n });\n\n const hostRegex = new RegExp(`^${hostRegexpString}$`, 'i');\n const pathRegex = new RegExp(`^${pathRegexpString}$`, 'i');\n const excludePathRegex = excludePath ? new RegExp(`^${excludePath}$`, 'i') : null;\n const methodRegex = new RegExp(`^${method.join('|')}$`, 'i');\n const protocolRegex = new RegExp(`^${protocol}$`, 'i');\n\n return {\n hostVariables,\n pathVariables,\n host: hostRegex,\n path: pathRegex,\n excludePath: excludePathRegex,\n method: methodRegex,\n protocol: protocolRegex,\n handler,\n handlerName,\n headers,\n data,\n };\n}\n\nfunction instanceToJson(instance) {\n return [...instance].reduce((obj, item) => {\n const prop = {};\n // eslint-disable-next-line prefer-destructuring\n prop[item[0]] = item[1];\n return { ...obj, ...prop };\n }, {});\n}\n\nasync function streamToString(readable, maxSize = 1024 * 1024) {\n const results = [];\n const reader = readable.getReader();\n // eslint-disable-next-line no-undef\n const textDecoder = new TextDecoder();\n let bytesCount = 0;\n\n while (maxSize && bytesCount < maxSize) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n bytesCount += value.byteLength;\n results.push(textDecoder.decode(value));\n }\n\n const result = results.join('');\n if (maxSize) {\n return result.substring(0, maxSize);\n }\n return result;\n}\n\nfunction parseRequest(request) {\n const url = new URL(request.url);\n\n const query = instanceToJson(url.searchParams);\n const headers = instanceToJson(request.headers);\n\n if (headers.host) {\n url.hostname = headers.host;\n }\n\n let bodyText;\n let requestedBodyLength;\n\n async function getBodyText(maxSize) {\n if (requestedBodyLength >= maxSize) {\n return bodyText.substring(0, maxSize);\n }\n\n const clonedRequest = request.clone();\n bodyText = await streamToString(clonedRequest.body, maxSize);\n\n return bodyText;\n }\n\n return {\n body: request.body,\n headers,\n host: url.host,\n hostname: url.hostname,\n href: url.href,\n json: async (maxSize) => JSON.parse(getBodyText(maxSize)),\n method: request.method,\n origin: `${url.protocol}//${url.host}`,\n path: url.pathname,\n protocol: url.protocol.slice(0, -1), // Remove the semicolon at the end\n query,\n querystring: url.search.slice(1),\n search: url.search,\n text: async (maxSize) => {\n if (request.headers.get('content-type') === 'application/x-www-form-urlencoded') {\n return decodeURIComponent(await getBodyText(maxSize));\n }\n return getBodyText(maxSize);\n },\n };\n}\nmodule.exports = {\n parseRoute,\n parseRequest,\n};\n", "function getParams(req, route) {\n const params = {};\n\n const hostParamsMatch = route.host.exec(req.host);\n route.hostVariables.forEach((name, index) => {\n params[name] = hostParamsMatch[index + 1];\n });\n\n const pathParamsMatch = route.path.exec(req.path);\n route.pathVariables.forEach((name, index) => {\n params[name] = pathParamsMatch[index + 1];\n });\n\n return params;\n}\n\nfunction testHeaders(route, request) {\n let result = true;\n\n Object.keys(route.headers).forEach((key) => {\n if (request.headers[key] !== route.headers[key]) {\n result = false;\n }\n });\n\n return result;\n}\n\nfunction testProtocol(route, request) {\n return route.protocol.test(request.protocol);\n}\n\n/**\n * Checks if the route is valid for a request\n * @param {route} route\n * @param {*} request\n */\nfunction testPath(route, request) {\n // Check the method and path\n return (\n // Stupid prettier rules..\n // eslint-disable-next-line operator-linebreak\n route.method.test(request.method) &&\n // eslint-disable-next-line operator-linebreak\n route.host.test(request.host) &&\n // eslint-disable-next-line operator-linebreak\n route.path.test(request.path) &&\n // eslint-disable-next-line operator-linebreak\n testHeaders(route, request) &&\n // eslint-disable-next-line operator-linebreak\n testProtocol(route, request) &&\n (!route.excludePath || !route.excludePath.test(request.path))\n );\n}\n\nasync function recurseRoutes(ctx, routes) {\n const [route, ...nextRoutes] = routes;\n if (!route) {\n // eslint-disable-next-line\n return new Response('NOT_FOUND', {\n status: 404,\n });\n }\n\n if (!testPath(route, ctx.request)) {\n return recurseRoutes(ctx, nextRoutes);\n }\n\n ctx.state.handlers = ctx.state.handlers || [];\n // Use the provided name and fall back to the name of the function\n ctx.state.handlers.push(route.handlerName || route.handler.name);\n ctx.params = getParams(ctx.request, route);\n\n try {\n return route.handler(ctx, async (result) => recurseRoutes(result, nextRoutes));\n } catch (err) {\n err.route = route.handler.name;\n throw err;\n }\n}\n\nmodule.exports = {\n recurseRoutes,\n};\n", "module.exports = {\n methods: {\n DELETE: 'DELETE',\n GET: 'GET',\n HEAD: 'HEAD',\n OPTIONS: 'OPTIONS',\n PATCH: 'PATCH',\n POST: 'POST',\n },\n statusMessages: {\n 404: 'Not found',\n 429: 'Rate limited',\n },\n};\n", "const parser = require('./parser');\n\nmodule.exports = class Context {\n constructor(event) {\n this.request = parser.parseRequest(event.request);\n this.event = event;\n this.state = {};\n this.cloned = false;\n this.response = {\n headers: {},\n };\n this.body = '';\n this.status = 404;\n\n // Shortcuts directly on the context\n this.query = this.request.query;\n }\n\n /**\n * Gets a header from the request\n * @param {string} key\n */\n header(key) {\n return this.request.headers[key];\n }\n\n /**\n * Set a header on the response\n * @param {string} key\n * @param {string} value\n */\n set(key, value) {\n this.response.headers[key] = value;\n }\n\n /**\n * Creates a cloned context\n */\n clone() {\n const clonedContext = new Context(this.event);\n clonedContext.cloned = true;\n\n return clonedContext;\n }\n};\n", "const parser = require('./parser');\nconst resolver = require('./resolver');\nconst constants = require('./constants');\nconst Context = require('./context');\n\nmodule.exports = class Router {\n constructor() {\n this.routes = [];\n }\n\n get(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.GET, constants.methods.HEAD],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n post(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.POST],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n patch(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.PATCH],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n del(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.DELETE],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n /**\n * Adds a middleware\n * @param {*} handler\n */\n use(handler) {\n const route = parser.parseRoute({\n handler,\n // This flag can be used when responding to OPTIONS requests,\n // which is outside the scope of this project\n middleware: true,\n });\n\n this.routes.push(route);\n }\n\n /**\n * Adds a route with all possible parameters\n * @param {*} param0\n * @param {*} handler\n */\n add({ host, path, excludePath, method, handlerName, headers, protocol }, handler) {\n const route = parser.parseRoute({\n method,\n host,\n path,\n excludePath,\n handler,\n headers,\n handlerName,\n protocol,\n });\n\n this.routes.push(route);\n }\n\n /**\n *\n * @param {*} event\n */\n async resolve(event) {\n const ctx = new Context(event);\n\n try {\n await resolver.recurseRoutes(ctx, this.routes);\n\n // eslint-disable-next-line no-undef\n return new Response(ctx.body, {\n status: ctx.status,\n headers: ctx.response.headers,\n });\n } catch (err) {\n // eslint-disable-next-line no-undef\n return new Response(err.message, {\n status: 500,\n });\n }\n }\n};\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\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 match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\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/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\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 * 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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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}\n\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 return this.has(key) && delete this.__data__[key];\n}\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\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\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 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\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}\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 return true;\n}\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\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\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 data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\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 return getMapData(this, key)['delete'](key);\n}\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\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\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 getMapData(this, key).set(key, value);\n return this;\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\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\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\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) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\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 (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\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 * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\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\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\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\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\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\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 = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\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\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\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\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 `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 && 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);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\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\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\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 // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\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 && (type == 'object' || type == 'function');\n}\n\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 && typeof value == 'object';\n}\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) && objectToString.call(value) == symbolTag);\n}\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 process.\n * @returns {string} Returns the 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\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.aws4fetch = {}));\n}(this, (function (exports) { 'use strict';\n\n /**\n * @license MIT <https://opensource.org/licenses/MIT>\n * @copyright Michael Hart 2018\n */\n const encoder = new TextEncoder();\n const HOST_SERVICES = {\n appstream2: 'appstream',\n cloudhsmv2: 'cloudhsm',\n email: 'ses',\n marketplace: 'aws-marketplace',\n mobile: 'AWSMobileHubService',\n pinpoint: 'mobiletargeting',\n queue: 'sqs',\n 'git-codecommit': 'codecommit',\n 'mturk-requester-sandbox': 'mturk-requester',\n 'personalize-runtime': 'personalize',\n };\n const UNSIGNABLE_HEADERS = [\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n 'presigned-expires',\n 'expect',\n 'x-amzn-trace-id',\n 'range',\n 'connection',\n ];\n class AwsClient {\n constructor({ accessKeyId, secretAccessKey, sessionToken, service, region, cache, retries, initRetryMs }) {\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n this.service = service;\n this.region = region;\n this.cache = cache || new Map();\n this.retries = retries != null ? retries : 10;\n this.initRetryMs = initRetryMs || 50;\n }\n async sign(input, init) {\n if (input instanceof Request) {\n const { method, url, headers, body } = input;\n init = Object.assign({ method, url, headers }, init);\n if (init.body == null && headers.has('Content-Type')) {\n init.body = body != null && headers.has('X-Amz-Content-Sha256') ? body : await input.clone().arrayBuffer();\n }\n input = url;\n }\n const signer = new AwsV4Signer(Object.assign({ url: input }, init, this, init && init.aws));\n const signed = Object.assign({}, init, await signer.sign());\n delete signed.aws;\n return new Request(signed.url.toString(), signed)\n }\n async fetch(input, init) {\n for (let i = 0; i <= this.retries; i++) {\n const fetched = fetch(await this.sign(input, init));\n if (i === this.retries) {\n return fetched\n }\n const res = await fetched;\n if (res.status < 500 && res.status !== 429) {\n return res\n }\n await new Promise(resolve => setTimeout(resolve, Math.random() * this.initRetryMs * Math.pow(2, i)));\n }\n throw new Error('An unknown error occurred, ensure retries is not negative')\n }\n }\n class AwsV4Signer {\n constructor({ method, url, headers, body, accessKeyId, secretAccessKey, sessionToken, service, region, cache, datetime, signQuery, appendSessionToken, allHeaders, singleEncode }) {\n if (url == null) throw new TypeError('url is a required option')\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.method = method || (body ? 'POST' : 'GET');\n this.url = new URL(url);\n this.headers = new Headers(headers || {});\n this.body = body;\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n let guessedService, guessedRegion;\n if (!service || !region) {\n [guessedService, guessedRegion] = guessServiceRegion(this.url, this.headers);\n }\n this.service = service || guessedService || '';\n this.region = region || guessedRegion || 'us-east-1';\n this.cache = cache || new Map();\n this.datetime = datetime || new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n this.signQuery = signQuery;\n this.appendSessionToken = appendSessionToken || this.service === 'iotdevicegateway';\n this.headers.delete('Host');\n const params = this.signQuery ? this.url.searchParams : this.headers;\n if (this.service === 's3' && !this.headers.has('X-Amz-Content-Sha256')) {\n this.headers.set('X-Amz-Content-Sha256', 'UNSIGNED-PAYLOAD');\n }\n params.set('X-Amz-Date', this.datetime);\n if (this.sessionToken && !this.appendSessionToken) {\n params.set('X-Amz-Security-Token', this.sessionToken);\n }\n this.signableHeaders = ['host', ...this.headers.keys()]\n .filter(header => allHeaders || !UNSIGNABLE_HEADERS.includes(header))\n .sort();\n this.signedHeaders = this.signableHeaders.join(';');\n this.canonicalHeaders = this.signableHeaders\n .map(header => header + ':' + (header === 'host' ? this.url.host : (this.headers.get(header) || '').replace(/\\s+/g, ' ')))\n .join('\\n');\n this.credentialString = [this.datetime.slice(0, 8), this.region, this.service, 'aws4_request'].join('/');\n if (this.signQuery) {\n if (this.service === 's3' && !params.has('X-Amz-Expires')) {\n params.set('X-Amz-Expires', '86400');\n }\n params.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n params.set('X-Amz-Credential', this.accessKeyId + '/' + this.credentialString);\n params.set('X-Amz-SignedHeaders', this.signedHeaders);\n }\n if (this.service === 's3') {\n try {\n this.encodedPath = decodeURIComponent(this.url.pathname.replace(/\\+/g, ' '));\n } catch (e) {\n this.encodedPath = this.url.pathname;\n }\n } else {\n this.encodedPath = this.url.pathname.replace(/\\/+/g, '/');\n }\n if (!singleEncode) {\n this.encodedPath = encodeURIComponent(this.encodedPath).replace(/%2F/g, '/');\n }\n this.encodedPath = encodeRfc3986(this.encodedPath);\n const seenKeys = new Set();\n this.encodedSearch = [...this.url.searchParams]\n .filter(([k]) => {\n if (!k) return false\n if (this.service === 's3') {\n if (seenKeys.has(k)) return false\n seenKeys.add(k);\n }\n return true\n })\n .map(pair => pair.map(p => encodeRfc3986(encodeURIComponent(p))))\n .sort(([k1, v1], [k2, v2]) => k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0)\n .map(pair => pair.join('='))\n .join('&');\n }\n async sign() {\n if (this.signQuery) {\n this.url.searchParams.set('X-Amz-Signature', await this.signature());\n if (this.sessionToken && this.appendSessionToken) {\n this.url.searchParams.set('X-Amz-Security-Token', this.sessionToken);\n }\n } else {\n this.headers.set('Authorization', await this.authHeader());\n }\n return {\n method: this.method,\n url: this.url,\n headers: this.headers,\n body: this.body,\n }\n }\n async authHeader() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.accessKeyId + '/' + this.credentialString,\n 'SignedHeaders=' + this.signedHeaders,\n 'Signature=' + (await this.signature()),\n ].join(', ')\n }\n async signature() {\n const date = this.datetime.slice(0, 8);\n const cacheKey = [this.secretAccessKey, date, this.region, this.service].join();\n let kCredentials = this.cache.get(cacheKey);\n if (!kCredentials) {\n const kDate = await hmac('AWS4' + this.secretAccessKey, date);\n const kRegion = await hmac(kDate, this.region);\n const kService = await hmac(kRegion, this.service);\n kCredentials = await hmac(kService, 'aws4_request');\n this.cache.set(cacheKey, kCredentials);\n }\n return buf2hex(await hmac(kCredentials, await this.stringToSign()))\n }\n async stringToSign() {\n return [\n 'AWS4-HMAC-SHA256',\n this.datetime,\n this.credentialString,\n buf2hex(await hash(await this.canonicalString())),\n ].join('\\n')\n }\n async canonicalString() {\n return [\n this.method.toUpperCase(),\n this.encodedPath,\n this.encodedSearch,\n this.canonicalHeaders + '\\n',\n this.signedHeaders,\n await this.hexBodyHash(),\n ].join('\\n')\n }\n async hexBodyHash() {\n let hashHeader = this.headers.get('X-Amz-Content-Sha256');\n if (hashHeader == null) {\n if (this.body && typeof this.body !== 'string' && !('byteLength' in this.body)) {\n throw new Error('body must be a string, ArrayBuffer or ArrayBufferView, unless you include the X-Amz-Content-Sha256 header')\n }\n hashHeader = buf2hex(await hash(this.body || ''));\n }\n return hashHeader\n }\n }\n async function hmac(key, string) {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n typeof key === 'string' ? encoder.encode(key) : key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n );\n return crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(string))\n }\n async function hash(content) {\n return crypto.subtle.digest('SHA-256', typeof content === 'string' ? encoder.encode(content) : content)\n }\n function buf2hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('0' + x.toString(16)).slice(-2)).join('')\n }\n function encodeRfc3986(urlEncodedStr) {\n return urlEncodedStr.replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\n }\n function guessServiceRegion(url, headers) {\n const { hostname, pathname } = url;\n const match = hostname.replace('dualstack.', '').match(/([^.]+)\\.(?:([^.]*)\\.)?amazonaws\\.com(?:\\.cn)?$/);\n let [service, region] = (match || ['', '']).slice(1, 3);\n if (region === 'us-gov') {\n region = 'us-gov-west-1';\n } else if (region === 's3' || region === 's3-accelerate') {\n region = 'us-east-1';\n service = 's3';\n } else if (service === 'iot') {\n if (hostname.startsWith('iot.')) {\n service = 'execute-api';\n } else if (hostname.startsWith('data.jobs.iot.')) {\n service = 'iot-jobs-data';\n } else {\n service = pathname === '/mqtt' ? 'iotdevicegateway' : 'iotdata';\n }\n } else if (service === 'autoscaling') {\n const targetPrefix = (headers.get('X-Amz-Target') || '').split('.')[0];\n if (targetPrefix === 'AnyScaleFrontendService') {\n service = 'application-autoscaling';\n } else if (targetPrefix === 'AnyScaleScalingPlannerFrontendService') {\n service = 'autoscaling-plans';\n }\n } else if (region == null && service.startsWith('s3-')) {\n region = service.slice(3).replace(/^fips-|^external-1/, '');\n service = 's3';\n } else if (service.endsWith('-fips')) {\n service = service.slice(0, -5);\n } else if (region && /-\\d$/.test(service) && !/-\\d$/.test(region)) {\n [service, region] = [region, service];\n }\n return [HOST_SERVICES[service] || service, region]\n }\n\n exports.AwsClient = AwsClient;\n exports.AwsV4Signer = AwsV4Signer;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\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 match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\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/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\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 * 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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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}\n\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 return this.has(key) && delete this.__data__[key];\n}\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\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\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 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\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}\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 return true;\n}\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\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\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 data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\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 return getMapData(this, key)['delete'](key);\n}\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\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\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 getMapData(this, key).set(key, value);\n return this;\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\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\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\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) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\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 (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\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 * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\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\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\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 length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\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\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\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\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 = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\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\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\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\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 `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 && 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);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\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\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\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 // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\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 && (type == 'object' || type == 'function');\n}\n\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 && typeof value == 'object';\n}\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) && objectToString.call(value) == symbolTag);\n}\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 process.\n * @returns {string} Returns the 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\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\nvar pairSplitRegExp = /; */;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var pairs = str.split(pairSplitRegExp);\n var dec = opt.decode || decode;\n\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i];\n var eq_idx = pair.indexOf('=');\n\n // skip things that don't look like key=value\n if (eq_idx < 0) {\n continue;\n }\n\n var key = pair.substr(0, eq_idx).trim()\n var val = pair.substr(++eq_idx, pair.length).trim();\n\n // quoted values\n if ('\"' == val[0]) {\n val = val.slice(1, -1);\n }\n\n // only assign once\n if (undefined == obj[key]) {\n obj[key] = tryDecode(val, dec);\n }\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + opt.expires.toUTCString();\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n", "'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n", "'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n", "'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n", "// This file replaces `format.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nmodule.exports = function (random, alphabet, size) {\n // We can\u2019t use bytes bigger than the alphabet. To make bytes values closer\n // to the alphabet, we apply bitmask on them. We look for the closest\n // `2 ** x - 1` number, which will be bigger than alphabet size. If we have\n // 30 symbols in the alphabet, we will take 31 (00011111).\n // We do not use faster Math.clz32, because it is not available in browsers.\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n // Bitmask is not a perfect solution (in our example it will pass 31 bytes,\n // which is bigger than the alphabet). As a result, we will need more bytes,\n // than ID size, because we will refuse bytes bigger than the alphabet.\n\n // Every hardware random generator call is costly,\n // because we need to wait for entropy collection. This is why often it will\n // be faster to ask for few extra bytes in advance, to avoid additional calls.\n\n // Here we calculate how many random bytes should we call in advance.\n // It depends on ID length, mask / alphabet size and magic number 1.6\n // (which was selected according benchmarks).\n\n // -~f => Math.ceil(f) if n is float number\n // -~i => i + 1 if n is integer number\n var step = -~(1.6 * mask * size / alphabet.length)\n var id = ''\n\n while (true) {\n var bytes = random(step)\n // Compact alternative for `for (var i = 0; i < step; i++)`\n var i = step\n while (i--) {\n // If random byte is bigger than alphabet even after bitmask,\n // we refuse it by `|| ''`.\n id += alphabet[bytes[i] & mask] || ''\n // More compact than `id.length + 1 === size`\n if (id.length === +size) return id\n }\n }\n}\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n", "'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1567752802062;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 7;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n", "'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n", "'use strict';\n\nmodule.exports = 0;\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n", "'use strict';\nmodule.exports = require('./lib/index');\n", "// Proxy.ts\nimport Router from 'cloudworker-router';\nimport defaultHandlers from './handlers';\nimport { upgradeCTX } from './utils';\n\ninterface Rule {\n path: string;\n method: string;\n handlerName: string;\n options?: object;\n}\n\n// Make a wrapper that upgrades ctx once\nfunction withCtxUpgrade<TOpts>(factory: (opts: TOpts) => (ctx: any, next: any) => Promise<any>) {\n return (opts: TOpts) => {\n const fn = factory(opts);\n return async (ctx: any, next: any) => {\n if (!ctx.__upgraded) {\n upgradeCTX(ctx);\n ctx.__upgraded = true; // idempotency guard\n }\n return fn(ctx, next);\n };\n };\n}\n\nmodule.exports = class Proxy {\n router: Router;\n\n constructor(rules: Rule[] = [], handlers = {}) {\n this.router = new Router();\n\n rules.forEach((rule) => {\n const factory =\n (handlers as any)[rule.handlerName] || (defaultHandlers as any)[rule.handlerName];\n\n if (!factory) {\n throw new Error(`Handler ${rule.handlerName} is not supported`);\n }\n\n // Wrap the factory so every handler runs after ctx is upgraded\n const wrappedFactory = withCtxUpgrade(factory);\n this.router.add(rule, wrappedFactory(rule.options as any));\n });\n }\n\n async resolve(event) {\n event.cf = event?.request?.cf || {};\n return this.router.resolve(event);\n }\n};\n", "import get from 'lodash.get';\n\nconst _ = {\n get,\n};\n\nfunction setUnauthorizedResponse(ctx) {\n ctx.status = 401;\n ctx.body = 'Unauthorized';\n ctx.set('WWW-Authenticate', 'Basic');\n}\n\n/**\n * Applies authentication on the request\n * @param {*} ctx\n * @param {*} next\n */\nexport default function basicAuth(options) {\n return async (ctx, next) => {\n // Forces a new login which is the closest you can get to a logout with basic auth\n if (ctx.request.path === options.logoutPath) {\n return setUnauthorizedResponse(ctx);\n }\n\n const authHeaders = _.get(ctx, 'request.headers.authorization');\n if (!authHeaders || !authHeaders.startsWith('Basic ')) {\n return setUnauthorizedResponse(ctx);\n }\n\n const userTokens = options.users.map((user) => user.authToken);\n\n const authToken = authHeaders.substring(6);\n const userIndex = userTokens.indexOf(authToken);\n if (userIndex === -1) {\n return setUnauthorizedResponse(ctx);\n }\n\n ctx.state.user = options.users[userIndex].username;\n\n return next(ctx);\n };\n}\n", "// eslint-disable-next-line no-undef\nconst cache = caches.default;\n\nexport async function get(req) {\n const cachedResponse = await cache.match(req);\n\n return cachedResponse;\n}\n\nexport async function set(req, res) {\n return cache.put(req.href, res);\n}\n\nexport default {\n get,\n set,\n};\n", "async function hash(data) {\n const encodedData = new TextEncoder().encode(data);\n\n const hashBuffer = await crypto.subtle.digest('SHA-256', encodedData);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\nexport default hash;\n", "export function resolveParams(url, params = {}) {\n return Object.keys(params).reduce((acc, key) => acc.replace(`{${key}}`, params[key]), url);\n}\n\nexport function instanceToJson(instance): object {\n return [...instance].reduce((obj, item) => {\n const prop = {};\n // eslint-disable-next-line prefer-destructuring\n prop[item[0]] = item[1];\n return { ...obj, ...prop };\n }, {});\n}\nexport function mergeHeaders(responseHeaders, ctx) {\n Object.entries(responseHeaders).forEach(([key, value]) => {\n const existing = ctx.header(key);\n if (!existing) {\n ctx.set(key, value);\n }\n });\n}\n\nexport const upgradeCTX = (ctx) => {\n ctx.set = (key, value) => {\n ctx.response.headers[key.toLowerCase()] = value;\n };\n ctx.header = (key) => {\n return ctx.request.headers[key.toLowerCase()];\n };\n};\nexport default {\n resolveParams,\n instanceToJson,\n mergeHeaders,\n upgradeCTX,\n};\n", "import cacheService from '../services/cache';\nimport hash from '../encryption/hash';\nimport { instanceToJson } from '../utils';\n\nconst defaultHeaderBlacklist = [\n 'x-ratelimit-count',\n 'x-ratelimit-limit',\n 'x-ratelimit-reset',\n 'x-cache-hit',\n];\n\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return null;\n }\n\n return request.text();\n}\n\nasync function getCacheKey(ctx, cacheKeyTemplate) {\n if (!cacheKeyTemplate) {\n return ctx.event.request;\n }\n\n const cacheKeys = cacheKeyTemplate.match(/{.*?}/gi).map((key) => key.slice(1, -1));\n const cacheKeyValues = {};\n\n for (let i = 0; i < cacheKeys.length; i += 1) {\n const cacheKey = cacheKeys[i];\n const segments = cacheKey.split(':');\n\n switch (segments[0]) {\n case 'method':\n cacheKeyValues[cacheKey] = ctx.request.method;\n break;\n case 'path':\n cacheKeyValues[cacheKey] = ctx.request.path;\n break;\n case 'bodyHash':\n // eslint-disable-next-line no-await-in-loop\n cacheKeyValues[cacheKey] = await hash(await getBody(ctx.request));\n break;\n case 'header':\n cacheKeyValues[cacheKey] = ctx.request.headers[segments[1]] || '';\n break;\n default:\n cacheKeyValues[cacheKey] = cacheKey;\n }\n }\n\n const cacheKeyPath = encodeURIComponent(\n cacheKeyTemplate.replace(/({(.*?)})/gi, ($0, $1, key) => {\n return cacheKeyValues[key];\n }),\n );\n\n return new Request(`http://${ctx.request.hostname}/${cacheKeyPath}`);\n}\n\nexport default function cacheFactory({\n cacheDuration,\n cacheKeyTemplate,\n headerBlacklist = defaultHeaderBlacklist,\n}) {\n return async (ctx, next) => {\n const cacheKey = await getCacheKey(ctx, cacheKeyTemplate);\n\n const cachedResponse = await cacheService.get(cacheKey);\n\n if (cachedResponse) {\n ctx.body = cachedResponse.body;\n ctx.status = cachedResponse.status;\n\n const headers = instanceToJson(cachedResponse.headers);\n\n Object.keys(headers).forEach((key) => {\n ctx.set(key, headers[key]);\n });\n ctx.set('X-Cache-Hit', true);\n } else {\n await next(ctx);\n\n let clonedBody;\n\n if (ctx.body.tee) {\n [ctx.body, clonedBody] = ctx.body.tee();\n } else {\n clonedBody = ctx.body;\n }\n\n const response = new Response(clonedBody, {\n status: ctx.status,\n });\n\n Object.keys(ctx.response.headers).forEach((header) => {\n if (headerBlacklist.indexOf(header.toLowerCase()) === -1) {\n response.headers.set(header, ctx.response.headers[header]);\n }\n });\n\n if (cacheDuration) {\n response.headers.delete('Cache-Control');\n response.headers.set('Cache-Control', `max-age=${cacheDuration}`);\n }\n\n ctx.event.waitUntil(cacheService.set(cacheKey, response));\n }\n };\n}\n", "export default function corsHandler({\n allowedOrigins = ['*'],\n allowedMethods = ['GET', 'PUT', 'POST', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n allowCredentials = true,\n allowedHeaders = ['Content-Type'],\n allowedExposeHeaders = [],\n maxAge = 600,\n optionsSuccessStatus = 204,\n terminatePreflight = false,\n}) {\n return async (ctx, next) => {\n const { method } = ctx.request;\n const { origin } = ctx.request.headers;\n const requestHeaders = ctx.request.headers['access-control-request-headers'];\n\n configureOrigin(ctx, origin, allowedOrigins);\n configureCredentials(ctx, allowCredentials);\n configureExposedHeaders(ctx, allowedExposeHeaders);\n // \uD83D\uDD39 Reject if method not allowed\n if (!allowedMethods.includes(method.toUpperCase())) {\n ctx.status = 405; // Method Not Allowed\n ctx.body = { error: `Method ${method} not allowed` };\n return;\n }\n if (method === 'OPTIONS') {\n configureMethods(ctx, allowedMethods);\n configureAllowedHeaders(ctx, requestHeaders, allowedHeaders);\n configureMaxAge(ctx, maxAge);\n if (terminatePreflight) {\n ctx.status = optionsSuccessStatus;\n ctx.set('content-length', '0');\n ctx.body = '';\n // still normalize before returning, so upstream sees a clean set\n\n return;\n }\n }\n\n await next(ctx);\n };\n}\n\nfunction configureOrigin(ctx: any, origin: string, allowedOrigins: string[]) {\n if (Array.isArray(allowedOrigins)) {\n if (allowedOrigins[0] === 'origin') {\n ctx.set('Access-Control-Allow-Origin', origin);\n appendVary(ctx, 'Origin');\n return;\n }\n if (allowedOrigins[0] === '*') {\n ctx.set('Access-Control-Allow-Origin', '*');\n } else if (allowedOrigins.indexOf(origin) !== -1) {\n ctx.set('Access-Control-Allow-Origin', origin);\n appendVary(ctx, 'Origin');\n }\n }\n}\n\nfunction configureCredentials(ctx: any, allowCredentials: boolean) {\n if (allowCredentials) {\n ctx.set('Access-Control-Allow-Credentials', String(allowCredentials));\n }\n}\n\nfunction configureMethods(ctx: any, allowedMethods: string[]) {\n ctx.set('Access-Control-Allow-Methods', allowedMethods.join(','));\n}\n\nfunction configureAllowedHeaders(ctx: any, requestHeaders?: string, allowedHeaders: string[]) {\n if (allowedHeaders.length === 0 && requestHeaders) {\n // reflect requested headers\n ctx.set('Access-Control-Allow-Headers', requestHeaders);\n } else if (allowedHeaders.length) {\n ctx.set('Access-Control-Allow-Headers', allowedHeaders.join(','));\n }\n}\n\nfunction configureMaxAge(ctx: any, maxAge?: number) {\n if (maxAge) {\n ctx.set('Access-Control-Max-Age', String(maxAge));\n }\n}\n\nfunction configureExposedHeaders(ctx: any, allowedExposeHeaders: string[]) {\n if (allowedExposeHeaders.length) {\n ctx.set('Access-Control-Expose-Headers', allowedExposeHeaders.join(','));\n }\n}\n\n/** Append to Vary without clobbering existing values (case-insensitive). */\nfunction appendVary(ctx: any, value: string) {\n const cur = ctx.header('vary') || ctx.header('Vary');\n const already = cur?.split(',').map((s) => s.trim().toLowerCase()) || [];\n if (!already.includes(value.toLowerCase())) {\n ctx.set('Vary', cur ? `${cur}, ${value}` : value);\n }\n}\n", "// Data from https://datahub.io/JohnSnowLabs/country-and-continent-codes-list#data\nconst countryRegions = {\n AF: 'AS',\n AL: 'EU',\n AQ: 'AN',\n DZ: 'AF',\n AS: 'OC',\n AD: 'EU',\n AO: 'AF',\n AG: 'NA',\n AZ: 'EU',\n AR: 'SA',\n AU: 'OC',\n AT: 'EU',\n BS: 'NA',\n BH: 'AS',\n BD: 'AS',\n AM: 'EU',\n BB: 'NA',\n BE: 'EU',\n BM: 'NA',\n BT: 'AS',\n BO: 'SA',\n BA: 'EU',\n BW: 'AF',\n BV: 'AN',\n BR: 'SA',\n BZ: 'NA',\n IO: 'AS',\n SB: 'OC',\n VG: 'NA',\n BN: 'AS',\n BG: 'EU',\n MM: 'AS',\n BI: 'AF',\n BY: 'EU',\n KH: 'AS',\n CM: 'AF',\n CA: 'NA',\n CV: 'AF',\n KY: 'NA',\n CF: 'AF',\n LK: 'AS',\n TD: 'AF',\n CL: 'SA',\n CN: 'AS',\n TW: 'AS',\n CX: 'AS',\n CC: 'AS',\n CO: 'SA',\n KM: 'AF',\n YT: 'AF',\n CG: 'AF',\n CD: 'AF',\n CK: 'OC',\n CR: 'NA',\n HR: 'EU',\n CU: 'NA',\n CY: 'EU',\n CZ: 'EU',\n BJ: 'AF',\n DK: 'EU',\n DM: 'NA',\n DO: 'NA',\n EC: 'SA',\n SV: 'NA',\n GQ: 'AF',\n ET: 'AF',\n ER: 'AF',\n EE: 'EU',\n FO: 'EU',\n FK: 'SA',\n GS: 'AN',\n FJ: 'OC',\n FI: 'EU',\n AX: 'EU',\n FR: 'EU',\n GF: 'SA',\n PF: 'OC',\n TF: 'AN',\n DJ: 'AF',\n GA: 'AF',\n GE: 'EU',\n GM: 'AF',\n PS: 'AS',\n DE: 'EU',\n GH: 'AF',\n GI: 'EU',\n KI: 'OC',\n GR: 'EU',\n GL: 'NA',\n GD: 'NA',\n GP: 'NA',\n GU: 'OC',\n GT: 'NA',\n GN: 'AF',\n GY: 'SA',\n HT: 'NA',\n HM: 'AN',\n VA: 'EU',\n HN: 'NA',\n HK: 'AS',\n HU: 'EU',\n IS: 'EU',\n IN: 'AS',\n ID: 'AS',\n IR: 'AS',\n IQ: 'AS',\n IE: 'EU',\n IL: 'AS',\n IT: 'EU',\n CI: 'AF',\n JM: 'NA',\n JP: 'AS',\n KZ: 'EU',\n JO: 'AS',\n KE: 'AF',\n KP: 'AS',\n KR: 'AS',\n KW: 'AS',\n KG: 'AS',\n LA: 'AS',\n LB: 'AS',\n LS: 'AF',\n LV: 'EU',\n LR: 'AF',\n LY: 'AF',\n LI: 'EU',\n LT: 'EU',\n LU: 'EU',\n MO: 'AS',\n MG: 'AF',\n MW: 'AF',\n MY: 'AS',\n MV: 'AS',\n ML: 'AF',\n MT: 'EU',\n MQ: 'NA',\n MR: 'AF',\n MU: 'AF',\n MX: 'NA',\n MC: 'EU',\n MN: 'AS',\n MD: 'EU',\n ME: 'EU',\n MS: 'NA',\n MA: 'AF',\n MZ: 'AF',\n OM: 'AS',\n NA: 'AF',\n NR: 'OC',\n NP: 'AS',\n NL: 'EU',\n AN: 'NA',\n CW: 'NA',\n AW: 'NA',\n SX: 'NA',\n BQ: 'NA',\n NC: 'OC',\n VU: 'OC',\n NZ: 'OC',\n NI: 'NA',\n NE: 'AF',\n NG: 'AF',\n NU: 'OC',\n NF: 'OC',\n NO: 'EU',\n MP: 'OC',\n UM: 'OC',\n FM: 'OC',\n MH: 'OC',\n PW: 'OC',\n PK: 'AS',\n PA: 'NA',\n PG: 'OC',\n PY: 'SA',\n PE: 'SA',\n PH: 'AS',\n PN: 'OC',\n PL: 'EU',\n PT: 'EU',\n GW: 'AF',\n TL: 'AS',\n PR: 'NA',\n QA: 'AS',\n RE: 'AF',\n RO: 'EU',\n RU: 'EU',\n RW: 'AF',\n BL: 'NA',\n SH: 'AF',\n KN: 'NA',\n AI: 'NA',\n LC: 'NA',\n MF: 'NA',\n PM: 'NA',\n VC: 'NA',\n SM: 'EU',\n ST: 'AF',\n SA: 'AS',\n SN: 'AF',\n RS: 'EU',\n SC: 'AF',\n SL: 'AF',\n SG: 'AS',\n SK: 'EU',\n VN: 'AS',\n SI: 'EU',\n SO: 'AF',\n ZA: 'AF',\n ZW: 'AF',\n ES: 'EU',\n SS: 'AF',\n EH: 'AF',\n SD: 'AF',\n SR: 'SA',\n SJ: 'EU',\n SZ: 'AF',\n SE: 'EU',\n CH: 'EU',\n SY: 'AS',\n TJ: 'AS',\n TH: 'AS',\n TG: 'AF',\n TK: 'OC',\n TO: 'OC',\n TT: 'NA',\n AE: 'AS',\n TN: 'AF',\n TR: 'EU',\n TM: 'AS',\n TC: 'NA',\n TV: 'OC',\n UG: 'AF',\n UA: 'EU',\n MK: 'EU',\n EG: 'AF',\n GB: 'EU',\n GG: 'EU',\n JE: 'EU',\n IM: 'EU',\n TZ: 'AF',\n US: 'NA',\n VI: 'NA',\n BF: 'AF',\n UY: 'SA',\n UZ: 'AS',\n VE: 'SA',\n WF: 'OC',\n WS: 'OC',\n YE: 'AS',\n ZM: 'AF',\n XX: 'XX',\n};\n\nexport default function geoHandler() {\n return async (ctx, next) => {\n const country = ctx.request.headers['cf-ipcountry'] || 'XX';\n\n ctx.request.headers['proxy-continent'] = countryRegions[country];\n\n await next(ctx);\n };\n}\n", "/**\n * Parse and decode a JWT.\n * A JWT is three, base64 encoded, strings concatenated with \u2018.\u2019:\n * a header, a payload, and the signature.\n * The signature is \u201CURL safe\u201D, in that \u2018/+\u2019 characters have been replaced by \u2018_-\u2019\n *\n * Steps:\n * 1. Split the token at the \u2018.\u2019 character\n * 2. Base64 decode the individual parts\n * 3. Retain the raw Bas64 encoded strings to verify the signature\n */\n\nfunction base64UrlToString(base64Url) {\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const binary = atob(base64);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return new TextDecoder().decode(bytes); // handles UTF-8 properly\n}\nfunction decodeJwt(token) {\n const parts = token.split('.');\n const header = JSON.parse(base64UrlToString(parts[0]));\n const payload = JSON.parse(base64UrlToString(parts[1]));\n const signature = atob(parts[2].replace(/-/g, '+').replace(/_/g, '/'));\n\n return {\n header,\n payload,\n signature,\n raw: { header: parts[0], payload: parts[1], signature: parts[2] },\n };\n}\n\nexport default function jwtHandler({ jwksUri, iss, aud, allowPublicAccess = false }) {\n async function getJwk() {\n // TODO: override jwksTtl..\n const response = await fetch(jwksUri);\n\n const body = await response.json();\n return body.keys;\n }\n function forbidden(ctx) {\n ctx.status = 403;\n ctx.body = 'Forbidden';\n return ctx;\n }\n async function isValidJwtSignature(token) {\n const encoder = new TextEncoder();\n const data = encoder.encode([token.raw.header, token.raw.payload].join('.'));\n const signature = new Uint8Array(Array.from(token.signature).map((c) => c.charCodeAt(0)));\n\n const jwkKeys = await getJwk();\n\n const validations = await Promise.all(\n jwkKeys.map(async (jwkKey) => {\n const key = await crypto.subtle.importKey(\n 'jwk',\n jwkKey,\n { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n false,\n ['verify'],\n );\n\n return crypto.subtle.verify('RSASSA-PKCS1-v1_5', key, signature, data);\n }),\n );\n\n return validations.some((result) => result);\n }\n\n /**\n * Validates the request based on bearer token and cookie\n * @param {*} ctx\n * @param {*} next\n */\n async function handleValidate(ctx, next) {\n // Options requests should not be authenticated\n if (ctx.request.method === 'OPTIONS') {\n return next(ctx);\n }\n if (allowPublicAccess) {\n return next(ctx);\n }\n const authHeader = ctx.request.headers.authorization || '';\n if (authHeader.toLowerCase().startsWith('bearer')) {\n const token = decodeJwt(ctx.request.headers.authorization.slice(7));\n\n // Is the token expired?\n const expiryDate = new Date(token.payload.exp * 1000);\n const currentDate = new Date(Date.now());\n if (expiryDate <= currentDate) {\n return forbidden(ctx);\n }\n //check issuer\n if (!iss || token.payload.iss !== iss) {\n return forbidden(ctx);\n }\n //check audiance\n if (!aud || token.payload.aud !== aud) {\n return forbidden(ctx);\n }\n if (!(await isValidJwtSignature(token))) {\n return forbidden(ctx);\n }\n ctx.state.user = token.payload;\n return next(ctx);\n }\n\n return forbidden(ctx);\n }\n\n return handleValidate;\n}\n", "import lodashGet from 'lodash.get';\n\nconst _ = {\n get: lodashGet,\n};\n\n/**\n * This replaces the in-worker api calls for kv-storage with rest-api calls.\n */\n\nexport default class KvStorage {\n accountId: string;\n\n namespace: string;\n\n authEmail: string;\n\n authKey: string;\n\n ttl: number;\n\n constructor({\n accountId,\n namespace,\n authEmail,\n authKey,\n ttl,\n }: {\n accountId: string;\n namespace: string;\n authEmail: string;\n authKey: string;\n ttl: number;\n }) {\n this.accountId = accountId;\n this.namespace = namespace;\n this.authEmail = authEmail;\n this.authKey = authKey;\n this.ttl = ttl;\n }\n\n getNamespaceUrl() {\n return new URL(\n `https://api.cloudflare.com/client/v4/accounts/${this.accountId}/storage/kv/namespaces/${this.namespace}`,\n );\n }\n\n getUrlForKey(key) {\n return new URL(`${this.getNamespaceUrl()}/values/${key}`);\n }\n\n async list(prefix, limit = 10) {\n const url = `${this.getNamespaceUrl()}/keys?prefix=${prefix}&limit=${limit}`;\n\n const response = await fetch(url, {\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n\n if (response.ok) {\n return response.json();\n }\n return null;\n }\n\n async get(key, type?: string) {\n const url = this.getUrlForKey(key);\n\n const response = await fetch(url, {\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n\n if (response.ok) {\n switch (type) {\n case 'json':\n return response.json();\n case 'stream':\n return response;\n case 'arrayBuffer':\n return response.arrayBuffer();\n default:\n return response.text();\n }\n }\n\n return null;\n }\n\n async getWithMetadata(key, type) {\n const [value, keys] = await Promise.all([this.get(key, type), this.list(key)]);\n\n const metadata = _.get(keys, 'result.0.metadata', {});\n return {\n value,\n metadata,\n };\n }\n\n async put(key, value, metadata = {}) {\n const url = this.getUrlForKey(key);\n const searchParams = new URLSearchParams();\n\n if (this.ttl) {\n searchParams.append('expiration_ttl', this.ttl.toString());\n }\n\n const headers = {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n };\n\n url.search = searchParams.toString();\n\n const formData = new FormData();\n formData.append('value', value);\n formData.append('metadata', JSON.stringify(metadata));\n\n const response = await fetch(url.toString(), {\n method: 'PUT',\n headers,\n body: value,\n });\n\n return response.ok;\n }\n\n async delete(key) {\n const url = this.getUrlForKey(key);\n\n return fetch(url, {\n method: 'DELETE',\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n }\n}\n", "export default {\n methodsMethodsWithBody: ['POST', 'PUT', 'PATCH'],\n http: {\n statusMessages: {\n // eslint-disable-next-line\n 404: 'Not Found',\n },\n },\n mime: {\n css: 'text/css',\n csv: 'text/csv',\n html: 'text/html',\n ico: 'image/microsoft.vnd.icon',\n jpeg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n png: 'image/png',\n svg: 'image/svg+xml',\n xml: 'application/xml',\n },\n};\n", "import KvStorage from '../services/kv-storage';\nimport constants from '../constants';\nimport utils from '../utils';\n\nfunction setDefaultLocation(url, defaultExtension, defaultIndexDocument) {\n if (url === '/' && defaultIndexDocument) {\n return defaultIndexDocument;\n }\n\n const file = url.split('/').pop();\n const extention = file.split('.').pop();\n if (extention !== file) {\n return url;\n }\n\n return `${url}.${defaultExtension}`;\n}\n\nexport default function kvStorageHandler({\n kvAccountId,\n kvNamespace,\n kvAuthEmail,\n kvAuthKey,\n kvBasePath = '',\n kvKey = '{file}',\n defaultExtension = 'html',\n defaultIndexDocument,\n defaultErrorDocument,\n mime = {},\n mode = 'rest',\n}) {\n const kvStorage = new KvStorage({\n accountId: kvAccountId,\n namespace: kvNamespace,\n authEmail: kvAuthEmail,\n authKey: kvAuthKey,\n mode,\n });\n\n const mimeMappings = { ...constants.mime, ...mime };\n\n return async (ctx) => {\n const path = utils.resolveParams(kvKey, ctx.params);\n\n const key =\n path === '' && defaultIndexDocument\n ? defaultIndexDocument\n : setDefaultLocation(path, defaultExtension);\n\n let result = await kvStorage.get(kvBasePath + key);\n\n if (!result && defaultErrorDocument) {\n result = await kvStorage.get(kvBasePath + defaultErrorDocument);\n }\n\n if (result) {\n ctx.status = 200;\n ctx.body = result;\n ctx.set('Content-Type', mimeMappings[key.split('.').pop()] || 'text/plain');\n } else {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n }\n };\n}\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n};\n\nfunction setDefaultLocation(url, defaultExtension, defaultIndexDocument) {\n if (url === '/' && defaultIndexDocument) {\n return defaultIndexDocument;\n }\n\n const file = url.split('/').pop();\n const extention = file.split('.').pop();\n if (extention !== file) {\n return url;\n }\n\n return `${url}.${defaultExtension}`;\n}\n\nfunction validateEtag(request, response) {\n const requestEtag = _.get(request, 'headers.if-none-match');\n const responseEtag = _.get(response, 'metadata.headers.etag');\n\n if (!requestEtag) {\n return false;\n }\n\n return requestEtag === responseEtag;\n}\n\nexport default function kvStorageHandler({\n kvNamespaceBinding,\n kvBasePath = '',\n kvKey = '{file}',\n defaultExtension = 'html',\n defaultIndexDocument,\n defaultErrorDocument,\n}) {\n async function get(key) {\n const response = await global[kvNamespaceBinding].getWithMetadata(key);\n\n return response;\n }\n\n return async (ctx) => {\n const path = utils.resolveParams(kvKey, ctx.params);\n\n const key =\n path === '' && defaultIndexDocument\n ? defaultIndexDocument\n : setDefaultLocation(path, defaultExtension);\n\n let result = await get(kvBasePath + key);\n\n if (!result && defaultErrorDocument) {\n result = await get(kvBasePath + defaultErrorDocument);\n }\n\n if (result) {\n if (validateEtag(ctx.request, result)) {\n ctx.status = 304;\n } else {\n ctx.status = result.status;\n ctx.body = result.value;\n\n const headers = _.get(result, 'metadata.headers', {});\n\n Object.keys(headers).forEach((header) => {\n ctx.set(header, headers[header]);\n });\n }\n } else {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n }\n };\n}\n", "import { AwsClient } from 'aws4fetch';\nimport utils from '../utils';\n\nexport default function lambdaHandlerFactory({ accessKeyId, secretAccessKey, region, lambdaName }) {\n const aws = new AwsClient({\n accessKeyId,\n secretAccessKey,\n });\n\n return async (ctx) => {\n const url = `https://lambda.${region}.amazonaws.com/2015-03-31/functions/${lambdaName}/invocations`;\n\n // TODO: Guess we should pass the body here?\n const event = {};\n\n const response = await aws.fetch(url, { body: JSON.stringify(event) });\n\n ctx.status = response.status;\n ctx.body = response.body;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport lodashSet from 'lodash.set';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n set: lodashSet,\n};\n\nfunction filterCfHeaders(headers) {\n const result = {};\n\n Object.keys(headers).forEach((key) => {\n if (!key.startsWith('cf')) {\n result[key] = headers[key];\n }\n });\n\n return result;\n}\n\nfunction getSource(sources) {\n // Random for now. Maybe support sticky sessions, least connected or fallback\n return sources[Math.floor(Math.random() * sources.length)];\n}\n\nexport default function loadbalancerHandler({ sources = [] }) {\n return async (ctx) => {\n const source = getSource(sources);\n\n const options = {\n method: ctx.request.method,\n headers: filterCfHeaders(ctx.request.headers),\n redirect: 'manual',\n // Allow other handlers to add cloudflare headers to the request\n cf: ctx.request.cf,\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n options.body = clonedRequest.body;\n }\n\n const url = utils.resolveParams(source.url, ctx.params);\n\n if (source.resolveOverride) {\n const resolveOverride = utils.resolveParams(source.resolveOverride, ctx.request.params);\n // Cloudflare header to change host.\n // Only possible to add proxied cf dns within the same account.\n _.set(options, 'cf.resolveOverride', resolveOverride);\n }\n\n const response = await fetch(url + ctx.request.search, options);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport packageJson from '../../package.json';\nimport HttpLogger from '../loggers/http';\nimport KinesisLogger from '../loggers/kinesis';\n\nconst _ = {\n get: lodashGet,\n};\n\n/**\n * Returns the first 10 KB of the body\n * @param {*} ctx\n */\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return null;\n }\n\n return request.text();\n}\n\nexport default function logger(options) {\n let logService;\n\n switch (options.type) {\n case 'http':\n logService = new HttpLogger(options);\n break;\n case 'kinesis':\n logService = new KinesisLogger(options);\n break;\n default:\n throw new Error(`Log service type not supported: ${options.type}`);\n }\n\n return async (ctx, next) => {\n ctx.state['logger-startDate'] = new Date();\n const body = await getBody(ctx.request);\n\n try {\n await next(ctx);\n\n const data = {\n message: 'START',\n requestIp: _.get(ctx, 'request.headers.x-real-ip'),\n requestId: _.get(ctx, 'request.requestId'),\n request: {\n headers: _.get(ctx, 'request.headers'),\n method: _.get(ctx, 'request.method'),\n url: _.get(ctx, 'request.href'),\n protocol: _.get(ctx, 'request.protocol'),\n body,\n },\n response: {\n status: ctx.status,\n headers: _.get(ctx, 'response.headers'),\n },\n handlers: _.get(ctx, 'state.handlers', []).join(','),\n route: _.get(ctx, 'route.name'),\n timestamp: new Date().toISOString(),\n ttfb: new Date() - ctx.state['logger-startDate'],\n redirectUrl: ctx.userRedirect,\n severity: 30,\n proxyVersion: packageJson.version,\n };\n\n ctx.event.waitUntil(logService.log(data));\n } catch (err) {\n const errData = {\n request: {\n headers: _.get(ctx, 'request.headers'),\n method: _.get(ctx, 'request.method'),\n handlers: _.get(ctx, 'state.handlers', []).join(','),\n url: _.get(ctx, 'request.href'),\n body,\n },\n message: 'ERROR',\n stack: err.stack,\n error: err.message,\n severity: 50,\n proxyVersion: packageJson.version,\n };\n\n ctx.event.waitUntil(logService.log(errData));\n }\n };\n}\n", "{\n \"name\": \"@ahmadissa/cloudworker-proxy\",\n \"version\": \"1.1.131\",\n \"description\": \"An api gateway for cloudflare workers\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ahmadissa/cloudworker-proxy.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ahmadissa/cloudworker-proxy/issues\"\n },\n \"homepage\": \"https://github.com/ahmadissa/cloudworker-proxy#readme\",\n \"author\": \"Ahmad Issa\",\n \"keywords\": [\n \"cloudflare\",\n \"workers\",\n \"api\",\n \"gateway\",\n \"proxy\"\n ],\n \"main\": \"dist/index.js\",\n \"files\": [\n \"dist/**\"\n ],\n \"scripts\": {\n \"build\": \"esbuild --bundle src/index.ts --format=cjs --outdir=dist --sourcemap --minify\",\n \"lint\": \"eslint src\",\n \"package\": \"bun install; npm run build\",\n \"test\": \"npm run unit && npm run lint\",\n \"public\": \"npm run package && npm publish\",\n \"test:integration\": \"node integration/run.js\",\n \"unit\": \"bun test\",\n \"semantic-release\": \"semantic-release\",\n \"prepare\": \"husky install\"\n },\n \"release\": {\n \"branches\": [\n \"master\"\n ],\n \"plugins\": [\n \"@semantic-release/commit-analyzer\",\n \"@semantic-release/release-notes-generator\",\n [\n \"@semantic-release/npm\",\n {\n \"npmPublish\": false\n }\n ],\n [\n \"@semantic-release/git\",\n {\n \"assets\": [\n \"docs\",\n \"package.json\"\n ],\n \"message\": \"chore(release): ${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n }\n ]\n ]\n },\n \"dependencies\": {\n \"aws4fetch\": \"1.0.13\",\n \"build\": \"^0.1.4\",\n \"cloudworker-router\": \"1.11.2\",\n \"cookie\": \"0.4.1\",\n \"jose\": \"^5.1.0\",\n \"lodash.get\": \"4.4.2\",\n \"lodash.set\": \"4.3.2\",\n \"package\": \"^1.0.1\",\n \"redaxios\": \"^0.5.1\",\n \"shortid\": \"2.2.16\"\n },\n \"devDependencies\": {\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/jest\": \"^29.5.5\",\n \"@types/mocha\": \"^10.0.1\",\n \"@types/node\": \"^20.5.9\",\n \"@typescript-eslint/eslint-plugin\": \"^6.6.0\",\n \"@typescript-eslint/parser\": \"^6.6.0\",\n \"bun\": \"1.0.3\",\n \"dotenv\": \"8.2.0\",\n \"esbuild\": \"^0.19.2\",\n \"eslint\": \"7.13.0\",\n \"eslint-config-airbnb-base\": \"14.2.1\",\n \"eslint-config-prettier\": \"6.15.0\",\n \"eslint-plugin-import\": \"2.22.1\",\n \"eslint-plugin-prettier\": \"3.1.4\",\n \"fetch-mock\": \"9.11.0\",\n \"husky\": \"^8.0.3\",\n \"node-fetch\": \"2.6.1\",\n \"prettier\": \"2.1.2\",\n \"semantic-release\": \"^22.0.4\",\n \"typescript\": \"^5.2.2\",\n \"wrangler\": \"^3.7.0\"\n },\n \"directories\": {\n \"example\": \"examples\",\n \"test\": \"test\"\n }\n}\n", "/**\n * Concatinates messages in chunks based on count and timeout\n */\nexport default class chunker {\n maxSeconds: number;\n\n maxSize: number;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n queue: any[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sink: any;\n\n flushing: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n timer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolveTimer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rejectTimer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cancelationToken: any;\n\n constructor({ maxSize = 10, maxSeconds = 10, sink }) {\n this.maxSize = maxSize;\n this.maxSeconds = maxSeconds;\n this.queue = []; // The queue of messages to process\n this.sink = sink; // The function to call with a complete chunk\n this.flushing = false; // A state flag to avoid multiple simultaneous flushes\n this.timer = null; // A promise to pass to ctx.waitUntil\n }\n\n async push(message) {\n this.queue.push(message);\n\n if (this.queue.length > this.maxSize) {\n return this.flush();\n }\n\n if (!this.timer) {\n this.timer = new Promise((resolve, reject) => {\n // Expose the functions to resolve or reject the timer promise\n this.resolveTimer = resolve;\n this.rejectTimer = reject;\n this.cancelationToken = setTimeout(async () => {\n try {\n resolve(await this.flush());\n } catch (err) {\n reject(err);\n }\n }, this.maxSeconds * 1000);\n });\n }\n\n return this.timer;\n }\n\n async flush() {\n if (this.flushing) {\n return;\n }\n\n this.flushing = true;\n\n try {\n const data = this.queue.join('\\n');\n this.queue = [];\n\n const result = await this.sink(data);\n\n if (this.timer) {\n clearTimeout(this.cancelationToken);\n this.resolveTimer(result);\n }\n } catch (err) {\n if (this.timer) {\n this.rejectTimer(err);\n }\n } finally {\n this.timer = null;\n this.flushing = false;\n }\n }\n}\n", "function flatten(obj, delimiter = '.', path = '') {\n if (!(obj instanceof Object)) {\n // Remove the last delimiter\n if (path.endsWith(delimiter)) {\n return { [path.slice(0, path.length - 1)]: obj };\n }\n return { [path]: obj };\n }\n\n return Object.keys(obj).reduce((output, key) => {\n if (obj[key] == null) {\n return output;\n }\n\n return { ...output, ...flatten(obj[key], delimiter, path + key + delimiter) };\n }, {});\n}\n\nexport default flatten;\n", "import Chunker from './chunker';\nimport flatten from './flatten';\n\nexport default class HttpLogger {\n constructor(options) {\n this.url = options.url;\n this.contentType = options.contentType;\n this.delimiter = options.delimiter;\n this.chunker = new Chunker({ sink: this.sendMessage.bind(this), ...options });\n }\n\n async log(message) {\n const flatMessage = flatten(message, this.delimiter);\n\n await this.chunker.push(JSON.stringify(flatMessage));\n }\n\n async sendMessage(data) {\n return fetch(this.url, {\n body: data,\n method: 'POST',\n headers: {\n 'Content-Type': this.contentType,\n },\n });\n }\n}\n", "import { AwsClient } from 'aws4fetch';\nimport Chunker from './chunker';\nimport flatten from './flatten';\n\nexport default class KinesisLogger {\n constructor(options) {\n this.delimiter = options.delimiter;\n this.chunker = new Chunker({ sink: this.sendMessage.bind(this), ...options });\n this.awsClient = new AwsClient({\n accessKeyId: options.accessKeyId,\n secretAccessKey: options.secretAccessKey,\n region: options.region,\n });\n this.streamName = options.streamName;\n this.region = options.region;\n }\n\n async log(message) {\n const flatMessage = flatten(message, this.delimiter);\n\n await this.chunker.push(JSON.stringify(flatMessage));\n }\n\n async sendMessage(message) {\n const data = btoa(`${JSON.stringify(message)}\\n`);\n const body = JSON.stringify({\n DeliveryStreamName: this.streamName,\n Record: {\n Data: data,\n },\n });\n\n const url = `https://firehose.${this.region}.amazonaws.com`;\n const request = new Request(url, {\n method: 'POST',\n body,\n headers: {\n 'X-Amz-Target': 'Firehose_20150804.PutRecord',\n 'Content-Type': ' application/x-amz-json-1.1',\n },\n });\n\n return this.awsClient.fetch(request);\n }\n}\n", "import cookie from 'cookie';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\nimport shortid from 'shortid';\nimport KvStorage from '../services/kv-storage';\nimport jwtRefresh from './jwt-refresh';\nimport aes from '../encryption/aes';\n\nconst _ = {\n get,\n set,\n};\n\nfunction getCookie({ cookieHeader = '', cookieName }) {\n const cookies = cookie.parse(cookieHeader);\n return cookies[cookieName];\n}\n\n/**\n * Very simplistic form serializer that works for this case but probably nothing else :)\n * @param {*} obj\n */\nfunction serializeFormData(obj) {\n return Object.keys(obj)\n .map((key) => `${key}=${encodeURIComponent(obj[key])}`)\n .join('&');\n}\n\nfunction isBrowser(accept = '') {\n return accept.split(',').indexOf('text/html') !== -1;\n}\n\nexport default function oauth2Handler({\n cookieName = 'proxy',\n cookieHttpOnly = true,\n allowPublicAccess = false,\n kvAccountId,\n kvNamespace,\n kvAuthEmail,\n kvAuthKey,\n kvTtl = 2592000, // A month\n oauth2AuthDomain,\n oauth2ClientId,\n oauth2ClientSecret,\n oauth2Audience,\n oauth2Scopes = [],\n oauth2CallbackPath = '/callback',\n oauth2CallbackType = 'cookie',\n oauth2LogoutPath = '/logout',\n oauth2LoginPath = '/login',\n oauth2ServerTokenPath = '/oauth/token',\n oauth2ServerAuthorizePath = '',\n oauth2ServerLogoutPath,\n}) {\n const kvStorage = new KvStorage({\n accountId: kvAccountId,\n namespace: kvNamespace,\n authEmail: kvAuthEmail,\n authKey: kvAuthKey,\n ttl: kvTtl,\n });\n\n const authDomain = oauth2AuthDomain;\n const callbackPath = oauth2CallbackPath;\n const callbackType = oauth2CallbackType;\n const serverTokenPath = oauth2ServerTokenPath;\n const serverAuthorizePath = oauth2ServerAuthorizePath;\n const serverLogoutPath = oauth2ServerLogoutPath;\n const clientId = oauth2ClientId;\n const clientSecret = oauth2ClientSecret;\n const audience = oauth2Audience;\n const logoutPath = oauth2LogoutPath;\n const loginPath = oauth2LoginPath;\n const scopes = oauth2Scopes;\n const scope = scopes.join('%20');\n\n async function getTokenFromCode(code, redirectUrl) {\n const tokenUrl = `${authDomain}${serverTokenPath}`;\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: serializeFormData({\n code,\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: redirectUrl,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Authentication failed');\n }\n\n const body = await response.json();\n\n return {\n ...body,\n expires: Date.now() + body.expires_in * 1000,\n };\n }\n\n async function handleLogout(ctx) {\n const sessionCookie = getCookie({\n cookieHeader: ctx.request.headers.cookie,\n cookieName,\n });\n\n if (sessionCookie) {\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n\n // Remove the cookie\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, '', {\n domain: `.${domain}`,\n path: '/',\n maxAge: 0,\n }),\n );\n }\n\n const returnToPath = getRedirectTo(ctx);\n\n if (oauth2ServerLogoutPath) {\n const returnTo = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${returnToPath}`,\n );\n // Bounce to remove cookie at the oauth server\n ctx.set(\n 'Location',\n `${authDomain}${serverLogoutPath}?client_id=${clientId}&returnTo=${returnTo}`,\n );\n } else {\n ctx.set('Location', returnToPath);\n }\n\n ctx.status = 302;\n }\n\n async function handleCallback(ctx) {\n const redirectUrl = ctx.request.href.split('?')[0];\n\n const body = await getTokenFromCode(ctx.request.query.code, redirectUrl);\n\n const key = shortid.generate();\n const salt = await aes.getSalt();\n const sessionToken = `${key}.${salt}`;\n\n const aesKey = await aes.deriveAesGcmKey(key, salt);\n const data = await aes.encrypt(aesKey, JSON.stringify(body));\n\n await kvStorage.put(key, data);\n\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n\n ctx.status = 302;\n\n if (callbackType === 'query') {\n ctx.set('Location', `${ctx.request.query.state}?auth=${sessionToken}`);\n } else {\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, sessionToken, {\n httpOnly: cookieHttpOnly,\n domain: `.${domain}`,\n path: '/',\n maxAge: 60 * 60 * 24 * 365, // 1 year\n }),\n );\n ctx.set('Location', ctx.request.query.state);\n }\n }\n\n /**\n * Try to set a bearer based on the session cookie\n * @param {*} ctx\n * @param {*} sessionToken\n */\n async function getSession(ctx, sessionToken) {\n const [key, salt] = sessionToken.split('.');\n const data = await kvStorage.get(key);\n\n if (data) {\n const aesKey = await aes.deriveAesGcmKey(key, salt);\n const authData = await aes.decrypt(aesKey, data);\n\n let tokens = JSON.parse(authData);\n\n if (tokens.expires < Date.now()) {\n tokens = await jwtRefresh({\n refresh_token: tokens.refresh_token,\n clientId,\n authDomain,\n clientSecret,\n });\n\n const encryptedAuthData = await aes.encrypt(aesKey, JSON.stringify(tokens));\n\n await kvStorage.put(key, encryptedAuthData);\n }\n\n ctx.state.accessToken = tokens.access_token;\n if (ctx.state.accessToken) {\n ctx.request.headers.authorization = `bearer ${ctx.state.accessToken}`;\n }\n } else {\n // Remove the cookie if the session can't be found in the kv-store\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n // Remove the cookie\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, '', {\n domain: `.${domain}`,\n maxAge: 0,\n }),\n );\n }\n }\n\n function getRedirectTo(ctx) {\n const redirectTo = _.get(ctx, 'request.query.redirect-to');\n if (redirectTo) {\n return redirectTo;\n }\n\n const referer = _.get(ctx, 'request.headers.referer');\n // TODO: Add a whitelist with regex\n if (referer) {\n return referer;\n }\n\n // Default to the root\n return '/';\n }\n\n /**\n * Explicitly logins a user\n * @param {*} ctx\n * @param {*} next\n */\n async function handleLogin(ctx) {\n // Options requests should return a 200\n if (ctx.request.method === 'OPTIONS') {\n ctx.status = 200;\n } else {\n const redirectTo = getRedirectTo(ctx);\n\n const state = encodeURIComponent(redirectTo || '/');\n const encodedRedirectUri = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${callbackPath}`,\n );\n\n ctx.status = 302;\n ctx.set(\n 'location',\n `${authDomain}${serverAuthorizePath}/authorize?state=${state}&client_id=${clientId}&response_type=code&scope=${scope}&audience=${audience}&redirect_uri=${encodedRedirectUri}`,\n );\n }\n }\n\n /**\n * Validates the request based on bearer token and cookie\n * @param {*} ctx\n * @param {*} next\n */\n async function handleValidate(ctx, next) {\n // Options requests should not be authenticated. Requests with auth headers are passed through\n if (ctx.request.method === 'OPTIONS') {\n await next(ctx);\n } else if (\n _.get(ctx, 'request.headers.authorization', '').toLowerCase().startsWith('bearer ')\n ) {\n // If the request has a auth-header, use this and pass on.\n _.set(ctx, 'state.access_token', ctx.request.headers.authorization.slice(7));\n await next(ctx);\n } else {\n // Check for the token in the querystring first and fallback to the cookie\n const sessionToken =\n _.get(ctx, 'request.query.auth') ||\n getCookie({\n cookieHeader: ctx.request.headers.cookie,\n cookieName,\n });\n\n // If the client didn't supply a bearer token, try to fetch one based on the cookie\n if (sessionToken) {\n await getSession(ctx, sessionToken);\n }\n\n const accessToken = _.get(ctx, 'state.accessToken');\n\n if (accessToken || allowPublicAccess) {\n await next(ctx);\n } else if (isBrowser(ctx.request.headers.accept)) {\n // For now we just code the requested url in the state. Could pass more properties in a serialized object\n const state = encodeURIComponent(ctx.request.href);\n const encodedRedirectUri = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${callbackPath}`,\n );\n\n ctx.status = 302;\n ctx.set(\n 'location',\n `${authDomain}${serverAuthorizePath}/authorize?state=${state}&client_id=${clientId}&response_type=code&scope=${scope}&audience=${audience}&redirect_uri=${encodedRedirectUri}`,\n );\n } else {\n ctx.status = 403;\n ctx.body = 'Forbidden';\n }\n }\n }\n\n return async (ctx, next) => {\n switch (ctx.request.path) {\n case callbackPath:\n await handleCallback(ctx);\n break;\n case logoutPath:\n await handleLogout(ctx);\n break;\n case loginPath:\n await handleLogin(ctx);\n break;\n default:\n await handleValidate(ctx, next);\n }\n };\n}\n", "export default async function refreshAccessToken({\n // eslint-disable-next-line camelcase\n refresh_token,\n authDomain,\n clientId,\n clientSecret,\n}) {\n const tokenUrl = `${authDomain}/oauth/token`;\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Authentication failed');\n }\n\n const body = await response.json();\n\n return {\n ...body,\n expires: Date.now() + body.expires_in * 1000,\n refresh_token,\n };\n}\n", "const aesKeyBitsLength = 256;\nconst pbkdf2Iterations = 1000;\n\nconst PBKDF2 = 'PBKDF2';\nconst AESGCM = 'AES-GCM';\nconst SHA256 = 'SHA-256';\nconst RAW = 'raw';\n\nfunction base64ToArraybuffer(base64) {\n const binary = atob(base64.replace(/_/g, '/').replace(/-/g, '+'));\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nfunction arraybufferTobase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return btoa(binary).replace(/\\//g, '_').replace(/\\+/g, '-');\n}\n\n// function arraybufferToString(buf) {\n// return String.fromCharCode.apply(null, new Uint16Array(buf));\n// }\n\n// function stringToArraybuffer(str) {\n// const buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char\n// const bufView = new Uint16Array(buf);\n// for (let i = 0, strLen = str.length; i < strLen; i += 1) {\n// bufView[i] = str.charCodeAt(i);\n// }\n// return buf;\n// }\n\nfunction stringToArraybuffer(str) {\n return new TextEncoder().encode(str).buffer;\n}\n\nfunction arraybufferToString(buf) {\n return new TextDecoder().decode(buf);\n}\n\nasync function getKeyMaterial(password) {\n const enc = new TextEncoder();\n return crypto.subtle.importKey(RAW, enc.encode(password), { name: PBKDF2 }, false, ['deriveKey']);\n}\n\nasync function deriveAesGcmKey(seed, salt) {\n const key = await getKeyMaterial(seed);\n const textEncoder = new TextEncoder();\n\n const saltBuffer = textEncoder.encode(salt.replace(/_/g, '/').replace(/-/g, '+'));\n\n return crypto.subtle.deriveKey(\n {\n name: PBKDF2,\n salt: saltBuffer,\n iterations: pbkdf2Iterations,\n hash: { name: SHA256 },\n },\n key,\n {\n name: AESGCM,\n length: aesKeyBitsLength,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\nasync function getSalt() {\n const salt = crypto.getRandomValues(new Uint8Array(8));\n return arraybufferTobase64(salt);\n}\n\nasync function decrypt(key, message) {\n const bytes = base64ToArraybuffer(message);\n const iv = bytes.slice(0, 16);\n const data = bytes.slice(16);\n\n const array = await crypto.subtle.decrypt(\n {\n name: AESGCM,\n iv,\n },\n key,\n data,\n );\n\n return arraybufferToString(array);\n}\n\nasync function encrypt(key, message) {\n const iv = crypto.getRandomValues(new Uint8Array(16));\n\n const encrypted = await crypto.subtle.encrypt(\n {\n name: AESGCM,\n iv,\n },\n key,\n stringToArraybuffer(message),\n );\n\n const bytes = new Uint8Array(encrypted.byteLength + iv.byteLength);\n bytes.set(iv, 0);\n bytes.set(new Uint8Array(encrypted), iv.byteLength);\n\n return arraybufferTobase64(bytes);\n}\n\nexport default {\n decrypt,\n deriveAesGcmKey,\n encrypt,\n getSalt,\n};\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n};\n\nfunction filterCfHeaders(headers) {\n const result = {};\n\n Object.keys(headers).forEach((key) => {\n if (!key.startsWith('cf')) {\n result[key] = headers[key];\n }\n });\n\n return result;\n}\n\nexport default function originHandler(options) {\n const { localOriginOverride, backend } = options;\n\n return async (ctx) => {\n const url = process.env.LOCAL\n ? `${localOriginOverride || ctx.request.origin}${ctx.request.path}`\n : `${backend}${ctx.request.path}`;\n\n const requestOptions = {\n headers: filterCfHeaders(ctx.request.headers),\n method: ctx.request.method,\n redirect: 'manual',\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(url, requestOptions);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import utils from '../utils';\n\nexport default function responseHandler({\n body = '',\n headers = {},\n status = 200,\n}: {\n body?: string | Record<string, object>;\n headers?: Record<string, string>;\n status?: number;\n}) {\n return async (ctx) => {\n if (body instanceof Object) {\n ctx.body = JSON.stringify(body);\n ctx.set('Content-Type', 'application/json');\n } else {\n ctx.body = utils.resolveParams(body, ctx.params);\n }\n\n ctx.status = status;\n\n Object.keys(headers).forEach((key) => {\n ctx.set(key, utils.resolveParams(headers[key], ctx.params));\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport lodashSet from 'lodash.set';\n\nconst _ = {\n get: lodashGet,\n set: lodashSet,\n};\n\nexport default function rateLimitHandler({ type = 'IP', scope = 'default', limit = 1000 }) {\n const buckets = {};\n\n function getKey(currentMinute, headers) {\n const ip = headers['x-real-ip'];\n\n if (type === 'IP') {\n return `minute.${currentMinute}.${scope}.${ip}`;\n }\n\n return `minute.${currentMinute}.${scope}.account`;\n }\n\n function cleanUp(currentMinute) {\n const minutes = _.get(buckets, 'minutes', {});\n Object.keys(minutes).forEach((minute) => {\n if (minute !== currentMinute) {\n delete buckets.minutes.minute;\n }\n });\n }\n\n return async (ctx, next) => {\n const currentMinute = Math.trunc(Date.now() / (1000 * 60));\n const reset = Math.trunc(currentMinute * 60 + 60 - Date.now() / 1000);\n\n const key = getKey(currentMinute, ctx.request.headers);\n\n let count = _.get(buckets, key, 0);\n\n // Don't count head and options reqests\n if (['HEAD', 'OPTIONS'].indexOf(ctx.request.method) === -1) {\n count += 1;\n }\n\n // ctx.set('X-Ratelimit-Limit', limit);\n // ctx.set('X-Ratelimit-Count', count);\n // ctx.set('X-Ratelimit-Reset', reset);\n\n _.set(buckets, key, count);\n\n if (limit < count) {\n ctx.status = 429;\n return;\n }\n\n cleanUp(currentMinute);\n\n await next(ctx);\n };\n}\n", "import { AwsClient } from 'aws4fetch';\nimport utils from '../utils';\nimport constants from '../constants';\n\nfunction getEndpoint(\n endpoint?: string,\n options: { region?: string; bucket?: string; forcePathStyle?: boolean } = {},\n) {\n // See https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html\n if (endpoint && options.forcePathStyle) {\n const url = new URL(endpoint);\n return `${url.protocol}//${url.host}/${options.bucket}`;\n }\n if (endpoint) {\n const url = new URL(endpoint);\n return `${url.protocol}//${options.bucket}.${url.host}`;\n }\n if (options.forcePathStyle && options.region) {\n return `https://s3.${options.region}.amazonaws.com/${options.bucket}`;\n }\n if (options.forcePathStyle) {\n return `https://s3.amazonaws.com/${options.bucket}`;\n }\n if (options.region) {\n return `https://${options.bucket}.s3.${options.region}.amazonaws.com`;\n }\n return `https://${options.bucket}.s3.amazonaws.com`;\n}\n\nexport default function s3HandlerFactory({\n accessKeyId,\n secretAccessKey,\n bucket,\n region,\n endpoint,\n forcePathStyle,\n enableBucketOperations = false,\n}: {\n accessKeyId: string;\n secretAccessKey: string;\n bucket: string;\n region?: string;\n endpoint?: string;\n forcePathStyle?: boolean;\n enableBucketOperations?: boolean;\n}) {\n const aws = new AwsClient({\n accessKeyId,\n region,\n secretAccessKey,\n });\n\n const resolvedEndpoint = getEndpoint(endpoint, {\n region,\n bucket,\n forcePathStyle,\n });\n\n return async (ctx) => {\n if (ctx.params.file === undefined && !enableBucketOperations) {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n return;\n }\n\n const url = ctx.params.file\n ? utils.resolveParams(`${resolvedEndpoint}/{file}`, ctx.params)\n : resolvedEndpoint; // Bucket operations\n\n const headers: Record<string, string> = {};\n\n if (ctx.request.headers.range) {\n headers.range = ctx.request.headers.range;\n }\n\n const response = await aws.fetch(url, {\n method: ctx.method || ctx.request.method,\n headers,\n });\n\n ctx.status = response.status;\n ctx.body = response.body;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "let keyCache;\n\nfunction str2ab(str) {\n const uintArray = new Uint8Array(\n str.split('').map((char) => {\n return char.charCodeAt(0);\n }),\n );\n return uintArray;\n}\n\nasync function getKey(secret) {\n if (!keyCache) {\n keyCache = await crypto.subtle.importKey(\n 'raw',\n str2ab(secret),\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign', 'verify'],\n );\n }\n return keyCache;\n}\n\nasync function sign(path, secret) {\n const key = await getKey(secret);\n\n const sig = await crypto.subtle.sign({ name: 'HMAC' }, key, str2ab(path));\n return btoa(String.fromCharCode.apply(null, new Uint8Array(sig)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\nexport default function signatureHandler({ secret }) {\n return async (ctx, next) => {\n const pathWithQuery = (ctx.request.path + ctx.request.search).replace(\n /([?|&]sign=[\\w|-]+)/,\n '',\n );\n\n const signature = await sign(pathWithQuery, secret);\n\n if (signature !== ctx.query.sign) {\n ctx.status = 403;\n return;\n }\n\n await next(ctx);\n };\n}\n", "export default function splitHandler({ host }) {\n if (!host) {\n throw new Error('Need to specify a host for the split middleware.');\n }\n\n return async (ctx, next) => {\n const duplicateContext = ctx.clone();\n duplicateContext.cloned = true;\n\n duplicateContext.request = {\n ...duplicateContext.request,\n href: duplicateContext.request.href.replace(duplicateContext.request.href, host),\n host,\n };\n\n ctx.event.waitUntil(next(duplicateContext));\n await next(ctx);\n };\n}\n", "async function streamBody(readable, writable, regexes) {\n const reader = readable.getReader();\n const writer = writable.getWriter();\n\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n const chunk = textDecoder.decode(value);\n const transformedChunk = transformChunk(chunk, regexes);\n const encodedText = textEncoder.encode(transformedChunk);\n\n // The writer throws in cloudflare if the connection is closed\n // eslint-disable-next-line no-await-in-loop\n await writer.write(encodedText);\n }\n\n await writer.close();\n}\n\nfunction template(data, args) {\n return data.replace(/{{\\$(\\d)}}/g, ($0, index) => {\n return args[parseInt(index, 10)];\n });\n}\n\nfunction transformChunk(chunk, regexes) {\n return regexes.reduce((acc, transform) => {\n return acc.replace(transform.regex, (...args) => {\n return template(transform.replace, args);\n });\n }, chunk);\n}\n\nexport default function transformFactory({ transforms = [], statusCodes = [200] }) {\n const regexes = transforms.map((transform) => {\n return {\n regex: new RegExp(transform.regex, 'g'),\n replace: transform.replace,\n };\n });\n\n return async (ctx, next) => {\n await next(ctx);\n\n const { body } = ctx;\n\n if (statusCodes.indexOf(ctx.status) === -1) {\n // Only tranform on matching statuscodes\n } else if (typeof body === 'string') {\n ctx.body = transformChunk(body, regexes);\n } else {\n // eslint-disable-next-line no-undef\n const { readable, writable } = new TransformStream();\n streamBody(body, writable, regexes);\n ctx.body = readable;\n }\n };\n}\n", "async function createAssessment({\n projectID = 'your-project-id',\n API_KEY = 'GCP_API_KEY',\n token = 'action-token',\n siteKey = 'siteKey',\n expectedAction = 'action-name',\n}) {\n const res = await fetch(\n `https://recaptchaenterprise.googleapis.com/v1/projects/${projectID}/assessments?key=${API_KEY}`,\n {\n body: JSON.stringify({\n event: {\n token: token,\n siteKey: siteKey,\n expectedAction: expectedAction,\n },\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n );\n const response = await res.json();\n if (!response.tokenProperties.valid) {\n console.error(\n 'The CreateAssessment call failed because the token was: ' +\n response.tokenProperties.invalidReason,\n );\n\n return 0;\n }\n if (response.tokenProperties.action === expectedAction) {\n response.riskAnalysis.reasons.forEach((reason) => {\n console.log(reason);\n });\n return response.riskAnalysis.score;\n } else {\n console.error(\n 'reCAPTCHA action error:' + expectedAction + \":action:\" + response.tokenProperties.action,\n );\n return null;\n }\n}\n\nconst getAction = (url: string): string => {\n url = url.split(\"?\")[0];\n return url.replace(/\\W/g, \"\").slice(0, 100);\n};\nexport default function recaptcha({ projectID, API_KEY, siteKey }) {\n function getToken(headers) {\n return { token: headers['g-recaptcha-token'] };\n }\n\n return async (ctx, next) => {\n const { token } = getToken(ctx.request.headers);\n const expectedAction = getAction(ctx.request.path);\n const score =\n (await createAssessment({\n projectID: projectID,\n API_KEY: API_KEY,\n token: token,\n siteKey: siteKey,\n expectedAction: expectedAction,\n })) || 0;\n if (score < 0.5) {\n ctx.status = 409;\n return;\n }\n await next(ctx);\n };\n}\n", "/**\n * Verify reCAPTCHA v3 (free) token using Google's siteverify endpoint.\n * Docs: https://developers.google.com/recaptcha/docs/v3\n */\nasync function verifyRecaptchaV3({\n secret, // Your reCAPTCHA v3 SECRET key\n token, // Token from client (grecaptcha.execute)\n expectedAction, // Action you used on the client (e.g., \"login\")\n remoteip, // (optional) user's IP (e.g., CF-Connecting-IP)\n}: {\n secret: string;\n token: string | null | undefined;\n expectedAction: string;\n remoteip?: string;\n}): Promise<{ ok: boolean; score: number; action?: string; errorCodes?: string[] }> {\n if (!token) return { ok: false, score: 0, errorCodes: ['missing-input-response'] };\n\n const body = new URLSearchParams({\n secret,\n response: token,\n ...(remoteip ? { remoteip } : {}),\n });\n\n const res = await fetch('https://www.google.com/recaptcha/api/siteverify', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body,\n });\n\n const json = (await res.json()) as {\n success: boolean;\n score?: number;\n action?: string;\n 'error-codes'?: string[];\n };\n\n const success = !!json.success;\n const actionOK = json.action === expectedAction; // tighten/loosen as you prefer\n const score = typeof json.score === 'number' ? json.score : 0;\n\n return {\n ok: success && actionOK,\n score,\n action: json.action,\n errorCodes: json['error-codes'],\n };\n}\n\n/** Build an action name from URL path (like your original) */\nconst getActionFromPath = (pathOrUrl: string): string => {\n // Support both \"/v2/api/user/onLogin\" and full URLs\n let path = pathOrUrl;\n try {\n // If it's a full URL, extract pathname\n path = new URL(pathOrUrl, 'http://dummy').pathname;\n } catch {\n /* ignore */\n }\n path = path.split('?')[0] || '/';\n return path.replace(/\\W/g, '').slice(0, 100);\n};\n\n/** Get a header value from either a Headers object or a plain object */\nconst getHeader = (\n headers: Headers | Record<string, string | string[] | undefined>,\n name: string,\n): string | null => {\n if (headers instanceof Headers) return headers.get(name);\n const val = (headers as any)[name] ?? (headers as any)[name.toLowerCase()];\n if (Array.isArray(val)) return val[0] ?? null;\n return (val as string) ?? null;\n};\n\n/**\n * Middleware for reCAPTCHA v3 (free).\n * Expects the client to send the token in a header (choose one):\n * - \"x-recaptcha-token\" (default)\n * - \"g-recaptcha-token\" (fallback)\n * Optionally send \"x-recaptcha-action\" to specify action explicitly.\n */\nexport default function recaptchaV3({\n secret, // reCAPTCHA v3 SECRET\n headerName = 'x-recaptcha-token',\n minScore = 0.5,\n requireActionMatch = true, // flip to false to ignore action mismatch\n}: {\n secret: string;\n headerName?: string;\n minScore?: number;\n requireActionMatch?: boolean;\n}) {\n return async (ctx: any, next: (ctx?: any) => Promise<unknown>) => {\n const req = ctx.request?.req || ctx.request || ctx; // accommodate various frameworks\n\n const headers =\n (req.headers as Headers | Record<string, string | string[] | undefined>) ??\n (ctx.request?.headers as any) ??\n {};\n\n const token = getHeader(headers, headerName) || getHeader(headers, 'g-recaptcha-token') || null;\n\n // Prefer explicit action header, else derive from path/url\n const explicitAction = getHeader(headers, 'x-recaptcha-action');\n const expectedAction =\n explicitAction || getActionFromPath(ctx.request?.path || ctx.request?.url || req.url || '/');\n\n const remoteip =\n getHeader(headers, 'cf-connecting-ip') || getHeader(headers, 'x-forwarded-for') || undefined;\n\n const result = await verifyRecaptchaV3({\n secret,\n token,\n expectedAction,\n remoteip,\n });\n\n const ok = result.score >= minScore && result.ok;\n\n if (!ok) {\n const payload = {\n action: result.action,\n expectedAction,\n score: result.score ?? 0,\n errors: result.errorCodes ?? [],\n };\n console.warn('[reCAPTCHA] failed:' + JSON.stringify(payload));\n\n // Koa-style:\n ctx.status = 409; // or 403\n ctx.set?.('Content-Type', 'application/json');\n ctx.body = JSON.stringify({ error: 'reCAPTCHA verification failed' });\n return;\n }\n\n await next(ctx);\n };\n}\n", "// import { Buffer } from 'buffer';\n// const isJson = (str) => {\n// try {\n// JSON.parse(str);\n// } catch (e) {\n// return false;\n// }\n// return true;\n// };\n// const isBase64 = (str) => {\n// if (typeof str !== 'string') return false;\n// if (str === '' || str.trim() === '') {\n// return false;\n// }\n// var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// return base64regex.test(str);\n// };\nconst XSSCheck = (value) => {\n // if (isBase64(value)) {\n // value = Buffer.from(value, 'base64').toString();\n // }\n return !new RegExp('(\\b)(onS+)(s*)=|javascript|<(|/|[^/>][^>]+|/[^>][^>]+)>').test(value);\n};\nconst validateKeyValue = (key, value, allowedKeys) => {\n if (!XSSCheck(value) || !allowedKeys[key](value)) {\n return false;\n }\n return true;\n};\n\nconst isObjectOrArray = (body) => {\n if (body === null) return false;\n if (typeof body !== 'object') return false;\n if (Array.isArray(body)) {\n if (!body[0] || typeof body[0] !== 'object') return false;\n }\n return true;\n};\nconst validateObject = (obj, allowedKeys) => {\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (!allowedKeys[key]) {\n console.error('key not allowed', key);\n return false;\n }\n if (obj[key] === null) obj[key] = '';\n if (isObjectOrArray(obj[key])) {\n if (!validateObject(obj[key], allowedKeys)) {\n console.error('error validating key+validateObject:', key);\n return false;\n }\n } else {\n if (!validateKeyValue(key, obj[key], allowedKeys)) {\n console.error('error validating key+validateKeyValue:', key);\n return false;\n }\n }\n }\n return true;\n};\nconst isObject = (body) => {\n if (body == null) return false;\n if (typeof body !== 'object') return false;\n return true;\n};\n\nconst validateQuery = (ctx, allowedKeys) => {\n const query = ctx['query'];\n if (!isObject(query)) {\n return false;\n }\n return validateObject(query, allowedKeys);\n};\nexport const validatePathParms = (ctx, allowedKeys) => {\n const params = ctx.params;\n if (!params) return true;\n if (!isObject(params)) {\n return false;\n }\n return validateObject(params, allowedKeys);\n};\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return {};\n }\n try {\n const body = await request.text();\n return JSON.parse(body);\n } catch {}\n return {};\n}\nexport default function userInputValidation({ allowedKeys }) {\n const status = 422;\n return async (ctx, next) => {\n if (!allowedKeys) {\n ctx.status = 501;\n return false;\n }\n if (!validatePathParms(ctx, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n if (!validateQuery(ctx, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n const body = await getBody(ctx.request);\n if (!validateObject(body, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n await next(ctx);\n };\n}\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport { getToken } from './gcpAuth';\nimport utils from '../utils';\nconst _ = {\n get: lodashGet,\n};\n\nexport default function cloudfunction({ project_id, region, functionName, serviceAccount }) {\n return async (ctx, next) => {\n // Extract query parameters from the context\n const queryParams = _.get(ctx, 'request.query', {});\n\n // Build query string from parameters\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `https://${region}-${project_id}.cloudfunctions.net/${functionName}`;\n // Construct the full URL with query parameters\n const urlWithParms = `https://${region}-${project_id}.cloudfunctions.net/${functionName}${\n queryString ? `?${queryString}` : ''\n }`;\n\n const token = await getToken(serviceAccount, url);\n ctx.request.headers['X-Serverless-Authorization'] = `Bearer ${token}`;\n\n const requestOptions = {\n headers: ctx.request.headers,\n method: ctx.request.method,\n redirect: 'manual',\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(urlWithParms, requestOptions);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n utils.mergeHeaders(responseHeaders, ctx);\n await next(ctx);\n };\n}\n", "export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n", "import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n buffers.forEach((buffer) => {\n buf.set(buffer, i);\n i += buffer.length;\n });\n return buf;\n}\nexport function p2s(alg, p2sInput) {\n return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function lengthAndInput(input) {\n return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n const iterations = Math.ceil((bits >> 3) / 32);\n const res = new Uint8Array(iterations * 32);\n for (let iter = 0; iter < iterations; iter++) {\n const buf = new Uint8Array(4 + secret.length + value.length);\n buf.set(uint32be(iter + 1));\n buf.set(secret, 4);\n buf.set(value, 4 + secret.length);\n res.set(await digest('sha256', buf), iter * 32);\n }\n return res.slice(0, bits >> 3);\n}\n", "import { encoder, decoder } from '../lib/buffer_utils.js';\nexport const encodeBase64 = (input) => {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n};\nexport const encode = (input) => {\n return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nexport const decodeBase64 = (encoded) => {\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n};\nexport const decode = (input) => {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n};\n", "export class JOSEError extends Error {\n static get code() {\n return 'ERR_JOSE_GENERIC';\n }\n constructor(message) {\n super(message);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static get code() {\n return 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n }\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n }\n}\nexport class JWTExpired extends JOSEError {\n static get code() {\n return 'ERR_JWT_EXPIRED';\n }\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n static get code() {\n return 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nexport class JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n static get code() {\n return 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nexport class JWEDecryptionFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n this.message = 'decryption operation failed';\n }\n static get code() {\n return 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nexport class JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n static get code() {\n return 'ERR_JWE_INVALID';\n }\n}\nexport class JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n static get code() {\n return 'ERR_JWS_INVALID';\n }\n}\nexport class JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n static get code() {\n return 'ERR_JWT_INVALID';\n }\n}\nexport class JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n static get code() {\n return 'ERR_JWK_INVALID';\n }\n}\nexport class JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n static get code() {\n return 'ERR_JWKS_INVALID';\n }\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n this.message = 'no applicable key found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n this.message = 'multiple matching keys found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nSymbol.asyncIterator;\nexport class JWKSTimeout extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_TIMEOUT';\n this.message = 'request timed out';\n }\n static get code() {\n return 'ERR_JWKS_TIMEOUT';\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n this.message = 'signature verification failed';\n }\n static get code() {\n return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\n", "import crypto from './webcrypto.js';\nexport default crypto.getRandomValues.bind(crypto);\n", "function unusable(name, prop = 'algorithm.name') {\n return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usages) {\n if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n let msg = 'CryptoKey does not support this operation, its usages must include ';\n if (usages.length > 2) {\n const last = usages.pop();\n msg += `one of ${usages.join(', ')}, or ${last}.`;\n }\n else if (usages.length === 2) {\n msg += `one of ${usages[0]} or ${usages[1]}.`;\n }\n else {\n msg += `${usages[0]}.`;\n }\n throw new TypeError(msg);\n }\n}\nexport function checkSigCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'EdDSA': {\n if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n throw unusable('Ed25519 or Ed448');\n }\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\nexport function checkEncCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM': {\n if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n throw unusable('AES-GCM');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (!isAlgorithm(key.algorithm, 'AES-KW'))\n throw unusable('AES-KW');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'ECDH': {\n switch (key.algorithm.name) {\n case 'ECDH':\n case 'X25519':\n case 'X448':\n break;\n default:\n throw unusable('ECDH, X25519, or X448');\n }\n break;\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n throw unusable('PBKDF2');\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n throw unusable('RSA-OAEP');\n const expected = parseInt(alg.slice(9), 10) || 1;\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\n", "function message(msg, actual, ...types) {\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor && actual.constructor.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nexport default (actual, ...types) => {\n return message('Key must be ', actual, ...types);\n};\nexport function withAlg(alg, actual, ...types) {\n return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n", "import { isCryptoKey } from './webcrypto.js';\nexport default (key) => {\n return isCryptoKey(key);\n};\nexport const types = ['CryptoKey'];\n", "const isDisjoint = (...headers) => {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n};\nexport default isDisjoint;\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n", "export default (alg, key) => {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n};\n", "import crypto, { isCryptoKey } from './webcrypto.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { encodeBase64, decodeBase64 } from './base64url.js';\nimport formatPEM from '../lib/format_pem.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { types } from './is_key_like.js';\nconst genericExport = async (keyType, keyFormat, key) => {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n if (!key.extractable) {\n throw new TypeError('CryptoKey is not extractable');\n }\n if (key.type !== keyType) {\n throw new TypeError(`key is not a ${keyType} key`);\n }\n return formatPEM(encodeBase64(new Uint8Array(await crypto.subtle.exportKey(keyFormat, key))), `${keyType.toUpperCase()} KEY`);\n};\nexport const toSPKI = (key) => {\n return genericExport('public', 'spki', key);\n};\nexport const toPKCS8 = (key) => {\n return genericExport('private', 'pkcs8', key);\n};\nconst findOid = (keyData, oid, from = 0) => {\n if (from === 0) {\n oid.unshift(oid.length);\n oid.unshift(0x06);\n }\n let i = keyData.indexOf(oid[0], from);\n if (i === -1)\n return false;\n const sub = keyData.subarray(i, i + oid.length);\n if (sub.length !== oid.length)\n return false;\n return sub.every((value, index) => value === oid[index]) || findOid(keyData, oid, i + 1);\n};\nconst getNamedCurve = (keyData) => {\n switch (true) {\n case findOid(keyData, [0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07]):\n return 'P-256';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x22]):\n return 'P-384';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x23]):\n return 'P-521';\n case findOid(keyData, [0x2b, 0x65, 0x6e]):\n return 'X25519';\n case findOid(keyData, [0x2b, 0x65, 0x6f]):\n return 'X448';\n case findOid(keyData, [0x2b, 0x65, 0x70]):\n return 'Ed25519';\n case findOid(keyData, [0x2b, 0x65, 0x71]):\n return 'Ed448';\n default:\n throw new JOSENotSupported('Invalid or unsupported EC Key Curve or OKP Key Sub Type');\n }\n};\nconst genericImport = async (replace, keyFormat, pem, alg, options) => {\n let algorithm;\n let keyUsages;\n const keyData = new Uint8Array(atob(pem.replace(replace, ''))\n .split('')\n .map((c) => c.charCodeAt(0)));\n const isPublic = keyFormat === 'spki';\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n };\n keyUsages = isPublic ? ['encrypt', 'wrapKey'] : ['decrypt', 'unwrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n const namedCurve = getNamedCurve(keyData);\n algorithm = namedCurve.startsWith('P-') ? { name: 'ECDH', namedCurve } : { name: namedCurve };\n keyUsages = isPublic ? [] : ['deriveBits'];\n break;\n }\n case 'EdDSA':\n algorithm = { name: getNamedCurve(keyData) };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported \"alg\" (Algorithm) value');\n }\n return crypto.subtle.importKey(keyFormat, keyData, algorithm, options?.extractable ?? false, keyUsages);\n};\nexport const fromPKCS8 = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\\s)/g, 'pkcs8', pem, alg, options);\n};\nexport const fromSPKI = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\\s)/g, 'spki', pem, alg, options);\n};\nfunction getElement(seq) {\n let result = [];\n let next = 0;\n while (next < seq.length) {\n let nextPart = parseElement(seq.subarray(next));\n result.push(nextPart);\n next += nextPart.byteLength;\n }\n return result;\n}\nfunction parseElement(bytes) {\n let position = 0;\n let tag = bytes[0] & 0x1f;\n position++;\n if (tag === 0x1f) {\n tag = 0;\n while (bytes[position] >= 0x80) {\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n let length = 0;\n if (bytes[position] < 0x80) {\n length = bytes[position];\n position++;\n }\n else if (length === 0x80) {\n length = 0;\n while (bytes[position + length] !== 0 || bytes[position + length + 1] !== 0) {\n if (length > bytes.byteLength) {\n throw new TypeError('invalid indefinite form length');\n }\n length++;\n }\n const byteLength = position + length + 2;\n return {\n byteLength,\n contents: bytes.subarray(position, position + length),\n raw: bytes.subarray(0, byteLength),\n };\n }\n else {\n let numberOfDigits = bytes[position] & 0x7f;\n position++;\n length = 0;\n for (let i = 0; i < numberOfDigits; i++) {\n length = length * 256 + bytes[position];\n position++;\n }\n }\n const byteLength = position + length;\n return {\n byteLength,\n contents: bytes.subarray(position, byteLength),\n raw: bytes.subarray(0, byteLength),\n };\n}\nfunction spkiFromX509(buf) {\n const tbsCertificate = getElement(getElement(parseElement(buf).contents)[0].contents);\n return encodeBase64(tbsCertificate[tbsCertificate[0].raw[0] === 0xa0 ? 6 : 5].raw);\n}\nfunction getSPKI(x509) {\n const pem = x509.replace(/(?:-----(?:BEGIN|END) CERTIFICATE-----|\\s)/g, '');\n const raw = decodeBase64(pem);\n return formatPEM(spkiFromX509(raw), 'PUBLIC KEY');\n}\nexport const fromX509 = (pem, alg, options) => {\n let spki;\n try {\n spki = getSPKI(pem);\n }\n catch (cause) {\n throw new TypeError('Failed to parse the X.509 certificate', { cause });\n }\n return fromSPKI(spki, alg, options);\n};\n", "import { decode as decodeBase64URL } from '../runtime/base64url.js';\nimport { fromSPKI, fromPKCS8, fromX509 } from '../runtime/asn1.js';\nimport asKeyObject from '../runtime/jwk_to_key.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport isObject from '../lib/is_object.js';\nexport async function importSPKI(spki, alg, options) {\n if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n throw new TypeError('\"spki\" must be SPKI formatted string');\n }\n return fromSPKI(spki, alg, options);\n}\nexport async function importX509(x509, alg, options) {\n if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n throw new TypeError('\"x509\" must be X.509 formatted string');\n }\n return fromX509(x509, alg, options);\n}\nexport async function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n }\n return fromPKCS8(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg || (alg = jwk.alg);\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n if (jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n case 'EC':\n case 'OKP':\n return asKeyObject({ ...jwk, alg });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n", "import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport isKeyLike, { types } from '../runtime/is_key_like.js';\nconst symmetricTypeCheck = (alg, key) => {\n if (key instanceof Uint8Array)\n return;\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, ...types, 'Uint8Array'));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, ...types));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (usage === 'sign' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm signing must be of type \"private\"`);\n }\n if (usage === 'decrypt' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n if (key.algorithm && usage === 'verify' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm verifying must be of type \"public\"`);\n }\n if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n};\nconst checkKeyType = (alg, key, usage) => {\n const symmetric = alg.startsWith('HS') ||\n alg === 'dir' ||\n alg.startsWith('PBES2') ||\n /^A\\d{3}(?:GCM)?KW$/.test(alg);\n if (symmetric) {\n symmetricTypeCheck(alg, key);\n }\n else {\n asymmetricTypeCheck(alg, key, usage);\n }\n};\nexport default checkKeyType;\n", "import { JOSENotSupported } from '../util/errors.js';\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\nexport default validateCrit;\n", "import { encode as base64url } from '../../runtime/base64url.js';\nimport encrypt from '../../runtime/encrypt.js';\nimport generateIv from '../../lib/iv.js';\nimport encryptKeyManagement from '../../lib/encrypt_key_management.js';\nimport { JOSENotSupported, JWEInvalid } from '../../util/errors.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport const unprotected = Symbol();\nexport class FlattenedEncrypt {\n constructor(plaintext) {\n if (!(plaintext instanceof Uint8Array)) {\n throw new TypeError('plaintext must be an instance of Uint8Array');\n }\n this._plaintext = plaintext;\n }\n setKeyManagementParameters(parameters) {\n if (this._keyManagementParameters) {\n throw new TypeError('setKeyManagementParameters can only be called once');\n }\n this._keyManagementParameters = parameters;\n return this;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n if (this._sharedUnprotectedHeader) {\n throw new TypeError('setSharedUnprotectedHeader can only be called once');\n }\n this._sharedUnprotectedHeader = sharedUnprotectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n setAdditionalAuthenticatedData(aad) {\n this._aad = aad;\n return this;\n }\n setContentEncryptionKey(cek) {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey can only be called once');\n }\n this._cek = cek;\n return this;\n }\n setInitializationVector(iv) {\n if (this._iv) {\n throw new TypeError('setInitializationVector can only be called once');\n }\n this._iv = iv;\n return this;\n }\n async encrypt(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {\n throw new JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {\n throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n ...this._sharedUnprotectedHeader,\n };\n validateCrit(JWEInvalid, new Map(), options?.crit, this._protectedHeader, joseHeader);\n if (joseHeader.zip !== undefined) {\n throw new JOSENotSupported('JWE \"zip\" (Compression Algorithm) Header Parameter is not supported.');\n }\n const { alg, enc } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n if (typeof enc !== 'string' || !enc) {\n throw new JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n }\n let encryptedKey;\n if (alg === 'dir') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');\n }\n }\n else if (alg === 'ECDH-ES') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');\n }\n }\n let cek;\n {\n let parameters;\n ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, key, this._cek, this._keyManagementParameters));\n if (parameters) {\n if (options && unprotected in options) {\n if (!this._unprotectedHeader) {\n this.setUnprotectedHeader(parameters);\n }\n else {\n this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };\n }\n }\n else {\n if (!this._protectedHeader) {\n this.setProtectedHeader(parameters);\n }\n else {\n this._protectedHeader = { ...this._protectedHeader, ...parameters };\n }\n }\n }\n }\n this._iv || (this._iv = generateIv(enc));\n let additionalData;\n let protectedHeader;\n let aadMember;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n if (this._aad) {\n aadMember = base64url(this._aad);\n additionalData = concat(protectedHeader, encoder.encode('.'), encoder.encode(aadMember));\n }\n else {\n additionalData = protectedHeader;\n }\n const { ciphertext, tag } = await encrypt(enc, this._plaintext, cek, this._iv, additionalData);\n const jwe = {\n ciphertext: base64url(ciphertext),\n iv: base64url(this._iv),\n tag: base64url(tag),\n };\n if (encryptedKey) {\n jwe.encrypted_key = base64url(encryptedKey);\n }\n if (aadMember) {\n jwe.aad = aadMember;\n }\n if (this._protectedHeader) {\n jwe.protected = decoder.decode(protectedHeader);\n }\n if (this._sharedUnprotectedHeader) {\n jwe.unprotected = this._sharedUnprotectedHeader;\n }\n if (this._unprotectedHeader) {\n jwe.header = this._unprotectedHeader;\n }\n return jwe;\n }\n}\n", "import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n", "import crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkSigCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nexport default function getCryptoKey(alg, key, usage) {\n if (isCryptoKey(key)) {\n checkSigCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n}\n", "export default (date) => Math.floor(date.getTime() / 1000);\n", "const minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;\nexport default (str) => {\n const matched = REGEX.exec(str);\n if (!matched) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[1]);\n const unit = matched[2].toLowerCase();\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n return Math.round(value);\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n return Math.round(value * minute);\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n return Math.round(value * hour);\n case 'day':\n case 'days':\n case 'd':\n return Math.round(value * day);\n case 'week':\n case 'weeks':\n case 'w':\n return Math.round(value * week);\n default:\n return Math.round(value * year);\n }\n};\n", "import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getSignKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nexport default sign;\n", "import { encode as base64url } from '../../runtime/base64url.js';\nimport sign from '../../runtime/sign.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport checkKeyType from '../../lib/check_key_type.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport class FlattenedSign {\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this._payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this._protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyType(alg, key, 'sign');\n let payload = this._payload;\n if (b64) {\n payload = encoder.encode(base64url(payload));\n }\n let protectedHeader;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n const data = concat(protectedHeader, encoder.encode('.'), payload);\n const signature = await sign(alg, key, data);\n const jws = {\n signature: base64url(signature),\n payload: '',\n };\n if (b64) {\n jws.payload = decoder.decode(payload);\n }\n if (this._unprotectedHeader) {\n jws.header = this._unprotectedHeader;\n }\n if (this._protectedHeader) {\n jws.protected = decoder.decode(protectedHeader);\n }\n return jws;\n }\n}\n", "import { FlattenedSign } from '../flattened/sign.js';\nexport class CompactSign {\n constructor(payload) {\n this._flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this._flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n", "import epoch from '../lib/epoch.js';\nimport isObject from '../lib/is_object.js';\nimport secs from '../lib/secs.js';\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nexport class ProduceJWT {\n constructor(payload = {}) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this._payload = payload;\n }\n setIssuer(issuer) {\n this._payload = { ...this._payload, iss: issuer };\n return this;\n }\n setSubject(subject) {\n this._payload = { ...this._payload, sub: subject };\n return this;\n }\n setAudience(audience) {\n this._payload = { ...this._payload, aud: audience };\n return this;\n }\n setJti(jwtId) {\n this._payload = { ...this._payload, jti: jwtId };\n return this;\n }\n setNotBefore(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setExpirationTime(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setIssuedAt(input) {\n if (typeof input === 'undefined') {\n this._payload = { ...this._payload, iat: epoch(new Date()) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };\n }\n return this;\n }\n}\n", "import { CompactSign } from '../jws/compact/sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport { ProduceJWT } from './produce.js';\nexport class SignJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n this._protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n sig.setProtectedHeader(this._protectedHeader);\n if (Array.isArray(this._protectedHeader?.crit) &&\n this._protectedHeader.crit.includes('b64') &&\n this._protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n", "import fetchJwks from '../runtime/fetch_jwks.js';\nimport { JWKSInvalid, JWKSNoMatchingKey } from '../util/errors.js';\nimport { isJWKSLike, LocalJWKSet } from './local.js';\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v5.1.0';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nclass RemoteJWKSet extends LocalJWKSet {\n constructor(url, options) {\n super({ keys: [] });\n this._jwks = undefined;\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this._url = new URL(url.href);\n this._options = { agent: options?.agent, headers: options?.headers };\n this._timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this._cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this._cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n }\n coolingDown() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n : false;\n }\n fresh() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n : false;\n }\n async getKey(protectedHeader, token) {\n if (!this._jwks || !this.fresh()) {\n await this.reload();\n }\n try {\n return await super.getKey(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return super.getKey(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this._pendingFetch && isCloudflareWorkers()) {\n this._pendingFetch = undefined;\n }\n const headers = new Headers(this._options.headers);\n if (USER_AGENT && !headers.has('User-Agent')) {\n headers.set('User-Agent', USER_AGENT);\n this._options.headers = Object.fromEntries(headers.entries());\n }\n this._pendingFetch || (this._pendingFetch = fetchJwks(this._url, this._timeoutDuration, this._options)\n .then((json) => {\n if (!isJWKSLike(json)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = { keys: json.keys };\n this._jwksTimestamp = Date.now();\n this._pendingFetch = undefined;\n })\n .catch((err) => {\n this._pendingFetch = undefined;\n throw err;\n }));\n await this._pendingFetch;\n }\n}\nexport function createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n return async function (protectedHeader, token) {\n return set.getKey(protectedHeader, token);\n };\n}\n", "/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @public\n * @typedef Options\n * @property {string} [url] the URL to request\n * @property {'get'|'post'|'put'|'patch'|'delete'|'options'|'head'|'GET'|'POST'|'PUT'|'PATCH'|'DELETE'|'OPTIONS'|'HEAD'} [method=\"get\"] HTTP method, case-insensitive\n * @property {RequestHeaders} [headers] Request headers\n * @property {FormData|string|object} [body] a body, optionally encoded, to send\n * @property {'text'|'json'|'stream'|'blob'|'arrayBuffer'|'formData'|'stream'} [responseType=\"json\"] An encoding to use for the response\n * @property {Record<string,any>|URLSearchParams} [params] querystring parameters\n * @property {(params: Options['params']) => string} [paramsSerializer] custom function to stringify querystring parameters\n * @property {boolean} [withCredentials] Send the request with credentials like cookies\n * @property {string} [auth] Authorization header value to send with the request\n * @property {string} [xsrfCookieName] Pass an Cross-site Request Forgery prevention cookie value as a header defined by `xsrfHeaderName`\n * @property {string} [xsrfHeaderName] The name of a header to use for passing XSRF cookies\n * @property {(status: number) => boolean} [validateStatus] Override status code handling (default: 200-399 is a success)\n * @property {Array<(body: any, headers?: RequestHeaders) => any?>} [transformRequest] An array of transformations to apply to the outgoing request\n * @property {string} [baseURL] a base URL from which to resolve all URLs\n * @property {typeof window.fetch} [fetch] Custom window.fetch implementation\n * @property {any} [data]\n */\n\n/**\n * @public\n * @typedef RequestHeaders\n * @type {{[name: string]: string} | Headers}\n */\n\n/**\n * @public\n * @template T\n * @typedef Response\n * @property {number} status\n * @property {string} statusText\n * @property {Options} config the request configuration\n * @property {T} data the decoded response body\n * @property {Headers} headers\n * @property {boolean} redirect\n * @property {string} url\n * @property {ResponseType} type\n * @property {ReadableStream<Uint8Array> | null} body\n * @property {boolean} bodyUsed\n */\n\n/**\n * @typedef BodylessMethod\n * @type {<T=any>(url: string, config?: Options) => Promise<Response<T>>}\n */\n\n/**\n * @typedef BodyMethod\n * @type {<T=any>(url: string, body?: any, config?: Options) => Promise<Response<T>>}\n */\n\n/**\n * @public\n * @param {Options} [defaults = {}]\n * @returns {redaxios}\n */\nfunction create(defaults) {\n\tdefaults = defaults || {};\n\n\t/**\n\t * @public\n\t * @template T\n\t * @type {(<T = any>(config?: Options) => Promise<Response<T>>) | (<T = any>(url: string, config?: Options) => Promise<Response<T>>)}\n\t */\n\tredaxios.request = redaxios;\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.get = (url, config) => redaxios(url, config, 'get');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.delete = (url, config) => redaxios(url, config, 'delete');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.head = (url, config) => redaxios(url, config, 'head');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.options = (url, config) => redaxios(url, config, 'options');\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.post = (url, data, config) => redaxios(url, config, 'post', data);\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.put = (url, data, config) => redaxios(url, config, 'put', data);\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.patch = (url, data, config) => redaxios(url, config, 'patch', data);\n\n\t/** @public */\n\tredaxios.all = Promise.all.bind(Promise);\n\n\t/**\n\t * @public\n\t * @template Args, R\n\t * @param {(...args: Args[]) => R} fn\n\t * @returns {(array: Args[]) => R}\n\t */\n\tredaxios.spread = (fn) => /** @type {any} */ (fn.apply.bind(fn, fn));\n\n\t/**\n\t * @private\n\t * @template T, U\n\t * @param {T} opts\n\t * @param {U} [overrides]\n\t * @param {boolean} [lowerCase]\n\t * @returns {{} & (T | U)}\n\t */\n\tfunction deepMerge(opts, overrides, lowerCase) {\n\t\tlet out = /** @type {any} */ ({}),\n\t\t\ti;\n\t\tif (Array.isArray(opts)) {\n\t\t\t// @ts-ignore\n\t\t\treturn opts.concat(overrides);\n\t\t}\n\t\tfor (i in opts) {\n\t\t\tconst key = lowerCase ? i.toLowerCase() : i;\n\t\t\tout[key] = opts[i];\n\t\t}\n\t\tfor (i in overrides) {\n\t\t\tconst key = lowerCase ? i.toLowerCase() : i;\n\t\t\tconst value = /** @type {any} */ (overrides)[i];\n\t\t\tout[key] = key in out && typeof value == 'object' ? deepMerge(out[key], value, key == 'headers') : value;\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * Issues a request.\n\t * @public\n\t * @template T\n\t * @param {string | Options} urlOrConfig\n\t * @param {Options} [config = {}]\n\t * @param {any} [_method] (internal)\n\t * @param {any} [data] (internal)\n\t * @param {never} [_undefined] (internal)\n\t * @returns {Promise<Response<T>>}\n\t */\n\tfunction redaxios(urlOrConfig, config, _method, data, _undefined) {\n\t\tlet url = /** @type {string} */ (typeof urlOrConfig != 'string' ? (config = urlOrConfig).url : urlOrConfig);\n\n\t\tconst response = /** @type {Response<any>} */ ({ config });\n\n\t\t/** @type {Options} */\n\t\tconst options = deepMerge(defaults, config);\n\n\t\t/** @type {RequestHeaders} */\n\t\tconst customHeaders = {};\n\n\t\tdata = data || options.data;\n\n\t\t(options.transformRequest || []).map((f) => {\n\t\t\tdata = f(data, options.headers) || data;\n\t\t});\n\n\t\tif (options.auth) {\n\t\t\tcustomHeaders.authorization = options.auth;\n\t\t}\n\n\t\tif (data && typeof data === 'object' && typeof data.append !== 'function' && typeof data.text !== 'function') {\n\t\t\tdata = JSON.stringify(data);\n\t\t\tcustomHeaders['content-type'] = 'application/json';\n\t\t}\n\n\t\ttry {\n\t\t\t// @ts-ignore providing the cookie name without header name is nonsensical anyway\n\t\t\tcustomHeaders[options.xsrfHeaderName] = decodeURIComponent(\n\t\t\t\t// @ts-ignore accessing match()[2] throws for no match, which is intentional\n\t\t\t\tdocument.cookie.match(RegExp('(^|; )' + options.xsrfCookieName + '=([^;]*)'))[2]\n\t\t\t);\n\t\t} catch (e) {}\n\n\t\tif (options.baseURL) {\n\t\t\turl = url.replace(/^(?!.*\\/\\/)\\/?/, options.baseURL + '/');\n\t\t}\n\n\t\tif (options.params) {\n\t\t\turl +=\n\t\t\t\t(~url.indexOf('?') ? '&' : '?') +\n\t\t\t\t(options.paramsSerializer ? options.paramsSerializer(options.params) : new URLSearchParams(options.params));\n\t\t}\n\n\t\tconst fetchFunc = options.fetch || fetch;\n\n\t\treturn fetchFunc(url, {\n\t\t\tmethod: (_method || options.method || 'get').toUpperCase(),\n\t\t\tbody: data,\n\t\t\theaders: deepMerge(options.headers, customHeaders, true),\n\t\t\tcredentials: options.withCredentials ? 'include' : _undefined\n\t\t}).then((res) => {\n\t\t\tfor (const i in res) {\n\t\t\t\tif (typeof res[i] != 'function') response[i] = res[i];\n\t\t\t}\n\n\t\t\tif (options.responseType == 'stream') {\n\t\t\t\tresponse.data = res.body;\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\treturn res[options.responseType || 'text']()\n\t\t\t\t.then((data) => {\n\t\t\t\t\tresponse.data = data;\n\t\t\t\t\t// its okay if this fails: response.data will be the unparsed value:\n\t\t\t\t\tresponse.data = JSON.parse(data);\n\t\t\t\t})\n\t\t\t\t.catch(Object)\n\t\t\t\t.then(() => {\n\t\t\t\t\tconst ok = options.validateStatus ? options.validateStatus(res.status) : res.ok;\n\t\t\t\t\treturn ok ? response : Promise.reject(response);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @public\n\t * @type {AbortController}\n\t */\n\tredaxios.CancelToken = /** @type {any} */ (typeof AbortController == 'function' ? AbortController : Object);\n\n\t/**\n\t * @public\n\t * @type {Options}\n\t */\n\tredaxios.defaults = defaults;\n\n\t/**\n\t * @public\n\t */\n\tredaxios.create = create;\n\n\treturn redaxios;\n}\n\nexport default create();\n", "import { importPKCS8, SignJWT } from 'jose';\nimport redaxios from 'redaxios';\nconst checkToken = (token) => {\n if (!token) return false;\n const decoded = JSON.parse(atob(token.split('.')[1]));\n const currentTimestamp = Math.floor(Date.now() / 1000); // Convert to seconds\n return decoded.exp > currentTimestamp - 600; //expire 10 mins ealier\n};\nexport const getToken = async (serviceAccount, targetAudience) => {\n const cachedToken = await GCP_INVOKER_TOKEN.get(targetAudience);\n if (checkToken(cachedToken)) return cachedToken;\n const privateKey = await importPKCS8(serviceAccount.private_key, 'RS256');\n const email = serviceAccount.client_email;\n const payload = {\n iss: email,\n sub: email,\n aud: 'https://www.googleapis.com/oauth2/v4/token',\n target_audience: targetAudience,\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + 3600,\n };\n const token = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'RS256', typ: 'JWT' })\n .sign(privateKey);\n const idTokenResponse = await redaxios.post('https://www.googleapis.com/oauth2/v4/token', {\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: token,\n });\n await GCP_INVOKER_TOKEN.delete(targetAudience);\n await GCP_INVOKER_TOKEN.put(targetAudience, idTokenResponse.data.id_token);\n return idTokenResponse.data.id_token;\n};\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport { getToken } from './gcpAuth';\nimport utils from '../utils';\nimport { validatePathParms } from './user-input-validation';\nconst _ = { get: lodashGet };\n\nexport default function gcpCloudrun({ domain, serviceAccount, allowedKeys }) {\n return async (ctx, next) => {\n if (allowedKeys && ctx.params) {\n if (!validatePathParms(ctx, allowedKeys)) {\n ctx.status = 422;\n ctx.body = JSON.stringify({ error: 'Invalid params' });\n return false;\n }\n }\n const url = `${domain}${ctx.request.path}`;\n const token = await getToken(serviceAccount, domain);\n\n // Clone headers to modify safely\n // console.log('ctx.request.headers' + JSON.stringify(ctx.request.headers));\n const headers = new Headers(ctx.request.headers);\n headers.set('X-Serverless-Authorization', `Bearer ${token}`);\n headers.set('X-Token', headers.get('authorization') || 'N/A');\n headers.set('authorization', '');\n // Extract Cloudflare geolocation (if available)\n const cf = ctx.event.cf || {};\n\n const geoHeaders = {\n 'X-Geo-Country': cf.country,\n 'X-Geo-City': cf.city,\n 'X-Geo-Latitude': cf.latitude,\n 'X-Geo-Longitude': cf.longitude,\n 'X-Geo-Timezone': cf.timezone,\n 'X-Geo-Region': cf.region,\n 'X-Geo-PostalCode': cf.postalCode,\n 'X-Geo-RegionCode': cf.regionCode,\n 'X-Geo-EU-Country': cf.isEUCountry ? '1' : '0',\n };\n\n for (const [key, value] of Object.entries(geoHeaders)) {\n if (value !== undefined) {\n headers.set(key, value);\n }\n }\n\n const requestOptions = {\n method: ctx.request.method,\n headers,\n redirect: 'manual',\n };\n\n // Attach body if method supports it\n if (\n constants.methodsMethodsWithBody.includes(ctx.request.method) &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(url, requestOptions);\n\n const responseHeaders = utils.instanceToJson(response.headers);\n ctx.status = response.status;\n ctx.body = await response.text(); // Or .json() if expecting JSON\n utils.mergeHeaders(responseHeaders, ctx);\n await next(ctx);\n };\n}\n", "export default function headersHandler({\n headers = {},\n headersFN,\n}: {\n headers?: Record<string, string>;\n headersFN?: Function;\n}) {\n return async (ctx, next) => {\n if (headers) {\n for (let key of Object.keys(headers)) {\n ctx.set(key.toLowerCase(), headers[key]);\n }\n }\n if (headersFN) {\n const headersRes = await headersFN();\n for (const key of Object.keys(headersRes)) {\n ctx.set(key, headersRes[key]);\n }\n }\n\n await next(ctx);\n };\n}\n", "async function getBody(request: Request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return '';\n }\n try {\n return await request.text(); // stays as string; we count bytes below\n } catch {\n return '';\n }\n}\n\nfunction bytesOf(str: string) {\n // Count bytes accurately (UTF-8)\n return new TextEncoder().encode(str).length;\n}\n\nfunction rejectTooLarge(ctx: any, limitBytes: number, receivedBytes?: number) {\n ctx.status = 413;\n const body = JSON.stringify({\n error: 'Payload too large',\n limit: limitBytes,\n ...(receivedBytes != null ? { received: receivedBytes } : {}),\n });\n ctx.set('content-type', 'application/json');\n ctx.set('content-length', String(body.length));\n ctx.body = body;\n}\n\nexport default function bodySizeLimitHandler({ bodySizeLimit = 512 } = {}) {\n return async (ctx: any, next: (ctx: any) => Promise<any>) => {\n const method = ctx.request?.method || 'GET';\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(method) === -1) {\n return next(ctx);\n }\n\n // 1) Early reject using Content-Length if present and too large\n const lenHeaderRaw = ctx.request?.headers?.['content-length'];\n const lenHeader = lenHeaderRaw ? Number(lenHeaderRaw) : NaN;\n if (Number.isFinite(lenHeader) && lenHeader > bodySizeLimit) {\n return rejectTooLarge(ctx, bodySizeLimit, lenHeader);\n }\n\n // 2) Read and measure actual bytes (covers missing/lying Content-Length)\n const body = await getBody(ctx.request);\n const actualBytes = typeof body === 'string' ? bytesOf(body) : 0;\n\n // Optional debug logs (keep or remove)\n // console.log('----------body:', body.slice(0, 200)); // avoid logging entire payloads\n // console.log('----------lenHeader:', lenHeaderRaw);\n // console.log('----------actualBytes:', actualBytes);\n\n if (actualBytes > bodySizeLimit) {\n return rejectTooLarge(ctx, bodySizeLimit, actualBytes);\n }\n\n // If your downstream needs the parsed body, you can attach it:\n // ctx.requestBody = body;\n\n await next(ctx);\n };\n}\n", "import basicAuth from './basic-auth';\nimport cache from './cache';\nimport cors from './cors';\nimport geoDecorator from './geo-decorator';\nimport jwt from './jwt';\nimport kvStorage from './kv-storage';\nimport kvStorageBinding from './kv-storage-binding';\nimport lambda from './lambda';\nimport loadbalancer from './loadbalancer';\nimport logger from './logger';\nimport oauth2 from './oauth2';\nimport origin from './origin';\nimport response from './response';\nimport rateLimit from './rate-limit';\nimport s3 from './s3';\nimport signature from './signature';\nimport split from './split';\nimport transform from './transform';\nimport recaptcha from './recaptcha';\nimport recaptchaV3 from './recaptchav3';\nimport userInputValidation from './user-input-validation';\nimport cloudfunction from './cloudfunction';\nimport gcpCloudrun from './gcpCloudrun';\nimport headers from './headers';\nimport bodySizeLimit from './bodySizeLimit';\nexport default {\n basicAuth,\n cache,\n cors,\n geoDecorator,\n jwt,\n kvStorage,\n kvStorageBinding,\n lambda,\n loadbalancer,\n logger,\n oauth2,\n origin,\n rateLimit,\n response,\n s3,\n signature,\n split,\n transform,\n recaptcha,\n recaptchaV3,\n userInputValidation,\n cloudfunction,\n gcpCloudrun,\n headers,\n bodySizeLimit,\n};\n"],
5
- "mappings": "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KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,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",
6
- "names": ["require_parser", "__commonJSMin", "exports", "module", "parseRoute", "host", "path", "excludePath", "method", "handler", "protocol", "handlerName", "headers", "data", "hostVariables", "pathVariables", "hostRegexpString", "$1", "$2", "$3", "pathRegexpString", "hostRegex", "pathRegex", "excludePathRegex", "methodRegex", "protocolRegex", "instanceToJson", "instance", "obj", "item", "prop", "streamToString", "readable", "maxSize", "results", "reader", "textDecoder", "bytesCount", "done", "value", "result", "parseRequest", "request", "url", "query", "bodyText", "requestedBodyLength", "getBodyText", "clonedRequest", "require_resolver", "__commonJSMin", "exports", "module", "getParams", "req", "route", "params", "hostParamsMatch", "name", "index", "pathParamsMatch", "testHeaders", "request", "result", "key", "testProtocol", "testPath", "recurseRoutes", "ctx", "routes", "nextRoutes", "err", "require_constants", "__commonJSMin", "exports", "module", "require_context", "__commonJSMin", "exports", "module", "parser", "Context", "event", "key", "value", "clonedContext", "require_src", "__commonJSMin", "exports", "module", "parser", "resolver", "constants", "Context", "path", "handler", "route", "host", "excludePath", "method", "handlerName", "headers", "protocol", "event", "ctx", "err", "require_lodash", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "HASH_UNDEFINED", "INFINITY", "funcTag", "genTag", "symbolTag", "reIsDeepProp", "reIsPlainProp", "reLeadingDot", "rePropName", "reRegExpChar", "reEscapeChar", "reIsHostCtor", "freeGlobal", "freeSelf", "root", "getValue", "object", "key", "isHostObject", "value", "result", "arrayProto", "funcProto", "objectProto", "coreJsData", "maskSrcKey", "uid", "funcToString", "hasOwnProperty", "objectToString", "reIsNative", "Symbol", "splice", "Map", "getNative", "nativeCreate", "symbolProto", "symbolToString", "Hash", "entries", "index", "length", "entry", "hashClear", "hashDelete", "hashGet", "data", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "lastIndex", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "array", "eq", "baseGet", "path", "isKey", "castPath", "toKey", "baseIsNative", "isObject", "isMasked", "pattern", "isFunction", "toSource", "baseToString", "isSymbol", "isArray", "stringToPath", "map", "isKeyable", "type", "func", "memoize", "string", "toString", "match", "number", "quote", "resolver", "memoized", "args", "cache", "other", "tag", "isObjectLike", "get", "defaultValue", "require_aws4fetch_umd", "__commonJSMin", "exports", "module", "global", "factory", "encoder", "HOST_SERVICES", "UNSIGNABLE_HEADERS", "AwsClient", "accessKeyId", "secretAccessKey", "sessionToken", "service", "region", "cache", "retries", "initRetryMs", "input", "init", "method", "url", "headers", "body", "signer", "AwsV4Signer", "signed", "i", "fetched", "res", "resolve", "datetime", "signQuery", "appendSessionToken", "allHeaders", "singleEncode", "guessedService", "guessedRegion", "guessServiceRegion", "params", "header", "encodeRfc3986", "seenKeys", "k", "pair", "p", "k1", "v1", "k2", "v2", "date", "cacheKey", "kCredentials", "kDate", "hmac", "kRegion", "kService", "buf2hex", "hash", "hashHeader", "key", "string", "cryptoKey", "content", "buffer", "x", "urlEncodedStr", "c", "hostname", "pathname", "match", "targetPrefix", "require_lodash", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "HASH_UNDEFINED", "INFINITY", "MAX_SAFE_INTEGER", "funcTag", "genTag", "symbolTag", "reIsDeepProp", "reIsPlainProp", "reLeadingDot", "rePropName", "reRegExpChar", "reEscapeChar", "reIsHostCtor", "reIsUint", "freeGlobal", "freeSelf", "root", "getValue", "object", "key", "isHostObject", "value", "result", "arrayProto", "funcProto", "objectProto", "coreJsData", "maskSrcKey", "uid", "funcToString", "hasOwnProperty", "objectToString", "reIsNative", "Symbol", "splice", "Map", "getNative", "nativeCreate", "symbolProto", "symbolToString", "Hash", "entries", "index", "length", "entry", "hashClear", "hashDelete", "hashGet", "data", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "lastIndex", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "assignValue", "objValue", "eq", "array", "baseIsNative", "isObject", "isMasked", "pattern", "isFunction", "toSource", "baseSet", "path", "customizer", "isKey", "castPath", "nested", "toKey", "newValue", "isIndex", "baseToString", "isSymbol", "isArray", "stringToPath", "map", "isKeyable", "type", "func", "memoize", "string", "toString", "match", "number", "quote", "resolver", "memoized", "args", "cache", "other", "tag", "isObjectLike", "set", "require_cookie", "__commonJSMin", "exports", "parse", "serialize", "decode", "encode", "pairSplitRegExp", "fieldContentRegExp", "str", "options", "obj", "opt", "pairs", "dec", "i", "pair", "eq_idx", "key", "val", "tryDecode", "name", "enc", "value", "maxAge", "sameSite", "require_random_from_seed", "__commonJSMin", "exports", "module", "seed", "getNextValue", "setSeed", "_seed_", "require_alphabet", "__commonJSMin", "exports", "module", "randomFromSeed", "ORIGINAL", "alphabet", "previousSeed", "shuffled", "reset", "setCharacters", "_alphabet_", "unique", "item", "ind", "arr", "characters", "setSeed", "seed", "shuffle", "sourceArray", "targetArray", "characterIndex", "getShuffled", "lookup", "index", "alphabetShuffled", "get", "require_random_byte_browser", "__commonJSMin", "exports", "module", "crypto", "randomByte", "size", "bytes", "i", "require_format_browser", "__commonJSMin", "exports", "module", "random", "alphabet", "size", "mask", "step", "id", "bytes", "require_generate", "__commonJSMin", "exports", "module", "alphabet", "random", "format", "generate", "number", "loopCounter", "done", "str", "require_build", "__commonJSMin", "exports", "module", "generate", "alphabet", "REDUCE_TIME", "version", "counter", "previousSeconds", "build", "clusterWorkerId", "str", "seconds", "require_is_valid", "__commonJSMin", "exports", "module", "alphabet", "isShortId", "id", "nonAlphabetic", "require_cluster_worker_id_browser", "__commonJSMin", "exports", "module", "require_lib", "__commonJSMin", "exports", "module", "alphabet", "build", "isValid", "clusterWorkerId", "seed", "seedValue", "worker", "workerId", "characters", "newCharacters", "generate", "require_shortid", "__commonJSMin", "exports", "module", "import_cloudworker_router", "import_lodash", "_", "get", "setUnauthorizedResponse", "ctx", "basicAuth", "options", "next", "authHeaders", "userTokens", "user", "authToken", "userIndex", "cache", "get", "req", "set", "res", "cache_default", "hash", "data", "encodedData", "hashBuffer", "b", "hash_default", "resolveParams", "url", "params", "acc", "key", "instanceToJson", "instance", "obj", "item", "prop", "mergeHeaders", "responseHeaders", "ctx", "value", "upgradeCTX", "utils_default", "defaultHeaderBlacklist", "getBody", "request", "getCacheKey", "ctx", "cacheKeyTemplate", "cacheKeys", "key", "cacheKeyValues", "i", "cacheKey", "segments", "hash_default", "cacheKeyPath", "$0", "$1", "cacheFactory", "cacheDuration", "headerBlacklist", "next", "cachedResponse", "cache_default", "headers", "instanceToJson", "clonedBody", "response", "header", "corsHandler", "allowedOrigins", "allowedMethods", "allowCredentials", "allowedHeaders", "allowedExposeHeaders", "maxAge", "optionsSuccessStatus", "terminatePreflight", "ctx", "next", "method", "origin", "requestHeaders", "configureOrigin", "configureCredentials", "configureExposedHeaders", "configureMethods", "configureAllowedHeaders", "configureMaxAge", "appendVary", "value", "cur", "s", "countryRegions", "geoHandler", "ctx", "next", "country", "base64UrlToString", "base64Url", "base64", "binary", "bytes", "c", "decodeJwt", "token", "parts", "header", "payload", "signature", "jwtHandler", "jwksUri", "iss", "aud", "allowPublicAccess", "getJwk", "forbidden", "ctx", "isValidJwtSignature", "data", "jwkKeys", "jwkKey", "key", "result", "handleValidate", "next", "expiryDate", "currentDate", "import_lodash", "_", "lodashGet", "KvStorage", "accountId", "namespace", "authEmail", "authKey", "ttl", "key", "prefix", "limit", "url", "response", "type", "value", "keys", "metadata", "searchParams", "headers", "formData", "constants_default", "setDefaultLocation", "url", "defaultExtension", "defaultIndexDocument", "file", "kvStorageHandler", "kvAccountId", "kvNamespace", "kvAuthEmail", "kvAuthKey", "kvBasePath", "kvKey", "defaultErrorDocument", "mime", "mode", "kvStorage", "KvStorage", "mimeMappings", "constants_default", "ctx", "path", "utils_default", "key", "result", "import_lodash", "_", "lodashGet", "setDefaultLocation", "url", "defaultExtension", "defaultIndexDocument", "file", "validateEtag", "request", "response", "requestEtag", "responseEtag", "kvStorageHandler", "kvNamespaceBinding", "kvBasePath", "kvKey", "defaultErrorDocument", "get", "key", "ctx", "path", "utils_default", "result", "headers", "header", "constants_default", "import_aws4fetch", "lambdaHandlerFactory", "accessKeyId", "secretAccessKey", "region", "lambdaName", "aws", "ctx", "url", "event", "response", "responseHeaders", "utils_default", "key", "import_lodash", "_", "lodashGet", "lodashSet", "filterCfHeaders", "headers", "result", "key", "getSource", "sources", "loadbalancerHandler", "ctx", "source", "options", "constants_default", "clonedRequest", "url", "utils_default", "resolveOverride", "response", "responseHeaders", "import_lodash", "package_default", "chunker", "maxSize", "maxSeconds", "sink", "message", "resolve", "reject", "err", "data", "result", "flatten", "obj", "delimiter", "path", "output", "key", "flatten_default", "HttpLogger", "options", "chunker", "message", "flatMessage", "flatten_default", "data", "import_aws4fetch", "KinesisLogger", "options", "chunker", "message", "flatMessage", "flatten_default", "data", "body", "url", "request", "_", "lodashGet", "getBody", "request", "logger", "options", "logService", "HttpLogger", "KinesisLogger", "ctx", "next", "body", "data", "package_default", "err", "errData", "import_cookie", "import_lodash", "import_shortid", "refreshAccessToken", "refresh_token", "authDomain", "clientId", "clientSecret", "tokenUrl", "response", "body", "PBKDF2", "AESGCM", "SHA256", "RAW", "base64ToArraybuffer", "base64", "binary", "len", "bytes", "i", "arraybufferTobase64", "buffer", "stringToArraybuffer", "str", "arraybufferToString", "buf", "getKeyMaterial", "password", "enc", "deriveAesGcmKey", "seed", "salt", "key", "saltBuffer", "getSalt", "decrypt", "message", "iv", "data", "array", "encrypt", "encrypted", "aes_default", "_", "get", "set", "getCookie", "cookieHeader", "cookieName", "cookie", "serializeFormData", "obj", "key", "isBrowser", "accept", "oauth2Handler", "cookieHttpOnly", "allowPublicAccess", "kvAccountId", "kvNamespace", "kvAuthEmail", "kvAuthKey", "kvTtl", "oauth2AuthDomain", "oauth2ClientId", "oauth2ClientSecret", "oauth2Audience", "oauth2Scopes", "oauth2CallbackPath", "oauth2CallbackType", "oauth2LogoutPath", "oauth2LoginPath", "oauth2ServerTokenPath", "oauth2ServerAuthorizePath", "oauth2ServerLogoutPath", "kvStorage", "KvStorage", "authDomain", "callbackPath", "callbackType", "serverTokenPath", "serverAuthorizePath", "serverLogoutPath", "clientId", "clientSecret", "audience", "logoutPath", "loginPath", "scope", "getTokenFromCode", "code", "redirectUrl", "tokenUrl", "response", "body", "handleLogout", "ctx", "domain", "returnToPath", "getRedirectTo", "returnTo", "handleCallback", "shortid", "salt", "aes_default", "sessionToken", "aesKey", "data", "getSession", "authData", "tokens", "refreshAccessToken", "encryptedAuthData", "redirectTo", "referer", "handleLogin", "state", "encodedRedirectUri", "handleValidate", "next", "import_lodash", "_", "lodashGet", "filterCfHeaders", "headers", "result", "key", "originHandler", "options", "localOriginOverride", "backend", "ctx", "url", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "responseHandler", "body", "headers", "status", "ctx", "utils_default", "key", "import_lodash", "_", "lodashGet", "lodashSet", "rateLimitHandler", "type", "scope", "limit", "buckets", "getKey", "currentMinute", "headers", "ip", "cleanUp", "minutes", "minute", "ctx", "next", "reset", "key", "count", "import_aws4fetch", "getEndpoint", "endpoint", "options", "url", "s3HandlerFactory", "accessKeyId", "secretAccessKey", "bucket", "region", "forcePathStyle", "enableBucketOperations", "aws", "resolvedEndpoint", "ctx", "constants_default", "utils_default", "headers", "response", "responseHeaders", "key", "keyCache", "str2ab", "str", "char", "getKey", "secret", "sign", "path", "key", "sig", "signatureHandler", "ctx", "next", "pathWithQuery", "splitHandler", "host", "ctx", "next", "duplicateContext", "streamBody", "readable", "writable", "regexes", "reader", "writer", "textDecoder", "textEncoder", "done", "value", "chunk", "transformedChunk", "transformChunk", "encodedText", "template", "data", "args", "$0", "index", "acc", "transform", "transformFactory", "transforms", "statusCodes", "ctx", "next", "body", "createAssessment", "projectID", "API_KEY", "token", "siteKey", "expectedAction", "response", "reason", "getAction", "url", "recaptcha", "getToken", "headers", "ctx", "next", "verifyRecaptchaV3", "secret", "token", "expectedAction", "remoteip", "body", "json", "success", "actionOK", "score", "getActionFromPath", "pathOrUrl", "path", "getHeader", "headers", "name", "val", "recaptchaV3", "headerName", "minScore", "requireActionMatch", "ctx", "next", "req", "result", "payload", "XSSCheck", "value", "validateKeyValue", "key", "allowedKeys", "isObjectOrArray", "body", "validateObject", "obj", "keys", "isObject", "validateQuery", "ctx", "query", "validatePathParms", "params", "getBody", "request", "userInputValidation", "next", "import_lodash", "webcrypto_default", "isCryptoKey", "key", "encoder", "decoder", "MAX_INT32", "concat", "buffers", "size", "acc", "length", "buf", "i", "buffer", "encodeBase64", "input", "unencoded", "encoder", "CHUNK_SIZE", "arr", "i", "encode", "JOSEError", "message", "JOSENotSupported", "JOSEError", "JWSInvalid", "JOSEError", "JWTInvalid", "random_default", "webcrypto_default", "unusable", "name", "prop", "isAlgorithm", "algorithm", "getHashLength", "hash", "getNamedCurve", "alg", "checkUsage", "key", "usages", "expected", "msg", "last", "checkSigCryptoKey", "message", "msg", "actual", "types", "last", "invalid_key_input_default", "withAlg", "alg", "is_key_like_default", "key", "isCryptoKey", "types", "isDisjoint", "headers", "sources", "acc", "header", "parameters", "parameter", "is_disjoint_default", "isObjectLike", "value", "isObject", "input", "proto", "check_key_length_default", "alg", "key", "modulusLength", "findOid", "keyData", "oid", "from", "i", "sub", "value", "index", "getNamedCurve", "JOSENotSupported", "genericImport", "replace", "keyFormat", "pem", "alg", "options", "algorithm", "keyUsages", "c", "isPublic", "namedCurve", "webcrypto_default", "fromPKCS8", "importPKCS8", "pkcs8", "alg", "options", "fromPKCS8", "symmetricTypeCheck", "alg", "key", "is_key_like_default", "withAlg", "types", "asymmetricTypeCheck", "usage", "checkKeyType", "check_key_type_default", "validateCrit", "Err", "recognizedDefault", "recognizedOption", "protectedHeader", "joseHeader", "input", "recognized", "parameter", "JOSENotSupported", "validate_crit_default", "unprotected", "subtleDsa", "alg", "algorithm", "hash", "JOSENotSupported", "getCryptoKey", "alg", "key", "usage", "isCryptoKey", "checkSigCryptoKey", "invalid_key_input_default", "types", "webcrypto_default", "epoch_default", "date", "REGEX", "secs_default", "str", "matched", "value", "sign", "alg", "key", "data", "cryptoKey", "getCryptoKey", "check_key_length_default", "signature", "webcrypto_default", "subtleDsa", "sign_default", "FlattenedSign", "payload", "protectedHeader", "unprotectedHeader", "key", "options", "JWSInvalid", "is_disjoint_default", "joseHeader", "extensions", "validate_crit_default", "b64", "alg", "check_key_type_default", "encoder", "encode", "data", "concat", "signature", "sign_default", "jws", "decoder", "CompactSign", "payload", "FlattenedSign", "protectedHeader", "key", "options", "jws", "validateInput", "label", "input", "ProduceJWT", "payload", "isObject", "issuer", "subject", "audience", "jwtId", "epoch_default", "secs_default", "SignJWT", "ProduceJWT", "protectedHeader", "key", "options", "sig", "CompactSign", "encoder", "JWTInvalid", "USER_AGENT", "create", "defaults", "deepMerge", "opts", "overrides", "lowerCase", "i", "out", "Array", "isArray", "concat", "toLowerCase", "key", "value", "redaxios", "urlOrConfig", "config", "_method", "data", "_undefined", "url", "response", "options", "customHeaders", "transformRequest", "map", "f", "headers", "auth", "authorization", "append", "text", "JSON", "stringify", "xsrfHeaderName", "decodeURIComponent", "document", "cookie", "match", "RegExp", "xsrfCookieName", "e", "baseURL", "replace", "params", "indexOf", "paramsSerializer", "URLSearchParams", "fetch", "method", "toUpperCase", "body", "credentials", "withCredentials", "then", "res", "responseType", "parse", "catch", "Object", "validateStatus", "status", "ok", "Promise", "reject", "request", "get", "delete", "head", "post", "put", "patch", "all", "bind", "spread", "fn", "apply", "CancelToken", "AbortController", "checkToken", "token", "decoded", "currentTimestamp", "getToken", "serviceAccount", "targetAudience", "cachedToken", "privateKey", "importPKCS8", "email", "payload", "SignJWT", "idTokenResponse", "redaxios_module_default", "_", "lodashGet", "cloudfunction", "project_id", "region", "functionName", "serviceAccount", "ctx", "next", "queryParams", "queryString", "url", "urlWithParms", "token", "getToken", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "import_lodash", "_", "lodashGet", "gcpCloudrun", "domain", "serviceAccount", "allowedKeys", "ctx", "next", "validatePathParms", "url", "token", "getToken", "headers", "cf", "geoHeaders", "key", "value", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "headersHandler", "headers", "headersFN", "ctx", "next", "key", "headersRes", "getBody", "request", "bytesOf", "str", "rejectTooLarge", "ctx", "limitBytes", "receivedBytes", "body", "bodySizeLimitHandler", "bodySizeLimit", "next", "method", "lenHeaderRaw", "lenHeader", "actualBytes", "handlers_default", "basicAuth", "cacheFactory", "corsHandler", "geoHandler", "jwtHandler", "kvStorageHandler", "lambdaHandlerFactory", "loadbalancerHandler", "logger", "oauth2Handler", "originHandler", "rateLimitHandler", "responseHandler", "s3HandlerFactory", "signatureHandler", "splitHandler", "transformFactory", "recaptcha", "recaptchaV3", "userInputValidation", "cloudfunction", "gcpCloudrun", "headersHandler", "bodySizeLimitHandler", "withCtxUpgrade", "factory", "opts", "fn", "ctx", "next", "upgradeCTX", "rules", "handlers", "Router", "rule", "handlers_default", "wrappedFactory", "event"]
3
+ "sources": ["../node_modules/cloudworker-router/src/parser.js", "../node_modules/cloudworker-router/src/resolver.js", "../node_modules/cloudworker-router/src/constants.js", "../node_modules/cloudworker-router/src/context.js", "../node_modules/cloudworker-router/src/index.js", "../node_modules/lodash.get/index.js", "../node_modules/aws4fetch/dist/aws4fetch.umd.js", "../node_modules/lodash.set/index.js", "../node_modules/cookie/index.js", "../node_modules/shortid/lib/random/random-from-seed.js", "../node_modules/shortid/lib/alphabet.js", "../node_modules/shortid/lib/random/random-byte-browser.js", "../node_modules/nanoid/format.browser.js", "../node_modules/shortid/lib/generate.js", "../node_modules/shortid/lib/build.js", "../node_modules/shortid/lib/is-valid.js", "../node_modules/shortid/lib/util/cluster-worker-id-browser.js", "../node_modules/shortid/lib/index.js", "../node_modules/shortid/index.js", "../src/index.ts", "../src/handlers/basic-auth.ts", "../src/services/cache.ts", "../src/encryption/hash.ts", "../src/utils.ts", "../src/handlers/cache.ts", "../src/handlers/cors.ts", "../src/handlers/geo-decorator.ts", "../src/handlers/jwt.ts", "../src/services/kv-storage.ts", "../src/constants.ts", "../src/handlers/kv-storage.ts", "../src/handlers/kv-storage-binding.ts", "../src/handlers/lambda.ts", "../src/handlers/loadbalancer.ts", "../src/handlers/logger.ts", "../package.json", "../src/loggers/chunker.ts", "../src/loggers/flatten.ts", "../src/loggers/http.ts", "../src/loggers/kinesis.ts", "../src/handlers/oauth2.ts", "../src/handlers/jwt-refresh.ts", "../src/encryption/aes.ts", "../src/handlers/origin.ts", "../src/handlers/response.ts", "../src/handlers/rate-limit.ts", "../src/handlers/s3.ts", "../src/handlers/signature.ts", "../src/handlers/split.ts", "../src/handlers/transform.ts", "../src/handlers/recaptcha.ts", "../src/handlers/recaptchav3.ts", "../src/handlers/turnstile.ts", "../src/handlers/user-input-validation.ts", "../src/handlers/cloudfunction.ts", "../node_modules/jose/dist/browser/runtime/webcrypto.js", "../node_modules/jose/dist/browser/lib/buffer_utils.js", "../node_modules/jose/dist/browser/runtime/base64url.js", "../node_modules/jose/dist/browser/util/errors.js", "../node_modules/jose/dist/browser/runtime/random.js", "../node_modules/jose/dist/browser/lib/crypto_key.js", "../node_modules/jose/dist/browser/lib/invalid_key_input.js", "../node_modules/jose/dist/browser/runtime/is_key_like.js", "../node_modules/jose/dist/browser/lib/is_disjoint.js", "../node_modules/jose/dist/browser/lib/is_object.js", "../node_modules/jose/dist/browser/runtime/check_key_length.js", "../node_modules/jose/dist/browser/runtime/asn1.js", "../node_modules/jose/dist/browser/key/import.js", "../node_modules/jose/dist/browser/lib/check_key_type.js", "../node_modules/jose/dist/browser/lib/validate_crit.js", "../node_modules/jose/dist/browser/jwe/flattened/encrypt.js", "../node_modules/jose/dist/browser/runtime/subtle_dsa.js", "../node_modules/jose/dist/browser/runtime/get_sign_verify_key.js", "../node_modules/jose/dist/browser/lib/epoch.js", "../node_modules/jose/dist/browser/lib/secs.js", "../node_modules/jose/dist/browser/runtime/sign.js", "../node_modules/jose/dist/browser/jws/flattened/sign.js", "../node_modules/jose/dist/browser/jws/compact/sign.js", "../node_modules/jose/dist/browser/jwt/produce.js", "../node_modules/jose/dist/browser/jwt/sign.js", "../node_modules/jose/dist/browser/jwks/remote.js", "../node_modules/redaxios/src/index.js", "../src/handlers/gcpAuth.js", "../src/handlers/gcpCloudrun.ts", "../src/handlers/headers.ts", "../src/handlers/bodySizeLimit.ts", "../src/handlers/index.ts"],
4
+ "sourcesContent": ["function parseRoute({\n host = '.*',\n path = '.*',\n excludePath = null,\n method = ['.*'],\n handler,\n protocol = '.*',\n handlerName,\n headers = {},\n data,\n}) {\n const hostVariables = [];\n const pathVariables = [];\n\n const hostRegexpString = host\n // Replace any variables in the host\n .replace(/(:([^.]+))/g, ($1, $2, $3) => {\n hostVariables.push($3);\n return '([^.]+)';\n });\n\n // Then parse the variables in the path\n const pathRegexpString = path.replace(/(:([^/]+))/g, ($1, $2, $3) => {\n // Check for wildcard parameters\n if ($3.slice(-1) === '*') {\n pathVariables.push($3.slice(0, $3.length - 1));\n return '(.*)';\n }\n\n pathVariables.push($3);\n return '([^/]*)';\n });\n\n const hostRegex = new RegExp(`^${hostRegexpString}$`, 'i');\n const pathRegex = new RegExp(`^${pathRegexpString}$`, 'i');\n const excludePathRegex = excludePath ? new RegExp(`^${excludePath}$`, 'i') : null;\n const methodRegex = new RegExp(`^${method.join('|')}$`, 'i');\n const protocolRegex = new RegExp(`^${protocol}$`, 'i');\n\n return {\n hostVariables,\n pathVariables,\n host: hostRegex,\n path: pathRegex,\n excludePath: excludePathRegex,\n method: methodRegex,\n protocol: protocolRegex,\n handler,\n handlerName,\n headers,\n data,\n };\n}\n\nfunction instanceToJson(instance) {\n return [...instance].reduce((obj, item) => {\n const prop = {};\n // eslint-disable-next-line prefer-destructuring\n prop[item[0]] = item[1];\n return { ...obj, ...prop };\n }, {});\n}\n\nasync function streamToString(readable, maxSize = 1024 * 1024) {\n const results = [];\n const reader = readable.getReader();\n // eslint-disable-next-line no-undef\n const textDecoder = new TextDecoder();\n let bytesCount = 0;\n\n while (maxSize && bytesCount < maxSize) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n bytesCount += value.byteLength;\n results.push(textDecoder.decode(value));\n }\n\n const result = results.join('');\n if (maxSize) {\n return result.substring(0, maxSize);\n }\n return result;\n}\n\nfunction parseRequest(request) {\n const url = new URL(request.url);\n\n const query = instanceToJson(url.searchParams);\n const headers = instanceToJson(request.headers);\n\n if (headers.host) {\n url.hostname = headers.host;\n }\n\n let bodyText;\n let requestedBodyLength;\n\n async function getBodyText(maxSize) {\n if (requestedBodyLength >= maxSize) {\n return bodyText.substring(0, maxSize);\n }\n\n const clonedRequest = request.clone();\n bodyText = await streamToString(clonedRequest.body, maxSize);\n\n return bodyText;\n }\n\n return {\n body: request.body,\n headers,\n host: url.host,\n hostname: url.hostname,\n href: url.href,\n json: async (maxSize) => JSON.parse(getBodyText(maxSize)),\n method: request.method,\n origin: `${url.protocol}//${url.host}`,\n path: url.pathname,\n protocol: url.protocol.slice(0, -1), // Remove the semicolon at the end\n query,\n querystring: url.search.slice(1),\n search: url.search,\n text: async (maxSize) => {\n if (request.headers.get('content-type') === 'application/x-www-form-urlencoded') {\n return decodeURIComponent(await getBodyText(maxSize));\n }\n return getBodyText(maxSize);\n },\n };\n}\nmodule.exports = {\n parseRoute,\n parseRequest,\n};\n", "function getParams(req, route) {\n const params = {};\n\n const hostParamsMatch = route.host.exec(req.host);\n route.hostVariables.forEach((name, index) => {\n params[name] = hostParamsMatch[index + 1];\n });\n\n const pathParamsMatch = route.path.exec(req.path);\n route.pathVariables.forEach((name, index) => {\n params[name] = pathParamsMatch[index + 1];\n });\n\n return params;\n}\n\nfunction testHeaders(route, request) {\n let result = true;\n\n Object.keys(route.headers).forEach((key) => {\n if (request.headers[key] !== route.headers[key]) {\n result = false;\n }\n });\n\n return result;\n}\n\nfunction testProtocol(route, request) {\n return route.protocol.test(request.protocol);\n}\n\n/**\n * Checks if the route is valid for a request\n * @param {route} route\n * @param {*} request\n */\nfunction testPath(route, request) {\n // Check the method and path\n return (\n // Stupid prettier rules..\n // eslint-disable-next-line operator-linebreak\n route.method.test(request.method) &&\n // eslint-disable-next-line operator-linebreak\n route.host.test(request.host) &&\n // eslint-disable-next-line operator-linebreak\n route.path.test(request.path) &&\n // eslint-disable-next-line operator-linebreak\n testHeaders(route, request) &&\n // eslint-disable-next-line operator-linebreak\n testProtocol(route, request) &&\n (!route.excludePath || !route.excludePath.test(request.path))\n );\n}\n\nasync function recurseRoutes(ctx, routes) {\n const [route, ...nextRoutes] = routes;\n if (!route) {\n // eslint-disable-next-line\n return new Response('NOT_FOUND', {\n status: 404,\n });\n }\n\n if (!testPath(route, ctx.request)) {\n return recurseRoutes(ctx, nextRoutes);\n }\n\n ctx.state.handlers = ctx.state.handlers || [];\n // Use the provided name and fall back to the name of the function\n ctx.state.handlers.push(route.handlerName || route.handler.name);\n ctx.params = getParams(ctx.request, route);\n\n try {\n return route.handler(ctx, async (result) => recurseRoutes(result, nextRoutes));\n } catch (err) {\n err.route = route.handler.name;\n throw err;\n }\n}\n\nmodule.exports = {\n recurseRoutes,\n};\n", "module.exports = {\n methods: {\n DELETE: 'DELETE',\n GET: 'GET',\n HEAD: 'HEAD',\n OPTIONS: 'OPTIONS',\n PATCH: 'PATCH',\n POST: 'POST',\n },\n statusMessages: {\n 404: 'Not found',\n 429: 'Rate limited',\n },\n};\n", "const parser = require('./parser');\n\nmodule.exports = class Context {\n constructor(event) {\n this.request = parser.parseRequest(event.request);\n this.event = event;\n this.state = {};\n this.cloned = false;\n this.response = {\n headers: {},\n };\n this.body = '';\n this.status = 404;\n\n // Shortcuts directly on the context\n this.query = this.request.query;\n }\n\n /**\n * Gets a header from the request\n * @param {string} key\n */\n header(key) {\n return this.request.headers[key];\n }\n\n /**\n * Set a header on the response\n * @param {string} key\n * @param {string} value\n */\n set(key, value) {\n this.response.headers[key] = value;\n }\n\n /**\n * Creates a cloned context\n */\n clone() {\n const clonedContext = new Context(this.event);\n clonedContext.cloned = true;\n\n return clonedContext;\n }\n};\n", "const parser = require('./parser');\nconst resolver = require('./resolver');\nconst constants = require('./constants');\nconst Context = require('./context');\n\nmodule.exports = class Router {\n constructor() {\n this.routes = [];\n }\n\n get(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.GET, constants.methods.HEAD],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n post(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.POST],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n patch(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.PATCH],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n del(path, handler) {\n const route = parser.parseRoute({\n method: [constants.methods.DELETE],\n path,\n handler,\n });\n\n this.routes.push(route);\n }\n\n /**\n * Adds a middleware\n * @param {*} handler\n */\n use(handler) {\n const route = parser.parseRoute({\n handler,\n // This flag can be used when responding to OPTIONS requests,\n // which is outside the scope of this project\n middleware: true,\n });\n\n this.routes.push(route);\n }\n\n /**\n * Adds a route with all possible parameters\n * @param {*} param0\n * @param {*} handler\n */\n add({ host, path, excludePath, method, handlerName, headers, protocol }, handler) {\n const route = parser.parseRoute({\n method,\n host,\n path,\n excludePath,\n handler,\n headers,\n handlerName,\n protocol,\n });\n\n this.routes.push(route);\n }\n\n /**\n *\n * @param {*} event\n */\n async resolve(event) {\n const ctx = new Context(event);\n\n try {\n await resolver.recurseRoutes(ctx, this.routes);\n\n // eslint-disable-next-line no-undef\n return new Response(ctx.body, {\n status: ctx.status,\n headers: ctx.response.headers,\n });\n } catch (err) {\n // eslint-disable-next-line no-undef\n return new Response(err.message, {\n status: 500,\n });\n }\n }\n};\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\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 match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\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/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\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 * 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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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}\n\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 return this.has(key) && delete this.__data__[key];\n}\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\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\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 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\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}\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 return true;\n}\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\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\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 data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\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 return getMapData(this, key)['delete'](key);\n}\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\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\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 getMapData(this, key).set(key, value);\n return this;\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\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\n/**\n * The base implementation of `_.get` without support for default values.\n *\n * @private\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @returns {*} Returns the resolved value.\n */\nfunction baseGet(object, path) {\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = 0,\n length = path.length;\n\n while (object != null && index < length) {\n object = object[toKey(path[index++])];\n }\n return (index && index == length) ? object : undefined;\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) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\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 (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\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 * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\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\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\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\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\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\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 = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\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\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\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\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 `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 && 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);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\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\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\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 // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\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 && (type == 'object' || type == 'function');\n}\n\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 && typeof value == 'object';\n}\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) && objectToString.call(value) == symbolTag);\n}\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 process.\n * @returns {string} Returns the 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\n/**\n * Gets the value at `path` of `object`. If the resolved value is\n * `undefined`, the `defaultValue` is returned in its place.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to query.\n * @param {Array|string} path The path of the property to get.\n * @param {*} [defaultValue] The value returned for `undefined` resolved values.\n * @returns {*} Returns the resolved value.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.get(object, 'a[0].b.c');\n * // => 3\n *\n * _.get(object, ['a', '0', 'b', 'c']);\n * // => 3\n *\n * _.get(object, 'a.b.c', 'default');\n * // => 'default'\n */\nfunction get(object, path, defaultValue) {\n var result = object == null ? undefined : baseGet(object, path);\n return result === undefined ? defaultValue : result;\n}\n\nmodule.exports = get;\n", "(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.aws4fetch = {}));\n}(this, (function (exports) { 'use strict';\n\n /**\n * @license MIT <https://opensource.org/licenses/MIT>\n * @copyright Michael Hart 2018\n */\n const encoder = new TextEncoder();\n const HOST_SERVICES = {\n appstream2: 'appstream',\n cloudhsmv2: 'cloudhsm',\n email: 'ses',\n marketplace: 'aws-marketplace',\n mobile: 'AWSMobileHubService',\n pinpoint: 'mobiletargeting',\n queue: 'sqs',\n 'git-codecommit': 'codecommit',\n 'mturk-requester-sandbox': 'mturk-requester',\n 'personalize-runtime': 'personalize',\n };\n const UNSIGNABLE_HEADERS = [\n 'authorization',\n 'content-type',\n 'content-length',\n 'user-agent',\n 'presigned-expires',\n 'expect',\n 'x-amzn-trace-id',\n 'range',\n 'connection',\n ];\n class AwsClient {\n constructor({ accessKeyId, secretAccessKey, sessionToken, service, region, cache, retries, initRetryMs }) {\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n this.service = service;\n this.region = region;\n this.cache = cache || new Map();\n this.retries = retries != null ? retries : 10;\n this.initRetryMs = initRetryMs || 50;\n }\n async sign(input, init) {\n if (input instanceof Request) {\n const { method, url, headers, body } = input;\n init = Object.assign({ method, url, headers }, init);\n if (init.body == null && headers.has('Content-Type')) {\n init.body = body != null && headers.has('X-Amz-Content-Sha256') ? body : await input.clone().arrayBuffer();\n }\n input = url;\n }\n const signer = new AwsV4Signer(Object.assign({ url: input }, init, this, init && init.aws));\n const signed = Object.assign({}, init, await signer.sign());\n delete signed.aws;\n return new Request(signed.url.toString(), signed)\n }\n async fetch(input, init) {\n for (let i = 0; i <= this.retries; i++) {\n const fetched = fetch(await this.sign(input, init));\n if (i === this.retries) {\n return fetched\n }\n const res = await fetched;\n if (res.status < 500 && res.status !== 429) {\n return res\n }\n await new Promise(resolve => setTimeout(resolve, Math.random() * this.initRetryMs * Math.pow(2, i)));\n }\n throw new Error('An unknown error occurred, ensure retries is not negative')\n }\n }\n class AwsV4Signer {\n constructor({ method, url, headers, body, accessKeyId, secretAccessKey, sessionToken, service, region, cache, datetime, signQuery, appendSessionToken, allHeaders, singleEncode }) {\n if (url == null) throw new TypeError('url is a required option')\n if (accessKeyId == null) throw new TypeError('accessKeyId is a required option')\n if (secretAccessKey == null) throw new TypeError('secretAccessKey is a required option')\n this.method = method || (body ? 'POST' : 'GET');\n this.url = new URL(url);\n this.headers = new Headers(headers || {});\n this.body = body;\n this.accessKeyId = accessKeyId;\n this.secretAccessKey = secretAccessKey;\n this.sessionToken = sessionToken;\n let guessedService, guessedRegion;\n if (!service || !region) {\n [guessedService, guessedRegion] = guessServiceRegion(this.url, this.headers);\n }\n this.service = service || guessedService || '';\n this.region = region || guessedRegion || 'us-east-1';\n this.cache = cache || new Map();\n this.datetime = datetime || new Date().toISOString().replace(/[:-]|\\.\\d{3}/g, '');\n this.signQuery = signQuery;\n this.appendSessionToken = appendSessionToken || this.service === 'iotdevicegateway';\n this.headers.delete('Host');\n const params = this.signQuery ? this.url.searchParams : this.headers;\n if (this.service === 's3' && !this.headers.has('X-Amz-Content-Sha256')) {\n this.headers.set('X-Amz-Content-Sha256', 'UNSIGNED-PAYLOAD');\n }\n params.set('X-Amz-Date', this.datetime);\n if (this.sessionToken && !this.appendSessionToken) {\n params.set('X-Amz-Security-Token', this.sessionToken);\n }\n this.signableHeaders = ['host', ...this.headers.keys()]\n .filter(header => allHeaders || !UNSIGNABLE_HEADERS.includes(header))\n .sort();\n this.signedHeaders = this.signableHeaders.join(';');\n this.canonicalHeaders = this.signableHeaders\n .map(header => header + ':' + (header === 'host' ? this.url.host : (this.headers.get(header) || '').replace(/\\s+/g, ' ')))\n .join('\\n');\n this.credentialString = [this.datetime.slice(0, 8), this.region, this.service, 'aws4_request'].join('/');\n if (this.signQuery) {\n if (this.service === 's3' && !params.has('X-Amz-Expires')) {\n params.set('X-Amz-Expires', '86400');\n }\n params.set('X-Amz-Algorithm', 'AWS4-HMAC-SHA256');\n params.set('X-Amz-Credential', this.accessKeyId + '/' + this.credentialString);\n params.set('X-Amz-SignedHeaders', this.signedHeaders);\n }\n if (this.service === 's3') {\n try {\n this.encodedPath = decodeURIComponent(this.url.pathname.replace(/\\+/g, ' '));\n } catch (e) {\n this.encodedPath = this.url.pathname;\n }\n } else {\n this.encodedPath = this.url.pathname.replace(/\\/+/g, '/');\n }\n if (!singleEncode) {\n this.encodedPath = encodeURIComponent(this.encodedPath).replace(/%2F/g, '/');\n }\n this.encodedPath = encodeRfc3986(this.encodedPath);\n const seenKeys = new Set();\n this.encodedSearch = [...this.url.searchParams]\n .filter(([k]) => {\n if (!k) return false\n if (this.service === 's3') {\n if (seenKeys.has(k)) return false\n seenKeys.add(k);\n }\n return true\n })\n .map(pair => pair.map(p => encodeRfc3986(encodeURIComponent(p))))\n .sort(([k1, v1], [k2, v2]) => k1 < k2 ? -1 : k1 > k2 ? 1 : v1 < v2 ? -1 : v1 > v2 ? 1 : 0)\n .map(pair => pair.join('='))\n .join('&');\n }\n async sign() {\n if (this.signQuery) {\n this.url.searchParams.set('X-Amz-Signature', await this.signature());\n if (this.sessionToken && this.appendSessionToken) {\n this.url.searchParams.set('X-Amz-Security-Token', this.sessionToken);\n }\n } else {\n this.headers.set('Authorization', await this.authHeader());\n }\n return {\n method: this.method,\n url: this.url,\n headers: this.headers,\n body: this.body,\n }\n }\n async authHeader() {\n return [\n 'AWS4-HMAC-SHA256 Credential=' + this.accessKeyId + '/' + this.credentialString,\n 'SignedHeaders=' + this.signedHeaders,\n 'Signature=' + (await this.signature()),\n ].join(', ')\n }\n async signature() {\n const date = this.datetime.slice(0, 8);\n const cacheKey = [this.secretAccessKey, date, this.region, this.service].join();\n let kCredentials = this.cache.get(cacheKey);\n if (!kCredentials) {\n const kDate = await hmac('AWS4' + this.secretAccessKey, date);\n const kRegion = await hmac(kDate, this.region);\n const kService = await hmac(kRegion, this.service);\n kCredentials = await hmac(kService, 'aws4_request');\n this.cache.set(cacheKey, kCredentials);\n }\n return buf2hex(await hmac(kCredentials, await this.stringToSign()))\n }\n async stringToSign() {\n return [\n 'AWS4-HMAC-SHA256',\n this.datetime,\n this.credentialString,\n buf2hex(await hash(await this.canonicalString())),\n ].join('\\n')\n }\n async canonicalString() {\n return [\n this.method.toUpperCase(),\n this.encodedPath,\n this.encodedSearch,\n this.canonicalHeaders + '\\n',\n this.signedHeaders,\n await this.hexBodyHash(),\n ].join('\\n')\n }\n async hexBodyHash() {\n let hashHeader = this.headers.get('X-Amz-Content-Sha256');\n if (hashHeader == null) {\n if (this.body && typeof this.body !== 'string' && !('byteLength' in this.body)) {\n throw new Error('body must be a string, ArrayBuffer or ArrayBufferView, unless you include the X-Amz-Content-Sha256 header')\n }\n hashHeader = buf2hex(await hash(this.body || ''));\n }\n return hashHeader\n }\n }\n async function hmac(key, string) {\n const cryptoKey = await crypto.subtle.importKey(\n 'raw',\n typeof key === 'string' ? encoder.encode(key) : key,\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign'],\n );\n return crypto.subtle.sign('HMAC', cryptoKey, encoder.encode(string))\n }\n async function hash(content) {\n return crypto.subtle.digest('SHA-256', typeof content === 'string' ? encoder.encode(content) : content)\n }\n function buf2hex(buffer) {\n return Array.prototype.map.call(new Uint8Array(buffer), x => ('0' + x.toString(16)).slice(-2)).join('')\n }\n function encodeRfc3986(urlEncodedStr) {\n return urlEncodedStr.replace(/[!'()*]/g, c => '%' + c.charCodeAt(0).toString(16).toUpperCase())\n }\n function guessServiceRegion(url, headers) {\n const { hostname, pathname } = url;\n const match = hostname.replace('dualstack.', '').match(/([^.]+)\\.(?:([^.]*)\\.)?amazonaws\\.com(?:\\.cn)?$/);\n let [service, region] = (match || ['', '']).slice(1, 3);\n if (region === 'us-gov') {\n region = 'us-gov-west-1';\n } else if (region === 's3' || region === 's3-accelerate') {\n region = 'us-east-1';\n service = 's3';\n } else if (service === 'iot') {\n if (hostname.startsWith('iot.')) {\n service = 'execute-api';\n } else if (hostname.startsWith('data.jobs.iot.')) {\n service = 'iot-jobs-data';\n } else {\n service = pathname === '/mqtt' ? 'iotdevicegateway' : 'iotdata';\n }\n } else if (service === 'autoscaling') {\n const targetPrefix = (headers.get('X-Amz-Target') || '').split('.')[0];\n if (targetPrefix === 'AnyScaleFrontendService') {\n service = 'application-autoscaling';\n } else if (targetPrefix === 'AnyScaleScalingPlannerFrontendService') {\n service = 'autoscaling-plans';\n }\n } else if (region == null && service.startsWith('s3-')) {\n region = service.slice(3).replace(/^fips-|^external-1/, '');\n service = 's3';\n } else if (service.endsWith('-fips')) {\n service = service.slice(0, -5);\n } else if (region && /-\\d$/.test(service) && !/-\\d$/.test(region)) {\n [service, region] = [region, service];\n }\n return [HOST_SERVICES[service] || service, region]\n }\n\n exports.AwsClient = AwsClient;\n exports.AwsV4Signer = AwsV4Signer;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n})));\n", "/**\n * lodash (Custom Build) <https://lodash.com/>\n * Build: `lodash modularize exports=\"npm\" -o ./`\n * Copyright jQuery Foundation and other contributors <https://jquery.org/>\n * Released under MIT license <https://lodash.com/license>\n * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>\n * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors\n */\n\n/** Used as the `TypeError` message for \"Functions\" methods. */\nvar FUNC_ERROR_TEXT = 'Expected a function';\n\n/** Used to stand-in for `undefined` hash values. */\nvar HASH_UNDEFINED = '__lodash_hash_undefined__';\n\n/** Used as references for various `Number` constants. */\nvar INFINITY = 1 / 0,\n MAX_SAFE_INTEGER = 9007199254740991;\n\n/** `Object#toString` result references. */\nvar funcTag = '[object Function]',\n genTag = '[object GeneratorFunction]',\n symbolTag = '[object Symbol]';\n\n/** Used to match property names within property paths. */\nvar reIsDeepProp = /\\.|\\[(?:[^[\\]]*|([\"'])(?:(?!\\1)[^\\\\]|\\\\.)*?\\1)\\]/,\n reIsPlainProp = /^\\w*$/,\n reLeadingDot = /^\\./,\n rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]|(?=(?:\\.|\\[\\])(?:\\.|\\[\\]|$))/g;\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 match backslashes in property paths. */\nvar reEscapeChar = /\\\\(\\\\)?/g;\n\n/** Used to detect host constructors (Safari). */\nvar reIsHostCtor = /^\\[object .+?Constructor\\]$/;\n\n/** Used to detect unsigned integer values. */\nvar reIsUint = /^(?:0|[1-9]\\d*)$/;\n\n/** Detect free variable `global` from Node.js. */\nvar freeGlobal = typeof global == 'object' && global && global.Object === Object && global;\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\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\n/**\n * Checks if `value` is a host object in IE < 9.\n *\n * @private\n * @param {*} value The value to check.\n * @returns {boolean} Returns `true` if `value` is a host object, else `false`.\n */\nfunction isHostObject(value) {\n // Many host objects are `Object` objects that can coerce to strings\n // despite having improperly defined `toString` methods.\n var result = false;\n if (value != null && typeof value.toString != 'function') {\n try {\n result = !!(value + '');\n } catch (e) {}\n }\n return result;\n}\n\n/** Used for built-in method references. */\nvar arrayProto = Array.prototype,\n funcProto = Function.prototype,\n objectProto = Object.prototype;\n\n/** Used to detect overreaching core-js shims. */\nvar coreJsData = root['__core-js_shared__'];\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/** 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/**\n * Used to resolve the\n * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)\n * of values.\n */\nvar objectToString = objectProto.toString;\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/** Built-in value references. */\nvar Symbol = root.Symbol,\n splice = arrayProto.splice;\n\n/* Built-in method references that are verified to be native. */\nvar Map = getNative(root, 'Map'),\n nativeCreate = getNative(Object, 'create');\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 * 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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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}\n\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 return this.has(key) && delete this.__data__[key];\n}\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\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\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 data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\n\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}\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 return true;\n}\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\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\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 data.push([key, value]);\n } else {\n data[index][1] = value;\n }\n return this;\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\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 ? entries.length : 0;\n\n this.clear();\n while (++index < length) {\n var entry = entries[index];\n this.set(entry[0], entry[1]);\n }\n}\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.__data__ = {\n 'hash': new Hash,\n 'map': new (Map || ListCache),\n 'string': new Hash\n };\n}\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 return getMapData(this, key)['delete'](key);\n}\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\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\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 getMapData(this, key).set(key, value);\n return this;\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\n/**\n * Assigns `value` to `key` of `object` if the existing value is not equivalent\n * using [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)\n * for equality comparisons.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {string} key The key of the property to assign.\n * @param {*} value The value to assign.\n */\nfunction assignValue(object, key, value) {\n var objValue = object[key];\n if (!(hasOwnProperty.call(object, key) && eq(objValue, value)) ||\n (value === undefined && !(key in object))) {\n object[key] = value;\n }\n}\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\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) || isHostObject(value)) ? reIsNative : reIsHostCtor;\n return pattern.test(toSource(value));\n}\n\n/**\n * The base implementation of `_.set`.\n *\n * @private\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @param {Function} [customizer] The function to customize path creation.\n * @returns {Object} Returns `object`.\n */\nfunction baseSet(object, path, value, customizer) {\n if (!isObject(object)) {\n return object;\n }\n path = isKey(path, object) ? [path] : castPath(path);\n\n var index = -1,\n length = path.length,\n lastIndex = length - 1,\n nested = object;\n\n while (nested != null && ++index < length) {\n var key = toKey(path[index]),\n newValue = value;\n\n if (index != lastIndex) {\n var objValue = nested[key];\n newValue = customizer ? customizer(objValue, key, nested) : undefined;\n if (newValue === undefined) {\n newValue = isObject(objValue)\n ? objValue\n : (isIndex(path[index + 1]) ? [] : {});\n }\n }\n assignValue(nested, key, newValue);\n nested = nested[key];\n }\n return object;\n}\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 (isSymbol(value)) {\n return symbolToString ? symbolToString.call(value) : '';\n }\n var result = (value + '');\n return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;\n}\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 * @returns {Array} Returns the cast property path array.\n */\nfunction castPath(value) {\n return isArray(value) ? value : stringToPath(value);\n}\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\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\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 length = length == null ? MAX_SAFE_INTEGER : length;\n return !!length &&\n (typeof value == 'number' || reIsUint.test(value)) &&\n (value > -1 && value % 1 == 0 && value < length);\n}\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\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\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\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 = memoize(function(string) {\n string = toString(string);\n\n var result = [];\n if (reLeadingDot.test(string)) {\n result.push('');\n }\n string.replace(rePropName, function(match, number, quote, string) {\n result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));\n });\n return result;\n});\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\n/**\n * Converts `func` to its source code.\n *\n * @private\n * @param {Function} func The function to process.\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\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 `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 && 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);\n return result;\n };\n memoized.cache = new (memoize.Cache || MapCache);\n return memoized;\n}\n\n// Assign cache to `_.memoize`.\nmemoize.Cache = MapCache;\n\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\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\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 // The use of `Object#toString` avoids issues with the `typeof` operator\n // in Safari 8-9 which returns 'object' for typed array and other constructors.\n var tag = isObject(value) ? objectToString.call(value) : '';\n return tag == funcTag || tag == genTag;\n}\n\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 && (type == 'object' || type == 'function');\n}\n\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 && typeof value == 'object';\n}\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) && objectToString.call(value) == symbolTag);\n}\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 process.\n * @returns {string} Returns the 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\n/**\n * Sets the value at `path` of `object`. If a portion of `path` doesn't exist,\n * it's created. Arrays are created for missing index properties while objects\n * are created for all other missing properties. Use `_.setWith` to customize\n * `path` creation.\n *\n * **Note:** This method mutates `object`.\n *\n * @static\n * @memberOf _\n * @since 3.7.0\n * @category Object\n * @param {Object} object The object to modify.\n * @param {Array|string} path The path of the property to set.\n * @param {*} value The value to set.\n * @returns {Object} Returns `object`.\n * @example\n *\n * var object = { 'a': [{ 'b': { 'c': 3 } }] };\n *\n * _.set(object, 'a[0].b.c', 4);\n * console.log(object.a[0].b.c);\n * // => 4\n *\n * _.set(object, ['x', '0', 'y', 'z'], 5);\n * console.log(object.x[0].y.z);\n * // => 5\n */\nfunction set(object, path, value) {\n return object == null ? object : baseSet(object, path, value);\n}\n\nmodule.exports = set;\n", "/*!\n * cookie\n * Copyright(c) 2012-2014 Roman Shtylman\n * Copyright(c) 2015 Douglas Christopher Wilson\n * MIT Licensed\n */\n\n'use strict';\n\n/**\n * Module exports.\n * @public\n */\n\nexports.parse = parse;\nexports.serialize = serialize;\n\n/**\n * Module variables.\n * @private\n */\n\nvar decode = decodeURIComponent;\nvar encode = encodeURIComponent;\nvar pairSplitRegExp = /; */;\n\n/**\n * RegExp to match field-content in RFC 7230 sec 3.2\n *\n * field-content = field-vchar [ 1*( SP / HTAB ) field-vchar ]\n * field-vchar = VCHAR / obs-text\n * obs-text = %x80-FF\n */\n\nvar fieldContentRegExp = /^[\\u0009\\u0020-\\u007e\\u0080-\\u00ff]+$/;\n\n/**\n * Parse a cookie header.\n *\n * Parse the given cookie header string into an object\n * The object has the various cookies as keys(names) => values\n *\n * @param {string} str\n * @param {object} [options]\n * @return {object}\n * @public\n */\n\nfunction parse(str, options) {\n if (typeof str !== 'string') {\n throw new TypeError('argument str must be a string');\n }\n\n var obj = {}\n var opt = options || {};\n var pairs = str.split(pairSplitRegExp);\n var dec = opt.decode || decode;\n\n for (var i = 0; i < pairs.length; i++) {\n var pair = pairs[i];\n var eq_idx = pair.indexOf('=');\n\n // skip things that don't look like key=value\n if (eq_idx < 0) {\n continue;\n }\n\n var key = pair.substr(0, eq_idx).trim()\n var val = pair.substr(++eq_idx, pair.length).trim();\n\n // quoted values\n if ('\"' == val[0]) {\n val = val.slice(1, -1);\n }\n\n // only assign once\n if (undefined == obj[key]) {\n obj[key] = tryDecode(val, dec);\n }\n }\n\n return obj;\n}\n\n/**\n * Serialize data into a cookie header.\n *\n * Serialize the a name value pair into a cookie string suitable for\n * http headers. An optional options object specified cookie parameters.\n *\n * serialize('foo', 'bar', { httpOnly: true })\n * => \"foo=bar; httpOnly\"\n *\n * @param {string} name\n * @param {string} val\n * @param {object} [options]\n * @return {string}\n * @public\n */\n\nfunction serialize(name, val, options) {\n var opt = options || {};\n var enc = opt.encode || encode;\n\n if (typeof enc !== 'function') {\n throw new TypeError('option encode is invalid');\n }\n\n if (!fieldContentRegExp.test(name)) {\n throw new TypeError('argument name is invalid');\n }\n\n var value = enc(val);\n\n if (value && !fieldContentRegExp.test(value)) {\n throw new TypeError('argument val is invalid');\n }\n\n var str = name + '=' + value;\n\n if (null != opt.maxAge) {\n var maxAge = opt.maxAge - 0;\n\n if (isNaN(maxAge) || !isFinite(maxAge)) {\n throw new TypeError('option maxAge is invalid')\n }\n\n str += '; Max-Age=' + Math.floor(maxAge);\n }\n\n if (opt.domain) {\n if (!fieldContentRegExp.test(opt.domain)) {\n throw new TypeError('option domain is invalid');\n }\n\n str += '; Domain=' + opt.domain;\n }\n\n if (opt.path) {\n if (!fieldContentRegExp.test(opt.path)) {\n throw new TypeError('option path is invalid');\n }\n\n str += '; Path=' + opt.path;\n }\n\n if (opt.expires) {\n if (typeof opt.expires.toUTCString !== 'function') {\n throw new TypeError('option expires is invalid');\n }\n\n str += '; Expires=' + opt.expires.toUTCString();\n }\n\n if (opt.httpOnly) {\n str += '; HttpOnly';\n }\n\n if (opt.secure) {\n str += '; Secure';\n }\n\n if (opt.sameSite) {\n var sameSite = typeof opt.sameSite === 'string'\n ? opt.sameSite.toLowerCase() : opt.sameSite;\n\n switch (sameSite) {\n case true:\n str += '; SameSite=Strict';\n break;\n case 'lax':\n str += '; SameSite=Lax';\n break;\n case 'strict':\n str += '; SameSite=Strict';\n break;\n case 'none':\n str += '; SameSite=None';\n break;\n default:\n throw new TypeError('option sameSite is invalid');\n }\n }\n\n return str;\n}\n\n/**\n * Try decoding a string using a decoding function.\n *\n * @param {string} str\n * @param {function} decode\n * @private\n */\n\nfunction tryDecode(str, decode) {\n try {\n return decode(str);\n } catch (e) {\n return str;\n }\n}\n", "'use strict';\n\n// Found this seed-based random generator somewhere\n// Based on The Central Randomizer 1.3 (C) 1997 by Paul Houle (houle@msc.cornell.edu)\n\nvar seed = 1;\n\n/**\n * return a random number based on a seed\n * @param seed\n * @returns {number}\n */\nfunction getNextValue() {\n seed = (seed * 9301 + 49297) % 233280;\n return seed/(233280.0);\n}\n\nfunction setSeed(_seed_) {\n seed = _seed_;\n}\n\nmodule.exports = {\n nextValue: getNextValue,\n seed: setSeed\n};\n", "'use strict';\n\nvar randomFromSeed = require('./random/random-from-seed');\n\nvar ORIGINAL = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_-';\nvar alphabet;\nvar previousSeed;\n\nvar shuffled;\n\nfunction reset() {\n shuffled = false;\n}\n\nfunction setCharacters(_alphabet_) {\n if (!_alphabet_) {\n if (alphabet !== ORIGINAL) {\n alphabet = ORIGINAL;\n reset();\n }\n return;\n }\n\n if (_alphabet_ === alphabet) {\n return;\n }\n\n if (_alphabet_.length !== ORIGINAL.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. You submitted ' + _alphabet_.length + ' characters: ' + _alphabet_);\n }\n\n var unique = _alphabet_.split('').filter(function(item, ind, arr){\n return ind !== arr.lastIndexOf(item);\n });\n\n if (unique.length) {\n throw new Error('Custom alphabet for shortid must be ' + ORIGINAL.length + ' unique characters. These characters were not unique: ' + unique.join(', '));\n }\n\n alphabet = _alphabet_;\n reset();\n}\n\nfunction characters(_alphabet_) {\n setCharacters(_alphabet_);\n return alphabet;\n}\n\nfunction setSeed(seed) {\n randomFromSeed.seed(seed);\n if (previousSeed !== seed) {\n reset();\n previousSeed = seed;\n }\n}\n\nfunction shuffle() {\n if (!alphabet) {\n setCharacters(ORIGINAL);\n }\n\n var sourceArray = alphabet.split('');\n var targetArray = [];\n var r = randomFromSeed.nextValue();\n var characterIndex;\n\n while (sourceArray.length > 0) {\n r = randomFromSeed.nextValue();\n characterIndex = Math.floor(r * sourceArray.length);\n targetArray.push(sourceArray.splice(characterIndex, 1)[0]);\n }\n return targetArray.join('');\n}\n\nfunction getShuffled() {\n if (shuffled) {\n return shuffled;\n }\n shuffled = shuffle();\n return shuffled;\n}\n\n/**\n * lookup shuffled letter\n * @param index\n * @returns {string}\n */\nfunction lookup(index) {\n var alphabetShuffled = getShuffled();\n return alphabetShuffled[index];\n}\n\nfunction get () {\n return alphabet || ORIGINAL;\n}\n\nmodule.exports = {\n get: get,\n characters: characters,\n seed: setSeed,\n lookup: lookup,\n shuffled: getShuffled\n};\n", "'use strict';\n\nvar crypto = typeof window === 'object' && (window.crypto || window.msCrypto); // IE 11 uses window.msCrypto\n\nvar randomByte;\n\nif (!crypto || !crypto.getRandomValues) {\n randomByte = function(size) {\n var bytes = [];\n for (var i = 0; i < size; i++) {\n bytes.push(Math.floor(Math.random() * 256));\n }\n return bytes;\n };\n} else {\n randomByte = function(size) {\n return crypto.getRandomValues(new Uint8Array(size));\n };\n}\n\nmodule.exports = randomByte;\n", "// This file replaces `format.js` in bundlers like webpack or Rollup,\n// according to `browser` config in `package.json`.\n\nmodule.exports = function (random, alphabet, size) {\n // We can\u2019t use bytes bigger than the alphabet. To make bytes values closer\n // to the alphabet, we apply bitmask on them. We look for the closest\n // `2 ** x - 1` number, which will be bigger than alphabet size. If we have\n // 30 symbols in the alphabet, we will take 31 (00011111).\n // We do not use faster Math.clz32, because it is not available in browsers.\n var mask = (2 << Math.log(alphabet.length - 1) / Math.LN2) - 1\n // Bitmask is not a perfect solution (in our example it will pass 31 bytes,\n // which is bigger than the alphabet). As a result, we will need more bytes,\n // than ID size, because we will refuse bytes bigger than the alphabet.\n\n // Every hardware random generator call is costly,\n // because we need to wait for entropy collection. This is why often it will\n // be faster to ask for few extra bytes in advance, to avoid additional calls.\n\n // Here we calculate how many random bytes should we call in advance.\n // It depends on ID length, mask / alphabet size and magic number 1.6\n // (which was selected according benchmarks).\n\n // -~f => Math.ceil(f) if n is float number\n // -~i => i + 1 if n is integer number\n var step = -~(1.6 * mask * size / alphabet.length)\n var id = ''\n\n while (true) {\n var bytes = random(step)\n // Compact alternative for `for (var i = 0; i < step; i++)`\n var i = step\n while (i--) {\n // If random byte is bigger than alphabet even after bitmask,\n // we refuse it by `|| ''`.\n id += alphabet[bytes[i] & mask] || ''\n // More compact than `id.length + 1 === size`\n if (id.length === +size) return id\n }\n }\n}\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar random = require('./random/random-byte');\nvar format = require('nanoid/format');\n\nfunction generate(number) {\n var loopCounter = 0;\n var done;\n\n var str = '';\n\n while (!done) {\n str = str + format(random, alphabet.get(), 1);\n done = number < (Math.pow(16, loopCounter + 1 ) );\n loopCounter++;\n }\n return str;\n}\n\nmodule.exports = generate;\n", "'use strict';\n\nvar generate = require('./generate');\nvar alphabet = require('./alphabet');\n\n// Ignore all milliseconds before a certain time to reduce the size of the date entropy without sacrificing uniqueness.\n// This number should be updated every year or so to keep the generated id short.\n// To regenerate `new Date() - 0` and bump the version. Always bump the version!\nvar REDUCE_TIME = 1567752802062;\n\n// don't change unless we change the algos or REDUCE_TIME\n// must be an integer and less than 16\nvar version = 7;\n\n// Counter is used when shortid is called multiple times in one second.\nvar counter;\n\n// Remember the last time shortid was called in case counter is needed.\nvar previousSeconds;\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction build(clusterWorkerId) {\n var str = '';\n\n var seconds = Math.floor((Date.now() - REDUCE_TIME) * 0.001);\n\n if (seconds === previousSeconds) {\n counter++;\n } else {\n counter = 0;\n previousSeconds = seconds;\n }\n\n str = str + generate(version);\n str = str + generate(clusterWorkerId);\n if (counter > 0) {\n str = str + generate(counter);\n }\n str = str + generate(seconds);\n return str;\n}\n\nmodule.exports = build;\n", "'use strict';\nvar alphabet = require('./alphabet');\n\nfunction isShortId(id) {\n if (!id || typeof id !== 'string' || id.length < 6 ) {\n return false;\n }\n\n var nonAlphabetic = new RegExp('[^' +\n alphabet.get().replace(/[|\\\\{}()[\\]^$+*?.-]/g, '\\\\$&') +\n ']');\n return !nonAlphabetic.test(id);\n}\n\nmodule.exports = isShortId;\n", "'use strict';\n\nmodule.exports = 0;\n", "'use strict';\n\nvar alphabet = require('./alphabet');\nvar build = require('./build');\nvar isValid = require('./is-valid');\n\n// if you are using cluster or multiple servers use this to make each instance\n// has a unique value for worker\n// Note: I don't know if this is automatically set when using third\n// party cluster solutions such as pm2.\nvar clusterWorkerId = require('./util/cluster-worker-id') || 0;\n\n/**\n * Set the seed.\n * Highly recommended if you don't want people to try to figure out your id schema.\n * exposed as shortid.seed(int)\n * @param seed Integer value to seed the random alphabet. ALWAYS USE THE SAME SEED or you might get overlaps.\n */\nfunction seed(seedValue) {\n alphabet.seed(seedValue);\n return module.exports;\n}\n\n/**\n * Set the cluster worker or machine id\n * exposed as shortid.worker(int)\n * @param workerId worker must be positive integer. Number less than 16 is recommended.\n * returns shortid module so it can be chained.\n */\nfunction worker(workerId) {\n clusterWorkerId = workerId;\n return module.exports;\n}\n\n/**\n *\n * sets new characters to use in the alphabet\n * returns the shuffled alphabet\n */\nfunction characters(newCharacters) {\n if (newCharacters !== undefined) {\n alphabet.characters(newCharacters);\n }\n\n return alphabet.shuffled();\n}\n\n/**\n * Generate unique id\n * Returns string id\n */\nfunction generate() {\n return build(clusterWorkerId);\n}\n\n// Export all other functions as properties of the generate function\nmodule.exports = generate;\nmodule.exports.generate = generate;\nmodule.exports.seed = seed;\nmodule.exports.worker = worker;\nmodule.exports.characters = characters;\nmodule.exports.isValid = isValid;\n", "'use strict';\nmodule.exports = require('./lib/index');\n", "// Proxy.ts\nimport Router from 'cloudworker-router';\nimport defaultHandlers from './handlers';\nimport { upgradeCTX } from './utils';\n\ninterface Rule {\n path: string;\n method: string;\n handlerName: string;\n options?: object;\n}\n\n// Make a wrapper that upgrades ctx once\nfunction withCtxUpgrade<TOpts>(factory: (opts: TOpts) => (ctx: any, next: any) => Promise<any>) {\n return (opts: TOpts) => {\n const fn = factory(opts);\n return async (ctx: any, next: any) => {\n if (!ctx.__upgraded) {\n upgradeCTX(ctx);\n ctx.__upgraded = true; // idempotency guard\n }\n return fn(ctx, next);\n };\n };\n}\n\nmodule.exports = class Proxy {\n router: Router;\n\n constructor(rules: Rule[] = [], handlers = {}) {\n this.router = new Router();\n\n rules.forEach((rule) => {\n const factory =\n (handlers as any)[rule.handlerName] || (defaultHandlers as any)[rule.handlerName];\n\n if (!factory) {\n throw new Error(`Handler ${rule.handlerName} is not supported`);\n }\n\n // Wrap the factory so every handler runs after ctx is upgraded\n const wrappedFactory = withCtxUpgrade(factory);\n this.router.add(rule, wrappedFactory(rule.options as any));\n });\n }\n\n async resolve(event) {\n event.cf = event?.request?.cf || {};\n return this.router.resolve(event);\n }\n};\n", "import get from 'lodash.get';\n\nconst _ = {\n get,\n};\n\nfunction setUnauthorizedResponse(ctx) {\n ctx.status = 401;\n ctx.body = 'Unauthorized';\n ctx.set('WWW-Authenticate', 'Basic');\n}\n\n/**\n * Applies authentication on the request\n * @param {*} ctx\n * @param {*} next\n */\nexport default function basicAuth(options) {\n return async (ctx, next) => {\n // Forces a new login which is the closest you can get to a logout with basic auth\n if (ctx.request.path === options.logoutPath) {\n return setUnauthorizedResponse(ctx);\n }\n\n const authHeaders = _.get(ctx, 'request.headers.authorization');\n if (!authHeaders || !authHeaders.startsWith('Basic ')) {\n return setUnauthorizedResponse(ctx);\n }\n\n const userTokens = options.users.map((user) => user.authToken);\n\n const authToken = authHeaders.substring(6);\n const userIndex = userTokens.indexOf(authToken);\n if (userIndex === -1) {\n return setUnauthorizedResponse(ctx);\n }\n\n ctx.state.user = options.users[userIndex].username;\n\n return next(ctx);\n };\n}\n", "// eslint-disable-next-line no-undef\nconst cache = caches.default;\n\nexport async function get(req) {\n const cachedResponse = await cache.match(req);\n\n return cachedResponse;\n}\n\nexport async function set(req, res) {\n return cache.put(req.href, res);\n}\n\nexport default {\n get,\n set,\n};\n", "async function hash(data) {\n const encodedData = new TextEncoder().encode(data);\n\n const hashBuffer = await crypto.subtle.digest('SHA-256', encodedData);\n const hashArray = Array.from(new Uint8Array(hashBuffer));\n const hashHex = hashArray.map((b) => b.toString(16).padStart(2, '0')).join('');\n return hashHex;\n}\n\nexport default hash;\n", "export function resolveParams(url, params = {}) {\n return Object.keys(params).reduce((acc, key) => acc.replace(`{${key}}`, params[key]), url);\n}\n\nexport function instanceToJson(instance): object {\n return [...instance].reduce((obj, item) => {\n const prop = {};\n // eslint-disable-next-line prefer-destructuring\n prop[item[0]] = item[1];\n return { ...obj, ...prop };\n }, {});\n}\nexport function mergeHeaders(responseHeaders, ctx) {\n Object.entries(responseHeaders).forEach(([key, value]) => {\n const existing = ctx.header(key);\n if (!existing) {\n ctx.set(key, value);\n }\n });\n}\n\nexport const upgradeCTX = (ctx) => {\n ctx.set = (key, value) => {\n ctx.response.headers[key.toLowerCase()] = value;\n };\n ctx.header = (key) => {\n return ctx.request.headers[key.toLowerCase()];\n };\n};\nexport default {\n resolveParams,\n instanceToJson,\n mergeHeaders,\n upgradeCTX,\n};\n", "import cacheService from '../services/cache';\nimport hash from '../encryption/hash';\nimport { instanceToJson } from '../utils';\n\nconst defaultHeaderBlacklist = [\n 'x-ratelimit-count',\n 'x-ratelimit-limit',\n 'x-ratelimit-reset',\n 'x-cache-hit',\n];\n\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return null;\n }\n\n return request.text();\n}\n\nasync function getCacheKey(ctx, cacheKeyTemplate) {\n if (!cacheKeyTemplate) {\n return ctx.event.request;\n }\n\n const cacheKeys = cacheKeyTemplate.match(/{.*?}/gi).map((key) => key.slice(1, -1));\n const cacheKeyValues = {};\n\n for (let i = 0; i < cacheKeys.length; i += 1) {\n const cacheKey = cacheKeys[i];\n const segments = cacheKey.split(':');\n\n switch (segments[0]) {\n case 'method':\n cacheKeyValues[cacheKey] = ctx.request.method;\n break;\n case 'path':\n cacheKeyValues[cacheKey] = ctx.request.path;\n break;\n case 'bodyHash':\n // eslint-disable-next-line no-await-in-loop\n cacheKeyValues[cacheKey] = await hash(await getBody(ctx.request));\n break;\n case 'header':\n cacheKeyValues[cacheKey] = ctx.request.headers[segments[1]] || '';\n break;\n default:\n cacheKeyValues[cacheKey] = cacheKey;\n }\n }\n\n const cacheKeyPath = encodeURIComponent(\n cacheKeyTemplate.replace(/({(.*?)})/gi, ($0, $1, key) => {\n return cacheKeyValues[key];\n }),\n );\n\n return new Request(`http://${ctx.request.hostname}/${cacheKeyPath}`);\n}\n\nexport default function cacheFactory({\n cacheDuration,\n cacheKeyTemplate,\n headerBlacklist = defaultHeaderBlacklist,\n}) {\n return async (ctx, next) => {\n const cacheKey = await getCacheKey(ctx, cacheKeyTemplate);\n\n const cachedResponse = await cacheService.get(cacheKey);\n\n if (cachedResponse) {\n ctx.body = cachedResponse.body;\n ctx.status = cachedResponse.status;\n\n const headers = instanceToJson(cachedResponse.headers);\n\n Object.keys(headers).forEach((key) => {\n ctx.set(key, headers[key]);\n });\n ctx.set('X-Cache-Hit', true);\n } else {\n await next(ctx);\n\n let clonedBody;\n\n if (ctx.body.tee) {\n [ctx.body, clonedBody] = ctx.body.tee();\n } else {\n clonedBody = ctx.body;\n }\n\n const response = new Response(clonedBody, {\n status: ctx.status,\n });\n\n Object.keys(ctx.response.headers).forEach((header) => {\n if (headerBlacklist.indexOf(header.toLowerCase()) === -1) {\n response.headers.set(header, ctx.response.headers[header]);\n }\n });\n\n if (cacheDuration) {\n response.headers.delete('Cache-Control');\n response.headers.set('Cache-Control', `max-age=${cacheDuration}`);\n }\n\n ctx.event.waitUntil(cacheService.set(cacheKey, response));\n }\n };\n}\n", "export default function corsHandler({\n allowedOrigins = ['*'],\n allowedMethods = ['GET', 'PUT', 'POST', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],\n allowCredentials = true,\n allowedHeaders = ['Content-Type'],\n allowedExposeHeaders = [],\n maxAge = 600,\n optionsSuccessStatus = 204,\n terminatePreflight = false,\n}) {\n return async (ctx, next) => {\n const { method } = ctx.request;\n const { origin } = ctx.request.headers;\n const requestHeaders = ctx.request.headers['access-control-request-headers'];\n\n configureOrigin(ctx, origin, allowedOrigins);\n configureCredentials(ctx, allowCredentials);\n configureExposedHeaders(ctx, allowedExposeHeaders);\n // \uD83D\uDD39 Reject if method not allowed\n if (!allowedMethods.includes(method.toUpperCase())) {\n ctx.status = 405; // Method Not Allowed\n ctx.body = { error: `Method ${method} not allowed` };\n return;\n }\n if (method === 'OPTIONS') {\n configureMethods(ctx, allowedMethods);\n configureAllowedHeaders(ctx, requestHeaders, allowedHeaders);\n configureMaxAge(ctx, maxAge);\n if (terminatePreflight) {\n ctx.status = optionsSuccessStatus;\n ctx.set('content-length', '0');\n ctx.body = '';\n // still normalize before returning, so upstream sees a clean set\n\n return;\n }\n }\n\n await next(ctx);\n };\n}\n\nfunction configureOrigin(ctx: any, origin: string, allowedOrigins: string[]) {\n if (Array.isArray(allowedOrigins)) {\n if (allowedOrigins[0] === 'origin') {\n ctx.set('Access-Control-Allow-Origin', origin);\n appendVary(ctx, 'Origin');\n return;\n }\n if (allowedOrigins[0] === '*') {\n ctx.set('Access-Control-Allow-Origin', '*');\n } else if (allowedOrigins.indexOf(origin) !== -1) {\n ctx.set('Access-Control-Allow-Origin', origin);\n appendVary(ctx, 'Origin');\n }\n }\n}\n\nfunction configureCredentials(ctx: any, allowCredentials: boolean) {\n if (allowCredentials) {\n ctx.set('Access-Control-Allow-Credentials', String(allowCredentials));\n }\n}\n\nfunction configureMethods(ctx: any, allowedMethods: string[]) {\n ctx.set('Access-Control-Allow-Methods', allowedMethods.join(','));\n}\n\nfunction configureAllowedHeaders(ctx: any, requestHeaders?: string, allowedHeaders: string[]) {\n if (allowedHeaders.length === 0 && requestHeaders) {\n // reflect requested headers\n ctx.set('Access-Control-Allow-Headers', requestHeaders);\n } else if (allowedHeaders.length) {\n ctx.set('Access-Control-Allow-Headers', allowedHeaders.join(','));\n }\n}\n\nfunction configureMaxAge(ctx: any, maxAge?: number) {\n if (maxAge) {\n ctx.set('Access-Control-Max-Age', String(maxAge));\n }\n}\n\nfunction configureExposedHeaders(ctx: any, allowedExposeHeaders: string[]) {\n if (allowedExposeHeaders.length) {\n ctx.set('Access-Control-Expose-Headers', allowedExposeHeaders.join(','));\n }\n}\n\n/** Append to Vary without clobbering existing values (case-insensitive). */\nfunction appendVary(ctx: any, value: string) {\n const cur = ctx.header('vary') || ctx.header('Vary');\n const already = cur?.split(',').map((s) => s.trim().toLowerCase()) || [];\n if (!already.includes(value.toLowerCase())) {\n ctx.set('Vary', cur ? `${cur}, ${value}` : value);\n }\n}\n", "// Data from https://datahub.io/JohnSnowLabs/country-and-continent-codes-list#data\nconst countryRegions = {\n AF: 'AS',\n AL: 'EU',\n AQ: 'AN',\n DZ: 'AF',\n AS: 'OC',\n AD: 'EU',\n AO: 'AF',\n AG: 'NA',\n AZ: 'EU',\n AR: 'SA',\n AU: 'OC',\n AT: 'EU',\n BS: 'NA',\n BH: 'AS',\n BD: 'AS',\n AM: 'EU',\n BB: 'NA',\n BE: 'EU',\n BM: 'NA',\n BT: 'AS',\n BO: 'SA',\n BA: 'EU',\n BW: 'AF',\n BV: 'AN',\n BR: 'SA',\n BZ: 'NA',\n IO: 'AS',\n SB: 'OC',\n VG: 'NA',\n BN: 'AS',\n BG: 'EU',\n MM: 'AS',\n BI: 'AF',\n BY: 'EU',\n KH: 'AS',\n CM: 'AF',\n CA: 'NA',\n CV: 'AF',\n KY: 'NA',\n CF: 'AF',\n LK: 'AS',\n TD: 'AF',\n CL: 'SA',\n CN: 'AS',\n TW: 'AS',\n CX: 'AS',\n CC: 'AS',\n CO: 'SA',\n KM: 'AF',\n YT: 'AF',\n CG: 'AF',\n CD: 'AF',\n CK: 'OC',\n CR: 'NA',\n HR: 'EU',\n CU: 'NA',\n CY: 'EU',\n CZ: 'EU',\n BJ: 'AF',\n DK: 'EU',\n DM: 'NA',\n DO: 'NA',\n EC: 'SA',\n SV: 'NA',\n GQ: 'AF',\n ET: 'AF',\n ER: 'AF',\n EE: 'EU',\n FO: 'EU',\n FK: 'SA',\n GS: 'AN',\n FJ: 'OC',\n FI: 'EU',\n AX: 'EU',\n FR: 'EU',\n GF: 'SA',\n PF: 'OC',\n TF: 'AN',\n DJ: 'AF',\n GA: 'AF',\n GE: 'EU',\n GM: 'AF',\n PS: 'AS',\n DE: 'EU',\n GH: 'AF',\n GI: 'EU',\n KI: 'OC',\n GR: 'EU',\n GL: 'NA',\n GD: 'NA',\n GP: 'NA',\n GU: 'OC',\n GT: 'NA',\n GN: 'AF',\n GY: 'SA',\n HT: 'NA',\n HM: 'AN',\n VA: 'EU',\n HN: 'NA',\n HK: 'AS',\n HU: 'EU',\n IS: 'EU',\n IN: 'AS',\n ID: 'AS',\n IR: 'AS',\n IQ: 'AS',\n IE: 'EU',\n IL: 'AS',\n IT: 'EU',\n CI: 'AF',\n JM: 'NA',\n JP: 'AS',\n KZ: 'EU',\n JO: 'AS',\n KE: 'AF',\n KP: 'AS',\n KR: 'AS',\n KW: 'AS',\n KG: 'AS',\n LA: 'AS',\n LB: 'AS',\n LS: 'AF',\n LV: 'EU',\n LR: 'AF',\n LY: 'AF',\n LI: 'EU',\n LT: 'EU',\n LU: 'EU',\n MO: 'AS',\n MG: 'AF',\n MW: 'AF',\n MY: 'AS',\n MV: 'AS',\n ML: 'AF',\n MT: 'EU',\n MQ: 'NA',\n MR: 'AF',\n MU: 'AF',\n MX: 'NA',\n MC: 'EU',\n MN: 'AS',\n MD: 'EU',\n ME: 'EU',\n MS: 'NA',\n MA: 'AF',\n MZ: 'AF',\n OM: 'AS',\n NA: 'AF',\n NR: 'OC',\n NP: 'AS',\n NL: 'EU',\n AN: 'NA',\n CW: 'NA',\n AW: 'NA',\n SX: 'NA',\n BQ: 'NA',\n NC: 'OC',\n VU: 'OC',\n NZ: 'OC',\n NI: 'NA',\n NE: 'AF',\n NG: 'AF',\n NU: 'OC',\n NF: 'OC',\n NO: 'EU',\n MP: 'OC',\n UM: 'OC',\n FM: 'OC',\n MH: 'OC',\n PW: 'OC',\n PK: 'AS',\n PA: 'NA',\n PG: 'OC',\n PY: 'SA',\n PE: 'SA',\n PH: 'AS',\n PN: 'OC',\n PL: 'EU',\n PT: 'EU',\n GW: 'AF',\n TL: 'AS',\n PR: 'NA',\n QA: 'AS',\n RE: 'AF',\n RO: 'EU',\n RU: 'EU',\n RW: 'AF',\n BL: 'NA',\n SH: 'AF',\n KN: 'NA',\n AI: 'NA',\n LC: 'NA',\n MF: 'NA',\n PM: 'NA',\n VC: 'NA',\n SM: 'EU',\n ST: 'AF',\n SA: 'AS',\n SN: 'AF',\n RS: 'EU',\n SC: 'AF',\n SL: 'AF',\n SG: 'AS',\n SK: 'EU',\n VN: 'AS',\n SI: 'EU',\n SO: 'AF',\n ZA: 'AF',\n ZW: 'AF',\n ES: 'EU',\n SS: 'AF',\n EH: 'AF',\n SD: 'AF',\n SR: 'SA',\n SJ: 'EU',\n SZ: 'AF',\n SE: 'EU',\n CH: 'EU',\n SY: 'AS',\n TJ: 'AS',\n TH: 'AS',\n TG: 'AF',\n TK: 'OC',\n TO: 'OC',\n TT: 'NA',\n AE: 'AS',\n TN: 'AF',\n TR: 'EU',\n TM: 'AS',\n TC: 'NA',\n TV: 'OC',\n UG: 'AF',\n UA: 'EU',\n MK: 'EU',\n EG: 'AF',\n GB: 'EU',\n GG: 'EU',\n JE: 'EU',\n IM: 'EU',\n TZ: 'AF',\n US: 'NA',\n VI: 'NA',\n BF: 'AF',\n UY: 'SA',\n UZ: 'AS',\n VE: 'SA',\n WF: 'OC',\n WS: 'OC',\n YE: 'AS',\n ZM: 'AF',\n XX: 'XX',\n};\n\nexport default function geoHandler() {\n return async (ctx, next) => {\n const country = ctx.request.headers['cf-ipcountry'] || 'XX';\n\n ctx.request.headers['proxy-continent'] = countryRegions[country];\n\n await next(ctx);\n };\n}\n", "/**\n * Parse and decode a JWT.\n * A JWT is three, base64 encoded, strings concatenated with \u2018.\u2019:\n * a header, a payload, and the signature.\n * The signature is \u201CURL safe\u201D, in that \u2018/+\u2019 characters have been replaced by \u2018_-\u2019\n *\n * Steps:\n * 1. Split the token at the \u2018.\u2019 character\n * 2. Base64 decode the individual parts\n * 3. Retain the raw Bas64 encoded strings to verify the signature\n */\n\nfunction base64UrlToString(base64Url) {\n const base64 = base64Url.replace(/-/g, '+').replace(/_/g, '/');\n const binary = atob(base64);\n const bytes = Uint8Array.from(binary, (c) => c.charCodeAt(0));\n return new TextDecoder().decode(bytes); // handles UTF-8 properly\n}\nfunction decodeJwt(token) {\n const parts = token.split('.');\n const header = JSON.parse(base64UrlToString(parts[0]));\n const payload = JSON.parse(base64UrlToString(parts[1]));\n const signature = atob(parts[2].replace(/-/g, '+').replace(/_/g, '/'));\n\n return {\n header,\n payload,\n signature,\n raw: { header: parts[0], payload: parts[1], signature: parts[2] },\n };\n}\n\nexport default function jwtHandler({ jwksUri, iss, aud, allowPublicAccess = false }) {\n async function getJwk() {\n // TODO: override jwksTtl..\n const response = await fetch(jwksUri);\n\n const body = await response.json();\n return body.keys;\n }\n function forbidden(ctx) {\n ctx.status = 403;\n ctx.body = 'Forbidden';\n return ctx;\n }\n async function isValidJwtSignature(token) {\n const encoder = new TextEncoder();\n const data = encoder.encode([token.raw.header, token.raw.payload].join('.'));\n const signature = new Uint8Array(Array.from(token.signature).map((c) => c.charCodeAt(0)));\n\n const jwkKeys = await getJwk();\n\n const validations = await Promise.all(\n jwkKeys.map(async (jwkKey) => {\n const key = await crypto.subtle.importKey(\n 'jwk',\n jwkKey,\n { name: 'RSASSA-PKCS1-v1_5', hash: 'SHA-256' },\n false,\n ['verify'],\n );\n\n return crypto.subtle.verify('RSASSA-PKCS1-v1_5', key, signature, data);\n }),\n );\n\n return validations.some((result) => result);\n }\n\n /**\n * Validates the request based on bearer token and cookie\n * @param {*} ctx\n * @param {*} next\n */\n async function handleValidate(ctx, next) {\n // Options requests should not be authenticated\n if (ctx.request.method === 'OPTIONS') {\n return next(ctx);\n }\n if (allowPublicAccess) {\n return next(ctx);\n }\n const authHeader = ctx.request.headers.authorization || '';\n if (authHeader.toLowerCase().startsWith('bearer')) {\n const token = decodeJwt(ctx.request.headers.authorization.slice(7));\n\n // Is the token expired?\n const expiryDate = new Date(token.payload.exp * 1000);\n const currentDate = new Date(Date.now());\n if (expiryDate <= currentDate) {\n return forbidden(ctx);\n }\n //check issuer\n if (!iss || token.payload.iss !== iss) {\n return forbidden(ctx);\n }\n //check audiance\n if (!aud || token.payload.aud !== aud) {\n return forbidden(ctx);\n }\n if (!(await isValidJwtSignature(token))) {\n return forbidden(ctx);\n }\n ctx.state.user = token.payload;\n return next(ctx);\n }\n\n return forbidden(ctx);\n }\n\n return handleValidate;\n}\n", "import lodashGet from 'lodash.get';\n\nconst _ = {\n get: lodashGet,\n};\n\n/**\n * This replaces the in-worker api calls for kv-storage with rest-api calls.\n */\n\nexport default class KvStorage {\n accountId: string;\n\n namespace: string;\n\n authEmail: string;\n\n authKey: string;\n\n ttl: number;\n\n constructor({\n accountId,\n namespace,\n authEmail,\n authKey,\n ttl,\n }: {\n accountId: string;\n namespace: string;\n authEmail: string;\n authKey: string;\n ttl: number;\n }) {\n this.accountId = accountId;\n this.namespace = namespace;\n this.authEmail = authEmail;\n this.authKey = authKey;\n this.ttl = ttl;\n }\n\n getNamespaceUrl() {\n return new URL(\n `https://api.cloudflare.com/client/v4/accounts/${this.accountId}/storage/kv/namespaces/${this.namespace}`,\n );\n }\n\n getUrlForKey(key) {\n return new URL(`${this.getNamespaceUrl()}/values/${key}`);\n }\n\n async list(prefix, limit = 10) {\n const url = `${this.getNamespaceUrl()}/keys?prefix=${prefix}&limit=${limit}`;\n\n const response = await fetch(url, {\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n\n if (response.ok) {\n return response.json();\n }\n return null;\n }\n\n async get(key, type?: string) {\n const url = this.getUrlForKey(key);\n\n const response = await fetch(url, {\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n\n if (response.ok) {\n switch (type) {\n case 'json':\n return response.json();\n case 'stream':\n return response;\n case 'arrayBuffer':\n return response.arrayBuffer();\n default:\n return response.text();\n }\n }\n\n return null;\n }\n\n async getWithMetadata(key, type) {\n const [value, keys] = await Promise.all([this.get(key, type), this.list(key)]);\n\n const metadata = _.get(keys, 'result.0.metadata', {});\n return {\n value,\n metadata,\n };\n }\n\n async put(key, value, metadata = {}) {\n const url = this.getUrlForKey(key);\n const searchParams = new URLSearchParams();\n\n if (this.ttl) {\n searchParams.append('expiration_ttl', this.ttl.toString());\n }\n\n const headers = {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n };\n\n url.search = searchParams.toString();\n\n const formData = new FormData();\n formData.append('value', value);\n formData.append('metadata', JSON.stringify(metadata));\n\n const response = await fetch(url.toString(), {\n method: 'PUT',\n headers,\n body: value,\n });\n\n return response.ok;\n }\n\n async delete(key) {\n const url = this.getUrlForKey(key);\n\n return fetch(url, {\n method: 'DELETE',\n headers: {\n 'X-Auth-Email': this.authEmail,\n 'X-Auth-Key': this.authKey,\n },\n });\n }\n}\n", "export default {\n methodsMethodsWithBody: ['POST', 'PUT', 'PATCH'],\n http: {\n statusMessages: {\n // eslint-disable-next-line\n 404: 'Not Found',\n },\n },\n mime: {\n css: 'text/css',\n csv: 'text/csv',\n html: 'text/html',\n ico: 'image/microsoft.vnd.icon',\n jpeg: 'image/jpeg',\n js: 'application/javascript',\n json: 'application/json',\n png: 'image/png',\n svg: 'image/svg+xml',\n xml: 'application/xml',\n },\n};\n", "import KvStorage from '../services/kv-storage';\nimport constants from '../constants';\nimport utils from '../utils';\n\nfunction setDefaultLocation(url, defaultExtension, defaultIndexDocument) {\n if (url === '/' && defaultIndexDocument) {\n return defaultIndexDocument;\n }\n\n const file = url.split('/').pop();\n const extention = file.split('.').pop();\n if (extention !== file) {\n return url;\n }\n\n return `${url}.${defaultExtension}`;\n}\n\nexport default function kvStorageHandler({\n kvAccountId,\n kvNamespace,\n kvAuthEmail,\n kvAuthKey,\n kvBasePath = '',\n kvKey = '{file}',\n defaultExtension = 'html',\n defaultIndexDocument,\n defaultErrorDocument,\n mime = {},\n mode = 'rest',\n}) {\n const kvStorage = new KvStorage({\n accountId: kvAccountId,\n namespace: kvNamespace,\n authEmail: kvAuthEmail,\n authKey: kvAuthKey,\n mode,\n });\n\n const mimeMappings = { ...constants.mime, ...mime };\n\n return async (ctx) => {\n const path = utils.resolveParams(kvKey, ctx.params);\n\n const key =\n path === '' && defaultIndexDocument\n ? defaultIndexDocument\n : setDefaultLocation(path, defaultExtension);\n\n let result = await kvStorage.get(kvBasePath + key);\n\n if (!result && defaultErrorDocument) {\n result = await kvStorage.get(kvBasePath + defaultErrorDocument);\n }\n\n if (result) {\n ctx.status = 200;\n ctx.body = result;\n ctx.set('Content-Type', mimeMappings[key.split('.').pop()] || 'text/plain');\n } else {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n }\n };\n}\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n};\n\nfunction setDefaultLocation(url, defaultExtension, defaultIndexDocument) {\n if (url === '/' && defaultIndexDocument) {\n return defaultIndexDocument;\n }\n\n const file = url.split('/').pop();\n const extention = file.split('.').pop();\n if (extention !== file) {\n return url;\n }\n\n return `${url}.${defaultExtension}`;\n}\n\nfunction validateEtag(request, response) {\n const requestEtag = _.get(request, 'headers.if-none-match');\n const responseEtag = _.get(response, 'metadata.headers.etag');\n\n if (!requestEtag) {\n return false;\n }\n\n return requestEtag === responseEtag;\n}\n\nexport default function kvStorageHandler({\n kvNamespaceBinding,\n kvBasePath = '',\n kvKey = '{file}',\n defaultExtension = 'html',\n defaultIndexDocument,\n defaultErrorDocument,\n}) {\n async function get(key) {\n const response = await global[kvNamespaceBinding].getWithMetadata(key);\n\n return response;\n }\n\n return async (ctx) => {\n const path = utils.resolveParams(kvKey, ctx.params);\n\n const key =\n path === '' && defaultIndexDocument\n ? defaultIndexDocument\n : setDefaultLocation(path, defaultExtension);\n\n let result = await get(kvBasePath + key);\n\n if (!result && defaultErrorDocument) {\n result = await get(kvBasePath + defaultErrorDocument);\n }\n\n if (result) {\n if (validateEtag(ctx.request, result)) {\n ctx.status = 304;\n } else {\n ctx.status = result.status;\n ctx.body = result.value;\n\n const headers = _.get(result, 'metadata.headers', {});\n\n Object.keys(headers).forEach((header) => {\n ctx.set(header, headers[header]);\n });\n }\n } else {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n }\n };\n}\n", "import { AwsClient } from 'aws4fetch';\nimport utils from '../utils';\n\nexport default function lambdaHandlerFactory({ accessKeyId, secretAccessKey, region, lambdaName }) {\n const aws = new AwsClient({\n accessKeyId,\n secretAccessKey,\n });\n\n return async (ctx) => {\n const url = `https://lambda.${region}.amazonaws.com/2015-03-31/functions/${lambdaName}/invocations`;\n\n // TODO: Guess we should pass the body here?\n const event = {};\n\n const response = await aws.fetch(url, { body: JSON.stringify(event) });\n\n ctx.status = response.status;\n ctx.body = response.body;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport lodashSet from 'lodash.set';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n set: lodashSet,\n};\n\nfunction filterCfHeaders(headers) {\n const result = {};\n\n Object.keys(headers).forEach((key) => {\n if (!key.startsWith('cf')) {\n result[key] = headers[key];\n }\n });\n\n return result;\n}\n\nfunction getSource(sources) {\n // Random for now. Maybe support sticky sessions, least connected or fallback\n return sources[Math.floor(Math.random() * sources.length)];\n}\n\nexport default function loadbalancerHandler({ sources = [] }) {\n return async (ctx) => {\n const source = getSource(sources);\n\n const options = {\n method: ctx.request.method,\n headers: filterCfHeaders(ctx.request.headers),\n redirect: 'manual',\n // Allow other handlers to add cloudflare headers to the request\n cf: ctx.request.cf,\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n options.body = clonedRequest.body;\n }\n\n const url = utils.resolveParams(source.url, ctx.params);\n\n if (source.resolveOverride) {\n const resolveOverride = utils.resolveParams(source.resolveOverride, ctx.request.params);\n // Cloudflare header to change host.\n // Only possible to add proxied cf dns within the same account.\n _.set(options, 'cf.resolveOverride', resolveOverride);\n }\n\n const response = await fetch(url + ctx.request.search, options);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport packageJson from '../../package.json';\nimport HttpLogger from '../loggers/http';\nimport KinesisLogger from '../loggers/kinesis';\n\nconst _ = {\n get: lodashGet,\n};\n\n/**\n * Returns the first 10 KB of the body\n * @param {*} ctx\n */\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return null;\n }\n\n return request.text();\n}\n\nexport default function logger(options) {\n let logService;\n\n switch (options.type) {\n case 'http':\n logService = new HttpLogger(options);\n break;\n case 'kinesis':\n logService = new KinesisLogger(options);\n break;\n default:\n throw new Error(`Log service type not supported: ${options.type}`);\n }\n\n return async (ctx, next) => {\n ctx.state['logger-startDate'] = new Date();\n const body = await getBody(ctx.request);\n\n try {\n await next(ctx);\n\n const data = {\n message: 'START',\n requestIp: _.get(ctx, 'request.headers.x-real-ip'),\n requestId: _.get(ctx, 'request.requestId'),\n request: {\n headers: _.get(ctx, 'request.headers'),\n method: _.get(ctx, 'request.method'),\n url: _.get(ctx, 'request.href'),\n protocol: _.get(ctx, 'request.protocol'),\n body,\n },\n response: {\n status: ctx.status,\n headers: _.get(ctx, 'response.headers'),\n },\n handlers: _.get(ctx, 'state.handlers', []).join(','),\n route: _.get(ctx, 'route.name'),\n timestamp: new Date().toISOString(),\n ttfb: new Date() - ctx.state['logger-startDate'],\n redirectUrl: ctx.userRedirect,\n severity: 30,\n proxyVersion: packageJson.version,\n };\n\n ctx.event.waitUntil(logService.log(data));\n } catch (err) {\n const errData = {\n request: {\n headers: _.get(ctx, 'request.headers'),\n method: _.get(ctx, 'request.method'),\n handlers: _.get(ctx, 'state.handlers', []).join(','),\n url: _.get(ctx, 'request.href'),\n body,\n },\n message: 'ERROR',\n stack: err.stack,\n error: err.message,\n severity: 50,\n proxyVersion: packageJson.version,\n };\n\n ctx.event.waitUntil(logService.log(errData));\n }\n };\n}\n", "{\n \"name\": \"@ahmadissa/cloudworker-proxy\",\n \"version\": \"1.1.132\",\n \"description\": \"An api gateway for cloudflare workers\",\n \"license\": \"MIT\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"git+https://github.com/ahmadissa/cloudworker-proxy.git\"\n },\n \"bugs\": {\n \"url\": \"https://github.com/ahmadissa/cloudworker-proxy/issues\"\n },\n \"homepage\": \"https://github.com/ahmadissa/cloudworker-proxy#readme\",\n \"author\": \"Ahmad Issa\",\n \"keywords\": [\n \"cloudflare\",\n \"workers\",\n \"api\",\n \"gateway\",\n \"proxy\"\n ],\n \"main\": \"dist/index.js\",\n \"files\": [\n \"dist/**\"\n ],\n \"scripts\": {\n \"build\": \"esbuild --bundle src/index.ts --format=cjs --outdir=dist --sourcemap --minify\",\n \"lint\": \"eslint src\",\n \"package\": \"bun install; npm run build\",\n \"test\": \"npm run unit && npm run lint\",\n \"public\": \"npm run package && npm publish\",\n \"test:integration\": \"node integration/run.js\",\n \"unit\": \"bun test\",\n \"semantic-release\": \"semantic-release\",\n \"prepare\": \"husky install\"\n },\n \"release\": {\n \"branches\": [\n \"master\"\n ],\n \"plugins\": [\n \"@semantic-release/commit-analyzer\",\n \"@semantic-release/release-notes-generator\",\n [\n \"@semantic-release/npm\",\n {\n \"npmPublish\": false\n }\n ],\n [\n \"@semantic-release/git\",\n {\n \"assets\": [\n \"docs\",\n \"package.json\"\n ],\n \"message\": \"chore(release): ${nextRelease.version} [skip ci]\\n\\n${nextRelease.notes}\"\n }\n ]\n ]\n },\n \"dependencies\": {\n \"aws4fetch\": \"1.0.13\",\n \"build\": \"^0.1.4\",\n \"cloudworker-router\": \"1.11.2\",\n \"cookie\": \"0.4.1\",\n \"jose\": \"^5.1.0\",\n \"lodash.get\": \"4.4.2\",\n \"lodash.set\": \"4.3.2\",\n \"package\": \"^1.0.1\",\n \"redaxios\": \"^0.5.1\",\n \"shortid\": \"2.2.16\"\n },\n \"devDependencies\": {\n \"@semantic-release/git\": \"^10.0.1\",\n \"@types/jest\": \"^29.5.5\",\n \"@types/mocha\": \"^10.0.1\",\n \"@types/node\": \"^20.5.9\",\n \"@typescript-eslint/eslint-plugin\": \"^6.6.0\",\n \"@typescript-eslint/parser\": \"^6.6.0\",\n \"bun\": \"1.0.3\",\n \"dotenv\": \"8.2.0\",\n \"esbuild\": \"^0.19.2\",\n \"eslint\": \"7.13.0\",\n \"eslint-config-airbnb-base\": \"14.2.1\",\n \"eslint-config-prettier\": \"6.15.0\",\n \"eslint-plugin-import\": \"2.22.1\",\n \"eslint-plugin-prettier\": \"3.1.4\",\n \"fetch-mock\": \"9.11.0\",\n \"husky\": \"^8.0.3\",\n \"node-fetch\": \"2.6.1\",\n \"prettier\": \"2.1.2\",\n \"semantic-release\": \"^22.0.4\",\n \"typescript\": \"^5.2.2\",\n \"wrangler\": \"^3.7.0\"\n },\n \"directories\": {\n \"example\": \"examples\",\n \"test\": \"test\"\n }\n}\n", "/**\n * Concatinates messages in chunks based on count and timeout\n */\nexport default class chunker {\n maxSeconds: number;\n\n maxSize: number;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n queue: any[];\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n sink: any;\n\n flushing: boolean;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n timer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n resolveTimer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n rejectTimer: any;\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n cancelationToken: any;\n\n constructor({ maxSize = 10, maxSeconds = 10, sink }) {\n this.maxSize = maxSize;\n this.maxSeconds = maxSeconds;\n this.queue = []; // The queue of messages to process\n this.sink = sink; // The function to call with a complete chunk\n this.flushing = false; // A state flag to avoid multiple simultaneous flushes\n this.timer = null; // A promise to pass to ctx.waitUntil\n }\n\n async push(message) {\n this.queue.push(message);\n\n if (this.queue.length > this.maxSize) {\n return this.flush();\n }\n\n if (!this.timer) {\n this.timer = new Promise((resolve, reject) => {\n // Expose the functions to resolve or reject the timer promise\n this.resolveTimer = resolve;\n this.rejectTimer = reject;\n this.cancelationToken = setTimeout(async () => {\n try {\n resolve(await this.flush());\n } catch (err) {\n reject(err);\n }\n }, this.maxSeconds * 1000);\n });\n }\n\n return this.timer;\n }\n\n async flush() {\n if (this.flushing) {\n return;\n }\n\n this.flushing = true;\n\n try {\n const data = this.queue.join('\\n');\n this.queue = [];\n\n const result = await this.sink(data);\n\n if (this.timer) {\n clearTimeout(this.cancelationToken);\n this.resolveTimer(result);\n }\n } catch (err) {\n if (this.timer) {\n this.rejectTimer(err);\n }\n } finally {\n this.timer = null;\n this.flushing = false;\n }\n }\n}\n", "function flatten(obj, delimiter = '.', path = '') {\n if (!(obj instanceof Object)) {\n // Remove the last delimiter\n if (path.endsWith(delimiter)) {\n return { [path.slice(0, path.length - 1)]: obj };\n }\n return { [path]: obj };\n }\n\n return Object.keys(obj).reduce((output, key) => {\n if (obj[key] == null) {\n return output;\n }\n\n return { ...output, ...flatten(obj[key], delimiter, path + key + delimiter) };\n }, {});\n}\n\nexport default flatten;\n", "import Chunker from './chunker';\nimport flatten from './flatten';\n\nexport default class HttpLogger {\n constructor(options) {\n this.url = options.url;\n this.contentType = options.contentType;\n this.delimiter = options.delimiter;\n this.chunker = new Chunker({ sink: this.sendMessage.bind(this), ...options });\n }\n\n async log(message) {\n const flatMessage = flatten(message, this.delimiter);\n\n await this.chunker.push(JSON.stringify(flatMessage));\n }\n\n async sendMessage(data) {\n return fetch(this.url, {\n body: data,\n method: 'POST',\n headers: {\n 'Content-Type': this.contentType,\n },\n });\n }\n}\n", "import { AwsClient } from 'aws4fetch';\nimport Chunker from './chunker';\nimport flatten from './flatten';\n\nexport default class KinesisLogger {\n constructor(options) {\n this.delimiter = options.delimiter;\n this.chunker = new Chunker({ sink: this.sendMessage.bind(this), ...options });\n this.awsClient = new AwsClient({\n accessKeyId: options.accessKeyId,\n secretAccessKey: options.secretAccessKey,\n region: options.region,\n });\n this.streamName = options.streamName;\n this.region = options.region;\n }\n\n async log(message) {\n const flatMessage = flatten(message, this.delimiter);\n\n await this.chunker.push(JSON.stringify(flatMessage));\n }\n\n async sendMessage(message) {\n const data = btoa(`${JSON.stringify(message)}\\n`);\n const body = JSON.stringify({\n DeliveryStreamName: this.streamName,\n Record: {\n Data: data,\n },\n });\n\n const url = `https://firehose.${this.region}.amazonaws.com`;\n const request = new Request(url, {\n method: 'POST',\n body,\n headers: {\n 'X-Amz-Target': 'Firehose_20150804.PutRecord',\n 'Content-Type': ' application/x-amz-json-1.1',\n },\n });\n\n return this.awsClient.fetch(request);\n }\n}\n", "import cookie from 'cookie';\nimport get from 'lodash.get';\nimport set from 'lodash.set';\nimport shortid from 'shortid';\nimport KvStorage from '../services/kv-storage';\nimport jwtRefresh from './jwt-refresh';\nimport aes from '../encryption/aes';\n\nconst _ = {\n get,\n set,\n};\n\nfunction getCookie({ cookieHeader = '', cookieName }) {\n const cookies = cookie.parse(cookieHeader);\n return cookies[cookieName];\n}\n\n/**\n * Very simplistic form serializer that works for this case but probably nothing else :)\n * @param {*} obj\n */\nfunction serializeFormData(obj) {\n return Object.keys(obj)\n .map((key) => `${key}=${encodeURIComponent(obj[key])}`)\n .join('&');\n}\n\nfunction isBrowser(accept = '') {\n return accept.split(',').indexOf('text/html') !== -1;\n}\n\nexport default function oauth2Handler({\n cookieName = 'proxy',\n cookieHttpOnly = true,\n allowPublicAccess = false,\n kvAccountId,\n kvNamespace,\n kvAuthEmail,\n kvAuthKey,\n kvTtl = 2592000, // A month\n oauth2AuthDomain,\n oauth2ClientId,\n oauth2ClientSecret,\n oauth2Audience,\n oauth2Scopes = [],\n oauth2CallbackPath = '/callback',\n oauth2CallbackType = 'cookie',\n oauth2LogoutPath = '/logout',\n oauth2LoginPath = '/login',\n oauth2ServerTokenPath = '/oauth/token',\n oauth2ServerAuthorizePath = '',\n oauth2ServerLogoutPath,\n}) {\n const kvStorage = new KvStorage({\n accountId: kvAccountId,\n namespace: kvNamespace,\n authEmail: kvAuthEmail,\n authKey: kvAuthKey,\n ttl: kvTtl,\n });\n\n const authDomain = oauth2AuthDomain;\n const callbackPath = oauth2CallbackPath;\n const callbackType = oauth2CallbackType;\n const serverTokenPath = oauth2ServerTokenPath;\n const serverAuthorizePath = oauth2ServerAuthorizePath;\n const serverLogoutPath = oauth2ServerLogoutPath;\n const clientId = oauth2ClientId;\n const clientSecret = oauth2ClientSecret;\n const audience = oauth2Audience;\n const logoutPath = oauth2LogoutPath;\n const loginPath = oauth2LoginPath;\n const scopes = oauth2Scopes;\n const scope = scopes.join('%20');\n\n async function getTokenFromCode(code, redirectUrl) {\n const tokenUrl = `${authDomain}${serverTokenPath}`;\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/x-www-form-urlencoded',\n },\n body: serializeFormData({\n code,\n grant_type: 'authorization_code',\n client_id: clientId,\n client_secret: clientSecret,\n redirect_uri: redirectUrl,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Authentication failed');\n }\n\n const body = await response.json();\n\n return {\n ...body,\n expires: Date.now() + body.expires_in * 1000,\n };\n }\n\n async function handleLogout(ctx) {\n const sessionCookie = getCookie({\n cookieHeader: ctx.request.headers.cookie,\n cookieName,\n });\n\n if (sessionCookie) {\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n\n // Remove the cookie\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, '', {\n domain: `.${domain}`,\n path: '/',\n maxAge: 0,\n }),\n );\n }\n\n const returnToPath = getRedirectTo(ctx);\n\n if (oauth2ServerLogoutPath) {\n const returnTo = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${returnToPath}`,\n );\n // Bounce to remove cookie at the oauth server\n ctx.set(\n 'Location',\n `${authDomain}${serverLogoutPath}?client_id=${clientId}&returnTo=${returnTo}`,\n );\n } else {\n ctx.set('Location', returnToPath);\n }\n\n ctx.status = 302;\n }\n\n async function handleCallback(ctx) {\n const redirectUrl = ctx.request.href.split('?')[0];\n\n const body = await getTokenFromCode(ctx.request.query.code, redirectUrl);\n\n const key = shortid.generate();\n const salt = await aes.getSalt();\n const sessionToken = `${key}.${salt}`;\n\n const aesKey = await aes.deriveAesGcmKey(key, salt);\n const data = await aes.encrypt(aesKey, JSON.stringify(body));\n\n await kvStorage.put(key, data);\n\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n\n ctx.status = 302;\n\n if (callbackType === 'query') {\n ctx.set('Location', `${ctx.request.query.state}?auth=${sessionToken}`);\n } else {\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, sessionToken, {\n httpOnly: cookieHttpOnly,\n domain: `.${domain}`,\n path: '/',\n maxAge: 60 * 60 * 24 * 365, // 1 year\n }),\n );\n ctx.set('Location', ctx.request.query.state);\n }\n }\n\n /**\n * Try to set a bearer based on the session cookie\n * @param {*} ctx\n * @param {*} sessionToken\n */\n async function getSession(ctx, sessionToken) {\n const [key, salt] = sessionToken.split('.');\n const data = await kvStorage.get(key);\n\n if (data) {\n const aesKey = await aes.deriveAesGcmKey(key, salt);\n const authData = await aes.decrypt(aesKey, data);\n\n let tokens = JSON.parse(authData);\n\n if (tokens.expires < Date.now()) {\n tokens = await jwtRefresh({\n refresh_token: tokens.refresh_token,\n clientId,\n authDomain,\n clientSecret,\n });\n\n const encryptedAuthData = await aes.encrypt(aesKey, JSON.stringify(tokens));\n\n await kvStorage.put(key, encryptedAuthData);\n }\n\n ctx.state.accessToken = tokens.access_token;\n if (ctx.state.accessToken) {\n ctx.request.headers.authorization = `bearer ${ctx.state.accessToken}`;\n }\n } else {\n // Remove the cookie if the session can't be found in the kv-store\n const domain = ctx.request.hostname.match(/[^.]+\\.[^.]+$/i)[0];\n // Remove the cookie\n ctx.set(\n 'Set-Cookie',\n cookie.serialize(cookieName, '', {\n domain: `.${domain}`,\n maxAge: 0,\n }),\n );\n }\n }\n\n function getRedirectTo(ctx) {\n const redirectTo = _.get(ctx, 'request.query.redirect-to');\n if (redirectTo) {\n return redirectTo;\n }\n\n const referer = _.get(ctx, 'request.headers.referer');\n // TODO: Add a whitelist with regex\n if (referer) {\n return referer;\n }\n\n // Default to the root\n return '/';\n }\n\n /**\n * Explicitly logins a user\n * @param {*} ctx\n * @param {*} next\n */\n async function handleLogin(ctx) {\n // Options requests should return a 200\n if (ctx.request.method === 'OPTIONS') {\n ctx.status = 200;\n } else {\n const redirectTo = getRedirectTo(ctx);\n\n const state = encodeURIComponent(redirectTo || '/');\n const encodedRedirectUri = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${callbackPath}`,\n );\n\n ctx.status = 302;\n ctx.set(\n 'location',\n `${authDomain}${serverAuthorizePath}/authorize?state=${state}&client_id=${clientId}&response_type=code&scope=${scope}&audience=${audience}&redirect_uri=${encodedRedirectUri}`,\n );\n }\n }\n\n /**\n * Validates the request based on bearer token and cookie\n * @param {*} ctx\n * @param {*} next\n */\n async function handleValidate(ctx, next) {\n // Options requests should not be authenticated. Requests with auth headers are passed through\n if (ctx.request.method === 'OPTIONS') {\n await next(ctx);\n } else if (\n _.get(ctx, 'request.headers.authorization', '').toLowerCase().startsWith('bearer ')\n ) {\n // If the request has a auth-header, use this and pass on.\n _.set(ctx, 'state.access_token', ctx.request.headers.authorization.slice(7));\n await next(ctx);\n } else {\n // Check for the token in the querystring first and fallback to the cookie\n const sessionToken =\n _.get(ctx, 'request.query.auth') ||\n getCookie({\n cookieHeader: ctx.request.headers.cookie,\n cookieName,\n });\n\n // If the client didn't supply a bearer token, try to fetch one based on the cookie\n if (sessionToken) {\n await getSession(ctx, sessionToken);\n }\n\n const accessToken = _.get(ctx, 'state.accessToken');\n\n if (accessToken || allowPublicAccess) {\n await next(ctx);\n } else if (isBrowser(ctx.request.headers.accept)) {\n // For now we just code the requested url in the state. Could pass more properties in a serialized object\n const state = encodeURIComponent(ctx.request.href);\n const encodedRedirectUri = encodeURIComponent(\n `${ctx.request.protocol}://${ctx.request.host}${callbackPath}`,\n );\n\n ctx.status = 302;\n ctx.set(\n 'location',\n `${authDomain}${serverAuthorizePath}/authorize?state=${state}&client_id=${clientId}&response_type=code&scope=${scope}&audience=${audience}&redirect_uri=${encodedRedirectUri}`,\n );\n } else {\n ctx.status = 403;\n ctx.body = 'Forbidden';\n }\n }\n }\n\n return async (ctx, next) => {\n switch (ctx.request.path) {\n case callbackPath:\n await handleCallback(ctx);\n break;\n case logoutPath:\n await handleLogout(ctx);\n break;\n case loginPath:\n await handleLogin(ctx);\n break;\n default:\n await handleValidate(ctx, next);\n }\n };\n}\n", "export default async function refreshAccessToken({\n // eslint-disable-next-line camelcase\n refresh_token,\n authDomain,\n clientId,\n clientSecret,\n}) {\n const tokenUrl = `${authDomain}/oauth/token`;\n\n const response = await fetch(tokenUrl, {\n method: 'POST',\n headers: {\n 'content-type': 'application/json',\n },\n body: JSON.stringify({\n grant_type: 'refresh_token',\n client_id: clientId,\n client_secret: clientSecret,\n refresh_token,\n }),\n });\n\n if (!response.ok) {\n throw new Error('Authentication failed');\n }\n\n const body = await response.json();\n\n return {\n ...body,\n expires: Date.now() + body.expires_in * 1000,\n refresh_token,\n };\n}\n", "const aesKeyBitsLength = 256;\nconst pbkdf2Iterations = 1000;\n\nconst PBKDF2 = 'PBKDF2';\nconst AESGCM = 'AES-GCM';\nconst SHA256 = 'SHA-256';\nconst RAW = 'raw';\n\nfunction base64ToArraybuffer(base64) {\n const binary = atob(base64.replace(/_/g, '/').replace(/-/g, '+'));\n const len = binary.length;\n const bytes = new Uint8Array(len);\n for (let i = 0; i < len; i += 1) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes.buffer;\n}\n\nfunction arraybufferTobase64(buffer) {\n let binary = '';\n const bytes = new Uint8Array(buffer);\n const len = bytes.byteLength;\n for (let i = 0; i < len; i += 1) {\n binary += String.fromCharCode(bytes[i]);\n }\n\n return btoa(binary).replace(/\\//g, '_').replace(/\\+/g, '-');\n}\n\n// function arraybufferToString(buf) {\n// return String.fromCharCode.apply(null, new Uint16Array(buf));\n// }\n\n// function stringToArraybuffer(str) {\n// const buf = new ArrayBuffer(str.length * 2); // 2 bytes for each char\n// const bufView = new Uint16Array(buf);\n// for (let i = 0, strLen = str.length; i < strLen; i += 1) {\n// bufView[i] = str.charCodeAt(i);\n// }\n// return buf;\n// }\n\nfunction stringToArraybuffer(str) {\n return new TextEncoder().encode(str).buffer;\n}\n\nfunction arraybufferToString(buf) {\n return new TextDecoder().decode(buf);\n}\n\nasync function getKeyMaterial(password) {\n const enc = new TextEncoder();\n return crypto.subtle.importKey(RAW, enc.encode(password), { name: PBKDF2 }, false, ['deriveKey']);\n}\n\nasync function deriveAesGcmKey(seed, salt) {\n const key = await getKeyMaterial(seed);\n const textEncoder = new TextEncoder();\n\n const saltBuffer = textEncoder.encode(salt.replace(/_/g, '/').replace(/-/g, '+'));\n\n return crypto.subtle.deriveKey(\n {\n name: PBKDF2,\n salt: saltBuffer,\n iterations: pbkdf2Iterations,\n hash: { name: SHA256 },\n },\n key,\n {\n name: AESGCM,\n length: aesKeyBitsLength,\n },\n true,\n ['encrypt', 'decrypt'],\n );\n}\n\nasync function getSalt() {\n const salt = crypto.getRandomValues(new Uint8Array(8));\n return arraybufferTobase64(salt);\n}\n\nasync function decrypt(key, message) {\n const bytes = base64ToArraybuffer(message);\n const iv = bytes.slice(0, 16);\n const data = bytes.slice(16);\n\n const array = await crypto.subtle.decrypt(\n {\n name: AESGCM,\n iv,\n },\n key,\n data,\n );\n\n return arraybufferToString(array);\n}\n\nasync function encrypt(key, message) {\n const iv = crypto.getRandomValues(new Uint8Array(16));\n\n const encrypted = await crypto.subtle.encrypt(\n {\n name: AESGCM,\n iv,\n },\n key,\n stringToArraybuffer(message),\n );\n\n const bytes = new Uint8Array(encrypted.byteLength + iv.byteLength);\n bytes.set(iv, 0);\n bytes.set(new Uint8Array(encrypted), iv.byteLength);\n\n return arraybufferTobase64(bytes);\n}\n\nexport default {\n decrypt,\n deriveAesGcmKey,\n encrypt,\n getSalt,\n};\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport utils from '../utils';\n\nconst _ = {\n get: lodashGet,\n};\n\nfunction filterCfHeaders(headers) {\n const result = {};\n\n Object.keys(headers).forEach((key) => {\n if (!key.startsWith('cf')) {\n result[key] = headers[key];\n }\n });\n\n return result;\n}\n\nexport default function originHandler(options) {\n const { localOriginOverride, backend } = options;\n\n return async (ctx) => {\n const url = process.env.LOCAL\n ? `${localOriginOverride || ctx.request.origin}${ctx.request.path}`\n : `${backend}${ctx.request.path}`;\n\n const requestOptions = {\n headers: filterCfHeaders(ctx.request.headers),\n method: ctx.request.method,\n redirect: 'manual',\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(url, requestOptions);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "import utils from '../utils';\n\nexport default function responseHandler({\n body = '',\n headers = {},\n status = 200,\n}: {\n body?: string | Record<string, object>;\n headers?: Record<string, string>;\n status?: number;\n}) {\n return async (ctx) => {\n if (body instanceof Object) {\n ctx.body = JSON.stringify(body);\n ctx.set('Content-Type', 'application/json');\n } else {\n ctx.body = utils.resolveParams(body, ctx.params);\n }\n\n ctx.status = status;\n\n Object.keys(headers).forEach((key) => {\n ctx.set(key, utils.resolveParams(headers[key], ctx.params));\n });\n };\n}\n", "import lodashGet from 'lodash.get';\nimport lodashSet from 'lodash.set';\n\nconst _ = {\n get: lodashGet,\n set: lodashSet,\n};\n\nexport default function rateLimitHandler({ type = 'IP', scope = 'default', limit = 1000 }) {\n const buckets = {};\n\n function getKey(currentMinute, headers) {\n const ip = headers['x-real-ip'];\n\n if (type === 'IP') {\n return `minute.${currentMinute}.${scope}.${ip}`;\n }\n\n return `minute.${currentMinute}.${scope}.account`;\n }\n\n function cleanUp(currentMinute) {\n const minutes = _.get(buckets, 'minutes', {});\n Object.keys(minutes).forEach((minute) => {\n if (minute !== currentMinute) {\n delete buckets.minutes.minute;\n }\n });\n }\n\n return async (ctx, next) => {\n const currentMinute = Math.trunc(Date.now() / (1000 * 60));\n const reset = Math.trunc(currentMinute * 60 + 60 - Date.now() / 1000);\n\n const key = getKey(currentMinute, ctx.request.headers);\n\n let count = _.get(buckets, key, 0);\n\n // Don't count head and options reqests\n if (['HEAD', 'OPTIONS'].indexOf(ctx.request.method) === -1) {\n count += 1;\n }\n\n // ctx.set('X-Ratelimit-Limit', limit);\n // ctx.set('X-Ratelimit-Count', count);\n // ctx.set('X-Ratelimit-Reset', reset);\n\n _.set(buckets, key, count);\n\n if (limit < count) {\n ctx.status = 429;\n return;\n }\n\n cleanUp(currentMinute);\n\n await next(ctx);\n };\n}\n", "import { AwsClient } from 'aws4fetch';\nimport utils from '../utils';\nimport constants from '../constants';\n\nfunction getEndpoint(\n endpoint?: string,\n options: { region?: string; bucket?: string; forcePathStyle?: boolean } = {},\n) {\n // See https://docs.aws.amazon.com/AmazonS3/latest/userguide/access-bucket-intro.html\n if (endpoint && options.forcePathStyle) {\n const url = new URL(endpoint);\n return `${url.protocol}//${url.host}/${options.bucket}`;\n }\n if (endpoint) {\n const url = new URL(endpoint);\n return `${url.protocol}//${options.bucket}.${url.host}`;\n }\n if (options.forcePathStyle && options.region) {\n return `https://s3.${options.region}.amazonaws.com/${options.bucket}`;\n }\n if (options.forcePathStyle) {\n return `https://s3.amazonaws.com/${options.bucket}`;\n }\n if (options.region) {\n return `https://${options.bucket}.s3.${options.region}.amazonaws.com`;\n }\n return `https://${options.bucket}.s3.amazonaws.com`;\n}\n\nexport default function s3HandlerFactory({\n accessKeyId,\n secretAccessKey,\n bucket,\n region,\n endpoint,\n forcePathStyle,\n enableBucketOperations = false,\n}: {\n accessKeyId: string;\n secretAccessKey: string;\n bucket: string;\n region?: string;\n endpoint?: string;\n forcePathStyle?: boolean;\n enableBucketOperations?: boolean;\n}) {\n const aws = new AwsClient({\n accessKeyId,\n region,\n secretAccessKey,\n });\n\n const resolvedEndpoint = getEndpoint(endpoint, {\n region,\n bucket,\n forcePathStyle,\n });\n\n return async (ctx) => {\n if (ctx.params.file === undefined && !enableBucketOperations) {\n ctx.status = 404;\n ctx.body = constants.http.statusMessages['404'];\n ctx.set('Content-Type', 'text/plain');\n return;\n }\n\n const url = ctx.params.file\n ? utils.resolveParams(`${resolvedEndpoint}/{file}`, ctx.params)\n : resolvedEndpoint; // Bucket operations\n\n const headers: Record<string, string> = {};\n\n if (ctx.request.headers.range) {\n headers.range = ctx.request.headers.range;\n }\n\n const response = await aws.fetch(url, {\n method: ctx.method || ctx.request.method,\n headers,\n });\n\n ctx.status = response.status;\n ctx.body = response.body;\n const responseHeaders = utils.instanceToJson(response.headers);\n Object.keys(responseHeaders).forEach((key) => {\n ctx.set(key, responseHeaders[key]);\n });\n };\n}\n", "let keyCache;\n\nfunction str2ab(str) {\n const uintArray = new Uint8Array(\n str.split('').map((char) => {\n return char.charCodeAt(0);\n }),\n );\n return uintArray;\n}\n\nasync function getKey(secret) {\n if (!keyCache) {\n keyCache = await crypto.subtle.importKey(\n 'raw',\n str2ab(secret),\n { name: 'HMAC', hash: { name: 'SHA-256' } },\n false,\n ['sign', 'verify'],\n );\n }\n return keyCache;\n}\n\nasync function sign(path, secret) {\n const key = await getKey(secret);\n\n const sig = await crypto.subtle.sign({ name: 'HMAC' }, key, str2ab(path));\n return btoa(String.fromCharCode.apply(null, new Uint8Array(sig)))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n\nexport default function signatureHandler({ secret }) {\n return async (ctx, next) => {\n const pathWithQuery = (ctx.request.path + ctx.request.search).replace(\n /([?|&]sign=[\\w|-]+)/,\n '',\n );\n\n const signature = await sign(pathWithQuery, secret);\n\n if (signature !== ctx.query.sign) {\n ctx.status = 403;\n return;\n }\n\n await next(ctx);\n };\n}\n", "export default function splitHandler({ host }) {\n if (!host) {\n throw new Error('Need to specify a host for the split middleware.');\n }\n\n return async (ctx, next) => {\n const duplicateContext = ctx.clone();\n duplicateContext.cloned = true;\n\n duplicateContext.request = {\n ...duplicateContext.request,\n href: duplicateContext.request.href.replace(duplicateContext.request.href, host),\n host,\n };\n\n ctx.event.waitUntil(next(duplicateContext));\n await next(ctx);\n };\n}\n", "async function streamBody(readable, writable, regexes) {\n const reader = readable.getReader();\n const writer = writable.getWriter();\n\n const textDecoder = new TextDecoder();\n const textEncoder = new TextEncoder();\n\n // eslint-disable-next-line no-constant-condition\n while (true) {\n // eslint-disable-next-line no-await-in-loop\n const { done, value } = await reader.read();\n\n if (done) {\n break;\n }\n\n const chunk = textDecoder.decode(value);\n const transformedChunk = transformChunk(chunk, regexes);\n const encodedText = textEncoder.encode(transformedChunk);\n\n // The writer throws in cloudflare if the connection is closed\n // eslint-disable-next-line no-await-in-loop\n await writer.write(encodedText);\n }\n\n await writer.close();\n}\n\nfunction template(data, args) {\n return data.replace(/{{\\$(\\d)}}/g, ($0, index) => {\n return args[parseInt(index, 10)];\n });\n}\n\nfunction transformChunk(chunk, regexes) {\n return regexes.reduce((acc, transform) => {\n return acc.replace(transform.regex, (...args) => {\n return template(transform.replace, args);\n });\n }, chunk);\n}\n\nexport default function transformFactory({ transforms = [], statusCodes = [200] }) {\n const regexes = transforms.map((transform) => {\n return {\n regex: new RegExp(transform.regex, 'g'),\n replace: transform.replace,\n };\n });\n\n return async (ctx, next) => {\n await next(ctx);\n\n const { body } = ctx;\n\n if (statusCodes.indexOf(ctx.status) === -1) {\n // Only tranform on matching statuscodes\n } else if (typeof body === 'string') {\n ctx.body = transformChunk(body, regexes);\n } else {\n // eslint-disable-next-line no-undef\n const { readable, writable } = new TransformStream();\n streamBody(body, writable, regexes);\n ctx.body = readable;\n }\n };\n}\n", "async function createAssessment({\n projectID = 'your-project-id',\n API_KEY = 'GCP_API_KEY',\n token = 'action-token',\n siteKey = 'siteKey',\n expectedAction = 'action-name',\n}) {\n const res = await fetch(\n `https://recaptchaenterprise.googleapis.com/v1/projects/${projectID}/assessments?key=${API_KEY}`,\n {\n body: JSON.stringify({\n event: {\n token: token,\n siteKey: siteKey,\n expectedAction: expectedAction,\n },\n }),\n headers: {\n 'Content-Type': 'application/json',\n },\n method: 'POST',\n },\n );\n const response = await res.json();\n if (!response.tokenProperties.valid) {\n console.error(\n 'The CreateAssessment call failed because the token was: ' +\n response.tokenProperties.invalidReason,\n );\n\n return 0;\n }\n if (response.tokenProperties.action === expectedAction) {\n response.riskAnalysis.reasons.forEach((reason) => {\n console.log(reason);\n });\n return response.riskAnalysis.score;\n } else {\n console.error(\n 'reCAPTCHA action error:' + expectedAction + \":action:\" + response.tokenProperties.action,\n );\n return null;\n }\n}\n\nconst getAction = (url: string): string => {\n url = url.split(\"?\")[0];\n return url.replace(/\\W/g, \"\").slice(0, 100);\n};\nexport default function recaptcha({ projectID, API_KEY, siteKey }) {\n function getToken(headers) {\n return { token: headers['g-recaptcha-token'] };\n }\n\n return async (ctx, next) => {\n const { token } = getToken(ctx.request.headers);\n const expectedAction = getAction(ctx.request.path);\n const score =\n (await createAssessment({\n projectID: projectID,\n API_KEY: API_KEY,\n token: token,\n siteKey: siteKey,\n expectedAction: expectedAction,\n })) || 0;\n if (score < 0.5) {\n ctx.status = 409;\n return;\n }\n await next(ctx);\n };\n}\n", "/**\n * Verify reCAPTCHA v3 (free) token using Google's siteverify endpoint.\n * Docs: https://developers.google.com/recaptcha/docs/v3\n */\nasync function verifyRecaptchaV3({\n secret, // Your reCAPTCHA v3 SECRET key\n token, // Token from client (grecaptcha.execute)\n expectedAction, // Action you used on the client (e.g., \"login\")\n remoteip, // (optional) user's IP (e.g., CF-Connecting-IP)\n}: {\n secret: string;\n token: string | null | undefined;\n expectedAction: string;\n remoteip?: string;\n}): Promise<{ ok: boolean; score: number; action?: string; errorCodes?: string[] }> {\n if (!token) return { ok: false, score: 0, errorCodes: ['missing-input-response'] };\n\n const body = new URLSearchParams({\n secret,\n response: token,\n ...(remoteip ? { remoteip } : {}),\n });\n\n const res = await fetch('https://www.google.com/recaptcha/api/siteverify', {\n method: 'POST',\n headers: { 'Content-Type': 'application/x-www-form-urlencoded' },\n body,\n });\n\n const json = (await res.json()) as {\n success: boolean;\n score?: number;\n action?: string;\n 'error-codes'?: string[];\n };\n\n const success = !!json.success;\n const actionOK = json.action === expectedAction; // tighten/loosen as you prefer\n const score = typeof json.score === 'number' ? json.score : 0;\n\n return {\n ok: success && actionOK,\n score,\n action: json.action,\n errorCodes: json['error-codes'],\n };\n}\n\n/** Build an action name from URL path (like your original) */\nconst getActionFromPath = (pathOrUrl: string): string => {\n // Support both \"/v2/api/user/onLogin\" and full URLs\n let path = pathOrUrl;\n try {\n // If it's a full URL, extract pathname\n path = new URL(pathOrUrl, 'http://dummy').pathname;\n } catch {\n /* ignore */\n }\n path = path.split('?')[0] || '/';\n return path.replace(/\\W/g, '').slice(0, 100);\n};\n\n/** Get a header value from either a Headers object or a plain object */\nconst getHeader = (\n headers: Headers | Record<string, string | string[] | undefined>,\n name: string,\n): string | null => {\n if (headers instanceof Headers) return headers.get(name);\n const val = (headers as any)[name] ?? (headers as any)[name.toLowerCase()];\n if (Array.isArray(val)) return val[0] ?? null;\n return (val as string) ?? null;\n};\n\n/**\n * Middleware for reCAPTCHA v3 (free).\n * Expects the client to send the token in a header (choose one):\n * - \"x-recaptcha-token\" (default)\n * - \"g-recaptcha-token\" (fallback)\n * Optionally send \"x-recaptcha-action\" to specify action explicitly.\n */\nexport default function recaptchaV3({\n secret, // reCAPTCHA v3 SECRET\n headerName = 'x-recaptcha-token',\n minScore = 0.5,\n requireActionMatch = true, // flip to false to ignore action mismatch\n}: {\n secret: string;\n headerName?: string;\n minScore?: number;\n requireActionMatch?: boolean;\n}) {\n return async (ctx: any, next: (ctx?: any) => Promise<unknown>) => {\n const req = ctx.request?.req || ctx.request || ctx; // accommodate various frameworks\n\n const headers =\n (req.headers as Headers | Record<string, string | string[] | undefined>) ??\n (ctx.request?.headers as any) ??\n {};\n\n const token = getHeader(headers, headerName) || getHeader(headers, 'g-recaptcha-token') || null;\n\n // Prefer explicit action header, else derive from path/url\n const explicitAction = getHeader(headers, 'x-recaptcha-action');\n const expectedAction =\n explicitAction || getActionFromPath(ctx.request?.path || ctx.request?.url || req.url || '/');\n\n const remoteip =\n getHeader(headers, 'cf-connecting-ip') || getHeader(headers, 'x-forwarded-for') || undefined;\n\n const result = await verifyRecaptchaV3({\n secret,\n token,\n expectedAction,\n remoteip,\n });\n\n const ok = result.score >= minScore && result.ok;\n\n if (!ok) {\n const payload = {\n action: result.action,\n expectedAction,\n score: result.score ?? 0,\n errors: result.errorCodes ?? [],\n };\n console.warn('[reCAPTCHA] failed:' + JSON.stringify(payload));\n\n // Koa-style:\n ctx.status = 409; // or 403\n ctx.set?.('Content-Type', 'application/json');\n ctx.body = JSON.stringify({ error: 'reCAPTCHA verification failed' });\n return;\n }\n\n await next(ctx);\n };\n}\n", "/**\n * Verify Cloudflare Turnstile token.\n * Docs: https://developers.cloudflare.com/turnstile/reference/sitoverify/\n */\nasync function verifyTurnstile({\n secret, // Your Turnstile SECRET key\n token, // Token from client (turnstile.execute)\n remoteip, // (optional) user's IP (e.g., CF-Connecting-IP)\n}: {\n secret: string;\n token: string | null | undefined;\n remoteip?: string;\n}): Promise<{\n ok: boolean;\n action?: string;\n errorCodes?: string[];\n}> {\n if (!token) {\n return { ok: false, errorCodes: [\"missing-input-response\"] };\n }\n\n const body = new URLSearchParams({\n secret,\n response: token,\n ...(remoteip ? { remoteip } : {}),\n });\n\n const res = await fetch(\n \"https://challenges.cloudflare.com/turnstile/v0/siteverify\",\n {\n method: \"POST\",\n body,\n }\n );\n\n const json = (await res.json()) as {\n success: boolean;\n action?: string;\n \"error-codes\"?: string[];\n // other fields exist (cdata, challenge_ts, hostname), but we don't need them here\n };\n\n const success = !!json.success;\n\n return {\n ok: success,\n action: json.action,\n errorCodes: json[\"error-codes\"],\n };\n}\n\n/** Build an action name from URL path (like your original) */\nconst getActionFromPath = (pathOrUrl: string): string => {\n // Support both \"/v2/api/user/onLogin\" and full URLs\n let path = pathOrUrl;\n try {\n // If it's a full URL, extract pathname\n path = new URL(pathOrUrl, \"http://dummy\").pathname;\n } catch {\n /* ignore */\n }\n path = path.split(\"?\")[0] || \"/\";\n return path.replace(/\\W/g, \"\").slice(0, 100);\n};\n\n/** Get a header value from either a Headers object or a plain object */\nconst getHeader = (\n headers: Headers | Record<string, string | string[] | undefined>,\n name: string\n): string | null => {\n if (headers instanceof Headers) return headers.get(name);\n const val = (headers as any)[name] ?? (headers as any)[name.toLowerCase()];\n if (Array.isArray(val)) return val[0] ?? null;\n return (val as string) ?? null;\n};\n\n/**\n * Middleware-style Turnstile verifier.\n *\n * For Cloudflare Workers, you can adapt the `ctx`/`next` pattern:\n * - `ctx.request` should be the Request\n * - `ctx.status` / `ctx.body` are response helpers in your own abstraction\n *\n * Expects the client to send the token in a header (choose one):\n * - \"x-recaptcha-token\" (default, kept for compatibility)\n * - \"cf-turnstile-token\" (fallback)\n *\n * Optionally send \"cf-turnstile-action\" from the client if you want to track actions.\n */\nexport default function turnstileVerify({\n secret, // Turnstile SECRET key\n headerName = \"x-recaptcha-token\",\n requireActionMatch = false, // Turnstile doesn't require action matching; keep optional\n}: {\n secret: string;\n headerName?: string;\n requireActionMatch?: boolean;\n}) {\n return async (ctx: any, next: (ctx?: any) => Promise<unknown>) => {\n // For Workers, ctx.request is typically a Request object\n const req: Request = ctx.request || ctx;\n\n const headers =\n (req.headers as Headers | Record<string, string | string[] | undefined>) ||\n {};\n\n const token =\n getHeader(headers, headerName) ||\n getHeader(headers, \"cf-turnstile-token\") ||\n null;\n\n // Prefer explicit action header, else derive from path/url\n const explicitAction = getHeader(headers, \"cf-turnstile-action\");\n const expectedAction =\n explicitAction || getActionFromPath((req as any).url || \"/\");\n\n const remoteip =\n getHeader(headers, \"cf-connecting-ip\") ||\n getHeader(headers, \"x-forwarded-for\") ||\n undefined;\n\n const result = await verifyTurnstile({\n secret,\n token,\n remoteip,\n });\n\n // If you want to enforce action matching, do it here.\n // Turnstile will echo the \"action\" you passed from the client\n // when calling turnstile.execute(siteKey, { action: '...' }).\n let ok = result.ok;\n if (requireActionMatch && expectedAction && result.action) {\n ok = ok && result.action === expectedAction;\n }\n\n if (!ok) {\n const payload = {\n action: result.action,\n expectedAction,\n errors: result.errorCodes ?? [],\n };\n console.warn(\"[Turnstile] verification failed: \" + JSON.stringify(payload));\n\n // For Workers, you may not have ctx.status/ctx.body by default.\n // If your framework uses ctx, adapt this part accordingly.\n ctx.status = 409; // or 403\n ctx.headers ||= new Headers();\n ctx.headers.set(\"Content-Type\", \"application/json\");\n ctx.body = JSON.stringify({ error: \"Turnstile verification failed\" });\n return;\n }\n\n // Pass verification result down if you want\n ctx.turnstile = {\n action: result.action,\n };\n\n await next(ctx);\n };\n}\n", "// import { Buffer } from 'buffer';\n// const isJson = (str) => {\n// try {\n// JSON.parse(str);\n// } catch (e) {\n// return false;\n// }\n// return true;\n// };\n// const isBase64 = (str) => {\n// if (typeof str !== 'string') return false;\n// if (str === '' || str.trim() === '') {\n// return false;\n// }\n// var base64regex = /^([0-9a-zA-Z+/]{4})*(([0-9a-zA-Z+/]{2}==)|([0-9a-zA-Z+/]{3}=))?$/;\n// return base64regex.test(str);\n// };\nconst XSSCheck = (value) => {\n // if (isBase64(value)) {\n // value = Buffer.from(value, 'base64').toString();\n // }\n return !new RegExp('(\\b)(onS+)(s*)=|javascript|<(|/|[^/>][^>]+|/[^>][^>]+)>').test(value);\n};\nconst validateKeyValue = (key, value, allowedKeys) => {\n if (!XSSCheck(value) || !allowedKeys[key](value)) {\n return false;\n }\n return true;\n};\n\nconst isObjectOrArray = (body) => {\n if (body === null) return false;\n if (typeof body !== 'object') return false;\n if (Array.isArray(body)) {\n if (!body[0] || typeof body[0] !== 'object') return false;\n }\n return true;\n};\nconst validateObject = (obj, allowedKeys) => {\n const keys = Object.keys(obj);\n for (const key of keys) {\n if (!allowedKeys[key]) {\n console.error('key not allowed', key);\n return false;\n }\n if (obj[key] === null) obj[key] = '';\n if (isObjectOrArray(obj[key])) {\n if (!validateObject(obj[key], allowedKeys)) {\n console.error('error validating key+validateObject:', key);\n return false;\n }\n } else {\n if (!validateKeyValue(key, obj[key], allowedKeys)) {\n console.error('error validating key+validateKeyValue:', key);\n return false;\n }\n }\n }\n return true;\n};\nconst isObject = (body) => {\n if (body == null) return false;\n if (typeof body !== 'object') return false;\n return true;\n};\n\nconst validateQuery = (ctx, allowedKeys) => {\n const query = ctx['query'];\n if (!isObject(query)) {\n return false;\n }\n return validateObject(query, allowedKeys);\n};\nexport const validatePathParms = (ctx, allowedKeys) => {\n const params = ctx.params;\n if (!params) return true;\n if (!isObject(params)) {\n return false;\n }\n return validateObject(params, allowedKeys);\n};\nasync function getBody(request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return {};\n }\n try {\n const body = await request.text();\n return JSON.parse(body);\n } catch {}\n return {};\n}\nexport default function userInputValidation({ allowedKeys }) {\n const status = 422;\n return async (ctx, next) => {\n if (!allowedKeys) {\n ctx.status = 501;\n return false;\n }\n if (!validatePathParms(ctx, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n if (!validateQuery(ctx, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n const body = await getBody(ctx.request);\n if (!validateObject(body, allowedKeys)) {\n ctx.status = status;\n return false;\n }\n await next(ctx);\n };\n}\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport { getToken } from './gcpAuth';\nimport utils from '../utils';\nconst _ = {\n get: lodashGet,\n};\n\nexport default function cloudfunction({ project_id, region, functionName, serviceAccount }) {\n return async (ctx, next) => {\n // Extract query parameters from the context\n const queryParams = _.get(ctx, 'request.query', {});\n\n // Build query string from parameters\n const queryString = new URLSearchParams(queryParams).toString();\n const url = `https://${region}-${project_id}.cloudfunctions.net/${functionName}`;\n // Construct the full URL with query parameters\n const urlWithParms = `https://${region}-${project_id}.cloudfunctions.net/${functionName}${\n queryString ? `?${queryString}` : ''\n }`;\n\n const token = await getToken(serviceAccount, url);\n ctx.request.headers['X-Serverless-Authorization'] = `Bearer ${token}`;\n\n const requestOptions = {\n headers: ctx.request.headers,\n method: ctx.request.method,\n redirect: 'manual',\n };\n\n if (\n constants.methodsMethodsWithBody.indexOf(ctx.request.method) !== -1 &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(urlWithParms, requestOptions);\n\n ctx.body = response.body;\n ctx.status = response.status;\n const responseHeaders = utils.instanceToJson(response.headers);\n utils.mergeHeaders(responseHeaders, ctx);\n await next(ctx);\n };\n}\n", "export default crypto;\nexport const isCryptoKey = (key) => key instanceof CryptoKey;\n", "import digest from '../runtime/digest.js';\nexport const encoder = new TextEncoder();\nexport const decoder = new TextDecoder();\nconst MAX_INT32 = 2 ** 32;\nexport function concat(...buffers) {\n const size = buffers.reduce((acc, { length }) => acc + length, 0);\n const buf = new Uint8Array(size);\n let i = 0;\n buffers.forEach((buffer) => {\n buf.set(buffer, i);\n i += buffer.length;\n });\n return buf;\n}\nexport function p2s(alg, p2sInput) {\n return concat(encoder.encode(alg), new Uint8Array([0]), p2sInput);\n}\nfunction writeUInt32BE(buf, value, offset) {\n if (value < 0 || value >= MAX_INT32) {\n throw new RangeError(`value must be >= 0 and <= ${MAX_INT32 - 1}. Received ${value}`);\n }\n buf.set([value >>> 24, value >>> 16, value >>> 8, value & 0xff], offset);\n}\nexport function uint64be(value) {\n const high = Math.floor(value / MAX_INT32);\n const low = value % MAX_INT32;\n const buf = new Uint8Array(8);\n writeUInt32BE(buf, high, 0);\n writeUInt32BE(buf, low, 4);\n return buf;\n}\nexport function uint32be(value) {\n const buf = new Uint8Array(4);\n writeUInt32BE(buf, value);\n return buf;\n}\nexport function lengthAndInput(input) {\n return concat(uint32be(input.length), input);\n}\nexport async function concatKdf(secret, bits, value) {\n const iterations = Math.ceil((bits >> 3) / 32);\n const res = new Uint8Array(iterations * 32);\n for (let iter = 0; iter < iterations; iter++) {\n const buf = new Uint8Array(4 + secret.length + value.length);\n buf.set(uint32be(iter + 1));\n buf.set(secret, 4);\n buf.set(value, 4 + secret.length);\n res.set(await digest('sha256', buf), iter * 32);\n }\n return res.slice(0, bits >> 3);\n}\n", "import { encoder, decoder } from '../lib/buffer_utils.js';\nexport const encodeBase64 = (input) => {\n let unencoded = input;\n if (typeof unencoded === 'string') {\n unencoded = encoder.encode(unencoded);\n }\n const CHUNK_SIZE = 0x8000;\n const arr = [];\n for (let i = 0; i < unencoded.length; i += CHUNK_SIZE) {\n arr.push(String.fromCharCode.apply(null, unencoded.subarray(i, i + CHUNK_SIZE)));\n }\n return btoa(arr.join(''));\n};\nexport const encode = (input) => {\n return encodeBase64(input).replace(/=/g, '').replace(/\\+/g, '-').replace(/\\//g, '_');\n};\nexport const decodeBase64 = (encoded) => {\n const binary = atob(encoded);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n};\nexport const decode = (input) => {\n let encoded = input;\n if (encoded instanceof Uint8Array) {\n encoded = decoder.decode(encoded);\n }\n encoded = encoded.replace(/-/g, '+').replace(/_/g, '/').replace(/\\s/g, '');\n try {\n return decodeBase64(encoded);\n }\n catch {\n throw new TypeError('The input to be decoded is not correctly encoded.');\n }\n};\n", "export class JOSEError extends Error {\n static get code() {\n return 'ERR_JOSE_GENERIC';\n }\n constructor(message) {\n super(message);\n this.code = 'ERR_JOSE_GENERIC';\n this.name = this.constructor.name;\n Error.captureStackTrace?.(this, this.constructor);\n }\n}\nexport class JWTClaimValidationFailed extends JOSEError {\n static get code() {\n return 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n }\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_CLAIM_VALIDATION_FAILED';\n this.claim = claim;\n this.reason = reason;\n }\n}\nexport class JWTExpired extends JOSEError {\n static get code() {\n return 'ERR_JWT_EXPIRED';\n }\n constructor(message, claim = 'unspecified', reason = 'unspecified') {\n super(message);\n this.code = 'ERR_JWT_EXPIRED';\n this.claim = claim;\n this.reason = reason;\n }\n}\nexport class JOSEAlgNotAllowed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n static get code() {\n return 'ERR_JOSE_ALG_NOT_ALLOWED';\n }\n}\nexport class JOSENotSupported extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JOSE_NOT_SUPPORTED';\n }\n static get code() {\n return 'ERR_JOSE_NOT_SUPPORTED';\n }\n}\nexport class JWEDecryptionFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_DECRYPTION_FAILED';\n this.message = 'decryption operation failed';\n }\n static get code() {\n return 'ERR_JWE_DECRYPTION_FAILED';\n }\n}\nexport class JWEInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWE_INVALID';\n }\n static get code() {\n return 'ERR_JWE_INVALID';\n }\n}\nexport class JWSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_INVALID';\n }\n static get code() {\n return 'ERR_JWS_INVALID';\n }\n}\nexport class JWTInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWT_INVALID';\n }\n static get code() {\n return 'ERR_JWT_INVALID';\n }\n}\nexport class JWKInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWK_INVALID';\n }\n static get code() {\n return 'ERR_JWK_INVALID';\n }\n}\nexport class JWKSInvalid extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_INVALID';\n }\n static get code() {\n return 'ERR_JWKS_INVALID';\n }\n}\nexport class JWKSNoMatchingKey extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_NO_MATCHING_KEY';\n this.message = 'no applicable key found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_NO_MATCHING_KEY';\n }\n}\nexport class JWKSMultipleMatchingKeys extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n this.message = 'multiple matching keys found in the JSON Web Key Set';\n }\n static get code() {\n return 'ERR_JWKS_MULTIPLE_MATCHING_KEYS';\n }\n}\nSymbol.asyncIterator;\nexport class JWKSTimeout extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWKS_TIMEOUT';\n this.message = 'request timed out';\n }\n static get code() {\n return 'ERR_JWKS_TIMEOUT';\n }\n}\nexport class JWSSignatureVerificationFailed extends JOSEError {\n constructor() {\n super(...arguments);\n this.code = 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n this.message = 'signature verification failed';\n }\n static get code() {\n return 'ERR_JWS_SIGNATURE_VERIFICATION_FAILED';\n }\n}\n", "import crypto from './webcrypto.js';\nexport default crypto.getRandomValues.bind(crypto);\n", "function unusable(name, prop = 'algorithm.name') {\n return new TypeError(`CryptoKey does not support this operation, its ${prop} must be ${name}`);\n}\nfunction isAlgorithm(algorithm, name) {\n return algorithm.name === name;\n}\nfunction getHashLength(hash) {\n return parseInt(hash.name.slice(4), 10);\n}\nfunction getNamedCurve(alg) {\n switch (alg) {\n case 'ES256':\n return 'P-256';\n case 'ES384':\n return 'P-384';\n case 'ES512':\n return 'P-521';\n default:\n throw new Error('unreachable');\n }\n}\nfunction checkUsage(key, usages) {\n if (usages.length && !usages.some((expected) => key.usages.includes(expected))) {\n let msg = 'CryptoKey does not support this operation, its usages must include ';\n if (usages.length > 2) {\n const last = usages.pop();\n msg += `one of ${usages.join(', ')}, or ${last}.`;\n }\n else if (usages.length === 2) {\n msg += `one of ${usages[0]} or ${usages[1]}.`;\n }\n else {\n msg += `${usages[0]}.`;\n }\n throw new TypeError(msg);\n }\n}\nexport function checkSigCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512': {\n if (!isAlgorithm(key.algorithm, 'HMAC'))\n throw unusable('HMAC');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'RS256':\n case 'RS384':\n case 'RS512': {\n if (!isAlgorithm(key.algorithm, 'RSASSA-PKCS1-v1_5'))\n throw unusable('RSASSA-PKCS1-v1_5');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'PS256':\n case 'PS384':\n case 'PS512': {\n if (!isAlgorithm(key.algorithm, 'RSA-PSS'))\n throw unusable('RSA-PSS');\n const expected = parseInt(alg.slice(2), 10);\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n case 'EdDSA': {\n if (key.algorithm.name !== 'Ed25519' && key.algorithm.name !== 'Ed448') {\n throw unusable('Ed25519 or Ed448');\n }\n break;\n }\n case 'ES256':\n case 'ES384':\n case 'ES512': {\n if (!isAlgorithm(key.algorithm, 'ECDSA'))\n throw unusable('ECDSA');\n const expected = getNamedCurve(alg);\n const actual = key.algorithm.namedCurve;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.namedCurve');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\nexport function checkEncCryptoKey(key, alg, ...usages) {\n switch (alg) {\n case 'A128GCM':\n case 'A192GCM':\n case 'A256GCM': {\n if (!isAlgorithm(key.algorithm, 'AES-GCM'))\n throw unusable('AES-GCM');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'A128KW':\n case 'A192KW':\n case 'A256KW': {\n if (!isAlgorithm(key.algorithm, 'AES-KW'))\n throw unusable('AES-KW');\n const expected = parseInt(alg.slice(1, 4), 10);\n const actual = key.algorithm.length;\n if (actual !== expected)\n throw unusable(expected, 'algorithm.length');\n break;\n }\n case 'ECDH': {\n switch (key.algorithm.name) {\n case 'ECDH':\n case 'X25519':\n case 'X448':\n break;\n default:\n throw unusable('ECDH, X25519, or X448');\n }\n break;\n }\n case 'PBES2-HS256+A128KW':\n case 'PBES2-HS384+A192KW':\n case 'PBES2-HS512+A256KW':\n if (!isAlgorithm(key.algorithm, 'PBKDF2'))\n throw unusable('PBKDF2');\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512': {\n if (!isAlgorithm(key.algorithm, 'RSA-OAEP'))\n throw unusable('RSA-OAEP');\n const expected = parseInt(alg.slice(9), 10) || 1;\n const actual = getHashLength(key.algorithm.hash);\n if (actual !== expected)\n throw unusable(`SHA-${expected}`, 'algorithm.hash');\n break;\n }\n default:\n throw new TypeError('CryptoKey does not support this operation');\n }\n checkUsage(key, usages);\n}\n", "function message(msg, actual, ...types) {\n if (types.length > 2) {\n const last = types.pop();\n msg += `one of type ${types.join(', ')}, or ${last}.`;\n }\n else if (types.length === 2) {\n msg += `one of type ${types[0]} or ${types[1]}.`;\n }\n else {\n msg += `of type ${types[0]}.`;\n }\n if (actual == null) {\n msg += ` Received ${actual}`;\n }\n else if (typeof actual === 'function' && actual.name) {\n msg += ` Received function ${actual.name}`;\n }\n else if (typeof actual === 'object' && actual != null) {\n if (actual.constructor && actual.constructor.name) {\n msg += ` Received an instance of ${actual.constructor.name}`;\n }\n }\n return msg;\n}\nexport default (actual, ...types) => {\n return message('Key must be ', actual, ...types);\n};\nexport function withAlg(alg, actual, ...types) {\n return message(`Key for the ${alg} algorithm must be `, actual, ...types);\n}\n", "import { isCryptoKey } from './webcrypto.js';\nexport default (key) => {\n return isCryptoKey(key);\n};\nexport const types = ['CryptoKey'];\n", "const isDisjoint = (...headers) => {\n const sources = headers.filter(Boolean);\n if (sources.length === 0 || sources.length === 1) {\n return true;\n }\n let acc;\n for (const header of sources) {\n const parameters = Object.keys(header);\n if (!acc || acc.size === 0) {\n acc = new Set(parameters);\n continue;\n }\n for (const parameter of parameters) {\n if (acc.has(parameter)) {\n return false;\n }\n acc.add(parameter);\n }\n }\n return true;\n};\nexport default isDisjoint;\n", "function isObjectLike(value) {\n return typeof value === 'object' && value !== null;\n}\nexport default function isObject(input) {\n if (!isObjectLike(input) || Object.prototype.toString.call(input) !== '[object Object]') {\n return false;\n }\n if (Object.getPrototypeOf(input) === null) {\n return true;\n }\n let proto = input;\n while (Object.getPrototypeOf(proto) !== null) {\n proto = Object.getPrototypeOf(proto);\n }\n return Object.getPrototypeOf(input) === proto;\n}\n", "export default (alg, key) => {\n if (alg.startsWith('RS') || alg.startsWith('PS')) {\n const { modulusLength } = key.algorithm;\n if (typeof modulusLength !== 'number' || modulusLength < 2048) {\n throw new TypeError(`${alg} requires key modulusLength to be 2048 bits or larger`);\n }\n }\n};\n", "import crypto, { isCryptoKey } from './webcrypto.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { encodeBase64, decodeBase64 } from './base64url.js';\nimport formatPEM from '../lib/format_pem.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport { types } from './is_key_like.js';\nconst genericExport = async (keyType, keyFormat, key) => {\n if (!isCryptoKey(key)) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n if (!key.extractable) {\n throw new TypeError('CryptoKey is not extractable');\n }\n if (key.type !== keyType) {\n throw new TypeError(`key is not a ${keyType} key`);\n }\n return formatPEM(encodeBase64(new Uint8Array(await crypto.subtle.exportKey(keyFormat, key))), `${keyType.toUpperCase()} KEY`);\n};\nexport const toSPKI = (key) => {\n return genericExport('public', 'spki', key);\n};\nexport const toPKCS8 = (key) => {\n return genericExport('private', 'pkcs8', key);\n};\nconst findOid = (keyData, oid, from = 0) => {\n if (from === 0) {\n oid.unshift(oid.length);\n oid.unshift(0x06);\n }\n let i = keyData.indexOf(oid[0], from);\n if (i === -1)\n return false;\n const sub = keyData.subarray(i, i + oid.length);\n if (sub.length !== oid.length)\n return false;\n return sub.every((value, index) => value === oid[index]) || findOid(keyData, oid, i + 1);\n};\nconst getNamedCurve = (keyData) => {\n switch (true) {\n case findOid(keyData, [0x2a, 0x86, 0x48, 0xce, 0x3d, 0x03, 0x01, 0x07]):\n return 'P-256';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x22]):\n return 'P-384';\n case findOid(keyData, [0x2b, 0x81, 0x04, 0x00, 0x23]):\n return 'P-521';\n case findOid(keyData, [0x2b, 0x65, 0x6e]):\n return 'X25519';\n case findOid(keyData, [0x2b, 0x65, 0x6f]):\n return 'X448';\n case findOid(keyData, [0x2b, 0x65, 0x70]):\n return 'Ed25519';\n case findOid(keyData, [0x2b, 0x65, 0x71]):\n return 'Ed448';\n default:\n throw new JOSENotSupported('Invalid or unsupported EC Key Curve or OKP Key Sub Type');\n }\n};\nconst genericImport = async (replace, keyFormat, pem, alg, options) => {\n let algorithm;\n let keyUsages;\n const keyData = new Uint8Array(atob(pem.replace(replace, ''))\n .split('')\n .map((c) => c.charCodeAt(0)));\n const isPublic = keyFormat === 'spki';\n switch (alg) {\n case 'PS256':\n case 'PS384':\n case 'PS512':\n algorithm = { name: 'RSA-PSS', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RS256':\n case 'RS384':\n case 'RS512':\n algorithm = { name: 'RSASSA-PKCS1-v1_5', hash: `SHA-${alg.slice(-3)}` };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'RSA-OAEP':\n case 'RSA-OAEP-256':\n case 'RSA-OAEP-384':\n case 'RSA-OAEP-512':\n algorithm = {\n name: 'RSA-OAEP',\n hash: `SHA-${parseInt(alg.slice(-3), 10) || 1}`,\n };\n keyUsages = isPublic ? ['encrypt', 'wrapKey'] : ['decrypt', 'unwrapKey'];\n break;\n case 'ES256':\n algorithm = { name: 'ECDSA', namedCurve: 'P-256' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES384':\n algorithm = { name: 'ECDSA', namedCurve: 'P-384' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ES512':\n algorithm = { name: 'ECDSA', namedCurve: 'P-521' };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n case 'ECDH-ES':\n case 'ECDH-ES+A128KW':\n case 'ECDH-ES+A192KW':\n case 'ECDH-ES+A256KW': {\n const namedCurve = getNamedCurve(keyData);\n algorithm = namedCurve.startsWith('P-') ? { name: 'ECDH', namedCurve } : { name: namedCurve };\n keyUsages = isPublic ? [] : ['deriveBits'];\n break;\n }\n case 'EdDSA':\n algorithm = { name: getNamedCurve(keyData) };\n keyUsages = isPublic ? ['verify'] : ['sign'];\n break;\n default:\n throw new JOSENotSupported('Invalid or unsupported \"alg\" (Algorithm) value');\n }\n return crypto.subtle.importKey(keyFormat, keyData, algorithm, options?.extractable ?? false, keyUsages);\n};\nexport const fromPKCS8 = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PRIVATE KEY-----|\\s)/g, 'pkcs8', pem, alg, options);\n};\nexport const fromSPKI = (pem, alg, options) => {\n return genericImport(/(?:-----(?:BEGIN|END) PUBLIC KEY-----|\\s)/g, 'spki', pem, alg, options);\n};\nfunction getElement(seq) {\n let result = [];\n let next = 0;\n while (next < seq.length) {\n let nextPart = parseElement(seq.subarray(next));\n result.push(nextPart);\n next += nextPart.byteLength;\n }\n return result;\n}\nfunction parseElement(bytes) {\n let position = 0;\n let tag = bytes[0] & 0x1f;\n position++;\n if (tag === 0x1f) {\n tag = 0;\n while (bytes[position] >= 0x80) {\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n tag = tag * 128 + bytes[position] - 0x80;\n position++;\n }\n let length = 0;\n if (bytes[position] < 0x80) {\n length = bytes[position];\n position++;\n }\n else if (length === 0x80) {\n length = 0;\n while (bytes[position + length] !== 0 || bytes[position + length + 1] !== 0) {\n if (length > bytes.byteLength) {\n throw new TypeError('invalid indefinite form length');\n }\n length++;\n }\n const byteLength = position + length + 2;\n return {\n byteLength,\n contents: bytes.subarray(position, position + length),\n raw: bytes.subarray(0, byteLength),\n };\n }\n else {\n let numberOfDigits = bytes[position] & 0x7f;\n position++;\n length = 0;\n for (let i = 0; i < numberOfDigits; i++) {\n length = length * 256 + bytes[position];\n position++;\n }\n }\n const byteLength = position + length;\n return {\n byteLength,\n contents: bytes.subarray(position, byteLength),\n raw: bytes.subarray(0, byteLength),\n };\n}\nfunction spkiFromX509(buf) {\n const tbsCertificate = getElement(getElement(parseElement(buf).contents)[0].contents);\n return encodeBase64(tbsCertificate[tbsCertificate[0].raw[0] === 0xa0 ? 6 : 5].raw);\n}\nfunction getSPKI(x509) {\n const pem = x509.replace(/(?:-----(?:BEGIN|END) CERTIFICATE-----|\\s)/g, '');\n const raw = decodeBase64(pem);\n return formatPEM(spkiFromX509(raw), 'PUBLIC KEY');\n}\nexport const fromX509 = (pem, alg, options) => {\n let spki;\n try {\n spki = getSPKI(pem);\n }\n catch (cause) {\n throw new TypeError('Failed to parse the X.509 certificate', { cause });\n }\n return fromSPKI(spki, alg, options);\n};\n", "import { decode as decodeBase64URL } from '../runtime/base64url.js';\nimport { fromSPKI, fromPKCS8, fromX509 } from '../runtime/asn1.js';\nimport asKeyObject from '../runtime/jwk_to_key.js';\nimport { JOSENotSupported } from '../util/errors.js';\nimport isObject from '../lib/is_object.js';\nexport async function importSPKI(spki, alg, options) {\n if (typeof spki !== 'string' || spki.indexOf('-----BEGIN PUBLIC KEY-----') !== 0) {\n throw new TypeError('\"spki\" must be SPKI formatted string');\n }\n return fromSPKI(spki, alg, options);\n}\nexport async function importX509(x509, alg, options) {\n if (typeof x509 !== 'string' || x509.indexOf('-----BEGIN CERTIFICATE-----') !== 0) {\n throw new TypeError('\"x509\" must be X.509 formatted string');\n }\n return fromX509(x509, alg, options);\n}\nexport async function importPKCS8(pkcs8, alg, options) {\n if (typeof pkcs8 !== 'string' || pkcs8.indexOf('-----BEGIN PRIVATE KEY-----') !== 0) {\n throw new TypeError('\"pkcs8\" must be PKCS#8 formatted string');\n }\n return fromPKCS8(pkcs8, alg, options);\n}\nexport async function importJWK(jwk, alg) {\n if (!isObject(jwk)) {\n throw new TypeError('JWK must be an object');\n }\n alg || (alg = jwk.alg);\n switch (jwk.kty) {\n case 'oct':\n if (typeof jwk.k !== 'string' || !jwk.k) {\n throw new TypeError('missing \"k\" (Key Value) Parameter value');\n }\n return decodeBase64URL(jwk.k);\n case 'RSA':\n if (jwk.oth !== undefined) {\n throw new JOSENotSupported('RSA JWK \"oth\" (Other Primes Info) Parameter value is not supported');\n }\n case 'EC':\n case 'OKP':\n return asKeyObject({ ...jwk, alg });\n default:\n throw new JOSENotSupported('Unsupported \"kty\" (Key Type) Parameter value');\n }\n}\n", "import { withAlg as invalidKeyInput } from './invalid_key_input.js';\nimport isKeyLike, { types } from '../runtime/is_key_like.js';\nconst symmetricTypeCheck = (alg, key) => {\n if (key instanceof Uint8Array)\n return;\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, ...types, 'Uint8Array'));\n }\n if (key.type !== 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for symmetric algorithms must be of type \"secret\"`);\n }\n};\nconst asymmetricTypeCheck = (alg, key, usage) => {\n if (!isKeyLike(key)) {\n throw new TypeError(invalidKeyInput(alg, key, ...types));\n }\n if (key.type === 'secret') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithms must not be of type \"secret\"`);\n }\n if (usage === 'sign' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm signing must be of type \"private\"`);\n }\n if (usage === 'decrypt' && key.type === 'public') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm decryption must be of type \"private\"`);\n }\n if (key.algorithm && usage === 'verify' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm verifying must be of type \"public\"`);\n }\n if (key.algorithm && usage === 'encrypt' && key.type === 'private') {\n throw new TypeError(`${types.join(' or ')} instances for asymmetric algorithm encryption must be of type \"public\"`);\n }\n};\nconst checkKeyType = (alg, key, usage) => {\n const symmetric = alg.startsWith('HS') ||\n alg === 'dir' ||\n alg.startsWith('PBES2') ||\n /^A\\d{3}(?:GCM)?KW$/.test(alg);\n if (symmetric) {\n symmetricTypeCheck(alg, key);\n }\n else {\n asymmetricTypeCheck(alg, key, usage);\n }\n};\nexport default checkKeyType;\n", "import { JOSENotSupported } from '../util/errors.js';\nfunction validateCrit(Err, recognizedDefault, recognizedOption, protectedHeader, joseHeader) {\n if (joseHeader.crit !== undefined && protectedHeader.crit === undefined) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be integrity protected');\n }\n if (!protectedHeader || protectedHeader.crit === undefined) {\n return new Set();\n }\n if (!Array.isArray(protectedHeader.crit) ||\n protectedHeader.crit.length === 0 ||\n protectedHeader.crit.some((input) => typeof input !== 'string' || input.length === 0)) {\n throw new Err('\"crit\" (Critical) Header Parameter MUST be an array of non-empty strings when present');\n }\n let recognized;\n if (recognizedOption !== undefined) {\n recognized = new Map([...Object.entries(recognizedOption), ...recognizedDefault.entries()]);\n }\n else {\n recognized = recognizedDefault;\n }\n for (const parameter of protectedHeader.crit) {\n if (!recognized.has(parameter)) {\n throw new JOSENotSupported(`Extension Header Parameter \"${parameter}\" is not recognized`);\n }\n if (joseHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" is missing`);\n }\n else if (recognized.get(parameter) && protectedHeader[parameter] === undefined) {\n throw new Err(`Extension Header Parameter \"${parameter}\" MUST be integrity protected`);\n }\n }\n return new Set(protectedHeader.crit);\n}\nexport default validateCrit;\n", "import { encode as base64url } from '../../runtime/base64url.js';\nimport encrypt from '../../runtime/encrypt.js';\nimport generateIv from '../../lib/iv.js';\nimport encryptKeyManagement from '../../lib/encrypt_key_management.js';\nimport { JOSENotSupported, JWEInvalid } from '../../util/errors.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport const unprotected = Symbol();\nexport class FlattenedEncrypt {\n constructor(plaintext) {\n if (!(plaintext instanceof Uint8Array)) {\n throw new TypeError('plaintext must be an instance of Uint8Array');\n }\n this._plaintext = plaintext;\n }\n setKeyManagementParameters(parameters) {\n if (this._keyManagementParameters) {\n throw new TypeError('setKeyManagementParameters can only be called once');\n }\n this._keyManagementParameters = parameters;\n return this;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setSharedUnprotectedHeader(sharedUnprotectedHeader) {\n if (this._sharedUnprotectedHeader) {\n throw new TypeError('setSharedUnprotectedHeader can only be called once');\n }\n this._sharedUnprotectedHeader = sharedUnprotectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n setAdditionalAuthenticatedData(aad) {\n this._aad = aad;\n return this;\n }\n setContentEncryptionKey(cek) {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey can only be called once');\n }\n this._cek = cek;\n return this;\n }\n setInitializationVector(iv) {\n if (this._iv) {\n throw new TypeError('setInitializationVector can only be called once');\n }\n this._iv = iv;\n return this;\n }\n async encrypt(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader && !this._sharedUnprotectedHeader) {\n throw new JWEInvalid('either setProtectedHeader, setUnprotectedHeader, or sharedUnprotectedHeader must be called before #encrypt()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader, this._sharedUnprotectedHeader)) {\n throw new JWEInvalid('JWE Protected, JWE Shared Unprotected and JWE Per-Recipient Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n ...this._sharedUnprotectedHeader,\n };\n validateCrit(JWEInvalid, new Map(), options?.crit, this._protectedHeader, joseHeader);\n if (joseHeader.zip !== undefined) {\n throw new JOSENotSupported('JWE \"zip\" (Compression Algorithm) Header Parameter is not supported.');\n }\n const { alg, enc } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWEInvalid('JWE \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n if (typeof enc !== 'string' || !enc) {\n throw new JWEInvalid('JWE \"enc\" (Encryption Algorithm) Header Parameter missing or invalid');\n }\n let encryptedKey;\n if (alg === 'dir') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Encryption');\n }\n }\n else if (alg === 'ECDH-ES') {\n if (this._cek) {\n throw new TypeError('setContentEncryptionKey cannot be called when using Direct Key Agreement');\n }\n }\n let cek;\n {\n let parameters;\n ({ cek, encryptedKey, parameters } = await encryptKeyManagement(alg, enc, key, this._cek, this._keyManagementParameters));\n if (parameters) {\n if (options && unprotected in options) {\n if (!this._unprotectedHeader) {\n this.setUnprotectedHeader(parameters);\n }\n else {\n this._unprotectedHeader = { ...this._unprotectedHeader, ...parameters };\n }\n }\n else {\n if (!this._protectedHeader) {\n this.setProtectedHeader(parameters);\n }\n else {\n this._protectedHeader = { ...this._protectedHeader, ...parameters };\n }\n }\n }\n }\n this._iv || (this._iv = generateIv(enc));\n let additionalData;\n let protectedHeader;\n let aadMember;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n if (this._aad) {\n aadMember = base64url(this._aad);\n additionalData = concat(protectedHeader, encoder.encode('.'), encoder.encode(aadMember));\n }\n else {\n additionalData = protectedHeader;\n }\n const { ciphertext, tag } = await encrypt(enc, this._plaintext, cek, this._iv, additionalData);\n const jwe = {\n ciphertext: base64url(ciphertext),\n iv: base64url(this._iv),\n tag: base64url(tag),\n };\n if (encryptedKey) {\n jwe.encrypted_key = base64url(encryptedKey);\n }\n if (aadMember) {\n jwe.aad = aadMember;\n }\n if (this._protectedHeader) {\n jwe.protected = decoder.decode(protectedHeader);\n }\n if (this._sharedUnprotectedHeader) {\n jwe.unprotected = this._sharedUnprotectedHeader;\n }\n if (this._unprotectedHeader) {\n jwe.header = this._unprotectedHeader;\n }\n return jwe;\n }\n}\n", "import { JOSENotSupported } from '../util/errors.js';\nexport default function subtleDsa(alg, algorithm) {\n const hash = `SHA-${alg.slice(-3)}`;\n switch (alg) {\n case 'HS256':\n case 'HS384':\n case 'HS512':\n return { hash, name: 'HMAC' };\n case 'PS256':\n case 'PS384':\n case 'PS512':\n return { hash, name: 'RSA-PSS', saltLength: alg.slice(-3) >> 3 };\n case 'RS256':\n case 'RS384':\n case 'RS512':\n return { hash, name: 'RSASSA-PKCS1-v1_5' };\n case 'ES256':\n case 'ES384':\n case 'ES512':\n return { hash, name: 'ECDSA', namedCurve: algorithm.namedCurve };\n case 'EdDSA':\n return { name: algorithm.name };\n default:\n throw new JOSENotSupported(`alg ${alg} is not supported either by JOSE or your javascript runtime`);\n }\n}\n", "import crypto, { isCryptoKey } from './webcrypto.js';\nimport { checkSigCryptoKey } from '../lib/crypto_key.js';\nimport invalidKeyInput from '../lib/invalid_key_input.js';\nimport { types } from './is_key_like.js';\nexport default function getCryptoKey(alg, key, usage) {\n if (isCryptoKey(key)) {\n checkSigCryptoKey(key, alg, usage);\n return key;\n }\n if (key instanceof Uint8Array) {\n if (!alg.startsWith('HS')) {\n throw new TypeError(invalidKeyInput(key, ...types));\n }\n return crypto.subtle.importKey('raw', key, { hash: `SHA-${alg.slice(-3)}`, name: 'HMAC' }, false, [usage]);\n }\n throw new TypeError(invalidKeyInput(key, ...types, 'Uint8Array'));\n}\n", "export default (date) => Math.floor(date.getTime() / 1000);\n", "const minute = 60;\nconst hour = minute * 60;\nconst day = hour * 24;\nconst week = day * 7;\nconst year = day * 365.25;\nconst REGEX = /^(\\d+|\\d+\\.\\d+) ?(seconds?|secs?|s|minutes?|mins?|m|hours?|hrs?|h|days?|d|weeks?|w|years?|yrs?|y)$/i;\nexport default (str) => {\n const matched = REGEX.exec(str);\n if (!matched) {\n throw new TypeError('Invalid time period format');\n }\n const value = parseFloat(matched[1]);\n const unit = matched[2].toLowerCase();\n switch (unit) {\n case 'sec':\n case 'secs':\n case 'second':\n case 'seconds':\n case 's':\n return Math.round(value);\n case 'minute':\n case 'minutes':\n case 'min':\n case 'mins':\n case 'm':\n return Math.round(value * minute);\n case 'hour':\n case 'hours':\n case 'hr':\n case 'hrs':\n case 'h':\n return Math.round(value * hour);\n case 'day':\n case 'days':\n case 'd':\n return Math.round(value * day);\n case 'week':\n case 'weeks':\n case 'w':\n return Math.round(value * week);\n default:\n return Math.round(value * year);\n }\n};\n", "import subtleAlgorithm from './subtle_dsa.js';\nimport crypto from './webcrypto.js';\nimport checkKeyLength from './check_key_length.js';\nimport getSignKey from './get_sign_verify_key.js';\nconst sign = async (alg, key, data) => {\n const cryptoKey = await getSignKey(alg, key, 'sign');\n checkKeyLength(alg, cryptoKey);\n const signature = await crypto.subtle.sign(subtleAlgorithm(alg, cryptoKey.algorithm), cryptoKey, data);\n return new Uint8Array(signature);\n};\nexport default sign;\n", "import { encode as base64url } from '../../runtime/base64url.js';\nimport sign from '../../runtime/sign.js';\nimport isDisjoint from '../../lib/is_disjoint.js';\nimport { JWSInvalid } from '../../util/errors.js';\nimport { encoder, decoder, concat } from '../../lib/buffer_utils.js';\nimport checkKeyType from '../../lib/check_key_type.js';\nimport validateCrit from '../../lib/validate_crit.js';\nexport class FlattenedSign {\n constructor(payload) {\n if (!(payload instanceof Uint8Array)) {\n throw new TypeError('payload must be an instance of Uint8Array');\n }\n this._payload = payload;\n }\n setProtectedHeader(protectedHeader) {\n if (this._protectedHeader) {\n throw new TypeError('setProtectedHeader can only be called once');\n }\n this._protectedHeader = protectedHeader;\n return this;\n }\n setUnprotectedHeader(unprotectedHeader) {\n if (this._unprotectedHeader) {\n throw new TypeError('setUnprotectedHeader can only be called once');\n }\n this._unprotectedHeader = unprotectedHeader;\n return this;\n }\n async sign(key, options) {\n if (!this._protectedHeader && !this._unprotectedHeader) {\n throw new JWSInvalid('either setProtectedHeader or setUnprotectedHeader must be called before #sign()');\n }\n if (!isDisjoint(this._protectedHeader, this._unprotectedHeader)) {\n throw new JWSInvalid('JWS Protected and JWS Unprotected Header Parameter names must be disjoint');\n }\n const joseHeader = {\n ...this._protectedHeader,\n ...this._unprotectedHeader,\n };\n const extensions = validateCrit(JWSInvalid, new Map([['b64', true]]), options?.crit, this._protectedHeader, joseHeader);\n let b64 = true;\n if (extensions.has('b64')) {\n b64 = this._protectedHeader.b64;\n if (typeof b64 !== 'boolean') {\n throw new JWSInvalid('The \"b64\" (base64url-encode payload) Header Parameter must be a boolean');\n }\n }\n const { alg } = joseHeader;\n if (typeof alg !== 'string' || !alg) {\n throw new JWSInvalid('JWS \"alg\" (Algorithm) Header Parameter missing or invalid');\n }\n checkKeyType(alg, key, 'sign');\n let payload = this._payload;\n if (b64) {\n payload = encoder.encode(base64url(payload));\n }\n let protectedHeader;\n if (this._protectedHeader) {\n protectedHeader = encoder.encode(base64url(JSON.stringify(this._protectedHeader)));\n }\n else {\n protectedHeader = encoder.encode('');\n }\n const data = concat(protectedHeader, encoder.encode('.'), payload);\n const signature = await sign(alg, key, data);\n const jws = {\n signature: base64url(signature),\n payload: '',\n };\n if (b64) {\n jws.payload = decoder.decode(payload);\n }\n if (this._unprotectedHeader) {\n jws.header = this._unprotectedHeader;\n }\n if (this._protectedHeader) {\n jws.protected = decoder.decode(protectedHeader);\n }\n return jws;\n }\n}\n", "import { FlattenedSign } from '../flattened/sign.js';\nexport class CompactSign {\n constructor(payload) {\n this._flattened = new FlattenedSign(payload);\n }\n setProtectedHeader(protectedHeader) {\n this._flattened.setProtectedHeader(protectedHeader);\n return this;\n }\n async sign(key, options) {\n const jws = await this._flattened.sign(key, options);\n if (jws.payload === undefined) {\n throw new TypeError('use the flattened module for creating JWS with b64: false');\n }\n return `${jws.protected}.${jws.payload}.${jws.signature}`;\n }\n}\n", "import epoch from '../lib/epoch.js';\nimport isObject from '../lib/is_object.js';\nimport secs from '../lib/secs.js';\nfunction validateInput(label, input) {\n if (!Number.isFinite(input)) {\n throw new TypeError(`Invalid ${label} input`);\n }\n return input;\n}\nexport class ProduceJWT {\n constructor(payload = {}) {\n if (!isObject(payload)) {\n throw new TypeError('JWT Claims Set MUST be an object');\n }\n this._payload = payload;\n }\n setIssuer(issuer) {\n this._payload = { ...this._payload, iss: issuer };\n return this;\n }\n setSubject(subject) {\n this._payload = { ...this._payload, sub: subject };\n return this;\n }\n setAudience(audience) {\n this._payload = { ...this._payload, aud: audience };\n return this;\n }\n setJti(jwtId) {\n this._payload = { ...this._payload, jti: jwtId };\n return this;\n }\n setNotBefore(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, nbf: validateInput('setNotBefore', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, nbf: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setExpirationTime(input) {\n if (typeof input === 'number') {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', input) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, exp: validateInput('setExpirationTime', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, exp: epoch(new Date()) + secs(input) };\n }\n return this;\n }\n setIssuedAt(input) {\n if (typeof input === 'undefined') {\n this._payload = { ...this._payload, iat: epoch(new Date()) };\n }\n else if (input instanceof Date) {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', epoch(input)) };\n }\n else {\n this._payload = { ...this._payload, iat: validateInput('setIssuedAt', input) };\n }\n return this;\n }\n}\n", "import { CompactSign } from '../jws/compact/sign.js';\nimport { JWTInvalid } from '../util/errors.js';\nimport { encoder } from '../lib/buffer_utils.js';\nimport { ProduceJWT } from './produce.js';\nexport class SignJWT extends ProduceJWT {\n setProtectedHeader(protectedHeader) {\n this._protectedHeader = protectedHeader;\n return this;\n }\n async sign(key, options) {\n const sig = new CompactSign(encoder.encode(JSON.stringify(this._payload)));\n sig.setProtectedHeader(this._protectedHeader);\n if (Array.isArray(this._protectedHeader?.crit) &&\n this._protectedHeader.crit.includes('b64') &&\n this._protectedHeader.b64 === false) {\n throw new JWTInvalid('JWTs MUST NOT use unencoded payload');\n }\n return sig.sign(key, options);\n }\n}\n", "import fetchJwks from '../runtime/fetch_jwks.js';\nimport { JWKSInvalid, JWKSNoMatchingKey } from '../util/errors.js';\nimport { isJWKSLike, LocalJWKSet } from './local.js';\nfunction isCloudflareWorkers() {\n return (typeof WebSocketPair !== 'undefined' ||\n (typeof navigator !== 'undefined' && navigator.userAgent === 'Cloudflare-Workers') ||\n (typeof EdgeRuntime !== 'undefined' && EdgeRuntime === 'vercel'));\n}\nlet USER_AGENT;\nif (typeof navigator === 'undefined' || !navigator.userAgent?.startsWith?.('Mozilla/5.0 ')) {\n const NAME = 'jose';\n const VERSION = 'v5.1.0';\n USER_AGENT = `${NAME}/${VERSION}`;\n}\nclass RemoteJWKSet extends LocalJWKSet {\n constructor(url, options) {\n super({ keys: [] });\n this._jwks = undefined;\n if (!(url instanceof URL)) {\n throw new TypeError('url must be an instance of URL');\n }\n this._url = new URL(url.href);\n this._options = { agent: options?.agent, headers: options?.headers };\n this._timeoutDuration =\n typeof options?.timeoutDuration === 'number' ? options?.timeoutDuration : 5000;\n this._cooldownDuration =\n typeof options?.cooldownDuration === 'number' ? options?.cooldownDuration : 30000;\n this._cacheMaxAge = typeof options?.cacheMaxAge === 'number' ? options?.cacheMaxAge : 600000;\n }\n coolingDown() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cooldownDuration\n : false;\n }\n fresh() {\n return typeof this._jwksTimestamp === 'number'\n ? Date.now() < this._jwksTimestamp + this._cacheMaxAge\n : false;\n }\n async getKey(protectedHeader, token) {\n if (!this._jwks || !this.fresh()) {\n await this.reload();\n }\n try {\n return await super.getKey(protectedHeader, token);\n }\n catch (err) {\n if (err instanceof JWKSNoMatchingKey) {\n if (this.coolingDown() === false) {\n await this.reload();\n return super.getKey(protectedHeader, token);\n }\n }\n throw err;\n }\n }\n async reload() {\n if (this._pendingFetch && isCloudflareWorkers()) {\n this._pendingFetch = undefined;\n }\n const headers = new Headers(this._options.headers);\n if (USER_AGENT && !headers.has('User-Agent')) {\n headers.set('User-Agent', USER_AGENT);\n this._options.headers = Object.fromEntries(headers.entries());\n }\n this._pendingFetch || (this._pendingFetch = fetchJwks(this._url, this._timeoutDuration, this._options)\n .then((json) => {\n if (!isJWKSLike(json)) {\n throw new JWKSInvalid('JSON Web Key Set malformed');\n }\n this._jwks = { keys: json.keys };\n this._jwksTimestamp = Date.now();\n this._pendingFetch = undefined;\n })\n .catch((err) => {\n this._pendingFetch = undefined;\n throw err;\n }));\n await this._pendingFetch;\n }\n}\nexport function createRemoteJWKSet(url, options) {\n const set = new RemoteJWKSet(url, options);\n return async function (protectedHeader, token) {\n return set.getKey(protectedHeader, token);\n };\n}\n", "/**\n * Copyright 2018 Google Inc. All Rights Reserved.\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n * http://www.apache.org/licenses/LICENSE-2.0\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n */\n\n/**\n * @public\n * @typedef Options\n * @property {string} [url] the URL to request\n * @property {'get'|'post'|'put'|'patch'|'delete'|'options'|'head'|'GET'|'POST'|'PUT'|'PATCH'|'DELETE'|'OPTIONS'|'HEAD'} [method=\"get\"] HTTP method, case-insensitive\n * @property {RequestHeaders} [headers] Request headers\n * @property {FormData|string|object} [body] a body, optionally encoded, to send\n * @property {'text'|'json'|'stream'|'blob'|'arrayBuffer'|'formData'|'stream'} [responseType=\"json\"] An encoding to use for the response\n * @property {Record<string,any>|URLSearchParams} [params] querystring parameters\n * @property {(params: Options['params']) => string} [paramsSerializer] custom function to stringify querystring parameters\n * @property {boolean} [withCredentials] Send the request with credentials like cookies\n * @property {string} [auth] Authorization header value to send with the request\n * @property {string} [xsrfCookieName] Pass an Cross-site Request Forgery prevention cookie value as a header defined by `xsrfHeaderName`\n * @property {string} [xsrfHeaderName] The name of a header to use for passing XSRF cookies\n * @property {(status: number) => boolean} [validateStatus] Override status code handling (default: 200-399 is a success)\n * @property {Array<(body: any, headers?: RequestHeaders) => any?>} [transformRequest] An array of transformations to apply to the outgoing request\n * @property {string} [baseURL] a base URL from which to resolve all URLs\n * @property {typeof window.fetch} [fetch] Custom window.fetch implementation\n * @property {any} [data]\n */\n\n/**\n * @public\n * @typedef RequestHeaders\n * @type {{[name: string]: string} | Headers}\n */\n\n/**\n * @public\n * @template T\n * @typedef Response\n * @property {number} status\n * @property {string} statusText\n * @property {Options} config the request configuration\n * @property {T} data the decoded response body\n * @property {Headers} headers\n * @property {boolean} redirect\n * @property {string} url\n * @property {ResponseType} type\n * @property {ReadableStream<Uint8Array> | null} body\n * @property {boolean} bodyUsed\n */\n\n/**\n * @typedef BodylessMethod\n * @type {<T=any>(url: string, config?: Options) => Promise<Response<T>>}\n */\n\n/**\n * @typedef BodyMethod\n * @type {<T=any>(url: string, body?: any, config?: Options) => Promise<Response<T>>}\n */\n\n/**\n * @public\n * @param {Options} [defaults = {}]\n * @returns {redaxios}\n */\nfunction create(defaults) {\n\tdefaults = defaults || {};\n\n\t/**\n\t * @public\n\t * @template T\n\t * @type {(<T = any>(config?: Options) => Promise<Response<T>>) | (<T = any>(url: string, config?: Options) => Promise<Response<T>>)}\n\t */\n\tredaxios.request = redaxios;\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.get = (url, config) => redaxios(url, config, 'get');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.delete = (url, config) => redaxios(url, config, 'delete');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.head = (url, config) => redaxios(url, config, 'head');\n\n\t/** @public @type {BodylessMethod} */\n\tredaxios.options = (url, config) => redaxios(url, config, 'options');\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.post = (url, data, config) => redaxios(url, config, 'post', data);\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.put = (url, data, config) => redaxios(url, config, 'put', data);\n\n\t/** @public @type {BodyMethod} */\n\tredaxios.patch = (url, data, config) => redaxios(url, config, 'patch', data);\n\n\t/** @public */\n\tredaxios.all = Promise.all.bind(Promise);\n\n\t/**\n\t * @public\n\t * @template Args, R\n\t * @param {(...args: Args[]) => R} fn\n\t * @returns {(array: Args[]) => R}\n\t */\n\tredaxios.spread = (fn) => /** @type {any} */ (fn.apply.bind(fn, fn));\n\n\t/**\n\t * @private\n\t * @template T, U\n\t * @param {T} opts\n\t * @param {U} [overrides]\n\t * @param {boolean} [lowerCase]\n\t * @returns {{} & (T | U)}\n\t */\n\tfunction deepMerge(opts, overrides, lowerCase) {\n\t\tlet out = /** @type {any} */ ({}),\n\t\t\ti;\n\t\tif (Array.isArray(opts)) {\n\t\t\t// @ts-ignore\n\t\t\treturn opts.concat(overrides);\n\t\t}\n\t\tfor (i in opts) {\n\t\t\tconst key = lowerCase ? i.toLowerCase() : i;\n\t\t\tout[key] = opts[i];\n\t\t}\n\t\tfor (i in overrides) {\n\t\t\tconst key = lowerCase ? i.toLowerCase() : i;\n\t\t\tconst value = /** @type {any} */ (overrides)[i];\n\t\t\tout[key] = key in out && typeof value == 'object' ? deepMerge(out[key], value, key == 'headers') : value;\n\t\t}\n\t\treturn out;\n\t}\n\n\t/**\n\t * Issues a request.\n\t * @public\n\t * @template T\n\t * @param {string | Options} urlOrConfig\n\t * @param {Options} [config = {}]\n\t * @param {any} [_method] (internal)\n\t * @param {any} [data] (internal)\n\t * @param {never} [_undefined] (internal)\n\t * @returns {Promise<Response<T>>}\n\t */\n\tfunction redaxios(urlOrConfig, config, _method, data, _undefined) {\n\t\tlet url = /** @type {string} */ (typeof urlOrConfig != 'string' ? (config = urlOrConfig).url : urlOrConfig);\n\n\t\tconst response = /** @type {Response<any>} */ ({ config });\n\n\t\t/** @type {Options} */\n\t\tconst options = deepMerge(defaults, config);\n\n\t\t/** @type {RequestHeaders} */\n\t\tconst customHeaders = {};\n\n\t\tdata = data || options.data;\n\n\t\t(options.transformRequest || []).map((f) => {\n\t\t\tdata = f(data, options.headers) || data;\n\t\t});\n\n\t\tif (options.auth) {\n\t\t\tcustomHeaders.authorization = options.auth;\n\t\t}\n\n\t\tif (data && typeof data === 'object' && typeof data.append !== 'function' && typeof data.text !== 'function') {\n\t\t\tdata = JSON.stringify(data);\n\t\t\tcustomHeaders['content-type'] = 'application/json';\n\t\t}\n\n\t\ttry {\n\t\t\t// @ts-ignore providing the cookie name without header name is nonsensical anyway\n\t\t\tcustomHeaders[options.xsrfHeaderName] = decodeURIComponent(\n\t\t\t\t// @ts-ignore accessing match()[2] throws for no match, which is intentional\n\t\t\t\tdocument.cookie.match(RegExp('(^|; )' + options.xsrfCookieName + '=([^;]*)'))[2]\n\t\t\t);\n\t\t} catch (e) {}\n\n\t\tif (options.baseURL) {\n\t\t\turl = url.replace(/^(?!.*\\/\\/)\\/?/, options.baseURL + '/');\n\t\t}\n\n\t\tif (options.params) {\n\t\t\turl +=\n\t\t\t\t(~url.indexOf('?') ? '&' : '?') +\n\t\t\t\t(options.paramsSerializer ? options.paramsSerializer(options.params) : new URLSearchParams(options.params));\n\t\t}\n\n\t\tconst fetchFunc = options.fetch || fetch;\n\n\t\treturn fetchFunc(url, {\n\t\t\tmethod: (_method || options.method || 'get').toUpperCase(),\n\t\t\tbody: data,\n\t\t\theaders: deepMerge(options.headers, customHeaders, true),\n\t\t\tcredentials: options.withCredentials ? 'include' : _undefined\n\t\t}).then((res) => {\n\t\t\tfor (const i in res) {\n\t\t\t\tif (typeof res[i] != 'function') response[i] = res[i];\n\t\t\t}\n\n\t\t\tif (options.responseType == 'stream') {\n\t\t\t\tresponse.data = res.body;\n\t\t\t\treturn response;\n\t\t\t}\n\n\t\t\treturn res[options.responseType || 'text']()\n\t\t\t\t.then((data) => {\n\t\t\t\t\tresponse.data = data;\n\t\t\t\t\t// its okay if this fails: response.data will be the unparsed value:\n\t\t\t\t\tresponse.data = JSON.parse(data);\n\t\t\t\t})\n\t\t\t\t.catch(Object)\n\t\t\t\t.then(() => {\n\t\t\t\t\tconst ok = options.validateStatus ? options.validateStatus(res.status) : res.ok;\n\t\t\t\t\treturn ok ? response : Promise.reject(response);\n\t\t\t\t});\n\t\t});\n\t}\n\n\t/**\n\t * @public\n\t * @type {AbortController}\n\t */\n\tredaxios.CancelToken = /** @type {any} */ (typeof AbortController == 'function' ? AbortController : Object);\n\n\t/**\n\t * @public\n\t * @type {Options}\n\t */\n\tredaxios.defaults = defaults;\n\n\t/**\n\t * @public\n\t */\n\tredaxios.create = create;\n\n\treturn redaxios;\n}\n\nexport default create();\n", "import { importPKCS8, SignJWT } from 'jose';\nimport redaxios from 'redaxios';\nconst checkToken = (token) => {\n if (!token) return false;\n const decoded = JSON.parse(atob(token.split('.')[1]));\n const currentTimestamp = Math.floor(Date.now() / 1000); // Convert to seconds\n return decoded.exp > currentTimestamp - 600; //expire 10 mins ealier\n};\nexport const getToken = async (serviceAccount, targetAudience) => {\n const cachedToken = await GCP_INVOKER_TOKEN.get(targetAudience);\n if (checkToken(cachedToken)) return cachedToken;\n const privateKey = await importPKCS8(serviceAccount.private_key, 'RS256');\n const email = serviceAccount.client_email;\n const payload = {\n iss: email,\n sub: email,\n aud: 'https://www.googleapis.com/oauth2/v4/token',\n target_audience: targetAudience,\n iat: Math.floor(Date.now() / 1000),\n exp: Math.floor(Date.now() / 1000) + 3600,\n };\n const token = await new SignJWT(payload)\n .setProtectedHeader({ alg: 'RS256', typ: 'JWT' })\n .sign(privateKey);\n const idTokenResponse = await redaxios.post('https://www.googleapis.com/oauth2/v4/token', {\n grant_type: 'urn:ietf:params:oauth:grant-type:jwt-bearer',\n assertion: token,\n });\n await GCP_INVOKER_TOKEN.delete(targetAudience);\n await GCP_INVOKER_TOKEN.put(targetAudience, idTokenResponse.data.id_token);\n return idTokenResponse.data.id_token;\n};\n", "import lodashGet from 'lodash.get';\nimport constants from '../constants';\nimport { getToken } from './gcpAuth';\nimport utils from '../utils';\nimport { validatePathParms } from './user-input-validation';\nconst _ = { get: lodashGet };\n\nexport default function gcpCloudrun({ domain, serviceAccount, allowedKeys }) {\n return async (ctx, next) => {\n if (allowedKeys && ctx.params) {\n if (!validatePathParms(ctx, allowedKeys)) {\n ctx.status = 422;\n ctx.body = JSON.stringify({ error: 'Invalid params' });\n return false;\n }\n }\n const url = `${domain}${ctx.request.path}`;\n const token = await getToken(serviceAccount, domain);\n\n // Clone headers to modify safely\n // console.log('ctx.request.headers' + JSON.stringify(ctx.request.headers));\n const headers = new Headers(ctx.request.headers);\n headers.set('X-Serverless-Authorization', `Bearer ${token}`);\n headers.set('X-Token', headers.get('authorization') || 'N/A');\n headers.set('authorization', '');\n // Extract Cloudflare geolocation (if available)\n const cf = ctx.event.cf || {};\n\n const geoHeaders = {\n 'X-Geo-Country': cf.country,\n 'X-Geo-City': cf.city,\n 'X-Geo-Latitude': cf.latitude,\n 'X-Geo-Longitude': cf.longitude,\n 'X-Geo-Timezone': cf.timezone,\n 'X-Geo-Region': cf.region,\n 'X-Geo-PostalCode': cf.postalCode,\n 'X-Geo-RegionCode': cf.regionCode,\n 'X-Geo-EU-Country': cf.isEUCountry ? '1' : '0',\n };\n\n for (const [key, value] of Object.entries(geoHeaders)) {\n if (value !== undefined) {\n headers.set(key, value);\n }\n }\n\n const requestOptions = {\n method: ctx.request.method,\n headers,\n redirect: 'manual',\n };\n\n // Attach body if method supports it\n if (\n constants.methodsMethodsWithBody.includes(ctx.request.method) &&\n _.get(ctx, 'event.request.body')\n ) {\n const clonedRequest = ctx.event.request.clone();\n requestOptions.body = clonedRequest.body;\n }\n\n const response = await fetch(url, requestOptions);\n\n const responseHeaders = utils.instanceToJson(response.headers);\n ctx.status = response.status;\n ctx.body = await response.text(); // Or .json() if expecting JSON\n utils.mergeHeaders(responseHeaders, ctx);\n await next(ctx);\n };\n}\n", "export default function headersHandler({\n headers = {},\n headersFN,\n}: {\n headers?: Record<string, string>;\n headersFN?: Function;\n}) {\n return async (ctx, next) => {\n if (headers) {\n for (let key of Object.keys(headers)) {\n ctx.set(key.toLowerCase(), headers[key]);\n }\n }\n if (headersFN) {\n const headersRes = await headersFN();\n for (const key of Object.keys(headersRes)) {\n ctx.set(key, headersRes[key]);\n }\n }\n\n await next(ctx);\n };\n}\n", "async function getBody(request: Request) {\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(request.method) === -1) {\n return '';\n }\n try {\n return await request.text(); // stays as string; we count bytes below\n } catch {\n return '';\n }\n}\n\nfunction bytesOf(str: string) {\n // Count bytes accurately (UTF-8)\n return new TextEncoder().encode(str).length;\n}\n\nfunction rejectTooLarge(ctx: any, limitBytes: number, receivedBytes?: number) {\n ctx.status = 413;\n const body = JSON.stringify({\n error: 'Payload too large',\n limit: limitBytes,\n ...(receivedBytes != null ? { received: receivedBytes } : {}),\n });\n ctx.set('content-type', 'application/json');\n ctx.set('content-length', String(body.length));\n ctx.body = body;\n}\n\nexport default function bodySizeLimitHandler({ bodySizeLimit = 512 } = {}) {\n return async (ctx: any, next: (ctx: any) => Promise<any>) => {\n const method = ctx.request?.method || 'GET';\n if (['POST', 'PATCH', 'PUT', 'DELETE'].indexOf(method) === -1) {\n return next(ctx);\n }\n\n // 1) Early reject using Content-Length if present and too large\n const lenHeaderRaw = ctx.request?.headers?.['content-length'];\n const lenHeader = lenHeaderRaw ? Number(lenHeaderRaw) : NaN;\n if (Number.isFinite(lenHeader) && lenHeader > bodySizeLimit) {\n return rejectTooLarge(ctx, bodySizeLimit, lenHeader);\n }\n\n // 2) Read and measure actual bytes (covers missing/lying Content-Length)\n const body = await getBody(ctx.request);\n const actualBytes = typeof body === 'string' ? bytesOf(body) : 0;\n\n // Optional debug logs (keep or remove)\n // console.log('----------body:', body.slice(0, 200)); // avoid logging entire payloads\n // console.log('----------lenHeader:', lenHeaderRaw);\n // console.log('----------actualBytes:', actualBytes);\n\n if (actualBytes > bodySizeLimit) {\n return rejectTooLarge(ctx, bodySizeLimit, actualBytes);\n }\n\n // If your downstream needs the parsed body, you can attach it:\n // ctx.requestBody = body;\n\n await next(ctx);\n };\n}\n", "import basicAuth from './basic-auth';\nimport cache from './cache';\nimport cors from './cors';\nimport geoDecorator from './geo-decorator';\nimport jwt from './jwt';\nimport kvStorage from './kv-storage';\nimport kvStorageBinding from './kv-storage-binding';\nimport lambda from './lambda';\nimport loadbalancer from './loadbalancer';\nimport logger from './logger';\nimport oauth2 from './oauth2';\nimport origin from './origin';\nimport response from './response';\nimport rateLimit from './rate-limit';\nimport s3 from './s3';\nimport signature from './signature';\nimport split from './split';\nimport transform from './transform';\nimport recaptcha from './recaptcha';\nimport recaptchaV3 from './recaptchav3';\nimport turnstileVerify from './turnstile';\nimport userInputValidation from './user-input-validation';\nimport cloudfunction from './cloudfunction';\nimport gcpCloudrun from './gcpCloudrun';\nimport headers from './headers';\nimport bodySizeLimit from './bodySizeLimit';\nexport default {\n basicAuth,\n cache,\n cors,\n geoDecorator,\n jwt,\n kvStorage,\n kvStorageBinding,\n lambda,\n loadbalancer,\n logger,\n oauth2,\n origin,\n rateLimit,\n response,\n s3,\n signature,\n split,\n transform,\n recaptcha,\n recaptchaV3,\n turnstileVerify,\n userInputValidation,\n cloudfunction,\n gcpCloudrun,\n headers,\n bodySizeLimit,\n};\n"],
5
+ "mappings": "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KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,KACJ,GAAI,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",
6
+ "names": ["require_parser", "__commonJSMin", "exports", "module", "parseRoute", "host", "path", "excludePath", "method", "handler", "protocol", "handlerName", "headers", "data", "hostVariables", "pathVariables", "hostRegexpString", "$1", "$2", "$3", "pathRegexpString", "hostRegex", "pathRegex", "excludePathRegex", "methodRegex", "protocolRegex", "instanceToJson", "instance", "obj", "item", "prop", "streamToString", "readable", "maxSize", "results", "reader", "textDecoder", "bytesCount", "done", "value", "result", "parseRequest", "request", "url", "query", "bodyText", "requestedBodyLength", "getBodyText", "clonedRequest", "require_resolver", "__commonJSMin", "exports", "module", "getParams", "req", "route", "params", "hostParamsMatch", "name", "index", "pathParamsMatch", "testHeaders", "request", "result", "key", "testProtocol", "testPath", "recurseRoutes", "ctx", "routes", "nextRoutes", "err", "require_constants", "__commonJSMin", "exports", "module", "require_context", "__commonJSMin", "exports", "module", "parser", "Context", "event", "key", "value", "clonedContext", "require_src", "__commonJSMin", "exports", "module", "parser", "resolver", "constants", "Context", "path", "handler", "route", "host", "excludePath", "method", "handlerName", "headers", "protocol", "event", "ctx", "err", "require_lodash", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "HASH_UNDEFINED", "INFINITY", "funcTag", "genTag", "symbolTag", "reIsDeepProp", "reIsPlainProp", "reLeadingDot", "rePropName", "reRegExpChar", "reEscapeChar", "reIsHostCtor", "freeGlobal", "freeSelf", "root", "getValue", "object", "key", "isHostObject", "value", "result", "arrayProto", "funcProto", "objectProto", "coreJsData", "maskSrcKey", "uid", "funcToString", "hasOwnProperty", "objectToString", "reIsNative", "Symbol", "splice", "Map", "getNative", "nativeCreate", "symbolProto", "symbolToString", "Hash", "entries", "index", "length", "entry", "hashClear", "hashDelete", "hashGet", "data", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "lastIndex", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "array", "eq", "baseGet", "path", "isKey", "castPath", "toKey", "baseIsNative", "isObject", "isMasked", "pattern", "isFunction", "toSource", "baseToString", "isSymbol", "isArray", "stringToPath", "map", "isKeyable", "type", "func", "memoize", "string", "toString", "match", "number", "quote", "resolver", "memoized", "args", "cache", "other", "tag", "isObjectLike", "get", "defaultValue", "require_aws4fetch_umd", "__commonJSMin", "exports", "module", "global", "factory", "encoder", "HOST_SERVICES", "UNSIGNABLE_HEADERS", "AwsClient", "accessKeyId", "secretAccessKey", "sessionToken", "service", "region", "cache", "retries", "initRetryMs", "input", "init", "method", "url", "headers", "body", "signer", "AwsV4Signer", "signed", "i", "fetched", "res", "resolve", "datetime", "signQuery", "appendSessionToken", "allHeaders", "singleEncode", "guessedService", "guessedRegion", "guessServiceRegion", "params", "header", "encodeRfc3986", "seenKeys", "k", "pair", "p", "k1", "v1", "k2", "v2", "date", "cacheKey", "kCredentials", "kDate", "hmac", "kRegion", "kService", "buf2hex", "hash", "hashHeader", "key", "string", "cryptoKey", "content", "buffer", "x", "urlEncodedStr", "c", "hostname", "pathname", "match", "targetPrefix", "require_lodash", "__commonJSMin", "exports", "module", "FUNC_ERROR_TEXT", "HASH_UNDEFINED", "INFINITY", "MAX_SAFE_INTEGER", "funcTag", "genTag", "symbolTag", "reIsDeepProp", "reIsPlainProp", "reLeadingDot", "rePropName", "reRegExpChar", "reEscapeChar", "reIsHostCtor", "reIsUint", "freeGlobal", "freeSelf", "root", "getValue", "object", "key", "isHostObject", "value", "result", "arrayProto", "funcProto", "objectProto", "coreJsData", "maskSrcKey", "uid", "funcToString", "hasOwnProperty", "objectToString", "reIsNative", "Symbol", "splice", "Map", "getNative", "nativeCreate", "symbolProto", "symbolToString", "Hash", "entries", "index", "length", "entry", "hashClear", "hashDelete", "hashGet", "data", "hashHas", "hashSet", "ListCache", "listCacheClear", "listCacheDelete", "assocIndexOf", "lastIndex", "listCacheGet", "listCacheHas", "listCacheSet", "MapCache", "mapCacheClear", "mapCacheDelete", "getMapData", "mapCacheGet", "mapCacheHas", "mapCacheSet", "assignValue", "objValue", "eq", "array", "baseIsNative", "isObject", "isMasked", "pattern", "isFunction", "toSource", "baseSet", "path", "customizer", "isKey", "castPath", "nested", "toKey", "newValue", "isIndex", "baseToString", "isSymbol", "isArray", "stringToPath", "map", "isKeyable", "type", "func", "memoize", "string", "toString", "match", "number", "quote", "resolver", "memoized", "args", "cache", "other", "tag", "isObjectLike", "set", "require_cookie", "__commonJSMin", "exports", "parse", "serialize", "decode", "encode", "pairSplitRegExp", "fieldContentRegExp", "str", "options", "obj", "opt", "pairs", "dec", "i", "pair", "eq_idx", "key", "val", "tryDecode", "name", "enc", "value", "maxAge", "sameSite", "require_random_from_seed", "__commonJSMin", "exports", "module", "seed", "getNextValue", "setSeed", "_seed_", "require_alphabet", "__commonJSMin", "exports", "module", "randomFromSeed", "ORIGINAL", "alphabet", "previousSeed", "shuffled", "reset", "setCharacters", "_alphabet_", "unique", "item", "ind", "arr", "characters", "setSeed", "seed", "shuffle", "sourceArray", "targetArray", "characterIndex", "getShuffled", "lookup", "index", "alphabetShuffled", "get", "require_random_byte_browser", "__commonJSMin", "exports", "module", "crypto", "randomByte", "size", "bytes", "i", "require_format_browser", "__commonJSMin", "exports", "module", "random", "alphabet", "size", "mask", "step", "id", "bytes", "require_generate", "__commonJSMin", "exports", "module", "alphabet", "random", "format", "generate", "number", "loopCounter", "done", "str", "require_build", "__commonJSMin", "exports", "module", "generate", "alphabet", "REDUCE_TIME", "version", "counter", "previousSeconds", "build", "clusterWorkerId", "str", "seconds", "require_is_valid", "__commonJSMin", "exports", "module", "alphabet", "isShortId", "id", "nonAlphabetic", "require_cluster_worker_id_browser", "__commonJSMin", "exports", "module", "require_lib", "__commonJSMin", "exports", "module", "alphabet", "build", "isValid", "clusterWorkerId", "seed", "seedValue", "worker", "workerId", "characters", "newCharacters", "generate", "require_shortid", "__commonJSMin", "exports", "module", "import_cloudworker_router", "import_lodash", "_", "get", "setUnauthorizedResponse", "ctx", "basicAuth", "options", "next", "authHeaders", "userTokens", "user", "authToken", "userIndex", "cache", "get", "req", "set", "res", "cache_default", "hash", "data", "encodedData", "hashBuffer", "b", "hash_default", "resolveParams", "url", "params", "acc", "key", "instanceToJson", "instance", "obj", "item", "prop", "mergeHeaders", "responseHeaders", "ctx", "value", "upgradeCTX", "utils_default", "defaultHeaderBlacklist", "getBody", "request", "getCacheKey", "ctx", "cacheKeyTemplate", "cacheKeys", "key", "cacheKeyValues", "i", "cacheKey", "segments", "hash_default", "cacheKeyPath", "$0", "$1", "cacheFactory", "cacheDuration", "headerBlacklist", "next", "cachedResponse", "cache_default", "headers", "instanceToJson", "clonedBody", "response", "header", "corsHandler", "allowedOrigins", "allowedMethods", "allowCredentials", "allowedHeaders", "allowedExposeHeaders", "maxAge", "optionsSuccessStatus", "terminatePreflight", "ctx", "next", "method", "origin", "requestHeaders", "configureOrigin", "configureCredentials", "configureExposedHeaders", "configureMethods", "configureAllowedHeaders", "configureMaxAge", "appendVary", "value", "cur", "s", "countryRegions", "geoHandler", "ctx", "next", "country", "base64UrlToString", "base64Url", "base64", "binary", "bytes", "c", "decodeJwt", "token", "parts", "header", "payload", "signature", "jwtHandler", "jwksUri", "iss", "aud", "allowPublicAccess", "getJwk", "forbidden", "ctx", "isValidJwtSignature", "data", "jwkKeys", "jwkKey", "key", "result", "handleValidate", "next", "expiryDate", "currentDate", "import_lodash", "_", "lodashGet", "KvStorage", "accountId", "namespace", "authEmail", "authKey", "ttl", "key", "prefix", "limit", "url", "response", "type", "value", "keys", "metadata", "searchParams", "headers", "formData", "constants_default", "setDefaultLocation", "url", "defaultExtension", "defaultIndexDocument", "file", "kvStorageHandler", "kvAccountId", "kvNamespace", "kvAuthEmail", "kvAuthKey", "kvBasePath", "kvKey", "defaultErrorDocument", "mime", "mode", "kvStorage", "KvStorage", "mimeMappings", "constants_default", "ctx", "path", "utils_default", "key", "result", "import_lodash", "_", "lodashGet", "setDefaultLocation", "url", "defaultExtension", "defaultIndexDocument", "file", "validateEtag", "request", "response", "requestEtag", "responseEtag", "kvStorageHandler", "kvNamespaceBinding", "kvBasePath", "kvKey", "defaultErrorDocument", "get", "key", "ctx", "path", "utils_default", "result", "headers", "header", "constants_default", "import_aws4fetch", "lambdaHandlerFactory", "accessKeyId", "secretAccessKey", "region", "lambdaName", "aws", "ctx", "url", "event", "response", "responseHeaders", "utils_default", "key", "import_lodash", "_", "lodashGet", "lodashSet", "filterCfHeaders", "headers", "result", "key", "getSource", "sources", "loadbalancerHandler", "ctx", "source", "options", "constants_default", "clonedRequest", "url", "utils_default", "resolveOverride", "response", "responseHeaders", "import_lodash", "package_default", "chunker", "maxSize", "maxSeconds", "sink", "message", "resolve", "reject", "err", "data", "result", "flatten", "obj", "delimiter", "path", "output", "key", "flatten_default", "HttpLogger", "options", "chunker", "message", "flatMessage", "flatten_default", "data", "import_aws4fetch", "KinesisLogger", "options", "chunker", "message", "flatMessage", "flatten_default", "data", "body", "url", "request", "_", "lodashGet", "getBody", "request", "logger", "options", "logService", "HttpLogger", "KinesisLogger", "ctx", "next", "body", "data", "package_default", "err", "errData", "import_cookie", "import_lodash", "import_shortid", "refreshAccessToken", "refresh_token", "authDomain", "clientId", "clientSecret", "tokenUrl", "response", "body", "PBKDF2", "AESGCM", "SHA256", "RAW", "base64ToArraybuffer", "base64", "binary", "len", "bytes", "i", "arraybufferTobase64", "buffer", "stringToArraybuffer", "str", "arraybufferToString", "buf", "getKeyMaterial", "password", "enc", "deriveAesGcmKey", "seed", "salt", "key", "saltBuffer", "getSalt", "decrypt", "message", "iv", "data", "array", "encrypt", "encrypted", "aes_default", "_", "get", "set", "getCookie", "cookieHeader", "cookieName", "cookie", "serializeFormData", "obj", "key", "isBrowser", "accept", "oauth2Handler", "cookieHttpOnly", "allowPublicAccess", "kvAccountId", "kvNamespace", "kvAuthEmail", "kvAuthKey", "kvTtl", "oauth2AuthDomain", "oauth2ClientId", "oauth2ClientSecret", "oauth2Audience", "oauth2Scopes", "oauth2CallbackPath", "oauth2CallbackType", "oauth2LogoutPath", "oauth2LoginPath", "oauth2ServerTokenPath", "oauth2ServerAuthorizePath", "oauth2ServerLogoutPath", "kvStorage", "KvStorage", "authDomain", "callbackPath", "callbackType", "serverTokenPath", "serverAuthorizePath", "serverLogoutPath", "clientId", "clientSecret", "audience", "logoutPath", "loginPath", "scope", "getTokenFromCode", "code", "redirectUrl", "tokenUrl", "response", "body", "handleLogout", "ctx", "domain", "returnToPath", "getRedirectTo", "returnTo", "handleCallback", "shortid", "salt", "aes_default", "sessionToken", "aesKey", "data", "getSession", "authData", "tokens", "refreshAccessToken", "encryptedAuthData", "redirectTo", "referer", "handleLogin", "state", "encodedRedirectUri", "handleValidate", "next", "import_lodash", "_", "lodashGet", "filterCfHeaders", "headers", "result", "key", "originHandler", "options", "localOriginOverride", "backend", "ctx", "url", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "responseHandler", "body", "headers", "status", "ctx", "utils_default", "key", "import_lodash", "_", "lodashGet", "lodashSet", "rateLimitHandler", "type", "scope", "limit", "buckets", "getKey", "currentMinute", "headers", "ip", "cleanUp", "minutes", "minute", "ctx", "next", "reset", "key", "count", "import_aws4fetch", "getEndpoint", "endpoint", "options", "url", "s3HandlerFactory", "accessKeyId", "secretAccessKey", "bucket", "region", "forcePathStyle", "enableBucketOperations", "aws", "resolvedEndpoint", "ctx", "constants_default", "utils_default", "headers", "response", "responseHeaders", "key", "keyCache", "str2ab", "str", "char", "getKey", "secret", "sign", "path", "key", "sig", "signatureHandler", "ctx", "next", "pathWithQuery", "splitHandler", "host", "ctx", "next", "duplicateContext", "streamBody", "readable", "writable", "regexes", "reader", "writer", "textDecoder", "textEncoder", "done", "value", "chunk", "transformedChunk", "transformChunk", "encodedText", "template", "data", "args", "$0", "index", "acc", "transform", "transformFactory", "transforms", "statusCodes", "ctx", "next", "body", "createAssessment", "projectID", "API_KEY", "token", "siteKey", "expectedAction", "response", "reason", "getAction", "url", "recaptcha", "getToken", "headers", "ctx", "next", "verifyRecaptchaV3", "secret", "token", "expectedAction", "remoteip", "body", "json", "success", "actionOK", "score", "getActionFromPath", "pathOrUrl", "path", "getHeader", "headers", "name", "val", "recaptchaV3", "headerName", "minScore", "requireActionMatch", "ctx", "next", "req", "result", "payload", "verifyTurnstile", "secret", "token", "remoteip", "body", "json", "getActionFromPath", "pathOrUrl", "path", "getHeader", "headers", "name", "val", "turnstileVerify", "headerName", "requireActionMatch", "ctx", "next", "req", "expectedAction", "result", "ok", "payload", "XSSCheck", "value", "validateKeyValue", "key", "allowedKeys", "isObjectOrArray", "body", "validateObject", "obj", "keys", "isObject", "validateQuery", "ctx", "query", "validatePathParms", "params", "getBody", "request", "userInputValidation", "next", "import_lodash", "webcrypto_default", "isCryptoKey", "key", "encoder", "decoder", "MAX_INT32", "concat", "buffers", "size", "acc", "length", "buf", "i", "buffer", "encodeBase64", "input", "unencoded", "encoder", "CHUNK_SIZE", "arr", "i", "encode", "JOSEError", "message", "JOSENotSupported", "JOSEError", "JWSInvalid", "JOSEError", "JWTInvalid", "random_default", "webcrypto_default", "unusable", "name", "prop", "isAlgorithm", "algorithm", "getHashLength", "hash", "getNamedCurve", "alg", "checkUsage", "key", "usages", "expected", "msg", "last", "checkSigCryptoKey", "message", "msg", "actual", "types", "last", "invalid_key_input_default", "withAlg", "alg", "is_key_like_default", "key", "isCryptoKey", "types", "isDisjoint", "headers", "sources", "acc", "header", "parameters", "parameter", "is_disjoint_default", "isObjectLike", "value", "isObject", "input", "proto", "check_key_length_default", "alg", "key", "modulusLength", "findOid", "keyData", "oid", "from", "i", "sub", "value", "index", "getNamedCurve", "JOSENotSupported", "genericImport", "replace", "keyFormat", "pem", "alg", "options", "algorithm", "keyUsages", "c", "isPublic", "namedCurve", "webcrypto_default", "fromPKCS8", "importPKCS8", "pkcs8", "alg", "options", "fromPKCS8", "symmetricTypeCheck", "alg", "key", "is_key_like_default", "withAlg", "types", "asymmetricTypeCheck", "usage", "checkKeyType", "check_key_type_default", "validateCrit", "Err", "recognizedDefault", "recognizedOption", "protectedHeader", "joseHeader", "input", "recognized", "parameter", "JOSENotSupported", "validate_crit_default", "unprotected", "subtleDsa", "alg", "algorithm", "hash", "JOSENotSupported", "getCryptoKey", "alg", "key", "usage", "isCryptoKey", "checkSigCryptoKey", "invalid_key_input_default", "types", "webcrypto_default", "epoch_default", "date", "REGEX", "secs_default", "str", "matched", "value", "sign", "alg", "key", "data", "cryptoKey", "getCryptoKey", "check_key_length_default", "signature", "webcrypto_default", "subtleDsa", "sign_default", "FlattenedSign", "payload", "protectedHeader", "unprotectedHeader", "key", "options", "JWSInvalid", "is_disjoint_default", "joseHeader", "extensions", "validate_crit_default", "b64", "alg", "check_key_type_default", "encoder", "encode", "data", "concat", "signature", "sign_default", "jws", "decoder", "CompactSign", "payload", "FlattenedSign", "protectedHeader", "key", "options", "jws", "validateInput", "label", "input", "ProduceJWT", "payload", "isObject", "issuer", "subject", "audience", "jwtId", "epoch_default", "secs_default", "SignJWT", "ProduceJWT", "protectedHeader", "key", "options", "sig", "CompactSign", "encoder", "JWTInvalid", "USER_AGENT", "create", "defaults", "deepMerge", "opts", "overrides", "lowerCase", "i", "out", "Array", "isArray", "concat", "toLowerCase", "key", "value", "redaxios", "urlOrConfig", "config", "_method", "data", "_undefined", "url", "response", "options", "customHeaders", "transformRequest", "map", "f", "headers", "auth", "authorization", "append", "text", "JSON", "stringify", "xsrfHeaderName", "decodeURIComponent", "document", "cookie", "match", "RegExp", "xsrfCookieName", "e", "baseURL", "replace", "params", "indexOf", "paramsSerializer", "URLSearchParams", "fetch", "method", "toUpperCase", "body", "credentials", "withCredentials", "then", "res", "responseType", "parse", "catch", "Object", "validateStatus", "status", "ok", "Promise", "reject", "request", "get", "delete", "head", "post", "put", "patch", "all", "bind", "spread", "fn", "apply", "CancelToken", "AbortController", "checkToken", "token", "decoded", "currentTimestamp", "getToken", "serviceAccount", "targetAudience", "cachedToken", "privateKey", "importPKCS8", "email", "payload", "SignJWT", "idTokenResponse", "redaxios_module_default", "_", "lodashGet", "cloudfunction", "project_id", "region", "functionName", "serviceAccount", "ctx", "next", "queryParams", "queryString", "url", "urlWithParms", "token", "getToken", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "import_lodash", "_", "lodashGet", "gcpCloudrun", "domain", "serviceAccount", "allowedKeys", "ctx", "next", "validatePathParms", "url", "token", "getToken", "headers", "cf", "geoHeaders", "key", "value", "requestOptions", "constants_default", "clonedRequest", "response", "responseHeaders", "utils_default", "headersHandler", "headers", "headersFN", "ctx", "next", "key", "headersRes", "getBody", "request", "bytesOf", "str", "rejectTooLarge", "ctx", "limitBytes", "receivedBytes", "body", "bodySizeLimitHandler", "bodySizeLimit", "next", "method", "lenHeaderRaw", "lenHeader", "actualBytes", "handlers_default", "basicAuth", "cacheFactory", "corsHandler", "geoHandler", "jwtHandler", "kvStorageHandler", "lambdaHandlerFactory", "loadbalancerHandler", "logger", "oauth2Handler", "originHandler", "rateLimitHandler", "responseHandler", "s3HandlerFactory", "signatureHandler", "splitHandler", "transformFactory", "recaptcha", "recaptchaV3", "turnstileVerify", "userInputValidation", "cloudfunction", "gcpCloudrun", "headersHandler", "bodySizeLimitHandler", "withCtxUpgrade", "factory", "opts", "fn", "ctx", "next", "upgradeCTX", "rules", "handlers", "Router", "rule", "handlers_default", "wrappedFactory", "event"]
7
7
  }