@push.rocks/smartdns 8.2.1 → 8.3.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.
- package/.smartconfig.json +10 -4
- package/dist_rust/rustdns-client_linux_amd64_musl +0 -0
- package/dist_rust/rustdns-client_linux_amd64_musl.tsrust-build.json +14 -0
- package/dist_rust/{rustdns-client_linux_arm64 → rustdns-client_linux_arm64_musl} +0 -0
- package/dist_rust/rustdns-client_linux_arm64_musl.tsrust-build.json +14 -0
- package/dist_rust/rustdns_linux_amd64_musl +0 -0
- package/dist_rust/rustdns_linux_amd64_musl.tsrust-build.json +14 -0
- package/dist_rust/rustdns_linux_arm64_musl +0 -0
- package/dist_rust/rustdns_linux_arm64_musl.tsrust-build.json +14 -0
- package/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts_client/classes.rustdnsclientbridge.js +4 -1
- package/dist_ts_server/classes.dnsserver.d.ts +1 -1
- package/dist_ts_server/classes.dnsserver.js +2 -2
- package/dist_ts_server/classes.manageddnsserver.d.ts +34 -0
- package/dist_ts_server/classes.manageddnsserver.js +141 -0
- package/dist_ts_server/classes.rustdnsbridge.d.ts +31 -1
- package/dist_ts_server/classes.rustdnsbridge.js +34 -13
- package/dist_ts_server/index.d.ts +2 -0
- package/dist_ts_server/index.js +3 -1
- package/dist_ts_server/interfaces.managed.d.ts +79 -0
- package/dist_ts_server/interfaces.managed.js +2 -0
- package/notices/cargo-dependencies.html +3412 -0
- package/notices/cfg_aliases-0.2.1-license.txt +9 -0
- package/notices/cfg_aliases-0.2.1-notices.txt +26 -0
- package/notices/compiler-builtins-license.txt +275 -0
- package/notices/fiat-crypto-0.2.9-copyright.txt +7 -0
- package/notices/group-0.13.0-copyright.txt +14 -0
- package/notices/inventory.json +1290 -0
- package/notices/llvm-libunwind-license.txt +311 -0
- package/notices/lru-slab-0.1.2-license.txt +7 -0
- package/notices/musl-copyright.txt +193 -0
- package/notices/quinn-0.11.9-license.txt +7 -0
- package/notices/quinn-proto-0.11.13-license.txt +7 -0
- package/notices/quinn-udp-0.5.14-license.txt +7 -0
- package/notices/rand-0.8.5-copyright.txt +12 -0
- package/notices/rand-0.9.2-copyright.txt +12 -0
- package/notices/rand_chacha-0.3.1-copyright.txt +12 -0
- package/notices/rand_chacha-0.9.0-copyright.txt +12 -0
- package/notices/rand_core-0.6.4-copyright.txt +12 -0
- package/notices/rand_core-0.9.5-copyright.txt +12 -0
- package/notices/ring-0.17.14-fiat-license.txt +15 -0
- package/notices/ring-0.17.14-license-boringssl.txt +272 -0
- package/notices/ring-0.17.14-license-other-bits.txt +13 -0
- package/notices/ring-0.17.14-license.txt +9 -0
- package/notices/ring-0.17.14-once-cell-license-apache.txt +201 -0
- package/notices/ring-0.17.14-once-cell-license-mit.txt +23 -0
- package/notices/ring-0.17.14-source-attributions.txt +1544 -0
- package/notices/rust-standard-library.html +8266 -0
- package/notices/rustc-hash-2.1.1-license.txt +23 -0
- package/notices/thiserror-2.0.18-license.txt +23 -0
- package/notices/thiserror-impl-2.0.18-license.txt +23 -0
- package/notices/tinyvec-1.10.0-license.txt +5 -0
- package/notices/tinyvec_macros-0.1.1-license.txt +21 -0
- package/notices/utf8_iter-1.0.4-copyright.txt +42 -0
- package/notices/valuable-0.1.1-license.txt +25 -0
- package/notices/web-time-1.1.0-license.txt +21 -0
- package/notices/zerocopy-derive-0.8.39-license.txt +26 -0
- package/package.json +16 -6
- package/readme.md +172 -1
- package/third-party-notices.md +96 -0
- package/ts/00_commitinfo_data.ts +1 -1
- package/dist_rust/rustdns-client_linux_amd64 +0 -0
- package/dist_rust/rustdns-client_linux_amd64.tsrust-build.json +0 -14
- package/dist_rust/rustdns-client_linux_arm64.tsrust-build.json +0 -14
- package/dist_rust/rustdns_linux_amd64 +0 -0
- package/dist_rust/rustdns_linux_amd64.tsrust-build.json +0 -14
- package/dist_rust/rustdns_linux_arm64 +0 -0
- package/dist_rust/rustdns_linux_arm64.tsrust-build.json +0 -14
- package/readme.hints.md +0 -294
- /package/{license → license.md} +0 -0
package/.smartconfig.json
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"@git.zone/tsrust": {
|
|
3
3
|
"targets": [
|
|
4
|
-
"
|
|
5
|
-
"
|
|
4
|
+
"linux_amd64_musl",
|
|
5
|
+
"linux_arm64_musl"
|
|
6
6
|
],
|
|
7
|
-
"static": true
|
|
7
|
+
"static": true,
|
|
8
|
+
"locked": true,
|
|
9
|
+
"remapLocalPaths": true
|
|
8
10
|
},
|
|
9
11
|
"@git.zone/cli": {
|
|
10
12
|
"schemaVersion": 2,
|
|
@@ -54,11 +56,15 @@
|
|
|
54
56
|
"accessLevel": "public",
|
|
55
57
|
"alreadyPublished": "success"
|
|
56
58
|
}
|
|
59
|
+
},
|
|
60
|
+
"preflight": {
|
|
61
|
+
"build": true,
|
|
62
|
+
"test": true
|
|
57
63
|
}
|
|
58
64
|
}
|
|
59
65
|
},
|
|
60
66
|
"@git.zone/tsdoc": {
|
|
61
|
-
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license) file within this repository. \n\n**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.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
|
|
67
|
+
"legal": "\n## License and Legal Information\n\nThis repository contains open-source code that is licensed under the MIT License. A copy of the MIT License can be found in the [license](license.md) file within this repository. \n\n**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.\n\n### Trademarks\n\nThis project is owned and maintained by Task Venture Capital GmbH. The names and logos associated with Task Venture Capital GmbH and any related products or services are trademarks of Task Venture Capital GmbH and are not included within the scope of the MIT license granted herein. Use of these trademarks must comply with Task Venture Capital GmbH's Trademark Guidelines, and any usage must be approved in writing by Task Venture Capital GmbH.\n\n### Company Information\n\nTask Venture Capital GmbH \nRegistered at District court Bremen HRB 35230 HB, Germany\n\nFor any legal inquiries or if you require further information, please contact us via email at hello@task.vc.\n\nBy using this repository, you acknowledge that you have read this section, agree to comply with its terms, and understand that the licensing of the code does not imply endorsement by Task Venture Capital GmbH of any derivative works.\n"
|
|
62
68
|
},
|
|
63
69
|
"@ship.zone/szci": {
|
|
64
70
|
"npmGlobalTools": [],
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "tsrust.build-provenance.v2",
|
|
3
|
+
"binarySha256": "458bba943f70bd1ab64f520d12a7a128980cb3a793880b72c3e72079f7566823",
|
|
4
|
+
"buildInfo": {
|
|
5
|
+
"projectName": "@push.rocks/smartdns",
|
|
6
|
+
"projectVersion": "8.3.0",
|
|
7
|
+
"gitCommit": "82cbf505b9702da5307894ee00643de8ea951cc8",
|
|
8
|
+
"gitDirty": false,
|
|
9
|
+
"builtAt": "2026-09-09T11:58:42.569Z",
|
|
10
|
+
"tsrustVersion": "1.13.0",
|
|
11
|
+
"binary": "rustdns-client",
|
|
12
|
+
"target": "linux_amd64_musl"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "tsrust.build-provenance.v2",
|
|
3
|
+
"binarySha256": "8c6530c2d3357f165e225ea911bc8479d18012f6ff5734cdfd7048a6a12366e5",
|
|
4
|
+
"buildInfo": {
|
|
5
|
+
"projectName": "@push.rocks/smartdns",
|
|
6
|
+
"projectVersion": "8.3.0",
|
|
7
|
+
"gitCommit": "82cbf505b9702da5307894ee00643de8ea951cc8",
|
|
8
|
+
"gitDirty": false,
|
|
9
|
+
"builtAt": "2026-09-09T11:58:42.899Z",
|
|
10
|
+
"tsrustVersion": "1.13.0",
|
|
11
|
+
"binary": "rustdns-client",
|
|
12
|
+
"target": "linux_arm64_musl"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "tsrust.build-provenance.v2",
|
|
3
|
+
"binarySha256": "aba3d00834ed5fe4d541347a3dce8867eb476ef97b56ffb75052d0b0c33d0e97",
|
|
4
|
+
"buildInfo": {
|
|
5
|
+
"projectName": "@push.rocks/smartdns",
|
|
6
|
+
"projectVersion": "8.3.0",
|
|
7
|
+
"gitCommit": "82cbf505b9702da5307894ee00643de8ea951cc8",
|
|
8
|
+
"gitDirty": false,
|
|
9
|
+
"builtAt": "2026-09-09T11:58:42.569Z",
|
|
10
|
+
"tsrustVersion": "1.13.0",
|
|
11
|
+
"binary": "rustdns",
|
|
12
|
+
"target": "linux_amd64_musl"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
Binary file
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"format": "tsrust.build-provenance.v2",
|
|
3
|
+
"binarySha256": "81f44763a360668c6f32fbb4b9acf0f90770f33c5ac4f78f8fba17eb9bad8e4f",
|
|
4
|
+
"buildInfo": {
|
|
5
|
+
"projectName": "@push.rocks/smartdns",
|
|
6
|
+
"projectVersion": "8.3.0",
|
|
7
|
+
"gitCommit": "82cbf505b9702da5307894ee00643de8ea951cc8",
|
|
8
|
+
"gitDirty": false,
|
|
9
|
+
"builtAt": "2026-09-09T11:58:42.899Z",
|
|
10
|
+
"tsrustVersion": "1.13.0",
|
|
11
|
+
"binary": "rustdns",
|
|
12
|
+
"target": "linux_arm64_musl"
|
|
13
|
+
}
|
|
14
|
+
}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@push.rocks/smartdns',
|
|
6
|
-
version: '8.
|
|
6
|
+
version: '8.3.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
|
};
|
|
9
9
|
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSxzQkFBc0I7SUFDNUIsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLHlMQUF5TDtDQUN2TSxDQUFBIn0=
|
|
@@ -11,6 +11,9 @@ export class RustDnsClientBridge {
|
|
|
11
11
|
const localPaths = [];
|
|
12
12
|
// dist_rust/ candidates (tsrust cross-compiled output, platform-specific)
|
|
13
13
|
if (platformSuffix) {
|
|
14
|
+
if (process.platform === 'linux') {
|
|
15
|
+
localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns-client_${platformSuffix}_musl`));
|
|
16
|
+
}
|
|
14
17
|
localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns-client_${platformSuffix}`));
|
|
15
18
|
}
|
|
16
19
|
// dist_rust/ without suffix (native build)
|
|
@@ -132,4 +135,4 @@ function getPlatformSuffix() {
|
|
|
132
135
|
}
|
|
133
136
|
return null;
|
|
134
137
|
}
|
|
135
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
138
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zY2xpZW50YnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfY2xpZW50L2NsYXNzZXMucnVzdGRuc2NsaWVudGJyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCO1FBRlEsaUJBQVksR0FBNEIsSUFBSSxDQUFDO1FBR25ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUN2RCxJQUFJLENBQ0wsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUVoQywwRUFBMEU7UUFDMUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixJQUFJLE9BQU8sQ0FBQyxRQUFRLEtBQUssT0FBTyxFQUFFLENBQUM7Z0JBQ2pDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxrQkFBa0IsY0FBYyxPQUFPLENBQUMsQ0FBQyxDQUFDO1lBQ3ZHLENBQUM7WUFDRCxVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsMkNBQTJDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdB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
|
|
@@ -287,7 +287,7 @@ export declare class DnsServer extends plugins.events.EventEmitter {
|
|
|
287
287
|
* name (its apex exists by configuration), or when a handler pattern is
|
|
288
288
|
* anchored below it (literal `.name` suffix, or a wildcard that matches a
|
|
289
289
|
* probe label). Mid-label wildcard patterns cannot be fully inverted by
|
|
290
|
-
* this check; see
|
|
290
|
+
* this check; see hints.md.
|
|
291
291
|
*/
|
|
292
292
|
private nameHasCoveredDescendants;
|
|
293
293
|
/** The SOA this server publishes at the apex of a zone it is authoritative for. */
|
|
@@ -1012,7 +1012,7 @@ export class DnsServer extends plugins.events.EventEmitter {
|
|
|
1012
1012
|
name: answer.name,
|
|
1013
1013
|
type: answer.type,
|
|
1014
1014
|
class: typeof answer.class === 'number' ? 'IN' : (answer.class || 'IN'),
|
|
1015
|
-
ttl: answer.ttl
|
|
1015
|
+
ttl: answer.ttl ?? 300,
|
|
1016
1016
|
data: answer.data,
|
|
1017
1017
|
});
|
|
1018
1018
|
if (handlerEntry.authority === 'non-authoritative' || !questionZone) {
|
|
@@ -1124,7 +1124,7 @@ export class DnsServer extends plugins.events.EventEmitter {
|
|
|
1124
1124
|
* name (its apex exists by configuration), or when a handler pattern is
|
|
1125
1125
|
* anchored below it (literal `.name` suffix, or a wildcard that matches a
|
|
1126
1126
|
* probe label). Mid-label wildcard patterns cannot be fully inverted by
|
|
1127
|
-
* this check; see
|
|
1127
|
+
* this check; see hints.md.
|
|
1128
1128
|
*/
|
|
1129
1129
|
nameHasCoveredDescendants(name) {
|
|
1130
1130
|
if (this.normalizedAuthoritativeZones().some((zone) => zone.endsWith(`.${name}`))) {
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { type IRustDnsBridgeOptions } from './classes.rustdnsbridge.js';
|
|
2
|
+
import type { IManagedDnsClockEvidence, IManagedDnsRevision, IManagedDnsServerOptions, IManagedDnsSnapshot, IManagedDnsStatus } from './interfaces.managed.js';
|
|
3
|
+
/**
|
|
4
|
+
* Native private-view DNS owner. Each instance owns one joined child lifecycle.
|
|
5
|
+
* The caller authenticates and persists complete snapshots and revision receipts
|
|
6
|
+
* through its own persistence layer before acknowledging applied configuration.
|
|
7
|
+
* Workload source/interface anti-spoofing remains the caller's kernel-policy duty.
|
|
8
|
+
*/
|
|
9
|
+
export declare class ManagedDnsServer {
|
|
10
|
+
private readonly bridge;
|
|
11
|
+
private readonly options;
|
|
12
|
+
private queue;
|
|
13
|
+
private closing;
|
|
14
|
+
private spawned;
|
|
15
|
+
private started;
|
|
16
|
+
private failedOwned;
|
|
17
|
+
private stopPromise;
|
|
18
|
+
constructor(options: IManagedDnsServerOptions, processOptions?: IRustDnsBridgeOptions);
|
|
19
|
+
private enqueue;
|
|
20
|
+
private ensureSpawned;
|
|
21
|
+
/** Starts the child if needed; does not admit queries or create a listener. */
|
|
22
|
+
getClockEvidence(): Promise<IManagedDnsClockEvidence>;
|
|
23
|
+
/** Bind both transports. Until an accepted snapshot exists all queries refuse. */
|
|
24
|
+
start(): Promise<IManagedDnsStatus>;
|
|
25
|
+
/** Atomic complete replacement; older revisions and conflicting replay reject. */
|
|
26
|
+
applySnapshot(snapshot: IManagedDnsSnapshot): Promise<IManagedDnsRevision>;
|
|
27
|
+
getStatus(): Promise<IManagedDnsStatus>;
|
|
28
|
+
/**
|
|
29
|
+
* Stop admission immediately, join pending calls and native listener/query
|
|
30
|
+
* cleanup, then confirm child termination. Failed cleanup remains retryable.
|
|
31
|
+
* An instance is single-use; restart with the persisted snapshot revision floor.
|
|
32
|
+
*/
|
|
33
|
+
stop(): Promise<void>;
|
|
34
|
+
}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
import { RustDnsBridge } from './classes.rustdnsbridge.js';
|
|
2
|
+
import * as plugins from './plugins.js';
|
|
3
|
+
/**
|
|
4
|
+
* Native private-view DNS owner. Each instance owns one joined child lifecycle.
|
|
5
|
+
* The caller authenticates and persists complete snapshots and revision receipts
|
|
6
|
+
* through its own persistence layer before acknowledging applied configuration.
|
|
7
|
+
* Workload source/interface anti-spoofing remains the caller's kernel-policy duty.
|
|
8
|
+
*/
|
|
9
|
+
export class ManagedDnsServer {
|
|
10
|
+
constructor(options, processOptions = {}) {
|
|
11
|
+
this.queue = Promise.resolve();
|
|
12
|
+
this.closing = false;
|
|
13
|
+
this.spawned = false;
|
|
14
|
+
this.started = false;
|
|
15
|
+
this.failedOwned = false;
|
|
16
|
+
this.stopPromise = null;
|
|
17
|
+
this.options = structuredClone(options);
|
|
18
|
+
this.bridge = new RustDnsBridge(processOptions);
|
|
19
|
+
}
|
|
20
|
+
enqueue(operation) {
|
|
21
|
+
if (this.closing || this.failedOwned) {
|
|
22
|
+
return Promise.reject(new Error('Managed DNS owner is closing or requires cleanup'));
|
|
23
|
+
}
|
|
24
|
+
const result = this.queue.then(async () => {
|
|
25
|
+
if (this.closing || this.failedOwned) {
|
|
26
|
+
throw new Error('Managed DNS owner is closing or requires cleanup');
|
|
27
|
+
}
|
|
28
|
+
return operation();
|
|
29
|
+
});
|
|
30
|
+
this.queue = result.catch(() => { });
|
|
31
|
+
return result;
|
|
32
|
+
}
|
|
33
|
+
async ensureSpawned() {
|
|
34
|
+
if (this.spawned) {
|
|
35
|
+
if (!this.bridge.running) {
|
|
36
|
+
this.failedOwned = true;
|
|
37
|
+
throw new Error('Managed DNS child exited; create a fresh owner after cleanup');
|
|
38
|
+
}
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
try {
|
|
42
|
+
if (!(await this.bridge.spawn()))
|
|
43
|
+
throw new Error('Managed DNS native binary unavailable');
|
|
44
|
+
this.spawned = true;
|
|
45
|
+
}
|
|
46
|
+
catch (error) {
|
|
47
|
+
this.failedOwned = true;
|
|
48
|
+
throw error;
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
/** Starts the child if needed; does not admit queries or create a listener. */
|
|
52
|
+
getClockEvidence() {
|
|
53
|
+
return this.enqueue(async () => {
|
|
54
|
+
await this.ensureSpawned();
|
|
55
|
+
return this.bridge.managedClock();
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
/** Bind both transports. Until an accepted snapshot exists all queries refuse. */
|
|
59
|
+
start() {
|
|
60
|
+
return this.enqueue(async () => {
|
|
61
|
+
if (this.started)
|
|
62
|
+
throw new Error('Managed DNS server already started');
|
|
63
|
+
await this.ensureSpawned();
|
|
64
|
+
try {
|
|
65
|
+
const status = await this.bridge.managedStart(this.options);
|
|
66
|
+
this.started = true;
|
|
67
|
+
return status;
|
|
68
|
+
}
|
|
69
|
+
catch (error) {
|
|
70
|
+
this.failedOwned = true;
|
|
71
|
+
throw error;
|
|
72
|
+
}
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
/** Atomic complete replacement; older revisions and conflicting replay reject. */
|
|
76
|
+
applySnapshot(snapshot) {
|
|
77
|
+
// Clone before asynchronous queueing so caller mutation cannot change an intent.
|
|
78
|
+
const ownedSnapshot = structuredClone(snapshot);
|
|
79
|
+
return this.enqueue(async () => {
|
|
80
|
+
if (!this.started)
|
|
81
|
+
throw new Error('Managed DNS server is not started');
|
|
82
|
+
try {
|
|
83
|
+
return await this.bridge.managedApply(ownedSnapshot);
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
// A native validation rejection leaves the prior snapshot intact. A
|
|
87
|
+
// missing/ambiguous transport acknowledgement owns unresolved effects;
|
|
88
|
+
// block further mutations until this child has been joined and replaced.
|
|
89
|
+
if (!(error instanceof plugins.smartrust.RustBridgeRequestError)
|
|
90
|
+
|| error.code !== 'ERR_RUST_BRIDGE_REQUEST_RUST_RESPONSE') {
|
|
91
|
+
this.failedOwned = true;
|
|
92
|
+
}
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
getStatus() {
|
|
98
|
+
return this.enqueue(async () => {
|
|
99
|
+
if (!this.started)
|
|
100
|
+
throw new Error('Managed DNS server is not started');
|
|
101
|
+
return this.bridge.managedStatus();
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Stop admission immediately, join pending calls and native listener/query
|
|
106
|
+
* cleanup, then confirm child termination. Failed cleanup remains retryable.
|
|
107
|
+
* An instance is single-use; restart with the persisted snapshot revision floor.
|
|
108
|
+
*/
|
|
109
|
+
stop() {
|
|
110
|
+
if (this.stopPromise)
|
|
111
|
+
return this.stopPromise;
|
|
112
|
+
this.closing = true;
|
|
113
|
+
const operation = this.queue.then(async () => {
|
|
114
|
+
const failures = [];
|
|
115
|
+
if (this.bridge.running) {
|
|
116
|
+
try {
|
|
117
|
+
await this.bridge.managedStop();
|
|
118
|
+
}
|
|
119
|
+
catch (error) {
|
|
120
|
+
failures.push(error);
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
try {
|
|
124
|
+
await this.bridge.terminate();
|
|
125
|
+
}
|
|
126
|
+
catch (error) {
|
|
127
|
+
failures.push(error);
|
|
128
|
+
}
|
|
129
|
+
if (failures.length) {
|
|
130
|
+
this.failedOwned = true;
|
|
131
|
+
throw new AggregateError(failures, 'Managed DNS cleanup failed');
|
|
132
|
+
}
|
|
133
|
+
this.spawned = false;
|
|
134
|
+
this.started = false;
|
|
135
|
+
});
|
|
136
|
+
this.stopPromise = operation;
|
|
137
|
+
operation.catch(() => { this.stopPromise = null; });
|
|
138
|
+
return operation;
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5tYW5hZ2VkZG5zc2VydmVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2NsYXNzZXMubWFuYWdlZGRuc3NlcnZlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsYUFBYSxFQUE4QixNQUFNLDRCQUE0QixDQUFDO0FBQ3ZGLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBU3hDOzs7OztHQUtHO0FBQ0gsTUFBTSxPQUFPLGdCQUFnQjtJQVUzQixZQUFZLE9BQWlDLEVBQUUsaUJBQXdDLEVBQUU7UUFQakYsVUFBSyxHQUFxQixPQUFPLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDNUMsWUFBTyxHQUFHLEtBQUssQ0FBQztRQUNoQixZQUFPLEdBQUcsS0FBSyxDQUFDO1FBQ2hCLFlBQU8sR0FBRyxLQUFLLENBQUM7UUFDaEIsZ0JBQVcsR0FBRyxLQUFLLENBQUM7UUFDcEIsZ0JBQVcsR0FBeUIsSUFBSSxDQUFDO1FBRy9DLElBQUksQ0FBQyxPQUFPLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDbEQsQ0FBQztJQUVPLE9BQU8sQ0FBSSxTQUEyQjtRQUM1QyxJQUFJLElBQUksQ0FBQyxPQUFPLElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3JDLE9BQU8sT0FBTyxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyxrREFBa0QsQ0FBQyxDQUFDLENBQUM7UUFDdkYsQ0FBQztRQUNELE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFO1lBQ3hDLElBQUksSUFBSSxDQUFDLE9BQU8sSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUM7Z0JBQ3JDLE1BQU0sSUFBSSxLQUFLLENBQUMsa0RBQWtELENB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
|
|
@@ -1,5 +1,26 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
+
import type { IManagedDnsClockEvidence, IManagedDnsRevision, IManagedDnsServerOptions, IManagedDnsSnapshot, IManagedDnsStatus } from './interfaces.managed.js';
|
|
2
3
|
export type TDnsCommands = {
|
|
4
|
+
managedClock: {
|
|
5
|
+
params: Record<string, never>;
|
|
6
|
+
result: IManagedDnsClockEvidence;
|
|
7
|
+
};
|
|
8
|
+
managedStart: {
|
|
9
|
+
params: IManagedDnsServerOptions;
|
|
10
|
+
result: IManagedDnsStatus;
|
|
11
|
+
};
|
|
12
|
+
managedApply: {
|
|
13
|
+
params: IManagedDnsSnapshot;
|
|
14
|
+
result: IManagedDnsRevision;
|
|
15
|
+
};
|
|
16
|
+
managedStatus: {
|
|
17
|
+
params: Record<string, never>;
|
|
18
|
+
result: IManagedDnsStatus;
|
|
19
|
+
};
|
|
20
|
+
managedStop: {
|
|
21
|
+
params: Record<string, never>;
|
|
22
|
+
result: Record<string, never>;
|
|
23
|
+
};
|
|
3
24
|
start: {
|
|
4
25
|
params: {
|
|
5
26
|
config: IRustDnsConfig;
|
|
@@ -89,16 +110,25 @@ export interface IDnsQueryEvent {
|
|
|
89
110
|
questions: IIpcDnsQuestion[];
|
|
90
111
|
dnssecRequested: boolean;
|
|
91
112
|
}
|
|
113
|
+
export interface IRustDnsBridgeOptions {
|
|
114
|
+
/** Installer-verified absolute native executable. Disables every lookup fallback. */
|
|
115
|
+
binaryPath?: string;
|
|
116
|
+
}
|
|
92
117
|
/**
|
|
93
118
|
* Bridge to the Rust DNS binary via smartrust IPC.
|
|
94
119
|
*/
|
|
95
120
|
export declare class RustDnsBridge extends plugins.events.EventEmitter {
|
|
96
121
|
private bridge;
|
|
97
|
-
constructor();
|
|
122
|
+
constructor(options?: IRustDnsBridgeOptions);
|
|
98
123
|
/**
|
|
99
124
|
* Spawn the Rust binary and wait for readiness.
|
|
100
125
|
*/
|
|
101
126
|
spawn(): Promise<boolean>;
|
|
127
|
+
managedClock(): Promise<IManagedDnsClockEvidence>;
|
|
128
|
+
managedStart(options: IManagedDnsServerOptions): Promise<IManagedDnsStatus>;
|
|
129
|
+
managedApply(snapshot: IManagedDnsSnapshot): Promise<IManagedDnsRevision>;
|
|
130
|
+
managedStatus(): Promise<IManagedDnsStatus>;
|
|
131
|
+
managedStop(): Promise<void>;
|
|
102
132
|
/**
|
|
103
133
|
* Start the DNS server with given config.
|
|
104
134
|
*/
|
|
@@ -3,23 +3,29 @@ import * as plugins from './plugins.js';
|
|
|
3
3
|
* Bridge to the Rust DNS binary via smartrust IPC.
|
|
4
4
|
*/
|
|
5
5
|
export class RustDnsBridge extends plugins.events.EventEmitter {
|
|
6
|
-
constructor() {
|
|
6
|
+
constructor(options = {}) {
|
|
7
7
|
super();
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
8
|
+
if (options.binaryPath !== undefined
|
|
9
|
+
&& (typeof options.binaryPath !== 'string' || !plugins.path.isAbsolute(options.binaryPath))) {
|
|
10
|
+
throw new TypeError('DNS binaryPath must be an absolute executable path');
|
|
11
|
+
}
|
|
11
12
|
const localPaths = [];
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
13
|
+
if (options.binaryPath === undefined) {
|
|
14
|
+
const packageDir = plugins.path.resolve(plugins.path.dirname(new URL(import.meta.url).pathname), '..');
|
|
15
|
+
const platformSuffix = getPlatformSuffix();
|
|
16
|
+
if (platformSuffix) {
|
|
17
|
+
if (process.platform === 'linux') {
|
|
18
|
+
localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns_${platformSuffix}_musl`));
|
|
19
|
+
}
|
|
20
|
+
localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns_${platformSuffix}`));
|
|
21
|
+
}
|
|
22
|
+
localPaths.push(plugins.path.join(packageDir, 'dist_rust', 'rustdns'));
|
|
23
|
+
localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'release', 'rustdns'));
|
|
24
|
+
localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'debug', 'rustdns'));
|
|
15
25
|
}
|
|
16
|
-
// dist_rust/ without suffix (native build)
|
|
17
|
-
localPaths.push(plugins.path.join(packageDir, 'dist_rust', 'rustdns'));
|
|
18
|
-
// Local dev build paths
|
|
19
|
-
localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'release', 'rustdns'));
|
|
20
|
-
localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'debug', 'rustdns'));
|
|
21
26
|
this.bridge = new plugins.smartrust.RustBridge({
|
|
22
27
|
binaryName: 'rustdns',
|
|
28
|
+
binaryPath: options.binaryPath,
|
|
23
29
|
cliArgs: ['--management'],
|
|
24
30
|
requestTimeoutMs: 30_000,
|
|
25
31
|
readyTimeoutMs: 10_000,
|
|
@@ -55,6 +61,21 @@ export class RustDnsBridge extends plugins.events.EventEmitter {
|
|
|
55
61
|
async spawn() {
|
|
56
62
|
return this.bridge.spawn();
|
|
57
63
|
}
|
|
64
|
+
managedClock() {
|
|
65
|
+
return this.bridge.sendCommand('managedClock', {});
|
|
66
|
+
}
|
|
67
|
+
managedStart(options) {
|
|
68
|
+
return this.bridge.sendCommand('managedStart', options);
|
|
69
|
+
}
|
|
70
|
+
managedApply(snapshot) {
|
|
71
|
+
return this.bridge.sendCommand('managedApply', snapshot);
|
|
72
|
+
}
|
|
73
|
+
managedStatus() {
|
|
74
|
+
return this.bridge.sendCommand('managedStatus', {});
|
|
75
|
+
}
|
|
76
|
+
async managedStop() {
|
|
77
|
+
await this.bridge.sendCommand('managedStop', {});
|
|
78
|
+
}
|
|
58
79
|
/**
|
|
59
80
|
* Start the DNS server with given config.
|
|
60
81
|
*/
|
|
@@ -146,4 +167,4 @@ function getPlatformSuffix() {
|
|
|
146
167
|
}
|
|
147
168
|
return null;
|
|
148
169
|
}
|
|
149
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2NsYXNzZXMucnVzdGRuc2JyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFHeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUc1RCxZQUFZLFVBQWlDLEVBQUU7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUztlQUMvQixDQUFDLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBRUQsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO1FBQ2hDLElBQUksT0FBTyxDQUFDLFVBQVUsS0FBSyxTQUFTLEVBQUUsQ0FBQztZQUNyQyxNQUFNLFVBQVUsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FDckMsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxHQUFHLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsRUFDdkQsSUFBSSxDQUNMLENBQUM7WUFDRixNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1lBQzNDLElBQUksY0FBYyxFQUFFLENBQUM7Z0JBQ25CLElBQUksT0FBTyxDQUFDLFFBQVEsS0FBSyxPQUFPLEVBQUUsQ0FBQztvQkFDakMsVUFBVSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxVQUFVLEVBQUUs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
|
package/dist_ts_server/index.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
export * from './classes.dnsserver.js';
|
|
2
2
|
export * from './classes.rustdnsbridge.js';
|
|
3
|
-
|
|
3
|
+
export * from './classes.manageddnsserver.js';
|
|
4
|
+
export * from './interfaces.managed.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDO0FBQzNDLGNBQWMsK0JBQStCLENBQUM7QUFDOUMsY0FBYyx5QkFBeUIsQ0FBQyJ9
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/** Kernel boot identity and suspend-inclusive Linux CLOCK_BOOTTIME evidence. */
|
|
2
|
+
export interface IManagedDnsClockEvidence {
|
|
3
|
+
bootId: string;
|
|
4
|
+
boottimeMs: number;
|
|
5
|
+
}
|
|
6
|
+
export interface IManagedDnsRevision {
|
|
7
|
+
revision: number;
|
|
8
|
+
/** SHA-256 of the native typed snapshot encoding, returned by applySnapshot. */
|
|
9
|
+
contentHash: string;
|
|
10
|
+
}
|
|
11
|
+
export interface IManagedDnsServerOptions {
|
|
12
|
+
ownerId: string;
|
|
13
|
+
/** Exact IP literal; wildcard listeners are forbidden. */
|
|
14
|
+
bindAddress: string;
|
|
15
|
+
/** UDP and TCP use the same port. Zero allocates one available port. */
|
|
16
|
+
port: number;
|
|
17
|
+
/** Persist this fence alongside the complete accepted snapshot. */
|
|
18
|
+
revisionFloor: IManagedDnsRevision | null;
|
|
19
|
+
/** Other node-local resolver addresses, forbidden as forwarding destinations. */
|
|
20
|
+
forbiddenUpstreamAddresses: string[];
|
|
21
|
+
}
|
|
22
|
+
export interface IManagedDnsSnapshot {
|
|
23
|
+
ownerId: string;
|
|
24
|
+
revision: number;
|
|
25
|
+
/** Authenticated parent projection's SHA-256; not a signature substitute. */
|
|
26
|
+
sourceContentHash: string;
|
|
27
|
+
/** Explicit withdrawal. A null configuration retains the revision fence. */
|
|
28
|
+
configuration: IManagedDnsConfiguration | null;
|
|
29
|
+
}
|
|
30
|
+
export interface IManagedDnsConfiguration {
|
|
31
|
+
bootId: string;
|
|
32
|
+
/** Absolute CLOCK_BOOTTIME milliseconds, never wall clock or JS performance.now. */
|
|
33
|
+
validUntilBoottimeMs: number;
|
|
34
|
+
blockedSuffixes: string[];
|
|
35
|
+
views: IManagedDnsView[];
|
|
36
|
+
clients: IManagedDnsClient[];
|
|
37
|
+
}
|
|
38
|
+
export interface IManagedDnsClient {
|
|
39
|
+
/** Kernel-observed source IP, whose workload/interface binding the owner enforces. */
|
|
40
|
+
address: string;
|
|
41
|
+
viewId: string;
|
|
42
|
+
}
|
|
43
|
+
export interface IManagedDnsView {
|
|
44
|
+
id: string;
|
|
45
|
+
zones: string[];
|
|
46
|
+
/** Declared names with no eligible records return authoritative NODATA. */
|
|
47
|
+
names: IManagedDnsDeclaredName[];
|
|
48
|
+
negativeTtl: number;
|
|
49
|
+
forwarding: IManagedDnsForwarding | null;
|
|
50
|
+
}
|
|
51
|
+
export interface IManagedDnsDeclaredName {
|
|
52
|
+
name: string;
|
|
53
|
+
records: IManagedDnsRecord[];
|
|
54
|
+
}
|
|
55
|
+
export interface IManagedDnsRecord {
|
|
56
|
+
type: 'A' | 'AAAA' | 'PTR';
|
|
57
|
+
data: string;
|
|
58
|
+
ttl: number;
|
|
59
|
+
validUntilBoottimeMs: number;
|
|
60
|
+
}
|
|
61
|
+
export interface IManagedDnsForwarding {
|
|
62
|
+
upstreams: Array<{
|
|
63
|
+
address: string;
|
|
64
|
+
port: number;
|
|
65
|
+
}>;
|
|
66
|
+
/** A single '.' explicitly permits external names outside privacy barriers. */
|
|
67
|
+
/** At most 1,024 suffixes, including unions produced by policy intersection. */
|
|
68
|
+
allowedSuffixes: string[];
|
|
69
|
+
timeoutMs: number;
|
|
70
|
+
maxTtl: number;
|
|
71
|
+
}
|
|
72
|
+
export interface IManagedDnsStatus {
|
|
73
|
+
ownerId: string;
|
|
74
|
+
address: string;
|
|
75
|
+
port: number;
|
|
76
|
+
accepted: IManagedDnsRevision | null;
|
|
77
|
+
active: boolean;
|
|
78
|
+
clock: IManagedDnsClockEvidence;
|
|
79
|
+
}
|