{"_id":"webfinger","_rev":"31-20e5b2763d987f40d05fa02693976bdd","name":"webfinger","dist-tags":{"latest":"0.9.2"},"versions":{"0.1.0":{"name":"webfinger","version":"0.1.0","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@status.net"},"_id":"webfinger@0.1.0","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/evanp/webfinger","dist":{"shasum":"bbe98330857aab175f55e8d019a1e0f6d5046289","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.1.0.tgz","integrity":"sha512-P5Lx2g9VxWtkBf5Tem1eifPw1xAWcnsTudCrGQeNy2d7YoaiNDbUra9m+s92TdMw667fFpFf6pKqZGXaxPBvOA==","signatures":[{"sig":"MEYCIQDek3DFvZqY0BfIHlftr53X9T9tgNYFMPvEr71z7ygUqwIhAIJWMp6O7fonvB1GUiHqPi1z9DcqkAHhPatxDpn1Md10","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","engines":{"node":"0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@status.net"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/evanp/activitypump.git","type":"git"},"_npmVersion":"1.1.59","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.6.x","express":"3.0.x"}},"0.1.1":{"name":"webfinger","version":"0.1.1","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@status.net"},"_id":"webfinger@0.1.1","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/evanp/webfinger","dist":{"shasum":"473c5f88006517839c3db66fe0f9a649a64df42b","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.1.1.tgz","integrity":"sha512-l7NXrGHHcWNWzRFXQBZnEP0frIEwt/UqyI1R8QOngVIXX3ZmcpfX1X9iAKNiYpsOpKO5tpGySXOV/YzknvKJyQ==","signatures":[{"sig":"MEYCIQDx1xkkkz5Ex+b7Z5F8qY7fT0BmUKMCWGr4/+UGxAne1AIhAKGleMLBQLKSutvHeRo89Wf9jckztf7Ylr10hYPTDcxZ","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","engines":{"node":"0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@status.net"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/evanp/webfinger.git","type":"git"},"_npmVersion":"1.1.62","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.6.x","express":"3.0.x"}},"0.2.0":{"name":"webfinger","version":"0.2.0","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@status.net"},"_id":"webfinger@0.2.0","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/evanp/webfinger","dist":{"shasum":"610962bab7e17603d3be6a82ab682b5beef163bf","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.2.0.tgz","integrity":"sha512-vqgTR8c97VkzL9EGtkf0JmYRIiwDmW1cgJfC+jNvuoB7FiygErRTxTrAeQZmQXKoLsssCBssRg+JkJ+zvGtTlQ==","signatures":[{"sig":"MEUCIFdTzvQqW9a/NzDjwDK1tFHN0XYvJNWoXzDBq6AKqQVFAiEAtCrj6WdegGwOYGAJz6js+k4suz7g9p+StVcitMVQFQw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","engines":{"node":"0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@status.net"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/evanp/webfinger.git","type":"git"},"_npmVersion":"1.1.69","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.6.x","express":"3.0.x"}},"0.3.0":{"name":"webfinger","version":"0.3.0","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@status.net"},"_id":"webfinger@0.3.0","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/evanp/webfinger","dist":{"shasum":"70d067504bfe902086f15827a7c1780bc79ad43c","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.3.0.tgz","integrity":"sha512-TXWArXeVGkVPsHk0jWjPGIMKJcoCUt5E3vRSQu7O+LMyg3ZqjwetUGqAP8Ff1PG1FO4TimixQtbK8vcyT33KDw==","signatures":[{"sig":"MEUCIQCAfNbhEaF9uH5svSBgN+iXLX5vvKxOg5mCIVrlGoso2wIgXBR8BTDdmj06RX19GqKQnxU3eGFRuDgwMChkA1Uh/SM=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","engines":{"node":"0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@status.net"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/evanp/webfinger.git","type":"git"},"_npmVersion":"1.1.63","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.6.x","express":"3.0.x"}},"0.3.1":{"name":"webfinger","version":"0.3.1","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@e14n.com"},"_id":"webfinger@0.3.1","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/e14n/webfinger","dist":{"shasum":"9958b0f5e442a4b6b62979dc0b58c0e498790cb6","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.3.1.tgz","integrity":"sha512-Ra6cgaBMRyM0qTT6/uqHQDCKnCmtlOAYinNnQe08e0jTL25zCgssvoFfrv7SFoxsQ6pl70Z6GYRjGktQuSei8Q==","signatures":[{"sig":"MEUCIFUeUdjLn8OTHuZVDxwuAL8ojFXQV5rdXsnQOQXEelNWAiEA7cGJSAKn9fWrTjege9UnUc9pysTHmLWzh0Sv5N4cE9M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","_from":".","engines":{"node":">=0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@e14n.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/e14n/webfinger.git","type":"git"},"_npmVersion":"1.2.15","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.7.x","express":"3.0.x"}},"0.3.2":{"name":"webfinger","version":"0.3.2","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@status.net"},"_id":"webfinger@0.3.2","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/evanp/webfinger","dist":{"shasum":"e602a0fa2034badc13ab44cbaffdfe1ae9b89b2f","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.3.2.tgz","integrity":"sha512-5zLz+9p31O2JYSeBwUdCR0OdDaGTz0mgboog/FP/brWFP4azBUz0K39fGBDA54nKcd3BHG0pl5GbN2TPy3kL5w==","signatures":[{"sig":"MEUCIBoSJeeZuwVt01EWD5dlmPu0cb/9ITnsDwmfREzV+EKiAiEArJIcpaiOjkdQGVkKUOOoZR+umvzCV5GVS59fm5ALep4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","_from":".","engines":{"node":">= 0.8.0"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@e14n.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/evanp/webfinger.git","type":"git"},"_npmVersion":"1.2.18","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.7.x","express":"3.0.x"}},"0.4.0":{"name":"webfinger","version":"0.4.0","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@e14n.com"},"_id":"webfinger@0.4.0","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/e14n/webfinger","dist":{"shasum":"a3cf20a7f01323646eee6d6665b910b40e0d72cd","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.4.0.tgz","integrity":"sha512-m8PmbJTfJikXSRQZNNWPr2F76Nr91g9SD+mzAZLttKHkYHG9eZfOh9gZDWyM/rTUS1KysiAlDmcr+CcUVnXdKg==","signatures":[{"sig":"MEYCIQCrgEghXyxV27GPpi7B8kEO2hjRXU8yi9ABC/8lTCb8PgIhAMQ7TMOnOSYn63/bEhMllY3sME/ojsbO4Z+4DZBkl5hf","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","_from":".","engines":{"node":">=0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@e14n.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/e14n/webfinger.git","type":"git"},"_npmVersion":"1.2.17","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.7.x","express":"3.0.x"}},"0.4.1":{"name":"webfinger","version":"0.4.1","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@e14n.com"},"_id":"webfinger@0.4.1","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/e14n/webfinger","dist":{"shasum":"5300d6e9f4da1e2158a21619dcbcbb4246e9a217","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.4.1.tgz","integrity":"sha512-Wcgz8jnxojWPUM6AtuT6nbQMcDCLoq788D4Urve7Lvn+wJhJs0H3al151y/cI2fo7xJFe3/jtXZB0QvHeB4/Sw==","signatures":[{"sig":"MEYCIQDJ8f4ZWkQfA7Jj+9vcBCenQ+MeAtaGbIi08B0N6yEomQIhAPIDwkQFhyruVWTg9hJuDMJ9f+OhBoaO3roU9gMFGnK+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","_from":".","engines":{"node":">=0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@e14n.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/e14n/webfinger.git","type":"git"},"_npmVersion":"1.2.18","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.7.x","express":"3.0.x"}},"0.4.2":{"name":"webfinger","version":"0.4.2","keywords":["webfinger","hostmeta","discovery","xrd","jrd","lrdd"],"author":{"name":"Evan Prodromou","email":"evan@e14n.com"},"_id":"webfinger@0.4.2","maintainers":[{"name":"evanp","email":"evan@status.net"}],"homepage":"http://github.com/e14n/webfinger","bugs":{"url":"https://github.com/e14n/webfinger/issues"},"dist":{"shasum":"3477a6d97799461896039fcffc650b73468ee76d","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.4.2.tgz","integrity":"sha512-PvvQ/k74HkC3q5G7bGu4VYeKDt3ePZMzT5qFPtEnOL8eyIU1/06OtDn9X5vlkQ23BlegA3eN89rDLiYUife3xQ==","signatures":[{"sig":"MEUCIBVFQeT13QUJzWb7+DATOMtpVR92NUKI5HZIuIBDa6TEAiEA1lAH3sfwFy7llXeKwnS51FVnJeGymWIwakcwqCj3zbE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}]},"main":"./lib/webfinger.js","_from":".","engines":{"node":">=0.8.x"},"scripts":{"test":"vows -i test/*-test.js"},"_npmUser":{"name":"evanp","email":"evan@e14n.com"},"licenses":[{"url":"http://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/e14n/webfinger.git","type":"git"},"_npmVersion":"1.3.2","description":"Client library for Host Meta (RFC 6415) and Webfinger","directories":{"lib":"./lib/"},"dependencies":{"step":"0.0.x","xml2js":"0.1.x"},"devDependencies":{"vows":"0.7.x","express":"3.0.x"}},"0.5.0":{"name":"webfinger","version":"0.5.0","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"_id":"webfinger@0.5.0","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"af019e306522f7cd1700e0e500b4b451be6e59c4","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.5.0.tgz","fileCount":17,"integrity":"sha512-SmmJ5rGEYc7J91pxpkS2ravMB8gkVfHZvItPm6cGfGa9HBS4sotddF5MdTAKqCggTPBk/OiHiJ465S1pShXO/Q==","signatures":[{"sig":"MEUCIQDXxjs47d+7xmD38riAg3crW62ULKtJHH80RUIqNohWkAIgAO/PErwMOL0yfpoq37934MbOg2/b9SANK27CzYRN+IM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDktzrQpgCM9r8ruISrmnMHL7jDBi0YUiSoxW/+xbQ56QIgZeAGnfAyaLl8rrEdm5FulTG7WyfVv8pdorEAqf/4L0M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.5.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":56096},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"99a8384515d21c76fd6fc03ad088f074bf0d13d0","scripts":{"lint":"standard","test":"node --test test/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:074ba90d-f60c-4490-a64e-c909735c3ab3"}},"licenses":[{"url":"https://www.apache.org/licenses/LICENSE-2.0.html","type":"Apache 2.0"}],"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.19.1","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.10.0","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.5.0_1790358581933_0.6915133631885417","host":"s3://npm-registry-packages-npm-production"}},"0.5.1":{"name":"webfinger","version":"0.5.1","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.5.1","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"82813e79a368c46e87c36545d7fd09d5f2c4a4ad","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.5.1.tgz","fileCount":4,"integrity":"sha512-vqko34rgK9lzGa6bK4WtuqCH+BEO7y/+1I7xuAfWBQzqeyzIC5OUESkMI9B1ZpRH/Qx62oAN8vyIbZkO8w9K7A==","signatures":[{"sig":"MEUCIQDnecqDORWghSs3DWwLDY3gEwyyP2+b8r91Ziq78ccoUAIgYTE+wcXbR0CPYCzKalgfuakVCtUMFlloedjJJLegYSM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDtmypbpJRqwLtyRszcHjKCcTLfX9VmXlwk34qkR0hprwIgcO9HNG9qcSbBnd61RdDQt+ZIV58KOb82DHeR8/VEEGo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.5.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":19761},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"e6ebc5fa8e8b1003424b2f2e14d3f414d555d9e6","scripts":{"lint":"standard","test":"node --test test/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"oidc:074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.19.1","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.10.0","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.5.1_1790359241719_0.21740148118166602","host":"s3://npm-registry-packages-npm-production"}},"0.6.0":{"name":"webfinger","version":"0.6.0","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.6.0","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"b2cf955951bb7f0e9648c51604202a3e7269bc6a","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.6.0.tgz","fileCount":4,"integrity":"sha512-xnvzRj4a1azZvipowP2egLNvAifEoMNf3JSgTAWo3XYY0eQ6gp+6R8fRNMhSnNJnfbcL34JmbmuHr7A6ubyY+w==","signatures":[{"sig":"MEUCIQCjw2hdql+770iT0ZE2ISwBNnUcU5WMtqeCCtUs0w7CvwIgcgwSNewkmZd/uBug/0kbVaKdLSWc19spvm6/vyBn38Y=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCFczV5lSA3svgWZAKVATZsWdZAXcjOlKmaqMu9MonFRwIhALXHRWJoIPvjNhmN0aLsfZXTB5d3yqtLWF35iSqIx3/A","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.6.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":23276},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"4e99aac8f91d36f45933e0d93743658800e4b8cd","scripts":{"lint":"standard","test":"node --test test/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.19.1","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.10.0","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.6.0_1790690789328_0.765050627166026","host":"s3://npm-registry-packages-npm-production"}},"0.6.1":{"name":"webfinger","version":"0.6.1","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.6.1","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"f9230656854c3b085b600003b09458fa08b0e155","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.6.1.tgz","fileCount":4,"integrity":"sha512-cCFgLFQAH44BURX5eCuRSMS7GMU8M6NhOCTs9irJgzK+ACFcxATAXZa78dDX7SCJDhnEEMHImau+lvHhjJrNdg==","signatures":[{"sig":"MEUCIAPRDeqotZG4N9Lu6k5ljnAfsojUSgy1CQLN3EXb5ZFAAiEA9eRqjKveQOA3lOUaH3E/SXmvySmEUDxFsVXI4VAoPhM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCR0kCFB1vdXNixudJ3K8baEryYCCbY8dBqG2SUYB8NnAIhAJerVL/BWpJl33W+YTH/GNlVbw1EUmyXTqdCY+oypyEO","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.6.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":24672},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"db6665ebbe6e9f77e825b6563d1e16654feb5ef9","scripts":{"lint":"standard","test":"node --test test/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.19.1","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.10.0","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.6.1_1790872824868_0.788581834870127","host":"s3://npm-registry-packages-npm-production"}},"0.7.0":{"name":"webfinger","version":"0.7.0","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.7.0","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"1cc738d4a81784707746f92fcd308ede5907e2ba","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.7.0.tgz","fileCount":4,"integrity":"sha512-DQ+uWlSJpH44N2NuZlHZJvdKT9o/OEj6sjIqVjgSBf7WtBtAZfiSxRivTi8DlVncgPHWTwSplxrl6EtrxmBOUQ==","signatures":[{"sig":"MEQCIDWDQeuolcZ1g4XZ9yC92OXOoIiHrZeunUG2wvGSQcEqAiBc8UPnJQgAFd0RChE78/uucWOBzD8M8KXIH4bGEvkeAg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIH3cmnPgxE1YyQ2f6G9LQfokV9SiiAJXK+nStYSyrA5tAiBz7H+7OrA8XHsdMXDmPJEGmBfBW1/zE5E7jdShQjuwXw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.7.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":26856},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"e43e92eb2f8fe5b7d5dbb1931d350ddfa4958c04","scripts":{"lint":"standard","test":"node --test test/*-test.js","test:browser":"node --test test/browser/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.19.1","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.10.0","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2","playwright":"^1.63.0"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.7.0_1791163705927_0.6479049393205434","host":"s3://npm-registry-packages-npm-production"}},"0.8.0":{"name":"webfinger","version":"0.8.0","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.8.0","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"6fc5b34bafa25359159f72ea5d228a42cfbde92f","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.8.0.tgz","fileCount":4,"integrity":"sha512-wNRRAAMRar5r0+QnZhheegGW5S2UYApX3NP8Syqw9nSUAl71xozy8YxuicYGlUwpV+HplotmTrO/FwjBua8JrQ==","signatures":[{"sig":"MEUCIQDelDysTWwKHlO/+eTufTr/PglDWIOzLmYFbwRdgFnpgwIgGYK65uTQX5nez3D+9au1Iz3q5SWLOCXNPRoHGt0VHvQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFqm3n+1z4KxY3L8WEZ6bhhFcmZKnhQ8lc3olkX7gMP4AiEAtKxbV7R1tjvoE7JQ/0TKckN0rqswyavBRIPSnPKJAfc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.8.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":31748},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"03fdb09588389f084a252f56bda6c286ff48d483","scripts":{"lint":"standard","test":"node --test test/*-test.js","test:browser":"node --test test/browser/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.20.0","description":"Modern, zero-dependency WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.11.1","_hasShrinkwrap":false,"devDependencies":{"nock":"^14.0.17","standard":"^17.1.2","playwright":"^1.63.0"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.8.0_1791487667300_0.7028080225924473","host":"s3://npm-registry-packages-npm-production"}},"0.9.1":{"name":"webfinger","version":"0.9.1","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","_id":"webfinger@0.9.1","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"homepage":"https://github.com/social-web-foundation/webfinger","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"2a75570518c87153686fd8816dce9fa47fa2f335","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.9.1.tgz","fileCount":4,"integrity":"sha512-Qsvt9BYdc3iTbXDQExpPVoS0vcfb13UweZKm0gas9rR+L3NpLLYBZnRQ09wNPhb996scDiVypPkEVH6pq2WNFg==","signatures":[{"sig":"MEQCICC9AnKLCUWs5Qz8hYd/y/9nNsRoqlAVKZdqYSW91nhmAiBKgbfUU0YULX0lR7kaUGOwKz7Kx/gSt54j29yibRG8fQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQC41xkoLlLxVxcRERXygixg/Nb0fdIgSQOioLlUOlgVBQIhAMURG6NEQHl1KhuNJRGniBfxSaUnVW/XETjvJP1BFmHq","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.9.1","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":32738},"main":"./lib/webfinger.js","type":"module","engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"c3937e565290e5ebd48bd945e9596f9a7131f921","scripts":{"lint":"standard","test":"node --test test/*-test.js","test:browser":"node --test test/browser/*-test.js"},"_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.20.0","description":"Modern WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"_nodeVersion":"26.12.0","dependencies":{"punycode":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^15.0.1","esbuild":"^0.28.2","standard":"^17.1.2","playwright":"^1.64.0"},"_npmOperationalInternal":{"tmp":"tmp/webfinger_0.9.1_1792162874440_0.06680392255518175","host":"s3://npm-registry-packages-npm-production"}},"0.9.2":{"_id":"webfinger@0.9.2","bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"dist":{"shasum":"1aefd738ce6544db6bb8650d884f686e388ef09a","tarball":"https://registry.npmjs.org/webfinger/-/webfinger-0.9.2.tgz","fileCount":4,"integrity":"sha512-+MCa5YqFK1EDeK8BueOAmBz2lxfGMLzKkoxtistjrfc82+mNopLVbwAtIi9l2KYyf/DAntCL8f0hBr7YWo48sg==","signatures":[{"sig":"MEYCIQDGMSoepI/Vv4xUDXJR6UYHVvsFcT6wlG0OJPvrKJIYcwIhAPcOP/0TRk089Z7JOmaRZKtr4sk1SqkwxwVI/fLw/VQt","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQDjLByOs87tci3NR0pgvJcKFTd7L2Shk3PY4NNcId/J7gIgDLejTziLEojy0hGc/I94lY0zCWtlDc7LfFyrShHP/OQ="}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/webfinger@0.9.2","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":34268},"main":"./lib/webfinger.js","name":"webfinger","type":"module","author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"engines":{"node":"22.x || 24.x || 26.x"},"gitHead":"ac4795ceb5418b463171238015b4e9953617f50a","license":"Apache-2.0","scripts":{"lint":"standard","test":"node --test test/*-test.js","test:browser":"node --test test/browser/*-test.js"},"version":"0.9.2","_npmUser":{"name":"GitHub Actions","email":"npm-oidc-no-reply@github.com","trustedPublisher":{"id":"github","oidcConfigId":"074ba90d-f60c-4490-a64e-c909735c3ab3"}},"homepage":"https://github.com/social-web-foundation/webfinger","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"_npmVersion":"11.20.0","description":"Modern WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","directories":{"lib":"./lib/"},"maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"_nodeVersion":"26.12.1","dependencies":{"punycode":"^2.3.1"},"_hasShrinkwrap":false,"devDependencies":{"nock":"^15.0.1","esbuild":"^0.28.2","standard":"^17.1.2","playwright":"^1.64.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/webfinger_0.9.2_1792605273094_0.9234462977073903"}}},"time":{"created":"2012-08-29T19:08:31.252Z","modified":"2026-10-21T17:54:33.524Z","0.1.0":"2012-08-29T19:08:31.851Z","0.1.1":"2012-09-28T20:20:49.914Z","0.2.0":"2013-01-14T03:34:55.624Z","0.3.0":"2013-02-05T20:46:27.490Z","0.3.1":"2013-04-03T20:53:31.882Z","0.3.2":"2013-04-29T15:12:49.906Z","0.4.0":"2013-04-29T16:19:05.820Z","0.4.1":"2013-05-01T02:30:50.870Z","0.4.2":"2013-07-17T14:47:35.943Z","0.5.0":"2026-09-25T17:49:42.021Z","0.5.1":"2026-09-25T18:00:41.805Z","0.6.0":"2026-09-29T14:06:29.429Z","0.6.1":"2026-10-01T16:40:24.952Z","0.7.0":"2026-10-05T01:28:26.001Z","0.8.0":"2026-10-08T19:27:47.389Z","0.9.1":"2026-10-16T15:01:14.537Z","0.9.2":"2026-10-21T17:54:33.180Z"},"bugs":{"url":"https://github.com/social-web-foundation/webfinger/issues"},"author":{"name":"Evan Prodromou","email":"evanp@socialweb.foundation"},"license":"Apache-2.0","homepage":"https://github.com/social-web-foundation/webfinger","keywords":["webfinger","rfc7033","jrd","discovery","activitypub","fediverse","acct"],"repository":{"url":"git://github.com/social-web-foundation/webfinger.git","type":"git"},"description":"Modern WebFinger client (RFC 7033) for Node.js — promise-based JRD discovery for acct: URIs and URLs, built for ActivityPub","maintainers":[{"name":"evanp","email":"evan@prodromou.name"}],"readme":"# Webfinger\n\nWebfinger client library for Node.js and browsers.\n\nIt supports RFC 7033.\n\n## Table of Contents\n\n- [Security](#security)\n- [Install](#install)\n- [Dependencies](#dependencies)\n- [Usage](#usage)\n  - [Browser usage](#browser-usage)\n- [API](#api)\n  - [webfinger(address, options?)](#webfingeraddress-options)\n  - [JRD](#jrd)\n  - [toAcctUri(address)](#toaccturiaddress)\n  - [fromAcctUri(uri)](#fromaccturiuri)\n- [Contributing](#contributing)\n  - [Testing](#testing)\n- [License](#license)\n\n## Security\n\nThis library does not provide protection against server-side request forgery\n(SSRF) out of the box. Its default transport is global `fetch`, which can\nconnect to private or internal network addresses, including through redirects.\n\nWhen discovering user-supplied addresses, use [options.fetch](#optionsfetch)\nto supply a transport that enforces your network policy, including checks on\nresolved IP addresses and redirect destinations. The example below shows how\nto supply an SSRF-protecting fetch implementation.\n\n## Install\n\nFor Node.js usage, requires Node.js 22.x, 24.x, or 26.x.\nFor browser requirements and loading instructions, see [Browser usage](#browser-usage).\n\n```sh\nnpm install webfinger\n```\n\n## Dependencies\n\nUnicode hostname decoding uses the browser-compatible `punycode` package's\nES module entry point. The library is therefore not dependency-free. Account\nURI conversion is local and does not require a network lookup.\n\n## Usage\n\nImport the named `webfinger` export and await discovery:\n\n```js\nimport { webfinger } from 'webfinger'\n\nconst jrd = await webfinger('user@example.com')\nconsole.log(jrd.subject)\nconsole.log(jrd.links)\n```\n\nSee [API](#api) for relation filtering, custom fetch functions, and JRD link\nselection. For user-supplied addresses, review [Security](#security).\n\n### Browser usage\n\nThe library uses native ES modules and the same promise-based `webfinger()` API\nin browsers. With a bundler, use the package import shown above. To load it\nthrough [jsDelivr](https://www.jsdelivr.com/), use its ESM transformation\nendpoint with a pinned version so dependency imports are resolved:\n\n```html\n<script type=\"module\">\n  import { webfinger } from 'https://cdn.jsdelivr.net/npm/webfinger@0.8.0/+esm'\n\n  const jrd = await webfinger('user@example.com')\n  console.log(jrd.subject)\n  console.log(jrd.links)\n</script>\n```\n\nReplace `user@example.com` with an account whose WebFinger endpoint allows\nrequests from your site's origin. When serving the package's source files\ndirectly instead, provide an import map for bare package imports, including\n`punycode/punycode.es6.js`, or bundle the modules first.\n\nBrowsers must support ES modules, private class fields, `fetch`, `URL`, and\n`URLSearchParams`. Browser tests currently run in Chromium; Firefox and Safari\nhave not been verified.\n\nFor cross-origin discovery, the remote WebFinger endpoint must return CORS\nheaders allowing your site's origin, such as `Access-Control-Allow-Origin`.\nWithout that permission, browser `fetch` cannot read the response and discovery\nrejects. Supplying `options.fetch` does not bypass browser CORS restrictions.\n\n## API\n\nThe `webfinger()` function returns a promise. Await the result; errors reject the promise.\nThis replaces the previous callback API.\n\n### toAcctUri(address)\n\nThe named `toAcctUri` export synchronously converts an unescaped account address\nto an `acct:` URI string without making a network request. It works in Node.js\nand browsers.\n\nThe input must contain a nonempty username and hostname separated by `@`.\nThe last `@` is the separator; earlier `@` characters belong to the username.\nThe username is UTF-8 percent-encoded using `encodeURIComponent()`, and the\nhostname is converted to IDNA ASCII using the `URL` API.\n\n| Input | Returned URI |\n| --- | --- |\n| `user1@foo.example` | `acct:user1@foo.example` |\n| `josé@bücher.example` | `acct:jos%C3%A9@xn--bcher-kva.example` |\n| `some@name@foo.example` | `acct:some%40name@foo.example` |\n| `acct:user1@foo.example` | `acct:acct%3Auser1@foo.example` |\n| `https://foo.example/user@bar.example` | `acct:https%3A%2F%2Ffoo.example%2Fuser@bar.example` |\n\nAll username text is treated literally, including URI prefixes and existing\npercent escapes. For example, `user%40name@foo.example` becomes\n`acct:user%2540name@foo.example`. Supply unescaped input; this function does\nnot preserve or decode an existing `acct:` URI.\n\nEmpty strings, `null`, and other non-string inputs throw a `TypeError`.\nMissing separators, usernames, or hostnames throw an `Error`. Invalid hostnames\nthat cannot be parsed by the `URL` constructor throw a `TypeError`.\n\n### fromAcctUri(uri)\n\nThe named `fromAcctUri` export synchronously converts an `acct:` URI to a\nreadable account address string without making a network request. It works\nin Node.js and browsers.\n\nThe input must begin with the exact lowercase prefix `acct:` and contain a\nnonempty username and hostname separated by `@`. The last `@` is the\nseparator; earlier `@` characters belong to the username. The username is\npercent-decoded using `decodeURIComponent()`, and Punycode hostname labels\nare converted to Unicode.\n\n| Input URI | Returned address |\n| --- | --- |\n| `acct:user1@foo.example` | `user1@foo.example` |\n| `acct:jos%C3%A9@xn--bcher-kva.example` | `josé@bücher.example` |\n| `acct:some%40name@foo.example` | `some@name@foo.example` |\n| `acct:user%2540name@foo.example` | `user%40name@foo.example` |\n\nPercent escapes in the username are decoded once. A literal `+` remains `+`.\nThe hostname is not percent-decoded or parsed using the `URL` API; this\nfunction is a conversion helper rather than a complete account URI validator.\nUse [toAcctUri()](#toaccturiaddress) to encode an unescaped address in the\nother direction.\n\nEmpty strings, `null`, and other non-string inputs throw a `TypeError`.\nA missing or differently cased `acct:` prefix, or a missing separator,\nusername, or hostname, throws an `Error`. Malformed percent escapes or\ninvalid UTF-8 percent sequences in the username throw a `URIError`.\n\n### webfinger(address, options?)\n\nResolves to a `JRD` instance containing discovery data for `address`.\n\nThe `address` argument accepts an `acct:` URI, a bare account identifier such\nas `user1@foo.example`, or a URL with a hostname, such as an `http:` or `https:`\nURL.\n\nBy default, bare addresses and URI inputs are encoded before discovery.\nBoth `josé@bücher.example` and `acct:josé@bücher.example` are looked up as\n`acct:jos%C3%A9@xn--bcher-kva.example`. Unicode URLs are serialized with\npercent-encoded paths and IDNA ASCII domains. To preserve an already encoded\nURI, pass `options.encode: false`; bare addresses are rejected in that mode.\nSee [options.encode](#optionsencode) for details.\n\nThe resource identifier is separately encoded for transport in the query string.\nFor example, a `%` in an encoded `acct:` local part is sent as `%25`, so decoding\nthe query yields the original encoded identifier. Empty strings, `null`, and\nother non-string inputs reject the promise with a `TypeError`.\n\nDiscovery requests `https://<hostname>/.well-known/webfinger` with the resource\nin the query string. The response must have status 200 and contain JSON.\nXRD conversion and host-meta/LRDD fallback are not supported.\n\nThe optional second argument is an object with `encode`, `rel`, and `fetch`\nproperties. It defaults to `{}`.\nThe previous positional `rel` argument and three-argument signature are no\nlonger supported. Move the relation into `options.rel` and pass any custom\nfetch function in the same object.\n\n#### options.encode\n\nControls encoding of the resource identifier. Defaults to `true` when the\nproperty is absent.\n\nWith `encode: true`:\n\n- Bare addresses with no URI scheme are converted using `toAcctUri()`.\n- For `acct:` inputs, the prefix is retained, the local part is percent-encoded,\n  and the domain is converted to IDNA ASCII. Local-part text is treated\n  literally: existing `%` escapes are encoded again.\n- Other URI inputs are parsed and serialized using the `URL` API. For HTTP and\n  HTTPS URLs, Unicode domains become IDNA ASCII and Unicode paths become UTF-8\n  percent escapes. Existing path escapes are preserved. Serialization also\n  applies normal URL normalization, such as lowercasing the hostname.\n\n| Input with encoding enabled | Resource identifier |\n| --- | --- |\n| `josé@bücher.example` | `acct:jos%C3%A9@xn--bcher-kva.example` |\n| `acct:josé@bücher.example` | `acct:jos%C3%A9@xn--bcher-kva.example` |\n| `acct:jos%C3%A9@foo.example` | `acct:jos%25C3%25A9@foo.example` |\n| `http://bücher.example/profile/josé` | `http://xn--bcher-kva.example/profile/jos%C3%A9` |\n\nWith `encode: false`, the input must be a URI. Its resource identifier is\npreserved exactly, including percent escapes; bare addresses reject the promise.\nUse this option for already encoded `acct:` URIs, or whenever you need to retain\nthe original URI spelling.\n\nIn both modes, the identifier is encoded separately for query transport, and\ndiscovery uses HTTPS regardless of the resource's scheme. The native `fetch`\ntransport handles IDNA conversion of the request hostname independently of this\noption.\n\nIf a bare username begins with scheme-like text such as `acct:` or `https:`,\nconvert the complete address with `toAcctUri()` first, then pass the resulting\nURI to `webfinger()` with `encode: false` to avoid encoding its local part again.\n\n#### options.rel\n\nSupply a relation string or an array of relation strings to filter discovery\nresults. An array sends repeated `rel` query parameters. Omitting `rel`, or\npassing `undefined`, `null`, an empty string, or an empty array, sends no\nrelation filter.\n\n```js\nconst jrd = await webfinger('user1@foo.example', { rel: ['self', 'profile'] })\n```\n\nServers may return additional links. Use the returned JRD's `link()` method\nor filter its `links` array to select the links you need.\n\n#### options.fetch\n\nSupply a custom fetch function for the discovery request. When the `fetch`\nproperty is absent, the module uses global `fetch`.\n\nThe function receives the discovery URL and a request-options object containing\nthe `Accept` header. It should return a promise for a fetch-compatible response\nwith a numeric `status` and an asynchronous `json()` method. The response must\nhave status 200; its JSON is parsed into the returned `JRD`.\n\n```js\nconst jrd = await webfinger('user1@foo.example', { fetch: customFetch })\n```\n\nTo also filter by relation, include `rel` in the same options object.\nSupply a callable function. Explicit values such as `undefined` or `null` do\nnot select the default and cause the lookup to reject. If you pass an object\nmethod that depends on `this`, bind it to its instance first. Errors from the\ncustom fetch function reject the lookup promise.\n\nFor example, after installing the optional\n[`guarded-fetch`](https://github.com/vercel-labs/guarded-fetch) package in your\napplication, you can supply its fetch-compatible function:\n\n```js\nimport { guardedFetch } from 'guarded-fetch'\nimport { webfinger } from 'webfinger'\n\nconst jrd = await webfinger('user@example.com', {\n  fetch: guardedFetch\n})\nconsole.log(jrd.subject)\n```\n\n`guarded-fetch` checks destination IP addresses and redirects to help prevent\nSSRF. This is an integration example; `guarded-fetch` is not a dependency of\nthis library. Its bare `guardedFetch` function does not limit response-body\nsize; consult its documentation when choosing resource limits for your\napplication.\n\nThe former `httpsOnly` and `webfingerOnly` options have no effect.\n\n### JRD\n\n`JRD` represents a JSON Resource Descriptor returned by `webfinger()`. Obtain\ninstances by awaiting `webfinger()`; the class is internal and is not exported\nfor direct construction.\n\nThe class provides synchronous access to the document and its links. Reading\nits properties or selecting a link does not make a network request.\n\nIn general, malformed or mistyped response properties are ignored and filtered\nout. Missing or invalid top-level fields retain their defaults: `subject` is\n`undefined`, `aliases` and `links` are empty arrays, and `properties` is an empty\nobject. A JSON response of `null` or another non-object value, including an\narray, produces an empty JRD.\n\nLink `titles` and `properties` must be non-null, non-array objects. Invalid\nvalues are omitted, so reading those fields returns `undefined`; the rest of\nthe link remains available. This handling applies to parsed response data.\nNetwork errors, non-200 responses, and invalid JSON syntax still reject the\nlookup promise.\n\n#### Properties\n\nAll four properties are getter-only:\n\n- `subject`: the subject identifier from the document, or `undefined` when\n  absent or mistyped.\n- `aliases`: a frozen array of alternative identifiers, defaulting to an empty\n  array when absent or mistyped. Access an individual alias with `jrd.aliases[i]`.\n- `properties`: a frozen object mapping property URI keys to string or `null`\n  values, defaulting to an empty object when the field is absent or mistyped.\n  Explicit `null` values within a valid properties object are preserved.\n- `links`: a frozen array of link objects in document order, defaulting to an\n  empty array when absent or mistyped. Each link object and its `titles` and `properties`\n  objects, when present and valid, are also frozen. Links retain server-supplied\n  fields except metadata filtered out by validation.\n\nThe collections and standard link metadata are read-only. Attempting to\nchange frozen contents or assign to these getter-only properties throws a\n`TypeError` in strict mode.\n\n#### link(rel, type?)\n\nSelects a link from the returned document by relation and, optionally, media\ntype. This is local selection, independent of `options.rel` passed to\n`webfinger()` during discovery.\n\nReturns the first link in document order whose `rel` exactly matches the\nrequested relation and whose media type satisfies the optional filter:\n\n- Omit `type` or pass `null` to accept any media type, including a missing type.\n- Pass a nonempty string to require an exact `type` match.\n- Pass an array of strings to accept any listed type. Array order does not\n  establish a preference; document order determines the first match.\n- Pass an empty array to match nothing.\n\nMedia type matching compares the complete string, including any parameters;\nit does not normalize media types.\n\nThe result is the same frozen link object exposed in `links`. Read its `href`\nproperty for the target URI. No match returns `undefined`. Callers needing\nmultiple matches can filter the `links` array.\n\n#### Example: finding an ActivityPub actor\n\nWith `webfinger` imported from this package, use the following expression\ninside an async function to find an account's ActivityPub actor URI:\n\n```js\n(await webfinger('user1@foo.example')).link('self', ['application/activity+json', 'application/ld+json; profile=\"https://www.w3.org/ns/activitystreams\"'])?.href\n```\n\nThis returns the first matching link's `href`, or `undefined` if no matching\nlink has a target URI. Discovery errors still reject the promise.\n\n## Contributing\n\nQuestions, bug reports, and pull requests are welcome through the\n[GitHub repository](https://github.com/social-web-foundation/webfinger).\nUse the [issue tracker](https://github.com/social-web-foundation/webfinger/issues)\nfor questions and bugs. Please follow the [Code of Conduct](CODE_OF_CONDUCT.md)\nand run lint and tests before submitting a pull request.\n\n### Testing\n\nUse Node.js 22, 24, or 26 to run the tests with the built-in Node Test Runner.\nNock intercepts HTTP and HTTPS requests; the tests call the real `webfinger()`\nfunction.\nNo servers, certificates, network access, or elevated privileges are needed.\n\n```sh\nnpm ci\nnpm run lint\nnpm test\n```\n\nRun the browser tests in headless Chromium with Playwright:\n\n```sh\nnpx playwright install chromium\nnpm run test:browser\n```\n\nThe browser tests import the library as a native ES module and exercise browser\n`fetch` with intercepted responses, including cross-origin discovery with CORS\nheaders and repeated relation parameters. Installing Chromium requires network\naccess; the tests themselves do not contact external services. CI runs both\nthe Node.js and browser suites before publishing.\n\n## License\n\n- Copyright 2012,2013 E14N <https://e14n.com/>\n- Copyright 2026, Social Web Foundation <https://socialwebfoundation.org/>\n\nLicensed under the Apache License, Version 2.0 (the \"License\");\nyou may not use this file except in compliance with the License.\nYou may obtain a copy of the License at\n\n<http://www.apache.org/licenses/LICENSE-2.0>\n\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS,\nWITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\nSee the License for the specific language governing permissions and\nlimitations under the License.\n\nSee [LICENSE.md](LICENSE.md) for the full license text.\n","readmeFilename":"README.md"}