@wutiange/log-listener-plugin 2.0.2-alpha.2 → 2.0.2-alpha.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs.js +1447 -4
- package/dist/index.cjs.js.map +1 -1
- package/dist/index.esm.js +1447 -4
- package/dist/index.esm.js.map +1 -1
- package/package.json +2 -2
- package/src/HTTPInterceptor.ts +9 -13
- package/src/__tests__/HTTPInterceptor.test.ts +96 -56
- package/src/__tests__/utils.test.ts +197 -75
- package/src/logPlugin.ts +1 -4
- package/src/utils.ts +6 -69
package/dist/index.esm.js.map
CHANGED
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":["../../index.ts"],"sourcesContent":[null],"names":[],"mappings":";;AAAA,MAAwC,WAAA,GAAA,OAAA,CAAA,eAAA,CAAA,OAAA,CAAA,iBAAA,CAAA,CAAA;AAExC,OAAA,CAAA,OAAA,GAAe,mBAAS"}
|
1
|
+
{"version":3,"file":"index.esm.js","sources":["../../../node_modules/requires-port/index.js","../../../node_modules/querystringify/index.js","../../../node_modules/url-parse/index.js","../../src/utils.ts","../../src/logger.ts","../../src/common.ts","../../src/Server.ts","../../src/HTTPInterceptor.ts","../../src/logPlugin.ts"],"sourcesContent":["'use strict';\n\n/**\n * Check if we're required to add a port number.\n *\n * @see https://url.spec.whatwg.org/#default-port\n * @param {Number|String} port Port number we need to check\n * @param {String} protocol Protocol we need to check against.\n * @returns {Boolean} Is it a default port for the given protocol\n * @api private\n */\nmodule.exports = function required(port, protocol) {\n protocol = protocol.split(':')[0];\n port = +port;\n\n if (!port) return false;\n\n switch (protocol) {\n case 'http':\n case 'ws':\n return port !== 80;\n\n case 'https':\n case 'wss':\n return port !== 443;\n\n case 'ftp':\n return port !== 21;\n\n case 'gopher':\n return port !== 70;\n\n case 'file':\n return false;\n }\n\n return port !== 0;\n};\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , undef;\n\n/**\n * Decode a URI encoded string.\n *\n * @param {String} input The URI encoded string.\n * @returns {String|Null} The decoded string.\n * @api private\n */\nfunction decode(input) {\n try {\n return decodeURIComponent(input.replace(/\\+/g, ' '));\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Attempts to encode a given input.\n *\n * @param {String} input The string that needs to be encoded.\n * @returns {String|Null} The encoded string.\n * @api private\n */\nfunction encode(input) {\n try {\n return encodeURIComponent(input);\n } catch (e) {\n return null;\n }\n}\n\n/**\n * Simple query string parser.\n *\n * @param {String} query The query string that needs to be parsed.\n * @returns {Object}\n * @api public\n */\nfunction querystring(query) {\n var parser = /([^=?#&]+)=?([^&]*)/g\n , result = {}\n , part;\n\n while (part = parser.exec(query)) {\n var key = decode(part[1])\n , value = decode(part[2]);\n\n //\n // Prevent overriding of existing properties. This ensures that build-in\n // methods like `toString` or __proto__ are not overriden by malicious\n // querystrings.\n //\n // In the case if failed decoding, we want to omit the key/value pairs\n // from the result.\n //\n if (key === null || value === null || key in result) continue;\n result[key] = value;\n }\n\n return result;\n}\n\n/**\n * Transform a query string to an object.\n *\n * @param {Object} obj Object that should be transformed.\n * @param {String} prefix Optional prefix.\n * @returns {String}\n * @api public\n */\nfunction querystringify(obj, prefix) {\n prefix = prefix || '';\n\n var pairs = []\n , value\n , key;\n\n //\n // Optionally prefix with a '?' if needed\n //\n if ('string' !== typeof prefix) prefix = '?';\n\n for (key in obj) {\n if (has.call(obj, key)) {\n value = obj[key];\n\n //\n // Edge cases where we actually want to encode the value to an empty\n // string instead of the stringified value.\n //\n if (!value && (value === null || value === undef || isNaN(value))) {\n value = '';\n }\n\n key = encode(key);\n value = encode(value);\n\n //\n // If we failed to encode the strings, we should bail out as we don't\n // want to add invalid strings to the query.\n //\n if (key === null || value === null) continue;\n pairs.push(key +'='+ value);\n }\n }\n\n return pairs.length ? prefix + pairs.join('&') : '';\n}\n\n//\n// Expose the module.\n//\nexports.stringify = querystringify;\nexports.parse = querystring;\n","'use strict';\n\nvar required = require('requires-port')\n , qs = require('querystringify')\n , controlOrWhitespace = /^[\\x00-\\x20\\u00a0\\u1680\\u2000-\\u200a\\u2028\\u2029\\u202f\\u205f\\u3000\\ufeff]+/\n , CRHTLF = /[\\n\\r\\t]/g\n , slashes = /^[A-Za-z][A-Za-z0-9+-.]*:\\/\\//\n , port = /:\\d+$/\n , protocolre = /^([a-z][a-z0-9.+-]*:)?(\\/\\/)?([\\\\/]+)?([\\S\\s]*)/i\n , windowsDriveLetter = /^[a-zA-Z]:/;\n\n/**\n * Remove control characters and whitespace from the beginning of a string.\n *\n * @param {Object|String} str String to trim.\n * @returns {String} A new string representing `str` stripped of control\n * characters and whitespace from its beginning.\n * @public\n */\nfunction trimLeft(str) {\n return (str ? str : '').toString().replace(controlOrWhitespace, '');\n}\n\n/**\n * These are the parse rules for the URL parser, it informs the parser\n * about:\n *\n * 0. The char it Needs to parse, if it's a string it should be done using\n * indexOf, RegExp using exec and NaN means set as current value.\n * 1. The property we should set when parsing this value.\n * 2. Indication if it's backwards or forward parsing, when set as number it's\n * the value of extra chars that should be split off.\n * 3. Inherit from location if non existing in the parser.\n * 4. `toLowerCase` the resulting value.\n */\nvar rules = [\n ['#', 'hash'], // Extract from the back.\n ['?', 'query'], // Extract from the back.\n function sanitize(address, url) { // Sanitize what is left of the address\n return isSpecial(url.protocol) ? address.replace(/\\\\/g, '/') : address;\n },\n ['/', 'pathname'], // Extract from the back.\n ['@', 'auth', 1], // Extract from the front.\n [NaN, 'host', undefined, 1, 1], // Set left over value.\n [/:(\\d*)$/, 'port', undefined, 1], // RegExp the back.\n [NaN, 'hostname', undefined, 1, 1] // Set left over.\n];\n\n/**\n * These properties should not be copied or inherited from. This is only needed\n * for all non blob URL's as a blob URL does not include a hash, only the\n * origin.\n *\n * @type {Object}\n * @private\n */\nvar ignore = { hash: 1, query: 1 };\n\n/**\n * The location object differs when your code is loaded through a normal page,\n * Worker or through a worker using a blob. And with the blobble begins the\n * trouble as the location object will contain the URL of the blob, not the\n * location of the page where our code is loaded in. The actual origin is\n * encoded in the `pathname` so we can thankfully generate a good \"default\"\n * location from it so we can generate proper relative URL's again.\n *\n * @param {Object|String} loc Optional default location object.\n * @returns {Object} lolcation object.\n * @public\n */\nfunction lolcation(loc) {\n var globalVar;\n\n if (typeof window !== 'undefined') globalVar = window;\n else if (typeof global !== 'undefined') globalVar = global;\n else if (typeof self !== 'undefined') globalVar = self;\n else globalVar = {};\n\n var location = globalVar.location || {};\n loc = loc || location;\n\n var finaldestination = {}\n , type = typeof loc\n , key;\n\n if ('blob:' === loc.protocol) {\n finaldestination = new Url(unescape(loc.pathname), {});\n } else if ('string' === type) {\n finaldestination = new Url(loc, {});\n for (key in ignore) delete finaldestination[key];\n } else if ('object' === type) {\n for (key in loc) {\n if (key in ignore) continue;\n finaldestination[key] = loc[key];\n }\n\n if (finaldestination.slashes === undefined) {\n finaldestination.slashes = slashes.test(loc.href);\n }\n }\n\n return finaldestination;\n}\n\n/**\n * Check whether a protocol scheme is special.\n *\n * @param {String} The protocol scheme of the URL\n * @return {Boolean} `true` if the protocol scheme is special, else `false`\n * @private\n */\nfunction isSpecial(scheme) {\n return (\n scheme === 'file:' ||\n scheme === 'ftp:' ||\n scheme === 'http:' ||\n scheme === 'https:' ||\n scheme === 'ws:' ||\n scheme === 'wss:'\n );\n}\n\n/**\n * @typedef ProtocolExtract\n * @type Object\n * @property {String} protocol Protocol matched in the URL, in lowercase.\n * @property {Boolean} slashes `true` if protocol is followed by \"//\", else `false`.\n * @property {String} rest Rest of the URL that is not part of the protocol.\n */\n\n/**\n * Extract protocol information from a URL with/without double slash (\"//\").\n *\n * @param {String} address URL we want to extract from.\n * @param {Object} location\n * @return {ProtocolExtract} Extracted information.\n * @private\n */\nfunction extractProtocol(address, location) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n location = location || {};\n\n var match = protocolre.exec(address);\n var protocol = match[1] ? match[1].toLowerCase() : '';\n var forwardSlashes = !!match[2];\n var otherSlashes = !!match[3];\n var slashesCount = 0;\n var rest;\n\n if (forwardSlashes) {\n if (otherSlashes) {\n rest = match[2] + match[3] + match[4];\n slashesCount = match[2].length + match[3].length;\n } else {\n rest = match[2] + match[4];\n slashesCount = match[2].length;\n }\n } else {\n if (otherSlashes) {\n rest = match[3] + match[4];\n slashesCount = match[3].length;\n } else {\n rest = match[4]\n }\n }\n\n if (protocol === 'file:') {\n if (slashesCount >= 2) {\n rest = rest.slice(2);\n }\n } else if (isSpecial(protocol)) {\n rest = match[4];\n } else if (protocol) {\n if (forwardSlashes) {\n rest = rest.slice(2);\n }\n } else if (slashesCount >= 2 && isSpecial(location.protocol)) {\n rest = match[4];\n }\n\n return {\n protocol: protocol,\n slashes: forwardSlashes || isSpecial(protocol),\n slashesCount: slashesCount,\n rest: rest\n };\n}\n\n/**\n * Resolve a relative URL pathname against a base URL pathname.\n *\n * @param {String} relative Pathname of the relative URL.\n * @param {String} base Pathname of the base URL.\n * @return {String} Resolved pathname.\n * @private\n */\nfunction resolve(relative, base) {\n if (relative === '') return base;\n\n var path = (base || '/').split('/').slice(0, -1).concat(relative.split('/'))\n , i = path.length\n , last = path[i - 1]\n , unshift = false\n , up = 0;\n\n while (i--) {\n if (path[i] === '.') {\n path.splice(i, 1);\n } else if (path[i] === '..') {\n path.splice(i, 1);\n up++;\n } else if (up) {\n if (i === 0) unshift = true;\n path.splice(i, 1);\n up--;\n }\n }\n\n if (unshift) path.unshift('');\n if (last === '.' || last === '..') path.push('');\n\n return path.join('/');\n}\n\n/**\n * The actual URL instance. Instead of returning an object we've opted-in to\n * create an actual constructor as it's much more memory efficient and\n * faster and it pleases my OCD.\n *\n * It is worth noting that we should not use `URL` as class name to prevent\n * clashes with the global URL instance that got introduced in browsers.\n *\n * @constructor\n * @param {String} address URL we want to parse.\n * @param {Object|String} [location] Location defaults for relative paths.\n * @param {Boolean|Function} [parser] Parser for the query string.\n * @private\n */\nfunction Url(address, location, parser) {\n address = trimLeft(address);\n address = address.replace(CRHTLF, '');\n\n if (!(this instanceof Url)) {\n return new Url(address, location, parser);\n }\n\n var relative, extracted, parse, instruction, index, key\n , instructions = rules.slice()\n , type = typeof location\n , url = this\n , i = 0;\n\n //\n // The following if statements allows this module two have compatibility with\n // 2 different API:\n //\n // 1. Node.js's `url.parse` api which accepts a URL, boolean as arguments\n // where the boolean indicates that the query string should also be parsed.\n //\n // 2. The `URL` interface of the browser which accepts a URL, object as\n // arguments. The supplied object will be used as default values / fall-back\n // for relative paths.\n //\n if ('object' !== type && 'string' !== type) {\n parser = location;\n location = null;\n }\n\n if (parser && 'function' !== typeof parser) parser = qs.parse;\n\n location = lolcation(location);\n\n //\n // Extract protocol information before running the instructions.\n //\n extracted = extractProtocol(address || '', location);\n relative = !extracted.protocol && !extracted.slashes;\n url.slashes = extracted.slashes || relative && location.slashes;\n url.protocol = extracted.protocol || location.protocol || '';\n address = extracted.rest;\n\n //\n // When the authority component is absent the URL starts with a path\n // component.\n //\n if (\n extracted.protocol === 'file:' && (\n extracted.slashesCount !== 2 || windowsDriveLetter.test(address)) ||\n (!extracted.slashes &&\n (extracted.protocol ||\n extracted.slashesCount < 2 ||\n !isSpecial(url.protocol)))\n ) {\n instructions[3] = [/(.*)/, 'pathname'];\n }\n\n for (; i < instructions.length; i++) {\n instruction = instructions[i];\n\n if (typeof instruction === 'function') {\n address = instruction(address, url);\n continue;\n }\n\n parse = instruction[0];\n key = instruction[1];\n\n if (parse !== parse) {\n url[key] = address;\n } else if ('string' === typeof parse) {\n index = parse === '@'\n ? address.lastIndexOf(parse)\n : address.indexOf(parse);\n\n if (~index) {\n if ('number' === typeof instruction[2]) {\n url[key] = address.slice(0, index);\n address = address.slice(index + instruction[2]);\n } else {\n url[key] = address.slice(index);\n address = address.slice(0, index);\n }\n }\n } else if ((index = parse.exec(address))) {\n url[key] = index[1];\n address = address.slice(0, index.index);\n }\n\n url[key] = url[key] || (\n relative && instruction[3] ? location[key] || '' : ''\n );\n\n //\n // Hostname, host and protocol should be lowercased so they can be used to\n // create a proper `origin`.\n //\n if (instruction[4]) url[key] = url[key].toLowerCase();\n }\n\n //\n // Also parse the supplied query string in to an object. If we're supplied\n // with a custom parser as function use that instead of the default build-in\n // parser.\n //\n if (parser) url.query = parser(url.query);\n\n //\n // If the URL is relative, resolve the pathname against the base URL.\n //\n if (\n relative\n && location.slashes\n && url.pathname.charAt(0) !== '/'\n && (url.pathname !== '' || location.pathname !== '')\n ) {\n url.pathname = resolve(url.pathname, location.pathname);\n }\n\n //\n // Default to a / for pathname if none exists. This normalizes the URL\n // to always have a /\n //\n if (url.pathname.charAt(0) !== '/' && isSpecial(url.protocol)) {\n url.pathname = '/' + url.pathname;\n }\n\n //\n // We should not add port numbers if they are already the default port number\n // for a given protocol. As the host also contains the port number we're going\n // override it with the hostname which contains no port number.\n //\n if (!required(url.port, url.protocol)) {\n url.host = url.hostname;\n url.port = '';\n }\n\n //\n // Parse down the `auth` for the username and password.\n //\n url.username = url.password = '';\n\n if (url.auth) {\n index = url.auth.indexOf(':');\n\n if (~index) {\n url.username = url.auth.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = url.auth.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password))\n } else {\n url.username = encodeURIComponent(decodeURIComponent(url.auth));\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n }\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n //\n // The href is just the compiled result.\n //\n url.href = url.toString();\n}\n\n/**\n * This is convenience method for changing properties in the URL instance to\n * insure that they all propagate correctly.\n *\n * @param {String} part Property we need to adjust.\n * @param {Mixed} value The newly assigned value.\n * @param {Boolean|Function} fn When setting the query, it will be the function\n * used to parse the query.\n * When setting the protocol, double slash will be\n * removed from the final url if it is true.\n * @returns {URL} URL instance for chaining.\n * @public\n */\nfunction set(part, value, fn) {\n var url = this;\n\n switch (part) {\n case 'query':\n if ('string' === typeof value && value.length) {\n value = (fn || qs.parse)(value);\n }\n\n url[part] = value;\n break;\n\n case 'port':\n url[part] = value;\n\n if (!required(value, url.protocol)) {\n url.host = url.hostname;\n url[part] = '';\n } else if (value) {\n url.host = url.hostname +':'+ value;\n }\n\n break;\n\n case 'hostname':\n url[part] = value;\n\n if (url.port) value += ':'+ url.port;\n url.host = value;\n break;\n\n case 'host':\n url[part] = value;\n\n if (port.test(value)) {\n value = value.split(':');\n url.port = value.pop();\n url.hostname = value.join(':');\n } else {\n url.hostname = value;\n url.port = '';\n }\n\n break;\n\n case 'protocol':\n url.protocol = value.toLowerCase();\n url.slashes = !fn;\n break;\n\n case 'pathname':\n case 'hash':\n if (value) {\n var char = part === 'pathname' ? '/' : '#';\n url[part] = value.charAt(0) !== char ? char + value : value;\n } else {\n url[part] = value;\n }\n break;\n\n case 'username':\n case 'password':\n url[part] = encodeURIComponent(value);\n break;\n\n case 'auth':\n var index = value.indexOf(':');\n\n if (~index) {\n url.username = value.slice(0, index);\n url.username = encodeURIComponent(decodeURIComponent(url.username));\n\n url.password = value.slice(index + 1);\n url.password = encodeURIComponent(decodeURIComponent(url.password));\n } else {\n url.username = encodeURIComponent(decodeURIComponent(value));\n }\n }\n\n for (var i = 0; i < rules.length; i++) {\n var ins = rules[i];\n\n if (ins[4]) url[ins[1]] = url[ins[1]].toLowerCase();\n }\n\n url.auth = url.password ? url.username +':'+ url.password : url.username;\n\n url.origin = url.protocol !== 'file:' && isSpecial(url.protocol) && url.host\n ? url.protocol +'//'+ url.host\n : 'null';\n\n url.href = url.toString();\n\n return url;\n}\n\n/**\n * Transform the properties back in to a valid and full URL string.\n *\n * @param {Function} stringify Optional query stringify function.\n * @returns {String} Compiled version of the URL.\n * @public\n */\nfunction toString(stringify) {\n if (!stringify || 'function' !== typeof stringify) stringify = qs.stringify;\n\n var query\n , url = this\n , host = url.host\n , protocol = url.protocol;\n\n if (protocol && protocol.charAt(protocol.length - 1) !== ':') protocol += ':';\n\n var result =\n protocol +\n ((url.protocol && url.slashes) || isSpecial(url.protocol) ? '//' : '');\n\n if (url.username) {\n result += url.username;\n if (url.password) result += ':'+ url.password;\n result += '@';\n } else if (url.password) {\n result += ':'+ url.password;\n result += '@';\n } else if (\n url.protocol !== 'file:' &&\n isSpecial(url.protocol) &&\n !host &&\n url.pathname !== '/'\n ) {\n //\n // Add back the empty userinfo, otherwise the original invalid URL\n // might be transformed into a valid one with `url.pathname` as host.\n //\n result += '@';\n }\n\n //\n // Trailing colon is removed from `url.host` when it is parsed. If it still\n // ends with a colon, then add back the trailing colon that was removed. This\n // prevents an invalid URL from being transformed into a valid one.\n //\n if (host[host.length - 1] === ':' || (port.test(url.hostname) && !url.port)) {\n host += ':';\n }\n\n result += host + url.pathname;\n\n query = 'object' === typeof url.query ? stringify(url.query) : url.query;\n if (query) result += '?' !== query.charAt(0) ? '?'+ query : query;\n\n if (url.hash) result += url.hash;\n\n return result;\n}\n\nUrl.prototype = { set: set, toString: toString };\n\n//\n// Expose the URL parser and some additional properties that might be useful for\n// others or testing.\n//\nUrl.extractProtocol = extractProtocol;\nUrl.location = lolcation;\nUrl.trimLeft = trimLeft;\nUrl.qs = qs;\n\nmodule.exports = Url;\n",null,null,null,null,null,null],"names":["querystringify","querystringify_1","require$$0","require$$1","global"],"mappings":"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","x_google_ignoreList":[0,1,2]}
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@wutiange/log-listener-plugin",
|
3
|
-
"version": "2.0.2-alpha.
|
3
|
+
"version": "2.0.2-alpha.3",
|
4
4
|
"description": "log-record 客户端对应的的插件\r\nLog-record client corresponding plugin",
|
5
5
|
"source": "index.ts",
|
6
6
|
"react-native": "index.ts",
|
@@ -49,4 +49,4 @@
|
|
49
49
|
"url-parse": "^1.5.10"
|
50
50
|
},
|
51
51
|
"packageManager": "yarn@4.5.3"
|
52
|
-
}
|
52
|
+
}
|
package/src/HTTPInterceptor.ts
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import XHRInterceptor from 'react-native/Libraries/Network/XHRInterceptor';
|
2
2
|
import BlobFileReader from 'react-native/Libraries/Blob/FileReader';
|
3
|
-
import {Blob} from 'buffer';
|
4
|
-
import {
|
3
|
+
import { Blob } from 'buffer';
|
4
|
+
import { formDataToString } from './utils';
|
5
5
|
import logger from './logger';
|
6
6
|
|
7
7
|
type StartNetworkLoggingOptions = {
|
@@ -87,7 +87,7 @@ const getResponseBody = async (responseType: string, response: any) => {
|
|
87
87
|
}
|
88
88
|
return response ?? null;
|
89
89
|
} catch (error) {
|
90
|
-
logger.warn(
|
90
|
+
logger.warn('getResponseBody---error---', error);
|
91
91
|
return null;
|
92
92
|
}
|
93
93
|
};
|
@@ -153,7 +153,7 @@ class HTTPInterceptor {
|
|
153
153
|
await listener(data);
|
154
154
|
}
|
155
155
|
} catch (error: any) {
|
156
|
-
console.warn(`eventName=${eventName}, error=${error?.message}`)
|
156
|
+
console.warn(`eventName=${eventName}, error=${error?.message}`);
|
157
157
|
}
|
158
158
|
});
|
159
159
|
};
|
@@ -171,7 +171,7 @@ class HTTPInterceptor {
|
|
171
171
|
|
172
172
|
if (this.ignoredPatterns) {
|
173
173
|
if (
|
174
|
-
this.ignoredPatterns.some(pattern => pattern.test(`${method} ${url}`))
|
174
|
+
this.ignoredPatterns.some((pattern) => pattern.test(`${method} ${url}`))
|
175
175
|
) {
|
176
176
|
return;
|
177
177
|
}
|
@@ -258,10 +258,7 @@ class HTTPInterceptor {
|
|
258
258
|
|
259
259
|
setIgnoredUrls = (ignoredUrls: string[]) => {
|
260
260
|
if (ignoredUrls?.length) {
|
261
|
-
if (
|
262
|
-
!Array.isArray(ignoredUrls) ||
|
263
|
-
typeof ignoredUrls[0] !== 'string'
|
264
|
-
) {
|
261
|
+
if (!Array.isArray(ignoredUrls) || typeof ignoredUrls[0] !== 'string') {
|
265
262
|
console.warn(
|
266
263
|
'ignoredUrls must be an array of strings. The logger has not been started.',
|
267
264
|
);
|
@@ -269,7 +266,7 @@ class HTTPInterceptor {
|
|
269
266
|
}
|
270
267
|
this.ignoredUrls = new Set(ignoredUrls);
|
271
268
|
}
|
272
|
-
}
|
269
|
+
};
|
273
270
|
|
274
271
|
enable = (options?: StartNetworkLoggingOptions) => {
|
275
272
|
try {
|
@@ -301,7 +298,7 @@ class HTTPInterceptor {
|
|
301
298
|
if (options?.ignoredPatterns) {
|
302
299
|
this.ignoredPatterns = options.ignoredPatterns;
|
303
300
|
}
|
304
|
-
this.setIgnoredUrls(options?.ignoredUrls ?? [])
|
301
|
+
this.setIgnoredUrls(options?.ignoredUrls ?? []);
|
305
302
|
XHRInterceptor.setOpenCallback(this.openHandle);
|
306
303
|
XHRInterceptor.setRequestHeaderCallback(this.requestHeaderHandle);
|
307
304
|
XHRInterceptor.setHeaderReceivedCallback(this.headerReceivedHandle);
|
@@ -330,8 +327,7 @@ class HTTPInterceptor {
|
|
330
327
|
};
|
331
328
|
}
|
332
329
|
|
333
|
-
const
|
334
|
-
const httpInterceptor = new SafeHTTPInterceptor();
|
330
|
+
const httpInterceptor = new HTTPInterceptor();
|
335
331
|
export {
|
336
332
|
type StartNetworkLoggingOptions,
|
337
333
|
httpInterceptor,
|
@@ -7,7 +7,6 @@ jest.mock('buffer', () => ({
|
|
7
7
|
Blob: jest.fn(),
|
8
8
|
}));
|
9
9
|
jest.mock('../utils', () => ({
|
10
|
-
createClassWithErrorHandling: jest.fn(Class => Class),
|
11
10
|
formDataToString: jest.fn(),
|
12
11
|
}));
|
13
12
|
|
@@ -28,7 +27,7 @@ class MockFormData {
|
|
28
27
|
|
29
28
|
class MockBlob {
|
30
29
|
private content: string;
|
31
|
-
type: any
|
30
|
+
type: any;
|
32
31
|
constructor(parts: any, options: any = {}) {
|
33
32
|
this.content = parts ? parts.join('') : '';
|
34
33
|
this.type = options.type || '';
|
@@ -165,127 +164,166 @@ describe('HTTPInterceptor', () => {
|
|
165
164
|
|
166
165
|
beforeEach(() => {
|
167
166
|
httpInterceptor.enable();
|
168
|
-
openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
169
|
-
|
170
|
-
|
171
|
-
|
172
|
-
|
167
|
+
openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
168
|
+
.calls[0][0];
|
169
|
+
requestHeaderCallback = (
|
170
|
+
XHRInterceptor.setRequestHeaderCallback as jest.Mock
|
171
|
+
).mock.calls[0][0];
|
172
|
+
headerReceivedCallback = (
|
173
|
+
XHRInterceptor.setHeaderReceivedCallback as jest.Mock
|
174
|
+
).mock.calls[0][0];
|
175
|
+
sendCallback = (XHRInterceptor.setSendCallback as jest.Mock).mock
|
176
|
+
.calls[0][0];
|
177
|
+
responseCallback = (XHRInterceptor.setResponseCallback as jest.Mock).mock
|
178
|
+
.calls[0][0];
|
173
179
|
});
|
174
180
|
|
175
181
|
it('should handle open event', () => {
|
176
182
|
const listener = jest.fn();
|
177
183
|
httpInterceptor.addListener('open', listener);
|
178
|
-
const xhr = {}
|
184
|
+
const xhr = {};
|
179
185
|
openCallback('GET', 'https://example.com', xhr);
|
180
|
-
expect(listener).toHaveBeenCalledWith(
|
181
|
-
|
182
|
-
|
183
|
-
|
186
|
+
expect(listener).toHaveBeenCalledWith(
|
187
|
+
expect.objectContaining({
|
188
|
+
method: 'GET',
|
189
|
+
url: 'https://example.com',
|
190
|
+
}),
|
191
|
+
);
|
184
192
|
});
|
185
193
|
|
186
194
|
it('should handle request header event', () => {
|
187
195
|
const listener = jest.fn();
|
188
196
|
httpInterceptor.addListener('requestHeader', listener);
|
189
|
-
const xhr = {}
|
197
|
+
const xhr = {};
|
190
198
|
openCallback('GET', 'https://example.com', xhr);
|
191
199
|
requestHeaderCallback('Content-Type', 'application/json', xhr);
|
192
|
-
expect(listener).toHaveBeenCalledWith(
|
193
|
-
|
194
|
-
|
200
|
+
expect(listener).toHaveBeenCalledWith(
|
201
|
+
expect.objectContaining({
|
202
|
+
requestHeaders: { 'Content-Type': 'application/json' },
|
203
|
+
}),
|
204
|
+
);
|
195
205
|
});
|
196
206
|
|
197
207
|
it('should handle header received event', () => {
|
198
208
|
const listener = jest.fn();
|
199
209
|
httpInterceptor.addListener('headerReceived', listener);
|
200
|
-
const xhr: {[key in string]: any} = {}
|
210
|
+
const xhr: { [key in string]: any } = {};
|
201
211
|
openCallback('GET', 'https://example.com', xhr);
|
202
|
-
xhr.responseHeaders = { 'Content-Type': 'application/json' }
|
212
|
+
xhr.responseHeaders = { 'Content-Type': 'application/json' };
|
203
213
|
headerReceivedCallback('application/json', 100, {}, xhr);
|
204
|
-
expect(listener).toHaveBeenCalledWith(
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
214
|
+
expect(listener).toHaveBeenCalledWith(
|
215
|
+
expect.objectContaining({
|
216
|
+
responseContentType: 'application/json',
|
217
|
+
responseSize: 100,
|
218
|
+
responseHeaders: { 'Content-Type': 'application/json' },
|
219
|
+
}),
|
220
|
+
);
|
209
221
|
});
|
210
222
|
|
211
223
|
it('should handle send event with JSON data', () => {
|
212
224
|
const listener = jest.fn();
|
213
225
|
httpInterceptor.addListener('send', listener);
|
214
|
-
const xhr = {}
|
226
|
+
const xhr = {};
|
215
227
|
openCallback('POST', 'https://example.com', xhr);
|
216
228
|
sendCallback(JSON.stringify({ key: 'value' }), xhr);
|
217
|
-
expect(listener).toHaveBeenCalledWith(
|
218
|
-
|
219
|
-
|
229
|
+
expect(listener).toHaveBeenCalledWith(
|
230
|
+
expect.objectContaining({
|
231
|
+
requestData: { key: 'value' },
|
232
|
+
}),
|
233
|
+
);
|
220
234
|
});
|
221
235
|
|
222
236
|
it('should handle send event with FormData', () => {
|
223
237
|
const listener = jest.fn();
|
224
238
|
httpInterceptor.addListener('send', listener);
|
225
|
-
const xhr = {}
|
239
|
+
const xhr = {};
|
226
240
|
openCallback('POST', 'https://example.com', xhr);
|
227
241
|
const formData = new FormData();
|
228
242
|
formData.append('key', 'value');
|
229
243
|
(formDataToString as jest.Mock).mockReturnValue('key=value');
|
230
244
|
sendCallback(formData, xhr);
|
231
|
-
expect(listener).toHaveBeenCalledWith(
|
232
|
-
|
233
|
-
|
245
|
+
expect(listener).toHaveBeenCalledWith(
|
246
|
+
expect.objectContaining({
|
247
|
+
requestData: 'key=value',
|
248
|
+
}),
|
249
|
+
);
|
234
250
|
});
|
235
251
|
|
236
252
|
it('should handle response event', async () => {
|
237
253
|
const listener = jest.fn();
|
238
254
|
httpInterceptor.addListener('response', listener);
|
239
|
-
const xhr = {}
|
255
|
+
const xhr = {};
|
240
256
|
openCallback('GET', 'https://example.com', xhr);
|
241
|
-
await responseCallback(
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
257
|
+
await responseCallback(
|
258
|
+
200,
|
259
|
+
1000,
|
260
|
+
{ data: 'response' },
|
261
|
+
'https://example.com',
|
262
|
+
'json',
|
263
|
+
xhr,
|
264
|
+
);
|
265
|
+
expect(listener).toHaveBeenCalledWith(
|
266
|
+
expect.objectContaining({
|
267
|
+
status: 200,
|
268
|
+
timeout: 1000,
|
269
|
+
responseData: { data: 'response' },
|
270
|
+
responseURL: 'https://example.com',
|
271
|
+
responseType: 'json',
|
272
|
+
}),
|
273
|
+
);
|
249
274
|
});
|
250
275
|
|
251
276
|
it('should handle response event with blob data', async () => {
|
252
277
|
const listener = jest.fn();
|
253
278
|
httpInterceptor.addListener('response', listener);
|
254
|
-
const xhr = {}
|
279
|
+
const xhr = {};
|
255
280
|
openCallback('GET', 'https://example.com', xhr);
|
256
281
|
const mockBlob = new MockBlob(['blob content']);
|
257
|
-
await responseCallback(
|
258
|
-
|
259
|
-
|
260
|
-
|
282
|
+
await responseCallback(
|
283
|
+
200,
|
284
|
+
1000,
|
285
|
+
mockBlob,
|
286
|
+
'https://example.com',
|
287
|
+
'blob',
|
288
|
+
xhr,
|
289
|
+
);
|
290
|
+
expect(listener).toHaveBeenCalledWith(
|
291
|
+
expect.objectContaining({
|
292
|
+
responseData: 'blob content',
|
293
|
+
}),
|
294
|
+
);
|
261
295
|
});
|
262
296
|
});
|
263
297
|
|
264
298
|
describe('error handling', () => {
|
265
299
|
beforeEach(() => {
|
266
300
|
httpInterceptor.enable();
|
267
|
-
})
|
301
|
+
});
|
268
302
|
it('should handle errors in listeners', async () => {
|
269
303
|
const errorListener = jest.fn(() => {
|
270
304
|
throw new Error('Listener error');
|
271
305
|
});
|
272
306
|
httpInterceptor.addListener('open', errorListener);
|
273
307
|
console.warn = jest.fn();
|
274
|
-
const xhr = {}
|
275
|
-
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
308
|
+
const xhr = {};
|
309
|
+
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
310
|
+
.calls[0][0];
|
276
311
|
openCallback('GET', 'https://example.com', xhr);
|
277
|
-
|
278
|
-
expect(console.warn).toHaveBeenCalledWith(
|
312
|
+
|
313
|
+
expect(console.warn).toHaveBeenCalledWith(
|
314
|
+
expect.stringContaining('Listener error'),
|
315
|
+
);
|
279
316
|
});
|
280
317
|
});
|
281
318
|
|
282
319
|
describe('ignored requests', () => {
|
283
320
|
it('should ignore requests to ignored hosts', () => {
|
284
321
|
httpInterceptor.enable({ ignoredHosts: ['ignored.com'] });
|
285
|
-
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
322
|
+
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
323
|
+
.calls[0][0];
|
286
324
|
const listener = jest.fn();
|
287
325
|
httpInterceptor.addListener('open', listener);
|
288
|
-
|
326
|
+
|
289
327
|
openCallback('GET', 'https://ignored.com', { uniqueId: '123' });
|
290
328
|
expect(listener).not.toHaveBeenCalled();
|
291
329
|
|
@@ -295,10 +333,11 @@ describe('HTTPInterceptor', () => {
|
|
295
333
|
|
296
334
|
it('should ignore requests to ignored URLs', () => {
|
297
335
|
httpInterceptor.enable({ ignoredUrls: ['https://example.com/ignored'] });
|
298
|
-
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
336
|
+
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
337
|
+
.calls[0][0];
|
299
338
|
const listener = jest.fn();
|
300
339
|
httpInterceptor.addListener('open', listener);
|
301
|
-
|
340
|
+
|
302
341
|
openCallback('GET', 'https://example.com/ignored', { uniqueId: '123' });
|
303
342
|
expect(listener).not.toHaveBeenCalled();
|
304
343
|
|
@@ -308,10 +347,11 @@ describe('HTTPInterceptor', () => {
|
|
308
347
|
|
309
348
|
it('should ignore requests matching ignored patterns', () => {
|
310
349
|
httpInterceptor.enable({ ignoredPatterns: [/^GET https:\/\/test\.com/] });
|
311
|
-
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
350
|
+
const openCallback = (XHRInterceptor.setOpenCallback as jest.Mock).mock
|
351
|
+
.calls[0][0];
|
312
352
|
const listener = jest.fn();
|
313
353
|
httpInterceptor.addListener('open', listener);
|
314
|
-
|
354
|
+
|
315
355
|
openCallback('GET', 'https://test.com/api', { uniqueId: '123' });
|
316
356
|
expect(listener).not.toHaveBeenCalled();
|
317
357
|
|