@push.rocks/smartdns 8.2.1 → 8.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/.smartconfig.json +10 -4
  2. package/dist_rust/rustdns-client_linux_amd64_musl +0 -0
  3. package/dist_rust/rustdns-client_linux_amd64_musl.tsrust-build.json +14 -0
  4. package/dist_rust/{rustdns-client_linux_arm64 → rustdns-client_linux_arm64_musl} +0 -0
  5. package/dist_rust/rustdns-client_linux_arm64_musl.tsrust-build.json +14 -0
  6. package/dist_rust/rustdns_linux_amd64_musl +0 -0
  7. package/dist_rust/rustdns_linux_amd64_musl.tsrust-build.json +14 -0
  8. package/dist_rust/rustdns_linux_arm64_musl +0 -0
  9. package/dist_rust/rustdns_linux_arm64_musl.tsrust-build.json +14 -0
  10. package/dist_ts/00_commitinfo_data.js +1 -1
  11. package/dist_ts_client/classes.rustdnsclientbridge.js +4 -1
  12. package/dist_ts_server/classes.dnsserver.d.ts +1 -1
  13. package/dist_ts_server/classes.dnsserver.js +2 -2
  14. package/dist_ts_server/classes.manageddnsserver.d.ts +34 -0
  15. package/dist_ts_server/classes.manageddnsserver.js +141 -0
  16. package/dist_ts_server/classes.rustdnsbridge.d.ts +37 -1
  17. package/dist_ts_server/classes.rustdnsbridge.js +47 -14
  18. package/dist_ts_server/index.d.ts +2 -0
  19. package/dist_ts_server/index.js +3 -1
  20. package/dist_ts_server/interfaces.managed.d.ts +79 -0
  21. package/dist_ts_server/interfaces.managed.js +2 -0
  22. package/notices/cargo-dependencies.html +3412 -0
  23. package/notices/cfg_aliases-0.2.1-license.txt +9 -0
  24. package/notices/cfg_aliases-0.2.1-notices.txt +26 -0
  25. package/notices/compiler-builtins-license.txt +275 -0
  26. package/notices/fiat-crypto-0.2.9-copyright.txt +7 -0
  27. package/notices/group-0.13.0-copyright.txt +14 -0
  28. package/notices/inventory.json +1290 -0
  29. package/notices/llvm-libunwind-license.txt +311 -0
  30. package/notices/lru-slab-0.1.2-license.txt +7 -0
  31. package/notices/musl-copyright.txt +193 -0
  32. package/notices/quinn-0.11.9-license.txt +7 -0
  33. package/notices/quinn-proto-0.11.13-license.txt +7 -0
  34. package/notices/quinn-udp-0.5.14-license.txt +7 -0
  35. package/notices/rand-0.8.5-copyright.txt +12 -0
  36. package/notices/rand-0.9.2-copyright.txt +12 -0
  37. package/notices/rand_chacha-0.3.1-copyright.txt +12 -0
  38. package/notices/rand_chacha-0.9.0-copyright.txt +12 -0
  39. package/notices/rand_core-0.6.4-copyright.txt +12 -0
  40. package/notices/rand_core-0.9.5-copyright.txt +12 -0
  41. package/notices/ring-0.17.14-fiat-license.txt +15 -0
  42. package/notices/ring-0.17.14-license-boringssl.txt +272 -0
  43. package/notices/ring-0.17.14-license-other-bits.txt +13 -0
  44. package/notices/ring-0.17.14-license.txt +9 -0
  45. package/notices/ring-0.17.14-once-cell-license-apache.txt +201 -0
  46. package/notices/ring-0.17.14-once-cell-license-mit.txt +23 -0
  47. package/notices/ring-0.17.14-source-attributions.txt +1544 -0
  48. package/notices/rust-standard-library.html +8266 -0
  49. package/notices/rustc-hash-2.1.1-license.txt +23 -0
  50. package/notices/thiserror-2.0.18-license.txt +23 -0
  51. package/notices/thiserror-impl-2.0.18-license.txt +23 -0
  52. package/notices/tinyvec-1.10.0-license.txt +5 -0
  53. package/notices/tinyvec_macros-0.1.1-license.txt +21 -0
  54. package/notices/utf8_iter-1.0.4-copyright.txt +42 -0
  55. package/notices/valuable-0.1.1-license.txt +25 -0
  56. package/notices/web-time-1.1.0-license.txt +21 -0
  57. package/notices/zerocopy-derive-0.8.39-license.txt +26 -0
  58. package/package.json +18 -8
  59. package/readme.md +186 -1
  60. package/third-party-notices.md +96 -0
  61. package/ts/00_commitinfo_data.ts +1 -1
  62. package/dist_rust/rustdns-client_linux_amd64 +0 -0
  63. package/dist_rust/rustdns-client_linux_amd64.tsrust-build.json +0 -14
  64. package/dist_rust/rustdns-client_linux_arm64.tsrust-build.json +0 -14
  65. package/dist_rust/rustdns_linux_amd64 +0 -0
  66. package/dist_rust/rustdns_linux_amd64.tsrust-build.json +0 -14
  67. package/dist_rust/rustdns_linux_arm64 +0 -0
  68. package/dist_rust/rustdns_linux_arm64.tsrust-build.json +0 -14
  69. package/readme.hints.md +0 -294
  70. /package/{license → license.md} +0 -0
@@ -0,0 +1,23 @@
1
+ Permission is hereby granted, free of charge, to any
2
+ person obtaining a copy of this software and associated
3
+ documentation files (the "Software"), to deal in the
4
+ Software without restriction, including without
5
+ limitation the rights to use, copy, modify, merge,
6
+ publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software
8
+ is furnished to do so, subject to the following
9
+ conditions:
10
+
11
+ The above copyright notice and this permission notice
12
+ shall be included in all copies or substantial portions
13
+ of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
18
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
22
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,23 @@
1
+ Permission is hereby granted, free of charge, to any
2
+ person obtaining a copy of this software and associated
3
+ documentation files (the "Software"), to deal in the
4
+ Software without restriction, including without
5
+ limitation the rights to use, copy, modify, merge,
6
+ publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software
8
+ is furnished to do so, subject to the following
9
+ conditions:
10
+
11
+ The above copyright notice and this permission notice
12
+ shall be included in all copies or substantial portions
13
+ of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
18
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
22
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,23 @@
1
+ Permission is hereby granted, free of charge, to any
2
+ person obtaining a copy of this software and associated
3
+ documentation files (the "Software"), to deal in the
4
+ Software without restriction, including without
5
+ limitation the rights to use, copy, modify, merge,
6
+ publish, distribute, sublicense, and/or sell copies of
7
+ the Software, and to permit persons to whom the Software
8
+ is furnished to do so, subject to the following
9
+ conditions:
10
+
11
+ The above copyright notice and this permission notice
12
+ shall be included in all copies or substantial portions
13
+ of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
16
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
17
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
18
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
19
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
20
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
22
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
23
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,5 @@
1
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
2
+
3
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
4
+
5
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2020 Soveu
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,42 @@
1
+ Copyright Mozilla Foundation
2
+
3
+ Licensed under the Apache License (Version 2.0), or the MIT license,
4
+ (the "Licenses") at your option. You may not use this file except in
5
+ compliance with one of the Licenses. You may obtain copies of the
6
+ Licenses at:
7
+
8
+ https://www.apache.org/licenses/LICENSE-2.0
9
+ https://opensource.org/licenses/MIT
10
+
11
+ Unless required by applicable law or agreed to in writing, software
12
+ distributed under the Licenses is distributed on an "AS IS" BASIS,
13
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ See the Licenses for the specific language governing permissions and
15
+ limitations under the Licenses.
16
+
17
+ --
18
+
19
+ Test code is dedicated to the Public Domain when so designated (see
20
+ the individual files for PD/CC0-dedicated sections).
21
+
22
+ --
23
+
24
+ The implementation for Utf8CharIndices was adapted from the
25
+ CharIndices implementation of the Rust standard library at revision
26
+ ab32548539ec38a939c1b58599249f3b54130026
27
+ (https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/library/core/src/str/iter.rs).
28
+
29
+ Excerpt from https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/COPYRIGHT ,
30
+ which refers to
31
+ https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/LICENSE-APACHE
32
+ and
33
+ https://github.com/rust-lang/rust/blob/ab32548539ec38a939c1b58599249f3b54130026/LICENSE-MIT
34
+ :
35
+
36
+ For full authorship information, see the version control history or
37
+ https://thanks.rust-lang.org
38
+
39
+ Except as otherwise noted (below and/or in individual files), Rust is
40
+ licensed under the Apache License, Version 2.0 <LICENSE-APACHE> or
41
+ <http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
42
+ <LICENSE-MIT> or <http://opensource.org/licenses/MIT>, at your option.
@@ -0,0 +1,25 @@
1
+ Copyright (c) 2021 Valuable Contributors
2
+
3
+ Permission is hereby granted, free of charge, to any
4
+ person obtaining a copy of this software and associated
5
+ documentation files (the "Software"), to deal in the
6
+ Software without restriction, including without
7
+ limitation the rights to use, copy, modify, merge,
8
+ publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software
10
+ is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice
14
+ shall be included in all copies or substantial portions
15
+ of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
18
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
20
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
21
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
24
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+ DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 dAxpeDDa
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -0,0 +1,26 @@
1
+ Copyright 2023 The Fuchsia Authors
2
+
3
+ Permission is hereby granted, free of charge, to any
4
+ person obtaining a copy of this software and associated
5
+ documentation files (the "Software"), to deal in the
6
+ Software without restriction, including without
7
+ limitation the rights to use, copy, modify, merge,
8
+ publish, distribute, sublicense, and/or sell copies of
9
+ the Software, and to permit persons to whom the Software
10
+ is furnished to do so, subject to the following
11
+ conditions:
12
+
13
+ The above copyright notice and this permission notice
14
+ shall be included in all copies or substantial portions
15
+ of the Software.
16
+
17
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF
18
+ ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
19
+ TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
20
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT
21
+ SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
22
+ CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR
24
+ IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
25
+ DEALINGS IN THE SOFTWARE.
26
+
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@push.rocks/smartdns",
3
- "version": "8.2.1",
3
+ "version": "8.4.0",
4
4
  "private": false,
5
5
  "description": "A robust TypeScript library providing advanced DNS management and resolution capabilities including support for DNSSEC, custom DNS servers, and integration with various DNS providers.",
6
6
  "exports": {
@@ -41,19 +41,19 @@
41
41
  "@push.rocks/smartdelay": "^3.0.1",
42
42
  "@push.rocks/smartenv": "^6.0.0",
43
43
  "@push.rocks/smartpromise": "^4.2.5",
44
- "@push.rocks/smartrust": "^1.8.0",
44
+ "@push.rocks/smartrust": "^1.9.1",
45
45
  "@tsclass/tsclass": "^9.5.1",
46
46
  "acme-client": "^5.4.0",
47
47
  "minimatch": "^10.2.6"
48
48
  },
49
49
  "devDependencies": {
50
- "@git.zone/tsbuild": "^4.4.2",
50
+ "@git.zone/tsbuild": "^4.4.3",
51
51
  "@git.zone/tsrun": "^2.0.6",
52
- "@git.zone/tsrust": "^1.10.0",
53
- "@git.zone/tstest": "^4.0.0",
52
+ "@git.zone/tsrust": "^1.13.0",
53
+ "@git.zone/tstest": "^6.0.0",
54
54
  "@types/dns-packet": "^5.6.5",
55
55
  "@types/lodash.clonedeep": "^4.5.9",
56
- "@types/node": "^26.2.0",
56
+ "@types/node": "^26.4.1",
57
57
  "dns-packet": "^5.6.1"
58
58
  },
59
59
  "files": [
@@ -66,13 +66,23 @@
66
66
  "assets/**/*",
67
67
  "cli.js",
68
68
  ".smartconfig.json",
69
- "license",
70
- "readme.md"
69
+ "license.md",
70
+ "readme.md",
71
+ "third-party-notices.md",
72
+ "notices/**/*"
71
73
  ],
72
74
  "browserslist": [
73
75
  "last 1 chrome versions"
74
76
  ],
75
77
  "type": "module",
78
+ "publishConfig": {
79
+ "executableFiles": [
80
+ "./dist_rust/rustdns_linux_amd64_musl",
81
+ "./dist_rust/rustdns_linux_arm64_musl",
82
+ "./dist_rust/rustdns-client_linux_amd64_musl",
83
+ "./dist_rust/rustdns-client_linux_arm64_musl"
84
+ ]
85
+ },
76
86
  "scripts": {
77
87
  "test": "(tstest test/ --verbose --timeout 60)",
78
88
  "test:rust": "(cd rust && cargo test)",
package/readme.md CHANGED
@@ -618,6 +618,191 @@ be stopped separately.
618
618
 
619
619
  ---
620
620
 
621
+ ## Managed private DNS views
622
+
623
+ `ManagedDnsServer` from `@push.rocks/smartdns/server` is a separate Linux-native
624
+ DNS engine for a trusted workload/network controller. It has no public-zone
625
+ handlers, localhost shortcut, DNSSEC signing, DoH listener, cache, image pull or
626
+ system-resolver fallback. Existing `DnsServer` and `DnsClient` behavior remains
627
+ available independently.
628
+
629
+ ```typescript
630
+ import { ManagedDnsServer } from '@push.rocks/smartdns/server';
631
+
632
+ const dns = new ManagedDnsServer({
633
+ ownerId: 'node:one',
634
+ bindAddress: '10.100.0.1',
635
+ port: 53,
636
+ revisionFloor: null, // Restore the persisted accepted receipt after a restart.
637
+ forbiddenUpstreamAddresses: ['10.100.0.2'],
638
+ });
639
+ const clock = await dns.getClockEvidence();
640
+ const deadline = clock.boottimeMs + 60_000;
641
+ await dns.start();
642
+ const receipt = await dns.applySnapshot({
643
+ ownerId: 'node:one',
644
+ revision: 1,
645
+ sourceContentHash: 'a'.repeat(64), // Use the real authenticated projection hash.
646
+ configuration: {
647
+ bootId: clock.bootId,
648
+ validUntilBoottimeMs: deadline,
649
+ blockedSuffixes: [],
650
+ clients: [{ address: '10.100.1.2', viewId: 'network:one' }],
651
+ views: [{
652
+ id: 'network:one',
653
+ zones: ['network-one.internal'],
654
+ negativeTtl: 1,
655
+ forwarding: null,
656
+ names: [{
657
+ name: 'api.network-one.internal',
658
+ records: [{
659
+ type: 'A', data: '10.100.2.3', ttl: 5,
660
+ validUntilBoottimeMs: deadline,
661
+ }],
662
+ }],
663
+ }],
664
+ },
665
+ });
666
+ // Persist the complete accepted input and receipt using your persistence owner.
667
+ // Verify getStatus().accepted and .active before acknowledging application.
668
+ await dns.stop();
669
+ ```
670
+
671
+ For an installed or compiled node bundle, pass a second, process-only option:
672
+ `new ManagedDnsServer(configuration, { binaryPath: '/opt/node/bin/rustdns' })`.
673
+ `binaryPath` must be absolute and is never serialized into a DNS snapshot or native
674
+ listener configuration. It selects that exact executable with an empty fallback
675
+ list and no system PATH search; a missing path fails even when package or local
676
+ build binaries exist. The installer remains responsible for verifying the artifact
677
+ and protecting its path. Without this option the existing npm package lookup is
678
+ preserved, including static Linux musl binaries.
679
+
680
+ For a caller-owned Linux network namespace, add `networkNamespaceFd: handle.fd`
681
+ to those process options. Keep the original descriptor open and bound to the
682
+ intended namespace until `getClockEvidence()` or `start()` resolves; the caller
683
+ owns and closes it. SmartDNS inherits a separate descriptor through Smartrust,
684
+ verifies that it is a network namespace, enters it before creating runtime threads
685
+ or opening sockets, then closes only the child's copy. Entry failure prevents
686
+ readiness. Namespace paths, process IDs and serialized identity records are not
687
+ accepted in place of the live descriptor. Namespace creation, recovery, routing
688
+ and packet policy remain the caller's responsibility. Successful entry requires
689
+ the Linux capabilities for `setns(CLONE_NEWNET)` in both relevant user namespaces.
690
+ The native executable exposes the same startup contract through
691
+ `--management --network-namespace-fd 3` with an already inherited descriptor;
692
+ descriptors below 3 are rejected to protect the IPC streams.
693
+
694
+ The caller authenticates the configuration, enforces the kernel binding between
695
+ each workload/interface and source IP, and persists complete snapshots plus the
696
+ highest `revision`/`contentHash` receipt. The engine does not authenticate a claimed
697
+ IP supplied in configuration, install firewall policy, allocate addresses, check
698
+ workload readiness, persist application data or publish public DNS/ingress records.
699
+ A DNS answer grants no packet access. TCP and UDP views use the kernel-observed
700
+ peer address; untrusted EDNS Client Subnet and all client EDNS options are rejected.
701
+ Unknown sources receive REFUSED before any lookup or forwarding. The raw IPC
702
+ `processPacket` path is unavailable while a managed listener is running, so it
703
+ cannot fabricate membership context.
704
+
705
+ A snapshot replaces the complete set of views and client bindings atomically.
706
+ Each client IP selects exactly one view; an owner can build a union view for a
707
+ workload with several explicitly authorized networks. Names are case-insensitive
708
+ FQDNs with optional trailing dots. Different views can declare the same name with
709
+ different records. Duplicate names or client IPs in one snapshot, names outside
710
+ that view's authority, duplicate records, malformed addresses and out-of-bound
711
+ TTLs/collections reject the entire replacement. The caller defines search suffixes
712
+ in workload configuration; the engine never guesses a default network or expands
713
+ a bare name into several networks.
714
+
715
+ Managed authoritative records are A, AAAA and PTR. Every declared name exists even
716
+ with an empty RRset: missing query types and expired endpoint records produce
717
+ NOERROR/NODATA with a negative SOA. Missing or unauthorized private names produce
718
+ NXDOMAIN. PTR targets must belong to the same view's configured authority. Private
719
+ CNAME/MX/SRV synthesis is intentionally absent. Multiple eligible addresses are
720
+ returned as one RRset; oversized UDP answers set TC so the client can retry TCP.
721
+ TTL zero is preserved. Every positive and negative TTL is clipped to native
722
+ remaining authority; record deadlines can withdraw individual endpoints earlier.
723
+
724
+ Revisions are nonnegative JavaScript safe integers, scoped to the exact immutable
725
+ `ownerId`. Older revisions and same-revision different content reject. Exact replay
726
+ is idempotent and never renews validity. `configuration: null` explicitly withdraws
727
+ all views while retaining the revision fence. The receipt hash is SHA-256 over
728
+ Rust's typed camel-case snapshot serialization in declared field order, preserving
729
+ array order and input strings; it covers owner, revision, parent hash, complete
730
+ configuration and deadline. It is an identity receipt, not a signature. Persist the
731
+ exact submitted snapshot together with the receipt; do not reconstruct an
732
+ approximately equivalent JSON document. `revisionFloor` allows the exact accepted
733
+ snapshot to be reinstalled in a fresh process and rejects older/conflicting input
734
+ before any query can see it. Durable fencing across process lifetimes is the
735
+ persistence owner's responsibility.
736
+
737
+ `getClockEvidence()` reads Linux boot identity and suspend-inclusive
738
+ [`CLOCK_BOOTTIME`](https://man7.org/linux/man-pages/man3/clock_gettime.3.html). The complete snapshot must name this boot and an absolute native
739
+ deadline, greater than the current native time and at most 24 hours ahead. Endpoint
740
+ deadlines cannot exceed the snapshot. The caller should choose its own shorter
741
+ policy lease. Query/send paths check native validity and accepted revision,
742
+ including after forwarding completes; expiry produces SERVFAIL without a
743
+ JavaScript timer. Same-boot process recovery can reinstall an unexpired persisted
744
+ snapshot, including names never previously queried. Node reboot changes the boot
745
+ ID: the caller must independently establish trusted time and authenticate a bounded
746
+ new boot deadline. The engine never converts wall-clock time or grants a fresh
747
+ lease merely because it restarted. An expired or wrong-boot snapshot cannot be
748
+ installed into a fresh engine.
749
+
750
+ Forwarding is opt-in per view, to explicit IP-literal upstream endpoints and
751
+ allowed DNS suffixes (`'.'` explicitly permits all external names outside privacy
752
+ barriers). The listener address and `forbiddenUpstreamAddresses` cannot be
753
+ upstreams, including IPv4-mapped IPv6 aliases. The caller must supply every other
754
+ local resolver address and prevent upstream forwarding cycles outside this
755
+ process. No host resolver, public fallback or upstream hostname lookup is used.
756
+ The engine keeps `.internal`, localhost/local/home.arpa, private reverse space,
757
+ bare names, configured blocked suffixes and every configured authoritative zone
758
+ out of forwarding, including zones visible only in another view. Response aliases
759
+ are inspected before returning them; private targets, cycles, excessive depth,
760
+ unrelated answers and mismatched question/transaction IDs are rejected. Client
761
+ EDNS/ECS/DNSSEC options are never sent upstream. The recursive upstream receives
762
+ only the permitted external question; this engine never follows a private alias.
763
+
764
+ Forwarding supports A, AAAA, NS, CNAME, SOA, PTR, MX, TXT and SRV questions and their
765
+ known wire record shapes. Unknown or DNSSEC-specific response records fail closed;
766
+ there is no opaque RDATA pass-through. The reusable protocol parser expands
767
+ compressed name-bearing RDATA before re-encoding. AXFR, IXFR and ANY are refused.
768
+ Forwarded positive TTLs are capped by `maxTtl`; negative TTLs also use the view's
769
+ `negativeTtl`; both are clipped to remaining snapshot validity. UDP truncation
770
+ retries the same upstream over TCP. One overall deadline (maximum 10 seconds), at
771
+ most four upstreams, 1,024 allowed suffixes per view, 512 response records, 256 UDP jobs and 128 TCP connections
772
+ bound forwarding work. A response arriving after replacement or expiry cannot
773
+ answer under its old authority.
774
+
775
+ `start()` binds both transports before admission. `stop()` closes admission, joins
776
+ pending facade calls and all native query/connection work, and confirms child
777
+ termination. Failed cleanup remains owned and retryable. A transport-ambiguous
778
+ snapshot update prevents further mutations until cleanup; callers must reconcile
779
+ their persisted intent. Each facade instance is single-use: construct a new one
780
+ with the persisted revision floor after a stop. Stdin closure stops the native
781
+ listeners when their parent dies. IPC commands have a 16 MiB allocation ceiling;
782
+ snapshots have an 8 MiB encoded ceiling.
783
+
784
+ The managed engine tests qualify these local protocol, view, revision and lifecycle
785
+ behaviors. A platform using it still owns persistent SmartData/SmartDB recovery,
786
+ workload interface isolation, authenticated cross-node configuration, endpoint
787
+ readiness, trusted reboot-time recovery, CRI settings and complete node packaging.
788
+
789
+ ## Native distribution
790
+
791
+ The npm package ships `rustdns` and `rustdns-client` as static Linux amd64 and
792
+ arm64 musl binaries. The default bridges select the matching musl asset first.
793
+ Managed DNS requires Linux for its boot identity and suspend-inclusive clock.
794
+ Installer-owned bundles can select an exact absolute server binary path as
795
+ shown above; carry [third-party-notices.md](./third-party-notices.md) and the
796
+ complete `notices/` directory beside separately distributed executables.
797
+
798
+ Builds use the Rust 1.95.0 pin and locked Cargo graph. Linux cross-build hosts
799
+ need `musl-gcc`, `clang` for ring's arm64 freestanding C objects, and
800
+ `aarch64-linux-gnu-gcc` as the arm64 linker. Rust's musl target supplies its static
801
+ runtime. TLS explicitly selects the same ring provider installed at process
802
+ startup, retaining TLS 1.2/1.3, logging and certificate verification.
803
+ `pnpm build` produces both architectures and rejects dynamic Linux executables;
804
+ its SHA-256-bound `.tsrust-build.json` sidecars identify each artifact's source.
805
+
621
806
  ## 🦀 Rust Crate Structure
622
807
 
623
808
  The Rust workspace (`rust/crates/`) contains five crates:
@@ -672,7 +857,7 @@ export default tap.start();
672
857
 
673
858
  ## License and Legal Information
674
859
 
675
- This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [license](./license) file.
860
+ This repository contains open-source code licensed under the MIT License. A copy of the license can be found in the [license](./license.md) file.
676
861
 
677
862
  **Please note:** The MIT License does not grant permission to use the trade names, trademarks, service marks, or product names of the project, except as required for reasonable and customary use in describing the origin of the work and reproducing the content of the NOTICE file.
678
863
 
@@ -0,0 +1,96 @@
1
+ # Third-party notices
2
+
3
+ This notice set covers the static Linux amd64 and arm64 musl distributions of
4
+ `rustdns` and `rustdns-client`. SmartDNS's own code is licensed under
5
+ [license.md](./license.md). Keep this index and the complete `notices/` directory
6
+ beside any separately distributed executable.
7
+
8
+ ## Cargo dependencies
9
+
10
+ [Cargo dependency notices](./notices/cargo-dependencies.html) contain the selected
11
+ license texts and package attributions for 203 dependencies. The exact license
12
+ files for 13 additional locked but feature-inactive packages are included as
13
+ supplements listed in [inventory.json](./notices/inventory.json). Together they
14
+ cover all 216 third-party packages in the locked graph, including build-only and
15
+ target-inactive dependencies conservatively. MIT is selected when offered as an
16
+ alternative; Apache-2.0, ISC, BSD-3-Clause, Unicode-3.0, Zlib and
17
+ CDLA-Permissive-2.0 apply where required. Listing an inactive package does not
18
+ claim it is linked into either Linux binary.
19
+
20
+ The inventory records every package's name, version and upstream license
21
+ expression, the reviewed input and output hashes, and the provenance of the
22
+ supplemental licenses and separate COPYRIGHT/NOTICES files. Exact copyright
23
+ supplements cover cfg_aliases, fiat-crypto, group, rand, rand_chacha, rand_core and
24
+ utf8_iter. All crate-derived supplemental files were checked against their
25
+ Cargo.lock checksum-pinned published archives.
26
+
27
+ `ring` 0.17.14 includes code under multiple licenses. Its exact
28
+ [license index](./notices/ring-0.17.14-license.txt),
29
+ [BoringSSL license](./notices/ring-0.17.14-license-boringssl.txt),
30
+ [ISC license](./notices/ring-0.17.14-license-other-bits.txt),
31
+ [fiat-crypto notice](./notices/ring-0.17.14-fiat-license.txt), and bundled once_cell
32
+ [MIT](./notices/ring-0.17.14-once-cell-license-mit.txt) and
33
+ [Apache-2.0](./notices/ring-0.17.14-once-cell-license-apache.txt) licenses are
34
+ included. Its [source attribution supplement](./notices/ring-0.17.14-source-attributions.txt)
35
+ retains copyright and license comments, grouping identical comments by source
36
+ path and including build-only and target-inactive files conservatively. All
37
+ seven files were verified against the published crate archive with SHA-256
38
+ `a4689e6c2294d81e88dc6261c768b63bc4fcdb852be6d1352498b114f61383b7`.
39
+ The crate's own scope statements remain intact.
40
+
41
+ The native TLS dependency features select ring, matching the provider explicitly
42
+ installed by both binaries. The unused default AWS-LC provider is not compiled.
43
+ No TypeScript dependency executable is embedded in these Rust binaries; the npm
44
+ dependency graph remains separately installed from its package manifests.
45
+
46
+ ## Compiler and static runtime
47
+
48
+ `rust-toolchain.toml` pins Rust 1.95.0 and both musl targets. These notices cover
49
+ runtime components supplied outside Cargo.lock:
50
+
51
+ - [Rust standard-library inventory](./notices/rust-standard-library.html), from
52
+ the official 1.95.0 toolchain's `share/doc/rust/COPYRIGHT-library.html`. Its
53
+ upstream SHA-256 is
54
+ `90567e2718bf7fd65a71a3a43c5596488e80e5f51ed02bfea6fec54458b5f3d1`;
55
+ the local copy adds only a final newline. This upstream inventory includes
56
+ other targets without claiming they are linked into Linux.
57
+ - [musl copyright and license](./notices/musl-copyright.txt), from
58
+ [musl 1.2.5](https://git.musl-libc.org/cgit/musl/tree/COPYRIGHT?h=v1.2.5).
59
+ Rust's [1.95.0 build recipe](https://github.com/rust-lang/rust/blob/1.95.0/src/ci/docker/scripts/musl-toolchain.sh)
60
+ selects musl 1.2.5 with its two recorded security patches.
61
+ - [Compiler-builtins license](./notices/compiler-builtins-license.txt), from
62
+ [Rust 1.95.0](https://github.com/rust-lang/rust/blob/1.95.0/library/compiler-builtins/LICENSE.txt),
63
+ retaining the MIT and Apache-2.0 WITH LLVM-exception terms.
64
+ - [LLVM libunwind license](./notices/llvm-libunwind-license.txt), from
65
+ [Rust's pinned LLVM source](https://github.com/rust-lang/llvm-project/blob/1cb4e3833c1919c2e6fb579a23ac0e2b22587b7e/libunwind/LICENSE.TXT),
66
+ including its additional third-party terms.
67
+
68
+ ## Reproduction and review
69
+
70
+ Use cargo-about 0.9.1 from the repository root:
71
+
72
+ ```sh
73
+ cargo about generate --manifest-path rust/Cargo.toml --config rust/about.toml --locked --fail --output-file notices/cargo-dependencies.html rust/about.hbs
74
+ ```
75
+
76
+ The configuration preserves the full active graph and selects exact upstream
77
+ attribution files for crates with missing or unrecognized license files. Network
78
+ access is required for pinned Git notices. Generic license text with placeholder
79
+ copyright holders is not a substitute. Windows crates use their exact
80
+ `license-mit` files; curve25519-dalek uses its complete license with both sets of
81
+ attributions. wasip2's omitted MIT notice is retrieved from its exact source
82
+ commit. The feature-inactive valuable package's MIT notice is likewise copied
83
+ from its exact source commit, recorded in the inventory.
84
+
85
+ For every locked package omitted by cargo-about, copy its exact selected license
86
+ from the checksum-verified crate archive, or its pinned source commit when the
87
+ archive omits the license. Also retain separate COPYRIGHT/NOTICES files. For the
88
+ ring supplement, collect copyright-bearing comments from `.rs`, `.c`, `.h`, `.S`
89
+ and `.pl` files, preserving comment bytes and each source path; group only
90
+ identical comments.
91
+
92
+ After changing Cargo.lock, Cargo manifests, the compiler pin or generation
93
+ inputs, regenerate and review the notices, refresh the inventory's SHA-256
94
+ hashes and package list, and rerun distribution qualification. The notice tests
95
+ reject stale inputs, changed notice files, missing locked packages, placeholder
96
+ attributions and missing npm notice paths.
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartdns',
6
- version: '8.2.1',
6
+ version: '8.4.0',
7
7
  description: 'A robust TypeScript library providing advanced DNS management and resolution capabilities including support for DNSSEC, custom DNS servers, and integration with various DNS providers.'
8
8
  }
@@ -1,14 +0,0 @@
1
- {
2
- "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "b0419c40c34a6d5fa6d6687847f9e7cb2290348d1fc0930fe4e83c808760078a",
4
- "buildInfo": {
5
- "projectName": "@push.rocks/smartdns",
6
- "projectVersion": "8.2.1",
7
- "gitCommit": "81f8e6aa1589378fc9883a3038bc8e39f6db6be4",
8
- "gitDirty": false,
9
- "builtAt": "2026-08-23T09:51:59.907Z",
10
- "tsrustVersion": "1.10.0",
11
- "binary": "rustdns-client",
12
- "target": "linux_amd64"
13
- }
14
- }
@@ -1,14 +0,0 @@
1
- {
2
- "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "8b24aa046dbac269aa71e6b7b554565d5f50e5664f8f6a54c59d7fe05d232ab5",
4
- "buildInfo": {
5
- "projectName": "@push.rocks/smartdns",
6
- "projectVersion": "8.2.1",
7
- "gitCommit": "81f8e6aa1589378fc9883a3038bc8e39f6db6be4",
8
- "gitDirty": false,
9
- "builtAt": "2026-08-23T09:52:00.225Z",
10
- "tsrustVersion": "1.10.0",
11
- "binary": "rustdns-client",
12
- "target": "linux_arm64"
13
- }
14
- }
Binary file
@@ -1,14 +0,0 @@
1
- {
2
- "format": "tsrust.build-provenance.v2",
3
- "binarySha256": "562c4ff14d42e17d0fccd653729eea025dc4eba7be56cb4b49cd2aafe1203bb4",
4
- "buildInfo": {
5
- "projectName": "@push.rocks/smartdns",
6
- "projectVersion": "8.2.1",
7
- "gitCommit": "81f8e6aa1589378fc9883a3038bc8e39f6db6be4",
8
- "gitDirty": false,
9
- "builtAt": "2026-08-23T09:51:59.907Z",
10
- "tsrustVersion": "1.10.0",
11
- "binary": "rustdns",
12
- "target": "linux_amd64"
13
- }
14
- }
Binary file