@api.global/typedsocket 6.3.0 → 7.0.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/dist_ts/00_commitinfo_data.js +1 -1
- package/dist_ts/classes.typedsocket.d.ts +21 -52
- package/dist_ts/classes.typedsocket.js +264 -358
- package/dist_ts/classes.typedsockettagpolicymanager.d.ts +1 -0
- package/dist_ts/classes.typedsockettagpolicymanager.js +26 -2
- package/dist_ts/classes.virtualstreammanager.d.ts +268 -0
- package/dist_ts/classes.virtualstreammanager.js +2085 -0
- package/dist_ts/constants.virtualstream.d.ts +58 -0
- package/dist_ts/constants.virtualstream.js +58 -0
- package/dist_ts/helpers.virtualstreamcodec.d.ts +14 -0
- package/dist_ts/helpers.virtualstreamcodec.js +349 -0
- package/dist_ts/index.d.ts +5 -9
- package/dist_ts/index.js +3 -6
- package/dist_ts/interfaces.diagnostics.d.ts +6 -18
- package/dist_ts/interfaces.virtualstream.d.ts +131 -0
- package/dist_ts/interfaces.virtualstream.js +2 -0
- package/package.json +5 -5
- package/readme.hints.md +11 -59
- package/readme.md +295 -840
- package/dist_ts/classes.nativebyteerror.d.ts +0 -26
- package/dist_ts/classes.nativebyteerror.js +0 -51
- package/dist_ts/classes.nativebytemanager.d.ts +0 -505
- package/dist_ts/classes.nativebytemanager.js +0 -3691
- package/dist_ts/constants.nativebytes.d.ts +0 -59
- package/dist_ts/constants.nativebytes.js +0 -58
- package/dist_ts/constants.nativemessages.d.ts +0 -45
- package/dist_ts/constants.nativemessages.js +0 -44
- package/dist_ts/helpers.nativebytecodec.d.ts +0 -8
- package/dist_ts/helpers.nativebytecodec.js +0 -328
- package/dist_ts/helpers.nativemessagecodec.d.ts +0 -6
- package/dist_ts/helpers.nativemessagecodec.js +0 -267
- package/dist_ts/interfaces.nativebytes.d.ts +0 -187
- package/dist_ts/interfaces.nativebytes.js +0 -2
- package/dist_ts/interfaces.nativemessages.d.ts +0 -144
- package/dist_ts/interfaces.nativemessages.js +0 -2
|
@@ -1,8 +1,7 @@
|
|
|
1
1
|
import * as plugins from './plugins.js';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import { NativeByteManager } from './classes.nativebytemanager.js';
|
|
2
|
+
import { TYPEDSOCKET_HANDSHAKE_TIMEOUT_MS, TYPEDSOCKET_PACKAGE_MAJOR, TYPEDSOCKET_VERSION_METHOD, } from './constants.virtualstream.js';
|
|
3
|
+
import { createAuthorizedServerVirtualStreamRegistration, VirtualStreamManager, } from './classes.virtualstreammanager.js';
|
|
4
|
+
import { normalizeVirtualStreamContentType, normalizeVirtualStreamIntegrity, } from './helpers.virtualstreamcodec.js';
|
|
6
5
|
import { assertBoundedTextIdentifier, TYPEDSOCKET_MAX_TAG_NAME_BYTES, TypedSocketClientTagDeniedError, TypedSocketTagPolicyManager, } from './classes.typedsockettagpolicymanager.js';
|
|
7
6
|
import { ClientTagReconciler } from './classes.clienttagreconciler.js';
|
|
8
7
|
import { toClientWebSocketCloseCode } from './helpers.websocket.js';
|
|
@@ -37,6 +36,12 @@ export class TypedSocketConnectionRestoreDeniedError extends Error {
|
|
|
37
36
|
this.name = 'TypedSocketConnectionRestoreDeniedError';
|
|
38
37
|
}
|
|
39
38
|
}
|
|
39
|
+
export class TypedSocketHandshakeError extends Error {
|
|
40
|
+
constructor(messageArg, optionsArg) {
|
|
41
|
+
super(messageArg, optionsArg);
|
|
42
|
+
this.name = 'TypedSocketHandshakeError';
|
|
43
|
+
}
|
|
44
|
+
}
|
|
40
45
|
/**
|
|
41
46
|
* Creates a typed connection wrapper around one IWebSocketPeer.
|
|
42
47
|
*/
|
|
@@ -141,6 +146,27 @@ function isPlainRecord(valueArg) {
|
|
|
141
146
|
const prototype = Object.getPrototypeOf(valueArg);
|
|
142
147
|
return prototype === Object.prototype || prototype === null;
|
|
143
148
|
}
|
|
149
|
+
function hasExactEnumerableKeys(valueArg, keysArg) {
|
|
150
|
+
const keys = Object.keys(valueArg);
|
|
151
|
+
return keys.length === keysArg.length && keys.every((keyArg) => keysArg.includes(keyArg));
|
|
152
|
+
}
|
|
153
|
+
function isExactPackageMajorPayload(valueArg) {
|
|
154
|
+
return isPlainRecord(valueArg)
|
|
155
|
+
&& hasExactEnumerableKeys(valueArg, ['packageMajor'])
|
|
156
|
+
&& valueArg.packageMajor === TYPEDSOCKET_PACKAGE_MAJOR;
|
|
157
|
+
}
|
|
158
|
+
function isExactHandshakeResponseEnvelope(valueArg, correlationIdArg) {
|
|
159
|
+
if (!isPlainRecord(valueArg) || !hasExactEnumerableKeys(valueArg, ['method', 'request', 'response', 'correlation']))
|
|
160
|
+
return false;
|
|
161
|
+
const correlation = valueArg.correlation;
|
|
162
|
+
return valueArg.method === TYPEDSOCKET_VERSION_METHOD
|
|
163
|
+
&& isExactPackageMajorPayload(valueArg.request)
|
|
164
|
+
&& isExactPackageMajorPayload(valueArg.response)
|
|
165
|
+
&& isPlainRecord(correlation)
|
|
166
|
+
&& hasExactEnumerableKeys(correlation, ['id', 'phase'])
|
|
167
|
+
&& correlation.id === correlationIdArg
|
|
168
|
+
&& correlation.phase === 'response';
|
|
169
|
+
}
|
|
144
170
|
function isLoopbackHostname(hostnameArg) {
|
|
145
171
|
const hostname = hostnameArg.toLowerCase().replace(/^\[(.*)\]$/, '$1');
|
|
146
172
|
if (hostname === 'localhost' || hostname.endsWith('.localhost') || hostname === '::1') {
|
|
@@ -156,7 +182,7 @@ export class TypedSocket {
|
|
|
156
182
|
// STATIC METHODS
|
|
157
183
|
// ============================================================================
|
|
158
184
|
/**
|
|
159
|
-
* Creates a TypedSocket client using
|
|
185
|
+
* Creates a TypedSocket client using the platform WebSocket implementation.
|
|
160
186
|
* Works in both browser and Node.js environments.
|
|
161
187
|
*
|
|
162
188
|
* @param typedrouterArg - TypedRouter for handling server-initiated requests
|
|
@@ -189,12 +215,10 @@ export class TypedSocket {
|
|
|
189
215
|
initialBackoffMs,
|
|
190
216
|
maxBackoffMs,
|
|
191
217
|
abortSignal: options.abortSignal,
|
|
192
|
-
nativeByteCapabilityMode: options.nativeByteCapabilityMode ?? 'optional',
|
|
193
|
-
nativeMessageCapabilityMode: options.nativeMessageCapabilityMode ?? 'optional',
|
|
194
218
|
limits: normalizeClientLimits(options.limits),
|
|
195
219
|
restoreConnection: options.restoreConnection,
|
|
196
220
|
};
|
|
197
|
-
const typedSocket = new TypedSocket('client', typedrouterArg
|
|
221
|
+
const typedSocket = new TypedSocket('client', typedrouterArg);
|
|
198
222
|
typedSocket.clientOptions = opts;
|
|
199
223
|
typedSocket.serverUrl = serverUrlArg;
|
|
200
224
|
typedSocket.currentBackoff = opts.initialBackoffMs;
|
|
@@ -240,7 +264,8 @@ export class TypedSocket {
|
|
|
240
264
|
if (new Set(typedRouters).size !== typedRouters.length) {
|
|
241
265
|
throw new Error('TypedSocket.createServer received the same TypedRouter more than once.');
|
|
242
266
|
}
|
|
243
|
-
const
|
|
267
|
+
const transportRouters = typedRouters.map(() => new plugins.typedrequest.TypedRouter());
|
|
268
|
+
const typedSocket = new TypedSocket('server', transportRouters[0], optionsArg.virtualStreamAuthorizationAdapter, optionsArg.clientTagPolicy);
|
|
244
269
|
const protocolRouter = new plugins.typedrequest.TypedRouter();
|
|
245
270
|
TypedSocket.registerProtocolHandlers(protocolRouter, typedSocket);
|
|
246
271
|
const protocolMethods = new Set(protocolRouter.getMethodNames());
|
|
@@ -253,60 +278,25 @@ export class TypedSocket {
|
|
|
253
278
|
}
|
|
254
279
|
}
|
|
255
280
|
const detachProtocolRouters = [];
|
|
256
|
-
const detachLegacyPolicies = [];
|
|
257
281
|
try {
|
|
258
|
-
for (
|
|
259
|
-
|
|
260
|
-
|
|
282
|
+
for (let index = 0; index < typedRouters.length; index++) {
|
|
283
|
+
const applicationRouter = typedRouters[index];
|
|
284
|
+
const transportRouter = transportRouters[index];
|
|
285
|
+
detachProtocolRouters.push(transportRouter.addFallbackRouter(protocolRouter));
|
|
286
|
+
detachProtocolRouters.push(transportRouter.addFallbackRouter(applicationRouter));
|
|
287
|
+
typedSocket.serverRoutingSurfaces.set(applicationRouter, transportRouter);
|
|
261
288
|
}
|
|
262
289
|
}
|
|
263
290
|
catch (error) {
|
|
264
|
-
for (const detachLegacyPolicy of detachLegacyPolicies.reverse()) {
|
|
265
|
-
detachLegacyPolicy();
|
|
266
|
-
}
|
|
267
291
|
for (const detachProtocolRouter of detachProtocolRouters.reverse()) {
|
|
268
292
|
detachProtocolRouter();
|
|
269
293
|
}
|
|
270
294
|
throw error;
|
|
271
295
|
}
|
|
272
|
-
typedSocket.serverTypedRouters =
|
|
296
|
+
typedSocket.serverTypedRouters = transportRouters;
|
|
273
297
|
typedSocket.detachProtocolRouters = detachProtocolRouters;
|
|
274
|
-
typedSocket.detachLegacyVirtualStreamPolicies = detachLegacyPolicies;
|
|
275
298
|
return typedSocket;
|
|
276
299
|
}
|
|
277
|
-
/**
|
|
278
|
-
* Creates and attaches a TypedSocket server to an existing SmartServe
|
|
279
|
-
* instance. Prefer createServer() plus attachSmartServe() when transport
|
|
280
|
-
* construction needs the composed routers first.
|
|
281
|
-
*
|
|
282
|
-
* @param smartServeArg - SmartServe instance configured with the application router
|
|
283
|
-
* @param typedRouterArg - Application TypedRouter used by SmartServe
|
|
284
|
-
*
|
|
285
|
-
* @example
|
|
286
|
-
* ```typescript
|
|
287
|
-
* const typedRouter = new TypedRouter();
|
|
288
|
-
* const smartServe = new SmartServe({
|
|
289
|
-
* port: 3000,
|
|
290
|
-
* websocket: {
|
|
291
|
-
* typedRouter
|
|
292
|
-
* }
|
|
293
|
-
* });
|
|
294
|
-
* await smartServe.start();
|
|
295
|
-
* const typedSocket = TypedSocket.fromSmartServe(smartServe, typedRouter);
|
|
296
|
-
* // Authenticated server handlers assign protected connection metadata with:
|
|
297
|
-
* // typedSocket.setServerTag(peer, 'authenticated', { userId });
|
|
298
|
-
* ```
|
|
299
|
-
*/
|
|
300
|
-
static fromSmartServe(smartServeArg, typedRouterArg, optionsArg = {}) {
|
|
301
|
-
const typedSocket = TypedSocket.createServer(typedRouterArg, optionsArg);
|
|
302
|
-
try {
|
|
303
|
-
return typedSocket.attachSmartServe(smartServeArg);
|
|
304
|
-
}
|
|
305
|
-
catch (errorArg) {
|
|
306
|
-
typedSocket.releaseServerComposition();
|
|
307
|
-
throw errorArg;
|
|
308
|
-
}
|
|
309
|
-
}
|
|
310
300
|
/**
|
|
311
301
|
* Registers built-in TypedHandlers for tag management
|
|
312
302
|
*/
|
|
@@ -323,49 +313,23 @@ export class TypedSocket {
|
|
|
323
313
|
typedSocketArg.emitTagDenialDiagnostic('remove', data?.name, response);
|
|
324
314
|
return response;
|
|
325
315
|
}));
|
|
326
|
-
typedRouter.addTypedHandler(new plugins.typedrequest.TypedHandler(
|
|
316
|
+
typedRouter.addTypedHandler(new plugins.typedrequest.TypedHandler(TYPEDSOCKET_VERSION_METHOD, async (data, meta) => {
|
|
327
317
|
const peer = typedSocketArg.findServerPeerFromRequest(meta);
|
|
328
|
-
if (!peer
|
|
329
|
-
|
|
330
|
-
protocolMajor: NATIVE_BYTE_PROTOCOL_MAJOR,
|
|
331
|
-
capabilities: [],
|
|
332
|
-
required: false,
|
|
333
|
-
};
|
|
318
|
+
if (!peer) {
|
|
319
|
+
throw new plugins.typedrequest.TypedResponseError('TypedSocket version handshake has no trusted physical peer');
|
|
334
320
|
}
|
|
335
|
-
const
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
capabilities: [...response.capabilities],
|
|
342
|
-
required: response.required,
|
|
343
|
-
};
|
|
344
|
-
}));
|
|
345
|
-
typedRouter.addTypedHandler(new plugins.typedrequest.TypedHandler('__typedsocket_negotiateNativeMessages', async (data, meta) => {
|
|
346
|
-
const peer = typedSocketArg.findServerPeerFromRequest(meta);
|
|
347
|
-
if (!peer || !Array.isArray(data.capabilities)) {
|
|
348
|
-
return {
|
|
349
|
-
protocolMajor: NATIVE_MESSAGE_PROTOCOL_MAJOR,
|
|
350
|
-
capabilities: [],
|
|
351
|
-
required: false,
|
|
352
|
-
};
|
|
353
|
-
}
|
|
354
|
-
const response = typedSocketArg.nativeBytes.negotiateServerNativeMessages(peer, {
|
|
355
|
-
protocolMajor: data.protocolMajor,
|
|
356
|
-
capabilities: data.capabilities,
|
|
357
|
-
});
|
|
358
|
-
return {
|
|
359
|
-
protocolMajor: response.protocolMajor,
|
|
360
|
-
capabilities: [...response.capabilities],
|
|
361
|
-
required: response.required,
|
|
362
|
-
};
|
|
321
|
+
const strictPackageMajor = isPlainRecord(data)
|
|
322
|
+
&& hasExactEnumerableKeys(data, ['packageMajor'])
|
|
323
|
+
? data.packageMajor
|
|
324
|
+
: undefined;
|
|
325
|
+
typedSocketArg.virtualStreams.prepareServerHandshake(peer, strictPackageMajor);
|
|
326
|
+
return { packageMajor: TYPEDSOCKET_PACKAGE_MAJOR };
|
|
363
327
|
}));
|
|
364
328
|
}
|
|
365
329
|
// ============================================================================
|
|
366
330
|
// CONSTRUCTOR
|
|
367
331
|
// ============================================================================
|
|
368
|
-
constructor(sideArg, typedrouterArg,
|
|
332
|
+
constructor(sideArg, typedrouterArg, virtualStreamAuthorizationAdapterArg, clientTagPolicyArg) {
|
|
369
333
|
// Connection status observable
|
|
370
334
|
this.statusSubject = new plugins.smartrx.rxjs.Subject();
|
|
371
335
|
/**
|
|
@@ -375,6 +339,7 @@ export class TypedSocket {
|
|
|
375
339
|
this.diagnosticsSubject = new plugins.smartrx.rxjs.Subject();
|
|
376
340
|
this.connectionStatus = 'new';
|
|
377
341
|
this.reconnectExhaustedReported = false;
|
|
342
|
+
this.terminalFailure = false;
|
|
378
343
|
// Client-specific properties
|
|
379
344
|
this.websocket = null;
|
|
380
345
|
this.connectionGeneration = 0;
|
|
@@ -403,12 +368,13 @@ export class TypedSocket {
|
|
|
403
368
|
// Server-specific properties (SmartServe mode)
|
|
404
369
|
this.smartServeRef = null;
|
|
405
370
|
this.serverTypedRouters = [];
|
|
371
|
+
this.serverRoutingSurfaces = new Map();
|
|
406
372
|
this.detachProtocolRouters = [];
|
|
407
|
-
this.detachLegacyVirtualStreamPolicies = [];
|
|
408
373
|
this.serverStopping = false;
|
|
409
374
|
this.serverLifecycleGeneration = 0;
|
|
410
375
|
this.unsubscribeSmartServeConnectionClose = null;
|
|
411
|
-
this.
|
|
376
|
+
this.detachVirtualStreamResolvers = [];
|
|
377
|
+
this.detachIncomingRequestAuthorityGuards = [];
|
|
412
378
|
this.detachResponseAuthorityGuards = [];
|
|
413
379
|
this.pendingServerRequests = new Map();
|
|
414
380
|
this.pendingServerRequestIdsByPeer = new Map();
|
|
@@ -416,28 +382,22 @@ export class TypedSocket {
|
|
|
416
382
|
this.retainedServerInterestsByPeer = new Map();
|
|
417
383
|
this.side = sideArg;
|
|
418
384
|
this.typedrouter = typedrouterArg;
|
|
419
|
-
this.
|
|
385
|
+
this.virtualStreams = new VirtualStreamManager({
|
|
420
386
|
side: sideArg,
|
|
421
|
-
capabilityMode: nativeByteCapabilityModeArg,
|
|
422
|
-
nativeMessageCapabilityMode: nativeMessageCapabilityModeArg,
|
|
423
387
|
onDiagnostic: (eventArg) => this.emitDiagnostic(eventArg),
|
|
424
388
|
});
|
|
425
|
-
this.
|
|
426
|
-
this.nativeMessageAuthorizationAdapter = nativeMessageAuthorizationAdapterArg;
|
|
389
|
+
this.virtualStreamAuthorizationAdapter = virtualStreamAuthorizationAdapterArg;
|
|
427
390
|
this.tagPolicyManager = new TypedSocketTagPolicyManager(clientTagPolicyArg);
|
|
428
|
-
this.webSocketTransportOwner = this.
|
|
391
|
+
this.webSocketTransportOwner = this.virtualStreams.webSocketTransportOwner;
|
|
429
392
|
if (sideArg === 'client') {
|
|
430
|
-
let
|
|
431
|
-
let detachNativeStreamResolver;
|
|
393
|
+
let detachVirtualStreamResolver;
|
|
432
394
|
try {
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
this.
|
|
436
|
-
this.detachNativeStreamResolvers.push(detachNativeStreamResolver);
|
|
395
|
+
const detach = typedrouterArg.registerVirtualStreamTransportResolver(() => this.virtualStreams.getClientTransport());
|
|
396
|
+
detachVirtualStreamResolver = detach;
|
|
397
|
+
this.detachVirtualStreamResolvers.push(detach);
|
|
437
398
|
}
|
|
438
399
|
catch (errorArg) {
|
|
439
|
-
|
|
440
|
-
detachLegacyPolicy?.();
|
|
400
|
+
detachVirtualStreamResolver?.();
|
|
441
401
|
throw errorArg;
|
|
442
402
|
}
|
|
443
403
|
}
|
|
@@ -458,45 +418,56 @@ export class TypedSocket {
|
|
|
458
418
|
}
|
|
459
419
|
throw new Error('TypedSocket server is already attached to a SmartServe instance.');
|
|
460
420
|
}
|
|
421
|
+
if (smartServeArg.isRunning() || smartServeArg.getWebSocketConnections().length !== 0) {
|
|
422
|
+
throw new Error('TypedSocket must attach to SmartServe before SmartServe starts accepting connections.');
|
|
423
|
+
}
|
|
461
424
|
const detachResolvers = [];
|
|
425
|
+
const detachIncomingRequestGuards = [];
|
|
462
426
|
const detachResponseGuards = [];
|
|
463
427
|
let unsubscribe;
|
|
464
|
-
let
|
|
428
|
+
let virtualStreamServerAttached = false;
|
|
465
429
|
try {
|
|
466
430
|
for (const typedRouter of this.serverTypedRouters) {
|
|
431
|
+
detachIncomingRequestGuards.push(typedRouter.registerIncomingRequestAuthorityGuard((requestArg, contextArg) => {
|
|
432
|
+
const peer = this.findPhysicalServerPeer(contextArg.trustedLocalData.peer);
|
|
433
|
+
if (!peer)
|
|
434
|
+
return false;
|
|
435
|
+
return this.virtualStreams.authorizeServerIncomingEnvelope(peer, requestArg);
|
|
436
|
+
}));
|
|
467
437
|
detachResponseGuards.push(typedRouter.registerIncomingResponseAuthorityGuard((responseArg, contextArg) => {
|
|
468
438
|
return this.authorizeIncomingServerResponse(responseArg, contextArg.typedRouter, contextArg.trustedLocalData);
|
|
469
439
|
}));
|
|
470
|
-
detachResolvers.push(typedRouter.
|
|
471
|
-
const peer = this.
|
|
472
|
-
|
|
473
|
-
.
|
|
474
|
-
|
|
440
|
+
detachResolvers.push(typedRouter.registerVirtualStreamTransportResolver((trustedLocalDataArg) => {
|
|
441
|
+
const peer = this.findPhysicalServerPeer(trustedLocalDataArg.peer);
|
|
442
|
+
return peer && this.isAttachedServerPeer(peer)
|
|
443
|
+
? this.virtualStreams.getServerTransport(peer)
|
|
444
|
+
: undefined;
|
|
475
445
|
}));
|
|
476
446
|
}
|
|
477
447
|
unsubscribe = smartServeArg.subscribeWebSocketConnectionClose((peerArg) => {
|
|
478
448
|
this.tagPolicyManager.handlePeerClose(peerArg);
|
|
479
449
|
this.cancelPendingServerRequestsForPeer(peerArg, new Error(`TypedSocket target connection closed: ${peerArg.id}`));
|
|
480
450
|
});
|
|
481
|
-
this.
|
|
482
|
-
|
|
451
|
+
this.virtualStreams.attachServer();
|
|
452
|
+
virtualStreamServerAttached = true;
|
|
483
453
|
this.serverLifecycleGeneration++;
|
|
484
|
-
this.tagPolicyManager.setAttachedPeersProvider(() => smartServeArg.getWebSocketConnections()
|
|
485
|
-
|
|
486
|
-
return Boolean(routingSurface && this.serverTypedRouters.includes(routingSurface));
|
|
487
|
-
}));
|
|
454
|
+
this.tagPolicyManager.setAttachedPeersProvider(() => smartServeArg.getWebSocketConnections()
|
|
455
|
+
.filter((peerArg) => this.isAttachedServerPeer(peerArg)));
|
|
488
456
|
this.smartServeRef = smartServeArg;
|
|
489
|
-
this.
|
|
457
|
+
this.detachVirtualStreamResolvers = detachResolvers;
|
|
458
|
+
this.detachIncomingRequestAuthorityGuards = detachIncomingRequestGuards;
|
|
490
459
|
this.detachResponseAuthorityGuards = detachResponseGuards;
|
|
491
460
|
this.unsubscribeSmartServeConnectionClose = unsubscribe;
|
|
492
461
|
return this;
|
|
493
462
|
}
|
|
494
463
|
catch (errorArg) {
|
|
495
464
|
unsubscribe?.();
|
|
496
|
-
if (
|
|
497
|
-
this.
|
|
465
|
+
if (virtualStreamServerAttached) {
|
|
466
|
+
this.virtualStreams.detachServer();
|
|
498
467
|
}
|
|
499
468
|
this.tagPolicyManager.setAttachedPeersProvider(undefined);
|
|
469
|
+
for (const detachRequestGuard of detachIncomingRequestGuards.reverse())
|
|
470
|
+
detachRequestGuard();
|
|
500
471
|
for (const detachResponseGuard of detachResponseGuards.reverse())
|
|
501
472
|
detachResponseGuard();
|
|
502
473
|
for (const detachResolver of detachResolvers.reverse())
|
|
@@ -508,7 +479,7 @@ export class TypedSocket {
|
|
|
508
479
|
// CLIENT METHODS
|
|
509
480
|
// ============================================================================
|
|
510
481
|
/**
|
|
511
|
-
* Connects the client to the server using
|
|
482
|
+
* Connects the client to the server using the platform WebSocket implementation.
|
|
512
483
|
*/
|
|
513
484
|
async connect() {
|
|
514
485
|
if (this.stopped || this.clientOptions?.abortSignal?.aborted) {
|
|
@@ -518,6 +489,7 @@ export class TypedSocket {
|
|
|
518
489
|
let connectionSettled = false;
|
|
519
490
|
let connectionTimeout;
|
|
520
491
|
let abortConnection;
|
|
492
|
+
let socketOpened = false;
|
|
521
493
|
const settleConnection = (errorArg) => {
|
|
522
494
|
if (connectionSettled) {
|
|
523
495
|
return;
|
|
@@ -556,9 +528,10 @@ export class TypedSocket {
|
|
|
556
528
|
queuedTextFrames: [],
|
|
557
529
|
queuedTextBytes: 0,
|
|
558
530
|
activeHandlers: 0,
|
|
531
|
+
handshakeReady: false,
|
|
559
532
|
};
|
|
560
533
|
this.clientConnectionState = connectionState;
|
|
561
|
-
this.
|
|
534
|
+
this.virtualStreams.bindClientConnection(websocket, generation);
|
|
562
535
|
abortConnection = () => {
|
|
563
536
|
if (this.websocket === websocket && this.connectionGeneration === generation) {
|
|
564
537
|
websocket.close();
|
|
@@ -570,20 +543,17 @@ export class TypedSocket {
|
|
|
570
543
|
connectionTimeout = setTimeout(() => {
|
|
571
544
|
if (this.connectionStatus !== 'connected') {
|
|
572
545
|
this.logTransient(`TypedSocket connection timeout for ${logEndpoint}`);
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
settleConnection(new Error('Connection timeout'));
|
|
546
|
+
const timeoutError = new TypedSocketHandshakeError('TypedSocket version handshake timed out');
|
|
547
|
+
this.failClientHandshake(connectionState, timeoutError);
|
|
548
|
+
settleConnection(timeoutError);
|
|
577
549
|
}
|
|
578
|
-
},
|
|
550
|
+
}, TYPEDSOCKET_HANDSHAKE_TIMEOUT_MS);
|
|
579
551
|
websocket.onopen = async () => {
|
|
580
552
|
try {
|
|
581
553
|
if (this.websocket !== websocket || this.connectionGeneration !== generation)
|
|
582
554
|
return;
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
return;
|
|
586
|
-
await this.negotiateClientNativeMessages(websocket, generation);
|
|
555
|
+
socketOpened = true;
|
|
556
|
+
await this.checkClientVersion(connectionState);
|
|
587
557
|
if (this.websocket !== websocket || this.connectionGeneration !== generation)
|
|
588
558
|
return;
|
|
589
559
|
await this.restoreClientConnection(connectionState);
|
|
@@ -606,6 +576,10 @@ export class TypedSocket {
|
|
|
606
576
|
const restorationError = error instanceof Error
|
|
607
577
|
? error
|
|
608
578
|
: new Error(String(error));
|
|
579
|
+
if (restorationError instanceof TypedSocketHandshakeError) {
|
|
580
|
+
this.terminalFailure = true;
|
|
581
|
+
connectionState.handshakeError = restorationError;
|
|
582
|
+
}
|
|
609
583
|
this.logTransient('TypedSocket client registration restoration failed.');
|
|
610
584
|
settleConnection(restorationError);
|
|
611
585
|
websocket.close();
|
|
@@ -619,7 +593,11 @@ export class TypedSocket {
|
|
|
619
593
|
return;
|
|
620
594
|
}
|
|
621
595
|
if (event.data instanceof ArrayBuffer || ArrayBuffer.isView(event.data)) {
|
|
622
|
-
|
|
596
|
+
if (!connectionState.handshakeReady) {
|
|
597
|
+
this.failClientHandshake(connectionState, new TypedSocketHandshakeError('TypedSocket received binary data before the version handshake completed'));
|
|
598
|
+
return;
|
|
599
|
+
}
|
|
600
|
+
this.virtualStreams.enqueueClientRawFrame(websocket, generation, event.data);
|
|
623
601
|
return;
|
|
624
602
|
}
|
|
625
603
|
this.emitConnectionClosedDiagnostic(1003, 'Unsupported WebSocket payload');
|
|
@@ -628,16 +606,24 @@ export class TypedSocket {
|
|
|
628
606
|
websocket.onclose = () => {
|
|
629
607
|
if (this.websocket !== websocket || this.connectionGeneration !== generation)
|
|
630
608
|
return;
|
|
609
|
+
if (socketOpened
|
|
610
|
+
&& !connectionState.handshakeReady
|
|
611
|
+
&& !connectionState.handshakeError
|
|
612
|
+
&& !this.stopped
|
|
613
|
+
&& !this.clientOptions?.abortSignal?.aborted) {
|
|
614
|
+
connectionState.handshakeError = new TypedSocketHandshakeError('TypedSocket connection closed before the version handshake completed');
|
|
615
|
+
this.terminalFailure = true;
|
|
616
|
+
}
|
|
631
617
|
this.abortClientConnectionState(connectionState, new Error('TypedSocket disconnected'));
|
|
632
|
-
this.
|
|
618
|
+
this.virtualStreams.unbindClientConnection(websocket, generation, new Error('TypedSocket disconnected'));
|
|
633
619
|
if (this.connectionStatus === 'connected') {
|
|
634
620
|
this.handleDisconnect();
|
|
635
621
|
}
|
|
636
622
|
else {
|
|
637
623
|
this.rejectPendingClientRequests(new Error('TypedSocket disconnected'));
|
|
638
|
-
settleConnection(this.stopped || this.clientOptions?.abortSignal?.aborted
|
|
624
|
+
settleConnection(connectionState.handshakeError ?? (this.stopped || this.clientOptions?.abortSignal?.aborted
|
|
639
625
|
? this.createAbortError()
|
|
640
|
-
: new Error('TypedSocket connection closed before it opened'));
|
|
626
|
+
: new Error('TypedSocket connection closed before it opened')));
|
|
641
627
|
}
|
|
642
628
|
};
|
|
643
629
|
websocket.onerror = () => {
|
|
@@ -654,8 +640,7 @@ export class TypedSocket {
|
|
|
654
640
|
if (connectionTimeout) {
|
|
655
641
|
clearTimeout(connectionTimeout);
|
|
656
642
|
}
|
|
657
|
-
if (!(err instanceof
|
|
658
|
-
&& !(err instanceof NativeMessageCapabilityError)
|
|
643
|
+
if (!(err instanceof TypedSocketHandshakeError)
|
|
659
644
|
&& !(err instanceof TypedSocketClientTagDeniedError)
|
|
660
645
|
&& !(err instanceof TypedSocketConnectionRestoreDeniedError)
|
|
661
646
|
&& this.shouldReconnect()) {
|
|
@@ -669,103 +654,44 @@ export class TypedSocket {
|
|
|
669
654
|
}
|
|
670
655
|
}
|
|
671
656
|
}
|
|
672
|
-
async
|
|
673
|
-
const
|
|
674
|
-
|
|
657
|
+
async checkClientVersion(stateArg) {
|
|
658
|
+
const correlationId = plugins.smartstring.create.createCryptoRandomString();
|
|
659
|
+
stateArg.handshakeCorrelationId = correlationId;
|
|
675
660
|
try {
|
|
676
661
|
const request = {
|
|
677
|
-
method:
|
|
678
|
-
request: {
|
|
679
|
-
|
|
680
|
-
|
|
681
|
-
},
|
|
682
|
-
response: {
|
|
683
|
-
protocolMajor: 0,
|
|
684
|
-
capabilities: [],
|
|
685
|
-
required: false,
|
|
686
|
-
},
|
|
662
|
+
method: TYPEDSOCKET_VERSION_METHOD,
|
|
663
|
+
request: { packageMajor: TYPEDSOCKET_PACKAGE_MAJOR },
|
|
664
|
+
// TypedRequest request envelopes carry a null response placeholder.
|
|
665
|
+
response: null,
|
|
666
|
+
correlation: { id: correlationId, phase: 'request' },
|
|
687
667
|
};
|
|
688
668
|
const response = await this.sendRequest(request, {
|
|
689
|
-
timeoutMs: Math.min(
|
|
669
|
+
timeoutMs: Math.min(TYPEDSOCKET_HANDSHAKE_TIMEOUT_MS, this.requireClientOptions().limits.requestTimeoutMs),
|
|
690
670
|
});
|
|
691
|
-
if (response.error
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
||
|
|
696
|
-
|| response.response.
|
|
697
|
-
|
|
698
|
-
throw new NativeByteCapabilityError('TypedSocket server returned malformed capabilities');
|
|
671
|
+
if (response.error
|
|
672
|
+
|| response.retry
|
|
673
|
+
||
|
|
674
|
+
!response.response
|
|
675
|
+
|| Object.keys(response.response).length !== 1
|
|
676
|
+
|| response.response.packageMajor !== TYPEDSOCKET_PACKAGE_MAJOR) {
|
|
677
|
+
throw new TypedSocketHandshakeError('TypedSocket server returned a malformed or incompatible version handshake');
|
|
699
678
|
}
|
|
700
|
-
|
|
679
|
+
stateArg.handshakeReady = true;
|
|
680
|
+
this.virtualStreams.setClientHandshakeReady(stateArg.websocket, stateArg.generation);
|
|
701
681
|
}
|
|
702
682
|
catch (errorArg) {
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
:
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
return;
|
|
712
|
-
}
|
|
713
|
-
if (negotiatedResponse.required
|
|
714
|
-
&& (negotiatedResponse.protocolMajor !== NATIVE_BYTE_PROTOCOL_MAJOR
|
|
715
|
-
|| negotiatedResponse.capabilities.length !== 1
|
|
716
|
-
|| negotiatedResponse.capabilities[0] !== NATIVE_BYTE_PROTOCOL
|
|
717
|
-
|| this.clientOptions?.nativeByteCapabilityMode === 'disabled')) {
|
|
718
|
-
throw new NativeByteCapabilityError('TypedSocket server requires native-byte-v1');
|
|
719
|
-
}
|
|
720
|
-
this.nativeBytes.completeClientNegotiation(websocketArg, generationArg, negotiatedResponse);
|
|
721
|
-
}
|
|
722
|
-
async negotiateClientNativeMessages(websocketArg, generationArg) {
|
|
723
|
-
const advertisement = this.nativeBytes.getClientNativeMessageNegotiationAdvertisement();
|
|
724
|
-
let negotiatedResponse;
|
|
725
|
-
try {
|
|
726
|
-
const request = {
|
|
727
|
-
method: '__typedsocket_negotiateNativeMessages',
|
|
728
|
-
request: {
|
|
729
|
-
protocolMajor: advertisement.protocolMajor,
|
|
730
|
-
capabilities: [...advertisement.capabilities],
|
|
731
|
-
},
|
|
732
|
-
response: {
|
|
733
|
-
protocolMajor: 0,
|
|
734
|
-
capabilities: [],
|
|
735
|
-
required: false,
|
|
736
|
-
},
|
|
737
|
-
};
|
|
738
|
-
const response = await this.sendRequest(request, {
|
|
739
|
-
timeoutMs: Math.min(10_000, this.requireClientOptions().limits.requestTimeoutMs),
|
|
740
|
-
});
|
|
741
|
-
if (response.error)
|
|
742
|
-
throw new NativeMessageCapabilityError(response.error.text);
|
|
743
|
-
if (!response.response
|
|
744
|
-
|| !Number.isSafeInteger(response.response.protocolMajor)
|
|
745
|
-
|| !Array.isArray(response.response.capabilities)
|
|
746
|
-
|| response.response.capabilities.some((capabilityArg) => typeof capabilityArg !== 'string')
|
|
747
|
-
|| typeof response.response.required !== 'boolean') {
|
|
748
|
-
throw new NativeMessageCapabilityError('TypedSocket server returned malformed native message capabilities');
|
|
749
|
-
}
|
|
750
|
-
negotiatedResponse = response.response;
|
|
751
|
-
}
|
|
752
|
-
catch (errorArg) {
|
|
753
|
-
if (this.clientOptions?.nativeMessageCapabilityMode === 'required') {
|
|
754
|
-
throw errorArg instanceof NativeMessageCapabilityError
|
|
755
|
-
? errorArg
|
|
756
|
-
: new NativeMessageCapabilityError('Required native-message-v1 negotiation failed', { cause: errorArg });
|
|
757
|
-
}
|
|
758
|
-
this.nativeBytes.failOptionalClientNativeMessageNegotiation(websocketArg, generationArg);
|
|
759
|
-
return;
|
|
683
|
+
const error = errorArg instanceof TypedSocketHandshakeError
|
|
684
|
+
? errorArg
|
|
685
|
+
: new TypedSocketHandshakeError('TypedSocket version handshake failed', {
|
|
686
|
+
cause: errorArg,
|
|
687
|
+
});
|
|
688
|
+
this.terminalFailure = true;
|
|
689
|
+
stateArg.handshakeError = error;
|
|
690
|
+
throw error;
|
|
760
691
|
}
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|| negotiatedResponse.capabilities.length !== 1
|
|
764
|
-
|| negotiatedResponse.capabilities[0] !== NATIVE_MESSAGE_PROTOCOL
|
|
765
|
-
|| this.clientOptions?.nativeMessageCapabilityMode === 'disabled')) {
|
|
766
|
-
throw new NativeMessageCapabilityError('TypedSocket server requires native-message-v1');
|
|
692
|
+
finally {
|
|
693
|
+
stateArg.handshakeCorrelationId = undefined;
|
|
767
694
|
}
|
|
768
|
-
this.nativeBytes.completeClientNativeMessageNegotiation(websocketArg, generationArg, negotiatedResponse);
|
|
769
695
|
}
|
|
770
696
|
async restoreClientConnection(stateArg) {
|
|
771
697
|
const restoreConnection = this.clientOptions?.restoreConnection;
|
|
@@ -893,7 +819,11 @@ export class TypedSocket {
|
|
|
893
819
|
stateArg.websocket.close(toClientWebSocketCloseCode(1008), 'TypedSocket text queue exceeds package limit');
|
|
894
820
|
return;
|
|
895
821
|
}
|
|
896
|
-
stateArg.queuedTextFrames.push({
|
|
822
|
+
stateArg.queuedTextFrames.push({
|
|
823
|
+
text: textArg,
|
|
824
|
+
byteLength,
|
|
825
|
+
handshakeReadyAtArrival: stateArg.handshakeReady,
|
|
826
|
+
});
|
|
897
827
|
stateArg.queuedTextBytes += byteLength;
|
|
898
828
|
this.drainClientTextFrames(stateArg);
|
|
899
829
|
}
|
|
@@ -914,9 +844,13 @@ export class TypedSocket {
|
|
|
914
844
|
stateArg.queuedTextBytes -= frame.byteLength;
|
|
915
845
|
stateArg.activeHandlers++;
|
|
916
846
|
this.retainedClientCallbacks++;
|
|
917
|
-
void this.handleMessage(frame.text, stateArg)
|
|
918
|
-
.catch(() => {
|
|
847
|
+
void this.handleMessage(frame.text, stateArg, frame.handshakeReadyAtArrival)
|
|
848
|
+
.catch((errorArg) => {
|
|
919
849
|
if (this.isCurrentClientConnection(stateArg)) {
|
|
850
|
+
if (!frame.handshakeReadyAtArrival) {
|
|
851
|
+
this.failClientHandshake(stateArg, errorArg);
|
|
852
|
+
return;
|
|
853
|
+
}
|
|
920
854
|
this.emitConnectionClosedDiagnostic(1008, 'TypedSocket rejected malformed text envelope');
|
|
921
855
|
stateArg.websocket.close(toClientWebSocketCloseCode(1008), 'TypedSocket rejected malformed text envelope');
|
|
922
856
|
}
|
|
@@ -950,12 +884,19 @@ export class TypedSocket {
|
|
|
950
884
|
throw new Error('TypedSocket response envelope has no response or error payload.');
|
|
951
885
|
}
|
|
952
886
|
}
|
|
953
|
-
async handleMessage(dataArg, stateArg = this.clientConnectionState) {
|
|
887
|
+
async handleMessage(dataArg, stateArg = this.clientConnectionState, handshakeReadyAtArrivalArg = stateArg?.handshakeReady ?? false) {
|
|
954
888
|
if (!stateArg || !this.isCurrentClientConnection(stateArg))
|
|
955
889
|
return;
|
|
956
890
|
const message = plugins.smartjson.parse(dataArg);
|
|
957
891
|
this.assertClientEnvelope(message);
|
|
958
892
|
const correlation = message.correlation;
|
|
893
|
+
if (!handshakeReadyAtArrivalArg) {
|
|
894
|
+
if (!stateArg.handshakeCorrelationId
|
|
895
|
+
|| !isExactHandshakeResponseEnvelope(message, stateArg.handshakeCorrelationId)
|
|
896
|
+
|| !this.pendingRequests.has(stateArg.handshakeCorrelationId)) {
|
|
897
|
+
throw new TypedSocketHandshakeError('TypedSocket version handshake response method or correlation mismatch');
|
|
898
|
+
}
|
|
899
|
+
}
|
|
959
900
|
if (correlation.phase === 'response') {
|
|
960
901
|
const pending = this.pendingRequests.get(correlation.id);
|
|
961
902
|
if (!pending)
|
|
@@ -994,6 +935,18 @@ export class TypedSocket {
|
|
|
994
935
|
&& this.connectionGeneration === stateArg.generation
|
|
995
936
|
&& stateArg.websocket.readyState === WebSocket.OPEN);
|
|
996
937
|
}
|
|
938
|
+
failClientHandshake(stateArg, reasonArg) {
|
|
939
|
+
const error = reasonArg instanceof TypedSocketHandshakeError
|
|
940
|
+
? reasonArg
|
|
941
|
+
: new TypedSocketHandshakeError('TypedSocket version handshake envelope is malformed', {
|
|
942
|
+
cause: reasonArg,
|
|
943
|
+
});
|
|
944
|
+
this.terminalFailure = true;
|
|
945
|
+
stateArg.handshakeError = error;
|
|
946
|
+
this.rejectPendingClientRequests(error);
|
|
947
|
+
this.emitConnectionClosedDiagnostic(1008, 'TypedSocket version handshake failed');
|
|
948
|
+
stateArg.websocket.close(toClientWebSocketCloseCode(1008), 'TypedSocket version handshake failed');
|
|
949
|
+
}
|
|
997
950
|
abortClientConnectionState(stateArg, reasonArg) {
|
|
998
951
|
if (!stateArg.abortController.signal.aborted) {
|
|
999
952
|
stateArg.abortController.abort(reasonArg);
|
|
@@ -1051,7 +1004,9 @@ export class TypedSocket {
|
|
|
1051
1004
|
if (this.shouldReconnect()) {
|
|
1052
1005
|
this.logDebug('TypedSocket reconnection attempt failed.');
|
|
1053
1006
|
}
|
|
1054
|
-
else if (!this.
|
|
1007
|
+
else if (!this.terminalFailure
|
|
1008
|
+
&& !this.stopped
|
|
1009
|
+
&& !this.clientOptions?.abortSignal?.aborted) {
|
|
1055
1010
|
const endpoint = this.toRedactedLogEndpoint(this.toWebSocketUrl(this.serverUrl));
|
|
1056
1011
|
console.error(`TypedSocket giving up on ${endpoint} after ${this.retryCount} attempts.`);
|
|
1057
1012
|
if (!this.reconnectExhaustedReported) {
|
|
@@ -1088,6 +1043,7 @@ export class TypedSocket {
|
|
|
1088
1043
|
shouldReconnect() {
|
|
1089
1044
|
return Boolean(this.clientOptions?.autoReconnect &&
|
|
1090
1045
|
!this.stopped &&
|
|
1046
|
+
!this.terminalFailure &&
|
|
1091
1047
|
!this.clientOptions.abortSignal?.aborted &&
|
|
1092
1048
|
this.retryCount < this.clientOptions.maxRetries);
|
|
1093
1049
|
}
|
|
@@ -1177,9 +1133,6 @@ export class TypedSocket {
|
|
|
1177
1133
|
* Sends a request to the server and waits for response (client-side)
|
|
1178
1134
|
*/
|
|
1179
1135
|
async sendRequest(request, optionsArg = {}) {
|
|
1180
|
-
if (request.method === '##VirtualStream##') {
|
|
1181
|
-
throw new Error('Legacy VirtualStream control request rejected by transport policy');
|
|
1182
|
-
}
|
|
1183
1136
|
const state = this.clientConnectionState;
|
|
1184
1137
|
if (!state || !this.isCurrentClientConnection(state)) {
|
|
1185
1138
|
throw new Error('WebSocket not connected');
|
|
@@ -1322,9 +1275,10 @@ export class TypedSocket {
|
|
|
1322
1275
|
|| typeof responseArg.method !== 'string') {
|
|
1323
1276
|
return false;
|
|
1324
1277
|
}
|
|
1325
|
-
const peer = trustedLocalDataArg.peer;
|
|
1326
|
-
if (!peer ||
|
|
1278
|
+
const peer = this.findPhysicalServerPeer(trustedLocalDataArg.peer);
|
|
1279
|
+
if (!peer || !this.virtualStreams.authorizeServerIncomingEnvelope(peer, responseArg)) {
|
|
1327
1280
|
return false;
|
|
1281
|
+
}
|
|
1328
1282
|
const pending = this.pendingServerRequests.get(responseArg.correlation.id);
|
|
1329
1283
|
return Boolean(pending
|
|
1330
1284
|
&& pending.peer === peer
|
|
@@ -1335,19 +1289,25 @@ export class TypedSocket {
|
|
|
1335
1289
|
&& this.isAttachedServerPeer(pending.peer));
|
|
1336
1290
|
}
|
|
1337
1291
|
isAttachedServerPeer(peerArg) {
|
|
1292
|
+
return Boolean(this.isOwnedServerPeer(peerArg)
|
|
1293
|
+
&& this.virtualStreams.isServerPeerReady(peerArg));
|
|
1294
|
+
}
|
|
1295
|
+
isOwnedServerPeer(peerArg) {
|
|
1338
1296
|
return Boolean(!this.serverStopping
|
|
1339
1297
|
&& this.smartServeRef
|
|
1340
1298
|
&& peerArg.readyState === 1
|
|
1299
|
+
&& peerArg.transportOwner === this.webSocketTransportOwner
|
|
1341
1300
|
&& peerArg.routingSurface
|
|
1342
1301
|
&& this.serverTypedRouters.includes(peerArg.routingSurface)
|
|
1343
1302
|
&& this.smartServeRef.getWebSocketConnections().includes(peerArg));
|
|
1344
1303
|
}
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
const peer = this.smartServeRef
|
|
1304
|
+
findPhysicalServerPeer(candidateArg) {
|
|
1305
|
+
return this.smartServeRef
|
|
1348
1306
|
?.getWebSocketConnections()
|
|
1349
|
-
.find((peerArg) => peerArg ===
|
|
1350
|
-
|
|
1307
|
+
.find((peerArg) => peerArg === candidateArg && this.isOwnedServerPeer(peerArg));
|
|
1308
|
+
}
|
|
1309
|
+
findServerPeerFromRequest(typedToolsArg) {
|
|
1310
|
+
return this.findPhysicalServerPeer(typedToolsArg?.localData?.peer);
|
|
1351
1311
|
}
|
|
1352
1312
|
async sendServerRequest(typedRequestDataArg, targetArg, optionsArg) {
|
|
1353
1313
|
const timeoutMs = this.normalizeRequestTimeout(optionsArg.timeoutMs);
|
|
@@ -1497,7 +1457,12 @@ export class TypedSocket {
|
|
|
1497
1457
|
* On servers, sends to the specified target connection.
|
|
1498
1458
|
*/
|
|
1499
1459
|
createTypedRequest(methodName, targetConnection, optionsArg = {}) {
|
|
1500
|
-
|
|
1460
|
+
if (this.side === 'server' && !targetConnection) {
|
|
1461
|
+
throw new Error('Server TypedSocket requests require an explicit targetConnection');
|
|
1462
|
+
}
|
|
1463
|
+
if (this.side === 'client' && targetConnection) {
|
|
1464
|
+
throw new Error('Client TypedSocket requests do not accept a targetConnection');
|
|
1465
|
+
}
|
|
1501
1466
|
const postMethod = async (requestDataArg, postOptionsArg = {}) => {
|
|
1502
1467
|
const composedAbortSignal = composeAbortSignals(optionsArg.abortSignal, postOptionsArg.signal);
|
|
1503
1468
|
const requestOptions = {
|
|
@@ -1512,146 +1477,67 @@ export class TypedSocket {
|
|
|
1512
1477
|
if (!this.smartServeRef) {
|
|
1513
1478
|
throw new Error('Server not initialized');
|
|
1514
1479
|
}
|
|
1515
|
-
|
|
1516
|
-
if (!target) {
|
|
1517
|
-
if (this.serverTypedRouters.length > 1) {
|
|
1518
|
-
throw new Error('TypedSocket multi-router servers require an explicit targetConnection');
|
|
1519
|
-
}
|
|
1520
|
-
const routingSurface = this.serverTypedRouters[0];
|
|
1521
|
-
const allConnections = this.smartServeRef.getWebSocketConnections().filter((peerArg) => peerArg.routingSurface === routingSurface);
|
|
1522
|
-
if (allConnections.length === 1) {
|
|
1523
|
-
const peer = allConnections[0];
|
|
1524
|
-
target = wrapSmartServePeer(peer);
|
|
1525
|
-
// Deprecated: implicit single-connection targeting is slated for
|
|
1526
|
-
// removal in the next major; it also disables native-byte
|
|
1527
|
-
// transport for the request because no peer was known at
|
|
1528
|
-
// createTypedRequest() time.
|
|
1529
|
-
if (!implicitTargetingReported) {
|
|
1530
|
-
implicitTargetingReported = true;
|
|
1531
|
-
this.emitDiagnostic({
|
|
1532
|
-
kind: 'implicitTargetingUsed',
|
|
1533
|
-
side: 'server',
|
|
1534
|
-
method: methodName,
|
|
1535
|
-
});
|
|
1536
|
-
}
|
|
1537
|
-
}
|
|
1538
|
-
else if (allConnections.length === 0) {
|
|
1539
|
-
throw new Error('No WebSocket connections available');
|
|
1540
|
-
}
|
|
1541
|
-
else {
|
|
1542
|
-
throw new Error('Multiple connections available - specify targetConnection');
|
|
1543
|
-
}
|
|
1544
|
-
}
|
|
1545
|
-
return await this.sendServerRequest(requestDataArg, target, requestOptions);
|
|
1480
|
+
return await this.sendServerRequest(requestDataArg, targetConnection, requestOptions);
|
|
1546
1481
|
}
|
|
1547
1482
|
finally {
|
|
1548
1483
|
composedAbortSignal.cleanup();
|
|
1549
1484
|
}
|
|
1550
1485
|
};
|
|
1551
|
-
const
|
|
1552
|
-
? this.
|
|
1486
|
+
const virtualStreamTransport = this.side === 'client'
|
|
1487
|
+
? this.virtualStreams.getClientTransport()
|
|
1553
1488
|
: targetConnection
|
|
1554
|
-
? this.
|
|
1489
|
+
? this.virtualStreams.getServerTransport(targetConnection.peer)
|
|
1555
1490
|
: undefined;
|
|
1556
1491
|
return new plugins.typedrequest.TypedRequest(new plugins.typedrequest.TypedTarget({
|
|
1557
1492
|
postMethod,
|
|
1558
1493
|
supportsAbortSignal: true,
|
|
1559
|
-
|
|
1560
|
-
legacyVirtualStreams: 'deny',
|
|
1494
|
+
virtualStreamTransport,
|
|
1561
1495
|
}), methodName);
|
|
1562
1496
|
}
|
|
1563
|
-
/**
|
|
1564
|
-
* Creates an exact authorized native-byte receive facade for one server peer.
|
|
1565
|
-
* TypedRequest carries its opaque descriptor when the facade enters a DTO.
|
|
1566
|
-
*/
|
|
1567
1497
|
createVirtualStream(optionsArg) {
|
|
1568
1498
|
if (this.side !== 'server') {
|
|
1569
1499
|
throw new Error('createVirtualStream is only available on servers');
|
|
1570
1500
|
}
|
|
1571
|
-
|
|
1572
|
-
|| optionsArg.direction !== 'receive') {
|
|
1573
|
-
throw new TypeError('createVirtualStream requires native-byte-v1 receive direction');
|
|
1574
|
-
}
|
|
1575
|
-
const authorizationAdapter = this.nativeByteAuthorizationAdapter;
|
|
1501
|
+
const authorizationAdapter = this.virtualStreamAuthorizationAdapter;
|
|
1576
1502
|
if (!authorizationAdapter) {
|
|
1577
|
-
throw new
|
|
1503
|
+
throw new Error('createVirtualStream requires a virtualStreamAuthorizationAdapter');
|
|
1578
1504
|
}
|
|
1579
1505
|
const peer = 'peer' in optionsArg.target
|
|
1580
1506
|
? optionsArg.target.peer
|
|
1581
1507
|
: optionsArg.target;
|
|
1582
|
-
|
|
1583
|
-
|
|
1584
|
-
|
|
1585
|
-
|
|
1586
|
-
transport
|
|
1587
|
-
|
|
1588
|
-
|
|
1589
|
-
|
|
1590
|
-
|
|
1591
|
-
|
|
1592
|
-
|
|
1508
|
+
if (!this.isAttachedServerPeer(peer)) {
|
|
1509
|
+
throw new Error('createVirtualStream target is not an attached TypedSocket peer');
|
|
1510
|
+
}
|
|
1511
|
+
const transport = this.virtualStreams.getServerTransport(peer);
|
|
1512
|
+
if (!transport)
|
|
1513
|
+
throw new Error('createVirtualStream target has no physical transport facade');
|
|
1514
|
+
const contentType = normalizeVirtualStreamContentType(optionsArg.contentType);
|
|
1515
|
+
const integrity = normalizeVirtualStreamIntegrity(optionsArg.integrity);
|
|
1516
|
+
const authorizationBinding = authorizationAdapter.bind(optionsArg.authorization, Object.freeze({
|
|
1517
|
+
target: peer,
|
|
1518
|
+
creatorDirection: optionsArg.creatorDirection,
|
|
1519
|
+
...(contentType === undefined ? {} : { contentType }),
|
|
1520
|
+
...(integrity === undefined ? {} : { integrity }),
|
|
1521
|
+
}));
|
|
1593
1522
|
if (!authorizationBinding
|
|
1594
1523
|
|| typeof authorizationBinding !== 'object'
|
|
1595
1524
|
|| typeof Reflect.get(authorizationBinding, 'then') === 'function') {
|
|
1596
|
-
throw new TypeError('
|
|
1525
|
+
throw new TypeError('virtualStreamAuthorizationAdapter.bind() must return a synchronous binding');
|
|
1597
1526
|
}
|
|
1598
|
-
|
|
1599
|
-
|
|
1600
|
-
|
|
1601
|
-
|
|
1602
|
-
|
|
1603
|
-
|
|
1604
|
-
|
|
1605
|
-
bindingRevision: authorizationBinding.bindingRevision,
|
|
1527
|
+
if (typeof authorizationBinding.revalidate !== 'function') {
|
|
1528
|
+
throw new TypeError('VirtualStream authorization binding requires revalidate(context)');
|
|
1529
|
+
}
|
|
1530
|
+
const registration = createAuthorizedServerVirtualStreamRegistration(this.virtualStreams, peer, {
|
|
1531
|
+
creatorDirection: optionsArg.creatorDirection,
|
|
1532
|
+
...(contentType === undefined ? {} : { contentType }),
|
|
1533
|
+
...(integrity === undefined ? {} : { integrity }),
|
|
1606
1534
|
revalidate: authorizationBinding.revalidate,
|
|
1607
1535
|
});
|
|
1608
|
-
return plugins.typedrequest.VirtualStream.
|
|
1536
|
+
return plugins.typedrequest.VirtualStream.fromRegistration({
|
|
1609
1537
|
transport,
|
|
1610
1538
|
registration,
|
|
1611
1539
|
});
|
|
1612
1540
|
}
|
|
1613
|
-
/**
|
|
1614
|
-
* Creates an authorized ephemeral binary-message receive channel for one
|
|
1615
|
-
* exact server peer. Its ordinary descriptor must be sent explicitly.
|
|
1616
|
-
*/
|
|
1617
|
-
createBinaryMessageChannel(optionsArg) {
|
|
1618
|
-
if (this.side !== 'server') {
|
|
1619
|
-
throw new Error('createBinaryMessageChannel is only available on servers');
|
|
1620
|
-
}
|
|
1621
|
-
if (optionsArg.direction !== 'receive') {
|
|
1622
|
-
throw new TypeError('createBinaryMessageChannel requires receive direction');
|
|
1623
|
-
}
|
|
1624
|
-
const authorizationAdapter = this.nativeMessageAuthorizationAdapter;
|
|
1625
|
-
if (!authorizationAdapter) {
|
|
1626
|
-
throw new NativeMessageCapabilityError('createBinaryMessageChannel requires a nativeMessageAuthorizationAdapter');
|
|
1627
|
-
}
|
|
1628
|
-
const peer = 'peer' in optionsArg.target
|
|
1629
|
-
? optionsArg.target.peer
|
|
1630
|
-
: optionsArg.target;
|
|
1631
|
-
if (!this.isAttachedServerPeer(peer)) {
|
|
1632
|
-
throw new NativeMessageCapabilityError('createBinaryMessageChannel target is not an attached TypedSocket peer');
|
|
1633
|
-
}
|
|
1634
|
-
const capability = this.nativeBytes.messages.getCapability(peer);
|
|
1635
|
-
if (!capability.capabilities.includes(NATIVE_MESSAGE_PROTOCOL)) {
|
|
1636
|
-
throw new NativeMessageCapabilityError('createBinaryMessageChannel target has no native-message-v1 capability');
|
|
1637
|
-
}
|
|
1638
|
-
const maxMessageBytes = this.nativeBytes.messages.normalizeMaxMessageBytes(optionsArg.maxMessageBytes ?? NATIVE_MESSAGE_DEFAULT_MAX_LOGICAL_MESSAGE_BYTES);
|
|
1639
|
-
const authorizationBinding = authorizationAdapter.bind(optionsArg.authorization, Object.freeze({ target: peer, maxMessageBytes }));
|
|
1640
|
-
if (!authorizationBinding
|
|
1641
|
-
|| typeof authorizationBinding !== 'object'
|
|
1642
|
-
|| typeof Reflect.get(authorizationBinding, 'then') === 'function') {
|
|
1643
|
-
throw new TypeError('nativeMessageAuthorizationAdapter.bind() must return a synchronous binding');
|
|
1644
|
-
}
|
|
1645
|
-
return this.nativeBytes.messages.createReceiveGrant({
|
|
1646
|
-
target: peer,
|
|
1647
|
-
maxMessageBytes,
|
|
1648
|
-
principalId: authorizationBinding.principalId,
|
|
1649
|
-
credentialRevision: authorizationBinding.credentialRevision,
|
|
1650
|
-
configRevision: authorizationBinding.configRevision,
|
|
1651
|
-
bindingRevision: authorizationBinding.bindingRevision,
|
|
1652
|
-
revalidate: authorizationBinding.revalidate,
|
|
1653
|
-
});
|
|
1654
|
-
}
|
|
1655
1541
|
/**
|
|
1656
1542
|
* Gets the current connection status
|
|
1657
1543
|
*/
|
|
@@ -1681,7 +1567,7 @@ export class TypedSocket {
|
|
|
1681
1567
|
if (this.clientConnectionState) {
|
|
1682
1568
|
this.abortClientConnectionState(this.clientConnectionState, new Error('TypedSocket stopped'));
|
|
1683
1569
|
}
|
|
1684
|
-
this.
|
|
1570
|
+
this.virtualStreams.unbindClientConnection(websocket, generation, new Error('TypedSocket stopped'));
|
|
1685
1571
|
websocket.close();
|
|
1686
1572
|
this.websocket = null;
|
|
1687
1573
|
}
|
|
@@ -1689,6 +1575,7 @@ export class TypedSocket {
|
|
|
1689
1575
|
pendingRequest.reject(new Error('TypedSocket stopped'));
|
|
1690
1576
|
}
|
|
1691
1577
|
this.pendingRequests.clear();
|
|
1578
|
+
this.updateStatus('disconnected');
|
|
1692
1579
|
}
|
|
1693
1580
|
else {
|
|
1694
1581
|
this.serverStopping = true;
|
|
@@ -1701,15 +1588,19 @@ export class TypedSocket {
|
|
|
1701
1588
|
await Promise.all(pendingRequests.map((pendingRequest) => pendingRequest.cleanupComplete));
|
|
1702
1589
|
this.unsubscribeSmartServeConnectionClose?.();
|
|
1703
1590
|
this.unsubscribeSmartServeConnectionClose = null;
|
|
1704
|
-
this.
|
|
1591
|
+
this.virtualStreams.detachServer();
|
|
1705
1592
|
this.tagPolicyManager.setAttachedPeersProvider(undefined);
|
|
1706
1593
|
this.smartServeRef = null;
|
|
1707
1594
|
this.pendingServerRequestIdsByPeer.clear();
|
|
1708
1595
|
}
|
|
1709
|
-
for (const
|
|
1710
|
-
|
|
1596
|
+
for (const detachVirtualStreamResolver of this.detachVirtualStreamResolvers.reverse()) {
|
|
1597
|
+
detachVirtualStreamResolver();
|
|
1598
|
+
}
|
|
1599
|
+
this.detachVirtualStreamResolvers = [];
|
|
1600
|
+
for (const detachRequestGuard of this.detachIncomingRequestAuthorityGuards.reverse()) {
|
|
1601
|
+
detachRequestGuard();
|
|
1711
1602
|
}
|
|
1712
|
-
this.
|
|
1603
|
+
this.detachIncomingRequestAuthorityGuards = [];
|
|
1713
1604
|
for (const detachResponseAuthorityGuard of this.detachResponseAuthorityGuards.reverse()) {
|
|
1714
1605
|
detachResponseAuthorityGuard();
|
|
1715
1606
|
}
|
|
@@ -1719,14 +1610,12 @@ export class TypedSocket {
|
|
|
1719
1610
|
}
|
|
1720
1611
|
}
|
|
1721
1612
|
releaseServerComposition() {
|
|
1722
|
-
for (const detachLegacyPolicy of this.detachLegacyVirtualStreamPolicies.reverse()) {
|
|
1723
|
-
detachLegacyPolicy();
|
|
1724
|
-
}
|
|
1725
|
-
this.detachLegacyVirtualStreamPolicies = [];
|
|
1726
1613
|
for (const detachProtocolRouter of this.detachProtocolRouters.reverse()) {
|
|
1727
1614
|
detachProtocolRouter();
|
|
1728
1615
|
}
|
|
1729
1616
|
this.detachProtocolRouters = [];
|
|
1617
|
+
this.serverRoutingSurfaces.clear();
|
|
1618
|
+
this.serverTypedRouters = [];
|
|
1730
1619
|
}
|
|
1731
1620
|
// ============================================================================
|
|
1732
1621
|
// CLIENT-ONLY METHODS
|
|
@@ -1762,6 +1651,23 @@ export class TypedSocket {
|
|
|
1762
1651
|
// ============================================================================
|
|
1763
1652
|
// SERVER-ONLY METHODS
|
|
1764
1653
|
// ============================================================================
|
|
1654
|
+
/** Returns the transport-owned SmartServe routing surface for an application router. */
|
|
1655
|
+
getServerRoutingSurface(applicationRouterArg) {
|
|
1656
|
+
if (this.side !== 'server') {
|
|
1657
|
+
throw new Error('getServerRoutingSurface is only available on servers');
|
|
1658
|
+
}
|
|
1659
|
+
if (!applicationRouterArg) {
|
|
1660
|
+
if (this.serverTypedRouters.length !== 1) {
|
|
1661
|
+
throw new Error('Multi-router servers require an explicit application router');
|
|
1662
|
+
}
|
|
1663
|
+
return this.serverTypedRouters[0];
|
|
1664
|
+
}
|
|
1665
|
+
const routingSurface = this.serverRoutingSurfaces.get(applicationRouterArg);
|
|
1666
|
+
if (!routingSurface) {
|
|
1667
|
+
throw new Error('Application router is not owned by this TypedSocket server');
|
|
1668
|
+
}
|
|
1669
|
+
return routingSurface;
|
|
1670
|
+
}
|
|
1765
1671
|
/**
|
|
1766
1672
|
* Resolves the exact SmartServe transport peer for one incoming TypedRequest.
|
|
1767
1673
|
* Server handlers can pass their TypedTools argument without type assertions.
|
|
@@ -1771,7 +1677,7 @@ export class TypedSocket {
|
|
|
1771
1677
|
throw new Error('getServerConnectionForRequest is only available on servers');
|
|
1772
1678
|
}
|
|
1773
1679
|
const peer = this.findServerPeerFromRequest(typedToolsArg);
|
|
1774
|
-
if (!peer) {
|
|
1680
|
+
if (!peer || !this.isAttachedServerPeer(peer)) {
|
|
1775
1681
|
throw new Error('TypedSocket request is not bound to an attached transport peer');
|
|
1776
1682
|
}
|
|
1777
1683
|
return wrapSmartServePeer(peer);
|
|
@@ -1851,4 +1757,4 @@ export class TypedSocket {
|
|
|
1851
1757
|
return allResults[0];
|
|
1852
1758
|
}
|
|
1853
1759
|
}
|
|
1854
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50eXBlZHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMudHlwZWRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLDBCQUEwQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDOUYsT0FBTyxFQUNMLGdEQUFnRCxFQUNoRCx1QkFBdUIsRUFDdkIsNkJBQTZCLEdBQzlCLE1BQU0sK0JBQStCLENBQUM7QUFDdkMsT0FBTyxFQUNMLHlCQUF5QixFQUN6Qiw0QkFBNEIsR0FDN0IsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQUNuRSxPQUFPLEVBQ0wsMkJBQTJCLEVBQzNCLDhCQUE4QixFQUM5QiwrQkFBK0IsRUFDL0IsMkJBQTJCLEdBQzVCLE1BQU0sMENBQTBDLENBQUM7QUFDbEQsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDdkUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUNMLDZDQUE2QyxFQUM3QyxzREFBc0QsR0FDdkQsTUFBTSxrQ0FBa0MsQ0FBQztBQXlCMUMsTUFBTSxVQUFVLEdBQUcscUJBQXFCLENBQUM7QUFDekMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztBQUV0Qyx1RUFBdUU7QUFDdkUsd0VBQXdFO0FBQ3hFLHNFQUFzRTtBQUN0RSx3REFBd0Q7QUFDeEQsTUFBTSxDQUFDLE1BQU0sZ0NBQWdDLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDakUsTUFBTSxDQUFDLE1BQU0sa0NBQWtDLEdBQUcsRUFB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
|
|
1760
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy50eXBlZHNvY2tldC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3RzL2NsYXNzZXMudHlwZWRzb2NrZXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxLQUFLLE9BQU8sTUFBTSxjQUFjLENBQUM7QUFDeEMsT0FBTyxFQUNMLGdDQUFnQyxFQUNoQyx5QkFBeUIsRUFDekIsMEJBQTBCLEdBQzNCLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUNMLCtDQUErQyxFQUMvQyxvQkFBb0IsR0FDckIsTUFBTSxtQ0FBbUMsQ0FBQztBQUMzQyxPQUFPLEVBQ0wsaUNBQWlDLEVBQ2pDLCtCQUErQixHQUNoQyxNQUFNLGlDQUFpQyxDQUFDO0FBQ3pDLE9BQU8sRUFDTCwyQkFBMkIsRUFDM0IsOEJBQThCLEVBQzlCLCtCQUErQixFQUMvQiwyQkFBMkIsR0FDNUIsTUFBTSwwQ0FBMEMsQ0FBQztBQUNsRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN2RSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNwRSxPQUFPLEVBQ0wsNkNBQTZDLEVBQzdDLHNEQUFzRCxHQUN2RCxNQUFNLGtDQUFrQyxDQUFDO0FBbUIxQyxNQUFNLFVBQVUsR0FBRyxxQkFBcUIsQ0FBQztBQUN6QyxNQUFNLFdBQVcsR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFDO0FBRXRDLHVFQUF1RTtBQUN2RSx3RUFBd0U7QUFDeEUsc0VBQXNFO0FBQ3RFLHdEQUF3RDtBQUN4RCxNQUFNLENBQUMsTUFBTSxnQ0FBZ0MsR0FBRyxFQUFFLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqRSxNQUFNLENBQUMsTUFBTSxrQ0FBa0MsR0FBRyxFQUFFLENBQUM7QUFDckQsTUFBTSxDQUFDLE1BQU0saUNBQWlDLEdBQUcsRUFB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
|