Public record
Software health reportschema 0.27.0 · metrics 2.5.0 · 2026-08-01 12:41 UTC

webrecorder / warcio.js

JS Streaming WARC IO optimized for Browser and Node

TypeScriptMIT★ 55 stars⑂ 7 forkssince Apr 2020View on GitHub ↗
KindLibraryCommand-line toolhow this is determined

webrecorder/warcio.js holds a health index of 69 out of 100, placing it in the Good band. It scores highest on Vitality (68/100) and lowest on Security (55/100). It was last updated 4 days ago. A single contributor accounts for most of its recent work.

69
overall / 100
Good

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean, calibrated against the distribution of the public record so bands carry percentile meaning; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At Risk ceiling of 34.

69
Exceptional93-100The record's top tier (≈ top 5%); essentially all checked criteria met
Excellent80-92Strong across the board; minor gaps
Good65-79Healthy; gaps are limited and manageable
Moderate50-64Acceptable with notable gaps; review recommended
Weak35-49Material weaknesses across several areas
At Risk20-34Significant weaknesses; adoption warrants caution
Critical1-19Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

The weighted overall 62 is calibrated to 69 on the published index scale (record calibration 2026-08-02).

Ownership

WebrecorderOrganization
453 followers80 public repossince Aug 2015

This repository is backed by an organization — shared, accountable stewardship that can outlive any single maintainer.

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publishTags
npmwarcio2.4.1124,735539 days agowarcweb-archiving

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

68Good · 21% of overall
How it's scored
36/36Push recency — last push 4 days ago
4.8/36Commit cadence — 7/52 weeks with commits
9.4/18Commit volume — 10 commits in the last year
2/10OpenSSF Scorecard: Maintained — 3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
Inputs used
commits_last_year10
human_commit_share0.947
days_since_last_push4
active_weeks_last_year7
How it's scored
27/27Ships releases — 25 releases published
36/36Release recency — latest release 9 days ago
19.8/27Release cadence — a release every ~67.8 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count25
latest_release_tagv2.4.11
releases_from_tagsno
days_since_latest_release9
mean_days_between_releases67.8
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

55Moderate · 17% of overall
How it's scored
28.1/60Stars — 55 stars
6.5/25Forks — 7 forks
1.7/15Watchers — 3 watchers
Inputs used
forks7
stars55
watchers3
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
0/18CONTRIBUTING guide
13.5/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
readme_badges
has_contributingno
has_issue_templateno
has_code_of_conductyes
readme_badge_services
has_pull_request_templateno
How it's scored
58.6/80Monthly downloads — 24,735 downloads/month across npm
0/20Registry dependents — not reported by this ecosystem
Inputs used
packageswarcio
dependents
ecosystemsnpm
total_downloads
monthly_downloads24,735
Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

67Good · 23% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
2.7/22.5Commit distribution — top contributor authored 88% of commits
10.8/13.5Contributor breadth — 8 contributors
10/10OpenSSF Scorecard: Contributors — project has 4 contributing companies or organizations
Inputs used
bus_factor1
contributors_sampled8
top_contributor_share0.878
How it's scored
31.9/42Issue resolution — 76% of issues closed
26.7/30PR acceptance — 65/73 decided PRs merged
0/13Newcomer PR acceptance — no first-time contributor's PR decided in 30d
7.5/15OpenSSF Scorecard: Code-Review — Found 13/25 approved changesets -- score normalized to 5
Inputs used
merged_prs65
open_issues6
closed_issues19
prs_merged_7d
prs_decided_7d
prs_merged_30d
prs_decided_30d
issue_closed_ratio0.76
closed_unmerged_prs8
first_time_authors_30d
first_time_prs_merged_30d
first_time_prs_decided_30d
Excluded from scoring (no data or not applicable): newcomer_pr_acceptance. Remaining weights renormalized.
How it's scored
30/30Ownership backing — organization-owned
0/20Verified domain
19.1/25Owner reach — 453 followers of webrecorder
25/25Track record — 80 public repos, account ~10 yr old
Inputs used
followers453
owner_typeOrganization
is_verified
owner_loginwebrecorder
public_repos80
account_age_days4,012

Package maintenance

100Exceptional
How it's scored
25/25Published & resolvable — 1 package(s) on npm
35/35Publish recency — latest publish 9 days ago
20/20Version history — 53 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packageswarcio
ecosystemsnpm
any_deprecatedno
min_days_since_publish9

Engineering Quality

Are baseline engineering and documentation practices in place?

62Moderate · 19% of overall
How it's scored
24/24CI workflows — 2 workflow(s)
24/24Tests present
16/16Linter config — .eslintrc.cjs
0/9.6Pre-commit hooks
0/6.4.editorconfig
6/20OpenSSF Scorecard: CI-Tests — 8 out of 25 merged PRs checked by a CI test -- score normalized to 3
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

50Moderate
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

55Moderate · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0.8/2.5CI-Tests — 8 out of 25 merged PRs checked by a CI test -- score normalized to 3
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
3.8/7.5Code-Review — Found 13/25 approved changesets -- score normalized to 5
2.5/2.5Contributors — project has 4 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — license file detected
1.5/7.5Maintained — 3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
5/5Packaging — packaging workflow detected
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
1.5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 21 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate4.4
Excluded from scoring (no data or not applicable): signed_releases. Remaining weights renormalized.

Dependency advisories

100Exceptional
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
25/25Indirect dependencies free of known advisories — no indirect dependency carries a known advisory
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages32
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:warcio@2.4.11 runtime dependency closure — what installing the published package pulls in — 32 packages. Reachability is not analyzed.

AI Readiness

How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight (4%): agent tooling is a real maintenance signal, but a repository with none can still reach 100/100.

61Moderate · 4% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 77 of 90 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.856
agent_instruction_files
agent_instruction_max_bytes
How it's scored
0/18One-command bootstrap
22/22Automated tests
11/11Lint / format config — .eslintrc.cjs
11/11Static type checking — test/tsconfig.json, tsconfig.json
10/10Reproducible environment — lockfile
0/10Demonstrated agent practice — no agent-authored commits among the last 95
8/8Automated maintenance — 5 of the last 95 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Inputs used
has_nixno
has_testsyes
lockfilesyarn.lock
has_dockerfileno
typed_languageyes
bootstrap_files
has_devcontainerno
has_linter_configyes
typecheck_configstest/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.053
How it's scored
45/45Type-checkable code — TypeScript (statically typed)
55/55Manageable file sizes — 0/30 source files over 60KB
Inputs used
primary_languageTypeScript
largest_source_bytes36,056
source_files_sampled30
oversized_source_files0

Key facts

55GitHub stars
8contributors
10commits, last 12 months
4days since last push
25releases
1bus factor
6open issues
npmpackage ecosystems

Data collection warnings

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

More detail

Star and fork history 0 ★ / 7 ⇿
0Stars
7Forks
23Releases

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

1234567712020-112023-062026-02
Major 1Minor 4Patch 13

Each point covers 5 days.

OpenSSF Scorecard 4.4 / 10
4.4aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).Scorecard v5.5.0 · 2026-08-01 12:41 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
3CI-Tests8 out of 25 merged PRs checked by a CI test -- score normalized to 3
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
5Code-ReviewFound 13/25 approved changesets -- score normalized to 5
10Contributorsproject has 4 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
2Maintained3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2
10Packagingpackaging workflow detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
3Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities21 existing vulnerabilities detected
Direct dependencies 8
RegistryPackageVersion constraintManifest
npm@types/pako^1.0.7package.json
npm@types/stream-buffers^3.0.7package.json
npmbase32-encode^2.0.0package.json
npmhash-wasm^4.9.0package.json
npmpako^1.0.11package.json
npmtempy^3.1.0package.json
npmuuid-random^1.3.2package.json
npmyargs^17.7.2package.json
All dependencies 449

Full resolved dependency set from the GitHub dependency graph: 9 direct and 440 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
npm@types/pako1.0.7direct
npm@types/stream-buffers3.0.7direct
npmbase32-encode2.0.0direct
npmhash-wasm4.9.0direct
npmpako1.0.11direct
npmtempy3.1.0direct
npmuuid-random1.3.2direct
npmyargs17.6.2direct
npmyargs17.7.2direct
npm@ampproject/remapping2.2.0indirect
npm@babel/code-frame7.12.11indirect
npm@babel/code-frame7.18.6indirect
npm@babel/code-frame7.22.13indirect
npm@babel/compat-data7.19.4indirect
npm@babel/core7.19.3indirect
npm@babel/generator7.23.0indirect
npm@babel/helper-compilation-targets7.19.3indirect
npm@babel/helper-environment-visitor7.22.20indirect
npm@babel/helper-function-name7.23.0indirect
npm@babel/helper-hoist-variables7.22.5indirect
npm@babel/helper-module-imports7.18.6indirect
npm@babel/helper-module-transforms7.19.0indirect
npm@babel/helper-plugin-utils7.22.5indirect
npm@babel/helper-simple-access7.19.4indirect
npm@babel/helper-split-export-declaration7.22.6indirect
npm@babel/helper-string-parser7.22.5indirect
npm@babel/helper-validator-identifier7.22.20indirect
npm@babel/helper-validator-option7.18.6indirect
npm@babel/helpers7.19.4indirect
npm@babel/highlight7.22.20indirect
npm@babel/parser7.23.0indirect
npm@babel/plugin-syntax-async-generators7.8.4indirect
npm@babel/plugin-syntax-bigint7.8.3indirect
npm@babel/plugin-syntax-class-properties7.12.13indirect
npm@babel/plugin-syntax-import-meta7.10.4indirect
npm@babel/plugin-syntax-json-strings7.8.3indirect
npm@babel/plugin-syntax-jsx7.22.5indirect
npm@babel/plugin-syntax-logical-assignment-operators7.10.4indirect
npm@babel/plugin-syntax-nullish-coalescing-operator7.8.3indirect
npm@babel/plugin-syntax-numeric-separator7.10.4indirect
npm@babel/plugin-syntax-object-rest-spread7.8.3indirect
npm@babel/plugin-syntax-optional-catch-binding7.8.3indirect
npm@babel/plugin-syntax-optional-chaining7.8.3indirect
npm@babel/plugin-syntax-top-level-await7.14.5indirect
npm@babel/plugin-syntax-typescript7.22.5indirect
npm@babel/template7.22.15indirect
npm@babel/traverse7.23.2indirect
npm@babel/types7.23.0indirect
npm@bcoe/v8-coverage0.2.3indirect
npm@esbuild/android-arm0.18.17indirect
npm@esbuild/android-arm640.18.17indirect
npm@esbuild/android-x640.18.17indirect
npm@esbuild/darwin-arm640.18.17indirect
npm@esbuild/darwin-x640.18.17indirect
npm@esbuild/freebsd-arm640.18.17indirect
npm@esbuild/freebsd-x640.18.17indirect
npm@esbuild/linux-arm0.18.17indirect
npm@esbuild/linux-arm640.18.17indirect
npm@esbuild/linux-ia320.18.17indirect
npm@esbuild/linux-loong640.18.17indirect
npm@esbuild/linux-mips64el0.18.17indirect
npm@esbuild/linux-ppc640.18.17indirect
npm@esbuild/linux-riscv640.18.17indirect
npm@esbuild/linux-s390x0.18.17indirect
npm@esbuild/linux-x640.18.17indirect
npm@esbuild/netbsd-x640.18.17indirect
npm@esbuild/openbsd-x640.18.17indirect
npm@esbuild/sunos-x640.18.17indirect
npm@esbuild/win32-arm640.18.17indirect
npm@esbuild/win32-ia320.18.17indirect
npm@esbuild/win32-x640.18.17indirect
npm@eslint-community/eslint-utils4.4.0indirect
npm@eslint-community/regexpp4.11.0indirect
npm@eslint/eslintrc2.1.4indirect
npm@eslint/js8.57.0indirect
npm@humanwhocodes/config-array0.11.14indirect
npm@humanwhocodes/module-importer1.0.1indirect
npm@humanwhocodes/object-schema2.0.3indirect
npm@istanbuljs/load-nyc-config1.0.0indirect
npm@istanbuljs/schema0.1.2indirect
npm@jest/console29.6.2indirect
npm@jest/core29.6.2indirect
npm@jest/environment29.6.2indirect
npm@jest/expect29.6.2indirect
npm@jest/expect-utils29.6.2indirect
npm@jest/fake-timers29.6.2indirect
npm@jest/globals29.6.2indirect
npm@jest/reporters29.6.2indirect
npm@jest/schemas29.6.0indirect
npm@jest/source-map29.6.0indirect
npm@jest/test-result29.6.2indirect
npm@jest/test-sequencer29.6.2indirect
npm@jest/transform29.6.2indirect
npm@jest/types29.6.1indirect
npm@jridgewell/gen-mapping0.1.1indirect
npm@jridgewell/gen-mapping0.3.2indirect
npm@jridgewell/resolve-uri3.1.0indirect
npm@jridgewell/set-array1.1.2indirect
npm@jridgewell/sourcemap-codec1.4.14indirect
npm@jridgewell/trace-mapping0.3.18indirect
npm@nodelib/fs.scandir2.1.5indirect
npm@nodelib/fs.stat2.0.5indirect
npm@nodelib/fs.walk1.2.8indirect
npm@sinclair/typebox0.27.8indirect
npm@sinonjs/commons3.0.0indirect
npm@sinonjs/fake-timers10.3.0indirect
npm@types/babel__core7.20.1indirect
npm@types/babel__generator7.6.4indirect
npm@types/babel__template7.4.1indirect
npm@types/babel__traverse7.20.1indirect
npm@types/color-name1.1.1indirect
npm@types/graceful-fs4.1.6indirect
npm@types/istanbul-lib-coverage2.0.4indirect
npm@types/istanbul-lib-report3.0.0indirect
npm@types/istanbul-reports3.0.1indirect
npm@types/jest29.2.3indirect
npm@types/json-schema7.0.11indirect
npm@types/node18.11.9indirect
npm@types/semver7.3.13indirect
npm@types/stack-utils2.0.1indirect
npm@types/yargs17.0.17indirect
npm@types/yargs-parser21.0.0indirect
npm@typescript-eslint/eslint-plugin8.2.0indirect
npm@typescript-eslint/parser8.2.0indirect
npm@typescript-eslint/scope-manager5.62.0indirect
npm@typescript-eslint/scope-manager8.2.0indirect
npm@typescript-eslint/type-utils8.2.0indirect
npm@typescript-eslint/types5.62.0indirect
npm@typescript-eslint/types8.2.0indirect
npm@typescript-eslint/typescript-estree5.62.0indirect
npm@typescript-eslint/typescript-estree8.2.0indirect
npm@typescript-eslint/utils5.62.0indirect
npm@typescript-eslint/utils8.2.0indirect
npm@typescript-eslint/visitor-keys5.62.0indirect
npm@typescript-eslint/visitor-keys8.2.0indirect
npm@ungap/structured-clone1.2.0indirect
npmacorn8.12.1indirect
npmacorn-jsx5.3.2indirect
npmajv6.12.6indirect
npmansi-escapes4.3.2indirect
npmansi-regex5.0.1indirect
npmansi-styles3.2.1indirect
npmansi-styles4.2.1indirect
npmansi-styles5.2.0indirect
npmany-promise1.3.0indirect
npmanymatch3.1.2indirect
npmargparse1.0.10indirect
npmargparse2.0.1indirect
npmarray-union2.1.0indirect
npmbabel-jest29.6.2indirect
npmbabel-plugin-istanbul6.1.1indirect
npmbabel-plugin-jest-hoist29.5.0indirect
npmbabel-preset-current-node-syntax1.0.1indirect
npmbabel-preset-jest29.5.0indirect
npmbalanced-match1.0.0indirect
npmbinary-extensions2.0.0indirect
npmbrace-expansion1.1.11indirect
npmbrace-expansion2.0.1indirect
npmbraces3.0.3indirect
npmbrowserslist4.21.4indirect
npmbs-logger0.2.6indirect
npmbser2.1.1indirect
npmbuffer-from1.1.2indirect
npmbundle-require4.0.1indirect
npmcac6.7.14indirect
npmcallsites3.1.0indirect
npmcamelcase5.3.1indirect
npmcamelcase6.3.0indirect
npmcaniuse-lite1.0.30001420indirect
npmchalk2.4.2indirect
npmchalk4.1.0indirect
npmchar-regex1.0.2indirect
npmchokidar3.5.3indirect
npmci-info3.5.0indirect
npmcjs-module-lexer1.2.3indirect
npmcliui8.0.1indirect
npmco4.6.0indirect
npmcollect-v8-coverage1.0.2indirect
npmcolor-convert1.9.3indirect
npmcolor-convert2.0.1indirect
npmcolor-name1.1.3indirect
npmcolor-name1.1.4indirect
npmcommander4.1.1indirect
npmconcat-map0.0.1indirect
npmconvert-source-map1.7.0indirect
npmconvert-source-map2.0.0indirect
npmcross-fetch4.0.0indirect
npmcross-spawn7.0.6indirect
npmcrypto-random-string4.0.0indirect
npmdebug4.3.4indirect
npmdedent1.5.1indirect
npmdeep-is0.1.4indirect
npmdeepmerge4.3.1indirect
npmdetect-newline3.1.0indirect
npmdiff-sequences29.4.3indirect
npmdir-glob3.0.1indirect
npmdoctrine3.0.0indirect
npmelectron-to-chromium1.4.283indirect
npmemittery0.13.1indirect
npmemoji-regex8.0.0indirect
npmerror-ex1.3.2indirect
npmesbuild0.18.17indirect
npmescalade3.1.1indirect
npmescape-string-regexp1.0.5indirect
npmescape-string-regexp2.0.0indirect
npmescape-string-regexp4.0.0indirect
npmeslint8.57.0indirect
npmeslint-config-prettier9.1.0indirect
npmeslint-plugin-deprecation1.5.0indirect
npmeslint-scope5.1.1indirect
npmeslint-scope7.2.2indirect
npmeslint-visitor-keys3.4.3indirect
npmespree9.6.1indirect
npmesprima4.0.1indirect
npmesquery1.6.0indirect
npmesrecurse4.3.0indirect
npmestraverse4.3.0indirect
npmestraverse5.3.0indirect
npmesutils2.0.3indirect
npmexeca5.1.1indirect
npmexit0.1.2indirect
npmexpect29.6.2indirect
npmfast-deep-equal3.1.3indirect
npmfast-glob3.2.12indirect
npmfast-json-stable-stringify2.1.0indirect
npmfast-levenshtein2.0.6indirect
npmfastq1.13.0indirect
npmfb-watchman2.0.2indirect
npmfile-entry-cache6.0.1indirect
npmfill-range7.1.1indirect
npmfind-up4.1.0indirect
npmfind-up5.0.0indirect
npmflat-cache3.0.4indirect
npmflatted3.1.1indirect
npmfs.realpath1.0.0indirect
npmfsevents2.3.2indirect
npmfunction-bind1.1.1indirect
npmgensync1.0.0-beta.2indirect
npmget-caller-file2.0.5indirect
npmget-stream6.0.1indirect
npmglob7.1.6indirect
npmglob-parent5.1.2indirect
npmglob-parent6.0.2indirect
npmglobals11.12.0indirect
npmglobals13.24.0indirect
npmglobby11.1.0indirect
npmgraceful-fs4.2.10indirect
npmgraphemer1.4.0indirect
npmhas1.0.3indirect
npmhas-flag3.0.0indirect
npmhas-flag4.0.0indirect
npmhtml-escaper2.0.2indirect
npmhuman-signals2.1.0indirect
npmignore5.3.2indirect
npmimport-fresh3.3.0indirect
npmimport-local3.1.0indirect
npmimurmurhash0.1.4indirect
npminflight1.0.6indirect
npminherits2.0.4indirect
npmis-arrayish0.2.1indirect
npmis-binary-path2.1.0indirect
npmis-core-module2.12.1indirect
npmis-extglob2.1.1indirect
npmis-fullwidth-code-point3.0.0indirect
npmis-generator-fn2.1.0indirect
npmis-glob4.0.3indirect
npmis-number7.0.0indirect
npmis-path-inside3.0.3indirect
npmis-stream2.0.0indirect
npmis-stream3.0.0indirect
npmisexe2.0.0indirect
npmistanbul-lib-coverage3.2.0indirect
npmistanbul-lib-instrument5.2.1indirect
npmistanbul-lib-report3.0.1indirect
npmistanbul-lib-source-maps4.0.1indirect
npmistanbul-reports3.1.6indirect
npmjest29.6.2indirect
npmjest-changed-files29.5.0indirect
npmjest-circus29.6.2indirect
npmjest-cli29.6.2indirect
npmjest-config29.6.2indirect
npmjest-diff29.6.2indirect
npmjest-docblock29.4.3indirect
npmjest-each29.6.2indirect
npmjest-environment-node29.6.2indirect
npmjest-expect-message1.1.3indirect
npmjest-get-type29.4.3indirect
npmjest-haste-map29.6.2indirect
npmjest-leak-detector29.6.2indirect
npmjest-matcher-utils29.6.2indirect
npmjest-message-util29.6.2indirect
npmjest-mock29.6.2indirect
npmjest-pnp-resolver1.2.3indirect
npmjest-regex-util29.4.3indirect
npmjest-resolve29.6.2indirect
npmjest-resolve-dependencies29.6.2indirect
npmjest-runner29.6.2indirect
npmjest-runtime29.6.2indirect
npmjest-snapshot29.6.2indirect
npmjest-util29.6.2indirect
npmjest-validate29.6.2indirect
npmjest-watcher29.6.2indirect
npmjest-worker29.6.2indirect
npmjoycon3.1.1indirect
npmjs-tokens4.0.0indirect
npmjs-yaml3.14.1indirect
npmjs-yaml4.1.0indirect
npmjsesc2.5.2indirect
npmjson-parse-even-better-errors2.3.1indirect
npmjson-schema-traverse0.4.1indirect
npmjson-stable-stringify-without-jsonify1.0.1indirect
npmjson52.2.3indirect
npmkleur3.0.3indirect
npmleven3.1.0indirect
npmlevn0.4.1indirect
npmlilconfig2.1.0indirect
npmlines-and-columns1.1.6indirect
npmload-tsconfig0.2.5indirect
npmlocate-path5.0.0indirect
npmlocate-path6.0.0indirect
npmlodash.memoize4.1.2indirect
npmlodash.merge4.6.2indirect
npmlodash.sortby4.7.0indirect
npmmake-dir4.0.0indirect
npmmake-error1.3.6indirect
npmmakeerror1.0.12indirect
npmmerge-stream2.0.0indirect
npmmerge21.4.1indirect
npmmicromatch4.0.8indirect
npmmimic-fn2.1.0indirect
npmminimatch3.1.2indirect
npmminimatch9.0.5indirect
npmms2.1.2indirect
npmmz2.7.0indirect
npmnatural-compare1.4.0indirect
npmnode-fetch2.7.0indirect
npmnode-int640.4.0indirect
npmnode-releases2.0.6indirect
npmnormalize-path3.0.0indirect
npmnpm-run-path4.0.1indirect
npmobject-assign4.1.1indirect
npmonce1.4.0indirect
npmonetime5.1.2indirect
npmoptionator0.9.4indirect
npmp-limit2.3.0indirect
npmp-limit3.1.0indirect
npmp-locate4.1.0indirect
npmp-locate5.0.0indirect
npmp-try2.2.0indirect
npmparent-module1.0.1indirect
npmparse-json5.2.0indirect
npmpath-exists4.0.0indirect
npmpath-is-absolute1.0.1indirect
npmpath-key3.1.1indirect
npmpath-parse1.0.7indirect
npmpath-type4.0.0indirect
npmpicocolors1.0.0indirect
npmpicomatch2.3.1indirect
npmpirates4.0.5indirect
npmpkg-dir4.2.0indirect
npmpostcss-load-config4.0.1indirect
npmprelude-ls1.2.1indirect
npmprettier3.3.3indirect
npmpretty-format29.6.2indirect
npmprompts2.4.2indirect
npmpunycode2.1.1indirect
npmpure-rand6.0.2indirect
npmqueue-microtask1.2.3indirect
npmreact-is18.2.0indirect
npmreaddirp3.6.0indirect
npmrequire-directory2.1.1indirect
npmresolve1.22.2indirect
npmresolve-cwd3.0.0indirect
npmresolve-from4.0.0indirect
npmresolve-from5.0.0indirect
npmresolve.exports2.0.2indirect
npmreusify1.0.4indirect
npmrimraf3.0.2indirect
npmrollup3.29.5indirect
npmrun-parallel1.2.0indirect
npmsafe-buffer5.1.2indirect
npmsemver6.3.1indirect
npmsemver7.6.3indirect
npmshebang-command2.0.0indirect
npmshebang-regex3.0.0indirect
npmsignal-exit3.0.7indirect
npmsisteransi1.0.5indirect
npmslash3.0.0indirect
npmsource-map0.6.1indirect
npmsource-map0.8.0-beta.0indirect
npmsource-map-support0.5.13indirect
npmsprintf-js1.0.3indirect
npmstack-utils2.0.5indirect
npmstream-buffers3.0.2indirect
npmstring-length4.0.2indirect
npmstring-width4.2.3indirect
npmstrip-ansi6.0.1indirect
npmstrip-bom4.0.0indirect
npmstrip-final-newline2.0.0indirect
npmstrip-json-comments3.1.1indirect
npmsucrase3.28.0indirect
npmsupports-color5.5.0indirect
npmsupports-color7.1.0indirect
npmsupports-color8.1.1indirect
npmsupports-preserve-symlinks-flag1.0.0indirect
npmtemp-dir3.0.0indirect
npmtest-exclude6.0.0indirect
npmtext-table0.2.0indirect
npmthenify3.3.1indirect
npmthenify-all1.6.0indirect
npmtmpl1.0.5indirect
npmto-data-view2.0.0indirect
npmto-fast-properties2.0.0indirect
npmto-regex-range5.0.1indirect
npmtr460.0.3indirect
npmtr461.0.1indirect
npmtree-kill1.2.2indirect
npmts-api-utils1.3.0indirect
npmts-interface-checker0.1.13indirect
npmts-jest29.1.1indirect
npmtslib1.14.1indirect
npmtslib2.4.1indirect
npmtsup7.2.0indirect
npmtsutils3.21.0indirect
npmtype-check0.4.0indirect
npmtype-detect4.0.8indirect
npmtype-fest0.20.2indirect
npmtype-fest0.21.3indirect
npmtype-fest1.4.0indirect
npmtype-fest2.19.0indirect
npmtypescript5.1.6indirect
npmunique-string3.0.0indirect
npmupdate-browserslist-db1.0.10indirect
npmuri-js4.4.1indirect
npmv8-to-istanbul9.1.0indirect
npmwalker1.0.8indirect
npmwebidl-conversions3.0.1indirect
npmwebidl-conversions4.0.2indirect
npmwhatwg-url5.0.0indirect
npmwhatwg-url7.1.0indirect
npmwhich2.0.2indirect
npmword-wrap1.2.5indirect
npmwrap-ansi7.0.0indirect
npmwrappy1.0.2indirect
npmwrite-file-atomic4.0.2indirect
npmy18n5.0.8indirect
npmyaml2.3.1indirect
npmyargs-parser21.1.1indirect
npmyocto-queue0.1.0indirect
Dependency advisories 0

Installing npm:warcio@2.4.11 pulls in 32 packages, direct and transitive: 0 carry known advisories, of which 0 are direct dependencies.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1222,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 6968,
        "TypeScript": 174824
      },
      "pushed_at": "2026-07-27T21:21:39Z",
      "created_at": "2020-04-07T22:52:02Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-27T21:21:40Z",
      "description": "JS Streaming WARC IO optimized for Browser and Node",
      "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://webrecorder.net/",
      "name": "Webrecorder",
      "type": "Organization",
      "login": "webrecorder",
      "company": null,
      "location": "The Web!",
      "followers": 453,
      "avatar_url": "https://avatars.githubusercontent.com/u/13686290?v=4",
      "created_at": "2015-08-06T23:44:34Z",
      "is_verified": null,
      "public_repos": 80,
      "account_age_days": 4012
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.4.11",
          "kind": "patch",
          "published_at": "2026-07-23T00:37:58Z"
        },
        {
          "tag": "v2.4.10",
          "kind": "patch",
          "published_at": "2026-02-17T02:39:55Z"
        },
        {
          "tag": "v2.4.9",
          "kind": "patch",
          "published_at": "2026-01-28T22:24:36Z"
        },
        {
          "tag": "v2.4.8",
          "kind": "patch",
          "published_at": "2026-01-24T00:02:42Z"
        },
        {
          "tag": "v2.4.7",
          "kind": "patch",
          "published_at": "2025-09-18T19:12:04Z"
        },
        {
          "tag": "v2.4.6",
          "kind": "patch",
          "published_at": "2025-09-18T03:19:10Z"
        },
        {
          "tag": "v2.4.5",
          "kind": "patch",
          "published_at": "2025-09-04T01:50:47Z"
        },
        {
          "tag": "v2.4.4",
          "kind": "patch",
          "published_at": "2025-03-28T17:51:20Z"
        },
        {
          "tag": "v2.4.3",
          "kind": "patch",
          "published_at": "2024-12-14T02:50:57Z"
        },
        {
          "tag": "v2.4.2",
          "kind": "patch",
          "published_at": "2024-11-20T01:21:41Z"
        },
        {
          "tag": "v2.4.1",
          "kind": "patch",
          "published_at": "2024-11-19T21:53:51Z"
        },
        {
          "tag": "v2.4.0",
          "kind": "minor",
          "published_at": "2024-11-14T06:38:54Z"
        },
        {
          "tag": "v2.4.0-beta.3",
          "kind": "prerelease",
          "published_at": "2024-11-14T01:25:50Z"
        },
        {
          "tag": "2.4.0-beta.2",
          "kind": "prerelease",
          "published_at": "2024-11-07T03:02:12Z"
        },
        {
          "tag": "v2.4.0-beta.1",
          "kind": "prerelease",
          "published_at": "2024-11-07T02:34:24Z"
        },
        {
          "tag": "v2.4.0-beta.0",
          "kind": "prerelease",
          "published_at": "2024-11-06T02:05:07Z"
        },
        {
          "tag": "v2.3.1",
          "kind": "patch",
          "published_at": "2024-09-05T15:42:59Z"
        },
        {
          "tag": "2.3.0",
          "kind": "minor",
          "published_at": "2024-08-28T20:19:28Z"
        },
        {
          "tag": "v2.3.0-beta.0",
          "kind": "prerelease",
          "published_at": "2024-08-23T20:15:38Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2023-11-01T23:06:05Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2023-08-10T00:21:11Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2023-03-23T23:31:39Z"
        },
        {
          "tag": "2.0.1",
          "kind": "patch",
          "published_at": "2022-12-17T07:17:16Z"
        },
        {
          "tag": "2.0.0",
          "kind": "major",
          "published_at": "2022-12-16T07:43:39Z"
        },
        {
          "tag": "1.6.2",
          "kind": "patch",
          "published_at": "2022-12-16T03:36:23Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "fcbd8c0287b9c8555c31ecfd9b107c6f2941a6e8",
          "body": "tests: add tests for multi-value types/functions",
          "is_bot": false,
          "headline": "Merge pull request #102 from webrecorder/misty/utils_multi_value_tests",
          "author_name": "Misty De Méo",
          "author_login": "mistydemeo",
          "committed_at": "2026-07-27T21:21:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "376914dc7b65903be0f6df86cc5ccc09d891be2f",
          "body": "This would have caught the issue in #100 if we'd had these tests at the time.",
          "is_bot": false,
          "headline": "tests: add tests for multi-value types/functions",
          "author_name": "Misty De Meo",
          "author_login": "mistydemeo",
          "committed_at": "2026-07-23T19:16:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "60a28c63738680383012081d75f3fa13a2776bfc",
          "body": "The browsertrix-crawler will try to write this header, but since it's\nbeen missing from this list we were rejecting it at write-time.\n\nSee:\nhttps://github.com/webrecorder/browsertrix-crawler/blob/b27833fe40eccbac0e122a50e7786f3e61b100a2/src/util/recorder.ts#L1936-L1939\n\n\nhttps://github.com/webrecorder/browsertrix-crawler/blob/b27833fe40eccbac0e122a50e7786f3e61b100a2/src/util/recorder.ts#L2323\n\n---------\n\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>",
          "is_bot": false,
          "headline": "fix: allow WARC-JSON-Metadata header (#100)",
          "author_name": "Misty De Méo",
          "author_login": "mistydemeo",
          "committed_at": "2026-07-23T00:32:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c472da23e5f47254650252895a4fa76d1682a992",
          "body": "Avoid extremely long POST request bodies. Set limit to 4K, to match\ncdxj-indexer\nAllow overriding if needed.\nbump to 2.4.10",
          "is_bot": false,
          "headline": "Limit query size to 4K length (#96)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2026-02-17T02:28:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "002c5febd8bb22cec46875d37a5a92cf81dd9b99",
          "body": "- allow only certain WARC headers to be multi-value\n- disallow certain HTTP headers to be multi-value, allow others by\ndefault\n- bump to 2.4.9",
          "is_bot": false,
          "headline": "better multi-value header validation: (#95)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2026-01-28T22:21:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f94cffd1b5ae3f12bf9a7518f3b43c60bb74e4c5",
          "body": null,
          "is_bot": false,
          "headline": "ci: update release script for latest npm security reqs",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2026-01-24T00:01:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3aca1cf31bd49269e661d93b79d3139989e57d99",
          "body": "- don't throw error on unexpected multi-value headers\n- fix append() in HeadersMultiMap() to store multiple value for any\nheaders\n\nbump to 2.4.8",
          "is_bot": false,
          "headline": "allow any header value to be multi-valued (#94)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2026-01-23T23:03:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46d4e32f0fcc37320ab5a9d1c6ef3f0dbcda2d33",
          "body": "follow up to #91 and #92:\n- rename includeHeadersSize to returnPayloadOnlySize for clarity,\ndefault to false\n- if returnPayloadOnlySize is true, still include total size in\nContent-Length!\n- fix returning total size or payload only size on repeated calls\n- tests: add tests for with and without return payload only size\n- tests: add test for payloadDigestForRevisit\n- bump to 2.4.7",
          "is_bot": false,
          "headline": "digestrecord include headers size fix: (#93)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2025-09-18T18:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95f5328b1fb836cac9623ea1c1f675e6b941f44e",
          "body": "…rds (#92)\n\nvia digestRecord() call for revisit records, allow passing in existing payload digest to be set alongside computed blockDigest\n\nbump to 2.4.6",
          "is_bot": false,
          "headline": "convenience: allow setting known WARC-Payload-Digest for revisit reco…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2025-09-18T03:17:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "607295350c36576fb4c6048fc2005ad56ad6cf6c",
          "body": "- don't clear digestAlgo on init if revisit record\n- for revisit records, recompute only the blockDigest, keep\npayloadDigest as is\n- allow forcing recompute\n- also allow returning size without headers\n\ntests:\n- update serializer and parser tests to include WARC-Block-Digest for\nrevisits\n- fix incorrect WARC-Block-Digest that was being ignored in revisit test\n\nformatting pass\n\nbump to 2.4.5",
          "is_bot": false,
          "headline": "fix digest computation for revisit records in WARCSerializer: (#91)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2025-09-03T16:39:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edcd14851ec01da7c6462f4f5b2e21c95e727927",
          "body": "- if urlencoded query is not valid (fails decodeURI), just ignore query (set to empty string)\n- add test\n- fixes crash in webrecorder/browsertrix-crawler#796\n\nbump to 2.4.4",
          "is_bot": false,
          "headline": "post-to-get canonicalization fix: (#90)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2025-03-28T17:47:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71e4fdd03b4fefb4849f3d8a7449118a33730579",
          "body": "If serialization is being canceled, there should be a way to purge the\r\ntemp buffer (clear memory / delete temp file) that is being used.\r\nbump to 2.4.3",
          "is_bot": false,
          "headline": "Add a way to purge temp buffer data (#89)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-12-14T02:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f706b5fbeb0062f119ec332068edf4737b25e850",
          "body": "bump to 2.4.2",
          "is_bot": false,
          "headline": "fix exports: switch to wildcard exports instead of enumerating (#88)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-20T01:12:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53b8c65fe2816c131b70751d38c3141cc5d57e8a",
          "body": "Bumps [cross-spawn](https://github.com/moxystudio/node-cross-spawn) from\r\n7.0.3 to 7.0.6.\r\n<details>\r\n<summary>Changelog</summary>\r\n<p><em>Sourced from <a\r\nhref=\"https://github.com/moxystudio/node-cross-spawn/blob/master/CHANGELOG.md\">cross-spawn's\r\nchangelog</a>.</em></p>\r\n<blockquote>\r\n<h3><a\r\nhre\n[…]\nhub.com/webrecorder/warcio.js/network/alerts).\r\n\r\n</details>\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump cross-spawn from 7.0.3 to 7.0.6 (#87)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-11-19T21:53:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "58e31321b41305427d22c962007bacaea8abb352",
          "body": "…eader, also validates that the name is allowed (#86)\n\n- fix utils exports\r\n- add test for multiValueHeader() and WARC-Protocol\r\nbump to 2.4.1",
          "is_bot": false,
          "headline": "add multiValueHeader(name, value) helper for creating a multi-value h…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-19T18:39:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddc5507f3d6a13238f4bb3bec25edf644f63aa2b",
          "body": null,
          "is_bot": false,
          "headline": "version: bump to 2.4.0",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-14T06:21:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3803f38af4c607fc4c8ca73138d6ded4eb35b520",
          "body": "…t be converted (#85)\n\n- part of fix for webrecorder/browsertrix-crawler#722\r\n- add warc-protocol to multi-value headers for now",
          "is_bot": false,
          "headline": "indexer: do case-insensitive search for index, in case Headers can no…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-14T06:20:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1883c33df5af28c7b178654bc0089c9d0609cf98",
          "body": "- add new HeadersMultiMap to support set-cookie, as well as\r\nwarc-concurrent-to headers with multiple values (store internally as\r\nmap, convert to array for multi value headers, override iterator)\r\n- update tests to check for multiple warc-concurrent-to\r\n- also ensure multiple Set-Cookie works with case sensitive headers\r\n- fixes #32\r\n- ready to support warc-protocol from\r\nhttps://github.com/iipc/warc-specifications/issues/42",
          "is_bot": false,
          "headline": "Support for multi-value headers (#84)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-14T01:05:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d20880d26686388efbd8d5f7b34de66206ad5213",
          "body": "…with encoded header (#83)\n\ninstead of skipping invalid headers:\r\n- encode header value as latin-1 for use with Headers object\r\n- encode back to original when serializing\r\nfixes #81",
          "is_bot": false,
          "headline": "statusandheaders: if setting a header fails on Headers object, retry …",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-11T21:54:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f45d7478d8f6ace93f718ec6d942b33635e805b0",
          "body": "Bumps [micromatch](https://github.com/micromatch/micromatch) from 4.0.5\r\nto 4.0.8.\r\n<details>\r\n<summary>Release notes</summary>\r\n<p><em>Sourced from <a\r\nhref=\"https://github.com/micromatch/micromatch/releases\">micromatch's\r\nreleases</a>.</em></p>\r\n<blockquote>\r\n<h2>4.0.8</h2>\r\n<p>Ultimate release th\n[…]\n on this pull request as it has\r\nbeen open for over 30 days.\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump micromatch from 4.0.5 to 4.0.8 (#79)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-11-09T02:25:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f3c94d7a37c4858ab694a4324d050da2c10a806",
          "body": "Bumps [rollup](https://github.com/rollup/rollup) from 3.3.0 to 3.29.5.\r\n<details>\r\n<summary>Release notes</summary>\r\n<p><em>Sourced from <a\r\nhref=\"https://github.com/rollup/rollup/releases\">rollup's\r\nreleases</a>.</em></p>\r\n<blockquote>\r\n<h2>v3.29.4</h2>\r\n<h2>3.29.4</h2>\r\n<p><em>2023-09-28</em></p>\r\n[…]\n on this pull request as it has\r\nbeen open for over 30 days.\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump rollup from 3.3.0 to 3.29.5 (#80)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2024-11-09T02:24:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1e53bbbaa81fc3d1347180c2c73782d05278df57",
          "body": "- support the `--fields` for cdx-index command\r\n- cli: add typing to yargs cli args, treat 'fields' param as array, support multiple fields param or comma-separated param\r\n- support `req.*` fields which only apply to request records, both WARC\r\nand HTTP, other headers apply to response/main record\r\n\n[…]\nhttp:referer`\r\n- tests: update tests to include 'req.http:cookie' include in cdx\r\n- tests: update tests to include 'referrer' in cdx\r\n- compatibility with python cdxj-indexer\r\n- version: bump to 2.4.0",
          "is_bot": false,
          "headline": "support indexing request WARC records: (#82)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-11-07T03:09:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb1ff9c3d88a54fdc0acb2670ca25966b04fa95e",
          "body": "- add case-insensitive check for 'content-type' if headers are a Map,\r\nnot Headers\r\n- remove unused properties left over on WARCRecord\r\n- bump to 2.3.1",
          "is_bot": false,
          "headline": "indexer: fix parsing POST request when using Map for headers (#78)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-09-05T15:41:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d36144af98ff6eb87a1ca279101ac58b7af4b08",
          "body": "- additional fixes to make surt conversion and indexing closer to\r\noriginal python implementation in cdxj-indexer and surt.\r\n- sort query args by splitting on '&', instead of parsing via\r\nURLSearchParams to preserve empty query args\r\n- SURT contains non urlencoded query args when possible, including POST\r\nrequest body\r\n- warc record: parse URL to ensure trailing slash included in http/https\r\nURLs\r\n- fixes #70",
          "is_bot": false,
          "headline": "more indexing compatibility fixes: (#77)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-28T16:39:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ce5b4464b61e995e4d130c2f765de05072837a4",
          "body": "- output 'status', 'offset', 'length' as strings in cdxj\r\n- properly read 'content-type' for non-response records\r\n- tests: update indexer tests for cdxj strings",
          "is_bot": false,
          "headline": "cdxj compatibility: (#75)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-23T19:41:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53997e63d3e28f04c4d61551b8abfe2ede274000",
          "body": "ensure getSurt() preserves trailing '=' presence / absence if no value:\r\n- '&x^' kept as '&x%5E' while '&x^=' kept as '&x%5E=' \r\n- fixes #70\r\n- update formatting in testWARCParser.test.ts",
          "is_bot": false,
          "headline": "Fix SURT edge case encoded query arg (#73)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-21T01:24:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0ab4952fecf0e054ac96b0f34f438d6c5444015",
          "body": "- Adds Prettier & updates eslint & configs\r\n- Removes checked-in `dist` folder\r\n- Switches from npm to yarn\r\n- Updates a few types and things so that `tsc` completes without errors\r\n- Fixes some slightly broken tests\r\n\r\n---------\r\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>",
          "is_bot": false,
          "headline": "Update developer experience (#74)",
          "author_name": "Emma Segal-Grossman",
          "author_login": "emma-sg",
          "committed_at": "2024-08-21T00:53:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57016d64c468c2a3fea7223a5663fe75184e9b26",
          "body": "tsup: add additional libraries to noExternal",
          "is_bot": false,
          "headline": "Merge pull request #72 from webrecorder/fix-tsup",
          "author_name": "Emma Segal-Grossman",
          "author_login": "emma-sg",
          "committed_at": "2024-08-19T23:39:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa806fadc74daaf6329eb709dc792c5ecfc1a131",
          "body": "- add base32-encode to noExternal for node\n- add hash-wasm to noExternal for browser",
          "is_bot": false,
          "headline": "tsup:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-18T04:22:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7715994422cdc0b28e87494bf0c13b12185f7080",
          "body": null,
          "is_bot": false,
          "headline": "deps: rebuild for 2.3.0",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-18T04:04:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbf010d049fa5d26722ef5f1e254d47beb3dbf80",
          "body": "deps: update braces dependency via npm audit fix",
          "is_bot": false,
          "headline": "version: bump to 2.3.0 (#71)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2024-08-18T03:55:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f151081f0b5282a5d55a14c02ab623163ec5f9ec",
          "body": "* Make non-GET query canonicalization consistent with new spec\r\n\r\nThis is part of bringing consistency between pywb and warcio.js\r\nwith regard to how query parameters are constructed from request\r\nbodies for non-GET requests.\r\n\r\nThe more complicated test is duplicated in pywb to help ensure\r\nthat the results are consistent across our toolsets/packages.",
          "is_bot": false,
          "headline": "Standardize POST canonicalization query strings with pywb (#68)",
          "author_name": "Tessa Walsh",
          "author_login": "tw4l",
          "committed_at": "2024-08-18T03:44:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fa516a54e21024f386196d8dbdf1e3f20ad78c7",
          "body": "fixes type issues that occur when skipLibCheck is false:\r\n- fixes type issues with pako and stream-buffers by adding appropriate @types/ packages to dependencies (not just dev dependencies)\r\n- fix hash-wasm issue by adding .js to import\r\n- adds typing to tsup.config.ts\r\n- also switches to skipLibCheck false\r\n- removes intermediate .d.ts files from being committed (still need the final ones)\r\n- should fix #66\r\n\r\n---------\r\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>",
          "is_bot": false,
          "headline": "Fix some Typescript/build output issues (#64)",
          "author_name": "Emma Segal-Grossman",
          "author_login": "emma-sg",
          "committed_at": "2024-08-18T03:39:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "397c2a6e319c9a8c1e28e7d6ea6113dc12eb3049",
          "body": "- ensure type IndexerOffsetLength is exported\r\n- ensure WARC.create() / readFully() also accepts Iterator as well as AsyncIterator for payload\r\n- bump to 2.2.1",
          "is_bot": false,
          "headline": "typing fixes: (#63)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-11-01T23:04:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6dd0b83befee787a4d8841798879f7b9e0ff14c",
          "body": "* additional type fixes:\r\n- use specific types for warcHeaders and httpHeaders in warcrecord\r\n- add undefined checks for warc header properties\r\n- add ignore for remaining 'any' types\r\n- remove unused import",
          "is_bot": false,
          "headline": "misc type fixes (#61)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-08-09T06:58:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4efc6bb9c5919e93b0dd62343e287d71b246b16",
          "body": null,
          "is_bot": false,
          "headline": "rebuild dist output for 2.2.0",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-08-09T06:01:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f8f957ec6e8ea1badcc52764478469e9f866308",
          "body": "* Use append when using Headers and header is 'set-cookie' to allow for multiple set-cookie headers\r\n\r\n* Add cookie tests to serializer and parser, accounting for different node versions (node >=18.14.2 supports listing multiple cookie headers)\r\n\r\n* only apply keepHeadersCase for http headers, always use Map for WARC headers\r\n\r\n* Update warcrecord headers input to be Record<string, any> to support array for headers for set-cookie\r\n\r\n---------\r\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>",
          "is_bot": false,
          "headline": "Cookie Header Handling Improvements (#56)",
          "author_name": "Patrick Heeney",
          "author_login": "patrickheeney",
          "committed_at": "2023-08-09T05:58:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e20b6b1c1ab13602e11f7641d29f24e43b0382d",
          "body": "Bumps [word-wrap](https://github.com/jonschlinkert/word-wrap) from 1.2.3 to 1.2.4.\r\n- [Release notes](https://github.com/jonschlinkert/word-wrap/releases)\r\n- [Commits](https://github.com/jonschlinkert/word-wrap/compare/1.2.3...1.2.4)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: word-wrap\r\n  dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump word-wrap from 1.2.3 to 1.2.4 (#57)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-08-08T00:34:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "621785a7cd65edf863e28c549986094a7f67a451",
          "body": "…pport custom indexing without a parser. (#60)\n\nIndexerOffsetLength just requires storing 'offset' and 'recordLength' for each WARC record\r\nindexer: when access a http headers field, if headers are a map, convery to Headers to support case-insensitive get()\r\nadd .cts files to .gitignore",
          "is_bot": false,
          "headline": "indexer: add IndexerOffsetLength type from which parser derives to su…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-08-08T00:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "779a73bcc683593f44afb76c03ff671823f9ba42",
          "body": "…hout reading fully into memory (#59)\n\n- New WARCSerializer which does not read entire payload into memory\r\n- Using hash-wasm to compute digests incrementally in a cross-platform way (node and browser)\r\n- To support hashing, still need to read entire payload twice. Support an external buffer which s\n[…]\nializer } from \"warcio/node\"' if dealing with larger payloads on Node.\r\n- Add additional examples for larger file serialization to README\r\n- fix build flag to work with latest esbuild\r\n- bump to 2.2.0",
          "is_bot": false,
          "headline": "New WARCSerializer: serialize records with buffering to temp file wit…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-08-08T00:29:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02233647de9f4d7c798a292bdbc8ae204974ced1",
          "body": "* CDXIndexer.filterRecord filters metadata records\r\n\r\nAs discussed w/ @ikreymer:\r\n- Edit to `CDXIndexer.filterRecord()` so it filters out `WARC-Type: metadata` or `WARC-Type: resource` when WARC `Content-Type: application/warc-fields`.\r\n- This matches the behavior of cdxj-indexer (https://github.com\n[…]\npproximately wabac.js (https://github.com/webrecorder/wabac.js/blob/main/src/warcloader.js#L114)\r\n- Added a test entry to `example.warc`\r\n---------\r\n\r\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>",
          "is_bot": false,
          "headline": "CDXIndexer.filterRecord should filter `metadata` records (#54)",
          "author_name": "Matteo Cargnelutti",
          "author_login": "matteocargnelutti",
          "committed_at": "2023-03-23T23:29:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06572cf324b0440d1a3c18eda4c74b8cf7e83d0c",
          "body": "…dx} instead of just cdx (#53)\n\n* new indexer: add CDXRecordIndexer that emits {cdx, record, reqRecord} for each response-request pair or single record. The iterator returns the the cdx, record and corresponding record (if any, for 'response' and 'revisit' records only)\r\n* addresses issues raised in\n[…]\n, same as `response` \r\n\r\n* README updates:\r\n- fix headers->httpHeaders in examples\r\n- replace CDXIndexer example with CDXAndRecordIndexer to show accessing record as part of example\r\n\r\n- bump to 2.1.0",
          "is_bot": false,
          "headline": "new indexer: add CDXRecordIndexer that iterates {record, reqRecord, c…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2023-03-23T19:49:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8292e63fde4c6cee8d4fad315ed93b6251d1ef51",
          "body": "Bumps [json5](https://github.com/json5/json5) from 2.2.1 to 2.2.3.\r\n- [Release notes](https://github.com/json5/json5/releases)\r\n- [Changelog](https://github.com/json5/json5/blob/main/CHANGELOG.md)\r\n- [Commits](https://github.com/json5/json5/compare/v2.2.1...v2.2.3)\r\n\r\n---\r\nupdated-dependencies:\r\n- dependency-name: json5\r\n  dependency-type: indirect\r\n...\r\n\r\nSigned-off-by: dependabot[bot] <support@github.com>\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Bump json5 from 2.2.1 to 2.2.3 (#50)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2023-03-23T19:04:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d3b748ab2b4d72fad61f264041f3905d8e65bd1",
          "body": "indexer: refactor to not require out stream in constructor\r\nindexer: rename run-> writeall, call writeAll(out) to write all to an output stream\r\nbuild: add index.all.js for browser use with all dependencies included, update tsup.config.ts to generate node and browser builds\r\ndist: add missing files\r\nREADME: update with package info\r\nbump to 2.0.1",
          "is_bot": false,
          "headline": "2.0.1 Work (#48)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-12-17T03:37:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23c41a7d97890a87dc15e720baf2f89bed7ca5e2",
          "body": null,
          "is_bot": false,
          "headline": "ci: fix missed cache from yarn->npm switch",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-12-16T07:41:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2d6580c2c25c092605c600c277b0018b55c422a",
          "body": "* index: fix indexing of some 'request first, then response' gzipped WARCs, where the next gzip member is read before the offset is stored, store offset after skipping to end\r\n* index: fix indexing of gzipped WARCs that have no space at end\r\n* tests: add additional test for warc that has no empty lines at the end, ensure proper detection of new record\r\n* utils: switch back to btoa(), remote dependency on Buffer",
          "is_bot": false,
          "headline": "Parsing / Indexing Fix for WARC record boundaries (#46)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-12-16T07:30:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d1f96b9100204cacc8cb2aa7cd29558b029445f",
          "body": "* feat: 🎸 initial typescript support\r\n\r\nCo-authored-by: chelkyl <chelkyl@users.noreply.github.com>\r\n\r\n* feat: 🎸 file reorganization and start converting tests to typescript\r\n\r\nCo-authored-by: chelkyl <chelkyl@users.noreply.github.com>\r\n\r\n* feat: 🎸 continue converting tests to jest with typescript\r\n\r\n[…]\neply.github.com>\r\nCo-authored-by: chelkyl <chelkyl@users.noreply.github.com>\r\nCo-authored-by: Ilya Kreymer <ikreymer@gmail.com>\r\nCo-authored-by: John Armstrong <jlarmstrongiv@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Port to TypeScript (#44)",
          "author_name": "chelkyl",
          "author_login": "chelkyl",
          "committed_at": "2022-12-16T03:43:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0adf3597b5332dc10905344dd7c7e2899a3abc05",
          "body": "tests: fix running tests if global.crypto already set\nbump to 1.6.2",
          "is_bot": false,
          "headline": "export: add 'utils' export to allow just accessing the utils library",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-12-07T06:33:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e533df2330186ae20140ea9205bbb941caad902",
          "body": "…'t need 18.x for rollup build)\n\nbump to 1.6.1",
          "is_bot": false,
          "headline": "package: remove node engine requirements, as its too restrictive (don…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-12-04T17:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a4eb1e53b0feb156011e13ffddd34ffdacb4551",
          "body": null,
          "is_bot": false,
          "headline": "README: fix version listed in readme",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-10-22T13:15:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f6686335d49aef09c4df29e232d226673c29297",
          "body": "* convert source to use native esm with node 18.x native web streams:\r\n- remove extra dependencies, such as node-fetch, web-streams and crypto, which are now native\r\n- tests: update to latest ava with esm support and c8\r\n- ci: update to use node 18.x\r\n- cli: fix to work with esm imports\r\n- readme: update readme to mention ESM modules, node 18.x requirements",
          "is_bot": false,
          "headline": "Convert to ESM (#42)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-10-22T13:03:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32d62bf39cdbff0c68c523a192c793e33504101d",
          "body": "…'t add an empty '=' after query args that don't have a '='\n\nbump to 1.5.1",
          "is_bot": false,
          "headline": "utils: getSurt() fix: to match existing surt conversion behavior, don…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2022-03-23T01:46:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ebe7e6c2f2efab7a3a3f044d38913b4ddbbf325d",
          "body": "…unked headers and no payload, dechunk() exists gracefully if no data on first read, fixes #33\n\nfix Transfer-Encoding header check to use canonical header names instead of all lowercase for consistency\ntests: add test for parsing revisit record with transfer-encoding http headers",
          "is_bot": false,
          "headline": "parsing fix: support loading revisit record with transfer-encoding ch…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-11-27T00:46:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5dcaec38ffb0a905fd7151273302c5f478fe5d9",
          "body": "* optimize StatusAndHeaders parsing by reading entire header block through \\r\\n\\r\\n, then parsing headers directly, minimizing string allocations, and with a single decoding.\r\n\r\n* optimize skipping to next record by reading raw empty links, decoding only when needed\r\n\r\n* move splitChunk(), concatChunks() to utils from BaseAsyncIterReader (breaking change)\r\n\r\n* bump to 1.5.0",
          "is_bot": false,
          "headline": "Optimize Parsing (#34)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-11-26T23:55:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ddbb2421c80a21046aa0e22ec59d0d7ccaf76a4",
          "body": "* Bump codecov from 3.6.5 to 3.7.1 (#11)\r\n* Bump node-fetch from 2.6.0 to 2.6.1 (#12)\r\n* Bump ini from 1.3.5 to 1.3.8 (#17)\r\n* Bump hosted-git-info from 2.8.8 to 2.8.9 (#26)\r\n* Bump normalize-url from 4.5.0 to 4.5.1 (#28)\r\n* Bump glob-parent from 5.1.1 to 5.1.2 (#29)\r\n* Bump path-parse from 1.0.6 to 1.0.7 (#30)\r\n* Bump y18n from 4.0.0 to 4.0.3 (#31)\r\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Dependabot Updates (#35)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-11-26T23:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19e9093b6f08fd23897e20cea75a296056212d4d",
          "body": "…L, part of fix for webrecorder/replayweb.page#64\n\nadd tests for getSurt\n\nbump to 1.4.8",
          "is_bot": false,
          "headline": "getSurt fix: don't remove 'www[\\d]' from url if found in middle of UR…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-08-16T19:58:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdb68450e2e011df24129bac19691073ab6b2417",
          "body": "… an empty statusline-only block (but continue doing so for request/response)\n\nserializer: allow re-serializing warc records with empty payloads that have already been read, as no payload to read\ntests: update tests to indicate revisit records don't get an empty statusline only block, add additional tests for revisit record parsing + serialization with and without headers\nbump to 1.4.7",
          "is_bot": false,
          "headline": "revisit record serialization: if there are no http headers, don't add…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-08-13T20:10:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d89c8b3530535785fd0c40c796ab7d76cd6b82b6",
          "body": "* utils: post-to-get conversion edgecases ensure compatibility with cdxj-indexer/pywb/wombat:\r\n- convert base64 encoded value with '__wb_post_data=<data>'\r\n- for text/plain, attempt to parse as json, otherwise as binary\r\n- for empty POST body, ensure data is added with empty '__wb_post_data='\r\nbump to 1.4.6",
          "is_bot": false,
          "headline": "Post edge cases (#27)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-05-16T03:51:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09c8dfa5138fed9ba05b30df9c512418f50b2184",
          "body": "…' to conform with existing convention of 'sha1'\n\nbump to 1.4.5",
          "is_bot": false,
          "headline": "warcserializer: change warc digest prefixes to 'sha256' from 'sha-256…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-05-10T02:29:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47998b1e76d1ecb67a956afe6914335debac7373",
          "body": "…cial suffix (#25)\n\n* utils improvements:\r\n- track duplicate params in jsonToQueryParams() by adding '.N_' after dupe (depends on JSON.parse order, but better than current overwriting (needed for yahoo answers replay).\r\nexport jsonToQueryParams(), jsonToQueryString(), mfdToQueryParams(), mfdToQueryString()\r\n- add testUtils to begin tests for jsonToQueryParams, including dupe params\r\n- bump to 0.4.4",
          "is_bot": false,
          "headline": "Utils: jsonToQuery: don't override duplicate params, but add with spe…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-04-22T01:17:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14402e85b12ca28c8264d60fdf6daabc0ac6011a",
          "body": "…… (#24)\n\n* lint pass: do a lint pass on all src and tests, add eslint rules and dev dependency, add lint check to test\n\nbump to 1.4.3",
          "is_bot": false,
          "headline": "lint pass: do a lint pass on all src and tests, add eslint rules and …",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-04-10T00:50:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e948c1b32bfd9b6e6319a8bdc01337b0cbe37246",
          "body": "…and other records) if no warc content-type is specified\n\naddresses issue discussed in #22",
          "is_bot": false,
          "headline": "use 'application/octet-stream' as default Content-Type for resource (…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-04-09T23:30:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34b8383e47daa767012fc790a8cdd9a58fbbe284",
          "body": "…ader more flexible, work with any async iterator\n\nbump to 1.4.2",
          "is_bot": false,
          "headline": "LimitReader: check if _unread() exists before calling to make limitre…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-03-03T21:30:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57ea3b02065d7bd05cfa0ef102ce590db4d8daf3",
          "body": "…d logic in indexer",
          "is_bot": false,
          "headline": "indexing: add 'noSurt' option for urlkey, simplify request-body appen…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-02-27T02:29:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92c5b55635a6e44c480353249fc0321b748b5851",
          "body": "* indexing: post-request fixes\r\n- ensure requestBody + __wb_method added to urlkey\r\n- don't include method in requestBody field\r\n- bump to 1.4.1\r\n\r\n* Update badge",
          "is_bot": false,
          "headline": "POST query urlkey fix (#20)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-02-26T23:19:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f865b19cbb183a4f27f0b1f2145293b60a852c07",
          "body": "- group request-responses into pairs, process request body when indexing\n- convert form-encoded, multipart, and json post requests into an extra string stored in requestBody\n- expose getSurt, postToGet (moved from wabac.js)\n- bump to 1.4.0",
          "is_bot": false,
          "headline": "post request body processing:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-02-22T07:26:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a823bd397d1a39a9105babfe47ede7fd78f2d0df",
          "body": "…fault to pako deflate otherwise.\n\ntests: add test with polyfill CompressionStream\nbump to 1.3.3",
          "is_bot": false,
          "headline": "serializer: use native CompressionStream, if available in browser, de…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2021-01-11T07:16:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "665df552200a3db52c98316aca9fba756ca7d1e7",
          "body": "- add detection for content-length too small by checking data in newlines before the end, print warning message\n- add detection for content-length too large by checking until first valid non-newline (for non-compressed records)\n- add test case for content-length smaller/larger than record\ngithub actions: add ci via github actions\nbump to 1.3.2",
          "is_bot": false,
          "headline": "indexing: more resilience for invalid content-length",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-11-18T06:52:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a33a0be8677f5a5a6f1374d1ddccc4e49284b02f",
          "body": "… similar to global.Headers (fixes #15)\n\nadd warc writing in node example in READMEE\nbump version to 1.3.1",
          "is_bot": false,
          "headline": "warc writing in node fix: add global.crypto when running in index.js,…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-11-15T18:15:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8d0f9e4e209b635ef973e62908c6ce89cd09434",
          "body": null,
          "is_bot": false,
          "headline": "build: update dist/ for 1.3.0",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-11-13T07:19:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75c63b4bbd2c211c9922ca719cc7ffea8ecd4f2a",
          "body": "* warcrecord: WARCRecord.create() takes a 'statusline' arg instead of separate httpVersion, status, statusText, to support response and request statuslines\r\n\r\n* tests: add tests for creating warc record with custom statusline\r\nbump version to 1.3.0\r\n\r\n* WARCRecord.create() support empty body\r\ntests: add request record test",
          "is_bot": false,
          "headline": "WARCRecord.create() accepts a full statusline (#14)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-11-13T07:17:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1fc22248db2572f03e7ef9f750bb155245d66c52",
          "body": null,
          "is_bot": false,
          "headline": "Update CDXIndexer instructions in README (#13)",
          "author_name": "austinfrey",
          "author_login": "austinfrey",
          "committed_at": "2020-11-13T03:19:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b60156e5474cdf716fafca2d97e57de211ea566",
          "body": "…eadme typos",
          "is_bot": false,
          "headline": "README and package.json: update links to webrecorder/warcio.js, fix r…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-06-09T21:24:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dc7918234e67d70a9d1173c4f29b8d5dd5cc64ce",
          "body": null,
          "is_bot": false,
          "headline": "add LICENSE",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-06-09T21:17:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25bbc0068e204e9b0e293837e7b7aba2e8260656",
          "body": "* error handling: improve errors if trying to read already consumed record\r\nserialization via s async iterator, #2 and digest computation #6\r\n- WARCSerializer for serializing WARC records and computing block, payload digests from full payload (non-streaming). Also computes the total content-length\r\n\n[…]\n\r\n\r\n* fix and update dist build\r\n\r\n* update README: add writing WARCs, add collapsible sections for examples\r\nswitch to different uuid package, update dist/\r\nupdate serializer tests\r\n\r\n* README tweaks",
          "is_bot": false,
          "headline": "WARC Serialize (#10)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-06-09T20:39:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6a2ca2189824cf1d086b06f47d34749e5148b41",
          "body": "- additional errors checks to detect if iterator is not awaited\r\nwhen reading line or chunks from already consumed record.\r\n- utility static methods: WARCParser.iterRecords() iterator and WARCParser.parse()\r\n- Indexer supports iterIndex() async iterator instead of custom write/raw option,\r\nwhich cal\n[…]\nxer.indexRecord() to index a single WARC record at a time.\r\n- packaging: include list of bundled files, don't package tests\r\n- fix dependencies, use regular node-fetch, add esm, yargs\r\n- bump to 1.1.3",
          "is_bot": false,
          "headline": "Additional Checks + async iterator for indexer (#9)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-05-01T06:11:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "655e1800399a0846e5bb836b595cfb15934eb1d6",
          "body": "support for chunked decoding and raw/decoded content access (#3)\nmake warcrecord iterable: decoded chunks, readline, readFully(decoded)\nraw access via readFully(false), recorder.reader\ndecoded access via contentText(), record iteration, readline()\nreader supports regular sync iteration as well\nreadl\n[…]\nupported via LimitReader as well\nREADME: update on accessing WARC content, raw and decoded\ntests: add chunked decoding example\ncleanup dependencies, rename verb() -> method()\nbuild dist, bump to 1.1.2",
          "is_bot": false,
          "headline": "Chunked decoding and content access (#8)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-17T18:57:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "65e26c79d54bac73638dfa1a08cbfbe49483d6cc",
          "body": "…tion for custom writers\n\nfix typo in cli.js\nupdate README.md examples\nadd tests for 'raw' writers\nbump version to 1.1.1",
          "is_bot": false,
          "headline": "indexers: support 'raw' format for passing raw object to write() func…",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-14T22:38:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24b34c070b093de9d0df83f075ca2a54b9b81f3c",
          "body": null,
          "is_bot": false,
          "headline": "tweak README",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-14T19:29:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "878277f7ee54a07df63f34605fb7b4d0a1f9f903",
          "body": null,
          "is_bot": false,
          "headline": "README fixes",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-14T19:18:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61fabcc7862b3cfb72a8c95174d888b1c99cd8f9",
          "body": "- StreamReader -> AsyncIterReader\n- LimitReader, WARCParser also support async iteration via Symbol.asyncIterator\n- AsyncIterReader created from async iterable, any object with read() or with getReader()\n\n- node: ensure Headers exists on node via node-fetch\n\n- getReadableStream to convert to convert\n[…]\np for build\n - build dist/warcio.js and dist/warcio.min.js\n - use esm in index.js to load main.js\n - use esm in cli.js to load cli_main.js\n\nREADME update\n - update examples\n - fix typos\n\nbump to 1.1.0",
          "is_bot": false,
          "headline": "use async iterator as common interface instead of async read()",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-14T18:00:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8d283596832a38d077852153ebfc4156d126fb8e",
          "body": null,
          "is_bot": false,
          "headline": "README: move badges lower for better summarization",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-13T04:43:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c0029caac4ae39f8a78103dcd527ddbbd49eb51",
          "body": "- fix statusline parsing\n- add statusandheaders protocol, statusCode, statusText, headers, verb, requestPath accessors\n- add record.getResponseInfo() for Response init opts, record.getReadableStream() to get readable stream\nfor Response\n- update tests, remove redundant checks for 100% coverage\n- update README with simpler Response semantics example, text tweaks\n- bump to 1.0.5",
          "is_bot": false,
          "headline": "warcrecord / statusandheaders api improvements:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-13T04:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d863726c91675aca8c3bc6e8ad17ff878aa00aa",
          "body": null,
          "is_bot": false,
          "headline": "fix coverage: fix reporter, update gitgnore",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-10T20:56:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e64df373beaacb8736d706bb7fcb21c086223b98",
          "body": "* add codecov coverage and badges",
          "is_bot": false,
          "headline": "Add Codecov Reporting + Badges (#1)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-10T20:47:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b12f3395944ee52163d6f04e285d6f78bf456931",
          "body": null,
          "is_bot": false,
          "headline": "add .travis.yml for ci!",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-10T20:31:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd21d14eaf2ec0163465a9abf6c4a4452027b7a1",
          "body": "- fix uncompressed indexing (was missing 4-byte padding)\n- support 'gzip', 'deflate', and 'deflateRaw', decompress modes\n- for 'deflate', try 'deflateRaw' automatically if 'deflate' fails\n- tests: add tests for combo of compress/decompress modes\n- indexing: don't parse http if not using http fields\n- tests: improve overall test coverage\n- bump to 1.0.4",
          "is_bot": false,
          "headline": "various fixes:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-10T20:23:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24d1fabaaea156ab0c2363c351a06370609fddd0",
          "body": null,
          "is_bot": false,
          "headline": "update package.json for release, version to 1.0.3",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-09T22:27:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ebadbd33bb89d429165e6f08dc64c6038c54bf6",
          "body": null,
          "is_bot": false,
          "headline": "README: fix typos",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-08T02:57:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24a0dde3f2ee65c1a4b7ad27227484a10651e2c1",
          "body": null,
          "is_bot": false,
          "headline": "README tweaks, add examples.",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-08T02:54:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f26a1fea72178525a2df7cbb7cc9427c97af2c1",
          "body": "parsing simplification: add toStreamReader() to convert ReadableStream or node stream into StreamReader,\navoid user having to initialize the StreamReader just to iterate records",
          "is_bot": false,
          "headline": "add README with examples",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-07T22:50:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "738e270851bd5bf6543f5a1d3a0f3ca6e4189560",
          "body": " - better FileReader, just use async iter\n - readSize() don't read ahead if exact buff match\n - StreamReader increment raw offset as soon as inflator is done\n - adjust tests",
          "is_bot": false,
          "headline": "minor fixes:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-07T18:26:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef8a3564a6cd36b1ea004b0ea5da295975f29ef9",
          "body": "- use single TextDecoder per StreamReader\n- concatChunks returns single chunk as is\n- use custom FileReader instead of toWebStreams wrapper\n- add skipFully() and readSize(size, skip=true) to support skipping remainder of record",
          "is_bot": false,
          "headline": "optimizations:",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-06T03:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eaf8f6edd59aa281122063a35fc68da8bc5d14d4",
          "body": "compute basic surt (non-normalized) for urlkey\nfix length computation for compressed warc.gz\nadd cli.js for generic cli tools",
          "is_bot": false,
          "headline": "support cdx indexing, cdxj, json and cdx (default cdxj)",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-05T20:39:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "40610030ca54b7a0f0713aad52fc18ef60578721",
          "body": "streaming, decompressing read operations for warc and warc.gz\ncli indexing support\ntesting via ava",
          "is_bot": false,
          "headline": "warcio.js initial commit!",
          "author_name": "Ilya Kreymer",
          "author_login": "ikreymer",
          "committed_at": "2020-04-05T00:27:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 25,
      "commits_last_year": 10,
      "latest_release_at": "2026-07-23T00:37:58Z",
      "latest_release_tag": "v2.4.11",
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 7,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 67.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 62,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "warcio",
          "exists": true,
          "license": "Apache-2.0",
          "keywords": [
            "WARC",
            "web archiving"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/warcio",
          "is_deprecated": false,
          "latest_version": "2.4.11",
          "repository_url": "https://github.com/webrecorder/warcio.js",
          "versions_count": 53,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 24735,
          "first_published_at": "2020-04-09T22:04:24.588000Z",
          "latest_published_at": "2026-07-23T00:38:28.471000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 7,
      "stars": 55,
      "watchers": 3,
      "fork_history": {
        "days": [
          {
            "date": "2020-11-12",
            "count": 1
          },
          {
            "date": "2021-05-14",
            "count": 1
          },
          {
            "date": "2021-09-06",
            "count": 1
          },
          {
            "date": "2022-10-15",
            "count": 1
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2026-02-13",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_forks": 7
      },
      "star_history": null,
      "open_issues_and_prs": 12
    },
    "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": [
        "test/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 36056,
      "source_files_sampled": 30,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 32,
        "malicious_count": 0,
        "assessed_package": "npm:warcio@2.4.11",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@types/pako",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.7"
        },
        {
          "name": "@types/stream-buffers",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.7"
        },
        {
          "name": "base32-encode",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.0.0"
        },
        {
          "name": "hash-wasm",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.9.0"
        },
        {
          "name": "pako",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.11"
        },
        {
          "name": "tempy",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.1.0"
        },
        {
          "name": "uuid-random",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.3.2"
        },
        {
          "name": "yargs",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^17.7.2"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "@types/pako",
            "direct": true,
            "version": "1.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "@types/stream-buffers",
            "direct": true,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "base32-encode",
            "direct": true,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "hash-wasm",
            "direct": true,
            "version": "4.9.0",
            "ecosystem": "npm"
          },
          {
            "name": "pako",
            "direct": true,
            "version": "1.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "tempy",
            "direct": true,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "uuid-random",
            "direct": true,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": true,
            "version": "17.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "yargs",
            "direct": true,
            "version": "17.7.2",
            "ecosystem": "npm"
          },
          {
            "name": "@ampproject/remapping",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.12.11",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.18.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/code-frame",
            "direct": false,
            "version": "7.22.13",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/compat-data",
            "direct": false,
            "version": "7.19.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/core",
            "direct": false,
            "version": "7.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/generator",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-compilation-targets",
            "direct": false,
            "version": "7.19.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-environment-visitor",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-function-name",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-hoist-variables",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-imports",
            "direct": false,
            "version": "7.18.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-module-transforms",
            "direct": false,
            "version": "7.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-plugin-utils",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-simple-access",
            "direct": false,
            "version": "7.19.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-split-export-declaration",
            "direct": false,
            "version": "7.22.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-string-parser",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-identifier",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helper-validator-option",
            "direct": false,
            "version": "7.18.6",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/helpers",
            "direct": false,
            "version": "7.19.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/highlight",
            "direct": false,
            "version": "7.22.20",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/parser",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-async-generators",
            "direct": false,
            "version": "7.8.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-bigint",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-class-properties",
            "direct": false,
            "version": "7.12.13",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-import-meta",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-json-strings",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-jsx",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-logical-assignment-operators",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-nullish-coalescing-operator",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-numeric-separator",
            "direct": false,
            "version": "7.10.4",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-object-rest-spread",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-catch-binding",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-optional-chaining",
            "direct": false,
            "version": "7.8.3",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-top-level-await",
            "direct": false,
            "version": "7.14.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/plugin-syntax-typescript",
            "direct": false,
            "version": "7.22.5",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/template",
            "direct": false,
            "version": "7.22.15",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/traverse",
            "direct": false,
            "version": "7.23.2",
            "ecosystem": "npm"
          },
          {
            "name": "@babel/types",
            "direct": false,
            "version": "7.23.0",
            "ecosystem": "npm"
          },
          {
            "name": "@bcoe/v8-coverage",
            "direct": false,
            "version": "0.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-arm64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/android-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-arm64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/darwin-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-arm64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/freebsd-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-arm64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ia32",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-loong64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-mips64el",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-ppc64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-riscv64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-s390x",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/linux-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/netbsd-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/openbsd-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/sunos-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-arm64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-ia32",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@esbuild/win32-x64",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/eslint-utils",
            "direct": false,
            "version": "4.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint-community/regexpp",
            "direct": false,
            "version": "4.11.0",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/eslintrc",
            "direct": false,
            "version": "2.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "@eslint/js",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "@humanwhocodes/config-array",
            "direct": false,
            "version": "0.11.14",
            "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": "@istanbuljs/load-nyc-config",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@istanbuljs/schema",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/console",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/core",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/environment",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/expect-utils",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/fake-timers",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/globals",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/reporters",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/schemas",
            "direct": false,
            "version": "29.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/source-map",
            "direct": false,
            "version": "29.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-result",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/test-sequencer",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/transform",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jest/types",
            "direct": false,
            "version": "29.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/gen-mapping",
            "direct": false,
            "version": "0.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/resolve-uri",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/set-array",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/sourcemap-codec",
            "direct": false,
            "version": "1.4.14",
            "ecosystem": "npm"
          },
          {
            "name": "@jridgewell/trace-mapping",
            "direct": false,
            "version": "0.3.18",
            "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": "@sinclair/typebox",
            "direct": false,
            "version": "0.27.8",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/commons",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@sinonjs/fake-timers",
            "direct": false,
            "version": "10.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__core",
            "direct": false,
            "version": "7.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__generator",
            "direct": false,
            "version": "7.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__template",
            "direct": false,
            "version": "7.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/babel__traverse",
            "direct": false,
            "version": "7.20.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/color-name",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/graceful-fs",
            "direct": false,
            "version": "4.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-coverage",
            "direct": false,
            "version": "2.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-lib-report",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/istanbul-reports",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jest",
            "direct": false,
            "version": "29.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "@types/json-schema",
            "direct": false,
            "version": "7.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "18.11.9",
            "ecosystem": "npm"
          },
          {
            "name": "@types/semver",
            "direct": false,
            "version": "7.3.13",
            "ecosystem": "npm"
          },
          {
            "name": "@types/stack-utils",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs",
            "direct": false,
            "version": "17.0.17",
            "ecosystem": "npm"
          },
          {
            "name": "@types/yargs-parser",
            "direct": false,
            "version": "21.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/eslint-plugin",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/parser",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/scope-manager",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/type-utils",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/types",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/typescript-estree",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/utils",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "5.62.0",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript-eslint/visitor-keys",
            "direct": false,
            "version": "8.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "@ungap/structured-clone",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "acorn",
            "direct": false,
            "version": "8.12.1",
            "ecosystem": "npm"
          },
          {
            "name": "acorn-jsx",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ajv",
            "direct": false,
            "version": "6.12.6",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-escapes",
            "direct": false,
            "version": "4.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-regex",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "3.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "4.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "ansi-styles",
            "direct": false,
            "version": "5.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "any-promise",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "anymatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "argparse",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "array-union",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-jest",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-istanbul",
            "direct": false,
            "version": "6.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-plugin-jest-hoist",
            "direct": false,
            "version": "29.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-current-node-syntax",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "babel-preset-jest",
            "direct": false,
            "version": "29.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "balanced-match",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "binary-extensions",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "1.1.11",
            "ecosystem": "npm"
          },
          {
            "name": "brace-expansion",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "braces",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "browserslist",
            "direct": false,
            "version": "4.21.4",
            "ecosystem": "npm"
          },
          {
            "name": "bs-logger",
            "direct": false,
            "version": "0.2.6",
            "ecosystem": "npm"
          },
          {
            "name": "bser",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "buffer-from",
            "direct": false,
            "version": "1.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "bundle-require",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "cac",
            "direct": false,
            "version": "6.7.14",
            "ecosystem": "npm"
          },
          {
            "name": "callsites",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "5.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "camelcase",
            "direct": false,
            "version": "6.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "caniuse-lite",
            "direct": false,
            "version": "1.0.30001420",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "chalk",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "char-regex",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "chokidar",
            "direct": false,
            "version": "3.5.3",
            "ecosystem": "npm"
          },
          {
            "name": "ci-info",
            "direct": false,
            "version": "3.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "cjs-module-lexer",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "cliui",
            "direct": false,
            "version": "8.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "co",
            "direct": false,
            "version": "4.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "collect-v8-coverage",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "1.9.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-convert",
            "direct": false,
            "version": "2.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "color-name",
            "direct": false,
            "version": "1.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "commander",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "concat-map",
            "direct": false,
            "version": "0.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "1.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "convert-source-map",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-fetch",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "cross-spawn",
            "direct": false,
            "version": "7.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "crypto-random-string",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "debug",
            "direct": false,
            "version": "4.3.4",
            "ecosystem": "npm"
          },
          {
            "name": "dedent",
            "direct": false,
            "version": "1.5.1",
            "ecosystem": "npm"
          },
          {
            "name": "deep-is",
            "direct": false,
            "version": "0.1.4",
            "ecosystem": "npm"
          },
          {
            "name": "deepmerge",
            "direct": false,
            "version": "4.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "detect-newline",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "diff-sequences",
            "direct": false,
            "version": "29.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "dir-glob",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "doctrine",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "electron-to-chromium",
            "direct": false,
            "version": "1.4.283",
            "ecosystem": "npm"
          },
          {
            "name": "emittery",
            "direct": false,
            "version": "0.13.1",
            "ecosystem": "npm"
          },
          {
            "name": "emoji-regex",
            "direct": false,
            "version": "8.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "error-ex",
            "direct": false,
            "version": "1.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "esbuild",
            "direct": false,
            "version": "0.18.17",
            "ecosystem": "npm"
          },
          {
            "name": "escalade",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "escape-string-regexp",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint",
            "direct": false,
            "version": "8.57.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-config-prettier",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-plugin-deprecation",
            "direct": false,
            "version": "1.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-scope",
            "direct": false,
            "version": "7.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "eslint-visitor-keys",
            "direct": false,
            "version": "3.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "espree",
            "direct": false,
            "version": "9.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "esprima",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "esquery",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "esrecurse",
            "direct": false,
            "version": "4.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "estraverse",
            "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": "execa",
            "direct": false,
            "version": "5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "exit",
            "direct": false,
            "version": "0.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "expect",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "fast-deep-equal",
            "direct": false,
            "version": "3.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "fast-glob",
            "direct": false,
            "version": "3.2.12",
            "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.13.0",
            "ecosystem": "npm"
          },
          {
            "name": "fb-watchman",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "file-entry-cache",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "fill-range",
            "direct": false,
            "version": "7.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "find-up",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "flat-cache",
            "direct": false,
            "version": "3.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "flatted",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "fs.realpath",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "fsevents",
            "direct": false,
            "version": "2.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "function-bind",
            "direct": false,
            "version": "1.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "gensync",
            "direct": false,
            "version": "1.0.0-beta.2",
            "ecosystem": "npm"
          },
          {
            "name": "get-caller-file",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "get-stream",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "glob",
            "direct": false,
            "version": "7.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "glob-parent",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "11.12.0",
            "ecosystem": "npm"
          },
          {
            "name": "globals",
            "direct": false,
            "version": "13.24.0",
            "ecosystem": "npm"
          },
          {
            "name": "globby",
            "direct": false,
            "version": "11.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "graceful-fs",
            "direct": false,
            "version": "4.2.10",
            "ecosystem": "npm"
          },
          {
            "name": "graphemer",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "has",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "has-flag",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "html-escaper",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "human-signals",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "ignore",
            "direct": false,
            "version": "5.3.2",
            "ecosystem": "npm"
          },
          {
            "name": "import-fresh",
            "direct": false,
            "version": "3.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "import-local",
            "direct": false,
            "version": "3.1.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": "is-arrayish",
            "direct": false,
            "version": "0.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-binary-path",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-core-module",
            "direct": false,
            "version": "2.12.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-extglob",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "is-fullwidth-code-point",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-generator-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-glob",
            "direct": false,
            "version": "4.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-number",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-path-inside",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "is-stream",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "isexe",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-coverage",
            "direct": false,
            "version": "3.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-instrument",
            "direct": false,
            "version": "5.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-report",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-lib-source-maps",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "istanbul-reports",
            "direct": false,
            "version": "3.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "jest",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-changed-files",
            "direct": false,
            "version": "29.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "jest-circus",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-cli",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-config",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-diff",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-docblock",
            "direct": false,
            "version": "29.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-each",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-environment-node",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-expect-message",
            "direct": false,
            "version": "1.1.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-get-type",
            "direct": false,
            "version": "29.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-haste-map",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-leak-detector",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-matcher-utils",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-message-util",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-mock",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-pnp-resolver",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-regex-util",
            "direct": false,
            "version": "29.4.3",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-resolve-dependencies",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runner",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-runtime",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-snapshot",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-util",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-validate",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-watcher",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "jest-worker",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "joycon",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-tokens",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "3.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "js-yaml",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "jsesc",
            "direct": false,
            "version": "2.5.2",
            "ecosystem": "npm"
          },
          {
            "name": "json-parse-even-better-errors",
            "direct": false,
            "version": "2.3.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": "2.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "kleur",
            "direct": false,
            "version": "3.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "leven",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "levn",
            "direct": false,
            "version": "0.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "lilconfig",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "lines-and-columns",
            "direct": false,
            "version": "1.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "load-tsconfig",
            "direct": false,
            "version": "0.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "locate-path",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.memoize",
            "direct": false,
            "version": "4.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.merge",
            "direct": false,
            "version": "4.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "lodash.sortby",
            "direct": false,
            "version": "4.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-dir",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "make-error",
            "direct": false,
            "version": "1.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "makeerror",
            "direct": false,
            "version": "1.0.12",
            "ecosystem": "npm"
          },
          {
            "name": "merge-stream",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "merge2",
            "direct": false,
            "version": "1.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "micromatch",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "mimic-fn",
            "direct": false,
            "version": "2.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "minimatch",
            "direct": false,
            "version": "9.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "ms",
            "direct": false,
            "version": "2.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "mz",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "natural-compare",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-fetch",
            "direct": false,
            "version": "2.7.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-int64",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "node-releases",
            "direct": false,
            "version": "2.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "normalize-path",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "npm-run-path",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "object-assign",
            "direct": false,
            "version": "4.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "once",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "onetime",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "optionator",
            "direct": false,
            "version": "0.9.4",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "2.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-limit",
            "direct": false,
            "version": "3.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "4.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-locate",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "p-try",
            "direct": false,
            "version": "2.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "parent-module",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "parse-json",
            "direct": false,
            "version": "5.2.0",
            "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-type",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picocolors",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "picomatch",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "pirates",
            "direct": false,
            "version": "4.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "pkg-dir",
            "direct": false,
            "version": "4.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-load-config",
            "direct": false,
            "version": "4.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "prelude-ls",
            "direct": false,
            "version": "1.2.1",
            "ecosystem": "npm"
          },
          {
            "name": "prettier",
            "direct": false,
            "version": "3.3.3",
            "ecosystem": "npm"
          },
          {
            "name": "pretty-format",
            "direct": false,
            "version": "29.6.2",
            "ecosystem": "npm"
          },
          {
            "name": "prompts",
            "direct": false,
            "version": "2.4.2",
            "ecosystem": "npm"
          },
          {
            "name": "punycode",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "pure-rand",
            "direct": false,
            "version": "6.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "queue-microtask",
            "direct": false,
            "version": "1.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "react-is",
            "direct": false,
            "version": "18.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "readdirp",
            "direct": false,
            "version": "3.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "require-directory",
            "direct": false,
            "version": "2.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "resolve",
            "direct": false,
            "version": "1.22.2",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-cwd",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve-from",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "resolve.exports",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "reusify",
            "direct": false,
            "version": "1.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "rimraf",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "3.29.5",
            "ecosystem": "npm"
          },
          {
            "name": "run-parallel",
            "direct": false,
            "version": "1.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "safe-buffer",
            "direct": false,
            "version": "5.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "6.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "semver",
            "direct": false,
            "version": "7.6.3",
            "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": "signal-exit",
            "direct": false,
            "version": "3.0.7",
            "ecosystem": "npm"
          },
          {
            "name": "sisteransi",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "slash",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.6.1",
            "ecosystem": "npm"
          },
          {
            "name": "source-map",
            "direct": false,
            "version": "0.8.0-beta.0",
            "ecosystem": "npm"
          },
          {
            "name": "source-map-support",
            "direct": false,
            "version": "0.5.13",
            "ecosystem": "npm"
          },
          {
            "name": "sprintf-js",
            "direct": false,
            "version": "1.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "stack-utils",
            "direct": false,
            "version": "2.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "stream-buffers",
            "direct": false,
            "version": "3.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-length",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "string-width",
            "direct": false,
            "version": "4.2.3",
            "ecosystem": "npm"
          },
          {
            "name": "strip-ansi",
            "direct": false,
            "version": "6.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "strip-bom",
            "direct": false,
            "version": "4.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-final-newline",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "strip-json-comments",
            "direct": false,
            "version": "3.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "sucrase",
            "direct": false,
            "version": "3.28.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "5.5.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "supports-color",
            "direct": false,
            "version": "8.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "supports-preserve-symlinks-flag",
            "direct": false,
            "version": "1.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "temp-dir",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "test-exclude",
            "direct": false,
            "version": "6.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "text-table",
            "direct": false,
            "version": "0.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "thenify",
            "direct": false,
            "version": "3.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "thenify-all",
            "direct": false,
            "version": "1.6.0",
            "ecosystem": "npm"
          },
          {
            "name": "tmpl",
            "direct": false,
            "version": "1.0.5",
            "ecosystem": "npm"
          },
          {
            "name": "to-data-view",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-fast-properties",
            "direct": false,
            "version": "2.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "to-regex-range",
            "direct": false,
            "version": "5.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "0.0.3",
            "ecosystem": "npm"
          },
          {
            "name": "tr46",
            "direct": false,
            "version": "1.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "tree-kill",
            "direct": false,
            "version": "1.2.2",
            "ecosystem": "npm"
          },
          {
            "name": "ts-api-utils",
            "direct": false,
            "version": "1.3.0",
            "ecosystem": "npm"
          },
          {
            "name": "ts-interface-checker",
            "direct": false,
            "version": "0.1.13",
            "ecosystem": "npm"
          },
          {
            "name": "ts-jest",
            "direct": false,
            "version": "29.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "1.14.1",
            "ecosystem": "npm"
          },
          {
            "name": "tslib",
            "direct": false,
            "version": "2.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "tsup",
            "direct": false,
            "version": "7.2.0",
            "ecosystem": "npm"
          },
          {
            "name": "tsutils",
            "direct": false,
            "version": "3.21.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-check",
            "direct": false,
            "version": "0.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-detect",
            "direct": false,
            "version": "4.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.20.2",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "0.21.3",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "1.4.0",
            "ecosystem": "npm"
          },
          {
            "name": "type-fest",
            "direct": false,
            "version": "2.19.0",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "5.1.6",
            "ecosystem": "npm"
          },
          {
            "name": "unique-string",
            "direct": false,
            "version": "3.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "update-browserslist-db",
            "direct": false,
            "version": "1.0.10",
            "ecosystem": "npm"
          },
          {
            "name": "uri-js",
            "direct": false,
            "version": "4.4.1",
            "ecosystem": "npm"
          },
          {
            "name": "v8-to-istanbul",
            "direct": false,
            "version": "9.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "walker",
            "direct": false,
            "version": "1.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "3.0.1",
            "ecosystem": "npm"
          },
          {
            "name": "webidl-conversions",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "5.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "whatwg-url",
            "direct": false,
            "version": "7.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "which",
            "direct": false,
            "version": "2.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "word-wrap",
            "direct": false,
            "version": "1.2.5",
            "ecosystem": "npm"
          },
          {
            "name": "wrap-ansi",
            "direct": false,
            "version": "7.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "wrappy",
            "direct": false,
            "version": "1.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "write-file-atomic",
            "direct": false,
            "version": "4.0.2",
            "ecosystem": "npm"
          },
          {
            "name": "y18n",
            "direct": false,
            "version": "5.0.8",
            "ecosystem": "npm"
          },
          {
            "name": "yaml",
            "direct": false,
            "version": "2.3.1",
            "ecosystem": "npm"
          },
          {
            "name": "yargs-parser",
            "direct": false,
            "version": "21.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "yocto-queue",
            "direct": false,
            "version": "0.1.0",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 449,
        "direct_count": 9,
        "indirect_count": 440
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 65,
        "open_issues": 6,
        "closed_ratio": 0.76,
        "closed_issues": 19,
        "closed_unmerged_prs": 8
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "ikreymer",
          "commits": 79,
          "avatar_url": "https://avatars.githubusercontent.com/u/1015759?v=4"
        },
        {
          "type": "User",
          "login": "emma-sg",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/5727389?v=4"
        },
        {
          "type": "User",
          "login": "mistydemeo",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/780485?v=4"
        },
        {
          "type": "User",
          "login": "matteocargnelutti",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/625889?v=4"
        },
        {
          "type": "User",
          "login": "patrickheeney",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1407228?v=4"
        },
        {
          "type": "User",
          "login": "tw4l",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/6758804?v=4"
        },
        {
          "type": "User",
          "login": "austinfrey",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/11063598?v=4"
        },
        {
          "type": "User",
          "login": "chelkyl",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/14041823?v=4"
        }
      ],
      "contributors_sampled": 8,
      "top_contributor_share": 0.878
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yaml",
        "npm-release.yaml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".eslintrc.cjs"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "yarn.lock"
      ],
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 3,
            "reason": "8 out of 25 merged PRs checked by a CI test -- score normalized to 3",
            "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": 5,
            "reason": "Found 13/25 approved changesets -- score normalized to 5",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 4 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": 2,
            "reason": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "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": 3,
            "reason": "security policy file 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": 0,
            "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": 0,
            "reason": "21 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "fcbd8c0287b9c8555c31ecfd9b107c6f2941a6e8",
        "ran_at": "2026-08-01T12:41:37Z",
        "aggregate_score": 4.4,
        "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-27T21:22:25Z",
      "oldest_open_prs": [
        {
          "number": 97,
          "created_at": "2026-02-26T07:05:51Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 98,
          "created_at": "2026-03-20T15:41:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 99,
          "created_at": "2026-03-25T23:21:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 101,
          "created_at": "2026-07-23T00:35:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 103,
          "created_at": "2026-07-27T21:05:50Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 104,
          "created_at": "2026-07-27T21:05:59Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-27T21:21:34Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 4,
          "created_at": "2020-04-14T22:26:32Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 5,
          "created_at": "2020-04-14T22:27:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 7,
          "created_at": "2020-04-14T22:33:16Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 22,
          "created_at": "2021-04-09T17:30:58Z",
          "last_comment_at": "2021-04-10T04:57:03Z",
          "last_comment_author": "jlarmstrongiv"
        },
        {
          "number": 49,
          "created_at": "2022-12-17T14:18:29Z",
          "last_comment_at": "2023-05-01T03:37:01Z",
          "last_comment_author": "jlarmstrongiv"
        },
        {
          "number": 51,
          "created_at": "2023-02-23T23:24:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/webrecorder/warcio.js",
    "host": "github.com",
    "name": "warcio.js",
    "owner": "webrecorder"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": "The weighted overall 62 is calibrated to 69 on the published index scale (record calibration 2026-08-02).",
      "notes": [
        {
          "code": "overall_calibration",
          "params": {
            "raw": 62,
            "calibrated": 69,
            "calibration": "2026-08-02"
          }
        }
      ],
      "value": 69,
      "inputs": {
        "security": 55,
        "vitality": 68,
        "community": 55,
        "governance": 67,
        "calibration": "2026-08-02",
        "engineering": 62,
        "ai_readiness": 61,
        "weighted_overall_raw": 62
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 68,
        "weight": 0.21,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "commits_last_year": 10,
              "human_commit_share": 0.947,
              "days_since_last_push": 4,
              "active_weeks_last_year": 7
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "7/52 weeks with commits",
                "points": 4.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 7
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "10 commits in the last year",
                "points": 9.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "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": 92,
            "inputs": {
              "releases_count": 25,
              "latest_release_tag": "v2.4.11",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 67.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "25 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 25
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~67.8 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 67.8
                    }
                  }
                ],
                "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": "exceptional",
            "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": 7,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 7 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 7
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 55,
        "weight": 0.17,
        "metrics": [
          {
            "key": "popularity",
            "band": "weak",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 36,
            "inputs": {
              "forks": 7,
              "stars": 55,
              "watchers": 3,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "55 stars",
                "points": 28.1,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 55
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "3 watchers",
                "points": 1.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "readme_badges": null,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "readme_badge_services": [],
              "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": "good",
            "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": 73,
            "inputs": {
              "packages": [
                "warcio"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 24735
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "24,735 downloads/month across npm",
                "points": 58.6,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 24735,
                      "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": "good",
        "name": "Sustainability & Governance",
        "value": 67,
        "weight": 0.23,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 32,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 8,
              "top_contributor_share": 0.878
            },
            "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 88% of commits",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 88
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "8 contributors",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 4 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Newcomer PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "newcomer_pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 76,
            "inputs": {
              "merged_prs": 65,
              "open_issues": 6,
              "closed_issues": 19,
              "prs_merged_7d": null,
              "prs_decided_7d": null,
              "prs_merged_30d": null,
              "prs_decided_30d": null,
              "issue_closed_ratio": 0.76,
              "closed_unmerged_prs": 8,
              "first_time_authors_30d": null,
              "first_time_prs_merged_30d": null,
              "first_time_prs_decided_30d": null
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "76% of issues closed",
                "points": 31.9,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 76
                    }
                  }
                ],
                "max_points": 42
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "65/73 decided PRs merged",
                "points": 26.7,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 65,
                      "decided": 73
                    }
                  }
                ],
                "max_points": 30
              },
              {
                "key": "newcomer_pr_acceptance",
                "name": "Newcomer PR acceptance",
                "detail": "no first-time contributor's PR decided in 30d",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_newcomer_prs",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 13
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 13/25 approved changesets -- score normalized to 5",
                "points": 7.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "followers": 453,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "webrecorder",
              "public_repos": 80,
              "account_age_days": 4012
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "453 followers of webrecorder",
                "points": 19.1,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 453,
                      "login": "webrecorder"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "80 public repos, account ~10 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 80
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 10
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "exceptional",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "warcio"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "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 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "53 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 53
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 62,
        "weight": 0.19,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 70,
            "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": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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.cjs",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "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": "8 out of 25 merged PRs checked by a CI test -- score normalized to 3",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "weak",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 4.4
            },
            "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": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "8 out of 25 merged PRs checked by a CI test -- score normalized to 3",
                "points": 0.8,
                "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 13/25 approved changesets -- score normalized to 5",
                "points": 3.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 4 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": "3 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 detected",
                "points": 1.5,
                "status": "partial",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "21 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "exceptional",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:warcio@2.4.11 runtime dependency closure — what installing the published package pulls in — 32 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:warcio@2.4.11",
                  "assessed": 32
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 32,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "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": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "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": "exceptional",
            "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": 32,
              "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": "exceptional",
            "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": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "assessed_self_published_locations": 12
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "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": 61,
        "weight": 0.04,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "weak",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.856,
              "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": "77 of 90 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 77,
                      "sampled": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 62,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "yarn.lock"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "test/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.053
            },
            "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.cjs",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.cjs"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "test/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "test/tsconfig.json, 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 95",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 95
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "5 of the last 95 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 5,
                      "sampled": 95
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "exceptional",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 36056,
              "source_files_sampled": 30,
              "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/30 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 30,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? Carries a deliberately small weight: agent tooling is a real maintenance signal, but its absence must never gate the top of the scale (calibration saturates at raw 91, so 100/100 remains reachable with AI Readiness at zero)."
      }
    ],
    "classification": {
      "top": [
        "library",
        "application"
      ],
      "labels": [
        "library",
        "cli"
      ],
      "scores": {
        "cli": 4,
        "library": 6
      },
      "primary": "library",
      "evidence": [
        {
          "tier": "distribution",
          "label": "library",
          "source": "registry:npm",
          "weight": 6
        },
        {
          "tier": "dependencies",
          "label": "cli",
          "source": "dep:yargs",
          "weight": 4
        }
      ],
      "artifacts": [],
      "confidence": "medium",
      "host_extension": false,
      "runs_as_process": true,
      "consumed_by_code": true
    },
    "metrics_version": "2.5.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-08-01T12:41:56.149571Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/webrecorder/warcio.js.svg",
  "full_name": "webrecorder/warcio.js",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v2.5.0, schema v0.27.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statisticsnpm.