@camstack/system 1.2.419 → 1.2.421

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 (77) hide show
  1. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.js +1 -1
  2. package/dist/builtins/addon-pages-aggregator/addon-pages-aggregator.addon.mjs +1 -1
  3. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.js +1 -1
  4. package/dist/builtins/addon-widgets-aggregator/addon-widgets-aggregator.addon.mjs +1 -1
  5. package/dist/builtins/alerts/alerts.addon.js +1 -1
  6. package/dist/builtins/alerts/alerts.addon.mjs +1 -1
  7. package/dist/builtins/autotrack/index.js +1 -1
  8. package/dist/builtins/autotrack/index.mjs +1 -1
  9. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.js +2 -2
  10. package/dist/builtins/backup-orchestrator/backup-orchestrator.addon.mjs +2 -2
  11. package/dist/builtins/calendars/calendars.addon.js +1 -1
  12. package/dist/builtins/calendars/calendars.addon.mjs +1 -1
  13. package/dist/builtins/camera-grid/index.js +1 -1
  14. package/dist/builtins/camera-grid/index.mjs +1 -1
  15. package/dist/builtins/composer/composer.addon.js +2 -2
  16. package/dist/builtins/composer/composer.addon.mjs +2 -2
  17. package/dist/builtins/console-logging/index.js +1 -1
  18. package/dist/builtins/console-logging/index.mjs +1 -1
  19. package/dist/builtins/core-blocks/core-blocks.addon.js +2 -2
  20. package/dist/builtins/core-blocks/core-blocks.addon.mjs +2 -2
  21. package/dist/builtins/device-manager/contribution-cache.d.ts +18 -1
  22. package/dist/builtins/device-manager/device-aggregation.d.ts +7 -1
  23. package/dist/builtins/device-manager/device-manager.addon.js +53 -8
  24. package/dist/builtins/device-manager/device-manager.addon.mjs +53 -8
  25. package/dist/builtins/hub-forwarder/index.js +1 -1
  26. package/dist/builtins/hub-forwarder/index.mjs +1 -1
  27. package/dist/builtins/keychain/index.js +3 -3
  28. package/dist/builtins/keychain/index.mjs +3 -3
  29. package/dist/builtins/liveness-monitor/liveness-monitor.addon.js +1 -1
  30. package/dist/builtins/liveness-monitor/liveness-monitor.addon.mjs +1 -1
  31. package/dist/builtins/local-auth/local-auth.addon.js +2 -2
  32. package/dist/builtins/local-auth/local-auth.addon.mjs +2 -2
  33. package/dist/builtins/local-network/local-network.addon.js +1 -1
  34. package/dist/builtins/local-network/local-network.addon.mjs +1 -1
  35. package/dist/builtins/loki-logging/index.js +1 -1
  36. package/dist/builtins/loki-logging/index.mjs +1 -1
  37. package/dist/builtins/native-metrics/native-metrics.addon.js +1 -1
  38. package/dist/builtins/native-metrics/native-metrics.addon.mjs +1 -1
  39. package/dist/builtins/platform-probe/index.js +1 -1
  40. package/dist/builtins/platform-probe/index.mjs +1 -1
  41. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.js +1 -1
  42. package/dist/builtins/remote-access-orchestrator/remote-access-orchestrator.addon.mjs +1 -1
  43. package/dist/builtins/snapshot/index.js +1 -1
  44. package/dist/builtins/snapshot/index.mjs +1 -1
  45. package/dist/builtins/sqlite-storage/filesystem-storage.addon.js +1 -1
  46. package/dist/builtins/sqlite-storage/filesystem-storage.addon.mjs +1 -1
  47. package/dist/builtins/sqlite-storage/sqlite-settings.addon.js +0 -0
  48. package/dist/builtins/sqlite-storage/sqlite-settings.addon.mjs +0 -0
  49. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.js +1 -1
  50. package/dist/builtins/storage-orchestrator/storage-orchestrator.addon.mjs +1 -1
  51. package/dist/builtins/system-config/system-config.addon.js +138 -18
  52. package/dist/builtins/system-config/system-config.addon.mjs +138 -19
  53. package/dist/builtins/winston-logging/index.js +1 -1
  54. package/dist/builtins/winston-logging/index.mjs +1 -1
  55. package/dist/{composition-sources-562ib2dL.mjs → composition-sources-DoYpCPtl.mjs} +1 -1
  56. package/dist/{composition-sources-OaDYklhR.js → composition-sources-DxlTUSI1.js} +1 -1
  57. package/dist/{constants-BeQWXybC.mjs → constants-CtxNK2QJ.mjs} +1 -1
  58. package/dist/{constants-ik5xtasS.js → constants-GXZQRcjB.js} +1 -1
  59. package/dist/{dist-C0wYvAHC.mjs → dist-0OD9ue39.mjs} +106 -2
  60. package/dist/{dist-DLHPmdoV.js → dist-Df7s77se.js} +106 -2
  61. package/dist/index.js +187 -19
  62. package/dist/index.mjs +183 -21
  63. package/dist/{jwt-signing-key-CWmNKLQi.js → jwt-signing-key-BmyvxlDJ.js} +1 -1
  64. package/dist/{jwt-signing-key-dkTVfsLI.mjs → jwt-signing-key-W-WFzAoK.mjs} +1 -1
  65. package/dist/kernel/index.d.ts +5 -1
  66. package/dist/kernel/moleculer/agent-event-scope.d.ts +49 -0
  67. package/dist/kernel/moleculer/agent-mesh-authenticator.d.ts +15 -3
  68. package/dist/kernel/moleculer/broker-factory.d.ts +6 -0
  69. package/dist/kernel/moleculer/mesh-access-middleware.d.ts +8 -4
  70. package/dist/kernel/moleculer/mesh-join-hold.d.ts +85 -0
  71. package/dist/kernel/moleculer/mesh-mtls/index.d.ts +1 -1
  72. package/dist/kernel/moleculer/mesh-mtls/tls-tcp-transporter.d.ts +65 -4
  73. package/dist/{restore-archive-gGHgAZsz.mjs → restore-archive-BUMSox6L.mjs} +1 -1
  74. package/dist/{restore-archive-DZeFVS2l.js → restore-archive-W1Cg5y6C.js} +1 -1
  75. package/dist/{retired-settings-keys-DibNtLmU.js → retired-settings-keys-D-Xv1Zyv.js} +1 -1
  76. package/dist/{retired-settings-keys-BHlKEYNL.mjs → retired-settings-keys-Wz92bcuK.mjs} +1 -1
  77. package/package.json +1 -1
@@ -1,5 +1,7 @@
1
1
  import type { Server as NetServer, Socket as NetSocket } from "node:net";
2
2
  import { type MeshCrl } from "./mesh-crl.js";
3
+ /** Field of the gossip HELLO payload carrying the sender's mesh-TLS listen port. */
4
+ export declare const MESH_TLS_PORT_HELLO_FIELD = "meshTlsPort";
3
5
  type TcpTransporterConstructor = new (opts?: Record<string, unknown>) => TlsTcpTransporterBase;
4
6
  declare const TcpTransporterBase: TcpTransporterConstructor;
5
7
  interface TlsTcpTransporterBase {
@@ -34,6 +36,13 @@ interface TlsTcpTransporterBase {
34
36
  registry: {
35
37
  regenerateLocalRawInfo(force: boolean): void;
36
38
  };
39
+ broker: {
40
+ serializer: {
41
+ serialize(payload: unknown, type: string): Buffer;
42
+ deserialize(buf: Buffer, type: string): unknown;
43
+ };
44
+ };
45
+ nodeID: string;
37
46
  startTcpServer(): Promise<number>;
38
47
  startUdpServer(): Promise<void>;
39
48
  startTimers(): void;
@@ -43,6 +52,7 @@ interface TlsTcpTransporterBase {
43
52
  disconnect(): Promise<void>;
44
53
  onIncomingMessage(type: string, message: Buffer, socket?: NetSocket): unknown;
45
54
  receive(cmd: string, data: Buffer, socket?: NetSocket): unknown;
55
+ publish(packet: OutgoingPacket): Promise<unknown>;
46
56
  deserialize(type: string, data: Buffer): {
47
57
  payload: {
48
58
  sender?: string;
@@ -71,7 +81,38 @@ export interface TlsTcpTransporterOptions {
71
81
  readonly crl?: MeshCrl;
72
82
  /** Hub only (D826): never bind clear TCP or UDP discovery. */
73
83
  readonly hubTlsOnly?: boolean;
84
+ /**
85
+ * Enrolled agent only (D848): the hub is the only mesh peer — no clear
86
+ * reader, TLS accepted from the hub's certificate only, nothing dialled but
87
+ * the hub, other nodes in the hub's gossip ignored.
88
+ */
89
+ readonly hubOnlyPeers?: boolean;
90
+ /** The hub's node id (default `hub`). */
91
+ readonly hubNodeId?: string;
92
+ /**
93
+ * Port to dial a TLS peer on when it advertises none (default: `tlsPort`).
94
+ * An agent sets the hub's TLS port here; its own listener stays on `tlsPort`.
95
+ */
96
+ readonly peerTlsPort?: number;
97
+ }
98
+ /** A packet on its way out (Moleculer `Packet`). */
99
+ interface OutgoingPacket {
100
+ readonly type: string;
101
+ readonly target: string | null;
102
+ readonly payload: Record<string, unknown>;
103
+ }
104
+ /** The mesh-TLS port a gossip HELLO payload advertises, or null. */
105
+ export declare function helloMeshTlsPort(payload: unknown): number | null;
106
+ /** A gossip payload with only the kept nodes, and the ids that were removed. */
107
+ export interface FilteredGossip {
108
+ readonly payload: unknown;
109
+ readonly removed: readonly string[];
74
110
  }
111
+ /**
112
+ * A gossip response with every node but `keep` removed. With nothing to
113
+ * remove the payload is returned unchanged.
114
+ */
115
+ export declare function keepOnlyGossipNodes(payload: unknown, keep: ReadonlySet<string>): FilteredGossip;
75
116
  export declare class TlsTcpTransporter extends TcpTransporterBase {
76
117
  private tlsServer;
77
118
  private meshTls;
@@ -81,19 +122,29 @@ export declare class TlsTcpTransporter extends TcpTransporterBase {
81
122
  private readonly tlsPeers;
82
123
  private clearDisabled;
83
124
  private readonly hubTlsOnly;
125
+ private readonly hubOnlyPeers;
126
+ private readonly hubNodeId;
127
+ private readonly peerTlsPortOption;
128
+ /** Peers already reported as not adopted (D848) — one line each. */
129
+ private readonly ignoredPeers;
130
+ /** Node id → the mesh-TLS port its last HELLO advertised. */
131
+ private readonly helloTlsPorts;
84
132
  /** Clear-text `TcpWriter.connect` captured once before the TLS wrap (A→B). */
85
133
  private clearWriterConnect;
86
134
  private writerTlsPatched;
87
135
  constructor(opts?: TlsTcpTransporterOptions);
136
+ /** Clear TCP is never served: the TLS-only hub, or an agent whose only peer is the hub. */
137
+ private get tlsOnly();
88
138
  override startTcpServer(): Promise<number>;
89
139
  override connect(): Promise<void>;
90
140
  /**
91
- * Outbound dial uses mTLS when the peer is already known on TLS (inbound
92
- * handshake), or when dialling the hub node id (agent → hub). Everyone else
93
- * (runners, unenrolled agents) stays on the clear writer — the hub must not
94
- * TLS-wrap every `connect` after deferred `enableMeshTls`.
141
+ * Outbound dial uses mTLS when dialling the hub node id (agent → hub), on a
142
+ * TLS-only hub (it has no clear listener, so no clear peer exists to dial —
143
+ * D848 closes the hub → agent clear leg), or when the peer is already known
144
+ * on TLS (inbound handshake).
95
145
  */
96
146
  private shouldDialPeerWithTls;
147
+ /** The peer's advertised mesh-TLS port, else the configured dial port, else 6443. */
97
148
  private peerTlsDialPort;
98
149
  /**
99
150
  * Wrap `TcpWriter.connect` so TLS peers are dialed with mutual TLS on the
@@ -135,6 +186,16 @@ export declare class TlsTcpTransporter extends TcpTransporterBase {
135
186
  /** Close sockets whose peer serial was just revoked. */
136
187
  dropRevokedSockets(): void;
137
188
  override disconnect(): Promise<void>;
189
+ /**
190
+ * D848: an enrolled agent adopts no node from the hub's gossip but the hub
191
+ * itself, so it never learns — and therefore never dials or broadcasts to —
192
+ * another agent. Everything else is Moleculer's own handling.
193
+ */
194
+ override receive(cmd: string, data: Buffer, socket?: NetSocket): unknown;
195
+ /** Remember the TLS port a peer's HELLO advertises (absent: an older node → the default). */
196
+ private noteHelloTlsPort;
197
+ /** A TLS-listening node says where in every HELLO it sends. */
198
+ override publish(packet: OutgoingPacket): Promise<unknown>;
138
199
  override onIncomingMessage(type: string, message: Buffer, socket?: NetSocket): unknown;
139
200
  private startTlsServerIfReady;
140
201
  private onTlsClientConnected;
@@ -1,4 +1,4 @@
1
- import { g as DATABASE_SNAPSHOT_SUFFIX } from "./dist-C0wYvAHC.mjs";
1
+ import { g as DATABASE_SNAPSHOT_SUFFIX } from "./dist-0OD9ue39.mjs";
2
2
  import { createCipheriv, createDecipheriv, createHash, createPrivateKey, createPublicKey, diffieHellman, generateKeyPairSync, hkdfSync, randomBytes } from "node:crypto";
3
3
  import { Buffer as Buffer$1 } from "buffer";
4
4
  import * as fsp from "node:fs/promises";
@@ -1,5 +1,5 @@
1
1
  const require_chunk = require("./chunk-Cek0wNdY.js");
2
- const require_dist = require("./dist-DLHPmdoV.js");
2
+ const require_dist = require("./dist-Df7s77se.js");
3
3
  let node_crypto = require("node:crypto");
4
4
  let buffer = require("buffer");
5
5
  let node_fs_promises = require("node:fs/promises");
@@ -1,4 +1,4 @@
1
- const require_dist = require("./dist-DLHPmdoV.js");
1
+ const require_dist = require("./dist-Df7s77se.js");
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
@@ -1,4 +1,4 @@
1
- import { vr as asJsonObject } from "./dist-C0wYvAHC.mjs";
1
+ import { vr as asJsonObject } from "./dist-0OD9ue39.mjs";
2
2
  //#region src/builtins/sqlite-storage/retired-settings-keys.ts
3
3
  /**
4
4
  * Is THIS node the one whose settings store is the cluster's authority?
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@camstack/system",
3
- "version": "1.2.419",
3
+ "version": "1.2.421",
4
4
  "description": "Core addon for CamStack — builtins, pipeline, process management, auth, logging, events",
5
5
  "keywords": [
6
6
  "camstack",