3684 Commits
Author SHA1 Message Date
Adrien Beraud b714714128 build: bump version to 4.4.99 v4.4.99 2026-10-27 10:21:04 -04:00
Adrien Beraud 2e8b36477d ci: publish Noble OpenDHT release image 2026-10-27 09:59:17 -04:00
Adrien Beraud 14543ae477 docker: switch to ninja and add Noble Dockerfile
Use Ninja instead of Make in the main Dockerfile for faster builds
and install ninja-build in DockerfileDeps. Also, add a new
Dockerfile for Ubuntu Noble.
2026-10-27 09:57:33 -04:00
Adrien Beraud 044135732f docker: add simdutf to remaining dependency images 2026-10-27 00:31:34 -04:00
Adrien Beraud 21b7f0d757 docker: restore Noble dependency image for Node builds 2026-10-27 00:31:34 -04:00
Adrien Beraud a5bfd3d933 ci: test Node packages on Ubuntu 24.04 and 26.04 2026-10-27 00:26:08 -04:00
Adrien Beraud af38323728 nodejs: release dispatcher before environment teardown 2026-10-27 00:14:56 -04:00
Adrien Beraud 62e0ded803 ci: use Ubuntu 26.04 for Node.js packages 2026-10-27 00:14:56 -04:00
Adrien Beraud a09cfefe5e tests: require native alignment for C hashes 2026-10-27 00:03:07 -04:00
Adrien Beraud 13f340694e tools: rebuild proxy web client with concurrent live sessions 2026-10-27 00:03:07 -04:00
Adrien Beraud 3723c4acf1 nodejs: migrate runtime tooling and examples to ESM 2026-10-27 00:02:09 -04:00
Adrien Beraud f19bca0df1 tests: enforce ESM imports for Node bindings 2026-10-27 00:02:09 -04:00
Adrien Beraud fbc7f90897 tests: cover Node connectivity and concurrent CLI operations 2026-10-27 00:02:09 -04:00
Adrien Beraud 3a3c421ef9 nodejs: add an interactive dhtnode example 2026-10-27 00:02:09 -04:00
Adrien Beraud 9ec7a58ee3 tests: cover the Node dhtnode example CLI 2026-10-27 00:02:00 -04:00
Adrien Beraud ce73eb052e ci: build and verify Node-API npm packages 2026-10-27 00:02:00 -04:00
Adrien Beraud d716fae4bc nodejs: expose per-family connectivity status and events 2026-10-27 00:02:00 -04:00
Adrien Beraud a040bfeebb nodejs: add crypto APIs and relocatable npm prebuilds 2026-10-26 23:57:50 -04:00
Adrien Beraud 3223742d70 tests: cover Node crypto types and npm archive contents 2026-10-26 23:57:50 -04:00
Adrien Beraud d2d56fcc20 tests: cover Node crypto persistence and authenticated values 2026-10-26 23:57:50 -04:00
Adrien Beraud af814f027f nodejs: add Node-API runner bindings over the C++ library 2026-10-26 23:57:50 -04:00
Adrien Beraud 2016a9e2fa tests: verify Node TypeScript API and deferred garbage collection 2026-10-26 23:57:50 -04:00
Adrien Beraud 1db8abb7fc c: align hash structs with native types 2026-10-26 23:57:50 -04:00
Adrien Beraud 3f7b1bc3f5 tests: cover unaligned C hash storage 2026-10-26 23:56:59 -04:00
Adrien Beraud 019c25633e tests: initialize GnuTLS for MSVC C bindings 2026-10-26 23:56:43 -04:00
Adrien Beraud 8193f43593 tests: cover Node runner collection cancellation and queue overflow 2026-10-26 23:54:00 -04:00
Adrien Beraud 39564f14c1 tests: define Node-API binding lifecycle and loopback contracts 2026-10-26 23:54:00 -04:00
Adrien Beraud 83778d84fe rust: update edition to 2024
Update the Rust edition to 2024 and mark the FFI extern block as unsafe.
2026-10-26 09:57:02 -04:00
Adrien Beraud b61ee620e4 dht: schedule projected gets with matching reuse rules 2026-10-26 09:21:10 -04:00
Adrien Beraud 0d120eb5d4 tests: cover projected query request scheduling 2026-10-26 09:21:10 -04:00
Cyrille BéraudandCopilot 9b9056c0c8 dht: do not report unfiltered answers to filtered queries
Query::isSatisfiedBy() considers an unfiltered answer sufficient for a
filtered query, which is true for a vanilla get: onGetValuesDone() applies
the operation filter to the values before calling back.

A projected query is different. It receives the fields another query selected
and can no longer evaluate its own filters on them, all the more so as those
filters may target fields that were not selected at all. Two concurrent
queries such as "SELECT id" and "SELECT id WHERE value_type=1" therefore made
the filtered callback report identifiers whose type does not match, and
searchNodeGetDone() additionally cancelled its own request so it never got a
correctly filtered answer.

Add Query::isProjectionSatisfiedBy(), which additionally requires both queries
to apply the same filters, and use it for operations with a query callback.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-26 09:21:10 -04:00
Cyrille BéraudandCopilot bf8e3ea251 value: compare field values in FieldValueIndex::containedIn
containedIn() only checked that the other index declared the same field
keys, never that they held the same values, contradicting its documented
contract of containment "with the same value".

Dht::query() uses containedIn() to deduplicate projected results. Because
every result of a given query shares the same projection schema, any two
results compared equal: the first one suppressed all the later ones, and the
"lesser" branch even erased the already reported result. A query selecting a
field therefore reported a single value regardless of how many matched.

Compare the FieldValue as well, and add a regression covering distinct
values, equal indexes and a narrower projection contained in a wider one.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
2026-10-26 09:21:10 -04:00
Adrien Beraud 34eb86a119 value: support sequence numbers in wire filters 2026-10-26 09:19:57 -04:00
Adrien Beraud 75c789ceb2 rust: cover sequence filters across loopback nodes 2026-10-26 09:15:36 -04:00
Adrien Beraud da438d1bd2 value: reproduce sequence filter serialization failure 2026-10-26 09:12:12 -04:00
Adrien Beraud 44e67e1389 rust: parse hexadecimal hashes with string length checks 2026-10-26 09:11:42 -04:00
Adrien Beraud 7f9126b3b0 rust: cover empty and short hexadecimal hashes 2026-10-26 09:10:39 -04:00
Adrien Beraud 574674d3a2 rust: own native pointers in movable handle wrappers 2026-10-26 09:10:16 -04:00
Adrien Beraud c60703bfc3 rust: cover moves across native handle types 2026-10-26 09:10:16 -04:00
Adrien Beraud a0220827cd rust: reproduce moving native values out of boxes 2026-10-26 09:08:03 -04:00
Adrien Beraud fb90211157 python: expose value state and harden runner operations 2026-10-26 01:10:34 -04:00
Adrien Beraud 9501465293 python: cover value state and binding safety regressions 2026-10-26 01:06:48 -04:00
Adrien Beraud 95bd26c3be rust: bump version to 0.2.0 and add author 2026-10-26 00:51:27 -04:00
Adrien Beraud 87463c2d6c rust: own callbacks and expose safe native binding APIs 2026-10-26 00:51:27 -04:00
Adrien Beraud baf413dd0d c: expose lifecycle queries crypto and callback ownership 2026-10-26 00:51:27 -04:00
Adrien Beraud 6bf01f3b6d runner: release status callback captures on join 2026-10-26 00:51:27 -04:00
Adrien Beraud 852403fbeb crypto: verify signatures using the public key algorithm 2026-10-26 00:51:27 -04:00
Adrien Beraud 5f6d5c769e rust: reject certificate registration on stopped runners 2026-10-26 00:51:27 -04:00
Adrien Beraud 42e4419b75 bindings: verify retained values and queued push delivery 2026-10-26 00:51:27 -04:00
Adrien Beraud 4e94d123b2 rust: cover threaded crypto and native callback teardown 2026-10-26 00:51:27 -04:00