@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
package/.smartconfig.json CHANGED
@@ -1,10 +1,12 @@
1
1
  {
2
2
  "@git.zone/tsrust": {
3
3
  "targets": [
4
- "linux_amd64",
5
- "linux_arm64"
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": [],
@@ -0,0 +1,14 @@
1
+ {
2
+ "format": "tsrust.build-provenance.v2",
3
+ "binarySha256": "458bba943f70bd1ab64f520d12a7a128980cb3a793880b72c3e72079f7566823",
4
+ "buildInfo": {
5
+ "projectName": "@push.rocks/smartdns",
6
+ "projectVersion": "8.4.0",
7
+ "gitCommit": "fbbda1bf36bf95d1648ec98bd701bfc2f284c66b",
8
+ "gitDirty": false,
9
+ "builtAt": "2026-09-13T11:11:41.278Z",
10
+ "tsrustVersion": "1.13.0",
11
+ "binary": "rustdns-client",
12
+ "target": "linux_amd64_musl"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "format": "tsrust.build-provenance.v2",
3
+ "binarySha256": "8c6530c2d3357f165e225ea911bc8479d18012f6ff5734cdfd7048a6a12366e5",
4
+ "buildInfo": {
5
+ "projectName": "@push.rocks/smartdns",
6
+ "projectVersion": "8.4.0",
7
+ "gitCommit": "fbbda1bf36bf95d1648ec98bd701bfc2f284c66b",
8
+ "gitDirty": false,
9
+ "builtAt": "2026-09-13T11:11:41.575Z",
10
+ "tsrustVersion": "1.13.0",
11
+ "binary": "rustdns-client",
12
+ "target": "linux_arm64_musl"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "format": "tsrust.build-provenance.v2",
3
+ "binarySha256": "423c14c067089e99b006617f8bf2939b08a75ba42aa986061d9f69790466b12c",
4
+ "buildInfo": {
5
+ "projectName": "@push.rocks/smartdns",
6
+ "projectVersion": "8.4.0",
7
+ "gitCommit": "fbbda1bf36bf95d1648ec98bd701bfc2f284c66b",
8
+ "gitDirty": false,
9
+ "builtAt": "2026-09-13T11:11:41.278Z",
10
+ "tsrustVersion": "1.13.0",
11
+ "binary": "rustdns",
12
+ "target": "linux_amd64_musl"
13
+ }
14
+ }
@@ -0,0 +1,14 @@
1
+ {
2
+ "format": "tsrust.build-provenance.v2",
3
+ "binarySha256": "6185f3673a8ac91da74455a25359d4e038b2308f45f02d8fdb71fee78b6dd18d",
4
+ "buildInfo": {
5
+ "projectName": "@push.rocks/smartdns",
6
+ "projectVersion": "8.4.0",
7
+ "gitCommit": "fbbda1bf36bf95d1648ec98bd701bfc2f284c66b",
8
+ "gitDirty": false,
9
+ "builtAt": "2026-09-13T11:11:41.575Z",
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.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
  };
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zY2xpZW50YnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfY2xpZW50L2NsYXNzZXMucnVzdGRuc2NsaWVudGJyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQXFFeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sbUJBQW1CO0lBSTlCO1FBRlEsaUJBQVksR0FBNEIsSUFBSSxDQUFDO1FBR25ELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUNyQyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUN2RCxJQUFJLENBQ0wsQ0FBQztRQUVGLDJFQUEyRTtRQUMzRSxNQUFNLGNBQWMsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO1FBQzNDLE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUVoQywwRUFBMEU7UUFDMUUsSUFBSSxjQUFjLEVBQUUsQ0FBQztZQUNuQixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsa0JBQWtCLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNsRyxDQUFDO1FBQ0QsMkNBQTJDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxDQUFDLENBQUM7UUFDOUUsd0JBQXdCO1FBQ3hCLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLENBQUMsQ0FBQztRQUM5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
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 readme.hints.md.
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 || 300,
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 readme.hints.md.
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,31 @@ 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
+ /**
117
+ * Linux network-namespace descriptor owned by the caller. Keep it open and bound
118
+ * to the intended namespace until spawn resolves. The child enters that namespace
119
+ * before creating threads or sockets; neither owner closes the caller's descriptor.
120
+ */
121
+ networkNamespaceFd?: number;
122
+ }
92
123
  /**
93
124
  * Bridge to the Rust DNS binary via smartrust IPC.
94
125
  */
95
126
  export declare class RustDnsBridge extends plugins.events.EventEmitter {
96
127
  private bridge;
97
- constructor();
128
+ constructor(options?: IRustDnsBridgeOptions);
98
129
  /**
99
130
  * Spawn the Rust binary and wait for readiness.
100
131
  */
101
132
  spawn(): Promise<boolean>;
133
+ managedClock(): Promise<IManagedDnsClockEvidence>;
134
+ managedStart(options: IManagedDnsServerOptions): Promise<IManagedDnsStatus>;
135
+ managedApply(snapshot: IManagedDnsSnapshot): Promise<IManagedDnsRevision>;
136
+ managedStatus(): Promise<IManagedDnsStatus>;
137
+ managedStop(): Promise<void>;
102
138
  /**
103
139
  * Start the DNS server with given config.
104
140
  */
@@ -3,24 +3,42 @@ 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
- const packageDir = plugins.path.resolve(plugins.path.dirname(new URL(import.meta.url).pathname), '..');
9
- // Determine platform suffix for dist_rust binaries (matches tsrust naming)
10
- const platformSuffix = getPlatformSuffix();
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
+ }
12
+ if (options.networkNamespaceFd !== undefined) {
13
+ if (process.platform !== 'linux') {
14
+ throw new Error('DNS networkNamespaceFd requires Linux');
15
+ }
16
+ if (!Number.isInteger(options.networkNamespaceFd)
17
+ || options.networkNamespaceFd < 0 || options.networkNamespaceFd > 0x7fff_ffff) {
18
+ throw new RangeError('DNS networkNamespaceFd must be a non-negative native file descriptor');
19
+ }
20
+ }
11
21
  const localPaths = [];
12
- // dist_rust/ candidates (tsrust cross-compiled output, platform-specific)
13
- if (platformSuffix) {
14
- localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns_${platformSuffix}`));
22
+ if (options.binaryPath === undefined) {
23
+ const packageDir = plugins.path.resolve(plugins.path.dirname(new URL(import.meta.url).pathname), '..');
24
+ const platformSuffix = getPlatformSuffix();
25
+ if (platformSuffix) {
26
+ if (process.platform === 'linux') {
27
+ localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns_${platformSuffix}_musl`));
28
+ }
29
+ localPaths.push(plugins.path.join(packageDir, 'dist_rust', `rustdns_${platformSuffix}`));
30
+ }
31
+ localPaths.push(plugins.path.join(packageDir, 'dist_rust', 'rustdns'));
32
+ localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'release', 'rustdns'));
33
+ localPaths.push(plugins.path.join(packageDir, 'rust', 'target', 'debug', 'rustdns'));
15
34
  }
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
35
  this.bridge = new plugins.smartrust.RustBridge({
22
36
  binaryName: 'rustdns',
23
- cliArgs: ['--management'],
37
+ binaryPath: options.binaryPath,
38
+ cliArgs: options.networkNamespaceFd === undefined
39
+ ? ['--management'] : ['--management', '--network-namespace-fd', '3'],
40
+ inheritedFileDescriptors: options.networkNamespaceFd === undefined
41
+ ? undefined : [options.networkNamespaceFd],
24
42
  requestTimeoutMs: 30_000,
25
43
  readyTimeoutMs: 10_000,
26
44
  maxPendingRequestsByMethod: {
@@ -55,6 +73,21 @@ export class RustDnsBridge extends plugins.events.EventEmitter {
55
73
  async spawn() {
56
74
  return this.bridge.spawn();
57
75
  }
76
+ managedClock() {
77
+ return this.bridge.sendCommand('managedClock', {});
78
+ }
79
+ managedStart(options) {
80
+ return this.bridge.sendCommand('managedStart', options);
81
+ }
82
+ managedApply(snapshot) {
83
+ return this.bridge.sendCommand('managedApply', snapshot);
84
+ }
85
+ managedStatus() {
86
+ return this.bridge.sendCommand('managedStatus', {});
87
+ }
88
+ async managedStop() {
89
+ await this.bridge.sendCommand('managedStop', {});
90
+ }
58
91
  /**
59
92
  * Start the DNS server with given config.
60
93
  */
@@ -146,4 +179,4 @@ function getPlatformSuffix() {
146
179
  }
147
180
  return null;
148
181
  }
149
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2NsYXNzZXMucnVzdGRuc2JyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQTBGeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUc1RDtRQUNFLEtBQUssRUFBRSxDQUFDO1FBRVIsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQ3JDLE9BQU8sQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQ3ZELElBQUksQ0FDTCxDQUFDO1FBRUYsMkVBQTJFO1FBQzNFLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7UUFDM0MsTUFBTSxVQUFVLEdBQWEsRUFBRSxDQUFDO1FBRWhDLDBFQUEwRTtRQUMxRSxJQUFJLGNBQWMsRUFBRSxDQUFDO1lBQ25CLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxXQUFXLGNBQWMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUMzRixDQUFDO1FBQ0QsMkNBQTJDO1FBQzNDLFVBQVUsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3ZFLHdCQUF3QjtRQUN4QixVQUFVLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FBQyxDQUFDO1FB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
182
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0ZG5zYnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2NsYXNzZXMucnVzdGRuc2JyaWRnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEtBQUssT0FBTyxNQUFNLGNBQWMsQ0FBQztBQTJHeEM7O0dBRUc7QUFDSCxNQUFNLE9BQU8sYUFBYyxTQUFRLE9BQU8sQ0FBQyxNQUFNLENBQUMsWUFBWTtJQUc1RCxZQUFZLFVBQWlDLEVBQUU7UUFDN0MsS0FBSyxFQUFFLENBQUM7UUFFUixJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUztlQUMvQixDQUFDLE9BQU8sT0FBTyxDQUFDLFVBQVUsS0FBSyxRQUFRLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQzlGLE1BQU0sSUFBSSxTQUFTLENBQUMsb0RBQW9ELENBQUMsQ0FBQztRQUM1RSxDQUFDO1FBQ0QsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEtBQUssU0FBUyxFQUFFLENBQUM7WUFDN0MsSUFBSSxPQUFPLENBQUMsUUFBUSxLQUFLLE9BQU8sRUFBRSxDQUFDO2dCQUNqQyxNQUFNLElBQUksS0FBSyxDQUFDLHVDQUF1QyxDQUFDLENBQUM7WUFDM0QsQ0FBQztZQUNELElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxrQkFBa0IsQ0FBQzttQkFDNUMsT0FBTyxDQUFDLGtCQUFrQixHQUFHLENBQUMsSUFBSSxPQUFPLENBQUMsa0JBQWtCLEdBQUcsV0FBVyxFQUFFLENBQUM7Z0JBQ2hGLE1BQU0sSUFBSSxVQUFVLENBQUMsc0VBQXNFLENBQUMsQ0FBQztZQUMvRixDQUFDO1FBQ0gsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFhLEVBQUUsQ0FBQztRQUNoQyxJQUFJLE9BQU8sQ0FBQyxVQUFVLEtBQUssU0FBUyxFQUFF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
@@ -1,2 +1,4 @@
1
1
  export * from './classes.dnsserver.js';
2
2
  export * from './classes.rustdnsbridge.js';
3
+ export * from './classes.manageddnsserver.js';
4
+ export * from './interfaces.managed.js';
@@ -1,3 +1,5 @@
1
1
  export * from './classes.dnsserver.js';
2
2
  export * from './classes.rustdnsbridge.js';
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi90c19zZXJ2ZXIvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYyx3QkFBd0IsQ0FBQztBQUN2QyxjQUFjLDRCQUE0QixDQUFDIn0=
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
+ }
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW50ZXJmYWNlcy5tYW5hZ2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfc2VydmVyL2ludGVyZmFjZXMubWFuYWdlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIn0=