@push.rocks/smartrust 1.7.1 → 1.9.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.
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@push.rocks/smartrust',
6
- version: '1.7.1',
6
+ version: '1.9.0',
7
7
  description: 'A type-safe bridge between JavaScript engines and Rust binaries.'
8
8
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvMDBfY29tbWl0aW5mb19kYXRhLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sVUFBVSxHQUFHO0lBQ3hCLElBQUksRUFBRSx1QkFBdUI7SUFDN0IsT0FBTyxFQUFFLE9BQU87SUFDaEIsV0FBVyxFQUFFLGtFQUFrRTtDQUNoRixDQUFBIn0=
@@ -14,6 +14,7 @@ export declare class RustBridge<TCommands extends TCommandMap = TCommandMap> ext
14
14
  private logger;
15
15
  private transport;
16
16
  private pendingRequests;
17
+ private pendingRequestReservationsByMethod;
17
18
  private requestCounter;
18
19
  private isRunning;
19
20
  private binaryPath;
@@ -70,5 +71,8 @@ export declare class RustBridge<TCommands extends TCommandMap = TCommandMap> ext
70
71
  private handleLine;
71
72
  private settlePendingRequest;
72
73
  private rejectAllPendingRequests;
74
+ private reservePendingRequest;
75
+ private releasePendingRequestReservation;
76
+ private getRequestAvailabilityError;
73
77
  private getErrorMessage;
74
78
  }
@@ -20,6 +20,7 @@ export class RustBridge extends plugins.events.EventEmitter {
20
20
  logger;
21
21
  transport = null;
22
22
  pendingRequests = new Map();
23
+ pendingRequestReservationsByMethod = new Map();
23
24
  requestCounter = 0;
24
25
  isRunning = false;
25
26
  binaryPath = null;
@@ -29,6 +30,20 @@ export class RustBridge extends plugins.events.EventEmitter {
29
30
  terminationPromise = null;
30
31
  constructor(options) {
31
32
  super();
33
+ if (options.inheritedFileDescriptors) {
34
+ for (const descriptor of options.inheritedFileDescriptors) {
35
+ if (!Number.isSafeInteger(descriptor) || descriptor < 0) {
36
+ throw new RangeError('RustBridge inheritedFileDescriptors values must be non-negative safe integers');
37
+ }
38
+ }
39
+ }
40
+ if (options.maxPendingRequestsByMethod) {
41
+ for (const [method, limit] of Object.entries(options.maxPendingRequestsByMethod)) {
42
+ if (!method || !Number.isSafeInteger(limit) || limit <= 0) {
43
+ throw new RangeError('RustBridge maxPendingRequestsByMethod values must be positive safe integers');
44
+ }
45
+ }
46
+ }
32
47
  this.logger = options.logger || defaultLogger;
33
48
  this.options = {
34
49
  cliArgs: ['--management'],
@@ -37,6 +52,12 @@ export class RustBridge extends plugins.events.EventEmitter {
37
52
  readyEventName: 'ready',
38
53
  maxPayloadSize: 50 * 1024 * 1024,
39
54
  ...options,
55
+ inheritedFileDescriptors: options.inheritedFileDescriptors
56
+ ? [...options.inheritedFileDescriptors]
57
+ : undefined,
58
+ maxPendingRequestsByMethod: options.maxPendingRequestsByMethod
59
+ ? { ...options.maxPendingRequestsByMethod }
60
+ : undefined,
40
61
  };
41
62
  this.locator = new RustBinaryLocator(options, this.logger);
42
63
  }
@@ -58,6 +79,7 @@ export class RustBridge extends plugins.events.EventEmitter {
58
79
  binaryPath,
59
80
  cliArgs: this.options.cliArgs,
60
81
  env: this.options.env,
82
+ inheritedFileDescriptors: this.options.inheritedFileDescriptors,
61
83
  maxPayloadSize: this.options.maxPayloadSize,
62
84
  logger: this.logger,
63
85
  });
@@ -71,6 +93,9 @@ export class RustBridge extends plugins.events.EventEmitter {
71
93
  * @param socketOptions - Optional socket connection options (reconnect, etc.)
72
94
  */
73
95
  connect(socketPath, socketOptions) {
96
+ if (this.options.inheritedFileDescriptors?.length) {
97
+ return Promise.reject(new Error('RustBridge inheritedFileDescriptors are available only with spawn()'));
98
+ }
74
99
  return this.activate(async () => new SocketTransport({
75
100
  socketPath,
76
101
  maxPayloadSize: this.options.maxPayloadSize,
@@ -306,52 +331,162 @@ export class RustBridge extends plugins.events.EventEmitter {
306
331
  cause: options.signal.reason,
307
332
  });
308
333
  }
309
- if (!this.transport?.connected || !this.isRunning) {
334
+ const transport = this.transport;
335
+ if (!transport?.connected || !this.isRunning) {
310
336
  throw new Error(`${this.options.binaryName} bridge is not running`);
311
337
  }
338
+ const lifecycleGeneration = this.lifecycleGeneration;
339
+ const admissionReservation = this.reservePendingRequest(method);
340
+ let reservationTransferred = false;
341
+ try {
342
+ const id = `req_${++this.requestCounter}`;
343
+ const request = { id, method, params };
344
+ const json = JSON.stringify(request);
345
+ const byteLength = Buffer.byteLength(json, 'utf8');
346
+ if (byteLength > this.options.maxPayloadSize) {
347
+ throw new Error(`Outbound message exceeds maxPayloadSize (${byteLength} > ${this.options.maxPayloadSize})`);
348
+ }
349
+ const availabilityError = this.getRequestAvailabilityError(method, options?.signal, transport, lifecycleGeneration);
350
+ if (availabilityError) {
351
+ throw availabilityError;
352
+ }
353
+ return new Promise((resolve, reject) => {
354
+ const pending = {
355
+ resolve,
356
+ reject,
357
+ timer: null,
358
+ method,
359
+ abortSignal: options?.signal,
360
+ admissionReservation,
361
+ };
362
+ this.pendingRequests.set(id, pending);
363
+ reservationTransferred = true;
364
+ try {
365
+ if (options?.signal) {
366
+ pending.abortHandler = () => {
367
+ this.settlePendingRequest(id, {
368
+ outcome: 'reject',
369
+ error: new RustBridgeRequestError(`Command '${method}' was aborted`, {
370
+ code: 'ERR_RUST_BRIDGE_REQUEST_ABORTED',
371
+ requestId: id,
372
+ method,
373
+ cause: options.signal?.reason,
374
+ }),
375
+ });
376
+ };
377
+ options.signal.addEventListener('abort', pending.abortHandler, { once: true });
378
+ if (options.signal.aborted) {
379
+ pending.abortHandler();
380
+ return;
381
+ }
382
+ }
383
+ pending.timer = setTimeout(() => {
384
+ this.settlePendingRequest(id, {
385
+ outcome: 'reject',
386
+ error: new RustBridgeRequestError(`Command '${method}' timed out after ${timeoutMs}ms`, {
387
+ code: 'ERR_RUST_BRIDGE_REQUEST_TIMEOUT',
388
+ requestId: id,
389
+ method,
390
+ }),
391
+ });
392
+ }, timeoutMs);
393
+ const currentAvailabilityError = this.getRequestAvailabilityError(method, options?.signal, transport, lifecycleGeneration, id);
394
+ if (currentAvailabilityError) {
395
+ this.settlePendingRequest(id, {
396
+ outcome: 'reject',
397
+ error: currentAvailabilityError,
398
+ });
399
+ return;
400
+ }
401
+ void transport.write(json + '\n').catch((err) => {
402
+ this.settlePendingRequest(id, {
403
+ outcome: 'reject',
404
+ error: new RustBridgeRequestError(`Failed to write to transport: ${this.getErrorMessage(err)}`, {
405
+ code: 'ERR_RUST_BRIDGE_REQUEST_WRITE',
406
+ requestId: id,
407
+ method,
408
+ cause: err,
409
+ }),
410
+ });
411
+ });
412
+ }
413
+ catch (err) {
414
+ this.settlePendingRequest(id, {
415
+ outcome: 'reject',
416
+ error: err instanceof RustBridgeRequestError
417
+ ? err
418
+ : new RustBridgeRequestError(`Failed to write to transport: ${this.getErrorMessage(err)}`, {
419
+ code: 'ERR_RUST_BRIDGE_REQUEST_WRITE',
420
+ requestId: id,
421
+ method,
422
+ cause: err,
423
+ }),
424
+ });
425
+ }
426
+ });
427
+ }
428
+ finally {
429
+ if (!reservationTransferred) {
430
+ this.releasePendingRequestReservation(admissionReservation);
431
+ }
432
+ }
433
+ }
434
+ /**
435
+ * Send a streaming command to the Rust process.
436
+ * Returns a StreamingResponse that yields chunks via `for await...of`
437
+ * and exposes `.result` for the final response.
438
+ */
439
+ sendCommandStreaming(method, params) {
440
+ const streaming = new StreamingResponse();
312
441
  const transport = this.transport;
313
- const id = `req_${++this.requestCounter}`;
314
- const request = { id, method, params };
315
- const json = JSON.stringify(request);
316
- // Check outbound payload size
317
- const byteLength = Buffer.byteLength(json, 'utf8');
318
- if (byteLength > this.options.maxPayloadSize) {
319
- throw new Error(`Outbound message exceeds maxPayloadSize (${byteLength} > ${this.options.maxPayloadSize})`);
320
- }
321
- return new Promise((resolve, reject) => {
322
- const pending = {
323
- resolve,
324
- reject,
442
+ if (!transport?.connected || !this.isRunning) {
443
+ streaming.fail(new Error(`${this.options.binaryName} bridge is not running`));
444
+ return streaming;
445
+ }
446
+ const lifecycleGeneration = this.lifecycleGeneration;
447
+ let admissionReservation;
448
+ let reservationTransferred = false;
449
+ let requestId;
450
+ try {
451
+ admissionReservation = this.reservePendingRequest(method);
452
+ const id = `req_${++this.requestCounter}`;
453
+ requestId = id;
454
+ const request = { id, method, params };
455
+ const json = JSON.stringify(request);
456
+ const byteLength = Buffer.byteLength(json, 'utf8');
457
+ if (byteLength > this.options.maxPayloadSize) {
458
+ throw new Error(`Outbound message exceeds maxPayloadSize (${byteLength} > ${this.options.maxPayloadSize})`);
459
+ }
460
+ const availabilityError = this.getRequestAvailabilityError(method, undefined, transport, lifecycleGeneration);
461
+ if (availabilityError) {
462
+ throw availabilityError;
463
+ }
464
+ this.pendingRequests.set(id, {
465
+ resolve: (result) => streaming.finish(result),
466
+ reject: (error) => streaming.fail(error),
325
467
  timer: null,
326
468
  method,
327
- abortSignal: options?.signal,
328
- };
329
- this.pendingRequests.set(id, pending);
330
- if (options?.signal) {
331
- pending.abortHandler = () => {
469
+ streaming,
470
+ admissionReservation,
471
+ });
472
+ reservationTransferred = true;
473
+ try {
474
+ const timeoutMs = this.options.streamTimeoutMs ?? this.options.requestTimeoutMs;
475
+ const pending = this.pendingRequests.get(id);
476
+ pending.timer = setTimeout(() => {
332
477
  this.settlePendingRequest(id, {
333
478
  outcome: 'reject',
334
- error: new RustBridgeRequestError(`Command '${method}' was aborted`, {
335
- code: 'ERR_RUST_BRIDGE_REQUEST_ABORTED',
336
- requestId: id,
337
- method,
338
- cause: options.signal?.reason,
339
- }),
479
+ error: new Error(`Streaming command '${method}' timed out after ${timeoutMs}ms`),
340
480
  });
341
- };
342
- options.signal.addEventListener('abort', pending.abortHandler, { once: true });
343
- }
344
- pending.timer = setTimeout(() => {
345
- this.settlePendingRequest(id, {
346
- outcome: 'reject',
347
- error: new RustBridgeRequestError(`Command '${method}' timed out after ${timeoutMs}ms`, {
348
- code: 'ERR_RUST_BRIDGE_REQUEST_TIMEOUT',
349
- requestId: id,
350
- method,
351
- }),
352
- });
353
- }, timeoutMs);
354
- try {
481
+ }, timeoutMs);
482
+ const currentAvailabilityError = this.getRequestAvailabilityError(method, undefined, transport, lifecycleGeneration, id);
483
+ if (currentAvailabilityError) {
484
+ this.settlePendingRequest(id, {
485
+ outcome: 'reject',
486
+ error: currentAvailabilityError,
487
+ });
488
+ return streaming;
489
+ }
355
490
  void transport.write(json + '\n').catch((err) => {
356
491
  this.settlePendingRequest(id, {
357
492
  outcome: 'reject',
@@ -367,62 +502,33 @@ export class RustBridge extends plugins.events.EventEmitter {
367
502
  catch (err) {
368
503
  this.settlePendingRequest(id, {
369
504
  outcome: 'reject',
370
- error: new RustBridgeRequestError(`Failed to write to transport: ${this.getErrorMessage(err)}`, {
371
- code: 'ERR_RUST_BRIDGE_REQUEST_WRITE',
372
- requestId: id,
373
- method,
374
- cause: err,
375
- }),
505
+ error: err instanceof RustBridgeRequestError
506
+ ? err
507
+ : new RustBridgeRequestError(`Failed to write to transport: ${this.getErrorMessage(err)}`, {
508
+ code: 'ERR_RUST_BRIDGE_REQUEST_WRITE',
509
+ requestId: id,
510
+ method,
511
+ cause: err,
512
+ }),
376
513
  });
377
514
  }
378
- });
379
- }
380
- /**
381
- * Send a streaming command to the Rust process.
382
- * Returns a StreamingResponse that yields chunks via `for await...of`
383
- * and exposes `.result` for the final response.
384
- */
385
- sendCommandStreaming(method, params) {
386
- const streaming = new StreamingResponse();
387
- if (!this.transport?.connected || !this.isRunning) {
388
- streaming.fail(new Error(`${this.options.binaryName} bridge is not running`));
389
- return streaming;
390
- }
391
- const id = `req_${++this.requestCounter}`;
392
- const request = { id, method, params };
393
- const json = JSON.stringify(request);
394
- const byteLength = Buffer.byteLength(json, 'utf8');
395
- if (byteLength > this.options.maxPayloadSize) {
396
- streaming.fail(new Error(`Outbound message exceeds maxPayloadSize (${byteLength} > ${this.options.maxPayloadSize})`));
397
- return streaming;
398
515
  }
399
- const timeoutMs = this.options.streamTimeoutMs ?? this.options.requestTimeoutMs;
400
- const timer = setTimeout(() => {
401
- this.settlePendingRequest(id, {
402
- outcome: 'reject',
403
- error: new Error(`Streaming command '${method}' timed out after ${timeoutMs}ms`),
404
- });
405
- }, timeoutMs);
406
- this.pendingRequests.set(id, {
407
- resolve: (result) => streaming.finish(result),
408
- reject: (error) => streaming.fail(error),
409
- timer,
410
- method,
411
- streaming,
412
- });
413
- try {
414
- void this.transport.write(json + '\n').catch((err) => {
415
- this.settlePendingRequest(id, {
516
+ catch (err) {
517
+ const error = err instanceof Error ? err : new Error(this.getErrorMessage(err));
518
+ if (reservationTransferred && requestId) {
519
+ this.settlePendingRequest(requestId, {
416
520
  outcome: 'reject',
417
- error: new Error(`Failed to write to transport: ${this.getErrorMessage(err)}`),
521
+ error,
418
522
  });
419
- });
523
+ }
524
+ else {
525
+ streaming.fail(error);
526
+ }
420
527
  }
421
- catch (err) {
422
- this.settlePendingRequest(id, {
423
- outcome: 'reject',
424
- error: new Error(`Failed to write to transport: ${this.getErrorMessage(err)}`),
425
- });
528
+ finally {
529
+ if (!reservationTransferred) {
530
+ this.releasePendingRequestReservation(admissionReservation);
531
+ }
426
532
  }
427
533
  return streaming;
428
534
  }
@@ -588,6 +694,7 @@ export class RustBridge extends plugins.events.EventEmitter {
588
694
  return false;
589
695
  }
590
696
  this.pendingRequests.delete(id);
697
+ this.releasePendingRequestReservation(pending.admissionReservation);
591
698
  if (pending.timer) {
592
699
  clearTimeout(pending.timer);
593
700
  pending.timer = null;
@@ -619,8 +726,62 @@ export class RustBridge extends plugins.events.EventEmitter {
619
726
  });
620
727
  }
621
728
  }
729
+ reservePendingRequest(method) {
730
+ const configuredLimits = this.options.maxPendingRequestsByMethod;
731
+ const limit = configuredLimits
732
+ && Object.prototype.hasOwnProperty.call(configuredLimits, method)
733
+ ? configuredLimits[method]
734
+ : undefined;
735
+ if (limit === undefined) {
736
+ return undefined;
737
+ }
738
+ const currentCount = this.pendingRequestReservationsByMethod.get(method) || 0;
739
+ if (currentCount >= limit) {
740
+ throw new RustBridgeRequestError(`Command '${method}' reached its pending request limit of ${limit}`, {
741
+ code: 'ERR_RUST_BRIDGE_REQUEST_LIMIT',
742
+ method,
743
+ });
744
+ }
745
+ this.pendingRequestReservationsByMethod.set(method, currentCount + 1);
746
+ return { method, released: false };
747
+ }
748
+ releasePendingRequestReservation(reservation) {
749
+ if (!reservation || reservation.released) {
750
+ return;
751
+ }
752
+ reservation.released = true;
753
+ const currentCount = this.pendingRequestReservationsByMethod.get(reservation.method) || 0;
754
+ if (currentCount <= 1) {
755
+ this.pendingRequestReservationsByMethod.delete(reservation.method);
756
+ }
757
+ else {
758
+ this.pendingRequestReservationsByMethod.set(reservation.method, currentCount - 1);
759
+ }
760
+ }
761
+ getRequestAvailabilityError(method, signal, transport, lifecycleGeneration, requestId) {
762
+ if (signal?.aborted) {
763
+ return new RustBridgeRequestError(`Command '${method}' was aborted before it was sent`, {
764
+ code: 'ERR_RUST_BRIDGE_REQUEST_ABORTED',
765
+ requestId,
766
+ method,
767
+ cause: signal.reason,
768
+ });
769
+ }
770
+ if (this.lifecycleState !== 'ready'
771
+ || !this.isRunning
772
+ || this.lifecycleGeneration !== lifecycleGeneration
773
+ || this.transport !== transport
774
+ || !transport.connected) {
775
+ return new RustBridgeRequestError(`Command '${method}' could not be sent because the bridge lifecycle changed`, {
776
+ code: 'ERR_RUST_BRIDGE_REQUEST_TRANSPORT',
777
+ requestId,
778
+ method,
779
+ });
780
+ }
781
+ return null;
782
+ }
622
783
  getErrorMessage(error) {
623
784
  return error instanceof Error ? error.message : String(error);
624
785
  }
625
786
  }
626
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0YnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5ydXN0YnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFpQi9ELE1BQU0sYUFBYSxHQUFzQjtJQUN2QyxHQUFHLEtBQUksQ0FBQztDQUNULENBQUM7QUFzQkY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFVBQXdELFNBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQzlGLE9BQU8sQ0FBb0I7SUFDM0IsT0FBTyxDQUFtSjtJQUMxSixNQUFNLENBQW9CO0lBQzFCLFNBQVMsR0FBcUMsSUFBSSxDQUFDO0lBQ25ELGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUNyRCxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsVUFBVSxHQUFrQixJQUFJLENBQUM7SUFDakMsY0FBYyxHQUE4QixNQUFNLENBQUM7SUFDbkQsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGlCQUFpQixHQUE0QixJQUFJLENBQUM7SUFDbEQsa0JBQWtCLEdBQXlCLElBQUksQ0FBQztJQUV4RCxZQUFZLE9BQTJCO1FBQ3JDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxDQUFDLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxJQUFJLGFBQWEsQ0FB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
787
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0YnJpZGdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5ydXN0YnJpZGdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sS0FBSyxPQUFPLE1BQU0sY0FBYyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHFDQUFxQyxDQUFDO0FBQzdFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLGdDQUFnQyxDQUFDO0FBQ25FLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFpQi9ELE1BQU0sYUFBYSxHQUFzQjtJQUN2QyxHQUFHLEtBQUksQ0FBQztDQUNULENBQUM7QUE0QkY7Ozs7OztHQU1HO0FBQ0gsTUFBTSxPQUFPLFVBQXdELFNBQVEsT0FBTyxDQUFDLE1BQU0sQ0FBQyxZQUFZO0lBQzlGLE9BQU8sQ0FBb0I7SUFDM0IsT0FBTyxDQUFtSjtJQUMxSixNQUFNLENBQW9CO0lBQzFCLFNBQVMsR0FBcUMsSUFBSSxDQUFDO0lBQ25ELGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBMkIsQ0FBQztJQUNyRCxrQ0FBa0MsR0FBRyxJQUFJLEdBQUcsRUFBa0IsQ0FBQztJQUMvRCxjQUFjLEdBQUcsQ0FBQyxDQUFDO0lBQ25CLFNBQVMsR0FBRyxLQUFLLENBQUM7SUFDbEIsVUFBVSxHQUFrQixJQUFJLENBQUM7SUFDakMsY0FBYyxHQUE4QixNQUFNLENBQUM7SUFDbkQsbUJBQW1CLEdBQUcsQ0FBQyxDQUFDO0lBQ3hCLGlCQUFpQixHQUE0QixJQUFJLENBQUM7SUFDbEQsa0JBQWtCLEdBQXlCLElBQUksQ0FBQztJQUV4RCxZQUFZLE9BQTJCO1FBQ3JDLEtBQUssRUFBRSxDQUFDO1FBQ1IsSUFBSSxPQUFP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
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Stable error codes for failures while waiting for a Rust bridge request.
3
3
  */
4
- export type TRustBridgeRequestErrorCode = 'ERR_RUST_BRIDGE_REQUEST_TIMEOUT' | 'ERR_RUST_BRIDGE_REQUEST_ABORTED' | 'ERR_RUST_BRIDGE_REQUEST_WRITE' | 'ERR_RUST_BRIDGE_REQUEST_TRANSPORT' | 'ERR_RUST_BRIDGE_REQUEST_RUST_RESPONSE';
4
+ export type TRustBridgeRequestErrorCode = 'ERR_RUST_BRIDGE_REQUEST_TIMEOUT' | 'ERR_RUST_BRIDGE_REQUEST_ABORTED' | 'ERR_RUST_BRIDGE_REQUEST_LIMIT' | 'ERR_RUST_BRIDGE_REQUEST_WRITE' | 'ERR_RUST_BRIDGE_REQUEST_TRANSPORT' | 'ERR_RUST_BRIDGE_REQUEST_RUST_RESPONSE';
5
5
  export interface IRustBridgeRequestErrorOptions {
6
6
  code: TRustBridgeRequestErrorCode;
7
7
  responseErrorCode?: string;
@@ -13,8 +13,8 @@ export interface IRustBridgeRequestErrorOptions {
13
13
  * Error raised while preparing or waiting for a Rust bridge request.
14
14
  *
15
15
  * Existing error messages are preserved while `code` provides a stable way to
16
- * distinguish timeout, cancellation, transport, write, and Rust response
17
- * failures.
16
+ * distinguish admission, timeout, cancellation, transport, write, and Rust
17
+ * response failures.
18
18
  */
19
19
  export declare class RustBridgeRequestError extends Error {
20
20
  readonly code: TRustBridgeRequestErrorCode;
@@ -2,8 +2,8 @@
2
2
  * Error raised while preparing or waiting for a Rust bridge request.
3
3
  *
4
4
  * Existing error messages are preserved while `code` provides a stable way to
5
- * distinguish timeout, cancellation, transport, write, and Rust response
6
- * failures.
5
+ * distinguish admission, timeout, cancellation, transport, write, and Rust
6
+ * response failures.
7
7
  */
8
8
  export class RustBridgeRequestError extends Error {
9
9
  code;
@@ -19,4 +19,4 @@ export class RustBridgeRequestError extends Error {
19
19
  this.method = options.method;
20
20
  }
21
21
  }
22
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0YnJpZGdlcmVxdWVzdGVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5ydXN0YnJpZGdlcmVxdWVzdGVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQWtCQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsS0FBSztJQUMvQixJQUFJLENBQThCO0lBQ2xDLGlCQUFpQixDQUFVO0lBQzNCLFNBQVMsQ0FBVTtJQUNuQixNQUFNLENBQVU7SUFFaEMsWUFBWSxPQUFlLEVBQUUsT0FBdUM7UUFDbEUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztDQUNGIn0=
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xhc3Nlcy5ydXN0YnJpZGdlcmVxdWVzdGVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHMvY2xhc3Nlcy5ydXN0YnJpZGdlcmVxdWVzdGVycm9yLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQW1CQTs7Ozs7O0dBTUc7QUFDSCxNQUFNLE9BQU8sc0JBQXVCLFNBQVEsS0FBSztJQUMvQixJQUFJLENBQThCO0lBQ2xDLGlCQUFpQixDQUFVO0lBQzNCLFNBQVMsQ0FBVTtJQUNuQixNQUFNLENBQVU7SUFFaEMsWUFBWSxPQUFlLEVBQUUsT0FBdUM7UUFDbEUsS0FBSyxDQUFDLE9BQU8sRUFBRSxPQUFPLENBQUMsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssRUFBRSxPQUFPLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUNuRixJQUFJLENBQUMsSUFBSSxHQUFHLHdCQUF3QixDQUFDO1FBQ3JDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztRQUN6QixJQUFJLENBQUMsaUJBQWlCLEdBQUcsT0FBTyxDQUFDLGlCQUFpQixDQUFDO1FBQ25ELElBQUksQ0FBQyxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztRQUNuQyxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7SUFDL0IsQ0FBQztDQUNGIn0=
@@ -5,6 +5,7 @@ export interface IStdioTransportOptions {
5
5
  binaryPath: string;
6
6
  cliArgs: string[];
7
7
  env?: Record<string, string>;
8
+ inheritedFileDescriptors?: readonly number[];
8
9
  maxPayloadSize: number;
9
10
  logger: IRustBridgeLogger;
10
11
  }