原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 2244,
"has_wiki": false,
"homepage": "https://github.com/cipherstash/stack",
"languages": {
"Rust": 322131,
"Shell": 2380,
"JavaScript": 8828,
"TypeScript": 288052
},
"pushed_at": "2026-07-26T12:04:12Z",
"created_at": "2024-12-13T05:06:22Z",
"owner_type": "Organization",
"updated_at": "2026-07-20T09:17:35Z",
"description": "CipherStash Client Rust bindings for JS. Implemented in @cipherstash/stack",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Rust",
"significant_languages": [
"Rust",
"TypeScript"
]
},
"owner": {
"blog": "https://cipherstash.com",
"name": "CipherStash",
"type": "Organization",
"login": "cipherstash",
"company": null,
"location": "United States of America",
"followers": 72,
"avatar_url": "https://avatars.githubusercontent.com/u/66902246?v=4",
"created_at": "2020-06-14T09:00:37Z",
"is_verified": null,
"public_repos": 53,
"account_age_days": 2233
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.30.0",
"kind": "minor",
"published_at": "2026-07-20T09:19:00Z"
},
{
"tag": "v0.29.0",
"kind": "minor",
"published_at": "2026-07-09T16:54:13Z"
},
{
"tag": "v0.28.0",
"kind": "minor",
"published_at": "2026-07-08T02:52:23Z"
},
{
"tag": "v0.27.1-0",
"kind": "prerelease",
"published_at": "2026-07-06T05:12:14Z"
},
{
"tag": "v0.27.0",
"kind": "minor",
"published_at": "2026-07-04T14:29:51Z"
},
{
"tag": "v0.26.1-0",
"kind": "prerelease",
"published_at": "2026-07-04T14:07:17Z"
},
{
"tag": "v0.26.0",
"kind": "minor",
"published_at": "2026-06-08T04:30:57Z"
},
{
"tag": "v0.25.0",
"kind": "minor",
"published_at": "2026-05-29T06:39:50Z"
},
{
"tag": "v0.24.0",
"kind": "minor",
"published_at": "2026-05-26T09:33:38Z"
},
{
"tag": "v0.23.0",
"kind": "minor",
"published_at": "2026-05-21T13:17:02Z"
},
{
"tag": "v0.22.0",
"kind": "minor",
"published_at": "2026-05-20T17:38:10Z"
},
{
"tag": "v0.21.4",
"kind": "patch",
"published_at": "2026-04-30T08:53:43Z"
},
{
"tag": "v0.21.3",
"kind": "patch",
"published_at": "2026-04-28T06:50:22Z"
},
{
"tag": "v0.21.2",
"kind": "patch",
"published_at": "2026-04-09T15:28:15Z"
},
{
"tag": "v0.21.1",
"kind": "patch",
"published_at": "2026-04-08T22:03:30Z"
},
{
"tag": "v0.21.0",
"kind": "minor",
"published_at": "2026-03-24T03:20:31Z"
},
{
"tag": "v0.20.2",
"kind": "patch",
"published_at": "2026-02-24T22:40:29Z"
},
{
"tag": "v0.20.1",
"kind": "patch",
"published_at": "2026-01-28T04:42:24Z"
},
{
"tag": "v0.20.0",
"kind": "minor",
"published_at": "2026-01-19T01:20:59Z"
},
{
"tag": "v0.19.0",
"kind": "minor",
"published_at": "2026-01-14T06:30:32Z"
},
{
"tag": "v0.19.0-8",
"kind": "prerelease",
"published_at": "2026-01-08T02:42:25Z"
},
{
"tag": "v0.18.1",
"kind": "patch",
"published_at": "2025-11-12T16:52:09Z"
},
{
"tag": "v0.18.0",
"kind": "minor",
"published_at": "2025-11-12T02:57:31Z"
},
{
"tag": "v0.17.1",
"kind": "patch",
"published_at": "2025-10-28T21:23:47Z"
},
{
"tag": "v0.17.1-11",
"kind": "prerelease",
"published_at": "2025-10-27T17:35:28Z"
},
{
"tag": "v0.17.1-10",
"kind": "prerelease",
"published_at": "2025-10-26T13:16:04Z"
},
{
"tag": "v0.17.1-9",
"kind": "prerelease",
"published_at": "2025-10-26T12:23:50Z"
},
{
"tag": "v0.17.1-8",
"kind": "prerelease",
"published_at": "2025-10-24T18:45:07Z"
},
{
"tag": "v0.17.1-7",
"kind": "prerelease",
"published_at": "2025-10-24T18:34:05Z"
},
{
"tag": "v0.17.1-6",
"kind": "prerelease",
"published_at": "2025-10-23T22:23:55Z"
},
{
"tag": "v0.17.1-5",
"kind": "prerelease",
"published_at": "2025-10-23T21:20:14Z"
},
{
"tag": "v0.17.1-4",
"kind": "prerelease",
"published_at": "2025-10-23T21:08:09Z"
},
{
"tag": "v0.17.1-3",
"kind": "prerelease",
"published_at": "2025-10-23T20:35:25Z"
},
{
"tag": "v0.17.1-2",
"kind": "prerelease",
"published_at": "2025-10-23T19:50:05Z"
},
{
"tag": "v0.17.1-1",
"kind": "prerelease",
"published_at": "2025-10-23T19:31:31Z"
},
{
"tag": "v0.17.1-0",
"kind": "prerelease",
"published_at": "2025-10-23T19:19:41Z"
},
{
"tag": "v0.18.0-9",
"kind": "prerelease",
"published_at": "2025-10-21T20:01:22Z"
},
{
"tag": "v0.18.0-8",
"kind": "prerelease",
"published_at": "2025-10-21T19:35:54Z"
},
{
"tag": "v0.18.0-7",
"kind": "prerelease",
"published_at": "2025-10-21T18:20:34Z"
},
{
"tag": "v0.18.0-6",
"kind": "prerelease",
"published_at": "2025-10-21T18:12:24Z"
},
{
"tag": "v0.18.0-5",
"kind": "prerelease",
"published_at": "2025-10-21T18:05:22Z"
},
{
"tag": "v0.18.0-4",
"kind": "prerelease",
"published_at": "2025-10-21T16:41:45Z"
},
{
"tag": "v0.18.0-3",
"kind": "prerelease",
"published_at": "2025-10-21T16:35:02Z"
},
{
"tag": "v0.18.0-2",
"kind": "prerelease",
"published_at": "2025-10-21T16:28:42Z"
},
{
"tag": "v0.18.0-1",
"kind": "prerelease",
"published_at": "2025-10-21T16:09:35Z"
},
{
"tag": "v0.18.0-0",
"kind": "prerelease",
"published_at": "2025-10-21T14:48:58Z"
},
{
"tag": "v0.17.0",
"kind": "minor",
"published_at": "2025-10-01T00:39:28Z"
},
{
"tag": "v0.16.1",
"kind": "patch",
"published_at": "2025-08-26T03:05:35Z"
},
{
"tag": "v0.16.0",
"kind": "minor",
"published_at": "2025-07-15T00:02:31Z"
},
{
"tag": "v0.16.0-2",
"kind": "prerelease",
"published_at": "2025-07-14T05:29:21Z"
},
{
"tag": "v0.16.0-1",
"kind": "prerelease",
"published_at": "2025-07-10T06:44:57Z"
},
{
"tag": "v0.16.0-0",
"kind": "prerelease",
"published_at": "2025-06-25T18:58:45Z"
},
{
"tag": "v0.5.4",
"kind": "patch",
"published_at": "2025-06-25T07:02:02Z"
},
{
"tag": "v0.15.0",
"kind": "minor",
"published_at": "2025-06-03T21:44:05Z"
},
{
"tag": "v0.15.0-0",
"kind": "prerelease",
"published_at": "2025-06-03T07:08:27Z"
},
{
"tag": "v0.14.2",
"kind": "patch",
"published_at": "2025-05-28T03:26:50Z"
},
{
"tag": "v0.14.1",
"kind": "patch",
"published_at": "2025-05-26T07:29:51Z"
},
{
"tag": "v0.14.0",
"kind": "minor",
"published_at": "2025-05-23T07:02:39Z"
},
{
"tag": "v0.13.0-1",
"kind": "prerelease",
"published_at": "2025-03-11T06:36:37Z"
},
{
"tag": "v0.13.0-0",
"kind": "prerelease",
"published_at": "2025-03-10T23:04:52Z"
},
{
"tag": "v0.12.0",
"kind": "minor",
"published_at": "2025-03-05T15:01:51Z"
},
{
"tag": "v0.12.0-4",
"kind": "prerelease",
"published_at": "2025-03-05T05:03:05Z"
},
{
"tag": "v0.12.0-3",
"kind": "prerelease",
"published_at": "2025-03-04T14:49:03Z"
},
{
"tag": "v0.12.0-2",
"kind": "prerelease",
"published_at": "2025-03-04T02:58:08Z"
},
{
"tag": "v0.12.0-1",
"kind": "prerelease",
"published_at": "2025-03-03T22:31:50Z"
},
{
"tag": "v0.12.0-0",
"kind": "prerelease",
"published_at": "2025-03-03T06:29:14Z"
},
{
"tag": "v0.11.0",
"kind": "minor",
"published_at": "2025-02-28T02:27:19Z"
},
{
"tag": "v0.10.0",
"kind": "minor",
"published_at": "2025-02-26T13:03:22Z"
},
{
"tag": "v0.9.0",
"kind": "minor",
"published_at": "2025-02-17T22:21:05Z"
},
{
"tag": "v0.8.0",
"kind": "minor",
"published_at": "2025-02-17T18:44:36Z"
},
{
"tag": "v0.7.0",
"kind": "minor",
"published_at": "2025-02-17T18:20:18Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2025-02-17T17:56:14Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2025-01-19T04:48:32Z"
},
{
"tag": "v0.5.0-0",
"kind": "prerelease",
"published_at": "2025-01-19T01:39:30Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2025-01-14T02:31:58Z"
},
{
"tag": "v0.4.0-0",
"kind": "prerelease",
"published_at": "2025-01-08T05:46:57Z"
},
{
"tag": "v0.3.0-0",
"kind": "prerelease",
"published_at": "2024-12-24T04:16:01Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2024-12-23T04:03:43Z"
},
{
"tag": "v0.2.0-0",
"kind": "prerelease",
"published_at": "2024-12-20T06:24:05Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2024-12-20T03:44:24Z"
},
{
"tag": "v0.1.1-2",
"kind": "prerelease",
"published_at": "2024-12-19T04:59:21Z"
},
{
"tag": "v0.1.1-1",
"kind": "prerelease",
"published_at": "2024-12-19T02:41:17Z"
},
{
"tag": "v0.1.1-0",
"kind": "prerelease",
"published_at": "2024-12-19T01:56:38Z"
}
],
"recent_commits": [
{
"oid": "361f026b8e68debcb1488c1aacbcfd32c282a557",
"body": null,
"is_bot": false,
"headline": "v0.30.0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-20T09:16:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "0f92dbbfe4ad2784d5bdec27a34c41e63b7b8a7d",
"body": "feat: support cipherstash-client 0.42 SteVec wire format",
"is_bot": false,
"headline": "Merge pull request #141 from cipherstash/dan/cipherstash-client-0.42",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-20T08:57:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5cffa3c766e6541eaf542323a5d52ef753e5b1ef",
"body": null,
"is_bot": false,
"headline": "fix: address PR 141 review feedback",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-20T07:49:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "347d8f7d4ec8d4393163d9a2e8a8b675de1a699e",
"body": null,
"is_bot": false,
"headline": "test: emit an actual v2 domain fixture",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-20T07:30:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5c57d8d4b569176781f4652f74e5beabaaf23bdc",
"body": null,
"is_bot": false,
"headline": "build: adopt published EQL 3.0.2 packages",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-20T07:22:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a8ea398fbe65f949b849cb91650bbe0344057162",
"body": null,
"is_bot": false,
"headline": "feat: support cipherstash-client 0.42 SteVec wire format",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-19T13:14:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "dee3ea5148a626c5ea0cc2283ea2a5a654398678",
"body": "…-native-v3-storage\n\nfeat(protect-ffi): emit v3 storage payloads natively via encrypt_eql_v3",
"is_bot": false,
"headline": "Merge pull request #136 from cipherstash/james/cip-3359-c-protect-ffi…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-18T14:49:45Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2df823c662fa798ad20f6cfd14b22f4ce01b8d82",
"body": "…se failures; add SteVec oracle tests\n\nAddress PR #136 review feedback (CodeRabbit + fresh-context review):\n\n- A natively-emitted v3 payload that fails its target domain's strict\n parse previously surfaced as a bare serde error (\"missing field `ob`\"),\n which the JS side maps to UNKNOWN. New Error:\n[…]\nainment projection is\n byte-identical to the from_v2 needle (envelope, c, and a stripped).\n\n- CHANGELOG: record the native v3 emission under Changed (closes the\n remaining pre-merge checklist item).",
"is_bot": false,
"headline": "fix(errors): keep the EQL_V3_CONVERSION_FAILED contract on native par…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-17T12:23:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "469cd76bc5e637876fc6f2aa80ec2bea27abdad8",
"body": "…h operator\n\neql 3.0.1 restructures the v3 JSON domains and the match operator:\n\n- The SteVec document domain is now `public.eql_v3_json_search` (was\n `eql_v3_json`) and its containment needle `eql_v3.query_json` (was\n `query_jsonb`). `public.eql_v3_json` still exists but is a new\n storage-only s\n[…]\n tests incl. postgres-v3 match/containment/\nselector against the reinstalled 3.0.1 schema) all pass. wasm-round-trip\nneeds CS_* env credentials and cannot run locally (pre-existing; CI\nprovides them).",
"is_bot": false,
"headline": "build(deps)!: adopt eql-bindings 3.0.1 — json_search domain + @@ matc…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-17T12:01:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9ee584dd67fe8aa8ab6f3d86b922e049b2bbec17",
"body": "….41.0\n\ncipherstash-client 0.41.0 is out and includes the encrypt_eql_v3 API\nthis branch needs, so the temporary source redirect to a local\ncipherstash-suite checkout is no longer required. Pin the suite crates\n(cipherstash-client / cts-common / stack-auth / stack-profile) to\n=0.41.0 and resolve everything from crates.io again.\n\nVerified against the published crates: 212 Rust tests, unit suite,\nclippy, wasm target, and the eql-v3 + encrypt-config integration\nsuites (42 tests) all pass.",
"is_bot": false,
"headline": "build(deps): drop the [patch.crates-io] suite redirect for released 0…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-17T12:01:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fada52f5086d1fa3294b5cbe26a3bbcf9e61d574",
"body": "Migrate the eqlVersion=3 QUERY emit path from `encrypt_eql` + `from_v2_query_typed`\nto the native `encrypt_eql_v3`. New `query_output_v3` projects a Store-mode\n`EqlCiphertextV3` into its query operand via `into_query_operand` (dropping `c`)\nand strict-parses it into the column's `query_<name>` / `qu\n[…]\nnch, still\nexercised by tests) are untouched. With this, the v3 storage AND query emit\npaths are both native — `from_v2` no longer runs in the protect-ffi hot path.\n\nRefs: CIP-3359 (Workstream C / C3)",
"is_bot": false,
"headline": "feat(protect-ffi): emit v3 query operands natively via encrypt_eql_v3",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-17T12:01:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "74c9fae356d265d3b9d9b67adfc4a6d6361684bc",
"body": "Migrate the eqlVersion=3 STORAGE emit path from `encrypt_eql` + `from_v2_typed`\nto cipherstash-client's native `encrypt_eql_v3`. New `into_store_ciphertext_v3`\n+ `storage_output_v3` strict-parse the client's native v3 payload into the\ncolumn's DomainPayload (no from_v2). The v2 path is unchanged; th\n[…]\n3 branch (Cargo.toml).\nMerge only after cipherstash-client is released, with the patch removed and the\nversion pins bumped. See the PR description for the full sequence.\n\nRefs: CIP-3359 (Workstream C)",
"is_bot": false,
"headline": "feat(protect-ffi): emit v3 storage payloads natively via encrypt_eql_v3",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-17T12:01:35Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d21a87a2555a0b7b351cc4fc759386809217ccdc",
"body": "docs(changelog): record unreleased changes since 0.26.0",
"is_bot": false,
"headline": "Merge pull request #126 from cipherstash/docs/changelog-unreleased",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-17T05:39:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "85abaa7d35992f8897c6d0a6b77ed4afe2a29a4c",
"body": "fix(deps): resolve open Dependabot security alerts",
"is_bot": false,
"headline": "Merge pull request #140 from cipherstash/fix/dependabot-security-alerts",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-17T05:35:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d652e4b1cb5fcc29bd81338f4093a18ece9b1825",
"body": "Rust (Cargo.lock):\n- reqwest 0.13.2 -> 0.13.4, moving hickory-proto/hickory-resolver to\n 0.26.1. Fixes GHSA-3v94-mw7p-v465 (NSEC3 unbounded loop, high) and\n the O(n^2) name-compression CPU exhaustion advisory (medium).\n- rand 0.9.2 -> 0.9.3 (unsoundness with custom loggers, low).\n\nJavaScript:\n- ro\n[…]\nad/execute); postcss -> 8.5.19; picomatch\n -> 4.0.5.\n\nNot addressed here: jsonwebtoken 9.3.1 (type confusion, medium)\nrequires jsonwebtoken 10.3.0, a major bump that must land upstream in\nstack-auth.",
"is_bot": false,
"headline": "fix(deps): resolve open Dependabot security alerts",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-17T05:18:27Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d445749842154ba1f0a7aad71aae675e40308331",
"body": null,
"is_bot": false,
"headline": "Merge pull request #139 from cipherstash/fix/short-match-needle-guard",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-17T03:24:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e17830baed42f70b7b9bbe4f53db0374f9034132",
"body": "Insert a period between the source message and the \"Use a longer search\nterm.\" hint so it no longer reads as a run-on (\"…every row Use…\"),\nmatching the {reason}. {hint} shape of the other errors in this enum.\nUpdates the JS test fixture and comment to mirror the single-line message.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0121iSgg172VMvPuHwx3WbNK",
"is_bot": false,
"headline": "fix(errors): add sentence separator in ShortMatchNeedle message",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T03:03:18Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a9df66e0e806efff344505f5133bc9c41193cd99",
"body": "Finishes the short-match-needle guard by upgrading to the released\ncipherstash-client 0.41.1, which provides MatchIndexer::validate_query_input.\nBumps cts-common, stack-auth and stack-profile in lockstep to 0.41.1 so the\ndependency graph resolves a single version of each (cargo otherwise splits\nstack_auth/stack_profile into two crate instances).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_0121iSgg172VMvPuHwx3WbNK",
"is_bot": false,
"headline": "chore(deps): bump cipherstash-client to 0.41.1",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T02:50:09Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8e2e28d316fde7831619fa5c630dbb7b578b2c5c",
"body": "…_NEEDLE)\n\nA match query needle that tokenizes to zero terms (shorter than the\nngram token length, LIKE wildcards trimmed away, stop-filtered) mints\nan empty bloom filter — and the EQL match comparison (query bits ⊆ row\nbits) is vacuously true for an empty query, so the term silently\nmatches EVERY r\n[…]\nCargo dependency bump lands as a\nfollow-up commit once that releases; until then this branch builds\nagainst a local path patch.\n\nClaude-Session: https://claude.ai/code/session_01MxTTPaPP16m6br7Hoab94w",
"is_bot": false,
"headline": "fix: reject match query needles that tokenize to nothing (SHORT_MATCH…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-17T02:05:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8c1da6bf6a6413bc5ce76ae57f5ff1dbe957e68d",
"body": null,
"is_bot": false,
"headline": "v0.29.0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-09T16:51:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce5a8063d6113f0f3e2bb97520cb10450f9db6f6",
"body": "…-implement-eql-v3-scalar-jsonb-query-terms-in\n\nchore(deps)!: eql-bindings 3.0.0, cipherstash-client 0.40.0",
"is_bot": false,
"headline": "Merge pull request #132 from cipherstash/james/cip-3423-protectjs-ffi…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T16:49:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ba7ec0457f35ca3e9134783856006d79826e5053",
"body": "Reverses the v2 half of 9307db4. EQL v3 is OPE-only; EQL v2 stays on ORE.\n\ncipherstash-config 0.40.0 flipped the ste_vec default from `standard` to\n`compat`, which silently moved the unpinned `jsonSteVec` fixture onto CLLW-OPE\n`op` terms. Rather than track that default, the fixture now pins\n`mode: '\n[…]\now exercises the `compat` default that v2\ncallers get when they omit `mode`. Worth a follow-up fixture.\n\nNot executed locally: the integration suite needs Docker, Postgres and\nCipherStash credentials.",
"is_bot": false,
"headline": "fix(tests): pin v2 ste_vec to `standard`, restoring the `oc` assertions",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T16:26:25Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d12df48579af907be2bae5bd6f8b50049ca65a81",
"body": "The 3.0.0 SQL snapshot inverted the ord extractor names: `ord_term` now takes\nthe OPE domain, and the ORE twin carries an `_ore` suffix. `ord_ope_term` went\nfrom nine definitions to zero.\n\n before: ord_term(…ord_ore) ord_ope_term(…ord_ope)\n after: ord_term_ore(…ord_ore) ord_term(…or\n[…]\nur postgres-v3 failures the preceding two commits left; the sv\nterm assertions were handled separately. Not executed locally — the\nintegration suite needs Docker, Postgres and CipherStash credentials.",
"is_bot": false,
"headline": "fix(tests): call the renamed v3 ord extractors in postgres-v3",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T16:18:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9307db467fc7ef5629e238668645dbdd2ff7b6f9",
"body": "…W-OPE\n\nPorts the still-relevant parts of #129 (james/cip-3469-stevec-ope), which\npredates 3.0.0 and was written release-gated against [patch.crates-io]\nbranches. Its dep/Cargo/SQL/eql_v3.rs hunks are superseded by the previous\ncommit; these four are not, and the first is a defect that commit shippe\n[…]\n fix in place.\n\nVerified: npm test, integration-tests typecheck, biome lint + format. The\nintegration tests themselves still require Docker, Postgres and CipherStash\ncredentials and were not executed.",
"is_bot": false,
"headline": "fix(types): SteVecEntry carries `op`; migrate v2 sv assertions to CLL…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-09T16:09:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e78985f9b790e1d8bc13ae0fa5ed5c369d00f478",
"body": "Bump eql-bindings 3.0.0-alpha.3 -> 3.0.0 and cipherstash-client 0.39.1 ->\n0.40.0. cts-common, stack-auth and stack-profile move with the client: they\nare `=`-pinned here and the client requires ^0.40.0, so leaving them would\nput two incompatible copies of each in the tree.\n\nThe bump compiles clean b\n[…]\ns were NOT run — they need Docker, Postgres and CipherStash\ncredentials. Their SQL column types and query casts were updated against the\nregenerated snapshot but the end-to-end round-trip is unproven.",
"is_bot": false,
"headline": "chore(deps)!: eql-bindings 3.0.0, cipherstash-client 0.40.0",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-09T15:31:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "05cba5c33e4e67411f1577855c08ce11d0eca665",
"body": "…lope\n\nfix: type AuthStrategy as the contract the runtime already implements",
"is_bot": false,
"headline": "Merge pull request #131 from cipherstash/fix/authstrategy-result-enve…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T10:03:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "b52b1b947a3f5b505996acc646c03c46f1032ce5",
"body": "Both review comments were correct.\n\n`getToken` must return a Promise: `JsAuthStrategy::get_token` does\n`promise.dyn_into::<js_sys::Promise>()` and errors with\n\"strategy.getToken() did not return a Promise\" otherwise\n(crates/protect-ffi/src/wasm.rs:122-125). The comment I replaced said\n`getToken(): P\n[…]\nully-qualified `crates/protect-ffi/src/lib.rs`, so the bare\n`src/wasm.rs` read as a repo-root path — and `src/` at the root is the\nTypeScript surface, which is exactly where a reader would look first.",
"is_bot": false,
"headline": "docs: address review — name the Promise contract, fix the wasm.rs path",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T09:44:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4381bd3f376ff53b05108aa4853457d997037f43",
"body": "Since 0.28.0 both the Neon and WASM clients accept either shape from\n`strategy.getToken()`:\n\n - `{ token }` — @cipherstash/auth <= 0.40, custom strategies\n - `{ data: { token } }` / `{ failure }` — @cipherstash/auth >= 0.41 (@byteslice/result)\n\nThe Neon path does this at c\n[…]\nesult<TokenResult, AuthFailure>` over\n@byteslice's exact `Success`/`Failure` union) now assign, and that the legacy\nbare `{ token }` strategy still does.\n\nFound from downstream: cipherstash/stack#602.",
"is_bot": false,
"headline": "fix: type AuthStrategy as the contract the runtime already implements",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-09T08:54:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1268c521c29f439c3a709940e0fc3418493f5317",
"body": "…-implement-eql-v3-scalar-jsonb-query-terms-in\n\nfeat: EQL v3 scalar + JSONB query terms in encryptQuery — CIP-3423",
"is_bot": false,
"headline": "Merge pull request #128 from cipherstash/james/cip-3423-protectjs-ffi…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T13:59:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e5274ec247adb8c916d040660e35ed0afa77411a",
"body": "…points\n\nReview follow-up (PR #128 findings 2+3): the column lookup, index\nresolution, mode inference, and EqlOperation selection were duplicated\nverbatim across the four encrypt-query entry points (neon + wasm, single +\nbulk) — every edit had to be hand-synced twice or silently diverge.\nExtracted i\n[…]\nops carry (usize, &ColumnConfig)\ninstead of re-looking-up by a cloned Identifier after encryption (the\nre-lookup's UnknownColumn arm was dead — the same key had already\nsucceeded in the prepare loop).",
"is_bot": false,
"headline": "refactor(rust): one prepare_query_plaintext seam for all query entry …",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T13:53:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0723c5a4dacfa630da59734eb63e8197770a0d8c",
"body": "Review follow-up (PR #128 finding 1): the storage column domains moved to\nthe public schema in alpha.3; the SteVec heading was the one rename miss —\ncopying eql_v3.json into a CREATE TABLE fails with 'type does not exist'.",
"is_bot": false,
"headline": "docs: the SteVec storage domain is public.json, not eql_v3.json",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T13:53:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "49c944e6ffea173cd33b47a0f667187b8ad04c54",
"body": "Review follow-up (PR #128): the version number is chosen at\nrelease-workflow dispatch time, so 'since protect-ffi 0.29' could silently\nlie; point at CIP-3423 + the CHANGELOG instead.",
"is_bot": false,
"headline": "docs: release-agnostic phrasing for scalar query support",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T12:48:31Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "30c44ca1ed167d89c54a10791cbdd6e654353e08",
"body": "Review follow-up (PR #128): the SQL snapshot gained release provenance but\nthe TS types still synced from an unpinned sibling checkout. The published\neql-bindings crate ships its ts-rs output (bindings/**), so the sync script\nnow resolves the exact Cargo.lock-pinned copy via cargo metadata --locked \n[…]\nill overrides for development against unreleased bindings.\n\nRe-vendored output from the locked release is byte-identical to the\ncommitted types (the sibling checkout was at the eql-3.0.0-alpha.3 tag).",
"is_bot": false,
"headline": "chore(types): vendor TS types from the locked eql-bindings release",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T12:48:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "1133fcaf0ad33dfdfb76d3a590473675ae7cbb29",
"body": "Added: scalar query-term encryption (CIP-3423), selector queries,\nquery-twin TS types. Changed: eql-bindings 3.0.0-alpha.3, crate-extracted\nSQL snapshot, Store-mode cost note. Breaking: EQL_V3_QUERY_UNSUPPORTED\nremoved, EncryptedV3Query widened.",
"is_bot": false,
"headline": "chore(changelog): 0.29.0 notes for the EQL v3 query path",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:38:01Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "e1893b1bfa9794c059b1f815eea7c4bbfc1a0199",
"body": "Replace the 'containment only / EQL_V3_QUERY_UNSUPPORTED' limitations with\nthe shipped behaviour: term-only scalar operands cast to\neql_v3.query_<name> (always carrying the full column-domain term set), the\neql_v3.query_jsonb containment needle (renamed from the pre-release\njsonb_query), and bare selector-hash strings for -> / ->>.",
"is_bot": false,
"headline": "docs: EQL v3 query support",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:38:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3bea534e7540fcd09b64f95f5bc0f34c17560dcc",
"body": "Flip the two 'returns a typed error' cases to positive assertions: scalar\nqueries return term-only operands (exact key sets pinned per column domain\nvia v3WireKeys against the vendored *Query types — including the\nmatch-on-text_search case documenting that the operand tracks the COLUMN\ndomain, not t\n[…]\nerands, and every\noperand asserts no c before use.\n\ncommon.ts: the assertScalar/assertSteVec narrowing helpers guard for\nobject payloads first — EncryptedV3Query now includes the bare selector\nstring.",
"is_bot": false,
"headline": "test(integration): EQL v3 query round-trips",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:37:59Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "fe60256409819096403c128512f1d9ed137a897b",
"body": "eql-bindings now bundles its exact install SQL\n(eql_bindings::sql::INSTALL_SQL), so the eql:v3:build task extracts the\ncommitted snapshot from the locked release via the new print_eql_v3_sql\nexample instead of building a sibling encrypt-query-language checkout —\nthe SQL the tests install is exactly \n[…]\nefreshed to EQL 3.0.0-alpha.3 (sha256 matches the release\nmanifest): column domains move eql_v3.* -> public.*, and the term-only\nquery-operand domains (eql_v3.query_<name>, eql_v3.query_jsonb) appear.",
"is_bot": false,
"headline": "chore(sql): refresh the EQL v3 snapshot to 3.0.0-alpha.3 from the crate",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:37:57Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6a1dd1313f8494c41a033c1d2cfa469280a7a787",
"body": "Re-vendor src/eql-v3-types/ from eql-bindings 3.0.0-alpha.3 (adds the 38\nscalar query-twin types — TextEqQuery, IntegerOrdOreQuery, …; doc comments\nfollow the public.* column-domain / eql_v3.query_* operand rename). New\nEncryptedV3ScalarQuery union; EncryptedV3Query widens to\nEncryptedV3ScalarQuery \n[…]\nQuery | Selector (selector results are the\nbare hash string — no wrapper type; it is the Selector term encoding).\nEQL_V3_QUERY_UNSUPPORTED is removed from ProtectErrorCode — nothing throws\nit anymore.",
"is_bot": false,
"headline": "feat(ts): v3 query operand types, errors, vendored bindings",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:37:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f7ad9d639e397dfdc8a8413123ef4c3435a28069",
"body": "Under eqlVersion 3, encrypt_query / encrypt_query_bulk now produce:\n\n- Scalar queries: the term-only operand {v, i, <terms>} (no c) for the\n column domain's eql_v3.query_<name> twin. The EQL v3 operators pair each\n column domain only with its same-name query twin, whose domain CHECK\n requires the\n[…]\nypt_bulk); wasm\nmirrors both. The V3ScalarQueryUnsupported / V3SelectorQueryUnsupported\nerror variants are deleted — those queries now succeed; the impossible\narms fail closed as invariant violations.",
"is_bot": false,
"headline": "feat(rust): EQL v3 scalar + selector query encryption — CIP-3423",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:37:56Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "768f97c88225070b4eafea3e03914eca313722ad",
"body": "The scalar query-operand release (CIP-3432 + CIP-3442 upstream): catalog-\ngenerated QueryPayload scalar variants, from_v2_query scalar term hoisting,\nthe eql_v3.query_<name> / eql_v3.query_jsonb operand naming (column domains\nmove to public.*), and the bundled install SQL (eql_bindings::sql). No\nbehaviour change in this commit — all existing tests pass unmodified,\nincluding the v2/v3 routing canary (cipherstash-client stays at 0.39.1).",
"is_bot": false,
"headline": "build(deps): eql-bindings 3.0.0-alpha.3",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-08T11:37:55Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "fc58f7ddc5f42e8a3e9f6c77bce08ed9dc085c8d",
"body": null,
"is_bot": false,
"headline": "v0.28.0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-08T02:49:46Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "70bd8ff60f63ed3347c68990d33648261e59dc5a",
"body": "feat: EQL v3 support (dual-format encrypt, version-agnostic decrypt, BigInt plaintexts)",
"is_bot": false,
"headline": "Merge pull request #127 from cipherstash/eql_v3",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-08T02:48:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f998f7c04b86a0db6a03516b3da87232510b209b",
"body": "- postgres-v3.test.ts: the `describe` callback was `async` with top-level\n `await newClient()` / `await pg.connect()`. Vitest does not await describe\n callbacks, so collection could finish before those resolved, leaving the\n nested hooks/tests unregistered (CodeRabbit, Major). Make the callback\n \n[…]\nrialize\n as `JsPlaintext::BigInt`, not the catch-all `JsonB` (Toby). Also pins the\n i64 extremes and the documented non-i64 fall-through to JsonB.\n\nVerified: cargo test (193), cargo fmt, tsc, biome.",
"is_bot": false,
"headline": "test+fix: address remaining PR review threads (CodeRabbit + Toby)",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-08T02:38:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9590220a8efa199c698ee77934f9c19364075206",
"body": "- bigintWire: the `opts?.` optional-chaining branch in withEncodedPlaintext/\n withEncodedPlaintexts — a null/undefined element must fall through to\n native validation rather than throw a raw TypeError, including the decisive\n case where a sibling element carries a bigint (which triggers the map p\n[…]\n- eql_v3::query_output: the EqlOutput::Store(EqlCiphertext::Encrypted(_)) =>\n InvariantViolation arm — the one match arm with no test.\n\nVerified: cargo test (189), vitest (54), tsc, biome, cargo fmt.",
"is_bot": false,
"headline": "test: cover the gaps flagged in the PR test-coverage review",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-08T02:32:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "a1bb91ae6f3bbc7517397aa2c55034b106b20fd1",
"body": "Addresses the code-review findings on the merged auth error-mapping code:\n\n1. prop_string/prop_object (Neon) now read through cx.try_catch, so a\n throwing getter on failure.type/error/message clears its pending N-API\n exception instead of leaving it dangling when neon_failure_to_auth_error\n ru\n[…]\ntrategy supplied no error.message, so an\n unknown code (e.g. RATE_LIMITED) is never surfaced as a blank error. Used\n by both seams.\n\nVerified: cargo check (native + wasm32), cargo test, cargo fmt.",
"is_bot": false,
"headline": "fix(auth): harden failure-envelope reconstruction on both seams",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-08T02:31:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e1fafc950edb933396683363cdd59884d02d4702",
"body": "Bring the EQL v3 branch up to date with main (auth 0.41 support,\ncipherstash-client 0.39.1, changelog tooling, CI hardening).\n\nConflict resolutions:\n- Cargo.toml / Cargo.lock: take main's 0.39.1 cipherstash-client family\n and package metadata (MIT license, description, repository); keep\n eql-bindi\n[…]\n- wasm-round-trip.test.ts: take main's clarifying prerequisite comment.\n\nVerified: cargo check (native + wasm32), cargo test (188), cargo fmt,\ntsc typecheck, vitest (50), biome lint + format all pass.",
"is_bot": false,
"headline": "Merge branch 'main' into eql_v3",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-08T01:53:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4e12f1acfbf30133dd3e491a6921655a02f16e46",
"body": "- Changed: cipherstash-client dependency group bumped to 0.38.0; license\n corrected to MIT across manifests.\n- Fixed: access-key token refresh (CIP-3233) via the 0.38.0 bump.\n- Security: release/build workflow version input allowlist-gated against\n template injection.",
"is_bot": false,
"headline": "docs(changelog): record unreleased changes since 0.26.0",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T15:08:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "faf492d59b768204250497e01a8b55e489b8c3a6",
"body": "feat: support @cipherstash/auth 0.41 Result-shaped getToken (via stack-auth 0.39.1 from_error_code)",
"is_bot": false,
"headline": "Merge pull request #125 from cipherstash/fix/auth-0.41-result-gettoken",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T14:53:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c37f1a1032d19460315e38001be91c8ed5b57d16",
"body": "Address Copilot #4 on #125 — no explicit tests for the `{ data }` / `{ failure }`\ngetToken shapes. Adds two JsBacked-strategy cases:\n\n- success envelope: wrap the real token as `{ data: { token } }`; the client\n must unwrap `data.token` and complete an encrypt→decrypt round-trip.\n- failure envelope: return `{ failure: { type: \"NOT_AUTHENTICATED\", error } }`;\n newClient (load_keyset) must reject with the reconstructed typed auth error\n rather than a token-parse error.",
"is_bot": false,
"headline": "test: cover the 0.41 Result success + failure envelopes (js-strategy)",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T07:49:26Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "359707ab4bec172f302950485696be6e30959838",
"body": "Address Copilot review on #125 (WASM auth seam):\n- Validate the resolved `getToken()` value is an object before `Reflect::get`.\n A non-object resolution (e.g. a bare string) now fails as \"did not return an\n object\" — matching the Node seam's `downcast::<JsObject>` guard — instead of\n the misleadi\n[…]\nropagate `Reflect::get` errors on the `failure`/`data` fields as\n `AuthError::Server` rather than `unwrap_or(UNDEFINED)`, so a throwing getter\n (Proxy trap) isn't silently masked as an absent field.",
"is_bot": false,
"headline": "fix(wasm): guard non-object getToken result; propagate Reflect errors",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T07:31:07Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6bfcb9e1a1d905d9c7d72b2caf8523d0af05ae40",
"body": "…_code\n\nNow that stack-auth 0.39.1 ships `AuthError::from_error_code`, replace the\nhand-rolled failure-to-string extraction on both FFI seams with a faithful\nreconstruction, so a JS strategy's `{ failure }` crosses back into Rust as the\nreal typed `AuthError` (preserving its code) instead of being f\n[…]\nh the detail kept in the\n message). Malformed-shape errors stay `Server` as before.\n\ncargo check (native + wasm32), clippy -D warnings, cargo test --lib (71), and\nthe wasm-pack bundle build all pass.",
"is_bot": false,
"headline": "feat: reconstruct auth failures via stack_auth::AuthError::from_error…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T07:12:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3397baaa1c31ee0a967360b1dd8b16f12adf82cf",
"body": "The first cut required auth 0.41's `{ data: { token } }` envelope, which broke\nprotect-ffi's own js-strategy / wasm-round-trip tests — they (and the\ndocumented `getToken(): Promise<{ token }>` contract, and custom strategies)\nuse the bare top-level `token` shape.\n\nAccept both on each seam: read `res\n[…]\ns an object (auth >= 0.41), else read the\nbare result object directly (auth <= 0.40 / custom). No longer a breaking change.\n\ncargo clippy -D warnings, cargo test --lib (71), and wasm32 check all pass.",
"is_bot": false,
"headline": "fix: accept both bare and Result-shaped getToken (backward compatible)",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T04:36:55Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "dceaea8df8bf3ed7cb7a85dc7150036ae65217a7",
"body": "`@cipherstash/auth` 0.41 changed the JS strategy's `getToken()` to return a\n`@byteslice/result` `Result` — `{ data: { token, … } }` on success,\n`{ failure: { type, error, … } }` on error — instead of a bare `{ token }`.\nBoth FFI seams read the token from the top level, so a 0.41 strategy failed\nwith\n[…]\n: cargo check (native + wasm32), clippy -D warnings, 71 unit tests,\nand the wasm-pack bundle build all pass. End-to-end encrypt/decrypt is\nexercised by the @cipherstash/stack WASM e2e once this ships.",
"is_bot": false,
"headline": "fix: consume @cipherstash/auth 0.41 Result-shaped getToken",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-07T04:22:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7ace44b2057ce32e3b4af423cab44f86b8d2d890",
"body": "…build-and-zig-in-protectjs-ffi-misetoml\n\nci: pin zig and cargo-zigbuild in mise.toml",
"is_bot": false,
"headline": "Merge pull request #119 from cipherstash/james/cip-3405-pin-cargo-zig…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T13:35:35Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3482f4be40deca254db673ef87766341319724e3",
"body": "feat!: JS BigInt plaintext support (i64-bounded) — CIP-3291",
"is_bot": false,
"headline": "Merge pull request #120 from cipherstash/feat/js-bigint-plaintext",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:23:19Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "053fc4bdfc9c57732e17ee369e189d3eac1f4138",
"body": "The new JSON.stringify-parity test exposed a pre-existing wasm decrypt\nbug: serde-wasm-bindgen's default serializer emits Rust maps as JS Maps\nand nulls as undefined, so decrypting a cast_as 'json' column on wasm\nreturned Map { \"score\" => undefined } where Neon returns the plain\nobject { score: null\n[…]\ncheck --target wasm32-unknown-unknown clean. The\nfailing CI test (wasm-round-trip.test.ts 'json plaintexts follow\nJSON.stringify semantics') asserts exactly this shape and runs\ncredential-gated in CI.",
"is_bot": false,
"headline": "fix(wasm): decrypt json documents to plain objects, not JS Maps",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b3ab5d55458e8c1c1d10bdfd1146b0ba37fb2b1e",
"body": "Review fixes:\n\n- wasm bounds error is now a real RangeError (js_sys::RangeError), the\n class the README/JSDoc promise and the Neon boundary already throws.\n The wasm test now asserts the class, and both directions (above-max\n AND below-min, covering the sign detection in bigint_bounds_error).\n- w\n[…]\nrnings), cargo test -p protect-ffi (188 passed), root + integration\ntsc clean, biome clean on changed files (index.cts import-order\ncomplaint pre-exists). Credential-gated integration tests run in CI.",
"is_bot": false,
"headline": "fix,test,docs: address PR #120 review feedback",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "486e1d11ec6bf54cfa25b0c7c411dab96ce6daeb",
"body": "…rity\n\nA bigint nested inside a cast_as: 'json' plaintext diverged across\nplatforms: Neon rejects it (neon's Json extractor runs JSON.stringify,\nwhich throws a TypeError on any BigInt), but serde_wasm_bindgen walked\nthe live object and folded the bigint into the document as an i64 —\nwhich then decry\n[…]\new\nwarnings), cargo test -p protect-ffi (188 passed), tsc --noEmit clean.\nThe new integration tests require credentials and run in CI.\n\nAddresses review finding 1 (nested-bigint Neon/wasm divergence).",
"is_bot": false,
"headline": "fix(wasm): canonicalize plaintexts through JSON.stringify for Neon pa…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "46a5fa5205b9a054112edb285aa2db456350db64",
"body": "Adds a README section covering the i64 bounds, the RangeError boundary\nbehaviour, the number-input guard, the JSON exclusion, and a prominent\nbreaking-change callout (bigint columns now decrypt to JS bigint).\nUpdates the JsPlaintext type-detection and conversion tables in the\nJSONB API reference (which still described integer coercion as\ntruncating — it errors). Also ignores dist/ in biome so npm test stays\ngreen after a local npm run build:wasm.\n\nCIP-3291",
"is_bot": false,
"headline": "docs: document BigInt plaintext support and the breaking decrypt change",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "46606f936859a42309a45c1f29176c2c6a0b3aa1",
"body": "- scalar/scalar-bulk: bigint inputs round-trip exactly (incl. i64::MIN /\n i64::MAX); +/-2^63-adjacent values are rejected at the boundary with a\n RangeError naming the bounds and direction; existing expectations\n updated for the breaking decrypt change (the bigint 'score' column now\n decrypts to\n[…]\n terms.\n- wasm-round-trip: bigint round-trips through the wasm boundary as a\n real JS bigint and out-of-range values are rejected pre-serde\n (creds-gated via the existing describe.skipIf).\n\nCIP-3291",
"is_bot": false,
"headline": "test: cover bigint round-trips, bounds rejection, and v3 bigint domains",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "752de6a1d1e28efd2b6b752e5772dcdcdb2c7491",
"body": "cast_as 'bigint' columns now accept JS bigint plaintexts (exact,\nbounds-checked against the full i64 range) alongside numbers, and ALWAYS\ndecrypt to a JS bigint.\n\nBoundary mechanics:\n\n- Neon extracts every options object via neon's Json extractor\n (JSON.stringify -> serde_json), which cannot carry \n[…]\ner a number) for cast_as 'bigint' columns, including\nvalues that fit in a JS number. Previous releases returned a number,\nsilently losing precision beyond Number.MAX_SAFE_INTEGER (2^53 - 1).\n\nCIP-3291",
"is_bot": false,
"headline": "feat!: accept and return JS BigInt plaintexts (i64-bounded)",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-06T06:12:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e8abfcc97b92593010e96e87d1d19fa74fea8fa9",
"body": "ci: harden version-input handling across the release workflows",
"is_bot": false,
"headline": "Merge pull request #124 from cipherstash/ci/gate-binaries-version-input",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T05:23:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c39d929dbf8095d37bd0172ae5d093f2cd818594",
"body": null,
"is_bot": false,
"headline": "v0.27.1-0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-06T05:09:50Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf5226141ab6573d56e4c13a5a1dadaee736aaf9",
"body": "The version-input allowlist accepts a pre-release suffix (`-*`) but not\nSemVer build metadata (`+...`). Reword the comment on all three copies of\nthe guard to say 'pre-release suffix' so it no longer implies stricter/\nbroader validation than is implemented. Addresses Copilot review on #124.",
"is_bot": false,
"headline": "ci: correct allowlist comment to match patterns (drop 'build metadata')",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T05:01:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "76a6a5a4c33328ce5bee0f123ef42815c817b8ac",
"body": "The real-release version bump interpolated the resolved version\n(single-quoted) directly into the `run:` body, so a `custom` version\nstring containing a single quote could break out of the quotes — a\ntemplate-injection vector on the primary release path (only the\nnon-empty check gates `custom`, neve\n[…]\nbind the\nvalue to `VERSION_INPUT`, validate it against the bump-keyword/semver\nallowlist, and pass the quoted `\"$VERSION_INPUT\"` to `npm version`.\nCross-reference all three steps so they stay in sync.",
"is_bot": false,
"headline": "ci: harden release.yml Tag Release version input",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T01:05:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9d8a74a3936cbdb11d2df77dcb0e83418ce1a277",
"body": "Closes #122.\n\nThe `binaries` matrix job's \"Update Version\" step interpolated\n`${{ inputs.version }}` directly into its `run:` block, unlike the `wasm`\njob which binds the input to an env var and validates it against an\nallowlist first. Port that guard verbatim so the two steps are identical:\n\n- bind\n[…]\nERSION_INPUT\"`.\n\nCross-referenced both steps with a \"keep in sync\" comment. This step only\nruns on dry-runs (release.yml sets update-version from the dryrun flag),\nbut the guard should hold there too.",
"is_bot": false,
"headline": "ci: gate the binaries job's version input (match the wasm job)",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T01:03:11Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "15d8f04bf69f797a3a1d3dd05118480e68bd5b6b",
"body": "…otes\n\ndocs: add CHANGELOG, automate release notes, refresh README",
"is_bot": false,
"headline": "Merge pull request #121 from cipherstash/docs/changelog-and-release-n…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T00:57:02Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "32ec50ae95232bdd61119153a36fbfb067e78e98",
"body": "Addresses James's non-blocking review notes on #121:\n\n- changelog-extract.mjs: strip the trailing compare-link block (anchored to\n EOF) before extracting, instead of treating any column-0 `[x]:` line as the\n section boundary. A reference-style Markdown link inside a section body is no\n longer mis\n[…]\nt that `Breaking` is an intentional addition to the\n standard Keep a Changelog categories, so the \"based on Keep a Changelog\"\n claim and the `### Breaking` heading no longer read as a contradiction.",
"is_bot": false,
"headline": "changelog: harden extract link-block detection; note Breaking category",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T00:49:15Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "262a358e16979b045e3034696fb91c5cdb652938",
"body": "- changelog-extract.mjs: wrap the CHANGELOG.md read in try/catch so a\n missing/unreadable file (or wrong cwd) exits 1 with a concise message\n instead of a raw stack trace — the workflow only needs the non-zero exit\n to fall back. Matches changelog-release.mjs's defensive read.\n- build.yml: fail the \"Extract release notes\" step fast when inputs.tag is\n empty while github-release is true, rather than emitting an empty version\n and a broken `blob//CHANGELOG.md` fallback link.",
"is_bot": false,
"headline": "docs+ci: address Copilot review on #121",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-06T00:41:52Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "72db5c548a5afb955e10d6f13d82b237321b0d49",
"body": "Adds a CHANGELOG.md (the repo had none), automates changelog/release-notes\nupkeep, and fixes stale README docs. Supersedes #97, brought current to main.\n\nCHANGELOG\n- New CHANGELOG.md in Keep a Changelog format, seeded through 0.26.0\n (0.22.0-0.25.0 backfilled from git history).\n- An [Unreleased] se\n[…]\ny, missing-version fallback).\n\nREADME\n- Local setup now uses `npx stash auth login` instead of the stale\n brew-installed `stash setup`.\n- Replace the \"no changelog automation\" note with the new flow.",
"is_bot": false,
"headline": "docs: add CHANGELOG, automate release notes, refresh README",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-05T23:48:38Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "15a80922648fa3d8ec915cef3a4903e2450c0ad0",
"body": "cargo-zigbuild 0.23.0 bumped cargo-options from 0.7.6 to 0.8.1, which\ndropped the env = \"CARGO_BUILD_TARGET\" binding on --target. The\nglibc-suffixed target (x86_64-unknown-linux-gnu.2.28) supplied via the\nenvironment now passes through to cargo unstripped, and rustc rejects\nit as an unknown target specification.\n\nPassing the suffixed target as an explicit --target flag works on both\nold and new cargo-zigbuild versions.\n\n(cherry picked from commit 1296016bd26bd4c7f19d67b7617104af84617997)",
"is_bot": false,
"headline": "ci: pass glibc-versioned target to cargo-zigbuild as a flag",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-05T03:30:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "62b10edceca38eba12ac4d1f6b1480333fa37d12",
"body": "'latest' is how cargo-zigbuild 0.23.0 silently broke the Release\nworkflow (its cargo-options bump dropped the CARGO_BUILD_TARGET env\nbinding — CIP-3399). Pin both tools to the versions proven by the\nsuccessful v0.27.0 release run so toolchain upgrades become deliberate\nPRs instead of ambient breakage at release time.",
"is_bot": false,
"headline": "ci: pin zig and cargo-zigbuild in mise.toml (CIP-3405)",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-05T02:53:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6d9c15579710b2ba156c660c84e50c7aa6741f73",
"body": "feat(eql-v3): real-ciphertext _ord_ope coverage on cipherstash-client 0.38.1",
"is_bot": false,
"headline": "Merge pull request #115 from cipherstash/feat/cip-3348-ope-round-trip",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-05T02:52:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ca379eb5fb04e5bf57e73f889c8d120f26739ee8",
"body": null,
"is_bot": false,
"headline": "v0.27.0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-04T14:27:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a42784126c29d29fdd3ff52a7a7c978262f94dda",
"body": null,
"is_bot": false,
"headline": "v0.26.1-0",
"author_name": "github-actions",
"author_login": null,
"committed_at": "2026-07-04T14:05:10Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "471bbac4d719551b23bf065582311c6d659994da",
"body": "ci: pass glibc-versioned target to cargo-zigbuild as a flag",
"is_bot": false,
"headline": "Merge pull request #118 from cipherstash/fix/zigbuild-glibc-target-flag",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-04T13:43:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1296016bd26bd4c7f19d67b7617104af84617997",
"body": "cargo-zigbuild 0.23.0 bumped cargo-options from 0.7.6 to 0.8.1, which\ndropped the env = \"CARGO_BUILD_TARGET\" binding on --target. The\nglibc-suffixed target (x86_64-unknown-linux-gnu.2.28) supplied via the\nenvironment now passes through to cargo unstripped, and rustc rejects\nit as an unknown target specification.\n\nPassing the suffixed target as an explicit --target flag works on both\nold and new cargo-zigbuild versions.",
"is_bot": false,
"headline": "ci: pass glibc-versioned target to cargo-zigbuild as a flag",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-04T13:38:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c4b903952f13c7bcf48d8a7a0252ef3e352d0a5e",
"body": "docs+meta: resolve license contradiction (MIT), fix rename fallout and stale env docs",
"is_bot": false,
"headline": "Merge pull request #116 from cipherstash/docs/meta-refresh",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-04T10:11:13Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a5a211dd63e5700c72eb32076070a19377ab5db5",
"body": "The hand-drawn box diagrams were misaligned and fragile to edit (the\nrename in this PR broke one of them). Mermaid renders natively on\nGitHub and survives label changes. Content unchanged — the page gets\na fuller revision when EQL v3 lands.",
"is_bot": false,
"headline": "docs(jsonb): replace ASCII diagrams with Mermaid",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-04T10:04:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fa02f7556a494d84ff335207537cfe859c38d00",
"body": "- README: newClient() credentials can come from the profile store\n (npx stash auth login), env vars, or an explicit strategy — not\n env-only\n- platforms/*: license ISC → MIT and fill author (the per-platform\n packages publish to npm too, so the MIT decision applies to them)\n- package-lock.json: r\n[…]\nhe two remaining ISC entries are\n third-party deps that are genuinely ISC)\n- jsonb-integration: re-centre the architecture diagram label\n- jsonb-troubleshooting: code-format + link @cipherstash/stack",
"is_bot": false,
"headline": "docs+meta: address review feedback",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-04T09:57:21Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d2cc5108ae5057e5cd257d9901cdc15954e1dc86",
"body": "…d stale env docs\n\n- License: LICENSE.md (MIT) vs package.json/Cargo.toml (ISC) — MIT wins\n per maintainer decision; both manifests now say MIT. Year → 2024-2026.\n- package.json: fill empty description/author (humans@cipherstash.com)\n- lib.rs: invariant-violation error told users to file issues at \n[…]\nect-ffi → protectjs-ffi); add docs/ and scripts/ to the layout\n- docs/jsonb-*: rebrand Protect.js references to @cipherstash/stack\n- wasm-round-trip test docs: CS_REGION → CS_WORKSPACE_CRN (post-0.26)",
"is_bot": false,
"headline": "docs+meta: resolve license contradiction (MIT), fix rename fallout an…",
"author_name": "Dan Draper",
"author_login": "coderdan",
"committed_at": "2026-07-04T09:44:49Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "13a2a77374726dc730d98722ddd242424a524ffa",
"body": "CIP-3348: with cipherstash-client 0.38.1 emitting the scalar `op`\n(CLLW-OPE) term, an ope-indexed column can be exercised end-to-end.\n\n- postgres-v3: replace the skipped _ord_ope stub with a real round-trip\n — encryptBulk out-of-order plaintexts into an eql_v3.integer_ord_ope\n column, assert each \n[…]\nd_ope domain with exactly v, i, c, op.\n- README: the ope -> _ord_ope caveat about the unemitted op term is\n stale; the domains are now producible.\n\nRefs: https://linear.app/cipherstash/issue/CIP-3348",
"is_bot": false,
"headline": "test(eql-v3): real-ciphertext _ord_ope coverage on client 0.38.1",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:52:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9b8f52fa5b9cb53f73d930dc308993eebc8c8858",
"body": "cipherstash-client 0.38.1 adds the scalar ope_cllw field to\nEncryptedPayload (serialized as the `op` wire key) and maps\nIndexTerm::OpeFixed/OpeVariable onto it — 0.38.0 dropped those terms at\nencrypt time, so no _ord_ope payload could be produced. Add\n`ope_cllw: None` to the test payload builders that construct\nEncryptedPayload literals.\n\nPart of CIP-3348.",
"is_bot": false,
"headline": "chore(deps): bump cipherstash-client and stack crates to 0.38.1",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:52:41Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57ce453c9765838a85f6e8fbebca2c731bc5c5a7",
"body": "feat: dual-format EQL v2/v3 support (eqlVersion option)",
"is_bot": false,
"headline": "Merge pull request #104 from cipherstash/feat/eql-v3-dual-format",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:22:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f1cd4de47d6b654241bc8f210a403405fb4ecc66",
"body": "PR #104 retargets from main to a new eql_v3 staging branch (mirroring\nthe encrypt-query-language branch model); the pull_request branches\nfilter matches the BASE branch, so without this the retargeted PR\nwould silently stop running CI. push also gains eql_v3 so merges into\nthe staging branch re-run the suite.",
"is_bot": false,
"headline": "ci: run the Test workflow for the eql_v3 staging branch",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:16:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "298e466800defffcf21d488610857c28781627fa",
"body": "No-op for protect-ffi (the release only removes an eql-bindings build\nwarning): 159 tests pass, wire behavior and warning counts unchanged\non both targets.",
"is_bot": false,
"headline": "chore(deps): bump eql-bindings to 0.4.2",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:16:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8ae3b36a9b4eceefaa3542d7d9075c4a691950cb",
"body": "Rebuilt via the guarded eql:v3:build from encrypt-query-language@eql_v3\n(7682b72f, eql-bindings 0.4.1): the schema now carries the SQL-standard\nfamily names (int4_ord_ore -> integer_ord_ore, 263 occurrences), so the\npostgres-v3 DDL and comments drop the deliberately-stale spelling.\nVerified: installs into the integration postgres with zero errors and\neql_v3.integer_ord_ore resolves. Vendored TS types re-synced against\nthe freshly-run 0.4.1 generator — byte-identical, no diff.",
"is_bot": false,
"headline": "test(integration): refresh the v3 SQL snapshot past the domain renames",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:09:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "25dbfef66b30a5ed7d4f2b5d7a2b0c0057165ac0",
"body": "… 0.4.1)\n\nCompletes the typed-conversion adoption (storage: DomainPayload in\n6de5d65): the query path now uses from_v2_query_typed and carries the\ntyped SteVec containment needle; single-term scalar query variants\n(Ore/Ope/Bloom/Hm values) join the upstream enum when the v3\nscalar-query wire shape ships. Wire output value-identical, pinned by\ntest (keys in schema wire order — meaningless for jsonb).",
"is_bot": false,
"headline": "refactor(eql-v3): carry QueryPayload in QueryOutput::V3 (eql-bindings…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T13:09:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "aaf7dc7a62a29ccb3cdae5ecfcbf0606c1700896",
"body": "…standard family names)\n\neql-bindings 0.3.0 (via encrypt-query-language PR #344) renamed the scalar\ndomain families from PG-internal names to SQL-standard catalog names:\nint2 -> smallint, int4 -> integer, int8 -> bigint, float4 -> real,\nfloat8 -> double, bool -> boolean (text/numeric/date/timestamp/\n[…]\n_ore spelling (the snapshot predates the SQL rename);\n a comment marks it for the next eql:v3:build refresh.\n- README domain-mapping table and the index.cts eqlVersion doc use the new\n family names.",
"is_bot": false,
"headline": "chore(types): re-vendor EQL v3 TS types from eql-bindings 0.3.0 (SQL-…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T12:15:36Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "47a765a23ed309a777493a258acecad99b0cb8a9",
"body": "The v3 test configs asserted the resulting eql_v3 domain only in\ncomments (e.g. \"// eql_v3.text_eq (hm)\"), so drift in the domain\nselection logic could invalidate the comments while the per-term spot\nchecks partially passed. Replace the comment-asserted mapping with two\nverified legs:\n\n- Compile tim\n[…]\necks.\n\npostgres-v3 keeps the live domain CHECK on INSERT (genuine e2e for the\nrequired keys) and adds the exact-set assertions before INSERT, since\na CHECK will not reject an over-provisioned payload.",
"is_bot": false,
"headline": "test(integration): make the config -> eql_v3 domain mapping load-bearing",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:59:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "6de5d65d38e9807819cde1e392734da677bcd0d6",
"body": "…dings 0.3.0)\n\nCloses the loop on the PR #104 review thread: eql-bindings 0.3.0 ships the\ncatalog-generated DomainPayload enum and from_v2_typed (implemented in\nencrypt-query-language #349), so EncryptedOutput::V3 now carries the typed\npayload instead of a shape-erased serde_json::Value, and storage\n[…]\nad members).\n- Decrypt paths still parse incoming JSON through SteVecDocument /\n is_v3_payload: DomainPayload has no Deserialize by design (inference from\n bytes is unsound), so they are unaffected.",
"is_bot": false,
"headline": "refactor(eql-v3): carry DomainPayload in EncryptedOutput::V3 (eql-bin…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:59:16Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7e3e17dae8a042e9cf5123065b39fdd448ba2901",
"body": "…ncating\n\nThe coercion test pinned the old silent-truncation behavior that\nd03d6d0 deliberately removed (encrypt Errs on any JS number that would\nbe truncated). It only runs with live ZeroKMS creds, so the fold-in's\nlocal gates couldn't catch it — CI on the folded head did. Assert the\nfractional-component rejection instead.",
"is_bot": false,
"headline": "test(integration): float-as-integer encrypt now errors instead of tru…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:16:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bbc3404dcb1e9558bc679d0e605c5545be244d56",
"body": "… configured term\n\nCommit c293d38 made json and non-text term-dropping combinations error,\nbut text combinations still dropped terms silently: {unique, match}\nselected text_match (bf only) and permanently stripped the configured hm\nterm from stored rows; {unique, ope, match} selected text_ord_ope an\n[…]\nctual invariant\n(equality: hm|ob|op, ordering: ob|op, match: bf only, ste_vec: sv only)\nand keeps future selection arms fail-closed by default.\n\nAddresses review comment 3518412508 on #104 (CIP-3342).",
"is_bot": false,
"headline": "fix(eql-v3): fail closed on text index combinations that would drop a…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:07:48Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "2698082c0b6984312586ed6cee228dea3cfebf90",
"body": "…qlVersion enum\n\nCode review on #104 asked whether the eql version could be a const\ngeneric. It can't fit cleanly: the version arrives as a runtime value\nfrom JavaScript (newClient({ eqlVersion })), so Client<const V: u8>\nwould still need runtime dispatch at the FFI boundary, and the\n\nThis lands the\n[…]\n comparisons that silently treat unknown values as v2.\n\nNo behavior change; wire output is identical.\n\nRefs: https://github.com/cipherstash/protectjs-ffi/pull/104#discussion_r3518392870\nRefs: CIP-3342",
"is_bot": false,
"headline": "refactor(eql-v3): replace the raw u8 eql version with a #[repr(u8)] E…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:07:46Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f593a78bff6b5ca0e02fcb0e50eb979d41a95e8",
"body": "The eql_v3 helpers were imported twice: once in lib.rs behind a\ncfg(not(target_arch = \"wasm32\")) gate, and again in wasm.rs via\ncrate::eql_v3 — two separately-maintained copies of the same seven-item\nlist, with a comment explaining the split.\n\nReplace the cfg-gated import with an unconditional pub(c\n[…]\nets now\nresolve the eql_v3 API through the single re-export; no behavior change.\n\nAddresses review comment:\nhttps://github.com/cipherstash/protectjs-ffi/pull/104#discussion_r3518392835\n\nRefs: CIP-3342",
"is_bot": false,
"headline": "refactor(imports): share the eql_v3 import between Neon and wasm targets",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d03d6d0e9237c907b8029d1de66bf27ed956a09c",
"body": "The Number arms for BigInt/Int/SmallInt/BigUInt in to_plaintext_with_type\nused Rust's saturating `as` cast, so encrypting 5_000_000_000 into a\ncast_as:'int' column silently stored 2147483647, NaN became 0, and\nfractional values (42.5) silently dropped their fraction. The hm/ob index\nterms were compu\n[…]\nfinite values via\nDecimal::try_from (now verified by tests). Error messages name the\ncolumn type but deliberately do not echo the value, matching the file's\nexisting no-plaintext-in-errors convention.",
"is_bot": false,
"headline": "fix(encrypt): error instead of truncating JS numbers for integer casts",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27010ff0ab52255dd938cda77809b0696cbc6cae",
"body": "…queryable\n\nThe Indexes config type gained ope?: OpeIndexOpts, and the native side\nalready accepts \"ope\" in find_index_for_type on the v2 query path, but\nIndexTypeName still omitted it — so encryptQuery/encryptQueryBulk could\nnot target an ope index without an unsafe cast.\n\nAdds 'ope' to the union, \n[…]\nc with keyof\nIndexes (enforced via a new tsconfig.test.json pass in test:typecheck,\nsince test files are excluded from the emitting tsc build).\n\nAddresses review comment 3518412523 on #104 (CIP-3342).",
"is_bot": false,
"headline": "fix(types): add 'ope' to IndexTypeName so configured ope indexes are …",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d64d777996b4335aeb88c0242ef2615effa8fa5a",
"body": "The Rust InvalidCiphertext variant (\"Invalid EQL ciphertext: ...\")\nsurfaced as code UNKNOWN and was rethrown bare instead of being wrapped\nin ProtectError, so callers switching on ProtectErrorCode could not\ndistinguish corrupted ciphertext from arbitrary failure.\n\n- Add INVALID_CIPHERTEXT to Protect\n[…]\nn\n- Add unit tests for inferErrorCode/normalizeError\n- Sync the ProtectErrorCode enumeration in docs/jsonb-api-reference.md\n\nAddresses review comment on PR #104 (discussion r3518412517).\nRef: CIP-3342",
"is_bot": false,
"headline": "fix(errors): map InvalidCiphertext to a stable INVALID_CIPHERTEXT code",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "90fff9df63c15b0fb53b5658aa8fbe37dc69948d",
"body": "`mise run setup` previously ran eql:v3:build unconditionally, building\nfrom whatever branch the sibling ../../encrypt-query-language checkout\nhappened to be on. If that checkout was on `main`, setup silently\noverwrote the committed sql/cipherstash-encrypt-v3.sql snapshot with the\nv2 installer, break\n[…]\nched. A missing sibling checkout is now an\n error (it was a warning when setup depended on it).\n\nAddresses review comment:\nhttps://github.com/cipherstash/protectjs-ffi/pull/104#discussion_r3518412513",
"is_bot": false,
"headline": "fix(integration): make the v3 snapshot rebuild opt-in and self-verifying",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e2f9c87dde1fd58eaa08959cc9620ae8a1b25054",
"body": "…nion\n\nReplace the unknown parameter on assertSteVec / assertScalar with the\nprecise union of everything encrypt / encryptBulk (EncryptedPayload) and\nencryptQuery / encryptQueryBulk (EncryptedQuery | EncryptedV3Query) can\nreturn, narrowing via the in operator instead of a cast.\n\nAddresses review comment:\nhttps://github.com/cipherstash/protectjs-ffi/pull/104#discussion_r3518392901\n\nRefs: CIP-3342",
"is_bot": false,
"headline": "test(integration): type the common helper with the EncryptedPayload u…",
"author_name": "James Sadler",
"author_login": "freshtonic",
"committed_at": "2026-07-03T11:06:31Z",
"body_truncated": false,
"is_coding_agent": false
}
],
"releases_count": 83,
"commits_last_year": 406,
"latest_release_at": "2026-07-20T09:19:00Z",
"latest_release_tag": "v0.30.0",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 31,
"days_since_latest_release": 6,
"mean_days_between_releases": 6.6
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "@cipherstash/protect-ffi",
"exists": true,
"license": "MIT",
"keywords": [],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@cipherstash/protect-ffi",
"is_deprecated": false,
"latest_version": "0.30.0",
"repository_url": "https://github.com/cipherstash/protectjs-ffi",
"versions_count": 46,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 6,
"monthly_downloads": 10036,
"first_published_at": "2025-02-17T18:29:59.197000Z",
"latest_published_at": "2026-07-20T09:30:18.787000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 6
},
{
"name": "integration-tests",
"exists": true,
"license": "MIT",
"keywords": [
"fs",
"isomorphic",
"layers"
],
"ecosystem": "npm",
"matches_repo": false,
"registry_url": "https://www.npmjs.com/package/integration-tests",
"is_deprecated": false,
"latest_version": "0.0.1",
"repository_url": "https://github.com/doug-wade/iso-fs",
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 11,
"first_published_at": "2016-06-07T09:28:30.298000Z",
"latest_published_at": "2016-06-07T09:28:30.298000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 3701
}
]
},
"popularity": {
"forks": 0,
"stars": 2,
"watchers": 3,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 10
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [
"mise.toml"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"integration-tests/tsconfig.json",
"tsconfig.json"
],
"toolchain_manifests": [
"Cargo.toml",
"crates/protect-ffi/Cargo.toml"
],
"largest_source_bytes": 121065,
"source_files_sampled": 143,
"oversized_source_files": 2,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Cargo.toml",
"integration-tests/package.json",
"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": 7,
"malicious_count": 0,
"assessed_package": "npm:@cipherstash/protect-ffi@0.30.0",
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"crates",
"npm"
],
"dependencies": [
{
"name": "@cipherstash/auth",
"manifest": "integration-tests/package.json",
"ecosystem": "npm",
"version_constraint": "^0.39.0"
},
{
"name": "@cipherstash/protect-ffi",
"manifest": "integration-tests/package.json",
"ecosystem": "npm",
"version_constraint": ".."
},
{
"name": "pg",
"manifest": "integration-tests/package.json",
"ecosystem": "npm",
"version_constraint": "^8.13.3"
},
{
"name": "@neon-rs/load",
"manifest": "package.json",
"ecosystem": "npm",
"version_constraint": "^0.1.82"
}
],
"all_dependencies": {
"error": null,
"source": "github-sbom",
"packages": [
{
"name": "@cipherstash/auth",
"direct": true,
"version": "0.39.0",
"ecosystem": "npm"
},
{
"name": "@cipherstash/protect-ffi",
"direct": true,
"version": "0.29.0",
"ecosystem": "npm"
},
{
"name": "@neon-rs/load",
"direct": true,
"version": "0.1.82",
"ecosystem": "npm"
},
{
"name": "pg",
"direct": true,
"version": "8.13.3",
"ecosystem": "npm"
},
{
"name": "adler2",
"direct": false,
"version": "2.0.1",
"ecosystem": "crates"
},
{
"name": "aead",
"direct": false,
"version": "0.5.2",
"ecosystem": "crates"
},
{
"name": "aes",
"direct": false,
"version": "0.8.4",
"ecosystem": "crates"
},
{
"name": "aes-gcm",
"direct": false,
"version": "0.10.3",
"ecosystem": "crates"
},
{
"name": "aes-gcm-siv",
"direct": false,
"version": "0.11.1",
"ecosystem": "crates"
},
{
"name": "ahash",
"direct": false,
"version": "0.7.8",
"ecosystem": "crates"
},
{
"name": "ahash",
"direct": false,
"version": "0.8.12",
"ecosystem": "crates"
},
{
"name": "aho-corasick",
"direct": false,
"version": "1.1.4",
"ecosystem": "crates"
},
{
"name": "alloc-no-stdlib",
"direct": false,
"version": "2.0.4",
"ecosystem": "crates"
},
{
"name": "alloc-stdlib",
"direct": false,
"version": "0.2.2",
"ecosystem": "crates"
},
{
"name": "allocator-api2",
"direct": false,
"version": "0.2.21",
"ecosystem": "crates"
},
{
"name": "android_system_properties",
"direct": false,
"version": "0.1.5",
"ecosystem": "crates"
},
{
"name": "anyhow",
"direct": false,
"version": "1.0.102",
"ecosystem": "crates"
},
{
"name": "aquamarine",
"direct": false,
"version": "0.6.0",
"ecosystem": "crates"
},
{
"name": "arrayref",
"direct": false,
"version": "0.3.9",
"ecosystem": "crates"
},
{
"name": "arrayvec",
"direct": false,
"version": "0.7.6",
"ecosystem": "crates"
},
{
"name": "async-compression",
"direct": false,
"version": "0.4.41",
"ecosystem": "crates"
},
{
"name": "async-mutex",
"direct": false,
"version": "1.4.1",
"ecosystem": "crates"
},
{
"name": "async-trait",
"direct": false,
"version": "0.1.89",
"ecosystem": "crates"
},
{
"name": "atomic",
"direct": false,
"version": "0.6.1",
"ecosystem": "crates"
},
{
"name": "atomic-waker",
"direct": false,
"version": "1.1.2",
"ecosystem": "crates"
},
{
"name": "autocfg",
"direct": false,
"version": "1.5.0",
"ecosystem": "crates"
},
{
"name": "aws-lc-rs",
"direct": false,
"version": "1.16.3",
"ecosystem": "crates"
},
{
"name": "aws-lc-sys",
"direct": false,
"version": "0.40.0",
"ecosystem": "crates"
},
{
"name": "base16ct",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "base32",
"direct": false,
"version": "0.5.1",
"ecosystem": "crates"
},
{
"name": "base64",
"direct": false,
"version": "0.22.1",
"ecosystem": "crates"
},
{
"name": "base64ct",
"direct": false,
"version": "1.8.3",
"ecosystem": "crates"
},
{
"name": "base85",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "base85",
"direct": false,
"version": "2.0.0",
"ecosystem": "crates"
},
{
"name": "bitflags",
"direct": false,
"version": "2.11.0",
"ecosystem": "crates"
},
{
"name": "bitvec",
"direct": false,
"version": "1.0.1",
"ecosystem": "crates"
},
{
"name": "blake3",
"direct": false,
"version": "1.8.3",
"ecosystem": "crates"
},
{
"name": "block-buffer",
"direct": false,
"version": "0.10.4",
"ecosystem": "crates"
},
{
"name": "block-buffer",
"direct": false,
"version": "0.12.0",
"ecosystem": "crates"
},
{
"name": "block-modes",
"direct": false,
"version": "0.9.1",
"ecosystem": "crates"
},
{
"name": "borsh",
"direct": false,
"version": "1.6.1",
"ecosystem": "crates"
},
{
"name": "borsh-derive",
"direct": false,
"version": "1.6.1",
"ecosystem": "crates"
},
{
"name": "brotli",
"direct": false,
"version": "8.0.2",
"ecosystem": "crates"
},
{
"name": "brotli-decompressor",
"direct": false,
"version": "5.0.0",
"ecosystem": "crates"
},
{
"name": "bumpalo",
"direct": false,
"version": "3.20.2",
"ecosystem": "crates"
},
{
"name": "bytecheck",
"direct": false,
"version": "0.6.12",
"ecosystem": "crates"
},
{
"name": "bytecheck_derive",
"direct": false,
"version": "0.6.12",
"ecosystem": "crates"
},
{
"name": "bytemuck",
"direct": false,
"version": "1.25.0",
"ecosystem": "crates"
},
{
"name": "byteorder",
"direct": false,
"version": "1.5.0",
"ecosystem": "crates"
},
{
"name": "bytes",
"direct": false,
"version": "1.11.1",
"ecosystem": "crates"
},
{
"name": "cached",
"direct": false,
"version": "0.54.0",
"ecosystem": "crates"
},
{
"name": "cached_proc_macro",
"direct": false,
"version": "0.23.0",
"ecosystem": "crates"
},
{
"name": "cached_proc_macro_types",
"direct": false,
"version": "0.1.1",
"ecosystem": "crates"
},
{
"name": "cc",
"direct": false,
"version": "1.2.57",
"ecosystem": "crates"
},
{
"name": "cesu8",
"direct": false,
"version": "1.1.0",
"ecosystem": "crates"
},
{
"name": "cfg-if",
"direct": false,
"version": "1.0.4",
"ecosystem": "crates"
},
{
"name": "cfg_aliases",
"direct": false,
"version": "0.2.1",
"ecosystem": "crates"
},
{
"name": "chacha20",
"direct": false,
"version": "0.10.0",
"ecosystem": "crates"
},
{
"name": "chrono",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "chrono",
"direct": false,
"version": "0.4.44",
"ecosystem": "crates"
},
{
"name": "cipher",
"direct": false,
"version": "0.4.4",
"ecosystem": "crates"
},
{
"name": "cipherstash-client",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "cipherstash-config",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "cipherstash-core",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "cllw-ore",
"direct": false,
"version": "0.4.2",
"ecosystem": "crates"
},
{
"name": "cmac",
"direct": false,
"version": "0.7.2",
"ecosystem": "crates"
},
{
"name": "cmake",
"direct": false,
"version": "0.1.57",
"ecosystem": "crates"
},
{
"name": "combine",
"direct": false,
"version": "4.6.7",
"ecosystem": "crates"
},
{
"name": "compression-codecs",
"direct": false,
"version": "0.4.37",
"ecosystem": "crates"
},
{
"name": "compression-core",
"direct": false,
"version": "0.4.31",
"ecosystem": "crates"
},
{
"name": "console_error_panic_hook",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "console_error_panic_hook",
"direct": false,
"version": "0.1.7",
"ecosystem": "crates"
},
{
"name": "const-hex",
"direct": false,
"version": "1.18.1",
"ecosystem": "crates"
},
{
"name": "constant_time_eq",
"direct": false,
"version": "0.4.2",
"ecosystem": "crates"
},
{
"name": "convert_case",
"direct": false,
"version": "0.10.0",
"ecosystem": "crates"
},
{
"name": "core-foundation",
"direct": false,
"version": "0.10.1",
"ecosystem": "crates"
},
{
"name": "core-foundation",
"direct": false,
"version": "0.9.4",
"ecosystem": "crates"
},
{
"name": "core-foundation-sys",
"direct": false,
"version": "0.8.7",
"ecosystem": "crates"
},
{
"name": "cpufeatures",
"direct": false,
"version": "0.2.17",
"ecosystem": "crates"
},
{
"name": "cpufeatures",
"direct": false,
"version": "0.3.0",
"ecosystem": "crates"
},
{
"name": "crc32fast",
"direct": false,
"version": "1.5.0",
"ecosystem": "crates"
},
{
"name": "critical-section",
"direct": false,
"version": "1.2.0",
"ecosystem": "crates"
},
{
"name": "crossbeam-channel",
"direct": false,
"version": "0.5.15",
"ecosystem": "crates"
},
{
"name": "crossbeam-epoch",
"direct": false,
"version": "0.9.18",
"ecosystem": "crates"
},
{
"name": "crossbeam-utils",
"direct": false,
"version": "0.8.21",
"ecosystem": "crates"
},
{
"name": "crypto-common",
"direct": false,
"version": "0.1.7",
"ecosystem": "crates"
},
{
"name": "crypto-common",
"direct": false,
"version": "0.2.1",
"ecosystem": "crates"
},
{
"name": "ctr",
"direct": false,
"version": "0.9.2",
"ecosystem": "crates"
},
{
"name": "cts-common",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "darling",
"direct": false,
"version": "0.20.11",
"ecosystem": "crates"
},
{
"name": "darling_core",
"direct": false,
"version": "0.20.11",
"ecosystem": "crates"
},
{
"name": "darling_macro",
"direct": false,
"version": "0.20.11",
"ecosystem": "crates"
},
{
"name": "data-encoding",
"direct": false,
"version": "2.10.0",
"ecosystem": "crates"
},
{
"name": "dbl",
"direct": false,
"version": "0.3.2",
"ecosystem": "crates"
},
{
"name": "deranged",
"direct": false,
"version": "0.5.8",
"ecosystem": "crates"
},
{
"name": "derive_more",
"direct": false,
"version": "1.0.0",
"ecosystem": "crates"
},
{
"name": "derive_more",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "derive_more-impl",
"direct": false,
"version": "1.0.0",
"ecosystem": "crates"
},
{
"name": "derive_more-impl",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "deunicode",
"direct": false,
"version": "1.6.2",
"ecosystem": "crates"
},
{
"name": "digest",
"direct": false,
"version": "0.10.7",
"ecosystem": "crates"
},
{
"name": "digest",
"direct": false,
"version": "0.11.3",
"ecosystem": "crates"
},
{
"name": "dirs",
"direct": false,
"version": "4.0.0",
"ecosystem": "crates"
},
{
"name": "dirs-sys",
"direct": false,
"version": "0.3.7",
"ecosystem": "crates"
},
{
"name": "displaydoc",
"direct": false,
"version": "0.2.5",
"ecosystem": "crates"
},
{
"name": "dummy",
"direct": false,
"version": "0.8.0",
"ecosystem": "crates"
},
{
"name": "dunce",
"direct": false,
"version": "1.0.5",
"ecosystem": "crates"
},
{
"name": "dyn-clone",
"direct": false,
"version": "1.0.20",
"ecosystem": "crates"
},
{
"name": "either",
"direct": false,
"version": "1.15.0",
"ecosystem": "crates"
},
{
"name": "env_filter",
"direct": false,
"version": "1.0.0",
"ecosystem": "crates"
},
{
"name": "env_logger",
"direct": false,
"version": "0.11.9",
"ecosystem": "crates"
},
{
"name": "eql-bindings",
"direct": false,
"version": "3.0.2",
"ecosystem": "crates"
},
{
"name": "equivalent",
"direct": false,
"version": "1.0.2",
"ecosystem": "crates"
},
{
"name": "errno",
"direct": false,
"version": "0.3.14",
"ecosystem": "crates"
},
{
"name": "event-listener",
"direct": false,
"version": "2.5.3",
"ecosystem": "crates"
},
{
"name": "fake",
"direct": false,
"version": "2.10.0",
"ecosystem": "crates"
},
{
"name": "find-msvc-tools",
"direct": false,
"version": "0.1.9",
"ecosystem": "crates"
},
{
"name": "flate2",
"direct": false,
"version": "1.1.9",
"ecosystem": "crates"
},
{
"name": "fnv",
"direct": false,
"version": "1.0.7",
"ecosystem": "crates"
},
{
"name": "foldhash",
"direct": false,
"version": "0.1.5",
"ecosystem": "crates"
},
{
"name": "form_urlencoded",
"direct": false,
"version": "1.2.2",
"ecosystem": "crates"
},
{
"name": "fs_extra",
"direct": false,
"version": "1.3.0",
"ecosystem": "crates"
},
{
"name": "funty",
"direct": false,
"version": "2.0.0",
"ecosystem": "crates"
},
{
"name": "futures",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-channel",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-core",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-executor",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-io",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-macro",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-sink",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-task",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "futures-util",
"direct": false,
"version": "0.3.32",
"ecosystem": "crates"
},
{
"name": "generic-array",
"direct": false,
"version": "0.14.7",
"ecosystem": "crates"
},
{
"name": "gethostname",
"direct": false,
"version": "0.5.0",
"ecosystem": "crates"
},
{
"name": "getrandom",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "getrandom",
"direct": false,
"version": "0.2.17",
"ecosystem": "crates"
},
{
"name": "getrandom",
"direct": false,
"version": "0.3.4",
"ecosystem": "crates"
},
{
"name": "getrandom",
"direct": false,
"version": "0.4.2",
"ecosystem": "crates"
},
{
"name": "ghash",
"direct": false,
"version": "0.5.1",
"ecosystem": "crates"
},
{
"name": "half",
"direct": false,
"version": "1.8.3",
"ecosystem": "crates"
},
{
"name": "hashbrown",
"direct": false,
"version": "0.12.3",
"ecosystem": "crates"
},
{
"name": "hashbrown",
"direct": false,
"version": "0.14.5",
"ecosystem": "crates"
},
{
"name": "hashbrown",
"direct": false,
"version": "0.15.5",
"ecosystem": "crates"
},
{
"name": "hashbrown",
"direct": false,
"version": "0.16.1",
"ecosystem": "crates"
},
{
"name": "heck",
"direct": false,
"version": "0.5.0",
"ecosystem": "crates"
},
{
"name": "hex",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "hex",
"direct": false,
"version": "0.4.3",
"ecosystem": "crates"
},
{
"name": "hex-literal",
"direct": false,
"version": "0.3.4",
"ecosystem": "crates"
},
{
"name": "hickory-net",
"direct": false,
"version": "0.26.1",
"ecosystem": "crates"
},
{
"name": "hickory-proto",
"direct": false,
"version": "0.26.1",
"ecosystem": "crates"
},
{
"name": "hickory-resolver",
"direct": false,
"version": "0.26.1",
"ecosystem": "crates"
},
{
"name": "hmac",
"direct": false,
"version": "0.12.1",
"ecosystem": "crates"
},
{
"name": "http",
"direct": false,
"version": "1.4.0",
"ecosystem": "crates"
},
{
"name": "http-body",
"direct": false,
"version": "1.0.1",
"ecosystem": "crates"
},
{
"name": "http-body-util",
"direct": false,
"version": "0.1.3",
"ecosystem": "crates"
},
{
"name": "httparse",
"direct": false,
"version": "1.10.1",
"ecosystem": "crates"
},
{
"name": "hybrid-array",
"direct": false,
"version": "0.4.12",
"ecosystem": "crates"
},
{
"name": "hyper",
"direct": false,
"version": "1.8.1",
"ecosystem": "crates"
},
{
"name": "hyper-rustls",
"direct": false,
"version": "0.27.7",
"ecosystem": "crates"
},
{
"name": "hyper-util",
"direct": false,
"version": "0.1.20",
"ecosystem": "crates"
},
{
"name": "iana-time-zone",
"direct": false,
"version": "0.1.65",
"ecosystem": "crates"
},
{
"name": "iana-time-zone-haiku",
"direct": false,
"version": "0.1.2",
"ecosystem": "crates"
},
{
"name": "icu_collections",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "icu_locale_core",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "icu_normalizer",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "icu_normalizer_data",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "icu_properties",
"direct": false,
"version": "2.1.2",
"ecosystem": "crates"
},
{
"name": "icu_properties_data",
"direct": false,
"version": "2.1.2",
"ecosystem": "crates"
},
{
"name": "icu_provider",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "id-arena",
"direct": false,
"version": "2.3.0",
"ecosystem": "crates"
},
{
"name": "ident_case",
"direct": false,
"version": "1.0.1",
"ecosystem": "crates"
},
{
"name": "idna",
"direct": false,
"version": "1.1.0",
"ecosystem": "crates"
},
{
"name": "idna_adapter",
"direct": false,
"version": "1.2.1",
"ecosystem": "crates"
},
{
"name": "include_dir",
"direct": false,
"version": "0.7.4",
"ecosystem": "crates"
},
{
"name": "include_dir_macros",
"direct": false,
"version": "0.7.4",
"ecosystem": "crates"
},
{
"name": "indexmap",
"direct": false,
"version": "2.13.0",
"ecosystem": "crates"
},
{
"name": "inout",
"direct": false,
"version": "0.1.4",
"ecosystem": "crates"
},
{
"name": "ipconfig",
"direct": false,
"version": "0.3.2",
"ecosystem": "crates"
},
{
"name": "ipnet",
"direct": false,
"version": "2.12.0",
"ecosystem": "crates"
},
{
"name": "iri-string",
"direct": false,
"version": "0.7.10",
"ecosystem": "crates"
},
{
"name": "is-docker",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "is-wsl",
"direct": false,
"version": "0.4.0",
"ecosystem": "crates"
},
{
"name": "itertools",
"direct": false,
"version": "0.10.5",
"ecosystem": "crates"
},
{
"name": "itertools",
"direct": false,
"version": "0.12.1",
"ecosystem": "crates"
},
{
"name": "itoa",
"direct": false,
"version": "1.0.17",
"ecosystem": "crates"
},
{
"name": "jni",
"direct": false,
"version": "0.21.1",
"ecosystem": "crates"
},
{
"name": "jni",
"direct": false,
"version": "0.22.4",
"ecosystem": "crates"
},
{
"name": "jni-macros",
"direct": false,
"version": "0.22.4",
"ecosystem": "crates"
},
{
"name": "jni-sys",
"direct": false,
"version": "0.3.0",
"ecosystem": "crates"
},
{
"name": "jni-sys",
"direct": false,
"version": "0.4.1",
"ecosystem": "crates"
},
{
"name": "jni-sys-macros",
"direct": false,
"version": "0.4.1",
"ecosystem": "crates"
},
{
"name": "jobserver",
"direct": false,
"version": "0.1.34",
"ecosystem": "crates"
},
{
"name": "js-sys",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "js-sys",
"direct": false,
"version": "0.3.91",
"ecosystem": "crates"
},
{
"name": "jsonwebtoken",
"direct": false,
"version": "9.3.1",
"ecosystem": "crates"
},
{
"name": "lazy_static",
"direct": false,
"version": "1.5.0",
"ecosystem": "crates"
},
{
"name": "leb128fmt",
"direct": false,
"version": "0.1.0",
"ecosystem": "crates"
},
{
"name": "libc",
"direct": false,
"version": "0.2.183",
"ecosystem": "crates"
},
{
"name": "libloading",
"direct": false,
"version": "0.8.9",
"ecosystem": "crates"
},
{
"name": "libredox",
"direct": false,
"version": "0.1.14",
"ecosystem": "crates"
},
{
"name": "linkme",
"direct": false,
"version": "0.3.35",
"ecosystem": "crates"
},
{
"name": "linkme-impl",
"direct": false,
"version": "0.3.35",
"ecosystem": "crates"
},
{
"name": "linux-raw-sys",
"direct": false,
"version": "0.4.15",
"ecosystem": "crates"
},
{
"name": "litemap",
"direct": false,
"version": "0.8.1",
"ecosystem": "crates"
},
{
"name": "lock_api",
"direct": false,
"version": "0.4.14",
"ecosystem": "crates"
},
{
"name": "log",
"direct": false,
"version": "0.4.29",
"ecosystem": "crates"
},
{
"name": "lru-slab",
"direct": false,
"version": "0.1.2",
"ecosystem": "crates"
},
{
"name": "md-5",
"direct": false,
"version": "0.10.6",
"ecosystem": "crates"
},
{
"name": "memchr",
"direct": false,
"version": "2.8.0",
"ecosystem": "crates"
},
{
"name": "miette",
"direct": false,
"version": "7.6.0",
"ecosystem": "crates"
},
{
"name": "miette-derive",
"direct": false,
"version": "7.6.0",
"ecosystem": "crates"
},
{
"name": "miniz_oxide",
"direct": false,
"version": "0.8.9",
"ecosystem": "crates"
},
{
"name": "mio",
"direct": false,
"version": "1.1.1",
"ecosystem": "crates"
},
{
"name": "moka",
"direct": false,
"version": "0.12.14",
"ecosystem": "crates"
},
{
"name": "ndk-context",
"direct": false,
"version": "0.1.1",
"ecosystem": "crates"
},
{
"name": "neon",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "neon",
"direct": false,
"version": "1.1.1",
"ecosystem": "crates"
},
{
"name": "neon-macros",
"direct": false,
"version": "1.1.1",
"ecosystem": "crates"
},
{
"name": "nom",
"direct": false,
"version": "8.0.0",
"ecosystem": "crates"
},
{
"name": "num",
"direct": false,
"version": "0.4.3",
"ecosystem": "crates"
},
{
"name": "num-bigint",
"direct": false,
"version": "0.4.6",
"ecosystem": "crates"
},
{
"name": "num-complex",
"direct": false,
"version": "0.4.6",
"ecosystem": "crates"
},
{
"name": "num-conv",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "num-integer",
"direct": false,
"version": "0.1.46",
"ecosystem": "crates"
},
{
"name": "num-iter",
"direct": false,
"version": "0.1.45",
"ecosystem": "crates"
},
{
"name": "num-rational",
"direct": false,
"version": "0.4.2",
"ecosystem": "crates"
},
{
"name": "num-traits",
"direct": false,
"version": "0.2.19",
"ecosystem": "crates"
},
{
"name": "once_cell",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "once_cell",
"direct": false,
"version": "1.21.4",
"ecosystem": "crates"
},
{
"name": "opaque-debug",
"direct": false,
"version": "0.3.1",
"ecosystem": "crates"
},
{
"name": "open",
"direct": false,
"version": "5.3.3",
"ecosystem": "crates"
},
{
"name": "openssl-probe",
"direct": false,
"version": "0.2.1",
"ecosystem": "crates"
},
{
"name": "orderable-bytes",
"direct": false,
"version": "0.1.1",
"ecosystem": "crates"
},
{
"name": "ore-rs",
"direct": false,
"version": "0.8.3",
"ecosystem": "crates"
},
{
"name": "parking_lot",
"direct": false,
"version": "0.12.5",
"ecosystem": "crates"
},
{
"name": "parking_lot_core",
"direct": false,
"version": "0.9.12",
"ecosystem": "crates"
},
{
"name": "pathdiff",
"direct": false,
"version": "0.2.3",
"ecosystem": "crates"
},
{
"name": "pem",
"direct": false,
"version": "3.0.6",
"ecosystem": "crates"
},
{
"name": "percent-encoding",
"direct": false,
"version": "2.3.2",
"ecosystem": "crates"
},
{
"name": "pin-project-lite",
"direct": false,
"version": "0.2.17",
"ecosystem": "crates"
},
{
"name": "pin-utils",
"direct": false,
"version": "0.1.0",
"ecosystem": "crates"
},
{
"name": "polyval",
"direct": false,
"version": "0.6.2",
"ecosystem": "crates"
},
{
"name": "portable-atomic",
"direct": false,
"version": "1.13.1",
"ecosystem": "crates"
},
{
"name": "potential_utf",
"direct": false,
"version": "0.1.4",
"ecosystem": "crates"
},
{
"name": "powerfmt",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "ppv-lite86",
"direct": false,
"version": "0.2.21",
"ecosystem": "crates"
},
{
"name": "prefix-trie",
"direct": false,
"version": "0.8.4",
"ecosystem": "crates"
},
{
"name": "prettyplease",
"direct": false,
"version": "0.2.37",
"ecosystem": "crates"
},
{
"name": "proc-macro-crate",
"direct": false,
"version": "3.5.0",
"ecosystem": "crates"
},
{
"name": "proc-macro-error-attr2",
"direct": false,
"version": "2.0.0",
"ecosystem": "crates"
},
{
"name": "proc-macro-error2",
"direct": false,
"version": "2.0.1",
"ecosystem": "crates"
},
{
"name": "proc-macro2",
"direct": false,
"version": "1.0.106",
"ecosystem": "crates"
},
{
"name": "proptest",
"direct": false,
"version": "1.10.0",
"ecosystem": "crates"
},
{
"name": "ptr_meta",
"direct": false,
"version": "0.1.4",
"ecosystem": "crates"
},
{
"name": "ptr_meta_derive",
"direct": false,
"version": "0.1.4",
"ecosystem": "crates"
},
{
"name": "quickcheck",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "quickcheck",
"direct": false,
"version": "1.1.0",
"ecosystem": "crates"
},
{
"name": "quickcheck_macros",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "quickcheck_macros",
"direct": false,
"version": "1.2.0",
"ecosystem": "crates"
},
{
"name": "quinn",
"direct": false,
"version": "0.11.9",
"ecosystem": "crates"
},
{
"name": "quinn-proto",
"direct": false,
"version": "0.11.14",
"ecosystem": "crates"
},
{
"name": "quinn-udp",
"direct": false,
"version": "0.5.14",
"ecosystem": "crates"
},
{
"name": "quote",
"direct": false,
"version": "1.0.45",
"ecosystem": "crates"
},
{
"name": "r-efi",
"direct": false,
"version": "5.3.0",
"ecosystem": "crates"
},
{
"name": "r-efi",
"direct": false,
"version": "6.0.0",
"ecosystem": "crates"
},
{
"name": "radium",
"direct": false,
"version": "0.7.0",
"ecosystem": "crates"
},
{
"name": "rand",
"direct": false,
"version": "0.10.1",
"ecosystem": "crates"
},
{
"name": "rand",
"direct": false,
"version": "0.8.6",
"ecosystem": "crates"
},
{
"name": "rand",
"direct": false,
"version": "0.9.3",
"ecosystem": "crates"
},
{
"name": "rand_chacha",
"direct": false,
"version": "0.3.1",
"ecosystem": "crates"
},
{
"name": "rand_chacha",
"direct": false,
"version": "0.9.0",
"ecosystem": "crates"
},
{
"name": "rand_core",
"direct": false,
"version": "0.10.0",
"ecosystem": "crates"
},
{
"name": "rand_core",
"direct": false,
"version": "0.6.4",
"ecosystem": "crates"
},
{
"name": "rand_core",
"direct": false,
"version": "0.9.5",
"ecosystem": "crates"
},
{
"name": "rand_xorshift",
"direct": false,
"version": "0.4.0",
"ecosystem": "crates"
},
{
"name": "recipher",
"direct": false,
"version": "0.2.3",
"ecosystem": "crates"
},
{
"name": "redox_syscall",
"direct": false,
"version": "0.5.18",
"ecosystem": "crates"
},
{
"name": "redox_users",
"direct": false,
"version": "0.4.6",
"ecosystem": "crates"
},
{
"name": "ref-cast",
"direct": false,
"version": "1.0.25",
"ecosystem": "crates"
},
{
"name": "ref-cast-impl",
"direct": false,
"version": "1.0.25",
"ecosystem": "crates"
},
{
"name": "regex",
"direct": false,
"version": "1.12.3",
"ecosystem": "crates"
},
{
"name": "regex-automata",
"direct": false,
"version": "0.4.14",
"ecosystem": "crates"
},
{
"name": "regex-syntax",
"direct": false,
"version": "0.8.10",
"ecosystem": "crates"
},
{
"name": "rend",
"direct": false,
"version": "0.4.2",
"ecosystem": "crates"
},
{
"name": "reqwest",
"direct": false,
"version": "0.13.4",
"ecosystem": "crates"
},
{
"name": "resolv-conf",
"direct": false,
"version": "0.7.6",
"ecosystem": "crates"
},
{
"name": "ring",
"direct": false,
"version": "0.17.14",
"ecosystem": "crates"
},
{
"name": "rkyv",
"direct": false,
"version": "0.7.46",
"ecosystem": "crates"
},
{
"name": "rkyv_derive",
"direct": false,
"version": "0.7.46",
"ecosystem": "crates"
},
{
"name": "rmp",
"direct": false,
"version": "0.8.15",
"ecosystem": "crates"
},
{
"name": "rmp-serde",
"direct": false,
"version": "1.3.1",
"ecosystem": "crates"
},
{
"name": "rust-stemmers",
"direct": false,
"version": "1.2.0",
"ecosystem": "crates"
},
{
"name": "rust_decimal",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "rust_decimal",
"direct": false,
"version": "1.40.0",
"ecosystem": "crates"
},
{
"name": "rustc-hash",
"direct": false,
"version": "2.1.1",
"ecosystem": "crates"
},
{
"name": "rustc_version",
"direct": false,
"version": "0.4.1",
"ecosystem": "crates"
},
{
"name": "rustix",
"direct": false,
"version": "0.38.44",
"ecosystem": "crates"
},
{
"name": "rustls",
"direct": false,
"version": "0.23.37",
"ecosystem": "crates"
},
{
"name": "rustls-native-certs",
"direct": false,
"version": "0.8.3",
"ecosystem": "crates"
},
{
"name": "rustls-pki-types",
"direct": false,
"version": "1.14.0",
"ecosystem": "crates"
},
{
"name": "rustls-platform-verifier",
"direct": false,
"version": "0.6.2",
"ecosystem": "crates"
},
{
"name": "rustls-platform-verifier-android",
"direct": false,
"version": "0.1.1",
"ecosystem": "crates"
},
{
"name": "rustls-webpki",
"direct": false,
"version": "0.103.13",
"ecosystem": "crates"
},
{
"name": "rustversion",
"direct": false,
"version": "1.0.22",
"ecosystem": "crates"
},
{
"name": "ryu",
"direct": false,
"version": "1.0.23",
"ecosystem": "crates"
},
{
"name": "same-file",
"direct": false,
"version": "1.0.6",
"ecosystem": "crates"
},
{
"name": "schannel",
"direct": false,
"version": "0.1.29",
"ecosystem": "crates"
},
{
"name": "schemars",
"direct": false,
"version": "1.2.1",
"ecosystem": "crates"
},
{
"name": "schemars_derive",
"direct": false,
"version": "1.2.1",
"ecosystem": "crates"
},
{
"name": "scopeguard",
"direct": false,
"version": "1.2.0",
"ecosystem": "crates"
},
{
"name": "seahash",
"direct": false,
"version": "4.1.0",
"ecosystem": "crates"
},
{
"name": "security-framework",
"direct": false,
"version": "3.7.0",
"ecosystem": "crates"
},
{
"name": "security-framework-sys",
"direct": false,
"version": "2.17.0",
"ecosystem": "crates"
},
{
"name": "semver",
"direct": false,
"version": "1.0.27",
"ecosystem": "crates"
},
{
"name": "send_wrapper",
"direct": false,
"version": "0.6.0",
"ecosystem": "crates"
},
{
"name": "serde",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "serde",
"direct": false,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "serde-wasm-bindgen",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "serde-wasm-bindgen",
"direct": false,
"version": "0.6.5",
"ecosystem": "crates"
},
{
"name": "serde_bytes",
"direct": false,
"version": "0.11.19",
"ecosystem": "crates"
},
{
"name": "serde_cbor",
"direct": false,
"version": "0.11.2",
"ecosystem": "crates"
},
{
"name": "serde_core",
"direct": false,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "serde_derive",
"direct": false,
"version": "1.0.228",
"ecosystem": "crates"
},
{
"name": "serde_derive_internals",
"direct": false,
"version": "0.29.1",
"ecosystem": "crates"
},
{
"name": "serde_json",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "serde_json",
"direct": false,
"version": "1.0.149",
"ecosystem": "crates"
},
{
"name": "serde_spanned",
"direct": false,
"version": "0.6.9",
"ecosystem": "crates"
},
{
"name": "serde_urlencoded",
"direct": false,
"version": "0.7.1",
"ecosystem": "crates"
},
{
"name": "serdect",
"direct": false,
"version": "0.3.0",
"ecosystem": "crates"
},
{
"name": "sha1_smol",
"direct": false,
"version": "1.0.1",
"ecosystem": "crates"
},
{
"name": "sha2",
"direct": false,
"version": "0.10.9",
"ecosystem": "crates"
},
{
"name": "shlex",
"direct": false,
"version": "1.3.0",
"ecosystem": "crates"
},
{
"name": "signal-hook-registry",
"direct": false,
"version": "1.4.8",
"ecosystem": "crates"
},
{
"name": "simd-adler32",
"direct": false,
"version": "0.3.8",
"ecosystem": "crates"
},
{
"name": "simd_cesu8",
"direct": false,
"version": "1.2.0",
"ecosystem": "crates"
},
{
"name": "simdutf8",
"direct": false,
"version": "0.1.5",
"ecosystem": "crates"
},
{
"name": "simple_asn1",
"direct": false,
"version": "0.6.4",
"ecosystem": "crates"
},
{
"name": "slab",
"direct": false,
"version": "0.4.12",
"ecosystem": "crates"
},
{
"name": "smallvec",
"direct": false,
"version": "1.15.1",
"ecosystem": "crates"
},
{
"name": "socket2",
"direct": false,
"version": "0.5.10",
"ecosystem": "crates"
},
{
"name": "socket2",
"direct": false,
"version": "0.6.3",
"ecosystem": "crates"
},
{
"name": "stable_deref_trait",
"direct": false,
"version": "1.2.1",
"ecosystem": "crates"
},
{
"name": "stack-auth",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "stack-profile",
"direct": false,
"version": "0.42.0",
"ecosystem": "crates"
},
{
"name": "static_assertions",
"direct": false,
"version": "1.1.0",
"ecosystem": "crates"
},
{
"name": "strsim",
"direct": false,
"version": "0.11.1",
"ecosystem": "crates"
},
{
"name": "subtle",
"direct": false,
"version": "2.6.1",
"ecosystem": "crates"
},
{
"name": "subtle-ng",
"direct": false,
"version": "2.5.0",
"ecosystem": "crates"
},
{
"name": "syn",
"direct": false,
"version": "1.0.109",
"ecosystem": "crates"
},
{
"name": "syn",
"direct": false,
"version": "2.0.117",
"ecosystem": "crates"
},
{
"name": "sync_wrapper",
"direct": false,
"version": "1.0.2",
"ecosystem": "crates"
},
{
"name": "synstructure",
"direct": false,
"version": "0.13.2",
"ecosystem": "crates"
},
{
"name": "system-configuration",
"direct": false,
"version": "0.7.0",
"ecosystem": "crates"
},
{
"name": "system-configuration-sys",
"direct": false,
"version": "0.6.0",
"ecosystem": "crates"
},
{
"name": "tagptr",
"direct": false,
"version": "0.2.0",
"ecosystem": "crates"
},
{
"name": "tap",
"direct": false,
"version": "1.0.1",
"ecosystem": "crates"
},
{
"name": "termcolor",
"direct": false,
"version": "1.4.1",
"ecosystem": "crates"
},
{
"name": "thiserror",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "thiserror",
"direct": false,
"version": "1.0.69",
"ecosystem": "crates"
},
{
"name": "thiserror",
"direct": false,
"version": "2.0.18",
"ecosystem": "crates"
},
{
"name": "thiserror-impl",
"direct": false,
"version": "1.0.69",
"ecosystem": "crates"
},
{
"name": "thiserror-impl",
"direct": false,
"version": "2.0.18",
"ecosystem": "crates"
},
{
"name": "time",
"direct": false,
"version": "0.3.47",
"ecosystem": "crates"
},
{
"name": "time-core",
"direct": false,
"version": "0.1.8",
"ecosystem": "crates"
},
{
"name": "time-macros",
"direct": false,
"version": "0.2.27",
"ecosystem": "crates"
},
{
"name": "tinystr",
"direct": false,
"version": "0.8.2",
"ecosystem": "crates"
},
{
"name": "tinyvec",
"direct": false,
"version": "1.11.0",
"ecosystem": "crates"
},
{
"name": "tinyvec_macros",
"direct": false,
"version": "0.1.1",
"ecosystem": "crates"
},
{
"name": "tokio",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "tokio",
"direct": false,
"version": "1.50.0",
"ecosystem": "crates"
},
{
"name": "tokio-macros",
"direct": false,
"version": "2.6.1",
"ecosystem": "crates"
},
{
"name": "tokio-rustls",
"direct": false,
"version": "0.26.4",
"ecosystem": "crates"
},
{
"name": "tokio-util",
"direct": false,
"version": "0.7.18",
"ecosystem": "crates"
},
{
"name": "toml",
"direct": false,
"version": "0.8.23",
"ecosystem": "crates"
},
{
"name": "toml_datetime",
"direct": false,
"version": "0.6.11",
"ecosystem": "crates"
},
{
"name": "toml_datetime",
"direct": false,
"version": "1.0.1+spec-1.1.0",
"ecosystem": "crates"
},
{
"name": "toml_edit",
"direct": false,
"version": "0.22.27",
"ecosystem": "crates"
},
{
"name": "toml_edit",
"direct": false,
"version": "0.25.5+spec-1.1.0",
"ecosystem": "crates"
},
{
"name": "toml_parser",
"direct": false,
"version": "1.0.10+spec-1.1.0",
"ecosystem": "crates"
},
{
"name": "toml_write",
"direct": false,
"version": "0.1.2",
"ecosystem": "crates"
},
{
"name": "tower",
"direct": false,
"version": "0.5.3",
"ecosystem": "crates"
},
{
"name": "tower-http",
"direct": false,
"version": "0.6.8",
"ecosystem": "crates"
},
{
"name": "tower-layer",
"direct": false,
"version": "0.3.3",
"ecosystem": "crates"
},
{
"name": "tower-service",
"direct": false,
"version": "0.3.3",
"ecosystem": "crates"
},
{
"name": "tracing",
"direct": false,
"version": "0.1.44",
"ecosystem": "crates"
},
{
"name": "tracing-attributes",
"direct": false,
"version": "0.1.31",
"ecosystem": "crates"
},
{
"name": "tracing-core",
"direct": false,
"version": "0.1.36",
"ecosystem": "crates"
},
{
"name": "try-lock",
"direct": false,
"version": "0.2.5",
"ecosystem": "crates"
},
{
"name": "ts-rs",
"direct": false,
"version": "10.1.0",
"ecosystem": "crates"
},
{
"name": "ts-rs-macros",
"direct": false,
"version": "10.1.0",
"ecosystem": "crates"
},
{
"name": "typenum",
"direct": false,
"version": "1.20.0",
"ecosystem": "crates"
},
{
"name": "unarray",
"direct": false,
"version": "0.1.4",
"ecosystem": "crates"
},
{
"name": "unicode-ident",
"direct": false,
"version": "1.0.24",
"ecosystem": "crates"
},
{
"name": "unicode-normalization",
"direct": false,
"version": "0.1.25",
"ecosystem": "crates"
},
{
"name": "unicode-segmentation",
"direct": false,
"version": "1.12.0",
"ecosystem": "crates"
},
{
"name": "unicode-width",
"direct": false,
"version": "0.1.14",
"ecosystem": "crates"
},
{
"name": "unicode-xid",
"direct": false,
"version": "0.2.6",
"ecosystem": "crates"
},
{
"name": "universal-hash",
"direct": false,
"version": "0.5.1",
"ecosystem": "crates"
},
{
"name": "untrusted",
"direct": false,
"version": "0.7.1",
"ecosystem": "crates"
},
{
"name": "untrusted",
"direct": false,
"version": "0.9.0",
"ecosystem": "crates"
},
{
"name": "url",
"direct": false,
"version": "2.5.8",
"ecosystem": "crates"
},
{
"name": "utf8_iter",
"direct": false,
"version": "1.0.4",
"ecosystem": "crates"
},
{
"name": "utoipa",
"direct": false,
"version": "5.4.0",
"ecosystem": "crates"
},
{
"name": "utoipa-gen",
"direct": false,
"version": "5.4.0",
"ecosystem": "crates"
},
{
"name": "uuid",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "uuid",
"direct": false,
"version": "1.22.0",
"ecosystem": "crates"
},
{
"name": "validator",
"direct": false,
"version": "0.20.0",
"ecosystem": "crates"
},
{
"name": "validator_derive",
"direct": false,
"version": "0.20.0",
"ecosystem": "crates"
},
{
"name": "version_check",
"direct": false,
"version": "0.9.5",
"ecosystem": "crates"
},
{
"name": "vitaminc",
"direct": false,
"version": "0.1.0-pre4.2",
"ecosystem": "crates"
},
{
"name": "vitaminc",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-aead",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-encrypt",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-protected",
"direct": false,
"version": "0.1.0-pre4.2",
"ecosystem": "crates"
},
{
"name": "vitaminc-protected",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-protected-derive",
"direct": false,
"version": "0.1.0-pre4.2",
"ecosystem": "crates"
},
{
"name": "vitaminc-protected-derive",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-random",
"direct": false,
"version": "0.1.0-pre4.2",
"ecosystem": "crates"
},
{
"name": "vitaminc-random",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-random-derives",
"direct": false,
"version": "0.1.0-pre4.2",
"ecosystem": "crates"
},
{
"name": "vitaminc-random-derives",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "vitaminc-traits",
"direct": false,
"version": "0.2.0-pre",
"ecosystem": "crates"
},
{
"name": "walkdir",
"direct": false,
"version": "2.5.0",
"ecosystem": "crates"
},
{
"name": "want",
"direct": false,
"version": "0.3.1",
"ecosystem": "crates"
},
{
"name": "wasi",
"direct": false,
"version": "0.11.1+wasi-snapshot-preview1",
"ecosystem": "crates"
},
{
"name": "wasip2",
"direct": false,
"version": "1.0.2+wasi-0.2.9",
"ecosystem": "crates"
},
{
"name": "wasip3",
"direct": false,
"version": "0.4.0+wasi-0.3.0-rc-2026-01-06",
"ecosystem": "crates"
},
{
"name": "wasm-bindgen",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "wasm-bindgen",
"direct": false,
"version": "0.2.114",
"ecosystem": "crates"
},
{
"name": "wasm-bindgen-futures",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "wasm-bindgen-futures",
"direct": false,
"version": "0.4.64",
"ecosystem": "crates"
},
{
"name": "wasm-bindgen-macro",
"direct": false,
"version": "0.2.114",
"ecosystem": "crates"
},
{
"name": "wasm-bindgen-macro-support",
"direct": false,
"version": "0.2.114",
"ecosystem": "crates"
},
{
"name": "wasm-bindgen-shared",
"direct": false,
"version": "0.2.114",
"ecosystem": "crates"
},
{
"name": "wasm-encoder",
"direct": false,
"version": "0.244.0",
"ecosystem": "crates"
},
{
"name": "wasm-metadata",
"direct": false,
"version": "0.244.0",
"ecosystem": "crates"
},
{
"name": "wasm-streams",
"direct": false,
"version": "0.5.0",
"ecosystem": "crates"
},
{
"name": "wasmparser",
"direct": false,
"version": "0.244.0",
"ecosystem": "crates"
},
{
"name": "web-sys",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "web-sys",
"direct": false,
"version": "0.3.91",
"ecosystem": "crates"
},
{
"name": "web-time",
"direct": false,
"version": "1.1.0",
"ecosystem": "crates"
},
{
"name": "webpki-root-certs",
"direct": false,
"version": "1.0.6",
"ecosystem": "crates"
},
{
"name": "widestring",
"direct": false,
"version": "1.2.1",
"ecosystem": "crates"
},
{
"name": "winapi",
"direct": false,
"version": "0.3.9",
"ecosystem": "crates"
},
{
"name": "winapi-i686-pc-windows-gnu",
"direct": false,
"version": "0.4.0",
"ecosystem": "crates"
},
{
"name": "winapi-util",
"direct": false,
"version": "0.1.11",
"ecosystem": "crates"
},
{
"name": "winapi-x86_64-pc-windows-gnu",
"direct": false,
"version": "0.4.0",
"ecosystem": "crates"
},
{
"name": "windows-core",
"direct": false,
"version": "0.62.2",
"ecosystem": "crates"
},
{
"name": "windows-implement",
"direct": false,
"version": "0.60.2",
"ecosystem": "crates"
},
{
"name": "windows-interface",
"direct": false,
"version": "0.59.3",
"ecosystem": "crates"
},
{
"name": "windows-link",
"direct": false,
"version": "0.2.1",
"ecosystem": "crates"
},
{
"name": "windows-result",
"direct": false,
"version": "0.4.1",
"ecosystem": "crates"
},
{
"name": "windows-strings",
"direct": false,
"version": "0.5.1",
"ecosystem": "crates"
},
{
"name": "windows-sys",
"direct": false,
"version": "0.45.0",
"ecosystem": "crates"
},
{
"name": "windows-sys",
"direct": false,
"version": "0.48.0",
"ecosystem": "crates"
},
{
"name": "windows-sys",
"direct": false,
"version": "0.52.0",
"ecosystem": "crates"
},
{
"name": "windows-sys",
"direct": false,
"version": "0.60.2",
"ecosystem": "crates"
},
{
"name": "windows-sys",
"direct": false,
"version": "0.61.2",
"ecosystem": "crates"
},
{
"name": "windows-targets",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows-targets",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows-targets",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows-targets",
"direct": false,
"version": "0.53.5",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_gnullvm",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_gnullvm",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_gnullvm",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_gnullvm",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_msvc",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_msvc",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_msvc",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_aarch64_msvc",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnu",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnu",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnu",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnu",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnullvm",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_i686_gnullvm",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_i686_msvc",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_i686_msvc",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_i686_msvc",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_i686_msvc",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnu",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnu",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnu",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnu",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnullvm",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnullvm",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnullvm",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_gnullvm",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_msvc",
"direct": false,
"version": "0.42.2",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_msvc",
"direct": false,
"version": "0.48.5",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_msvc",
"direct": false,
"version": "0.52.6",
"ecosystem": "crates"
},
{
"name": "windows_x86_64_msvc",
"direct": false,
"version": "0.53.1",
"ecosystem": "crates"
},
{
"name": "winnow",
"direct": false,
"version": "0.6.26",
"ecosystem": "crates"
},
{
"name": "winnow",
"direct": false,
"version": "0.7.15",
"ecosystem": "crates"
},
{
"name": "winnow",
"direct": false,
"version": "1.0.0",
"ecosystem": "crates"
},
{
"name": "winreg",
"direct": false,
"version": "0.50.0",
"ecosystem": "crates"
},
{
"name": "wit-bindgen",
"direct": false,
"version": "0.51.0",
"ecosystem": "crates"
},
{
"name": "wit-bindgen-core",
"direct": false,
"version": "0.51.0",
"ecosystem": "crates"
},
{
"name": "wit-bindgen-rust",
"direct": false,
"version": "0.51.0",
"ecosystem": "crates"
},
{
"name": "wit-bindgen-rust-macro",
"direct": false,
"version": "0.51.0",
"ecosystem": "crates"
},
{
"name": "wit-component",
"direct": false,
"version": "0.244.0",
"ecosystem": "crates"
},
{
"name": "wit-parser",
"direct": false,
"version": "0.244.0",
"ecosystem": "crates"
},
{
"name": "writeable",
"direct": false,
"version": "0.6.2",
"ecosystem": "crates"
},
{
"name": "wyz",
"direct": false,
"version": "0.5.1",
"ecosystem": "crates"
},
{
"name": "yoke",
"direct": false,
"version": "0.8.1",
"ecosystem": "crates"
},
{
"name": "yoke-derive",
"direct": false,
"version": "0.8.1",
"ecosystem": "crates"
},
{
"name": "zerocopy",
"direct": false,
"version": "0.8.42",
"ecosystem": "crates"
},
{
"name": "zerocopy-derive",
"direct": false,
"version": "0.8.42",
"ecosystem": "crates"
},
{
"name": "zerofrom",
"direct": false,
"version": "0.1.6",
"ecosystem": "crates"
},
{
"name": "zerofrom-derive",
"direct": false,
"version": "0.1.6",
"ecosystem": "crates"
},
{
"name": "zeroize",
"direct": false,
"version": null,
"ecosystem": "crates"
},
{
"name": "zeroize",
"direct": false,
"version": "1.8.2",
"ecosystem": "crates"
},
{
"name": "zeroize_derive",
"direct": false,
"version": "1.4.3",
"ecosystem": "crates"
},
{
"name": "zerokms-protocol",
"direct": false,
"version": "0.12.26",
"ecosystem": "crates"
},
{
"name": "zerotrie",
"direct": false,
"version": "0.2.3",
"ecosystem": "crates"
},
{
"name": "zerovec",
"direct": false,
"version": "0.11.5",
"ecosystem": "crates"
},
{
"name": "zerovec-derive",
"direct": false,
"version": "0.11.2",
"ecosystem": "crates"
},
{
"name": "zmij",
"direct": false,
"version": "1.0.21",
"ecosystem": "crates"
},
{
"name": "@ampproject/remapping",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "@babel/helper-string-parser",
"direct": false,
"version": "7.27.1",
"ecosystem": "npm"
},
{
"name": "@babel/helper-validator-identifier",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/parser",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@babel/types",
"direct": false,
"version": "7.28.5",
"ecosystem": "npm"
},
{
"name": "@bcoe/v8-coverage",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "@biomejs/biome",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-arm64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-darwin-x64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-arm64-musl",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-linux-x64-musl",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-arm64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@biomejs/cli-win32-x64",
"direct": false,
"version": "1.9.4",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/android-arm-eabi",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/darwin-arm64",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/darwin-x64",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/linux-arm-gnueabihf",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/linux-arm64-gnu",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/linux-arm64-musl",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/linux-x64-gnu",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/linux-x64-musl",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/win32-arm64-msvc",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cargo-messages/win32-x64-msvc",
"direct": false,
"version": "0.1.81",
"ecosystem": "npm"
},
{
"name": "@cipherstash/eql",
"direct": false,
"version": "3.0.2",
"ecosystem": "npm"
},
{
"name": "@emnapi/core",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "@emnapi/runtime",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "@emnapi/wasi-threads",
"direct": false,
"version": "1.2.2",
"ecosystem": "npm"
},
{
"name": "@esbuild/aix-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/android-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/darwin-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/freebsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-loong64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-mips64el",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-ppc64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-riscv64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-s390x",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/linux-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/netbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openbsd-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/openharmony-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/sunos-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-arm64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-ia32",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@esbuild/win32-x64",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "@isaacs/cliui",
"direct": false,
"version": "8.0.2",
"ecosystem": "npm"
},
{
"name": "@istanbuljs/schema",
"direct": false,
"version": "0.1.3",
"ecosystem": "npm"
},
{
"name": "@jridgewell/gen-mapping",
"direct": false,
"version": "0.3.13",
"ecosystem": "npm"
},
{
"name": "@jridgewell/resolve-uri",
"direct": false,
"version": "3.1.2",
"ecosystem": "npm"
},
{
"name": "@jridgewell/sourcemap-codec",
"direct": false,
"version": "1.5.5",
"ecosystem": "npm"
},
{
"name": "@jridgewell/trace-mapping",
"direct": false,
"version": "0.3.31",
"ecosystem": "npm"
},
{
"name": "@napi-rs/wasm-runtime",
"direct": false,
"version": "1.1.6",
"ecosystem": "npm"
},
{
"name": "@neon-rs/cli",
"direct": false,
"version": "0.1.82",
"ecosystem": "npm"
},
{
"name": "@oxc-project/types",
"direct": false,
"version": "0.139.0",
"ecosystem": "npm"
},
{
"name": "@pkgjs/parseargs",
"direct": false,
"version": "0.11.0",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-android-arm64",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-arm64",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-darwin-x64",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-freebsd-x64",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm-gnueabihf",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-gnu",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-arm64-musl",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-ppc64-gnu",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-s390x-gnu",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-gnu",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-linux-x64-musl",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-openharmony-arm64",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-wasm32-wasi",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-arm64-msvc",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/binding-win32-x64-msvc",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "@rolldown/pluginutils",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm-eabi",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-android-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-darwin-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-freebsd-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-gnueabihf",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm-musleabihf",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-arm64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-loong64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-ppc64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-riscv64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-s390x-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-linux-x64-musl",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openbsd-x64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-openharmony-arm64",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-arm64-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-ia32-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-gnu",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@rollup/rollup-win32-x64-msvc",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "@standard-schema/spec",
"direct": false,
"version": "1.1.0",
"ecosystem": "npm"
},
{
"name": "@tsconfig/node20",
"direct": false,
"version": "20.1.4",
"ecosystem": "npm"
},
{
"name": "@tybys/wasm-util",
"direct": false,
"version": "0.10.3",
"ecosystem": "npm"
},
{
"name": "@types/chai",
"direct": false,
"version": "5.2.3",
"ecosystem": "npm"
},
{
"name": "@types/deep-eql",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.8",
"ecosystem": "npm"
},
{
"name": "@types/estree",
"direct": false,
"version": "1.0.9",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "20.17.10",
"ecosystem": "npm"
},
{
"name": "@types/node",
"direct": false,
"version": "22.13.10",
"ecosystem": "npm"
},
{
"name": "@types/pg",
"direct": false,
"version": "8.11.11",
"ecosystem": "npm"
},
{
"name": "@vitest/coverage-v8",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/expect",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/mocker",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/pretty-format",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/runner",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/snapshot",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/spy",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "@vitest/utils",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "5.0.1",
"ecosystem": "npm"
},
{
"name": "ansi-regex",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "4.3.0",
"ecosystem": "npm"
},
{
"name": "ansi-styles",
"direct": false,
"version": "6.2.3",
"ecosystem": "npm"
},
{
"name": "assertion-error",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "ast-v8-to-istanbul",
"direct": false,
"version": "0.3.10",
"ecosystem": "npm"
},
{
"name": "balanced-match",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "brace-expansion",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "cac",
"direct": false,
"version": "6.7.14",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "5.3.3",
"ecosystem": "npm"
},
{
"name": "chai",
"direct": false,
"version": "6.2.2",
"ecosystem": "npm"
},
{
"name": "check-error",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "color-convert",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "color-name",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "convert-source-map",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "cross-spawn",
"direct": false,
"version": "7.0.6",
"ecosystem": "npm"
},
{
"name": "debug",
"direct": false,
"version": "4.4.3",
"ecosystem": "npm"
},
{
"name": "deep-eql",
"direct": false,
"version": "5.0.2",
"ecosystem": "npm"
},
{
"name": "detect-libc",
"direct": false,
"version": "2.1.2",
"ecosystem": "npm"
},
{
"name": "dotenv",
"direct": false,
"version": "16.4.7",
"ecosystem": "npm"
},
{
"name": "eastasianwidth",
"direct": false,
"version": "0.2.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "8.0.0",
"ecosystem": "npm"
},
{
"name": "emoji-regex",
"direct": false,
"version": "9.2.2",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "1.7.0",
"ecosystem": "npm"
},
{
"name": "es-module-lexer",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "esbuild",
"direct": false,
"version": "0.28.1",
"ecosystem": "npm"
},
{
"name": "estree-walker",
"direct": false,
"version": "3.0.3",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "expect-type",
"direct": false,
"version": "1.3.0",
"ecosystem": "npm"
},
{
"name": "fdir",
"direct": false,
"version": "6.5.0",
"ecosystem": "npm"
},
{
"name": "foreground-child",
"direct": false,
"version": "3.3.1",
"ecosystem": "npm"
},
{
"name": "fsevents",
"direct": false,
"version": "2.3.3",
"ecosystem": "npm"
},
{
"name": "glob",
"direct": false,
"version": "10.5.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": "is-fullwidth-code-point",
"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.2",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-report",
"direct": false,
"version": "3.0.1",
"ecosystem": "npm"
},
{
"name": "istanbul-lib-source-maps",
"direct": false,
"version": "5.0.6",
"ecosystem": "npm"
},
{
"name": "istanbul-reports",
"direct": false,
"version": "3.2.0",
"ecosystem": "npm"
},
{
"name": "jackspeak",
"direct": false,
"version": "3.4.3",
"ecosystem": "npm"
},
{
"name": "js-tokens",
"direct": false,
"version": "9.0.1",
"ecosystem": "npm"
},
{
"name": "lightningcss",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-android-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-arm64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-darwin-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-freebsd-x64",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm-gnueabihf",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-arm64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-gnu",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-linux-x64-musl",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-arm64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "lightningcss-win32-x64-msvc",
"direct": false,
"version": "1.32.0",
"ecosystem": "npm"
},
{
"name": "loupe",
"direct": false,
"version": "3.2.1",
"ecosystem": "npm"
},
{
"name": "lru-cache",
"direct": false,
"version": "10.4.3",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.19",
"ecosystem": "npm"
},
{
"name": "magic-string",
"direct": false,
"version": "0.30.21",
"ecosystem": "npm"
},
{
"name": "magicast",
"direct": false,
"version": "0.3.5",
"ecosystem": "npm"
},
{
"name": "make-dir",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "minimatch",
"direct": false,
"version": "9.0.9",
"ecosystem": "npm"
},
{
"name": "minipass",
"direct": false,
"version": "7.1.2",
"ecosystem": "npm"
},
{
"name": "ms",
"direct": false,
"version": "2.1.3",
"ecosystem": "npm"
},
{
"name": "nanoid",
"direct": false,
"version": "3.3.16",
"ecosystem": "npm"
},
{
"name": "obuf",
"direct": false,
"version": "1.1.2",
"ecosystem": "npm"
},
{
"name": "obug",
"direct": false,
"version": "2.1.1",
"ecosystem": "npm"
},
{
"name": "package-json-from-dist",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "path-key",
"direct": false,
"version": "3.1.1",
"ecosystem": "npm"
},
{
"name": "path-scurry",
"direct": false,
"version": "1.11.1",
"ecosystem": "npm"
},
{
"name": "pathe",
"direct": false,
"version": "2.0.3",
"ecosystem": "npm"
},
{
"name": "pathval",
"direct": false,
"version": "2.0.1",
"ecosystem": "npm"
},
{
"name": "pg-cloudflare",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "pg-connection-string",
"direct": false,
"version": "2.7.0",
"ecosystem": "npm"
},
{
"name": "pg-int8",
"direct": false,
"version": "1.0.1",
"ecosystem": "npm"
},
{
"name": "pg-numeric",
"direct": false,
"version": "1.0.2",
"ecosystem": "npm"
},
{
"name": "pg-pool",
"direct": false,
"version": "3.7.1",
"ecosystem": "npm"
},
{
"name": "pg-protocol",
"direct": false,
"version": "1.7.1",
"ecosystem": "npm"
},
{
"name": "pg-types",
"direct": false,
"version": "2.2.0",
"ecosystem": "npm"
},
{
"name": "pg-types",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
},
{
"name": "pgpass",
"direct": false,
"version": "1.0.5",
"ecosystem": "npm"
},
{
"name": "picocolors",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "picomatch",
"direct": false,
"version": "4.0.5",
"ecosystem": "npm"
},
{
"name": "postcss",
"direct": false,
"version": "8.5.19",
"ecosystem": "npm"
},
{
"name": "postgres-array",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "postgres-array",
"direct": false,
"version": "3.0.4",
"ecosystem": "npm"
},
{
"name": "postgres-bytea",
"direct": false,
"version": "1.0.0",
"ecosystem": "npm"
},
{
"name": "postgres-bytea",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "postgres-date",
"direct": false,
"version": "1.0.7",
"ecosystem": "npm"
},
{
"name": "postgres-date",
"direct": false,
"version": "2.1.0",
"ecosystem": "npm"
},
{
"name": "postgres-interval",
"direct": false,
"version": "1.2.0",
"ecosystem": "npm"
},
{
"name": "postgres-interval",
"direct": false,
"version": "3.0.0",
"ecosystem": "npm"
},
{
"name": "postgres-range",
"direct": false,
"version": "1.1.4",
"ecosystem": "npm"
},
{
"name": "rolldown",
"direct": false,
"version": "1.1.5",
"ecosystem": "npm"
},
{
"name": "rollup",
"direct": false,
"version": "4.59.0",
"ecosystem": "npm"
},
{
"name": "semver",
"direct": false,
"version": "7.7.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": "siginfo",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "signal-exit",
"direct": false,
"version": "4.1.0",
"ecosystem": "npm"
},
{
"name": "source-map-js",
"direct": false,
"version": "1.2.1",
"ecosystem": "npm"
},
{
"name": "split2",
"direct": false,
"version": "4.2.0",
"ecosystem": "npm"
},
{
"name": "stackback",
"direct": false,
"version": "0.0.2",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "3.9.0",
"ecosystem": "npm"
},
{
"name": "std-env",
"direct": false,
"version": "4.0.0",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "4.2.3",
"ecosystem": "npm"
},
{
"name": "string-width",
"direct": false,
"version": "5.1.2",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "6.0.1",
"ecosystem": "npm"
},
{
"name": "strip-ansi",
"direct": false,
"version": "7.1.2",
"ecosystem": "npm"
},
{
"name": "strip-literal",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "supports-color",
"direct": false,
"version": "7.2.0",
"ecosystem": "npm"
},
{
"name": "test-exclude",
"direct": false,
"version": "7.0.1",
"ecosystem": "npm"
},
{
"name": "tinybench",
"direct": false,
"version": "2.9.0",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "0.3.2",
"ecosystem": "npm"
},
{
"name": "tinyexec",
"direct": false,
"version": "1.0.4",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.15",
"ecosystem": "npm"
},
{
"name": "tinyglobby",
"direct": false,
"version": "0.2.17",
"ecosystem": "npm"
},
{
"name": "tinypool",
"direct": false,
"version": "1.1.1",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "2.0.0",
"ecosystem": "npm"
},
{
"name": "tinyrainbow",
"direct": false,
"version": "3.1.0",
"ecosystem": "npm"
},
{
"name": "tinyspy",
"direct": false,
"version": "4.0.4",
"ecosystem": "npm"
},
{
"name": "tslib",
"direct": false,
"version": "2.8.1",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.7.2",
"ecosystem": "npm"
},
{
"name": "typescript",
"direct": false,
"version": "5.8.2",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.19.8",
"ecosystem": "npm"
},
{
"name": "undici-types",
"direct": false,
"version": "6.20.0",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "7.3.6",
"ecosystem": "npm"
},
{
"name": "vite",
"direct": false,
"version": "8.1.5",
"ecosystem": "npm"
},
{
"name": "vite-node",
"direct": false,
"version": "3.2.4",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "3.2.7",
"ecosystem": "npm"
},
{
"name": "vitest",
"direct": false,
"version": "4.1.10",
"ecosystem": "npm"
},
{
"name": "which",
"direct": false,
"version": "2.0.2",
"ecosystem": "npm"
},
{
"name": "why-is-node-running",
"direct": false,
"version": "2.3.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "7.0.0",
"ecosystem": "npm"
},
{
"name": "wrap-ansi",
"direct": false,
"version": "8.1.0",
"ecosystem": "npm"
},
{
"name": "xtend",
"direct": false,
"version": "4.0.2",
"ecosystem": "npm"
}
],
"collected": true,
"truncated": false,
"total_count": 785,
"direct_count": 4,
"indirect_count": 781
}
},
"maintainership": {
"issues": {
"open_prs": 4,
"merged_prs": 93,
"open_issues": 6,
"closed_ratio": 0.333,
"closed_issues": 3,
"closed_unmerged_prs": 41
},
"bus_factor": 2,
"bot_contributors": 2,
"top_contributors": [
{
"type": "User",
"login": "coderdan",
"commits": 153,
"avatar_url": "https://avatars.githubusercontent.com/u/522225?v=4"
},
{
"type": "User",
"login": "CDThomas",
"commits": 101,
"avatar_url": "https://avatars.githubusercontent.com/u/7672425?v=4"
},
{
"type": "User",
"login": "freshtonic",
"commits": 94,
"avatar_url": "https://avatars.githubusercontent.com/u/2769?v=4"
},
{
"type": "User",
"login": "tobyhede",
"commits": 73,
"avatar_url": "https://avatars.githubusercontent.com/u/28390?v=4"
},
{
"type": "User",
"login": "calvinbrewer",
"commits": 71,
"avatar_url": "https://avatars.githubusercontent.com/u/10352306?v=4"
},
{
"type": "User",
"login": "auxesis",
"commits": 7,
"avatar_url": "https://avatars.githubusercontent.com/u/12306?v=4"
},
{
"type": "User",
"login": "yujiyokoo",
"commits": 4,
"avatar_url": "https://avatars.githubusercontent.com/u/583965?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 8,
"top_contributor_share": 0.303
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"build.yml",
"release.yml",
"test.yml"
],
"has_docs_dir": true,
"linter_configs": [
"biome.json"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Cargo.lock",
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 5,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
"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": 6,
"reason": "Found 6/10 approved changesets -- score normalized to 6",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 10,
"reason": "project has 7 contributing companies or organizations",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 10,
"reason": "update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 7,
"reason": "dependency not pinned by hash detected -- score normalized to 7",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"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": 1,
"reason": "9 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "361f026b8e68debcb1488c1aacbcfd32c282a557",
"ran_at": "2026-07-26T12:18:10Z",
"aggregate_score": 5.2,
"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-20T09:21:50Z",
"oldest_open_prs": [
{
"number": 133,
"created_at": "2026-07-09T17:12:56Z",
"last_comment_at": "2026-07-17T06:59:16Z",
"last_comment_author": "coderdan"
},
{
"number": 135,
"created_at": "2026-07-13T00:25:47Z",
"last_comment_at": "2026-07-21T23:56:21Z",
"last_comment_author": "freshtonic"
},
{
"number": 143,
"created_at": "2026-07-26T05:45:41Z",
"last_comment_at": "2026-07-26T05:46:00Z",
"last_comment_author": "coderabbitai"
},
{
"number": 147,
"created_at": "2026-07-26T11:12:24Z",
"last_comment_at": "2026-07-26T11:12:31Z",
"last_comment_author": "coderabbitai"
}
],
"last_merged_pr_at": "2026-07-20T08:57:10Z",
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": [
{
"number": 134,
"created_at": "2026-07-12T13:28:35Z",
"last_comment_at": "2026-07-13T00:29:43Z",
"last_comment_author": "freshtonic"
},
{
"number": 138,
"created_at": "2026-07-15T17:27:57Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 142,
"created_at": "2026-07-26T05:25:06Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 144,
"created_at": "2026-07-26T09:02:09Z",
"last_comment_at": null,
"last_comment_author": null
},
{
"number": 145,
"created_at": "2026-07-26T09:31:25Z",
"last_comment_at": "2026-07-26T12:05:03Z",
"last_comment_author": "coderdan"
},
{
"number": 146,
"created_at": "2026-07-26T10:26:25Z",
"last_comment_at": null,
"last_comment_author": null
}
]
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/cipherstash/protectjs-ffi",
"host": "github.com",
"name": "protectjs-ffi",
"owner": "cipherstash"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 69,
"inputs": {
"security": 62,
"vitality": 88,
"community": 40,
"governance": 68,
"engineering": 82
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "excellent",
"name": "Vitality",
"value": 88,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "excellent",
"name": "Development activity",
"note": null,
"notes": [],
"value": 86,
"inputs": {
"commits_last_year": 406,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 31
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "31/52 weeks with commits",
"points": 21.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 31
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "406 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 406
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 90,
"inputs": {
"releases_count": 83,
"latest_release_tag": "v0.30.0",
"releases_from_tags": false,
"days_since_latest_release": 6,
"mean_days_between_releases": 6.6
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "83 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 83
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~6.6 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 6.6
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "abandonment",
"band": "excellent",
"name": "Abandonment",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"cap": null,
"state": "maintained",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": null,
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": 6,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 6 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 6
}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "at_risk",
"name": "Community & Adoption",
"value": 40,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 2,
"inputs": {
"forks": 0,
"stars": 2,
"watchers": 3,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"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": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 65,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": true,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 13.5,
"status": "met",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"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": 67,
"inputs": {
"packages": [
"@cipherstash/protect-ffi"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 10036
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "10,036 downloads/month across npm",
"points": 53.4,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 10036,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 68,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "moderate",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 62,
"inputs": {
"bus_factor": 2,
"contributors_sampled": 8,
"top_contributor_share": 0.303
},
"components": [
{
"key": "bus_factor",
"name": "Bus factor",
"detail": "2 contributor(s) cover half of all commits",
"points": 25.2,
"status": "partial",
"details": [
{
"code": "bus_factor",
"params": {
"count": 2
}
}
],
"max_points": 54
},
{
"key": "commit_distribution",
"name": "Commit distribution",
"detail": "top contributor authored 30% of commits",
"points": 15.7,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 30
}
}
],
"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 7 contributing companies or organizations",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 51,
"inputs": {
"merged_prs": 93,
"open_issues": 6,
"closed_issues": 3,
"issue_closed_ratio": 0.333,
"closed_unmerged_prs": 41
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "33% of issues closed",
"points": 15.6,
"status": "partial",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 33
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "93/134 decided PRs merged",
"points": 26.5,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 93,
"decided": 134
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 6/10 approved changesets -- score normalized to 6",
"points": 9,
"status": "partial",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "moderate",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"followers": 72,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "cipherstash",
"public_repos": 53,
"account_age_days": 2233
},
"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": "72 followers of cipherstash",
"points": 13.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 72,
"login": "cipherstash"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "53 public repos, account ~6 yr old",
"points": 24.6,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 53
}
},
{
"code": "account_age_years",
"params": {
"years": 6
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"@cipherstash/protect-ffi"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 6
},
"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 6 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 6
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "46 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 46
}
}
],
"max_points": 20
},
{
"key": "not_deprecated",
"name": "Not deprecated",
"detail": "active, not deprecated or yanked",
"points": 20,
"status": "met",
"details": [
{
"code": "package_not_deprecated",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
},
{
"key": "engineering",
"band": "good",
"name": "Engineering Quality",
"value": 82,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 84,
"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": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"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": "biome.json",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"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 8 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 80,
"inputs": {
"topics": [],
"has_wiki": false,
"homepage": "https://github.com/cipherstash/stack",
"has_readme": true,
"has_docs_dir": true,
"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": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": "https://github.com/cipherstash/stack",
"points": 15,
"status": "met",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 62,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "moderate",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 53,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 5.2
},
"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 is not maximal on development and all release branches",
"points": 3.8,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "8 out of 8 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"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 6/10 approved changesets -- score normalized to 6",
"points": 4.5,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 7 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": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 3.5,
"status": "partial",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": "9 existing vulnerabilities detected",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "dependency_advisories",
"band": "excellent",
"name": "Dependency advisories",
"note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:@cipherstash/protect-ffi@0.30.0 runtime dependency closure — what installing the published package pulls in — 7 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:@cipherstash/protect-ffi@0.30.0",
"assessed": 7
}
},
{
"code": "advisories_reachability",
"params": {}
}
],
"value": 100,
"inputs": {
"source": "osv",
"advisories": 0,
"affected_packages": 0,
"assessed_packages": 7,
"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": "excellent",
"name": "Malicious dependencies",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"source": "osv",
"meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
"packages": [],
"red_flag": false,
"assessed_packages": 7,
"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": "excellent",
"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"
],
"review_only_matches": 0,
"assessed_self_published_locations": 10
},
"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": "good",
"name": "AI Readiness",
"value": 71,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.94,
"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": "94 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 94,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "good",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 83,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Cargo.lock",
"package-lock.json"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [
"mise.toml"
],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [
"integration-tests/tsconfig.json",
"tsconfig.json"
],
"agent_commit_share": 0.02,
"toolchain_manifests": [
"Cargo.toml",
"crates/protect-ffi/Cargo.toml"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "mise.toml",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "mise.toml"
}
}
],
"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": "biome.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "biome.json"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "integration-tests/tsconfig.json, tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "integration-tests/tsconfig.json, tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "2 of the last 100 commits agent-authored or agent-credited",
"points": 4,
"status": "partial",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 2,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 7",
"points": 7,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 99,
"inputs": {
"primary_language": "Rust",
"largest_source_bytes": 121065,
"source_files_sampled": 143,
"oversized_source_files": 2
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Rust (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Rust"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "2/143 source files over 60KB",
"points": 54.2,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 143,
"oversized": 2
}
}
],
"max_points": 55
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"npm package 'integration-tests' points at a different repository (https://github.com/doug-wade/iso-fs); excluded from ecosystem scoring"
],
"report_type": "repository",
"generated_at": "2026-07-26T12:18:28.061179Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cipherstash/protectjs-ffi.svg",
"full_name": "cipherstash/protectjs-ffi",
"license_state": "standard",
"license_spdx": "MIT"
}