@modularizer/plat 0.7.0 → 0.8.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 (34) hide show
  1. package/dist/client-server-entry.d.ts +1 -0
  2. package/dist/client-server-entry.d.ts.map +1 -1
  3. package/dist/client-server-entry.js +1 -0
  4. package/dist/client-server-entry.js.map +1 -1
  5. package/dist/client-side-server/identity.d.ts +4 -2
  6. package/dist/client-side-server/identity.d.ts.map +1 -1
  7. package/dist/client-side-server/identity.js +30 -2
  8. package/dist/client-side-server/identity.js.map +1 -1
  9. package/dist/client-side-server/mqtt-webrtc.d.ts +84 -3
  10. package/dist/client-side-server/mqtt-webrtc.d.ts.map +1 -1
  11. package/dist/client-side-server/mqtt-webrtc.js +263 -10
  12. package/dist/client-side-server/mqtt-webrtc.js.map +1 -1
  13. package/dist/client-side-server/protocol.d.ts +46 -1
  14. package/dist/client-side-server/protocol.d.ts.map +1 -1
  15. package/dist/client-side-server/protocol.js +7 -0
  16. package/dist/client-side-server/protocol.js.map +1 -1
  17. package/dist/client-side-server/runtime.d.ts +7 -1
  18. package/dist/client-side-server/runtime.d.ts.map +1 -1
  19. package/dist/client-side-server/runtime.js +4 -0
  20. package/dist/client-side-server/runtime.js.map +1 -1
  21. package/dist/client-side-server/server.d.ts +17 -1
  22. package/dist/client-side-server/server.d.ts.map +1 -1
  23. package/dist/client-side-server/server.js +61 -1
  24. package/dist/client-side-server/server.js.map +1 -1
  25. package/dist/client-side-server/worker-pool.d.ts +20 -0
  26. package/dist/client-side-server/worker-pool.d.ts.map +1 -0
  27. package/dist/client-side-server/worker-pool.js +336 -0
  28. package/dist/client-side-server/worker-pool.js.map +1 -0
  29. package/dist/server/authority-server.d.ts +1 -1
  30. package/dist/server/authority-server.d.ts.map +1 -1
  31. package/dist/server/authority-server.js +27 -14
  32. package/dist/server/authority-server.js.map +1 -1
  33. package/dist/server/server.js +1 -1
  34. package/package.json +1 -1
@@ -0,0 +1,336 @@
1
+ import { clientSideServerPublicKeysEqual } from './identity.js';
2
+ import { parseClientSideServerAddress } from './signaling.js';
3
+ import { connectFirstDiscovery, createClientSideServerMQTTWebRTCPeerSession, discoverClientSideServers, } from './mqtt-webrtc.js';
4
+ export function createClientSideServerMultiWorkerPool(options = {}) {
5
+ const sessions = new Map();
6
+ const normalizeAddress = (input) => typeof input === 'string' ? parseClientSideServerAddress(input) : input;
7
+ return {
8
+ async connect(input) {
9
+ const address = normalizeAddress(input);
10
+ const existing = sessions.get(address.href);
11
+ if (existing) {
12
+ const session = await existing;
13
+ if (session.isOpen())
14
+ return session;
15
+ sessions.delete(address.href);
16
+ }
17
+ const created = createWorkerPoolSession(address, options);
18
+ sessions.set(address.href, created);
19
+ try {
20
+ return await created;
21
+ }
22
+ catch (error) {
23
+ sessions.delete(address.href);
24
+ throw error;
25
+ }
26
+ },
27
+ async close(input) {
28
+ const address = normalizeAddress(input);
29
+ const existing = sessions.get(address.href);
30
+ if (!existing)
31
+ return;
32
+ sessions.delete(address.href);
33
+ const session = await existing;
34
+ await session.close();
35
+ },
36
+ async closeAll() {
37
+ const pending = Array.from(sessions.values());
38
+ sessions.clear();
39
+ for (const p of pending) {
40
+ const session = await p;
41
+ await session.close();
42
+ }
43
+ },
44
+ };
45
+ }
46
+ async function createWorkerPoolSession(address, options) {
47
+ const poolOpts = options.workerPool ?? {};
48
+ const maxActive = poolOpts.maxActiveWorkers ?? 1;
49
+ const maxStandby = poolOpts.maxStandbyWorkers ?? 0;
50
+ const maxTotal = poolOpts.maxTotalConnections ?? (maxActive + maxStandby);
51
+ const rediscoveryThreshold = poolOpts.rediscoveryThreshold ?? 1;
52
+ const healthIntervalMs = poolOpts.healthCheckIntervalMs ?? 10_000;
53
+ const healthTimeoutMs = poolOpts.healthCheckTimeoutMs ?? 5_000;
54
+ const routingStrategy = poolOpts.routingStrategy ?? 'weighted-random';
55
+ const workers = [];
56
+ const listeners = new Set();
57
+ let roundRobinIndex = 0;
58
+ let healthTimer;
59
+ let closed = false;
60
+ // Connect to primary immediately while discovering others in parallel
61
+ const { primary, discovery } = await connectFirstDiscovery(address, options);
62
+ const primaryWorker = createWorkerFromSession(primary, true);
63
+ workers.push(primaryWorker);
64
+ // Set up message forwarding from primary
65
+ setupWorkerMessageForwarding(primaryWorker);
66
+ // Connect to additional workers from discovery results in background
67
+ void discovery.then(async (result) => {
68
+ if (closed)
69
+ return;
70
+ await connectAdditionalWorkers(result);
71
+ });
72
+ // Start health checks
73
+ if (healthIntervalMs > 0) {
74
+ healthTimer = setInterval(() => void runHealthChecks(), healthIntervalMs);
75
+ }
76
+ async function connectAdditionalWorkers(result) {
77
+ const newCandidates = result.candidates.filter((c) => !c.alreadyConnected);
78
+ let activeCount = workers.filter((w) => w.status === 'active').length;
79
+ let standbyCount = workers.filter((w) => w.status === 'standby').length;
80
+ let totalCount = workers.length;
81
+ for (const candidate of newCandidates) {
82
+ if (totalCount >= maxTotal)
83
+ break;
84
+ if (closed)
85
+ break;
86
+ const needActive = activeCount < maxActive;
87
+ const needStandby = standbyCount < maxStandby;
88
+ if (!needActive && !needStandby)
89
+ break;
90
+ try {
91
+ const session = await createClientSideServerMQTTWebRTCPeerSession(address, options, candidate.instanceId);
92
+ if (closed) {
93
+ await session.close?.();
94
+ return;
95
+ }
96
+ const worker = createWorkerFromCandidate(session, candidate);
97
+ if (needActive) {
98
+ worker.status = 'active';
99
+ worker.weight = resolveWeight(candidate, options);
100
+ activeCount++;
101
+ }
102
+ else {
103
+ worker.status = 'standby';
104
+ worker.weight = 0;
105
+ standbyCount++;
106
+ }
107
+ workers.push(worker);
108
+ totalCount++;
109
+ setupWorkerMessageForwarding(worker);
110
+ }
111
+ catch {
112
+ // Connection to this candidate failed, skip it
113
+ }
114
+ }
115
+ if (poolOpts.assignWeights) {
116
+ poolOpts.assignWeights(workers);
117
+ }
118
+ }
119
+ function createWorkerFromSession(session, isActive) {
120
+ return {
121
+ instanceId: session.peerId,
122
+ session,
123
+ identity: session.identity,
124
+ status: isActive ? 'active' : 'standby',
125
+ weight: isActive ? 3 : 0,
126
+ serverAdvertisedWeight: 3,
127
+ authorityVerified: false,
128
+ pendingRequests: 0,
129
+ totalRequests: 0,
130
+ totalErrors: 0,
131
+ connectedAt: session.connectedAt,
132
+ lastPongAt: Date.now(),
133
+ };
134
+ }
135
+ function createWorkerFromCandidate(session, candidate) {
136
+ const advertisedWeight = candidate.workerInfo.weight ?? 3;
137
+ return {
138
+ instanceId: candidate.instanceId,
139
+ session,
140
+ identity: candidate.identity,
141
+ authorityRecord: candidate.authorityRecord,
142
+ status: 'verifying',
143
+ weight: 0,
144
+ serverAdvertisedWeight: advertisedWeight,
145
+ authorityVerified: !!candidate.authorityRecord,
146
+ pendingRequests: 0,
147
+ totalRequests: 0,
148
+ totalErrors: 0,
149
+ connectedAt: session.connectedAt,
150
+ lastPongAt: Date.now(),
151
+ };
152
+ }
153
+ function resolveWeight(candidate, opts) {
154
+ // Only trust self-reported weights from authority-verified servers
155
+ if (candidate.authorityRecord) {
156
+ return candidate.workerInfo.weight ?? 3;
157
+ }
158
+ return 3;
159
+ }
160
+ function setupWorkerMessageForwarding(worker) {
161
+ worker.session.subscribe(async (msg) => {
162
+ // Handle control messages
163
+ if ('platcss' in msg) {
164
+ const control = msg;
165
+ if (control.platcss === 'pong') {
166
+ worker.lastPongAt = Date.now();
167
+ return;
168
+ }
169
+ if (control.platcss === 'drain') {
170
+ worker.status = 'draining';
171
+ promoteStandbyIfNeeded();
172
+ return;
173
+ }
174
+ }
175
+ // Forward all other messages to pool subscribers
176
+ for (const listener of listeners) {
177
+ await listener(msg);
178
+ }
179
+ });
180
+ }
181
+ function promoteStandbyIfNeeded() {
182
+ const activeCount = workers.filter((w) => w.status === 'active').length;
183
+ if (activeCount >= maxActive)
184
+ return;
185
+ const standby = workers.find((w) => w.status === 'standby');
186
+ if (standby) {
187
+ standby.status = 'active';
188
+ standby.weight = standby.serverAdvertisedWeight;
189
+ if (poolOpts.assignWeights) {
190
+ poolOpts.assignWeights(workers);
191
+ }
192
+ }
193
+ }
194
+ function maybeRediscover() {
195
+ const activeCount = workers.filter((w) => w.status === 'active').length;
196
+ if (activeCount < rediscoveryThreshold && !closed) {
197
+ void rediscover();
198
+ }
199
+ }
200
+ async function rediscover() {
201
+ if (closed)
202
+ return;
203
+ const result = await discoverClientSideServers(address.serverName, options);
204
+ // Mark candidates that we already have connections to
205
+ for (const candidate of result.candidates) {
206
+ for (const worker of workers) {
207
+ if (worker.identity && candidate.identity
208
+ && clientSideServerPublicKeysEqual(worker.identity.publicKeyJwk, candidate.identity.publicKeyJwk)) {
209
+ candidate.alreadyConnected = true;
210
+ break;
211
+ }
212
+ }
213
+ }
214
+ await connectAdditionalWorkers(result);
215
+ }
216
+ async function runHealthChecks() {
217
+ const now = Date.now();
218
+ for (const worker of workers) {
219
+ if (worker.status !== 'active' && worker.status !== 'standby')
220
+ continue;
221
+ if (!worker.session.isOpen()) {
222
+ worker.status = 'failed';
223
+ promoteStandbyIfNeeded();
224
+ maybeRediscover();
225
+ continue;
226
+ }
227
+ try {
228
+ await worker.session.send({ platcss: 'ping', ts: now });
229
+ }
230
+ catch {
231
+ worker.status = 'failed';
232
+ promoteStandbyIfNeeded();
233
+ maybeRediscover();
234
+ continue;
235
+ }
236
+ // Check if previous ping timed out
237
+ if (worker.lastPongAt && (now - worker.lastPongAt) > (healthIntervalMs + healthTimeoutMs)) {
238
+ worker.status = 'failed';
239
+ promoteStandbyIfNeeded();
240
+ maybeRediscover();
241
+ }
242
+ }
243
+ }
244
+ function selectWorker() {
245
+ const active = workers.filter((w) => w.status === 'active' && w.session.isOpen());
246
+ if (active.length === 0)
247
+ return undefined;
248
+ switch (routingStrategy) {
249
+ case 'round-robin': {
250
+ roundRobinIndex = (roundRobinIndex + 1) % active.length;
251
+ return active[roundRobinIndex];
252
+ }
253
+ case 'least-pending': {
254
+ return active.sort((a, b) => {
255
+ if (a.pendingRequests !== b.pendingRequests)
256
+ return a.pendingRequests - b.pendingRequests;
257
+ return b.weight - a.weight;
258
+ })[0];
259
+ }
260
+ case 'primary-with-fallback': {
261
+ return active.sort((a, b) => b.weight - a.weight)[0];
262
+ }
263
+ case 'weighted-random':
264
+ default: {
265
+ const totalWeight = active.reduce((sum, w) => sum + Math.max(w.weight, 1), 0);
266
+ let rand = Math.random() * totalWeight;
267
+ for (const worker of active) {
268
+ rand -= Math.max(worker.weight, 1);
269
+ if (rand <= 0)
270
+ return worker;
271
+ }
272
+ return active[active.length - 1];
273
+ }
274
+ }
275
+ }
276
+ return {
277
+ address,
278
+ workers,
279
+ isOpen() {
280
+ return workers.some((w) => w.status === 'active' && w.session.isOpen());
281
+ },
282
+ async send(message) {
283
+ const worker = selectWorker();
284
+ if (!worker) {
285
+ throw new Error(`No active workers available for ${address.serverName}`);
286
+ }
287
+ worker.pendingRequests++;
288
+ worker.totalRequests++;
289
+ worker.lastRequestAt = Date.now();
290
+ try {
291
+ await worker.session.send(message);
292
+ }
293
+ catch (error) {
294
+ worker.totalErrors++;
295
+ worker.lastErrorAt = Date.now();
296
+ throw error;
297
+ }
298
+ finally {
299
+ worker.pendingRequests--;
300
+ }
301
+ },
302
+ subscribe(listener) {
303
+ listeners.add(listener);
304
+ return () => listeners.delete(listener);
305
+ },
306
+ async rediscover() {
307
+ await rediscover();
308
+ },
309
+ setWorkerWeight(instanceId, weight) {
310
+ const worker = workers.find((w) => w.instanceId === instanceId);
311
+ if (worker) {
312
+ worker.weight = weight;
313
+ if (weight === 0 && worker.status === 'active') {
314
+ worker.status = 'standby';
315
+ }
316
+ else if (weight > 0 && worker.status === 'standby') {
317
+ worker.status = 'active';
318
+ }
319
+ }
320
+ },
321
+ async close() {
322
+ closed = true;
323
+ if (healthTimer) {
324
+ clearInterval(healthTimer);
325
+ healthTimer = undefined;
326
+ }
327
+ for (const worker of workers) {
328
+ worker.status = 'closed';
329
+ await worker.session.close?.();
330
+ }
331
+ workers.length = 0;
332
+ listeners.clear();
333
+ },
334
+ };
335
+ }
336
+ //# sourceMappingURL=worker-pool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"worker-pool.js","sourceRoot":"","sources":["../../src/client-side-server/worker-pool.ts"],"names":[],"mappings":"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"}
@@ -19,7 +19,7 @@ export interface AuthorityHostExportResponse {
19
19
  export interface PLATAuthorityServerOptions {
20
20
  authorityName?: string;
21
21
  authorityKeyPair: ClientSideServerExportedKeyPair;
22
- knownHosts: Record<string, ClientSideServerTrustedServerRecord>;
22
+ knownHosts: Record<string, ClientSideServerTrustedServerRecord | ClientSideServerTrustedServerRecord[]>;
23
23
  allowServerNames?: string[];
24
24
  allow?: (serverName: string, record: ClientSideServerTrustedServerRecord) => boolean;
25
25
  }
@@ -1 +1 @@
1
- {"version":3,"file":"authority-server.d.ts","sourceRoot":"","sources":["../../src/server/authority-server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,+BAA+B,EAAE,qCAAqC,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAA;AAGjK,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,qCAAqC,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,+BAA+B,CAAA;IACjD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,CAAC,CAAA;IAC/D,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mCAAmC,KAAK,OAAO,CAAA;CACrF;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,0BAA0B,GAClC,UAAU,GAAG,CA0Df"}
1
+ {"version":3,"file":"authority-server.d.ts","sourceRoot":"","sources":["../../src/server/authority-server.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,+BAA+B,EAAE,qCAAqC,EAAE,mCAAmC,EAAE,MAAM,gCAAgC,CAAA;AAGjK,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;CAClB;AAED,MAAM,WAAW,yBAAyB;IACxC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAC9B;AAED,MAAM,WAAW,2BAA2B;IAC1C,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,OAAO,EAAE,qCAAqC,EAAE,CAAA;CACjD;AAED,MAAM,WAAW,0BAA0B;IACzC,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,gBAAgB,EAAE,+BAA+B,CAAA;IACjD,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,mCAAmC,GAAG,mCAAmC,EAAE,CAAC,CAAA;IACvG,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC3B,KAAK,CAAC,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,mCAAmC,KAAK,OAAO,CAAA;CACrF;AAED,wBAAgB,+BAA+B,CAC7C,OAAO,EAAE,0BAA0B,GAClC,UAAU,GAAG,CAsEf"}
@@ -13,15 +13,23 @@ export function createAuthorityServerController(options) {
13
13
  const authorityName = options.authorityName;
14
14
  let AuthorityServerApi = class AuthorityServerApi {
15
15
  async resolveAuthorityHost({ serverName }) {
16
- const record = getAuthorityHostRecord(options, serverName);
17
- if (!record)
16
+ const records = getAuthorityHostRecords(options, serverName);
17
+ if (records.length === 0)
18
18
  return null;
19
- return createSignedClientSideServerAuthorityRecord(options.authorityKeyPair, {
19
+ if (records.length === 1) {
20
+ return createSignedClientSideServerAuthorityRecord(options.authorityKeyPair, {
21
+ serverName,
22
+ publicKeyJwk: records[0].publicKeyJwk,
23
+ keyId: records[0].keyId,
24
+ authorityName,
25
+ });
26
+ }
27
+ return Promise.all(records.map((record) => createSignedClientSideServerAuthorityRecord(options.authorityKeyPair, {
20
28
  serverName,
21
29
  publicKeyJwk: record.publicKeyJwk,
22
30
  keyId: record.keyId,
23
31
  authorityName,
24
- });
32
+ })));
25
33
  }
26
34
  async listAuthorityHosts(input = {}) {
27
35
  const records = selectAuthorityHostRecords(options, input);
@@ -74,19 +82,24 @@ export function createAuthorityServerController(options) {
74
82
  ], AuthorityServerApi);
75
83
  return AuthorityServerApi;
76
84
  }
77
- function getAuthorityHostRecord(options, serverName) {
78
- const record = options.knownHosts[serverName];
79
- if (!record)
80
- return null;
85
+ function getAuthorityHostRecords(options, serverName) {
86
+ const entry = options.knownHosts[serverName];
87
+ if (!entry)
88
+ return [];
81
89
  if (options.allowServerNames && !options.allowServerNames.includes(serverName))
82
- return null;
83
- if (options.allow && !options.allow(serverName, record))
84
- return null;
85
- return record;
90
+ return [];
91
+ const records = Array.isArray(entry) ? entry : [entry];
92
+ return records.filter((record) => !options.allow || options.allow(serverName, record));
86
93
  }
87
94
  function selectAuthorityHostRecords(options, input) {
88
- const filtered = Object.entries(options.knownHosts)
89
- .filter(([serverName, record]) => getAuthorityHostRecord(options, serverName) === record)
95
+ const pairs = [];
96
+ for (const [serverName, entry] of Object.entries(options.knownHosts)) {
97
+ const records = getAuthorityHostRecords(options, serverName);
98
+ for (const record of records) {
99
+ pairs.push([serverName, record]);
100
+ }
101
+ }
102
+ const filtered = pairs
90
103
  .filter(([serverName]) => !input.serverNames?.length || input.serverNames.includes(serverName))
91
104
  .filter(([serverName]) => !input.q || serverName.toLowerCase().includes(input.q.toLowerCase()))
92
105
  .sort(([left], [right]) => left.localeCompare(right));
@@ -1 +1 @@
1
- {"version":3,"file":"authority-server.js","sourceRoot":"","sources":["../../src/server/authority-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"authority-server.js","sourceRoot":"","sources":["../../src/server/authority-server.ts"],"names":[],"mappings":"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"}
@@ -1044,7 +1044,7 @@ export class PLATServer {
1044
1044
  openapi: '3.1.0',
1045
1045
  info: {
1046
1046
  title: 'plat API',
1047
- version: '0.6.0',
1047
+ version: '0.8.0',
1048
1048
  },
1049
1049
  paths,
1050
1050
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@modularizer/plat",
3
- "version": "0.7.0",
3
+ "version": "0.8.0",
4
4
  "description": "Protocol and Language Agnostic Tooling Yielding Universal Semantics",
5
5
  "type": "module",
6
6
  "author": {