{"id":19163232,"url":"https://github.com/oada/list-lib","last_synced_at":"2026-02-12T14:03:30.730Z","repository":{"id":48045267,"uuid":"276510412","full_name":"OADA/list-lib","owner":"OADA","description":"Library for handling most of the complexities of dealing with OADA lists and watching their change feeds","archived":false,"fork":false,"pushed_at":"2025-02-15T07:40:20.000Z","size":7635,"stargazers_count":0,"open_issues_count":10,"forks_count":0,"subscribers_count":10,"default_branch":"master","last_synced_at":"2025-08-30T02:30:29.652Z","etag":null,"topics":["change-feed","oada","watch"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OADA.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-07-02T00:26:11.000Z","updated_at":"2024-10-04T13:57:05.000Z","dependencies_parsed_at":"2024-03-26T22:25:10.366Z","dependency_job_id":"8dc8a5aa-749d-4fb4-9b95-fe1c5c2ca745","html_url":"https://github.com/OADA/list-lib","commit_stats":{"total_commits":129,"total_committers":4,"mean_commits":32.25,"dds":"0.11627906976744184","last_synced_commit":"0833545412a74fe3287c748669140858a8d836a2"},"previous_names":[],"tags_count":36,"template":false,"template_full_name":null,"purl":"pkg:github/OADA/list-lib","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Flist-lib","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Flist-lib/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Flist-lib/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Flist-lib/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OADA","download_url":"https://codeload.github.com/OADA/list-lib/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OADA%2Flist-lib/sbom","scorecard":{"id":103351,"data":{"date":"2025-08-11","repo":{"name":"github.com/OADA/list-lib","commit":"a7d01dcd9c297547754bb8854fdc9860446b5567"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":2.9,"checks":[{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/26 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/build-test-push.yml:1","Warn: no topLevel permission defined: .github/workflows/codeql-analysis.yml:1","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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-test-push.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/OADA/list-lib/build-test-push.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/OADA/list-lib/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/OADA/list-lib/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:53: update your workflow using https://app.stepsecurity.io/secureworkflow/OADA/list-lib/codeql-analysis.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql-analysis.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/OADA/list-lib/codeql-analysis.yml/master?enable=pin","Info:   0 out of   4 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction 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/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":7,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 0 commits out of 4 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"13 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: GHSA-968p-4wvh-cqc8","Warn: Project is vulnerable to: GHSA-v6h2-p8h4-qcjw","Warn: Project is vulnerable to: GHSA-grv7-fg5c-xmjg","Warn: Project is vulnerable to: GHSA-3xgq-45jj-v275","Warn: Project is vulnerable to: GHSA-pppg-cpfq-h7wr","Warn: Project is vulnerable to: GHSA-hw8r-x6gr-5gjp","Warn: Project is vulnerable to: GHSA-952p-6rrq-rcjv","Warn: Project is vulnerable to: GHSA-9wv6-86v2-598j","Warn: Project is vulnerable to: GHSA-f5x3-32g6-xq36","Warn: Project is vulnerable to: GHSA-3g92-w8c5-73pq","Warn: Project is vulnerable to: GHSA-c76h-2ccp-4975","Warn: Project is vulnerable to: GHSA-cxrh-j4jr-qwg3","Warn: Project is vulnerable to: GHSA-3h5v-q93c-6h6q"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-15T10:38:00.841Z","repository_id":48045267,"created_at":"2025-08-15T10:38:00.841Z","updated_at":"2025-08-15T10:38:00.841Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29367843,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-12T08:51:36.827Z","status":"ssl_error","status_checked_at":"2026-02-12T08:51:26.849Z","response_time":55,"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":["change-feed","oada","watch"],"created_at":"2024-11-09T09:14:35.776Z","updated_at":"2026-02-12T14:03:30.706Z","avatar_url":"https://github.com/OADA.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# @oada/list-lib\n\n[![npm](https://img.shields.io/npm/v/@oada/list-lib)](https://www.npmjs.com/package/@oada/list-lib)\n[![Downloads/week](https://img.shields.io/npm/dw/@oada/list-lib.svg)](https://npmjs.org/package/@oada/list-lib)\n[![code style: prettier](https://img.shields.io/badge/code_style-prettier-ff69b4.svg)](https://github.com/prettier/prettier)\n[![License](https://img.shields.io/github/license/OADA/client)](LICENSE)\n\nA library for handling lists of items in OADA for TypeScript and JavaScript.\nThe library takes callbacks for events like\nnew items, removed items, and changed items.\nIt tried to abstract away as much of the complexity as is reasonable,\nand tracks which items in the list are new, old, etc.\n\nFor detailed options, see the `Options` type in src/Options.ts\n\n## Basic Usage Example\n\n```typescript\nimport { ChangeType, ListWatch, AssumeState } from '@oada/list-lib'\n\n// See type definitions for all supported options\nconst watch = new ListWatch({\n    path: '/bookmarks/foo/list',\n    assertItem: /* assertion function to run on each item handled */,\n    conn: /* an @oada/client instance */,\n    name: /* string; key name of the oada-list-lib entry in the _meta doc*/,\n    resume: /* boolean; whether to track changes using a _meta/oada-list-lib/\u003cname\u003e entry */,\n    onNewList: /* AssumeState.New || AssumeState.Handled; Whether or not to handle existing\n                  list items on startup. `New` means it will treat the list as new every time\n                  it starts up and will attempt to process each item; `Handled` means it will\n                  not process existing items. */,\n})\n\n// Uses async generators\nconst itemsGenerator = await watch.on(ChangeType.ItemAdded);\nfor await (const item of itemsGenerator) {\n    console.log(item, 'New item added');\n}\n\n// Can use callbacks instead\nwatch.on(ChangeType.ItemAdded, ({ item, id }) =\u003e { console.log(item, 'New list item') });\nwatch.on(ChangeType.ItemRemoved, ({ id }) =\u003e { console.log(item, 'Item removed') },\n```\n\n## Item types\n\nWhile the `ListWatch` class is generic,\nyou will typically not want to specify a type parameter in your code.\nIf you supply an `assertItem` function,\nthe type of `Item` will be inferred from it.\nThis will help minimize runtime errors\n(assuming your type assertion is good),\nand in the case of no assertion, the library defaults `Item` to `unknown`.\n\n## Rechecking items\n\nIn more advanced use cases, you might want to prompt the library to re-check\nall the items in the list.\nFor this reason, `ListWatch` has a `forceRecheck` method.\nCalling this will cause the library to check all the current list items.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foada%2Flist-lib","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foada%2Flist-lib","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foada%2Flist-lib/lists"}