{"id":15057906,"url":"https://github.com/w3c/node-w3capi","last_synced_at":"2026-02-18T13:06:36.117Z","repository":{"id":36016218,"uuid":"40310877","full_name":"w3c/node-w3capi","owner":"w3c","description":"A JavaScript client for the W3C API","archived":false,"fork":false,"pushed_at":"2026-01-16T09:16:05.000Z","size":1091,"stargazers_count":32,"open_issues_count":2,"forks_count":15,"subscribers_count":6,"default_branch":"gh-pages","last_synced_at":"2026-01-22T23:45:40.306Z","etag":null,"topics":["api","client","javascript","nodejs","w3c","w3c-api"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/w3c.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2015-08-06T14:59:51.000Z","updated_at":"2026-01-16T09:16:03.000Z","dependencies_parsed_at":"2023-02-14T18:15:56.527Z","dependency_job_id":"ab7b804a-ee5d-4834-b88f-b24772a3352f","html_url":"https://github.com/w3c/node-w3capi","commit_stats":{"total_commits":200,"total_committers":10,"mean_commits":20.0,"dds":0.69,"last_synced_commit":"3076a3e991c03ec1cf8ff7fc87288bf5af72b92d"},"previous_names":["darobin/w3capi"],"tags_count":18,"template":false,"template_full_name":null,"purl":"pkg:github/w3c/node-w3capi","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3c%2Fnode-w3capi","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3c%2Fnode-w3capi/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3c%2Fnode-w3capi/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3c%2Fnode-w3capi/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/w3c","download_url":"https://codeload.github.com/w3c/node-w3capi/tar.gz/refs/heads/gh-pages","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/w3c%2Fnode-w3capi/sbom","scorecard":{"id":323146,"data":{"date":"2025-07-28","repo":{"name":"github.com/w3c/node-w3capi","commit":"7407a6b8aaa678d2ca5082207b449174804aa6d1"},"scorecard":{"version":"v5.2.1-26-g4feedb85","commit":"4feedb857ab8d82158aa9774bf8054df41992180"},"score":6,"checks":[{"name":"Code-Review","score":0,"reason":"Found 0/2 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#code-review"}},{"name":"Maintained","score":10,"reason":"20 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#packaging"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":10,"reason":"GitHub workflow tokens follow principle of least privilege","details":["Info: topLevel 'contents' permission set to 'read': .github/workflows/node.js.yml:10","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#dangerous-workflow"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:20: update your workflow using https://app.stepsecurity.io/secureworkflow/w3c/node-w3capi/node.js.yml/gh-pages?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/node.js.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/w3c/node-w3capi/node.js.yml/gh-pages?enable=pin","Info:   0 out of   2 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   1 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#cii-best-practices"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#security-policy"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 29 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":9,"reason":"1 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/4feedb857ab8d82158aa9774bf8054df41992180/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-18T01:51:56.693Z","repository_id":36016218,"created_at":"2025-08-18T01:51:56.693Z","updated_at":"2025-08-18T01:51:56.693Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29580710,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-18T08:38:15.585Z","status":"ssl_error","status_checked_at":"2026-02-18T08:38:14.917Z","response_time":162,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","client","javascript","nodejs","w3c","w3c-api"],"created_at":"2024-09-24T22:14:05.246Z","updated_at":"2026-02-18T13:06:31.101Z","avatar_url":"https://github.com/w3c.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[![npm version](https://img.shields.io/npm/v/node-w3capi.svg)](https://npmjs.org/package/node-w3capi)\n[![Licence](https://img.shields.io/npm/l/node-w3capi.svg)](LICENSE)\n[![node-w3capi tests](https://github.com/w3c/node-w3capi/actions/workflows/node.js.yml/badge.svg)](https://github.com/w3c/node-w3capi/actions/workflows/node.js.yml)\n[![Dependency Status](https://david-dm.org/w3c/node-w3capi.svg)](https://david-dm.org/w3c/node-w3capi)\n[![devDependency Status](https://david-dm.org/w3c/node-w3capi/dev-status.svg)](https://david-dm.org/w3c/node-w3capi#info=devDependencies)\n\n# node-w3capi — A JavaScript client for the W3C API\n\nThis library provides a client for the [W3C API](https://w3c.github.io/w3c-api/), which exposes information about things such as specifications, groups, users, etc.\nIt follows a simple pattern in which one builds up a query, and then causes the data to be fetched.\n\n## Usage\n\n### Server-side\n\nThe usual:\n\n```sh\nnpm install node-w3capi\n```\n\nand then:\n\n```js\nvar w3capi = require('node-w3capi');\n```\n\n### Client-side\n\nGrab the AMD module ([`lib/w3capi.js`](https://w3c.github.io/node-w3capi/lib/w3capi.js)) and use it, eg via [RequireJS](http://requirejs.org/):\n\n```js\nrequirejs(['w3capi'], function(w3capi) {\n});\n```\n\n## API\n\nThis documentation does not describe the fields that the various objects have; refer to the [W3C API's documentation](https://api.w3.org/doc) for that.\n\nEverything always starts in the same way:\n\nThis gives you a client instance that's immediately ready to work. You then chain some methods to\nspecify what you want to get, and fetch with a callback. For example:\n\n```js\nvar handler = function (err, data) {\n    if (err) return console.error(\"[ERROR]\", err);\n    console.log(data);\n};\n\n// just list all the groups\nw3capi.groups()\n   .fetch(handler);\n\n// get the editors for a specific version of a specification\nw3capi.specification(\"SVG11\")\n   .version(\"20030114\")\n   .editors\n   .fetch(handler);\n```\n\nIf you are familiar with the W3C API you know that it supports paging. This library hides that fact\nand when it sees a paged list of results it *always* fetches the whole set. Typically that is a\nvery reasonable number of items.\n\n### `fetch([options], cb)`\n\nAll queries end with a call to `fetch()`. You can pass `{ embed: true }` as an option if you with\nfor the returned value to embed some of the content from the API (this matches `?embed=true`). At\nthis point that is the only option. You can do without the `options` altogether.\n\nThe `cb` receives the typical `err` and `data` parameters.\n\nIf no `cb` parameter is provided, the `fetch()` method instead returns a promise that will resolve with the expected data.\n\n### Specifications\n\nUsage summary:\n\n```js\nw3capi.specifications().fetch()\nw3capi.specification(\"SVG\").fetch()\nw3capi.specification(\"SVG\").versions().fetch()\nw3capi.specification(\"SVG\").version(\"19991203\").fetch()\nw3capi.specification(\"SVG\").version(\"19991203\").deliverers().fetch()\nw3capi.specification(\"SVG\").version(\"19991203\").editors().fetch()\nw3capi.specification(\"SVG\").version(\"19991203\").successors().fetch()\nw3capi.specification(\"SVG\").version(\"19991203\").predecessors().fetch()\nw3capi.specification(\"SVG11\").latest().fetch()\nw3capi.specification(\"SVG\").superseded().fetch()\nw3capi.specification(\"SVG11\").supersedes().fetch()\n```\n\nYou can list all specifications, or get a single one using its shortname. For a given specification,\nyou can list its versions and for a given version its editors and deliverers (the groups who shipped\nit), as well as which versions were the previous or next. You can know which specification\nsupersedes or was superseded by which other. You can use `latest()` to get the latest version\nwithout having to list them.\n\n### Groups and charters\n\nUsage summary:\n\n```js\nw3capi.groups().fetch()\nw3capi.group(54381).fetch()\nw3capi.group(54381).chairs().fetch()\nw3capi.group(54381).services().fetch()\nw3capi.group(54381).specifications().fetch()\nw3capi.group(54381).teamcontacts().fetch()\nw3capi.group(54381).users().fetch()\nw3capi.group(54381).charters().fetch()\nw3capi.group(46884).charter(89).fetch()\nw3capi.group(46884).participations().fetch()\n```\n\nYou can list all groups or get a specific one by its ID (this is the same ID used in IPP, if you're\nfamiliar with that — also the same used in ReSpec for the group). There are several sublists that\ncan be obtained, that are hopefully self-explanatory. The charters can be listed, and a specific\ncharter can be fetched given its ID (an opaque number).\n\n### Users\n\nUsage summary:\n\n```js\nw3capi.user(\"ivpki36ou94oo08osswccs80gcwogwk\").fetch()\nw3capi.user({type: \"github\", id: \"1479073\"}).fetch()\nw3capi.user(\"ivpki36ou94oo08osswccs80gcwogwk\").affiliations().fetch()\nw3capi.user(\"ivpki36ou94oo08osswccs80gcwogwk\").groups().fetch()\nw3capi.user(\"ivpki36ou94oo08osswccs80gcwogwk\").participations().fetch()\nw3capi.user(\"ivpki36ou94oo08osswccs80gcwogwk\").specifications().fetch()\n```\n\nUsers cannot be listed, and the ID used to fetch them is an opaque identifier (not the ID used\ninternally in the system so as to make it harder to slurp them all in). Alternatively, users can be fetched by their known 3rd-party account id (assuming they have been connected from the user profile). Various sublists can be\nobtained.\n\n### Functions\n\nUsage summary:\n\n```js\nw3capi.functions().fetch()\nw3capi.function(109).fetch()\nw3capi.function(109).services().fetch()\nw3capi.function(109).users().fetch()\n```\n\nFunctions are an organisational structure internal to the W3C, of little interest to the outside world.\n\n### Services\n\nUsage summary:\n\n```js\nw3capi.services(2).fetch()\nw3capi.services(2).groups().fetch()\n```\n\nServices model tools that groups (or functions) can use, such as IRC, a bug tracker, a mailing list,\netc. At this point in time, the services database isn't well-maintained but it could become more\nuseful in future.\n\n### Affiliations\n\nUsage summary:\n\n```js\nw3capi.affiliations().fetch()\nw3capi.affiliation(1234).fetch()\nw3capi.affiliation(1234).participants().fetch()\nw3capi.affiliation(1234).participations().fetch()\n```\n\n### Participations\n\nUsage summary:\n\n```js\nw3capi.participation(555).fetch()\nw3capi.participation(555).participants().fetch()\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3c%2Fnode-w3capi","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fw3c%2Fnode-w3capi","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fw3c%2Fnode-w3capi/lists"}