Звіт у форматі JSON машиночитний
{
"data": {
"repo": {
"topics": [
"ipv4",
"ipv6",
"javascript",
"address",
"arpa",
"bigint",
"browser",
"cidr",
"ip",
"netmask",
"parse",
"subnet",
"typescript",
"validate",
"validation"
],
"is_fork": false,
"size_kb": 2910,
"has_wiki": true,
"homepage": "https://www.npmjs.com/package/ip-address",
"languages": {
"Shell": 62,
"JavaScript": 2614,
"TypeScript": 146176
},
"pushed_at": "2026-06-28T18:49:17Z",
"created_at": "2011-03-18T06:49:04Z",
"owner_type": "User",
"updated_at": "2026-06-16T09:04:27Z",
"description": "💻 a library for parsing and manipulating IPv4 and IPv6 addresses in JavaScript",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "TypeScript",
"significant_languages": [
"TypeScript"
]
},
"owner": {
"blog": "https://beaugunderson.com/",
"name": "Beau Gunderson",
"type": "User",
"login": "beaugunderson",
"company": "@canvas-medical",
"location": "Earth",
"followers": 444,
"avatar_url": "https://avatars.githubusercontent.com/u/61791?v=4",
"created_at": "2009-03-09T23:50:49Z",
"is_verified": null,
"public_repos": 356,
"account_age_days": 6343
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v10.2.0",
"kind": "minor",
"published_at": "2026-05-01T06:32:55Z"
},
{
"tag": "v10.1.1",
"kind": "patch",
"published_at": "2026-04-27T21:49:32Z"
},
{
"tag": "v10.1.0",
"kind": "minor",
"published_at": "2025-11-08T19:48:24Z"
},
{
"tag": "v10.0.1",
"kind": "patch",
"published_at": "2024-10-10T20:34:22Z"
},
{
"tag": "v10.0.0",
"kind": "major",
"published_at": "2024-10-04T02:13:37Z"
},
{
"tag": "v9.1.0-0",
"kind": "prerelease",
"published_at": "2024-10-01T19:10:10Z"
},
{
"tag": "v9.0.5",
"kind": "patch",
"published_at": "2023-09-25T17:53:15Z"
},
{
"tag": "v9.0.4",
"kind": "patch",
"published_at": "2023-09-25T17:40:32Z"
},
{
"tag": "v9.0.3",
"kind": "patch",
"published_at": "2023-09-25T17:39:40Z"
},
{
"tag": "v9.0.2",
"kind": "patch",
"published_at": "2023-09-25T17:38:17Z"
},
{
"tag": "v9.0.1",
"kind": "patch",
"published_at": "2023-09-25T17:30:32Z"
},
{
"tag": "v9.0.0",
"kind": "major",
"published_at": "2023-09-25T08:17:11Z"
},
{
"tag": "v8.1.0",
"kind": "minor",
"published_at": "2021-07-19T19:17:59Z"
},
{
"tag": "v8.0.0",
"kind": "major",
"published_at": "2021-06-20T02:48:48Z"
},
{
"tag": "v7.1.0",
"kind": "minor",
"published_at": "2020-10-26T19:18:23Z"
},
{
"tag": "v7.0.1",
"kind": "patch",
"published_at": "2020-10-03T13:52:06Z"
},
{
"tag": "v7.0.0",
"kind": "major",
"published_at": "2020-10-02T18:38:34Z"
},
{
"tag": "v7.0.0-beta.1",
"kind": "prerelease",
"published_at": "2020-09-24T18:06:43Z"
},
{
"tag": "v7.0.0-beta.0",
"kind": "prerelease",
"published_at": "2020-09-24T16:53:43Z"
},
{
"tag": "v6.4.0",
"kind": "minor",
"published_at": "2020-09-13T20:53:39Z"
},
{
"tag": "v6.3.0",
"kind": "minor",
"published_at": "2020-04-01T19:51:35Z"
},
{
"tag": "v6.2.0",
"kind": "minor",
"published_at": "2019-12-30T01:22:20Z"
},
{
"tag": "v6.1.0",
"kind": "minor",
"published_at": "2019-07-29T21:01:12Z"
},
{
"tag": "v6.0.0",
"kind": "major",
"published_at": "2019-07-29T20:44:52Z"
},
{
"tag": "v5.9.4",
"kind": "patch",
"published_at": "2019-07-26T18:53:43Z"
},
{
"tag": "v5.9.3",
"kind": "patch",
"published_at": "2019-07-26T18:45:58Z"
},
{
"tag": "v5.9.2",
"kind": "patch",
"published_at": "2019-06-05T18:34:16Z"
},
{
"tag": "v5.9.1",
"kind": "patch",
"published_at": "2019-06-05T18:30:43Z"
},
{
"tag": "v5.9.0",
"kind": "minor",
"published_at": "2019-03-27T22:05:59Z"
},
{
"tag": "v5.8.9",
"kind": "patch",
"published_at": "2017-12-06T18:51:25Z"
},
{
"tag": "v5.8.8",
"kind": "patch",
"published_at": "2017-04-10T00:26:01Z"
},
{
"tag": "v5.8.7",
"kind": "patch",
"published_at": "2017-04-09T23:45:46Z"
},
{
"tag": "v5.8.6",
"kind": "patch",
"published_at": "2016-12-13T21:31:44Z"
},
{
"tag": "v5.8.5",
"kind": "patch",
"published_at": "2016-12-13T21:30:10Z"
},
{
"tag": "v5.8.4",
"kind": "patch",
"published_at": "2016-12-09T03:05:05Z"
},
{
"tag": "v5.8.3",
"kind": "patch",
"published_at": "2016-12-08T23:46:38Z"
},
{
"tag": "v5.8.2",
"kind": "patch",
"published_at": "2016-07-25T23:06:03Z"
},
{
"tag": "v5.8.1",
"kind": "patch",
"published_at": "2016-07-25T23:05:36Z"
},
{
"tag": "v5.8.0",
"kind": "minor",
"published_at": "2016-02-02T23:12:41Z"
},
{
"tag": "v5.7.0",
"kind": "minor",
"published_at": "2016-01-22T20:11:06Z"
},
{
"tag": "v5.6.0",
"kind": "minor",
"published_at": "2016-01-22T19:33:43Z"
},
{
"tag": "v5.5.0",
"kind": "minor",
"published_at": "2016-01-21T21:48:01Z"
},
{
"tag": "v5.4.1",
"kind": "patch",
"published_at": "2016-01-21T21:42:40Z"
},
{
"tag": "v5.4.0",
"kind": "minor",
"published_at": "2016-01-21T21:40:23Z"
},
{
"tag": "v5.3.0",
"kind": "minor",
"published_at": "2016-01-21T21:28:49Z"
},
{
"tag": "v5.2.0",
"kind": "minor",
"published_at": "2016-01-20T20:10:53Z"
},
{
"tag": "v3.1.1",
"kind": "patch",
"published_at": "2013-12-21T21:28:57Z"
},
{
"tag": "v3.1.0",
"kind": "minor",
"published_at": "2013-12-21T21:23:45Z"
},
{
"tag": "v2.0.2",
"kind": "patch",
"published_at": "2012-04-12T00:52:43Z"
},
{
"tag": "v2.0.1",
"kind": "patch",
"published_at": "2012-04-06T21:44:26Z"
},
{
"tag": "2.0.0",
"kind": "major",
"published_at": "2012-04-06T18:42:05Z"
},
{
"tag": "1.1.0",
"kind": "minor",
"published_at": "2012-02-29T19:33:39Z"
},
{
"tag": "1.0.0",
"kind": "major",
"published_at": "2011-08-15T08:43:23Z"
},
{
"tag": "0.0.1",
"kind": "patch",
"published_at": "2011-04-27T21:39:13Z"
}
],
"recent_commits": [
{
"oid": "e82a6812ac9d16f1300d3c2051fe2cc88c5d9161",
"body": "Drops NPM_TOKEN — auth now comes from the GitHub Actions OIDC token. Upgrades npm in CI to >=11.5.1 (required for trusted publishing); Node 22 ships npm 10.x. Configure the trusted publisher in the package's npmjs.com settings before the next tag push.",
"is_bot": false,
"headline": "Switch release workflow to npm trusted publishing (OIDC)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-23T03:50:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2dce80f10b1492c787155d3d0cbd4a22e2ad6c00",
"body": "Adds a Release workflow that triggers on v* tag pushes: runs tests, npm publishes with provenance, and creates a GitHub release. Requires NPM_TOKEN repo secret.",
"is_bot": false,
"headline": "Publish + tag automation on v* tag push (closes #205)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-23T02:04:39Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80fccaae984618f35dc941efab55cf2440ab37e8",
"body": null,
"is_bot": false,
"headline": "10.2.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:32:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "abaeb4d817cab16d3a1a78abd249d1f116bd302e",
"body": "It is always assigned in the constructor, so the optional `?` was\nforcing callers into needless nil-checks (and untestable branches).\nMatches the existing IPv6 typing.",
"is_bot": false,
"headline": "Type Address4.addressMinusSuffix as non-nilable (closes #143)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:31:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2878c294e1216f9a0b69ad1d3c57a3790a7d5e8e",
"body": "to4() built the result via Address4.fromHex(), which has no subnet, so\nthe v4 prefix that was embedded in a v4-mapped v6 address (e.g. /120 on\n::ffff:192.168.0.1) was silently dropped to /32.\n\nDerive the v4 prefix from the v6 mask: subnetMask - 96 when the mask\ncovers the trailing 32 bits, /32 otherwise. parse4in6 seeds the\nembedded address4 the same way. to4in6() and groupForV6() switched to\ncorrectForm() so the rendered string/HTML doesn't carry the new /n\nsuffix.",
"is_bot": false,
"headline": "Preserve subnet prefix through Address6.to4() (closes #123) (#203)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:28:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "586666ee9e666464071761d7a453715f98b6caee",
"body": "The URL regex was unanchored at the end, so fromURL would silently\ntruncate trailing non-hex characters and return a partial address —\ne.g. `http://[1234:5678::abcdxyz]` parsed as `1234:5678::abcd`.\n\nAnchor both URL regexes, pair the brackets so `[hex]` and bare `hex`\nare exclusive alternatives, and accept `.` for v4-in-v6 addresses.\nStrip the protocol prefix up front and route every non-port URL\nthrough a single regex branch.",
"is_bot": false,
"headline": "Reject trailing junk in Address6.fromURL (closes #158) (#202)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:19:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "80bc76eddf63df38db60defd5004bea919adf7ac",
"body": "Address4.fromBigInt, Address6.fromBigInt, Address4.fromHex, and\nAddress4.fromInteger previously masked invalid input: out-of-range\nBigInts truncated, short hex strings zero-filled, and NaN/non-integer\nnumbers slipped through to produce surprising addresses. They now\nthrow AddressError with their own messages.\n\nThe two internal Address4.fromHex callers in ipv6.ts (to4() and\ninspectTeredo()) pad their hex strings explicitly since fromHex no\nlonger zero-fills short input.\n\nCloses #69.",
"is_bot": false,
"headline": "Validate static factories instead of silently overflowing (#201)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:17:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "98927be9ef0c09f8ffcaf30b297405c9eff0a520",
"body": "Document that isValid() returns true for host-with-subnet strings like\n192.168.1.5/24 (unlike Python's strict ipaddress.ip_network), and show\nthe strict network-address check pattern in the README examples.",
"is_bot": false,
"headline": "Clarify isValid() accepts CIDRs with host bits set (#81)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T06:03:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a0eb0732d6ac3088daa1106f4933eade41fd364a",
"body": "* Fix getScope() and add ULA/6to4/Documentation/NAT64 to getType() (closes #122)\n\nThe 4-bit scope nibble (RFC 4291 §2.7) only applies to multicast\naddresses, but getScope() read it for every address. As a result\nfe80::… returned 'Reserved' (nibble 0) and 2002:: returned 'Link\nlocal' (nibble 2). Now \n[…]\nt scope 1) is only defined for\nloopback transmission of multicast. RFC 4291 §2.5.3 explicitly\nstates that the unicast loopback address ::1 is \"treated as having\nLink-Local scope\".\n\n* Regenerate README",
"is_bot": false,
"headline": "Fix getScope() and broaden getType() classification (closes #122) (#200)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T05:52:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "ec52105c87179129b9f091e97581e87b007824c7",
"body": "Returns the network address with the CIDR suffix preserved as a string,\ne.g. `205.65.224.110/29` → `205.65.224.104/29`. Closes the gap raised\nin #39: previously callers had to assemble the result by hand\n(`${addr.startAddress().correctForm()}/${addr.subnetMask}`). Available\non both Address4 and Address6.",
"is_bot": false,
"headline": "Add networkForm() for CIDR network-address strings (#199)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T05:42:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a9443a72215b21a1e692be75cd3e18e8aa2262cb",
"body": "… (#198)\n\nCloses #62. The existing `is4()` / `v4` flag is set during parse only when\nthe input is written in v4-in-v6 dotted-quad notation, so `::ffff:127.0.0.1`\nreturns true while the equivalent `::ffff:7f00:1` returns false. That's a\nnotation-level flag, not a property of the underlying address.\n\n\n[…]\nching\nthe shape of the existing `isTeredo()` / `is6to4()` / `isULA()` helpers, and\nclarify the JSDoc on `is4()` to describe it as a notation flag and point at\n`isMapped4()` for the bit-level question.",
"is_bot": false,
"headline": "Add isMapped4() predicate for IPv4-mapped IPv6 addresses (closes #62)…",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T05:33:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f01d74267ed39f84521157e5f199edade9809f1e",
"body": "…etc.) (#197)\n\nAdds isPrivate / isLoopback / isLinkLocal / isUnspecified / isBroadcast\n/ isCGNAT to Address4, and isULA / isUnspecified / isDocumentation to\nAddress6. Closes #53 (which asked for isPrivate and ULA detection).\n\nThe README previously advertised ULA support but no isULA() existed —\nthis fixes the discrepancy.",
"is_bot": false,
"headline": "Add address-property predicates (private, ULA, loopback, link-local, …",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T05:22:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f19e31b325966850559b669b39fbe18317aff6cc",
"body": "Adds three new APIs to both Address4 and Address6:\n\n- `wildcardMask()` returns the Cisco-style inverse of the subnet mask\n (e.g. `0.0.0.255` for a `/24`, `::ffff:ffff:ffff:ffff` for a `/64`).\n- `fromAddressAndWildcardMask(address, mask)` constructs an address from\n an address and a wildcard mask, \n[…]\nups before evaluating wildcards, so\n `2001:db8::*` yields `/112`.\n\nThe constructor is unchanged: `new Address4('192.168.0.*')` still throws,\npreserving v7's strict validation.\n\nCloses #78, #117, #119",
"is_bot": false,
"headline": "add wildcard mask and trailing-wildcard pattern support (#196)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T05:12:58Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6b6460cc2bc4e27924d5db9d6d021956ce68f4f8",
"body": "Adds Address6.fromAddress4Nat64() and Address6#toAddress4Nat64() supporting\nall six RFC 6052 prefix lengths (/32, /40, /48, /56, /64, /96), with the\nwell-known prefix 64:ff9b::/96 as the default.\n\nCloses #72.",
"is_bot": false,
"headline": "add NAT64 IPv4/IPv6 conversion (RFC 6052) (#195)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:58:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99a95c8ab5d3fa89387aba95b0443f979979fa94",
"body": null,
"is_bot": false,
"headline": "expand npm keywords for searchability",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:44:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "96bc21dc20e6bf43b92814b5cb97b3d252e811e3",
"body": "Closes #25.",
"is_bot": false,
"headline": "document Buffer interop for byte array methods",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:33:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cbe3579d4cc5ec20940d3cbe2736bbcc17c6d2bd",
"body": "…) (#194)\n\nMirrors `Address4.subnetMaskAddress()` on `Address6` (e.g. `/64` →\n`ffff:ffff:ffff:ffff::`) for parity, and adds a static factory on each\nclass that builds an instance from an address and mask given as\nseparate strings — directly matching the shape Node returns from\n`os.networkInterfaces()`. Non-contiguous masks (`255.0.255.0`,\n`ffff::ffff`) throw `AddressError`. Constructors and `isValid()` are\nunchanged. Closes #35.",
"is_bot": false,
"headline": "add Address6.subnetMaskAddress() and Address{4,6}.fromAddressAndMask(…",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:29:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7555f04a1264e9f24cf2a5f6c416184d1b7d1d18",
"body": null,
"is_bot": false,
"headline": "Thousands of test cases",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:17:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e07113149d341fd4cbc540e43fc8dbb07d44472",
"body": "Imports 482 unique test cases from richb-intermapper/IPv6-Regex\n(Dartware, ~2010), wired into the existing addressIs harness so each\ncase exercises Address6.isValid() and the regularExpression() round-\ntrips. Three cases reclassified per ip-address's actual behavior:\nleading/trailing whitespace is rejected (intermapper's regex pre-trims\nvia `\\s*…\\s*`), and `2001:db8::%1` is accepted because we support\nzone IDs. Total tests jump from 2029 to 3391, coverage stays 100%.\n\nCloses #112.",
"is_bot": false,
"headline": "add Intermapper IPv6 regex test corpus (#192)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T04:17:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "accda196475c398107c944ae3456927d9335725b",
"body": "Returns the dotted-decimal form of the subnet mask as an `Address4`\n(e.g. `127.0.0.2/20` → `255.255.240.0`). Pairs naturally with the\nexisting `subnetMask: number` prefix-length property and follows the\nsame style as `startAddress`/`endAddress`. Inspired by #95.",
"is_bot": false,
"headline": "Add Address4.subnetMaskAddress() (#191)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T03:57:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ccba311a81beb42beebef2e336cd1941eb4f3bd2",
"body": "Bumps the versions Dependabot flagged (release-it removed entirely\nsince there's no config and no workflow consumes it) along with the\nrest of the dev tree. Adds overrides for `diff`, `serialize-javascript`,\nand `@eslint/plugin-kit` to clear the remaining transitive ReDoS /\nprototype-pollution advisories that mocha 11 and eslint_d 14 still pull.\n`npm audit` now reports 0 vulnerabilities.",
"is_bot": false,
"headline": "Update dev dependencies and clear audit warnings (#190)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T03:53:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eb6ed7c7dbbc2d8beff992c45bec4de907d258b5",
"body": "* generate README from TypeDoc, retire docs site\n\nReplace the unmaintained `documentation` package + standalone HTML site at\nip-address.js.org with a single self-updating README. A new\n`scripts/build-readme.ts` walks the TypeScript source via TypeDoc and splices a\ncompact API reference into a hand-w\n[…]\nalready conveys.\n\n* move Terminology section after Features\n\n* polish Used by phrasing\n\n* note that parse() is called by the constructor\n\n* switch mocha to tsx via --import to silence Node ESM warning",
"is_bot": false,
"headline": "Generate README from TypeDoc, retire docs site (#189)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T03:42:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5a07b4434db71bd50d5b0dfce1014e6fcc6535f3",
"body": "Package shape:\n- drop src/ from publish (was duplicate of dist/*.d.ts); enable inlineSources\n so .js.map files stay self-contained\n- disable declarationMap (drops .d.ts.map); add sideEffects: false\n- bump tsconfig target es2016 -> es2020 (matches lib; existing BigInt usage\n already required it)\n- \n[…]\ng it\n- cache isCorrect closure at module scope instead of allocating per\n construction\n- short-circuit parse4in6 when address contains no '.'\n\nInstall footprint ~307KB -> ~177KB. All 2024 tests pass.",
"is_bot": false,
"headline": "shrink install footprint, speed up hot paths",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-05-01T02:15:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "c3fcb1fd1b093ffca343280e134a73ab413ad068",
"body": "The snyk.io/test/github badge endpoint returns 410 Gone and there is no\npublic no-auth replacement.",
"is_bot": false,
"headline": "remove broken snyk badge",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-04-27T21:49:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d98f88cfa68abef0e57ec2b48df0049032e50c85",
"body": null,
"is_bot": false,
"headline": "Merge commit from fork",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-04-27T17:28:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dba2fc0c24c15cb91bd2854a91d8eb3a5e46f302",
"body": null,
"is_bot": false,
"headline": "improve coverage",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-02-28T00:05:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ecc3b537f6c4f99a2f0cbd33d7d1696e8b7839ec",
"body": null,
"is_bot": false,
"headline": "improve test coverage",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2026-02-27T23:52:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7c49446ebe28718676dfe04495347ecafb0c494a",
"body": null,
"is_bot": false,
"headline": "10.1.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2025-11-08T19:48:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f8291dc716d636519319f585d950d2f6d9ff20a",
"body": "…(#180)\n\n* feat: Add Address4.fromByteArray() for API consistency with Address6\n\n* Fix security issue by validating byte ranges in Address4.fromByteArray()",
"is_bot": false,
"headline": "feat: Add Address4.fromByteArray() for API consistency with Address6 …",
"author_name": "Obodugo Rapheal",
"author_login": "Kofacts",
"committed_at": "2025-11-08T19:46:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a57d8b76f2b1b46ac8543066ee11480cc7a3568b",
"body": null,
"is_bot": false,
"headline": "trigger CI",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2025-11-08T18:56:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6bb5c5891ef07eb38d5e1c65afa6fd4ce49da13d",
"body": null,
"is_bot": false,
"headline": "update circl CI config to trigger a build",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2025-11-08T18:54:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9d71112336c3b38faad691500ee384af1661bc9b",
"body": null,
"is_bot": false,
"headline": "Release 10.0.1",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-10T20:34:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "644933202687c656d0c42c609a46af47e9cc4c8b",
"body": null,
"is_bot": false,
"headline": "Fix Address4.bigInt return type (#175)",
"author_name": "Timothy Cole",
"author_login": "timcole",
"committed_at": "2024-10-04T22:52:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "109948689c47ffac2f1b23444723d37d6c040ae4",
"body": null,
"is_bot": false,
"headline": "Release 10.0.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-04T02:13:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "23cac6af8e4bae5c97e30bdd4ae25ba0a01540bf",
"body": null,
"is_bot": false,
"headline": "formatting",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-04T02:11:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42fe59acfbf8aa4c3044552f495e4dfa66ce492e",
"body": null,
"is_bot": false,
"headline": "BigInteger to BigInt",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-04T02:11:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fe12e9188548966b74d3d902862cc17f491624fd",
"body": "* ipv6: Cover inspectTeredo() method with more tests\r\n\r\n* Bump tsconfig target to es2016 and lib to es2020 to be able to use BigInt and ** operator\r\n\r\n* Convert IPv4 API to work with bigint\r\n\r\n* Convert IPv6 API to work with bigint\r\n\r\n* Remove jsbn from dependencies",
"is_bot": false,
"headline": "Replace `jsbn` with native BigInt (#174)",
"author_name": "Michal Kočárek",
"author_login": "michal-kocarek",
"committed_at": "2024-10-04T01:32:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "175a575050fc812a58aeaa61b3e8a55cfdfaa3b0",
"body": null,
"is_bot": false,
"headline": "remove very old upgrade instructions",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T19:12:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d5a19cbe2d415223151a569a1f1d7349e949b76f",
"body": null,
"is_bot": false,
"headline": "Release 9.1.0-0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T19:10:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9e9a4f8a14bd1ae08389a39163c034c281583447",
"body": null,
"is_bot": false,
"headline": "update references to chai, formatting",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T19:01:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0cc929058d8db89c556ddc7f8c6d4893413ddfba",
"body": null,
"is_bot": false,
"headline": "update dependencies",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T19:00:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88da54b3feec26e1eee6374ccbef6cc4d3d8ad0a",
"body": null,
"is_bot": false,
"headline": "run npm audit fix",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T18:48:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60f2c64a81708c6488d886b99a58992a5c2e5689",
"body": null,
"is_bot": false,
"headline": "move @types/jsbn to a dependency",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-10-01T18:47:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "302687452ce5c3fa5045259d04d99f0f370c92c8",
"body": null,
"is_bot": false,
"headline": "group to make clearer",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2024-04-20T21:42:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8c9986646522d8c1076291267d00f783bdad414f",
"body": "…ies (#171)",
"is_bot": false,
"headline": "Update Dependency Versions in Lock File to Address Known Vulnerabilit…",
"author_name": "Will Hurley",
"author_login": "wjhurley",
"committed_at": "2024-02-26T23:02:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62c5fcb0350213ed971a0767b523a83a2895699c",
"body": "Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump @babel/traverse from 7.23.0 to 7.23.2 (#168)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2023-10-16T19:34:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f6cd5460751e6a476ba994c7b9c20dc166d3dd76",
"body": "Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
"is_bot": true,
"headline": "Bump postcss from 8.4.30 to 8.4.31 (#167)",
"author_name": "dependabot[bot]",
"author_login": "dependabot[bot]",
"committed_at": "2023-10-16T19:29:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f7b03dc86cdadf5305365d70a6290c895da59c5b",
"body": null,
"is_bot": false,
"headline": "more formatting, remove unused packages",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-26T00:01:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "234c1c6eaa74e0ee3aace46c3b32d64d82cae620",
"body": null,
"is_bot": false,
"headline": "remove useless wrapper",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T23:55:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07dfb286b0a666e98bacf299d889ad9610c68d07",
"body": null,
"is_bot": false,
"headline": "add prettierrc for editor integration, eslint_d, reformat",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T23:44:14Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "38723d6fe6858b7119c44c7b829498518bfc05b9",
"body": null,
"is_bot": false,
"headline": "remove dependency on sprintf-js",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T23:39:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba6b2d239df3d9c9b74c60404e4f7798e54c0283",
"body": null,
"is_bot": false,
"headline": "improve test coverage by removing useless check",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T23:04:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "eaa0ada666683b8c2f82a96948e167896bf6c0a1",
"body": null,
"is_bot": false,
"headline": "ts-node → tsx",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T22:30:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fa03723e7e0ff79b7fb39f828ba309cbecf4bc2f",
"body": null,
"is_bot": false,
"headline": "use re-export syntax",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T19:23:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "320eef02ad3cc25ae22ca85ba0f7ab9719daa94c",
"body": null,
"is_bot": false,
"headline": "update token",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T19:10:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "188dbcccf6853473ee20ab5de283c821da80be9e",
"body": null,
"is_bot": false,
"headline": "use different circleci badge",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T19:08:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "06c75f2a5e8ae9ae287d5b13c2344350231d0ef4",
"body": null,
"is_bot": false,
"headline": "Release 9.0.5",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:53:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "9a1a7c401ed754a978f7a0fe8dd352eb413798b9",
"body": null,
"is_bot": false,
"headline": "fix for release-it",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:52:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2749bd21f5bcd4b0910b108954733107dfacecc5",
"body": null,
"is_bot": false,
"headline": "fixes for packaging",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:51:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "65c8a2ee0e52b8fc709f6df13d43a9fcc9d69d5c",
"body": null,
"is_bot": false,
"headline": "Release 9.0.3",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:39:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8f76cf55d754b90547fea293cc4f25adf986c868",
"body": null,
"is_bot": false,
"headline": "Release 9.0.2",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:38:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "33b883fa2ba6e7a7bbc3380efaf1f38dfad3cc86",
"body": null,
"is_bot": false,
"headline": "back to npm",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:37:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4b01afd5239d9b00b19ac6934ed2fbd2c8e156ec",
"body": null,
"is_bot": false,
"headline": "Release 9.0.1",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:30:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42ca8a6f0043a5335af7f2e68f771170d7d3128b",
"body": null,
"is_bot": false,
"headline": "more yarn changes",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:29:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "08722859f5bb45a98ffbbf6cbe7ab7ab0196c887",
"body": null,
"is_bot": false,
"headline": "yarn doesn't support prepublishOnly",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T17:20:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25ada4d232c7c8046aa3d8e645a1d8c925c1f7b1",
"body": null,
"is_bot": false,
"headline": "Release 9.0.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:17:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55bb77a0def30f321da31fd896590ad20d29ac68",
"body": null,
"is_bot": false,
"headline": "circleci tweaks",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:15:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc63cca4fe77ca68ad190ef21b5898b8b908d26b",
"body": null,
"is_bot": false,
"headline": "circleci tweaks",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:14:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "858886877239114511cae06ea82a0d3ac77dcff0",
"body": null,
"is_bot": false,
"headline": "circleci tweaks",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:13:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8e0432f9d3522fb396e0f6d597c3c42f71e1b01",
"body": null,
"is_bot": false,
"headline": "circleci tweaks",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:12:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a97a05de6dcd47e79aeaf35af08760f712a08bea",
"body": null,
"is_bot": false,
"headline": "add executor",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:05:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fb1e905aa34931a794198e814426854b5cc15fa",
"body": null,
"is_bot": false,
"headline": "update badge",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:04:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "423dc704994e93576715f64418d29197e585cc48",
"body": null,
"is_bot": false,
"headline": "migrate to Circle",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T08:00:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ff0cb56e277c0c6395d13ea43f4f72bf2d01f09",
"body": null,
"is_bot": false,
"headline": "add release-it config",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T07:43:54Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edd8259b47c8c3b3e6a75b6b374512aebc419cc7",
"body": null,
"is_bot": false,
"headline": "remove unused file",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T07:31:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "79dd6dd216da9e93881241906537446933f1bdaa",
"body": null,
"is_bot": false,
"headline": "update dependencies",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T07:29:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8685da7d82c99530910c1d865396971e4397b477",
"body": null,
"is_bot": false,
"headline": "refactor towards broader compatibility",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T07:28:11Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "171061d121d8c2590798e4a9f6387ca4804c4f19",
"body": null,
"is_bot": false,
"headline": "lib → src",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2023-09-25T07:14:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b1df15f99355bd4132b579a0db69238b563e9c39",
"body": null,
"is_bot": false,
"headline": "8.1.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-07-19T19:17:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "42027ec6a111628b9b25a41389459143ae0df38e",
"body": null,
"is_bot": false,
"headline": "update test and fix formatting",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-07-19T19:17:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "047b4a05758ac2d9cb755c2c041c1f1b189f1306",
"body": null,
"is_bot": false,
"headline": "Merge pull request #140 from leftshift/master",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-07-19T19:12:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "15215b8c89414aaa2de1d97c5ea91f42ffc145b4",
"body": null,
"is_bot": false,
"headline": "fix missing 'in-addr' in comment",
"author_name": "Adrian Schneider",
"author_login": "leftshift",
"committed_at": "2021-07-19T15:23:05Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55f52e97ffd6930555aa097391e51faa7c24dbb8",
"body": null,
"is_bot": false,
"headline": "add conversion to reverse format and back for ipv4",
"author_name": "Adrian Schneider",
"author_login": "leftshift",
"committed_at": "2021-07-19T15:17:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "94b367ca765d2eff564fb94ded045fc2fb6e072c",
"body": null,
"is_bot": false,
"headline": "8.0.0",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-20T02:48:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "10f2e32654c8d9a91ff4d7bde252a9201640d765",
"body": null,
"is_bot": false,
"headline": "Merge pull request #138 from beaugunderson/bg-simple-modules",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-20T02:47:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2d6ddc40b89884a3b39f2373f3f50dc519b9ca21",
"body": null,
"is_bot": false,
"headline": "save some time",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T18:16:40Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c299958e9d5591a9752e4e933e44506ec9f933df",
"body": null,
"is_bot": false,
"headline": "exclude → allow_failures",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T18:15:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4a4a91433bf217155c9d828fc9f1f821ed11f650",
"body": null,
"is_bot": false,
"headline": "exclude ppc64le/node 16 for now",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T18:13:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "75a5cbd7d5f970af204eec4bfac13c51770b972a",
"body": null,
"is_bot": false,
"headline": "update dependencies",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T17:48:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "51db9af36884e0c4fa9838e8cf18763bfc46e512",
"body": null,
"is_bot": false,
"headline": "migrate from greenkeeper to snyk",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T17:44:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "83bd5043227e94ac341091afc0bfe3faa2086bee",
"body": null,
"is_bot": false,
"headline": "use travis-ci.com",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T17:33:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1d5e27a4ae22d9a08ccbf14da5c521f9ac5629b6",
"body": null,
"is_bot": false,
"headline": "simplify travis configuration",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T17:32:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cbd5bb2feb366cb1093c136ee04614eead1a722",
"body": null,
"is_bot": false,
"headline": "use es2015 instead of esnext (means we won't support dynamic import yet",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-19T17:25:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "043c096737d9550e49bc6ed26eb3c151813c626b",
"body": null,
"is_bot": false,
"headline": "upgrade all dependencies",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-17T15:49:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "323367d813550da32c1d25e05924bcf9e32f0a8c",
"body": null,
"is_bot": false,
"headline": "support as far back as current LTS (v12)",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:22:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66a37cf7165263bf9bc248337e0565f9d6e63c0d",
"body": null,
"is_bot": false,
"headline": "update README",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:20:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bde8f8c900ba90820466140b149ca15bd3d03b9f",
"body": "…sted-git-info-2.8.9\n\nBump hosted-git-info from 2.8.8 to 2.8.9",
"is_bot": false,
"headline": "Merge pull request #135 from beaugunderson/dependabot/npm_and_yarn/ho…",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:14:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "adbfe6e5bd4ded99866e5f0607aedae26df47932",
"body": "…liptic-6.5.4\n\nBump elliptic from 6.5.3 to 6.5.4",
"is_bot": false,
"headline": "Merge pull request #127 from beaugunderson/dependabot/npm_and_yarn/el…",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:14:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "be2549f117b69490b6ce0c0e04650ffca3005286",
"body": null,
"is_bot": false,
"headline": "Merge pull request #129 from ovcharik/master",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:12:17Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6e499f7bf9a5c0680cffdaf065e22810cb154be5",
"body": null,
"is_bot": false,
"headline": "add hybrid esm support",
"author_name": "Beau Gunderson",
"author_login": "beaugunderson",
"committed_at": "2021-06-16T20:09:56Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 54,
"commits_last_year": 31,
"latest_release_at": "2026-05-01T06:32:55Z",
"latest_release_tag": "v10.2.0",
"releases_from_tags": true,
"days_since_last_push": 24,
"active_weeks_last_year": 5,
"days_since_latest_release": 82,
"mean_days_between_releases": 105.4
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 57,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "ip-address",
"exists": true,
"license": "MIT",
"keywords": [
"ip",
"ipv4",
"ipv6",
"address",
"cidr",
"subnet",
"netmask",
"validate",
"validation",
"parse",
"arpa",
"bigint",
"browser"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/ip-address",
"is_deprecated": false,
"latest_version": "10.2.0",
"repository_url": "https://github.com/beaugunderson/ip-address",
"versions_count": 54,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 367966379,
"first_published_at": "2015-05-05T00:32:26.395000Z",
"latest_published_at": "2026-05-01T06:34:05.804000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 82
}
]
},
"popularity": {
"forks": 80,
"stars": 612,
"watchers": 12,
"fork_history": {
"days": [
{
"date": "2011-04-21",
"count": 1
},
{
"date": "2012-04-06",
"count": 1
},
{
"date": "2012-04-27",
"count": 1
},
{
"date": "2012-09-20",
"count": 1
},
{
"date": "2013-03-15",
"count": 1
},
{
"date": "2013-06-18",
"count": 1
},
{
"date": "2013-11-06",
"count": 1
},
{
"date": "2013-11-11",
"count": 1
},
{
"date": "2013-12-06",
"count": 1
},
{
"date": "2013-12-21",
"count": 1
},
{
"date": "2014-07-02",
"count": 1
},
{
"date": "2014-11-27",
"count": 1
},
{
"date": "2014-12-19",
"count": 1
},
{
"date": "2015-02-24",
"count": 1
},
{
"date": "2015-07-15",
"count": 1
},
{
"date": "2015-08-02",
"count": 1
},
{
"date": "2015-11-22",
"count": 1
},
{
"date": "2016-05-11",
"count": 1
},
{
"date": "2016-07-20",
"count": 1
},
{
"date": "2016-07-25",
"count": 1
},
{
"date": "2016-12-09",
"count": 1
},
{
"date": "2016-12-13",
"count": 1
},
{
"date": "2017-02-08",
"count": 1
},
{
"date": "2017-02-21",
"count": 1
},
{
"date": "2017-04-03",
"count": 1
},
{
"date": "2017-04-13",
"count": 1
},
{
"date": "2017-06-07",
"count": 1
},
{
"date": "2017-06-09",
"count": 1
},
{
"date": "2017-09-11",
"count": 1
},
{
"date": "2017-11-09",
"count": 1
},
{
"date": "2017-12-10",
"count": 1
},
{
"date": "2017-12-20",
"count": 1
},
{
"date": "2018-01-17",
"count": 1
},
{
"date": "2018-02-17",
"count": 1
},
{
"date": "2018-03-07",
"count": 1
},
{
"date": "2018-03-23",
"count": 1
},
{
"date": "2018-05-09",
"count": 1
},
{
"date": "2018-06-12",
"count": 1
},
{
"date": "2018-10-09",
"count": 1
},
{
"date": "2019-05-17",
"count": 1
},
{
"date": "2019-08-31",
"count": 1
},
{
"date": "2019-09-08",
"count": 1
},
{
"date": "2020-02-04",
"count": 2
},
{
"date": "2020-05-14",
"count": 1
},
{
"date": "2020-06-04",
"count": 1
},
{
"date": "2020-08-13",
"count": 1
},
{
"date": "2020-09-10",
"count": 1
},
{
"date": "2020-09-12",
"count": 1
},
{
"date": "2020-09-20",
"count": 1
},
{
"date": "2020-09-23",
"count": 1
},
{
"date": "2020-12-07",
"count": 1
},
{
"date": "2021-01-15",
"count": 1
},
{
"date": "2021-03-30",
"count": 1
},
{
"date": "2021-05-26",
"count": 1
},
{
"date": "2021-06-08",
"count": 1
},
{
"date": "2021-06-26",
"count": 1
},
{
"date": "2021-07-19",
"count": 1
},
{
"date": "2022-07-04",
"count": 1
},
{
"date": "2022-09-13",
"count": 1
},
{
"date": "2022-12-14",
"count": 1
},
{
"date": "2022-12-19",
"count": 1
},
{
"date": "2022-12-30",
"count": 1
},
{
"date": "2023-01-10",
"count": 1
},
{
"date": "2023-01-15",
"count": 1
},
{
"date": "2024-02-23",
"count": 1
},
{
"date": "2024-09-27",
"count": 1
},
{
"date": "2025-04-29",
"count": 1
},
{
"date": "2025-09-10",
"count": 1
},
{
"date": "2025-10-03",
"count": 1
},
{
"date": "2025-11-08",
"count": 1
},
{
"date": "2026-02-21",
"count": 1
},
{
"date": "2026-05-07",
"count": 1
},
{
"date": "2026-06-22",
"count": 1
},
{
"date": "2026-06-23",
"count": 1
},
{
"date": "2026-07-03",
"count": 1
}
],
"complete": true,
"collected": 76,
"total_forks": 80
},
"star_history": null,
"open_issues_and_prs": 11
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"tsconfig.json"
],
"toolchain_manifests": [],
"largest_source_bytes": 43711,
"source_files_sampled": 15,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"package.json"
],
"advisories": {
"error": null,
"scope": "repository_graph",
"source": "osv",
"findings": [
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.14",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp"
],
"fixed_version": "5.0.7",
"advisory_count": 1,
"oldest_advisory_days": 2
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp"
],
"fixed_version": "5.0.7",
"advisory_count": 1,
"oldest_advisory_days": 2
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.5",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-3jxr-9vmj-r5cp",
"GHSA-jxxr-4gwj-5jf2"
],
"fixed_version": "5.0.7",
"advisory_count": 2,
"oldest_advisory_days": 65
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.1",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-52cp-r559-cp3m",
"GHSA-h67p-54hq-rp68"
],
"fixed_version": "4.3.0",
"advisory_count": 2,
"oldest_advisory_days": 37
},
{
"name": "linkify-it",
"direct": false,
"version": "5.0.0",
"severity": "high",
"ecosystem": "npm",
"cvss_score": 7.5,
"advisory_ids": [
"GHSA-22p9-wv53-3rq4",
"GHSA-v245-v573-v5vm"
],
"fixed_version": "5.0.2",
"advisory_count": 2,
"oldest_advisory_days": 26
},
{
"name": "markdown-it",
"direct": false,
"version": "14.1.1",
"severity": "moderate",
"ecosystem": "npm",
"cvss_score": 5.3,
"advisory_ids": [
"GHSA-6v5v-wf23-fmfq"
],
"fixed_version": "14.2.0",
"advisory_count": 1,
"oldest_advisory_days": 37
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.7",
"severity": "low",
"ecosystem": "npm",
"cvss_score": 2.5,
"advisory_ids": [
"GHSA-g7r4-m6w7-qqqr"
],
"fixed_version": "0.28.1",
"advisory_count": 1,
"oldest_advisory_days": 40
}
],
"collected": true,
"malicious": [],
"truncated": false,
"by_severity": {
"low": 1,
"high": 5,
"moderate": 1
},
"advisory_count": 10,
"affected_count": 7,
"assessed_count": 425,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"npm"
],
"dependencies": [],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@aashutoshrathi/word-wrap",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "@eslint-community/eslint-utils",
"direct": false,
"version": "4.9.1",
"ecosystem": "npm"
},
{
"name": "@eslint-community/regexpp",
"direct": false,
"version": "4.12.2",
"ecosystem": "npm"
},
{
"name": "@eslint/config-array",
"direct": false,
"version": "0.18.0",
"ecosystem": "npm"
},
{
"name": "@eslint/core",
"direct": false,
"version": "0.6.0",
"ecosystem": "npm"
},
{
"name": "@eslint/core",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "@eslint/eslintrc",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "@eslint/eslintrc",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "8.57.1",
"ecosystem": "npm"
},
{
"name": "@eslint/js",
"direct": false,
"version": "9.11.1",
"ecosystem": "npm"
},
{
"name": "@eslint/object-schema",
"direct": false,
"version": "2.1.4",
"ecosystem": "npm"
},
{
"name": "@eslint/plugin-kit",
"direct": false,
"version": "0.7.1",
"ecosystem": "npm"
},
{
"name": "@gerrit0/mini-shiki",
"direct": false,
"version": "3.23.0",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/config-array",
"direct": false,
"version": "0.13.0",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/module-importer",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/object-schema",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "@humanwhocodes/retry",
"direct": false,
"version": "0.3.0",
"ecosystem": "npm"
},
{
"name": "@isaacs/cliui",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.3",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.4.15",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.25",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.scandir",
"direct": false,
"version": "2.1.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.stat",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "@nodelib/fs.walk",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "@pkgjs/parseargs",
"direct": false,
"version": "0.11.0",
"ecosystem": "npm"
},
{
"name": "@pkgr/core",
"direct": false,
"version": "0.2.9",
"ecosystem": "npm"
},
{
"name": "@rtsao/scc",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@shikijs/engine-oniguruma",
"direct": false,
"version": "3.23.0",
"ecosystem": "npm"
},
{
"name": "@shikijs/langs",
"direct": false,
"version": "3.23.0",
"ecosystem": "npm"
},
{
"name": "@shikijs/themes",
"direct": false,
"version": "3.23.0",
"ecosystem": "npm"
},
{
"name": "@shikijs/types",
"direct": false,
"version": "3.23.0",
"ecosystem": "npm"
},
{
"name": "@shikijs/vscode-textmate",
"direct": false,
"version": "10.0.2",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "@types/hast",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "@types/istanbul-lib-coverage",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "@types/json-schema",
"direct": false,
"version": "7.0.15",
"ecosystem": "npm"
},
{
"name": "@types/json5",
"direct": false,
"version": "0.0.29",
"ecosystem": "npm"
},
{
"name": "@types/mocha",
"direct": false,
"version": "10.0.10",
"ecosystem": "npm"
},
{
"name": "@types/unist",
"direct": false,
"version": "2.0.8",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/eslint-plugin",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/parser",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/project-service",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/scope-manager",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/tsconfig-utils",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/type-utils",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/types",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/typescript-estree",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/utils",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@typescript-eslint/visitor-keys",
"direct": false,
"version": "8.59.1",
"ecosystem": "npm"
},
{
"name": "@ungap/structured-clone",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "acorn",
"direct": false,
"version": "8.16.0",
"ecosystem": "npm"
},
{
"name": "acorn-jsx",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "acorn-loose",
"direct": false,
"version": "8.5.2",
"ecosystem": "npm"
},
{
"name": "acorn-walk",
"direct": false,
"version": "8.3.5",
"ecosystem": "npm"
},
{
"name": "ajv",
"direct": false,
"version": "6.15.0",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "argparse",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "aria-query",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "array-buffer-byte-length",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "array-includes",
"direct": false,
"version": "3.1.9",
"ecosystem": "npm"
},
{
"name": "array.prototype.findlastindex",
"direct": false,
"version": "1.2.6",
"ecosystem": "npm"
},
{
"name": "array.prototype.flat",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "array.prototype.flatmap",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "array.prototype.tosorted",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "arraybuffer.prototype.slice",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ast-types-flow",
"direct": false,
"version": "0.0.8",
"ecosystem": "npm"
},
{
"name": "async-function",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "available-typed-arrays",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "axe-core",
"direct": false,
"version": "4.10.0",
"ecosystem": "npm"
},
{
"name": "axobject-query",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "1.1.14",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "5.0.5",
"ecosystem": "npm"
},
{
"name": "browser-stdout",
"direct": false,
"version": "1.3.1",
"ecosystem": "npm"
},
{
"name": "buffer-from",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "c8",
"direct": false,
"version": "11.0.0",
"ecosystem": "npm"
},
{
"name": "call-bind",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "call-bind-apply-helpers",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "call-bound",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "callsites",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "camelcase",
"direct": false,
"version": "6.3.0",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "chalk",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "chokidar",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "cliui",
"direct": false,
"version": "8.0.1",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "commander",
"direct": false,
"version": "14.0.3",
"ecosystem": "npm"
},
{
"name": "concat-map",
"direct": false,
"version": "0.0.1",
"ecosystem": "npm"
},
{
"name": "confusing-browser-globals",
"direct": false,
"version": "1.0.11",
"ecosystem": "npm"
},
{
"name": "console-grid",
"direct": false,
"version": "2.2.4",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "damerau-levenshtein",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "data-view-buffer",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "data-view-byte-length",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "data-view-byte-offset",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "decamelize",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "deep-is",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "define-data-property",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "define-properties",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "diff",
"direct": false,
"version": "8.0.4",
"ecosystem": "npm"
},
{
"name": "doctrine",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "doctrine",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "dunder-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "eastasianwidth",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "eight-colors",
"direct": false,
"version": "1.3.3",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "9.2.2",
"ecosystem": "npm"
},
{
"name": "entities",
"direct": false,
"version": "4.5.0",
"ecosystem": "npm"
},
{
"name": "es-abstract",
"direct": false,
"version": "1.24.2",
"ecosystem": "npm"
},
{
"name": "es-define-property",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "es-errors",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "es-iterator-helpers",
"direct": false,
"version": "1.0.19",
"ecosystem": "npm"
},
{
"name": "es-object-atoms",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "es-set-tostringtag",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "es-shim-unscopables",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "es-to-primitive",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.27.7",
"ecosystem": "npm"
},
{
"name": "escalade",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "escape-string-regexp",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "8.57.1",
"ecosystem": "npm"
},
{
"name": "eslint",
"direct": false,
"version": "9.11.1",
"ecosystem": "npm"
},
{
"name": "eslint-config-airbnb",
"direct": false,
"version": "19.0.4",
"ecosystem": "npm"
},
{
"name": "eslint-config-airbnb-base",
"direct": false,
"version": "15.0.0",
"ecosystem": "npm"
},
{
"name": "eslint-config-prettier",
"direct": false,
"version": "10.1.8",
"ecosystem": "npm"
},
{
"name": "eslint-import-resolver-node",
"direct": false,
"version": "0.3.9",
"ecosystem": "npm"
},
{
"name": "eslint-module-utils",
"direct": false,
"version": "2.12.1",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-filenames",
"direct": false,
"version": "1.3.2",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-import",
"direct": false,
"version": "2.32.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-jsx-a11y",
"direct": false,
"version": "6.10.2",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-prettier",
"direct": false,
"version": "5.5.5",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-react",
"direct": false,
"version": "7.33.2",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-react-hooks",
"direct": false,
"version": "4.6.0",
"ecosystem": "npm"
},
{
"name": "eslint-plugin-sort-imports-es6-autofix",
"direct": false,
"version": "0.6.0",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "7.2.2",
"ecosystem": "npm"
},
{
"name": "eslint-scope",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "eslint-visitor-keys",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "eslint_d",
"direct": false,
"version": "14.0.4",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "10.2.0",
"ecosystem": "npm"
},
{
"name": "espree",
"direct": false,
"version": "9.6.1",
"ecosystem": "npm"
},
{
"name": "esquery",
"direct": false,
"version": "1.5.0",
"ecosystem": "npm"
},
{
"name": "esrecurse",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "estraverse",
"direct": false,
"version": "5.3.0",
"ecosystem": "npm"
},
{
"name": "esutils",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "fast-deep-equal",
"direct": false,
"version": "3.1.3",
"ecosystem": "npm"
},
{
"name": "fast-diff",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "fast-json-stable-stringify",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "fast-levenshtein",
"direct": false,
"version": "2.0.6",
"ecosystem": "npm"
},
{
"name": "fastq",
"direct": false,
"version": "1.15.0",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "file-entry-cache",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "find-up",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "flat",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "flat-cache",
"direct": false,
"version": "4.0.1",
"ecosystem": "npm"
},
{
"name": "flatted",
"direct": false,
"version": "3.4.2",
"ecosystem": "npm"
},
{
"name": "for-each",
"direct": false,
"version": "0.3.5",
"ecosystem": "npm"
},
{
"name": "foreground-child",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "foreground-child",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "fs.realpath",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "function-bind",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "function.prototype.name",
"direct": false,
"version": "1.1.8",
"ecosystem": "npm"
},
{
"name": "functions-have-names",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "generator-function",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "get-caller-file",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "get-intrinsic",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "get-proto",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "get-symbol-description",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "get-tsconfig",
"direct": false,
"version": "4.8.1",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "10.5.0",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "13.0.6",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "7.2.3",
"ecosystem": "npm"
},
{
"name": "glob-parent",
"direct": false,
"version": "6.0.2",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "13.22.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "13.24.0",
"ecosystem": "npm"
},
{
"name": "globals",
"direct": false,
"version": "14.0.0",
"ecosystem": "npm"
},
{
"name": "globalthis",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "gopd",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "graphemer",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "has-bigints",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-flag",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "has-property-descriptors",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "has-proto",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "has-symbols",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "has-tostringtag",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "hasown",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "he",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "html-escaper",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "5.3.2",
"ecosystem": "npm"
},
{
"name": "ignore",
"direct": false,
"version": "7.0.5",
"ecosystem": "npm"
},
{
"name": "import-fresh",
"direct": false,
"version": "3.3.0",
"ecosystem": "npm"
},
{
"name": "imurmurhash",
"direct": false,
"version": "0.1.4",
"ecosystem": "npm"
},
{
"name": "inflight",
"direct": false,
"version": "1.0.6",
"ecosystem": "npm"
},
{
"name": "inherits",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "internal-slot",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-array-buffer",
"direct": false,
"version": "3.0.5",
"ecosystem": "npm"
},
{
"name": "is-async-function",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-bigint",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-boolean-object",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "is-callable",
"direct": false,
"version": "1.2.7",
"ecosystem": "npm"
},
{
"name": "is-core-module",
"direct": false,
"version": "2.16.1",
"ecosystem": "npm"
},
{
"name": "is-data-view",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "is-date-object",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "is-extglob",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "is-finalizationregistry",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-fullwidth-code-point",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "is-generator-function",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "is-glob",
"direct": false,
"version": "4.0.3",
"ecosystem": "npm"
},
{
"name": "is-map",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-negative-zero",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-number-object",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-path-inside",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "is-plain-obj",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "is-regex",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "is-set",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "is-shared-array-buffer",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "is-string",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-symbol",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-typed-array",
"direct": false,
"version": "1.1.15",
"ecosystem": "npm"
},
{
"name": "is-unicode-supported",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
},
{
"name": "is-weakmap",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "is-weakref",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "is-weakset",
"direct": false,
"version": "2.0.4",
"ecosystem": "npm"
},
{
"name": "isarray",
"direct": false,
"version": "2.0.5",
"ecosystem": "npm"
},
{
"name": "isexe",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-coverage",
"direct": false,
"version": "3.2.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "iterator.prototype",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "jackspeak",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "js-yaml",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "json-buffer",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "json-schema-traverse",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "json-stable-stringify-without-jsonify",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "json5",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "jsx-ast-utils",
"direct": false,
"version": "3.3.5",
"ecosystem": "npm"
},
{
"name": "keyv",
"direct": false,
"version": "4.5.4",
"ecosystem": "npm"
},
{
"name": "language-subtag-registry",
"direct": false,
"version": "0.3.23",
"ecosystem": "npm"
},
{
"name": "language-tags",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "levn",
"direct": false,
"version": "0.4.1",
"ecosystem": "npm"
},
{
"name": "linkify-it",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "locate-path",
"direct": false,
"version": "6.0.0",
"ecosystem": "npm"
},
{
"name": "lodash.camelcase",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "lodash.kebabcase",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "lodash.merge",
"direct": false,
"version": "4.6.2",
"ecosystem": "npm"
},
{
"name": "lodash.snakecase",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "lodash.upperfirst",
"direct": false,
"version": "4.3.1",
"ecosystem": "npm"
},
{
"name": "log-symbols",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "loose-envify",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "10.4.3",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "11.2.6",
"ecosystem": "npm"
},
{
"name": "lunr",
"direct": false,
"version": "2.3.9",
"ecosystem": "npm"
},
{
"name": "lz-utils",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "markdown-it",
"direct": false,
"version": "14.1.1",
"ecosystem": "npm"
},
{
"name": "math-intrinsics",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "mdurl",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.4",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "10.2.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "3.1.5",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "9.0.9",
"ecosystem": "npm"
},
{
"name": "minimist",
"direct": false,
"version": "1.2.8",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "7.1.3",
"ecosystem": "npm"
},
{
"name": "mocha",
"direct": false,
"version": "11.7.5",
"ecosystem": "npm"
},
{
"name": "monocart-coverage-reports",
"direct": false,
"version": "2.12.11",
"ecosystem": "npm"
},
{
"name": "monocart-locator",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "natural-compare",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "object-assign",
"direct": false,
"version": "4.1.1",
"ecosystem": "npm"
},
{
"name": "object-inspect",
"direct": false,
"version": "1.13.4",
"ecosystem": "npm"
},
{
"name": "object-keys",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "object.assign",
"direct": false,
"version": "4.1.7",
"ecosystem": "npm"
},
{
"name": "object.entries",
"direct": false,
"version": "1.1.7",
"ecosystem": "npm"
},
{
"name": "object.fromentries",
"direct": false,
"version": "2.0.8",
"ecosystem": "npm"
},
{
"name": "object.groupby",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "object.hasown",
"direct": false,
"version": "1.1.3",
"ecosystem": "npm"
},
{
"name": "object.values",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "once",
"direct": false,
"version": "1.4.0",
"ecosystem": "npm"
},
{
"name": "optionator",
"direct": false,
"version": "0.9.3",
"ecosystem": "npm"
},
{
"name": "own-keys",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "p-limit",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "p-locate",
"direct": false,
"version": "5.0.0",
"ecosystem": "npm"
},
{
"name": "package-json-from-dist",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "parent-module",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-exists",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "path-is-absolute",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-parse",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "possible-typed-array-names",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "prelude-ls",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "prettier",
"direct": false,
"version": "3.8.3",
"ecosystem": "npm"
},
{
"name": "prettier-linter-helpers",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "prop-types",
"direct": false,
"version": "15.8.1",
"ecosystem": "npm"
},
{
"name": "punycode",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "punycode.js",
"direct": false,
"version": "2.3.1",
"ecosystem": "npm"
},
{
"name": "queue-microtask",
"direct": false,
"version": "1.2.3",
"ecosystem": "npm"
},
{
"name": "react-is",
"direct": false,
"version": "16.13.1",
"ecosystem": "npm"
},
{
"name": "readdirp",
"direct": false,
"version": "4.1.2",
"ecosystem": "npm"
},
{
"name": "reflect.getprototypeof",
"direct": false,
"version": "1.0.10",
"ecosystem": "npm"
},
{
"name": "regexp.prototype.flags",
"direct": false,
"version": "1.5.4",
"ecosystem": "npm"
},
{
"name": "require-directory",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "1.22.6",
"ecosystem": "npm"
},
{
"name": "resolve",
"direct": false,
"version": "2.0.0-next.4",
"ecosystem": "npm"
},
{
"name": "resolve-from",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "resolve-pkg-maps",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "reusify",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "rimraf",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "run-parallel",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "safe-array-concat",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "safe-push-apply",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "safe-regex-test",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "6.3.1",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.6.2",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.7.4",
"ecosystem": "npm"
},
{
"name": "serialize-javascript",
"direct": false,
"version": "7.0.5",
"ecosystem": "npm"
},
{
"name": "set-function-length",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "set-function-name",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "set-proto",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-command",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "shebang-regex",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "side-channel",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "side-channel-list",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-map",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "side-channel-weakmap",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "source-map",
"direct": false,
"version": "0.6.1",
"ecosystem": "npm"
},
{
"name": "source-map-support",
"direct": false,
"version": "0.5.21",
"ecosystem": "npm"
},
{
"name": "stop-iteration-iterator",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "string.prototype.includes",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "string.prototype.matchall",
"direct": false,
"version": "4.0.10",
"ecosystem": "npm"
},
{
"name": "string.prototype.trim",
"direct": false,
"version": "1.2.10",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimend",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "string.prototype.trimstart",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "strip-bom",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "strip-json-comments",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "8.1.1",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "9.4.0",
"ecosystem": "npm"
},
{
"name": "supports-preserve-symlinks-flag",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "synckit",
"direct": false,
"version": "0.11.12",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "text-table",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.16",
"ecosystem": "npm"
},
{
"name": "ts-api-utils",
"direct": false,
"version": "2.5.0",
"ecosystem": "npm"
},
{
"name": "tsconfig-paths",
"direct": false,
"version": "3.15.0",
"ecosystem": "npm"
},
{
"name": "tsx",
"direct": false,
"version": "4.21.0",
"ecosystem": "npm"
},
{
"name": "type-check",
"direct": false,
"version": "0.4.0",
"ecosystem": "npm"
},
{
"name": "type-fest",
"direct": false,
"version": "0.20.2",
"ecosystem": "npm"
},
{
"name": "typed-array-buffer",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "typed-array-byte-length",
"direct": false,
"version": "1.0.3",
"ecosystem": "npm"
},
{
"name": "typed-array-byte-offset",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "typed-array-length",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "typedoc",
"direct": false,
"version": "0.28.19",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.5.4",
"ecosystem": "npm"
},
{
"name": "uc.micro",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "unbox-primitive",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "uri-js",
"direct": false,
"version": "4.4.1",
"ecosystem": "npm"
},
{
"name": "v8-to-istanbul",
"direct": false,
"version": "9.3.0",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "which-boxed-primitive",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "which-builtin-type",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "which-collection",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "which-typed-array",
"direct": false,
"version": "1.1.20",
"ecosystem": "npm"
},
{
"name": "workerpool",
"direct": false,
"version": "9.3.4",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "wrappy",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "y18n",
"direct": false,
"version": "5.0.8",
"ecosystem": "npm"
},
{
"name": "yaml",
"direct": false,
"version": "2.8.3",
"ecosystem": "npm"
},
{
"name": "yargs",
"direct": false,
"version": "17.7.2",
"ecosystem": "npm"
},
{
"name": "yargs-parser",
"direct": false,
"version": "21.1.1",
"ecosystem": "npm"
},
{
"name": "yargs-unparser",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "yocto-queue",
"direct": false,
"version": "0.1.0",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 425,
"direct_count": 0,
"indirect_count": 425
}
},
"maintainership": {
"issues": {
"open_prs": 6,
"merged_prs": 55,
"open_issues": 5,
"closed_ratio": 0.95,
"closed_issues": 96,
"closed_unmerged_prs": 48
},
"bus_factor": 1,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "beaugunderson",
"commits": 421,
"avatar_url": "https://avatars.githubusercontent.com/u/61791?v=4"
},
{
"type": "User",
"login": "dcolebatch",
"commits": 6,
"avatar_url": "https://avatars.githubusercontent.com/u/161612?v=4"
},
{
"type": "User",
"login": "oskar456",
"commits": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/816717?v=4"
},
{
"type": "User",
"login": "leftshift",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/1733162?v=4"
},
{
"type": "User",
"login": "albertorestifo",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/1037048?v=4"
},
{
"type": "User",
"login": "apaprocki",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/767372?v=4"
},
{
"type": "User",
"login": "nullivex",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/2321375?v=4"
},
{
"type": "User",
"login": "jessepeterson",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/694298?v=4"
},
{
"type": "User",
"login": "sanjaymsh",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/66668807?v=4"
},
{
"type": "User",
"login": "ovcharik",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/4432904?v=4"
}
],
"contributors_sampled": 18,
"top_contributor_share": 0.931
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"release.yml"
],
"has_docs_dir": false,
"linter_configs": [
".eslintrc",
".eslintrc.js"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": null,
"reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 9,
"reason": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 1/30 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 16 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 3,
"reason": "dependency not pinned by hash detected -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": null,
"reason": "no releases found",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 9,
"reason": "detected GitHub workflow tokens with excessive permissions",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 2,
"reason": "8 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "e82a6812ac9d16f1300d3c2051fe2cc88c5d9161",
"ran_at": "2026-07-22T22:22:45Z",
"aggregate_score": 5.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-21T01:49:31Z",
"oldest_open_prs": [
{
"number": 206,
"created_at": "2026-06-12T23:06:25Z",
"last_comment_at": "2026-06-12T23:07:23Z",
"last_comment_author": "codecov"
},
{
"number": 207,
"created_at": "2026-06-17T21:03:00Z",
"last_comment_at": "2026-06-17T21:03:59Z",
"last_comment_author": "codecov"
},
{
"number": 208,
"created_at": "2026-06-22T08:36:49Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 209,
"created_at": "2026-06-23T17:04:21Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 210,
"created_at": "2026-06-28T18:49:17Z",
"last_comment_at": "2026-06-28T18:49:59Z",
"last_comment_author": "codecov"
},
{
"number": 211,
"created_at": "2026-07-03T01:54:23Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-05-01T06:28:55Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": [
{
"number": 118,
"created_at": "2020-10-25T06:03:12Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 132,
"created_at": "2021-04-16T04:02:17Z",
"last_comment_at": "2021-07-20T20:05:45Z",
"last_comment_author": "StoneLabs"
},
{
"number": 141,
"created_at": "2021-07-20T10:42:27Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 142,
"created_at": "2021-07-20T20:02:32Z",
"last_comment_at": "2021-07-20T20:07:44Z",
"last_comment_author": "beaugunderson"
},
{
"number": 172,
"created_at": "2024-08-25T17:45:53Z",
"last_comment_at": "2024-11-19T13:56:21Z",
"last_comment_author": "wzrdtales"
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/beaugunderson/ip-address",
"host": "github.com",
"name": "ip-address",
"owner": "beaugunderson"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": "High-Risk Jurisdiction Policy applies a 50% multiplier to weighted overall health and gives it an At risk ceiling of 49.",
"notes": [
{
"code": "jurisdiction_overall_adjustment",
"params": {
"cap": 49,
"pct": 50
}
}
],
"value": 33,
"inputs": {
"security": 43,
"vitality": 66,
"community": 75,
"governance": 63,
"engineering": 79,
"high_risk_jurisdiction_cap": 49,
"high_risk_jurisdiction_multiplier": 50,
"weighted_overall_before_jurisdiction": 66,
"overall_after_jurisdiction_multiplier": 33
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "moderate",
"name": "Vitality",
"value": 66,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 56,
"inputs": {
"commits_last_year": 31,
"human_commit_share": 0.98,
"days_since_last_push": 24,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 24 days ago",
"points": 28.8,
"status": "partial",
"details": [
{
"code": "push_recency",
"params": {
"days": 24
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "31 commits in the last year",
"points": 13.5,
"status": "partial",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 31
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"openssf_scorecard_signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 80,
"inputs": {
"releases_count": 54,
"latest_release_tag": "v10.2.0",
"releases_from_tags": true,
"days_since_latest_release": 82,
"mean_days_between_releases": 105.4
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "54 version tags (no GitHub releases)",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "version_tags_no_releases",
"params": {
"count": 54
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 82 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 82
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~105.4 days",
"points": 19.8,
"status": "partial",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 105.4
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 60,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 60 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 60
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "good",
"name": "Community & Adoption",
"value": 75,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "moderate",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 67,
"inputs": {
"forks": 80,
"stars": 612,
"watchers": 12,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "612 stars",
"points": 45.2,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 612
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "80 forks",
"points": 15.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 80
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "12 watchers",
"points": 5.8,
"status": "partial",
"details": [
{
"code": "watchers",
"params": {
"count": 12
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "excellent",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 100,
"inputs": {
"packages": [
"ip-address"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 367966379
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "367,966,379 downloads/month across npm",
"points": 80,
"status": "met",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 367966379,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 63,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "at_risk",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 34,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 18,
"top_contributor_share": 0.931
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "1 contributor(s) cover half of all commits",
"points": 9,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 1
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 93% of commits",
"points": 1.6,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 93
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "18 contributors",
"points": 13.5,
"status": "met",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 18
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 16 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"merged_prs": 55,
"open_issues": 5,
"closed_issues": 96,
"issue_closed_ratio": 0.95,
"closed_unmerged_prs": 48
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "95% of issues closed",
"points": 44.4,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 95
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "55/103 decided PRs merged",
"points": 20.4,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 55,
"decided": 103
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 1/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"verified_domain"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 68,
"inputs": {
"followers": 444,
"owner_type": "User",
"is_verified": null,
"owner_login": "beaugunderson",
"public_repos": 356,
"account_age_days": 6343
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "personal (user) account",
"points": 10,
"status": "partial",
"details": [
{
"code": "owner_personal",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": "not applicable to user accounts",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_applicable_to_user_accounts",
"params": {}
}
],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "444 followers of beaugunderson",
"points": 19,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 444,
"login": "beaugunderson"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "356 public repos, account ~17 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 356
}
},
{
"code": "account_age_years",
"params": {
"years": 17
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"ip-address"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 82
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "1 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 1,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 82 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 82
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "54 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 54
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 79,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 82,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".eslintrc, .eslintrc.js",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc, .eslintrc.js"
}
}
],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
"points": 18,
"status": "partial",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [
"ipv4",
"ipv6",
"javascript",
"address",
"arpa",
"bigint",
"browser",
"cidr",
"ip",
"netmask",
"parse",
"subnet",
"typescript",
"validate",
"validation"
],
"has_wiki": true,
"homepage": "https://www.npmjs.com/package/ip-address",
"has_readme": true,
"has_docs_dir": false,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://www.npmjs.com/package/ip-address",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": "15 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 15
}
}
],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "at_risk",
"name": "Security",
"value": 43,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized. High-Risk Jurisdiction Policy applies a 50% multiplier to Security posture and gives it an At risk ceiling of 49.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"branch_protection",
"packaging",
"signed_releases"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "jurisdiction_posture_adjustment",
"params": {
"cap": 49,
"pct": 50
}
}
],
"value": 29,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 15,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 3,
"scorecard_aggregate": 5.8,
"high_risk_jurisdiction_cap": 49,
"high_risk_jurisdiction_multiplier": 50,
"security_posture_after_multiplier": 29,
"security_posture_before_jurisdiction": 58
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "14 out of 15 merged PRs checked by a CI test -- score normalized to 9",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 1/30 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 16 contributing companies or organizations",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "update tool detected",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "25 commit(s) and 13 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 3",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "no releases found",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "detected GitHub workflow tokens with excessive permissions",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "8 existing vulnerabilities detected",
"points": 1.5,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 425 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"indirect_dependencies_free_of_known_advisories",
"no_advisories_left_outstanding"
]
}
},
{
"code": "weights_renormalized",
"params": {}
},
{
"code": "advisories_scope_repository",
"params": {
"assessed": 425
}
},
{
"code": "advisories_repo_graph_caveat",
"params": {}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 10,
"affected_packages": 7,
"assessed_packages": 425,
"unassessed_packages": 0,
"affected_by_severity": "high 5, moderate 1, low 1",
"direct_affected_packages": 0
},
"components": [
{
"key": "direct_dependencies_free_of_known_advisories",
"name": "Direct dependencies free of known advisories",
"detail": "no direct dependency carries a known advisory",
"points": 35,
"status": "met",
"details": [
{
"code": "no_direct_advisories",
"params": {}
}
],
"max_points": 35
},
{
"key": "indirect_dependencies_free_of_known_advisories",
"name": "Indirect dependencies free of known advisories",
"detail": "transitive set not separable from development and test dependencies in this scope",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_scope_not_separable",
"params": {}
}
],
"max_points": 25
},
{
"key": "no_advisories_left_outstanding",
"name": "No advisories left outstanding",
"detail": "no advisory carries a publication date",
"points": 0,
"status": "excluded",
"details": [
{
"code": "advisories_no_publication_date",
"params": {}
}
],
"max_points": 40
}
]
},
{
"key": "malicious_dependencies",
"band": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 425,
"malicious_packages": 0,
"direct_malicious_packages": 0,
"withdrawn_malicious_packages": 0,
"installable_malicious_packages": 0
},
"components": [
{
"key": "no_dependency_reported_as_a_malicious_package",
"name": "No dependency reported as a malicious package",
"detail": "no dependency is reported as a malicious package",
"points": 100,
"status": "met",
"details": [
{
"code": "no_malicious_dependencies",
"params": {}
}
],
"max_points": 100
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "moderate",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 50,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": true,
"exposures": [
{
"role": "top_contributor",
"count": 1,
"country": "Russia"
}
],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 23
},
"components": [
{
"key": "policy_exposure_multiplier",
"name": "Policy exposure multiplier",
"detail": "Russia: top_contributor (1)",
"points": 50,
"status": "partial",
"details": [
{
"code": "jurisdiction_exposure",
"params": {
"role": "top_contributor",
"count": 1,
"country": "Russia"
}
}
],
"max_points": 100
}
]
}
],
"description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
},
{
"key": "ai_readiness",
"band": "moderate",
"name": "AI Readiness",
"value": 54,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "critical",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 15,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.286,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "28 of 98 human commits state their intent (structured subject or explanatory body)",
"points": 15.2,
"status": "partial",
"details": [
{
"code": "legible_history",
"params": {
"legible": 28,
"sampled": 98
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"package-lock.json"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"tsconfig.json"
],
"agent_commit_share": 0,
"toolchain_manifests": [],
"dependency_bot_commit_share": 0.02
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".eslintrc, .eslintrc.js",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".eslintrc, .eslintrc.js"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "no agent-authored commits among the last 100",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_authored_commits",
"params": {
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "2 of the last 100 commits are automated dependency updates",
"points": 8,
"status": "met",
"details": [
{
"code": "dependency_bot_commits",
"params": {
"count": 2,
"sampled": 100
}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "TypeScript",
"largest_source_bytes": 43711,
"source_files_sampled": 15,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "TypeScript (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "TypeScript"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/15 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 15,
"oversized": 0
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
],
"report_type": "repository",
"generated_at": "2026-07-22T22:23:04.116636Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/beaugunderson/ip-address.svg",
"full_name": "beaugunderson/ip-address",
"license_state": "standard",
"license_spdx": "MIT"
}