{"id":39496079,"url":"https://github.com/innovate-invent/dns","last_synced_at":"2026-01-18T05:42:28.690Z","repository":{"id":57117120,"uuid":"333651508","full_name":"innovate-invent/dns","owner":"innovate-invent","description":"Dependency free, browser compatible, NodeJS dns library replacement. Implements RFC8484 and RFC1035. Supports most DNS over HTTPS servers.","archived":false,"fork":false,"pushed_at":"2025-06-19T10:50:29.000Z","size":1027,"stargazers_count":5,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-11-23T07:28:04.832Z","etag":null,"topics":["browser","browserify","compatibility","dns","javascript","library","nodejs","typescript"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","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/innovate-invent.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2021-01-28T05:05:48.000Z","updated_at":"2023-02-03T08:08:44.000Z","dependencies_parsed_at":"2025-04-30T08:35:26.647Z","dependency_job_id":"8b17e6fd-9d76-4509-861a-cae2aaf1a79b","html_url":"https://github.com/innovate-invent/dns","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/innovate-invent/dns","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innovate-invent%2Fdns","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innovate-invent%2Fdns/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innovate-invent%2Fdns/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innovate-invent%2Fdns/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/innovate-invent","download_url":"https://codeload.github.com/innovate-invent/dns/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/innovate-invent%2Fdns/sbom","scorecard":{"id":489258,"data":{"date":"2025-08-11","repo":{"name":"github.com/innovate-invent/dns","commit":"9af41bdc4a2cb1968496c67a4b355b91dab386ef"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":1.7,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":0,"reason":"Found 0/22 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Vulnerabilities","score":0,"reason":"17 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-93q8-gq69-wqmw","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-w573-4hg7-7wgq","Warn: Project is vulnerable to: GHSA-4q6p-r6v2-jvc5","Warn: Project is vulnerable to: GHSA-9c47-m6qq-7p4h","Warn: Project is vulnerable to: GHSA-76p3-8jx3-jpfq","Warn: Project is vulnerable to: GHSA-3rfm-jhwj-7488","Warn: Project is vulnerable to: GHSA-hhq3-ff78-jv3g","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-f8q6-p94x-37v3","Warn: Project is vulnerable to: GHSA-xvch-5gv4-984h","Warn: Project is vulnerable to: GHSA-qrpm-p2h7-hrv2","Warn: Project is vulnerable to: GHSA-mwcw-c2x4-8c55","Warn: Project is vulnerable to: GHSA-hj48-42vr-x3v9","Warn: Project is vulnerable to: GHSA-gcx4-mw62-g8wm","Warn: Project is vulnerable to: GHSA-c2qf-rxjj-qqgw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-19T18:37:54.650Z","repository_id":57117120,"created_at":"2025-08-19T18:37:54.650Z","updated_at":"2025-08-19T18:37:54.650Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28531359,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-18T00:39:45.795Z","status":"online","status_checked_at":"2026-01-18T02:00:07.578Z","response_time":98,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["browser","browserify","compatibility","dns","javascript","library","nodejs","typescript"],"created_at":"2026-01-18T05:42:28.627Z","updated_at":"2026-01-18T05:42:28.685Z","avatar_url":"https://github.com/innovate-invent.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @i2labs/dns\nDependency free, browser compatible, NodeJS dns library replacement. Implements RFC8484 and RFC1035.\nSupports most DNS over HTTPS servers.\n\nWhy would you want to make DNS requests from a browser? DNS has numerous\nfunctions other than mapping domain names to IP addresses. SRV and TXT records offer the ability to do service discovery\nand distribute information such as public keys.\n\n**This library uses AbortController, which is not compatible with Internet Explorer.** A polyfill may be available,\nbut is not included.\n\nSee the [NodeJS dns documentation](https://nodejs.org/api/dns.html) for information on how to use this library.\nThe [caveats](https://nodejs.org/api/dns.html#dns_implementation_considerations) mentioned in the documentation\nregarding `lookup`, `lookupService` and `reverse` do not apply. These functions call system operations not available to\nthe browser. In this implementation `lookup` simply aliases `resolve`, `lookupService` and `reverse` will throw errors\nwhen called. `hints` and `verbatim` arguments of `lookup` are ignored. The errors are thrown in a way that any proper\nerror handling that would normally be present while using the NodeJS dns library should also handle these errors.\n`setLocalAddress` is a no-op function. `getServers` and `setServers` return/accept a list of strings containing the\nhostnames of the 'DNS over HTTPS' providers that the resolver makes requests against.\n\n`Resolver.resolve()` is extended to support most record types. If you want to bypass the modifications made to the response \nvalues by the NodeJS dns specification, you can pass `{raw: true}` in the `options` object argument to get the full response object.\nA best attempt to parse record data as much as possible was made. Due to an inconsistent mix of available documentation \nfor the record type data layouts, not all are complete. See [rfc_rdata.ts](src/rfc_rdata.ts) for the RDATA layout descriptions.\nAny type that is marked as 'opaque' may change in the future with contributions to extend the parsing of that record type.\n\nThis library is able to function by using any 'DNS over HTTPS' services. The default resolver host is CloudFlare using \ncloudflare-dns.com. Support for any of the providers listed under 'DNS over HTTPS' at https://en.wikipedia.org/wiki/Public_recursive_name_server \ncan be added. Currently, only providers (most of them) that implement [RFC8484](https://tools.ietf.org/html/rfc8484) are supported. Contributions are welcome.\n\n`dns.Resolver` is implemented as a wrapper around the Promise based resolvers to support the callback interface. Pass an\ninstantiated Promise resolver to the constructor to wrap different provider resolvers:\n\n```typescript\nimport dns from 'dns'\nimport RFCResolver from 'dns/rfc8484'\n\nconst resolver = new dns.Resolver(new RFCResolver({timeout: 30}));\n```\n\nAll methods exported by the library use the RFC8484 resolver. Instantiate a resolver imported for the specific\nprovider submodule to use that provider. `class Resolver` implementations export `lookup` and `lookupService` in\naddition to the methods defined in the [NodeJS dns documentation](https://nodejs.org/api/dns.html).\n\n# Use\n\n```js\nimport * as dns from 'dns'\ndns.promises.resolve('example.i2labs.ca').then(result=\u003econsole.log(result))\n```\n\n### Webpack\n\n```js\n// webpack.config.js\nmodule.exports = {\n    alias: {\n        'dns': '@i2labs/dns'\n    }\n}\n```\n\n### Browserify\n\n```shell script\nbrowserify -r '@i2labs/dns:dns' ...\n```\n\n## Alternatives\n\n| Alternative | DoH Servers | NodeJS dns | RFC1035 | Dependencies |\n| ----------- | ----------- | ---------- | ------- | ------------ |\n| [doh-js-client](https://www.npmjs.com/package/doh-js-client) | google cloudflare cleanbrowsing | ✗ | ✗ | ✓ |\n| [http-dns](https://www.npmjs.com/package/http-dns) | google | dns.resolveSrv() only | ✗ | ✓ |\n| [fetch-dns](https://www.npmjs.com/package/fetch-dns) | ? | ✓ | ✗ | ✓ |\n| [dohc](https://www.npmjs.com/package/dohc) | ? | ✗ | ✗ | ✓ |\n| [google-dns](https://www.npmjs.com/package/google-dns) | google | ✗ | ✗ |  ✓ |\n| [dns-over-https](https://www.npmjs.com/package/dns-over-https) / [alternate](https://www.npmjs.com/package/@leeroy/dns-over-https) | google | ✗ | ✗ | ✓ |\n| [dns-over-http](https://www.npmjs.com/package/dns-over-http) | ? | ✗ | ✗ | ✓ |\n| [chrome-dns](https://www.npmjs.com/package/chrome-dns) | google | Chrome plugin only | ✗ |  ✓ |\n| [jsdns](https://www.npmjs.com/package/jsdns) | ? | ✗ | ✗ | ✓ |\n\n[dns-packet-typescript](https://www.npmjs.com/package/dns-packet-typescript) - Alternate RFC1035 deserializer\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnovate-invent%2Fdns","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Finnovate-invent%2Fdns","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Finnovate-invent%2Fdns/lists"}