{"id":15003654,"url":"https://github.com/nodesecure/js-x-ray","last_synced_at":"2026-03-03T20:09:51.345Z","repository":{"id":36962366,"uuid":"250373441","full_name":"NodeSecure/js-x-ray","owner":"NodeSecure","description":"JavaScript \u0026 Node.js open-source SAST scanner. A static analyser for detecting most common malicious patterns 🔬.","archived":false,"fork":false,"pushed_at":"2025-05-05T10:19:10.000Z","size":1249,"stargazers_count":242,"open_issues_count":6,"forks_count":24,"subscribers_count":5,"default_branch":"master","last_synced_at":"2025-05-09T00:34:42.252Z","etag":null,"topics":["ast","ast-analysis","javascript","nodejs","sast","security","security-audit","security-tools","supply-chain-security"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/NodeSecure.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-03-26T21:15:45.000Z","updated_at":"2025-05-05T10:19:13.000Z","dependencies_parsed_at":"2023-02-16T14:45:39.784Z","dependency_job_id":"0e9cc6e7-ad97-4232-9ba9-71a3f5e086b8","html_url":"https://github.com/NodeSecure/js-x-ray","commit_stats":{"total_commits":240,"total_committers":16,"mean_commits":15.0,"dds":"0.19166666666666665","last_synced_commit":"222e5eb4140788bcca88751ac82467afc4905f01"},"previous_names":["fraxken/js-x-ray"],"tags_count":25,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeSecure%2Fjs-x-ray","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeSecure%2Fjs-x-ray/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeSecure%2Fjs-x-ray/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/NodeSecure%2Fjs-x-ray/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/NodeSecure","download_url":"https://codeload.github.com/NodeSecure/js-x-ray/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254328385,"owners_count":22052632,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ast","ast-analysis","javascript","nodejs","sast","security","security-audit","security-tools","supply-chain-security"],"created_at":"2024-09-24T18:59:44.995Z","updated_at":"2026-02-08T00:09:17.391Z","avatar_url":"https://github.com/NodeSecure.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"https://user-images.githubusercontent.com/4438263/213887379-c873eb89-8786-4b5c-8a59-dcca49e01cb8.jpg\" alt=\"@nodesecure/js-x-ray\"\u003e\n\u003c/p\u003e\n\n\u003cp align=\"center\"\u003e\n    \u003ca href=\"https://github.com/NodeSecure/js-x-ray\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/dynamic/json.svg?style=for-the-badge\u0026url=https://raw.githubusercontent.com/NodeSecure/js-x-ray/refs/heads/master/workspaces/js-x-ray/package.json\u0026query=$.version\u0026label=Version\" alt=\"npm version\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/NodeSecure/js-x-ray/blob/master/LICENSE\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/license/NodeSecure/js-x-ray.svg?style=for-the-badge\" alt=\"license\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://api.securityscorecards.dev/projects/github.com/NodeSecure/js-x-ray\"\u003e\n      \u003cimg src=\"https://api.securityscorecards.dev/projects/github.com/NodeSecure/js-x-ray/badge?style=for-the-badge\" alt=\"ossf scorecard\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://slsa.dev/spec/v1.0/levels#build-l3\"\u003e\n      \u003cimg src=\"https://img.shields.io/badge/SLSA-level%203-green?style=for-the-badge\u0026logo=data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAMAAAAolt3jAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAABMlBMVEXvMQDvMADwMQDwMADwMADvMADvMADwMADwMQDvMQDvMQDwMADwMADvMADwMADwMADwMQDvMQDvMQDwMQDvMQDwMQDwMADwMADwMQDwMADwMADvMADvMQDvMQDwMADwMQDwMADvMQDwMADwMQDwMADwMADwMADwMADwMADwMADvMQDvMQDwMADwMQDwMADvMQDvMQDwMADvMQDvMQDwMADwMQDwMQDwMQDvMQDwMADvMADwMADwMQDvMQDwMADwMQDwMQDwMQDwMQDvMQDvMQDvMADwMADvMADvMADvMADwMQDwMQDvMADvMQDvMQDvMADvMADvMQDwMQDvMQDvMADvMADvMADvMQDwMQDvMQDvMQDvMADvMADwMADvMQDvMQDvMQDvMADwMADwMQDwMAAAAAA/HoSwAAAAY3RSTlMpsvneQlQrU/LQSWzvM5DzmzeF9Pi+N6vvrk9HuP3asTaPgkVFmO3rUrMjqvL6d0LLTVjI/PuMQNSGOWa/6YU8zNuDLihJ0e6aMGzl8s2IT7b6lIFkRj1mtvQ0eJW95rG0+Sid59x/AAAAAWJLR0Rltd2InwAAAAlwSFlzAAAOwwAADsMBx2+oZAAAAAd0SU1FB+YHGg0tGLrTaD4AAACqSURBVAjXY2BgZEqGAGYWVjYGdg4oj5OLm4eRgZcvBcThFxAUEk4WYRAVE09OlpCUkpaRTU6WY0iWV1BUUlZRVQMqUddgSE7W1NLS1gFp0NXTB3KTDQyNjE2Sk03NzC1A3GR1SytrG1s7e4dkBogtjk7OLq5uyTCuu4enl3cyhOvj66fvHxAIEmYICg4JDQuPiAQrEmGIio6JjZOFOjSegSHBBMpOToxPAgCJfDZC/m2KHgAAACV0RVh0ZGF0ZTpjcmVhdGUAMjAyMi0wNy0yNlQxMzo0NToyNCswMDowMC8AywoAAAAldEVYdGRhdGU6bW9kaWZ5ADIwMjItMDctMjZUMTM6NDU6MjQrMDA6MDBeXXO2AAAAGXRFWHRTb2Z0d2FyZQB3d3cuaW5rc2NhcGUub3Jnm+48GgAAAABJRU5ErkJggg==\" alt=\"slsa level3\"\u003e\n    \u003c/a\u003e\n    \u003ca href=\"https://github.com/NodeSecure/js-x-ray/actions?query=workflow%3A%22Node.js+CI%22\"\u003e\n      \u003cimg src=\"https://img.shields.io/github/actions/workflow/status/NodeSecure/js-x-ray/node.js.yml?style=for-the-badge\" alt=\"github ci workflow\"\u003e\n    \u003c/a\u003e\n\u003c/p\u003e\n\n**JS-X-Ray** is a JavaScript \u0026 TypeScript [SAST](https://github.com/resources/articles/what-is-sast) for identifying malicious patterns, security vulnerabilities, and code anomalies. Think of it as ESLint, but dedicated to security analysis. Originally created for [NodeSecure CLI](https://github.com/NodeSecure/cli), JS-X-Ray has become an independent and serious option for supply chain protection.\n\n## 🔎 How It Works\n\nJS-X-Ray parses JS or TS code into an **Abstract Syntax Tree (AST)** with no extensive usage of RegEx or Semgrep rules. This enables variable tracing, dynamic import resolution, and detection of sophisticated obfuscation that pattern-matching tools miss. The tradeoff is that JS-X-Ray is purely dedicated to the JavaScript/TypeScript ecosystem.\n\n## 💡 Features\n- Retrieve required dependencies and files for Node.js\n  - Track `require()`, `import`, and dynamic imports with full tracing capabilities\n  - Detect untraceable and malicious import patterns\n- Scan entire projects with multi-file analysis capabilities\n- Extract infrastructure components (URLs, IPs, hostnames, emails)\n- Detect malicious code patterns\n  - Obfuscated code with tool identification (freejsobfuscator, jsfuck, jjencode, obfuscator.io, morse, Trojan Source)\n  - Data exfiltration and unauthorized system information collection\n  - Suspicious files with excessive encoded literals\n- Identify vulnerable code patterns\n  - Unsafe statements (`eval()`, `Function()` constructor)\n  - ReDoS vulnerabilities in regular expressions\n  - SQL injection vulnerabilities\n  - Unsafe shell commands in `spawn()` or `exec()` calls\n  - `process.env` serialization attempts\n- Flag weak cryptographic usage\n  - Deprecated algorithms (MD5, SHA1, MD4, MD2, RIPEMD160)\n- Detect code quality issues\n  - Monkey-patching of built-in prototypes\n  - Encoded literals (hex, Unicode, base64)\n  - Suspicious URLs and links\n  - Short identifier lengths (obfuscation indicators)\n  - Synchronous I/O and logging usage (optional)\n- Configurable sensitivity modes (conservative/aggressive) and extensible probe system\n- Support both JavaScript and TypeScript\n\n## 💃 Getting Started\n\nThis package is available in the Node package repository and can be easily installed with [npm](https://docs.npmjs.com/getting-started/what-is-npm) or [yarn](https://yarnpkg.com).\n\n```bash\n$ npm i @nodesecure/js-x-ray\n# or\n$ yarn add @nodesecure/js-x-ray\n```\n\n## 👀 Usage example\n\nCreate a local `.js` file with the following content:\n```js\ntry  {\n    require(\"http\");\n}\ncatch (err) {\n    // do nothing\n}\nconst lib = \"crypto\";\nrequire(lib);\nrequire(\"util\");\nrequire(Buffer.from(\"6673\", \"hex\").toString());\n```\n\n---\n\nThen use `js-x-ray` to run an analysis of the JavaScript code:\n```js\nimport { AstAnalyser } from \"@nodesecure/js-x-ray\";\nimport { readFileSync } from \"node:fs\";\n\nconst scanner = new AstAnalyser();\n\nconst { warnings, dependencies } = await scanner.analyseFile(\n  \"./file.js\"\n);\n\nconsole.log(dependencies);\nconsole.dir(warnings, { depth: null });\n```\n\nThe analysis will return: `http` (in try), `crypto`, `util` and `fs`.\n\n\u003e [!TIP]\n\u003e There are also a lot of suspicious code examples in the `./workspaces/js-x-ray/examples` directory. Feel free to try the tool on these files.\n\n### Scanning a complete project\n\nBy itself, JS-X-Ray does not provide utilities to walk and scan a complete project. However, NodeSecure has packages to achieve that:\n\n```ts\nimport { ManifestManager } from \"@nodesecure/mama\";\nimport { NpmTarball } from \"@nodesecure/tarball\";\n\nconst mama = await ManifestManager.fromPackageJSON(\n  \"./path/to/package.json\"\n);\nconst extractor = new NpmTarball(mama);\n\nconst {\n  composition, // Project composition (files, dependencies, extensions)\n  conformance, // License conformance (SPDX)\n  code         // JS-X-Ray analysis results\n} = await extractor.scanFiles();\n\nconsole.log(code);\n```\n\nThe `NpmTarball` class uses JS-X-Ray under the hood, and `ManifestManager` locates entry (input) files for analysis.\n\nAlternatively, you can use `EntryFilesAnalyser` directly for multi-file analysis. See the [EntryFilesAnalyser API documentation](./workspaces/js-x-ray/docs/EntryFilesAnalyser.md) for more details.\n\n## 📚 API\n\n- [AstAnalyser](./workspaces/js-x-ray/docs/AstAnalyser.md)\n- [EntryFilesAnalyser](./workspaces/js-x-ray/docs/EntryFilesAnalyser.md)\n- [CollectableSet](./workspaces/js-x-ray/docs/CollectableSet.md)\n- [SourceParser](./workspaces/js-x-ray/docs/SourceParser.md)\n- [VariableTracer](./workspaces/js-x-ray/docs/VariableTracer.md)\n\n## Warnings\n\n```ts\ntype OptionalWarningName =\n  | \"synchronous-io\"\n  | \"log-usage\";\n\ntype WarningName =\n  | \"parsing-error\"\n  | \"encoded-literal\"\n  | \"unsafe-regex\"\n  | \"unsafe-stmt\"\n  | \"short-identifiers\"\n  | \"suspicious-literal\"\n  | \"suspicious-file\"\n  | \"obfuscated-code\"\n  | \"weak-crypto\"\n  | \"shady-link\"\n  | \"unsafe-command\"\n  | \"unsafe-import\"\n  | \"serialize-environment\"\n  | \"data-exfiltration\"\n  | \"sql-injection\"\n  | \"monkey-patch\"\n  | OptionalWarningName;\n\ninterface Warning\u003cT = WarningName\u003e {\n  kind: T | (string \u0026 {});\n  file?: string;\n  value: string | null;\n  source: string;\n  location: null | SourceArrayLocation | SourceArrayLocation[];\n  i18n: string;\n  severity: \"Information\" | \"Warning\" | \"Critical\";\n  experimental?: boolean;\n}\n\ndeclare const warnings: Record\u003cWarningName, {\n  i18n: string;\n  severity: \"Information\" | \"Warning\" | \"Critical\";\n  experimental: boolean;\n}\u003e;\n```\n\n### Optional Warnings\n\nSome warnings are not included by default and must be explicitly requested through the `AstAnalyser` API.\n\n```js\nimport { AstAnalyser } from \"@nodesecure/js-x-ray\";\n\n// Enable all optional warnings\nconst scanner = new AstAnalyser({\n  optionalWarnings: true\n});\n\n// Or enable specific optional warnings\nconst scannerSpecific = new AstAnalyser({\n  optionalWarnings: [\"synchronous-io\", \"log-usage\"]\n});\n```\n\nThe following warnings are optional:\n- `synchronous-io` - Detects synchronous I/O operations that could impact performance\n- `log-usage` - Tracks usage of logging functions (console.log, logger.info, etc.)\n\n### Internationalization (i18n)\n\nWarnings support internationalization through the `@nodesecure/i18n` package. Each warning has an i18n key that can be used to retrieve localized descriptions.\n\n```js\nimport * as jsxray from \"@nodesecure/js-x-ray\";\nimport * as i18n from \"@nodesecure/i18n\";\n\nawait i18n.extendFromSystemPath(jsxray.i18nLocation());\n\nconst message = i18n.getTokenSync(\n  jsxray.warnings[\"parsing-error\"].i18n\n);\nconsole.log(message);\n```\n\n### Warning Catalog\n\nClick on the warning **name** for detailed documentation and examples.\n\n#### Critical Severity\n\n| Name | Experimental | Description |\n| --- | :-: | --- |\n| [suspicious-file](./docs/suspicious-file.md) | No | Suspicious file containing more than ten encoded literals |\n| [obfuscated-code](./docs/obfuscated-code.md) | **Yes** | High probability of code obfuscation detected |\n\n#### Warning Severity\n\n| Name | Experimental | Description |\n| --- | :-: | --- |\n| [unsafe-import](./docs/unsafe-import.md) | No | Unable to follow an import (`require`, `require.resolve`) statement |\n| [unsafe-regex](./docs/unsafe-regex.md) | No | Unsafe regular expression that may be vulnerable to ReDoS attacks |\n| [unsafe-stmt](./docs/unsafe-stmt.md) | No | Usage of dangerous statements like `eval()` or `Function(\"\")` |\n| [unsafe-command](./docs/unsafe-command.md) | **Yes** | Suspicious commands detected in `spawn()` or `exec()` |\n| [short-identifiers](./docs/short-identifiers.md) | No | Average identifier length below 1.5 characters (possible obfuscation) |\n| [suspicious-literal](./docs/suspicious-literal.md) | No | Suspicious literal values detected in source code |\n| [weak-crypto](./docs/weak-crypto.md) | No | Usage of weak cryptographic algorithms (MD5, SHA1, etc.) |\n| [shady-link](./docs/shady-link.md) | No | Suspicious or potentially malicious URLs detected |\n| [synchronous-io](./docs/synchronous-io.md) ⚠️ | **Yes** | Synchronous I/O operations that may impact performance |\n| [serialize-environment](./docs/serialize-environment.md) | No | Attempts to serialize `process.env` (potential data exfiltration) |\n| [data-exfiltration](./docs/data-exfiltration.md) | No | Potential unauthorized transfer of sensitive data |\n| [sql-injection](./docs/sql-injection.md) | No | Potential SQL injection vulnerability detected |\n| [monkey-patch](./docs/monkey-patch.md) | No | Modification of built-in JavaScript prototype properties |\n\n#### Information Severity\n\n| Name | Experimental | Description |\n| --- | :-: | --- |\n| [parsing-error](./docs/parsing-error.md) | No | AST parser encountered an error while analyzing the code |\n| [encoded-literal](./docs/encoded-literal.md) | No | Encoded literal detected (hexadecimal, Unicode, base64) |\n| [log-usage](./docs/log-usage.md) ⚠️ | No | Usage of logging functions (console.log, logger methods, etc.) |\n\n\u003e [!NOTE]\n\u003e Warnings marked with ⚠️ are optional and must be explicitly enabled (see [Optional Warnings](#optional-warnings) section).\n\n## Contributors guide\n\nIf you are a developer **looking to contribute** to the project, you must first read the [CONTRIBUTING](./CONTRIBUTING.md) guide.\n\nOnce you have finished your development, check that the tests (and linter) are still good by running the following script:\n\n```bash\n$ npm run check\n```\n\n\u003e [!CAUTION]\n\u003e In case you introduce a new feature or fix a bug, make sure to include tests for it as well.\n\n### Internal APIs\n\nFor contributors working on the JS-X-Ray internals, the following resources document low-level utilities and AST manipulation patterns:\n\n- [ESTree utilities](./workspaces/js-x-ray/src/estree/README.md) - Low-level helpers to manipulate ESTree AST nodes\n- [ESTree assignment and declaration patterns (french)](./workspaces/js-x-ray/docs/estree/patterns-french.md) - Reference guide for JavaScript assignment and declaration patterns in AST form\n\n### Benchmarks\n\nThe performance of js-x-ray is measured and tracked using [mitata](https://github.com/evanwashere/mitata).\n\nTo run the benchmarks:\n1. Navigate to `workspaces/js-x-ray`.\n2. Run `npm run bench`.\n\nThe benchmark results are stored in workspaces/js-x-ray/benchmark/report.json. Do not edit this file manually; it is automatically updated on every pull request.\n\n### Workspaces\n\nClick on one of the links to access the documentation of the workspace:\n\n| name | package and link |\n| --- | --- |\n| js-x-ray | [@nodesecure/js-x-ray](./workspaces/js-x-ray) |\n| js-x-ray-ai | [@nodesecure/js-x-ray-ai](./workspaces/js-x-ray-ai) |\n\nThese packages are available in the Node package repository and can be easily installed with [npm](https://docs.npmjs.com/getting-started/what-is-npm) or [yarn](https://yarnpkg.com).\n```bash\n$ npm i @nodesecure/estree-ast-util\n# or\n$ yarn add @nodesecure/estree-ast-util\n```\n\n## Contributors ✨\n\n\u003c!-- ALL-CONTRIBUTORS-BADGE:START - Do not remove or modify this section --\u003e\n[![All Contributors](https://img.shields.io/badge/all_contributors-22-orange.svg?style=flat-square)](#contributors-)\n\u003c!-- ALL-CONTRIBUTORS-BADGE:END --\u003e\n\nThanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)):\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\u003c!-- prettier-ignore-start --\u003e\n\u003c!-- markdownlint-disable --\u003e\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.linkedin.com/in/thomas-gentilhomme/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/4438263?v=4?s=100\" width=\"100px;\" alt=\"Gentilhomme\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGentilhomme\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=fraxken\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=fraxken\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/pulls?q=is%3Apr+reviewed-by%3Afraxken\" title=\"Reviewed Pull Requests\"\u003e👀\u003c/a\u003e \u003ca href=\"#security-fraxken\" title=\"Security\"\u003e🛡️\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/issues?q=author%3Afraxken\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Rossb0b\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/39910164?v=4?s=100\" width=\"100px;\" alt=\"Nicolas Hallaert\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eNicolas Hallaert\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=Rossb0b\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/antoine-coulon\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/43391199?v=4?s=100\" width=\"100px;\" alt=\"Antoine\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAntoine\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=antoine-coulon\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Mathieuka\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/34446722?v=4?s=100\" width=\"100px;\" alt=\"Mathieu\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMathieu\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=Mathieuka\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Kawacrepe\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/40260517?v=4?s=100\" width=\"100px;\" alt=\"Vincent Dhennin\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eVincent Dhennin\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=Kawacrepe\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=Kawacrepe\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://tonygo.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/22824417?v=4?s=100\" width=\"100px;\" alt=\"Tony Gorez\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTony Gorez\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=tony-go\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=tony-go\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=tony-go\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/PierreDemailly\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/39910767?v=4?s=100\" width=\"100px;\" alt=\"PierreD\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePierreD\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=PierreDemailly\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=PierreDemailly\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://www.linkedin.com/in/franck-hallaert/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/110826655?v=4?s=100\" width=\"100px;\" alt=\"Franck Hallaert\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFranck Hallaert\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=Aekk0\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://maji.kiwi\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/33150916?v=4?s=100\" width=\"100px;\" alt=\"Maji\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMaji\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=M4gie\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/targos\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/2352663?v=4?s=100\" width=\"100px;\" alt=\"Michaël Zasso\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichaël Zasso\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=targos\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/issues?q=author%3Atargos\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/fabnguess\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/72697416?v=4?s=100\" width=\"100px;\" alt=\"Kouadio Fabrice Nguessan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eKouadio Fabrice Nguessan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-fabnguess\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=fabnguess\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/jean-michelet\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/110341611?v=4?s=100\" width=\"100px;\" alt=\"Jean\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eJean\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=jean-michelet\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=jean-michelet\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=jean-michelet\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/tchapacan\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/28821702?v=4?s=100\" width=\"100px;\" alt=\"tchapacan\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003etchapacan\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=tchapacan\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=tchapacan\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://miikkak.dev\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/65869801?v=4?s=100\" width=\"100px;\" alt=\"mkarkkainen\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003emkarkkainen\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=mkarkkainen\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/FredGuiou\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/99122562?v=4?s=100\" width=\"100px;\" alt=\"FredGuiou\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eFredGuiou\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=FredGuiou\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=FredGuiou\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/madina0801\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/101329759?v=4?s=100\" width=\"100px;\" alt=\"Madina\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMadina\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=madina0801\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/sairuss7\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/87803528?v=4?s=100\" width=\"100px;\" alt=\"SairussDev\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSairussDev\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=sairuss7\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/fless-lab\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/71844440?v=4?s=100\" width=\"100px;\" alt=\"Abdou-Raouf ATARMLA\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAbdou-Raouf ATARMLA\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=fless-lab\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://clementgombauld.netlify.app/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/91478082?v=4?s=100\" width=\"100px;\" alt=\"Clement Gombauld\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eClement Gombauld\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=clemgbld\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=clemgbld\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/intincrab\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/93028153?v=4?s=100\" width=\"100px;\" alt=\"Ajāy \"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAjāy \u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=intincrab\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://michael.mior.ca\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/82501?v=4?s=100\" width=\"100px;\" alt=\"Michael Mior\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eMichael Mior\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=michaelmior\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/7amed3li\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/190534558?v=4?s=100\" width=\"100px;\" alt=\"Hamed Mohamed\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eHamed Mohamed\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/NodeSecure/js-x-ray/commits?author=7amed3li\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\n## License\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodesecure%2Fjs-x-ray","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnodesecure%2Fjs-x-ray","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnodesecure%2Fjs-x-ray/lists"}